TinyTex:在R中运行Latex

开始

这篇博客是用TidyTex在Manjaro Linux下的测试报告。

测试环境

sessionInfo()
## R version 4.1.1 (2021-08-10)
## Platform: x86_64-apple-darwin17.0 (64-bit)
## Running under: macOS Big Sur 10.16
## 
## Matrix products: default
## BLAS:   /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
## 
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
##  [1] bookdown_0.25   digest_0.6.29   R6_2.5.1        jsonlite_1.8.0 
##  [5] magrittr_2.0.3  evaluate_0.15   blogdown_1.9    stringi_1.7.6  
##  [9] rlang_1.0.2     cli_3.3.0       rstudioapi_0.13 jquerylib_0.1.4
## [13] bslib_0.3.1     rmarkdown_2.14  tools_4.1.1     stringr_1.4.0  
## [17] xfun_0.30       yaml_2.3.5      fastmap_1.1.0   compiler_4.1.1 
## [21] htmltools_0.5.2 knitr_1.39      sass_0.4.1

删除texlive

这一步最简单的方法就是用软件包管理器搜索"texlive",把已安装的都删掉。当然还有一些零碎的文件夹,如果是强迫症患者(我),可以都删除掉。在网上找到的最全步骤是:

sudo rm -rf /usr/local/texlive/
sudo rm -rf ~/.texlive*
sudo rm -rf /usr/local/share/texmf
sudo rm -rf /var/lib/texmf
sudo rm -rf /etc/texmf
rm -rf ~/.texlive
find -L /usr/local/bin/ -lname /usr/local/texlive/*/bin/* | xargs rm

不过测试下来,好像我就只有texmf文件夹需要删除。

安装tinytext

我根据yihui的document安装,没发现什么问题。

install.packages('tinytex')
tinytex::install_tinytex(force=TRUE)

安装好之后,R提示说TinyTex被安装在用户目录(/home/USER/.TinyTex),看得见的东西真是舒坦。比起texlive猫在电脑不知道的角落好多了。

编译tex文件

setwd("~/Dropbox/Phd Admission/CV/")
tinytex::xelatex("cv.tex")

出现错误错误: Failed to compile /home/jihong/Dropbox/Phd Admission/CV/cv.tex. See cv.log for more info.

然后我就去目标文件目录(~/Dropbox/Phd Admission/CV/)找cv.log,结果没有。我一拍脑袋,想到在可能在工作目录里,一看果然有。不过除了cv.log,还有一个文件missfont.log。 这里记录了我tex编译中缺少的字体。

安装后,终于编译成功,在目标目录会显示"cv.pdf"。而且速度还是非常快的。

总结与疑问

总体来说,在linux中安装和使用都是非常简单易懂的。唯一的报错就是和文件路径有关。 我是在Rmarkdown里用chunck运行的。在chunck里,我只有把working directory设置到tex文件所在目录才能成功编译,如果在xelatex()中输入文件的完整路径是无法编译,报错说缺少文件。但是我可以直接在R console里面成功运行tinytex::xelatex("~/Dropbox/Phd Admission/CV/cv.tex"),比如这样我是无法运行的:

tinytex::xelatex("/home/jihong/Dropbox/Phd Admission/CV/cv.tex")

而这样是可以的:

setwd("/home/jihong/Dropbox/Phd Admission/CV/")
tinytex::xelatex("cv.tex")
张吉鸿
张吉鸿
自由的灵魂

我的研究兴趣是贝叶斯分析和潜变量分析