我在markdown中有一堆相当大的表,我是手动创建的。我在Rmd文档中使用它们。由于我需要更多控制LaTeX和所有,我使用Rnw文档。如何将我的降价表放在Sweave文件中?
下面是一个最小的例子(不工作):
\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
% my markdown table
col1 | col2 | col3
------|:---:|:---:
row1 | cell1 | cell2
row2 | cell3 | cell4
row3 | cell5 | cell6
\end{document}
我试图转换文档中的表格,只是将表格粘贴在Sweave文档中的markdown中,然后在LaTeX中渲染它。我尝试产生错误,但我更接近:
\documentclass{article}
\begin{document}
\SweaveOpts{concordance=TRUE}
<<texifytable, echo=FALSE, results=tex>>=
mytab = sprintf("col1 | col2 | col3
------|:---:|:---:
row1 | cell1 | cell2
row2 | cell3 | cell4
row3 | cell5 | cell6")
system2("pandoc", args = c("-f markdown","-t latex"),
stdout = TRUE, input = mytab)
@
\end{document}
答案 0 :(得分:1)
可行:
\documentclass{article}
\usepackage{longtable}
\usepackage{booktabs}
\begin{document}
<<echo = FALSE, results = "asis", message = FALSE>>=
library(knitr)
markdown2tex <- function(markdownstring) {
writeLines(text = markdownstring,
con = myfile <- tempfile())
texfile <- pandoc(input = myfile, format = "latex", ext = "tex")
cat(readLines(texfile), sep = "\n")
unlink(c(myfile, texfile))
}
markdowntable <- "
col1 | col2 | col3
-----|:----:|:----:
row1 | cell1 | cell2
row2 | cell3 | cell4
row3 | cell5 | cell6
"
markdown2tex(markdowntable)
@
\end{document}
我将代码包装在一个小帮助函数markdown2tex
中。当使用多个降价表时,这会使代码非常小。
想法是简单地复制文档中的markdown表并将其作为字符串分配给对象(此处为:markdowntable
)。将markdowntable
传递给markdown2tex
包含等效的LaTeX表到文档中。不要忘记使用块选项results = "asis"
和message = FALSE
(后者以禁止来自pandoc
的邮件)。
markdown2tex
中的主力是knitr::pandoc
。使用format = "latex", ext = "tex"
,它将input
转换为TEX片段,并返回TEX文件(texfile
)的路径。由于pandoc
需要文件名作为输入,因此markdown字符串将写入临时文件myfile
。将texfile
的内容打印到文档后,myfile
和texfile
将被删除。
当然,如果降价表已经保存在文件中,则可以简化这些步骤。但就个人而言,我喜欢在 RNW文件中添加markdown字符串的想法。这样,它可以轻松编辑,内容清晰,并支持可重复性。
注意:您需要在序言中添加\usepackage{longtable}
和\usepackage{booktabs}
。由pandoc
生成的TEX代码需要这些包。
上面的示例生成以下输出: