在 vscode 上编写 Rnw 文档
本文最后更新于 2021年9月28日 晚上
引言
最近要开始写时间序列的作业了,作业里面既有代码,又有公式,没法轻易用 LaTeX 搞定了,就回到以前用的 R+knitr ,写 rnw 了。以前是在 Rstudio 上面写,基本不用配置什么,但是 Rstudio 的 LaTeX 支持真的一般。现在切换到了 vscode, 用 LaTeX Workshop 写,还支持 rnw 跟 jnw。为了配置好 rnw 我真的踩了很多坑,到现在其实也还没有完全配置好。
配置方案
以前写 LaTeX 的时候,我是特别喜欢用 magic comments 的,因为特别方便,只要在主文档开头加上
1  |  | 
就能设置 xelatex 和 biber。但是,在 rnw 里面不能这么干,否则自动编译会出问题,因为默认情况下,在 没有 magic comments 的时候,自动构建rnw 会使用第一个含有 rnw 的 Recipe, 具体来说就是
Recipe: Compile Rnw files,但是,有了 magic comments, 就会使用 magic comments 去构建!
例子
下面是一个例子,去掉首行,一切正常,但是带上它,你会发现 R 代码不会被自动编译。第一次手动编译一切正常,但是当你把 2*x 改成 3*x ,触发自动编译,结果 pdf 确实会刷新,但是pdf 里面还是 2*x。
1  |  | 
配置
如果你的文档不需要中文,那当然直接把首行的 magic comments 删除就好啦。如果需要中文,这时候可以通过 latexmk 来实现,latexmk的文档可以通过 texdoc latexmk 来查看(如果你装了 texlive 的话)。
具体到我们的例子,我们需要一个 .latexmkrc 文件,与我们的 rnw 文件在同一目录下。但是 CTAN 给我们提供了一些模板 latexmkrc,可以下载 knitr-latexmkrc,改名为 .latexmkrc,并修改它里面 $pdflatex 的定义:
1  |  | 
其他的行不变。
另外,需要注意,此后我们的 rnw 文件需要把拓展名改为 Rnw,而不是 rnw。
之后就可以愉快的在 vscode 里面写 rnw 了。
已知问题
rnw 文件中,R 代码的格式化不可用,会全部左对齐,影响最后生成的 pdf。R 的代码补全也不可用。
不过可以使用 R 的 styler 包来手动格式化。