在 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
包来手动格式化。