2013-01-04 4 views
5

私は崇高なテキストでknitr /はSweaveのためのビルドシステムを作成しようとしています2.私の、現在の簡単な(と作業)ビルドシステムは、次のとおりです。アクセス崇高なテキスト内の別のビルドシステムからのビルドシステム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ファイルを取るのTeXに変換し、それにpdflatexを実行

(​​コンテキストは崇高なテキストでの作品の種類はSweave TextMateのバンドルで定義されます)。このビルドシステムは機能しますが、Skimを開く方法はかなり制限されています(PDFを開くだけです)。 LaTeXTools Sublime Textパッケージははるかに堅牢で、変更された行を強調表示し、Skimの魔法の逆検索を提供しながら、Skimを開いたり更新したりします。

LaTeXToolsビルドシステムを書き直したいとは思わない。特に、Pythonスクリプトを別にして大量に持ち上げる(スキムマジック)ことが多いからです。しかし、私はSweaveから生成されたTeXファイルを構築するためにそれを使用できるようにしたいと考えています。

理想的には、.RnwファイルをTeXに変換し、すぐに既存のLaTeXToolsビルドシステムを実行することができます。擬似コードで:

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

は、それが(bashのからビルドシステムにアクセスし、代替的又は)他のビルドシステム内からのビルドシステムにアクセスすることは可能ですか?

+0

少なくとも逆の検索部分は難しいかもしれませんが、それはRStudioがそれを動作させるためにかなりの努力をしているところです。 '' cmd '': "" Rscript "、" -e "、" knitr :: knit( '$ {file_name}') "]'のようになります。質問:LaTeXToolsを呼び出す方法は?私は崇高なテキストを使用しないので、わかりません... –

+0

崇高なテキストは優れたエディタなので、ええと、私はRStudioから離れようとしています。私は言語定義とknitr用のシステムを構築していますが、同じ問題があります.LaTeXToolsのより堅牢なビルドシステムを使用して、コンパイル済みのTeXファイル(Sweaveまたはknitrのいずれか)をビルドするにはどうすればいいですか? – Andrew

+0

解決策を知るには[https://github.com/yihui/knitr/issues/449]愛しています:) –

答えて

4

これは、Rnwファイルを処理するためのLatexToolsプラグインの2つのファイルへのパッチで、RnwファイルをLaTeXファイルのように動作させるためのLatexプラグインへの1つのパッチです。

まずファイル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 

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 

に置き換える様AAライン用のパッチmakePDF.py

の外観はその後

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": 
    sublime.error_message("%s is not a TeX source file: cannot jump." % (os.path.basename(view.fileName()),)) 
    return 

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 

幸運に置き換えることであるとのこと!

+0

すごい!これは完璧です!ありがとう! – Andrew

+0

これを少しきれいにする(つまり、私のknitr言語定義などと組み合わせて)プルリクエストとしてLaTeX Toolsリポジトリに提出しても構いませんか? – Andrew

+0

構文を強調表示して認識させるために、私はもう一つの追加があります。 –

1

必要な変更の詳細についてはお問い合わせいただきありがとうございますHerberto!

私は先ほど説明したファイルを変更しました。すべてが魅力のように機能します! しかし、それが必要なのかどうかは分かりませんが、編集後に両方のpythonファイルを.pycに再コンパイルしました。

python -m py_compile makePDF.py 

ジョブを実行します。再コンパイルしながら、誰もがライン

print threading.active_count() 

で「無効な構文エラー」に実行する必要があり、ただでそれを置き換える:

print(threading.active_count()) 

また、LaTeXToolsのログパーサがログファイルのみからエラーが表示されますので、 、私たちはニットの出力も見ることに興味があるかもしれません。私は(特定のMac用)のドキュメントを構築するために、簡単なbashスクリプトを使用していた前

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" 

しかし、LaTeXToolsをカスタマイズして、Skimサポート付きのST2から直接実行することは非常にうれしいです。

あなたが変更した変更をパッケージソースに直接追加したくない理由はありますか? (おそらく私のバージョンは古いバージョンです)

+0

私は変更を加えることができませんSTパッケージへの直接のアクセスは、私が制御できないLaTeXToolsパッケージを扱っているためです。 [実際のSTパッケージ](https://github.com/andrewheiss/SublimeKnitr)では、手作業でパッチを当てるプロセスを説明します(今はST2と3の両方)。さらに、knitrとSkimのサポートを組み込んだ[latexing](http://www.latexing.com/)という新しいパッケージを使用することもできます。 – Andrew

+0

ああ、STは自動的にファイルを '.pyc'にコンパイルする必要があります。 – Andrew

関連する問題