使用LaTeX和KnitR自動生成報告


擴展名為.Rnw(Rtex)的文件就是包含了R代碼的LaTeX文檔。編譯的時候,先用Rscript調用Knitr處理,生成.TeX文檔,然后用pdfLaTeX/XeLaTeX編譯成PDF。
最方便的編譯.Rnw文檔的工具是使用RStudio!(TeXStudio/SublimeText/VSC都比較慢),TeXStudio(2.12.16)最適合編寫.Rnw文檔
謝益輝為LyX制作了可用Knitr的模板,使用也十分方便。

Knitr主頁:https://yihui.name/knitr/
Knitr示例:https://yihui.name/knitr/demos/
編輯器配置:https://yihui.name/knitr/demo/editors/

下面結合一些工具說明Knitr的使用方法。在TeXStudio/ST/VSC中編輯,在RStudio編譯!

使用RStudio

  1. 安裝某個LaTeX發行版,如TeXLive(https://tug.org/texlive/acquire.html)
  2. 安裝R(https://r-project.org),並安裝KnitR包
    install.packages('knitr')
    
  3. 安裝RStudio Desktop(https://rstudio.com/)
  4. 啟動RStudio,點擊“Tools-Global setting: Sweave”:
    • Wave Rnw files using "Knitr"
    • Typeset LaTeX into PDF using "pdfLaTeX"(中文選用"XeLaTeX")
  5. 新建Rnw文件:“File-New File-R Sweave”,在文檔區輸入
    <<>>=
    plot(rnorm(100),type='l')
    @
    
    保存文件為test.rnw。擴展名必須為.rnw!
  6. 點擊"Compile PDF",生成PDF文檔。

RStudio的優點:方便的編譯環境;R代碼自動提示;樣式比較漂亮。
:沒有LaTeX自動補全、提示。
上面步驟1、2是必須的。

使用 TeXStudio

  • "Options-Config-Build:user Commands"添加命令Knitr:Knitr,命令為
    Rscript -e "library(knitr); knit('%.Rnw')"|xelatex -synctex=1 -shell-escape -interaction=nonstopmode %.tex | txs:///view-pdf

    Rscript -e "library(knitr); knit('%.Rnw')" | txs:///xelatex | txs:///xelatex | txs:///view-pdf
    如果有參考文獻,用如下命令:
    Rscript -e "library(knitr); knit('%.Rnw')"|xelatex %.tex |bibtex %|xelatex -synctex=1 -shell-escape -interaction=nonstopmode %.tex | txs:///view-pdf

    Rscript -e "library(knitr); knit('%.Rnw')" | txs:///xelatex | txs:///bibtex | txs:///xelatex | txs:///view-pdf
  • 文件擴展名必須為.rnw!
  • "Tools - user:Knitr"編譯文件(要定義快捷鍵!)。

TeXStudio(2.12.16)的優點:方便的編譯環擊;LaTeX提示、自動補全;樣式比較漂亮。
不足:沒有R代碼自動提示補全。感覺是最好的.Rnw的編輯/譯器

編譯問題
設置后,編譯總是先調用pdflatex,然后才是rscript??

如果用knit2pdf替換knit,XeLaTeX編譯時總提示:"tlmgr search --file --global "/article.cls",然后尋找文件或安裝(導致速度慢)。

TeXStudio的配色:https://tex.stackexchange.com/questions/108315/how-can-i-set-a-dark-theme-in-texstudio
TeXStudio的配置文件為\config\teXStudio.ini,配色部分位於[formats]
使用配色

  1. 打開TeXStudio,"Options > Save profile",保存為user-default.txsprofile
  2. 再執行上面操作,保存為custom-dark1.txsprofile
  3. 打開custom-dark1.txsprofile,並找到[formats]段(在最后),會看到
    [formats]
    version=1.0
    
  4. 將其他的配色設置復制粘貼到其后,保存。
  5. TeXStudio中執行:"Options > Load profile",找到保存的custom-dark1.txsprofile,確定。
  6. 關閉並重啟TeXStudio,打開一個文件,就能看到配色生效。
    PS:以前都是將配色設置復制到teXstudio.ini后的[formats]段。

使用Sublime Text 3

  • 安裝Knitr插件(以及R-box, senttextplus, latexing/latextools)
  • 文件擴展名必須為.Rnw或.Rmd!(是大寫的R)

能識別.Rnw的樣式。
"set syntax:latexing(knitr)" 或 latex后,按LaTeX/R文檔處理,有自動完成、提示。

VS code

LaTeX workshop 8.4.2增加了.rnw格式的支持。或ctrl+shift+p“change language mode”中選R Sweave(也支持R markdown)。
settings.json的對應位置添加如下設置:

"latex-workshop.latex.recipes": [
 {
   "name": "Knitr",
   "tools": [
     "Rscript",
     "xelatex"
   ]
 },
 {
   "name": "Knitr (biblatex)",
   "tools": [
     "Rscript",
     "xelatex",
     "biblatex",
     "xelatex"
   ]
 }
],

"latex-workshop.latex.tools":[
 {
 "name": "Rscript",
 "command": "Rscript",
 "args": [
   "-e",
   "library(knitr); knit('%DOC%')",
 ],
 "env": {}
 }
],

%DOC%=%DOCFILE%,都是全名?vscode傳遞給xelatex的文件是"*.rnw.tex"
此處取文件名的變量${fileBasenameNoExtension}不能被識別!

使用LyX

直接使用模板即可。
以前常用LyX,后來發現還是不用這種可視化的比較好些,現在基本使用VS code編輯LaTeX。

示例文檔

%最小的例子實現Latex-Knitr
%在Rstudio中,新建Rsweave文件並保存為.rnw
%complile PDF
% https://texblog.org/2013/08/20/rknitr-automatic-bibliography-generation-with-biblatex-in-rstudio/
\documentclass{article}
\usepackage{hyperref}
\usepackage[backend=bibtex, sorting=none]{biblatex}
\bibliography{references}
 
\begin{filecontents*}{references.bib}
@Manual{knitr2013,
    title = {knitr: A general-purpose package for dynamic report
      generation in R},
    author = {Yihui Xie},
    year = {2013},
    note = {R package version 1.4.1},
    url = {http://yihui.name/knitr/},
  }
\end{filecontents*}
 
\begin{document}
 
\section*{Automatic biblatex bibliography generation in RStudio using knitr}
 
<<setup, include=FALSE, cache=FALSE, echo=FALSE>>=
opts_chunk$set(fig.path='figures/plots-', fig.align='center', fig.show='hold', eval=TRUE, echo=TRUE)
options(replace.assign=TRUE,width=80)
Sys.setenv(TEXINPUTS=getwd(),
           BIBINPUTS=getwd(),
           BSTINPUTS=getwd())
@
 
<<sample-data-hist-and-box, out.width='0.48\\textwidth'>>=
sampleData <- rnorm(1000, 0,1)
hist(sampleData)
boxplot(sampleData)
@
 
This document was produced in RStudio using the knitr package \cite{knitr2013} by \url{http://texblog.org}.
 
\printbibliography
 
\end{document}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM