2013-01-04 7 views
5

मैं 2. मेरे वर्तमान, सरल (और काम) का निर्माण प्रणाली उदात्त पाठ में knitr/Sweave के लिए एक निर्माण प्रणाली बनाने का प्रयास कर रहा हूँ इस प्रकार है:एक और निर्माण प्रणाली से उदात्त पाठ में प्रवेश निर्माण प्रणाली 2

{ 
    "cmd": ["bash", "-c", "/usr/bin/R64 CMD Sweave '${file_name}' && pdflatex '${file_base_name}.tex' -interaction=nonstopmode -synctex=1 %S -f -pdf && /Applications/Skim.app/Contents/MacOS/Skim '${file_base_name}.pdf'"], 
    "path": "$PATH:/usr/texbin:/usr/local/bin", 
    "selector": "text.tex.latex.sweave","shell":false, 
    "file_regex": "^(...*?):([0-9]+): ([0-9]*)([^\\.]+)" 
} 

निर्माण प्रणाली एक .Rnw फ़ाइल लेता है, टेक्स में बदल देता है, और उसके बाद उस पर pdflatex रन (text.text.latex.sweave संदर्भ Sweave Textmate बंडल, जो उदात्त पाठ में काम करता है के प्रकार में परिभाषित किया गया है)। यह बिल्ड सिस्टम काम करता है, लेकिन यह स्किम खोलने में काफी सीमित है (यह सिर्फ पीडीएफ खोलता है-यह सब कुछ है)। LaTeXTools सब्लिमे टेक्स्ट पैकेज कहीं अधिक मजबूत है और संशोधित लाइनों को हाइलाइट करते हुए स्कीम की जादू रिवर्स सर्च प्रदान करते समय स्कीम खुलता/ताज़ा करता है।

मैं लाटेक्स्टूल बिल्ड सिस्टम को फिर से लिखना नहीं चाहता, खासकर जब से यह एक भारी पायथन स्क्रिप्ट के साथ भारी भारोत्तोलन (और स्किम जादू) का अधिकांश हिस्सा करता है। हालांकि, मैं वास्तव में स्वीवे से उत्पन्न एक टीएक्स फ़ाइल बनाने के लिए इसका उपयोग करने में सक्षम होना चाहूंगा।

आदर्श रूप में, मुझे किसी भी तरह से निर्माण प्रणाली को घोंसला करना पसंद है- .Rnw फ़ाइल को टीएक्स में परिवर्तित करें और फिर तुरंत लाटेक्स्टूल बिल्ड सिस्टम चलाएं जो पहले से मौजूद है। स्यूडोकोड में:

{ 
    [CONVERT RNW TO ${file_name}.tex && RUN THE LATEXTOOLS BUILD SYSTEM ON ${file_name}.tex] 
} 

यह एक और निर्माण प्रणाली के अंदर से एक का निर्माण प्रणाली का उपयोग करने (या वैकल्पिक रूप से पार्टी से निर्माण प्रणाली का उपयोग) संभव है?

+0

कम से कम रिवर्स सर्च पार्ट मुश्किल हो सकता है, और यही वह जगह है जहां आरस्टूडियो ने इसे काम करने के लिए काफी प्रयास किए हैं; 'बुनाई' भाग के लिए, शायद यह काम करता है: '"cmd": ["प्रतिलेख", "-e", "knitr :: knit (' $ {file_name} ')"]' और बाकी का काम आपका है प्रश्न: लाटेक्स्टूल को कैसे कॉल करें? मैं सब्लिमे टेक्स्ट का उपयोग नहीं करता, इसलिए मुझे नहीं पता ... –

+0

हाँ, मैं रूस्टूडियो (जितना मुझे पसंद करता हूं) से दूर जाने की कोशिश कर रहा हूं, क्योंकि सब्लिमे टेक्स्ट एक बेहतर संपादक है। मुझे एक भाषा परिभाषा है और बुनाई के लिए सिस्टम भी बनाया गया है, लेकिन यह भी एक ही समस्या है- मैं LaTeXTools की अधिक मजबूत बिल्ड सिस्टम का उपयोग करके संकलित टीएक्स फ़ाइल (या तो स्वीवे या बुनाई से बना) कैसे बना सकता हूं? – Andrew

+0

मैं [प्यार] (https://github.com/yihui/knitr/issues/449) समाधान को जानने के लिए भी :) :) –

उत्तर

4

यह आरएनडब्ल्यू फाइलों से निपटने के लिए लेटेक्सटूल प्लगइन में दो फाइलों और लेटेक्स प्लगइन में एक पैच है ताकि आरएनडब्ल्यू फाइलें लाटेक्स फाइलों की तरह व्यवहार कर सकें।

पहले लेटेक्स प्लगइन करने के लिए पैच, विशिष्ट में फ़ाइल LaTeX.tmLanguage रहे हैं:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>fileTypes</key> 
    <array> 
     <string>tex</string> 
     <string>Rnw</string> 
    </array> 

का निरीक्षण करें कि कैसे मैं आदेश RNW एक्सटेंशन से निपटने के लिए सरणी के लिए एक तत्व जोड़े।

अब पैच इस

if self.tex_ext.upper() != ".TEX": 
    sublime.error_message("%s is not a TeX source file: cannot compile." % (os.path.basename(view.file_name()),)) 
    return 

की तरह आ लाइन के लिए

नज़र makePDF.py और

if (self.tex_ext.upper() != ".TEX") and (self.tex_ext.upper() != ".RNW"): 
    sublime.error_message("%s is not a TeX or Rnw source file: cannot compile." % (os.path.basename(view.file_name()),)) 
    return 

से बदलने के लिए फिर

os.chdir(tex_dir) 
CmdThread(self).start() 
print threading.active_count() 
तरह की एक पंक्ति के लिए देखो

और प्रतिस्थापित करें यह

os.chdir(tex_dir) 
if self.tex_ext.upper() == ".RNW": 
    # Run Rscript -e "library(knitr); knit('" + self.file_name + "')" 
    os.system("Rscript -e \"library(knitr); knit('"+ self.file_name +"')\"") 
    self.file_name = self.tex_base + ".tex" 
    self.tex_ext = ".tex" 
CmdThread(self).start() 
print threading.active_count() 

पिछले पैच के साथ फाइल करने के लिए jumpToPDF.py

if (texExt.upper() != ".TEX") and (texExt.upper() != ".RNW"): 
    sublime.error_message("%s is not a TeX or Rnw source file: cannot jump." % (os.path.basename(view.fileName()),)) 
    return 

गुड लक के साथ एक पंक्ति

if texExt.upper() != ".TEX": 
    sublime.error_message("%s is not a TeX source file: cannot jump." % (os.path.basename(view.fileName()),)) 
    return 

और इसे बदलना के लिए रंग-रूप है!

+0

पवित्र बकवास! यह पूर्ण है! धन्यवाद! – Andrew

+0

क्या आपको बुरा लगता है अगर मैं इसे थोड़ा साफ करता हूं (यानी मेरी बुनाई भाषा परिभाषा इत्यादि के साथ गठबंधन करें) और इसे लाटेक्स टूल्स रिपोजिटरी के पुल अनुरोध के रूप में जमा करें? – Andrew

+0

बिलकुल नहीं, मेरे पास सिंटैक्स हाइलाइट और मान्यता प्राप्त करने के लिए एक और अतिरिक्त है। –

1

आवश्यक परिवर्तनों के विस्तृत विवरण के लिए धन्यवाद Herberto!

मैं अभी आगे बढ़ गया और उल्लिखित फ़ाइलों को बदल दिया। सब कुछ एक आकर्षण की तरह काम करता है! एक बात यह है कि, यह सुनिश्चित नहीं है कि यह आवश्यक है, लेकिन मैंने उन्हें संपादित करने के बाद दोनों python फ़ाइलों को .pyc में दोबारा बनाया।

python -m py_compile makePDF.py 

नौकरी करता है। किसी को भी, लाइन

print threading.active_count() 

जबकि recompiling पर एक "अमान्य सिंटैक्स त्रुटि" में चलाने चाहिए बस से बदलने: के बाद से LaTeXTools का लॉग पार्सर केवल लॉग फ़ाइलों से त्रुटियां नहीं दिखाती

print(threading.active_count()) 

इसके अलावा , हम भी knitr आउटपुट देखने में रुचि हो सकती है। आप को बदल कर एक अलग लॉग फ़ाइल में संग्रहीत कर सकते हैं:

साथ
os.system("Rscript -e \"library(knitr); knit('"+ self.file_name +"')\"") 

:

knitcmd = "/usr/bin/Rscript -e \"library(knitr); knit('"+ self.file_name +"')\"" 
    process = subprocess.Popen(knitcmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 
    #Launch the shell command: 
    knit_output, knit_error = process.communicate() 
    #store results in a log 
    knit_log = open(self.tex_base + "_knitrbuild.log", "w") 
    knit_log.write(knit_output) 
    knit_log.write(knit_error) 
    knit_log.close() 

इससे पहले कि मैं एक साधारण बैश स्क्रिप्ट का उपयोग किया गया था दस्तावेजों (मैक विशिष्ट) के निर्माण के लिए:

#!/bin/bash 
[ $# -eq 0 ] && { echo "Usage: $0 file.Rnw for knitting"; exit 1; } 
rnw="library(knitr);knit("\'"$1.Rnw"\'")" 
echo "Rscript executing:" $rnw 
tex="$1.tex" 
pdf="$1.pdf" 
Rscript -e $rnw && pdflatex $tex && pdflatex $tex && open -a Preview $pdf 

retval=$? 
[ $retval -eq 0 ] && echo "$rnw knitted and $pdf ready" 

लेकिन लाटेक्स्टूल को कस्टमाइज़ करने में सक्षम होने और स्कीम समर्थन के साथ सीधे एसटी 2 से इसे चलाने में सक्षम होना बहुत अच्छा है।

क्या कोई कारण है कि आप सीधे अपने पैकेज स्रोत में उल्लिखित परिवर्तनों को जोड़ना नहीं चाहते हैं? (शायद मेरा यह केवल मेरा संस्करण है जो बहुत पुराना है।)

+0

पर शामिल किया है, मैं परिवर्तन नहीं कर सकता सीधे एसटी पैकेज में क्योंकि वे सभी LaTeXTools पैकेज से निपटते हैं, जिन पर मेरा कोई नियंत्रण नहीं है। [वास्तविक एसटी पैकेज] में (https://github.com/andrewheiss/SublimeKnitr) मैं मैन्युअल रूप से पैचिंग की प्रक्रिया की व्याख्या करता हूं (अब एसटी 2 और 3 दोनों के लिए)। इसके अतिरिक्त, आप [लेटेक्सिंग] (http://www.latexing.com/) नामक एक नए पैकेज का उपयोग कर सकते हैं जिसमें बुनाई और स्किम के लिए अंतर्निहित समर्थन है। – Andrew

+0

ओह, और एसटी को फ़ाइलों को स्वचालित रूप से '.pyc' में संकलित करना चाहिए। – Andrew

संबंधित मुद्दे