关于如何在新的 knitr 文档中使用 Knitr 的 latex 输出、使用 Rstudio 和包含或输入并将一些块声明为子块,已经存在一些问题。
但是,如果我想使用外部 LaTeX 程序(例如 TeXStudio)中的简单 knitr 输出(例如 R xtable)来构建更大的项目,该怎么办?
例如,我可以创建一个 mytable.rnw 文件并生成这个简单的表
\documentclass{article}
\begin{document}
<<r table2, results='asis', message=T, echo=F>>=
library(xtable)
print(
xtable(
head(iris),
caption = 'Iris data'
),
comment = FALSE,
type = 'latex'
)
@
\end{document}
现在我想获取生成的 mytable.tex 文件并在同一文件夹中的 TexStudio 中更大的文档中使用它。
\documentclass{article}
\begin{document}
First table:
\include{mytable}
Second table:
\include{mytable}
\end{document}
(也许使用输入更好)
当我尝试编译它时,我收到许多错误:
Can be used only in preamble. \documentclass
Can be used only in preamble. \documentclass{article}\usepackage
Can be used only in preamble. ...ss{article}\usepackage[]{graphicx}\usepackage
Undefined control sequence. \definecolor
Can be used only in preamble. \usepackage
Undefined control sequence. \definecolor
Undefined control sequence. \definecolor
Undefined control sequence. \definecolor
Undefined control sequence. \definecolor
Can be used only in preamble. \usepackage
Can be used only in preamble. ...eExists{upquote.sty}{\usepackage{upquote}}{}
Can be used only in preamble. \begin{document}
我猜测问题出现的原因是 knitr 输出包含大量无法包含在文档主体内的前导信息,不仅包括 usepackage 指令,还包括大量有关颜色、表格等的微调信息...
正确的做法是什么?如何强制 Rstudio 的 knitr 仅输出正确的信息?
或者如何强制我的主要 latex 文档(来自 TexStudio)纠正问题?
如果我们必须多次执行此操作,是否有任何简单的方法可以将该前导码包含在主 tex 文档中,而无需逐一手动操作。
或者更糟糕的是,一些生成的输出可能包含不兼容的前导码。
答案1
另一种方法是使用“部分编译”。
- 创建
myTable.Rnw
没有序言的,只有 r-chunk 不要在 R-Studio 中进行编译(使用编译按钮),而是转到控制台(包含文件所在的工作目录)并输入
图书馆(针织)
编织(“myTable.Rnw”)
myTable.tex
这将创建一个没有前言信息的文件,并且不会pdflatex
在该.tex
文件上运行或类似操作。
- 使用嵌入
myTable.tex
到主文档中\input{myTable.tex}
答案2
最简单的方法是将您的主文档也变成一个.Rnw
文件,该文件首先只包含 LaTeX。
在主.Rnw
文档中你可以做类似的事情
<<child="myTable.Rnw">>=
@
其中myTable.Rnw
可以是任何.Rnw
不包含标题信息的文件,例如没有documentclass
和begin{document}
/的示例文档\end{document}
当然,您也可以将 r-chunk 包含到myTable.Rnw
主文档中(以及其他 r-chunk)。