我正在尝试在 Sublime Text 2 中为 knitr/Sweave 创建一个构建系统。我当前的简单(和工作)构建系统如下:
{
"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]*)([^\\.]+)"
}
(
text.text.latex.sweave
上下文在 Sweave Textmate 包中定义,哪种在 Sublime Text 中有效)构建系统需要一个
.Rnw
文件,将其转换为 TeX,然后运行 pdflatex
在上面。这个构建系统可以工作,但它在打开 Skim 的方式上相当有限(它只是打开 PDF——仅此而已)。 LaTeXTools Sublime Text 包更加健壮,可以打开/刷新 Skim,同时突出显示修改过的行并提供 Skim 的神奇反向搜索。我不想重写 LaTeXTools 构建系统,特别是因为它使用单独的 Python 脚本完成了大部分繁重的工作(和 Skim 魔术)。但是,我真的希望能够使用它来构建从 Sweave 生成的 TeX 文件。
理想情况下,我希望以某种方式嵌套一个构建系统——转换一个
.Rnw
文件到 TeX,然后立即运行已经存在的 LaTeXTools 构建系统。在伪代码中:{
[CONVERT RNW TO ${file_name}.tex && RUN THE LATEXTOOLS BUILD SYSTEM ON ${file_name}.tex]
}
是否可以从另一个构建系统内部访问构建系统(或者,从 bash 访问构建系统)?
最佳答案
这是对 LatexTools 插件中两个文件的补丁,以处理 Rnw 文件,以及对 Latex 插件的一个补丁,以使 Rnw 文件表现得像 LaTeX 文件。
首先是 Latex 插件的补丁,特别是文件 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 扩展。
现在补丁makePDF.py
寻找这样的一条线
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
然后寻找一条线
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
祝你好运!
关于r - 从 Sublime Text 2 中的另一个构建系统访问构建系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14152004/