我正在撰写论文,已经准备好了两章。我希望将这两章合并到一个 Sweave 文件中。
假设我有一个名为的文件夹chapter1
,其中包含chapter1.Rnw
、chapter1.tex
和chapter1.pdf
。我通常会回到这个chapter1.Rnw
,更改一些内容,编译,然后查看chapter1.pdf
。
我想创建一个名为 的新文件夹,thesis
其中包含,thesis.Rnw
并且该文件夹将编译并包含在其中。chapter1
thesis.Rnw
chapter1.Rnw
chapter1.pdf
thesis.pdf
现在我相信我可以让它发挥作用,但方式并不令我满意。
假设我们在一个 Rstudio 项目中,其中getwd()
.thesis/
是thesis.Rnw
:
\documentclass{article}
\begin{document}
<<>>=
print("Main document begins")
print(getwd()) # prints "thesis/"
@
\Sexpr{knit_child('chapter1/chapter1.Rnw')}
<<>>=
print("Main document ends")
print(getwd()) # prints "thesis/"
@
\end{document}
现在chapter1.Rnw
假设
% Beginning of paper
<<>>=
print("Child document begins")
print("Child document ends")
@
% End of paper
编译thesis.Rnw
返回了预期的结果pdf
,但是由于它不包含任何文档,因此它chapter1.Rnw
本身无法编译。documentclass{}
begin{}
end{}
我尝试过包括
\documentclass{article}
\begin{document}
% Beginning of paper
<<>>=
print("Child document begins")
print("Child document ends")
@
% End of paper
\end{document}
但是chapter1.Rnw
编译 FROMthesis.Rnw
会引发一堆错误,例如:
! LaTeX Error: Can be used only in preamble.
! LaTeX Error: Command \hlnum already defined.
! LaTeX Error: Command \hlstr already defined.
! LaTeX Error: Command \hlcom already defined.
....
! LaTeX Error: Command \hlkwd already defined.
! LaTeX Error: Command \kframe already defined.
! LaTeX Error: Command \knitrout already defined.
! LaTeX Error: Can be used only in preamble.
请注意,chapter1.Rnw
使用上述方法运行确实有效,但现在thesis.Rnw
它不起作用了。
我曾考虑过在编译之前解析chapter1.Rnw
并thesis.Rnw
删除乳胶前导码,但我认为这可能会在编译时产生一些错误,thesis.Rnw
因为它无法找到所有的包。
是否有一个(更简单的)解决方案,既能让两个.Rnw
文件独立,又能让它们协同工作?
答案1
一个解决方案,可能不是最好的解决方案,是保留chapter1.Rnw
无序言(您的第一个解决方案),将部分乳胶序言移动到一个单独的文件中,以便您可以获取它并有 2 个 masterr.Rnw 文件来调用第一章,一个在,thesis.Rnw
一次在额外的“only-chapter1”中。
例如,创建一个 tex 文件package_to_include.tex
\usepackage{longtable}
\usepackage{...}
在你的thesis.Rnw
\documentclass{article}
\input{package_to_include.tex}
\begin{document}
<<input_chapter1, child='chapter1/chapter1.Rnw'>>=
@
\end{document}
在您的目录中添加一个新的compile_chapter_1.Rnw
例如chapter
\documentclass{article}
\input{../package_to_include.tex}
\begin{document}
<<input_chapter1, child='chapter1.Rnw'>>=
@
\end{document}
总而言之,如果你将各个部分模块化,那么你可以在需要时调用所需的部分,而无需重复。我通常还将所需的所有 R 库放在一个单独的文件中,这样我就可以随时调用它。