如果您使用Emacs,则可以回答此部分。如果没有,请跳到下面的最后一部分。
如果我们将Rnw
文件分成多个文件,是否可以在Emacs中使用knitr和LaTeX通过在上按M-n e
来创建整个文档子文件?
我想也许可以通过使用Emacs file variables指定子文件的父文件来完成上述过程。
当前,我必须使用M-n e
将缓冲区从子缓冲区更改为父缓冲区(或者我需要使用Makefile ---这是我正在做的事情)来编译整个文档,但是我想按{ {1}}在具有指定父级的任何子级文件上,并编译整个文档。
我正在answer中规定的Emacs中使用ESS,多模和poly-R。
以上场景是受工作流程启发的,该工作流程是在Emacs和AUCTeX中使用LaTeX创建文档。在该设置中,通过在主M-n e
文件或文件中C-c C-a
中的任何其他tex
文件上按下相同的键盘快捷键(tex
)来创建文档。主文件。这样就无需在点击include
之前将缓冲区更改为主文件。
如果您不使用Emacs,则可以回答本部分
作为一个相关但不理想的选项,knitr通过将主文件指定为其父文件来仅允许编译子文件。这是通过向子级添加诸如C-c C-a
之类的行来完成的(请参见standalone mode)。但是问题在于,这不会 创建整个文档,而只会创建子文件中包含的部分。
作为最小的示例,这是名为\Sexpr{set_parent('main-document.Rnw')}
的主(父)文件:
main.Rnw
包括以下名为\documentclass{article}
\begin{document}
This is the main file.
<<>>=
2^10
@
Now we include a child file.
<<chld, child = "chld.Rnw">>=
@
Back to the main.
\end{document}
的子文件:
chld.Rnw
在这里,使用以下<<chld-set-parent, echo = FALSE, cache = FALSE>>=
set_parent("main.Rnw")
@
% instead of the above we could say \Sexpr{set_parent("main.Rnw")}
This is the contents of the child document.
<<>>=
3^6
@
End of child.
脚本编织main.Rnw
bash
在编织R -q -e "library(knitr); knit2pdf('main.Rnw')"
时创建整个文档:
chld.Rnw
创建一个仅包含子文件内容的文档。这对某些人可能有用,但是我认为能够在R -q -e "library(knitr); knit2pdf('chld.Rnw')"
上调用knit命令会更有用,因为我们已将父文件明确指定为chld.Rnw
,所以整个文档都已创建。 / p>
答案 0 :(得分:0)
弄清了我在问题中解释的想法之后,我终于使用Makefile
来编译我的项目,该项目由几个.tex
文件和另外几个.Rnw
文件组成带有相关的.R
文件,可将代码与文本分开,以实现清晰的组织。
使用Makefile
,我可以从项目中的任何 child 文件中编译整个文档。
这里是template,是一个用R代码编织的大文档,我用它作为我的论文模板。 README文件说明了项目的结构以及如何编译。
要在Linux命令行上编译整个文档,只需键入:
make
要在Emacs中进行编译,请键入M-x compile
,然后在微型缓冲区如下所示时Enter
:Compile command: make -k
。下次,您可以键入M-x recompile
,甚至更容易,在*compilation*
缓冲区已处于活动状态时,只需键入g
,整个文档将使用代码重新编译。