父文件如下:
<<child = "child1.Rnw">>=
@
<<child = "child2.Rnw">>=
@
孩子1:
<<>>=
set_parent("parent.Rnw")
x <- 1
@
孩子2:
<<>>=
set_parent("parent.Rnw")
x
@
我可以运行父文档。但是,我不能单独运行子2文档。似乎子2文档无法看到在子1文档中定义的变量x
。如何单独运行子2文档?
答案 0 :(得分:4)
set_parent
并不像您期望的那样工作。来自?set_parent
:
此函数提取父文档的LaTeX前导码以用于子文档,以便可以将子文档编译为单个文档。
set_parent("parent.Rnw")
赢得knit
整个父文档,它只提取序言。因此,使用此parent.Rnw
文件
\documentclass{article}
\begin{document}
<<child = "child1.Rnw">>=
@
<<child = "child2.Rnw">>=
@
\end{document}
child2.Rnw
无法单独编译,因为在这种情况下未运行child1.Rnw
。
以下 1 :
的作用是什么knit("parent.Rnw")
knit("child2.Rnw")
由于两个文档都在同一环境中进行评估(请参阅knit
的默认envir
值),因此来自parent.Rnw
(以及它的孩子)的对象可以用于child2.Rnw
的后续编织。
此外,?set_parent
提供了另一种选择:
当父文档的前导码还包含代码块和内联R代码时,它们将被评估为好像它们在此子文档中一样。
如果可以重新排列parent.Rnw
,以便引用child1.Rnw
的块在序言中
\documentclass{article}
<<child = "child1.Rnw">>=
@
\begin{document}
<<child = "child2.Rnw">>=
@
\end{document}
然后可以编织child2.Rnw
而无需事先编织parent.Rnw
。
1 出于某种原因, Nevermind。功能 knit2pdf("child2.Rnw")
在我的系统上崩溃pdflatex.exe
(通过texify.exe
调用)。但是,PDF文件已正确生成,并且直接在TEX文件上运行pdflatex
不会造成任何麻烦。