我有几个代表论文不同部分的Rmarkdown文档(例如第1章结果,第2章结果),我想将这些文档的针织乳胶版本与其他TeX文件合并到一个主TeX'论文'文献。问题是,当编织为PDF并保持TeX文件包含在主TeX文档中时,Rstudio会自动生成一串前导,最终与master.TeX文档中的前导冲突。
我一直在解决这个问题,在将编织的输出包含到master.tex
文件之前,手动删除此序言。
到目前为止,我目前的工作流程如下:
我想将Rmd转换为LaTeX,而不必在将编织的TeX文件包含到主TeX文件之前手动删除前导码。我该怎么做?
我确信我可以通过使用Sweave来实现这一目标,但我喜欢Rmarkdown提供的输出格式的灵活性:我可以编织为html并在我的浏览器中查看,因为我正在写作,以便快速查看我的工作进度并确保没有错误,我也可以选择编织单词与我的主管分享,该主管只能用语言表达。然后,当我准备将所有内容编译到我的主LaTeX文档中进行打印时,我可以在Rstudio中选择编织为PDF以获得乳胶输出。
答案 0 :(得分:2)
以下是使用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
中。
答案 1 :(得分:1)
我已经想出了一个解决方法:
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
。
秘密成分在于pandoc调用...当使用Rstudio编织时,Rstudio在编译pdf时必须调用pandoc独立-s
标志。这将生成一个“独立”文档,即包含乳胶前导码的文档。当您想要查看PDF时,这显然是必要的,但与我的需求相冲突。
我正在尝试使用knitr从Rmd
生成一个乳胶'片段',以后可以将其合并到我的主Latex文件中。因此,解决方案只是创建一个省略-s
独立标志的pandoc命令行调用。我通过在上面的函数中使用system()
从R调用pandoc来实现这一点。
希望这可以帮助那些有这个问题的人,但如果我能够改变Rstudio的设置以避免烦扰这个黑客,那将会很棒。建议和反馈欢迎。