问题是:
我有几个代表我的论文不同部分(例如,第1章的结果,第2章的结果)的Rmarkdown文档,我想将这些文档的编织胶乳版本与其他TeX文件结合到一个主TeX的论文文档中。问题是,当编织成PDF格式并将TeX文件保存在主TeX文档中时,Rstudio自动生成一堆序言,最终与master.TeX文档中的序言发生冲突。
不太理想的解决办法:
我一直在努力解决这个问题,在将编织的输出包含到master.tex
文件之前,用手删除这个序言。
到目前为止,我的工作流程如下:
问题是:
我想将Rmd转换为LaTeX,而不必在将编织的TeX文件包含到主TeX文件之前手动删除序言。我该怎么做?
瑞典不是一种选择:
我相信我可以通过与Sweave一起工作来实现这一点,但是我喜欢Rmarkdown提供的输出格式的灵活性:我可以在编写时编织到html并在浏览器中查看,快速查看我的工作进度并确保没有bug,我也可以选择与只使用word工作的主管分享。然后,当我准备将所有内容编译到我的主LaTeX文档中以供打印时,我可以在Rstudio中选择knit以获得latex输出。
发布于 2015-08-01 04:53:27
下面是使用LaTeX包docmute
的更简单的解决方案。
您的主Rmarkdown文档(例如main.Rmd
)应该加载docmute
包,并包含您的其他文件(例如part1.Rmd
和part.Rmd
),一旦编织并位于同一个目录中,\input
或\include
如下所示:
---
title: "Main"
output: pdf_document
header-includes:
- \usepackage{docmute}
---
# Part 1
\input{part1.tex}
# Part 2
\input{part1.tex}
然后,您的其他文件只需要在YAML前端有一个keep_tex
参数。如下所示:
---
title: "Part 1"
output:
pdf_document:
keep_tex: true
---
Something
这是:
---
title: "Part 2"
output:
pdf_document:
keep_tex: true
---
Something else
然后,您所需要做的就是在part*.Rmd
之前编织main.Rmd
,所有内容都将出现在main.tex
和main.pdf
中。docmute
包从输入.tex
文件中删除前导,因此您需要确保输入文件中\begin{docunent}
之前所需的内容也在main.Rmd
中。
发布于 2015-08-01 03:10:25
从那以后,我想出了一个解决办法:
create_latex <- function(f){
knitr::knit(f, 'tmp-outputfile.md');
newname <- paste0(tools::file_path_sans_ext(f), ".tex")
mess <- paste('pandoc -f markdown -t latex -p -o', shQuote(newname),"tmp-outputfile.md")
system(mess)}
上面的函数以一个Rmd
文件作为输入,将文件编成md
,然后通过命令行调用pandoc将其转换为TeX
。
秘密成分就在潘多克的电话里..。当使用Rstudio编织时,Rstudio在编译pdf时必须调用pandoc独立的-s
标志。这将生成一个“独立”文档,即包含latex序言的文档。这显然是必要的,当你想要查看PDF,但与我的需要冲突。
相反,我正在寻找一个乳胶‘片段’从Rmd
与针织品,可以在以后合并到我的主乳胶文件。因此,解决方案只是创建一个pandoc命令行调用,它省略了-s
独立标志。我通过在上面的函数中使用system()
从R调用pandoc实现了这一点。
希望这能帮助那些有这个问题的人,但如果我能够改变Rstudio的设置以避免被黑客攻击,那就太好了。欢迎提出建议和反馈意见。
https://stackoverflow.com/questions/31744576
复制相似问题