我在Rstudio中使用Knitr来生成markdown文件。我通过xtable包显示表格,它在html文件中很好地显示。但是,当我通过pandoc将.md转换为latex时 - latex文件不包含应该包含的表,而只包含表中没有任何命令的值。
为了给出更好的主意,下表提供了一个示例 数据行:
```{r table, results='asis', echo=FALSE}
r = read.table("C:/aR_files/data.txt",sep=",", header=TRUE,as.is=TRUE)
r$X = NULL;
print(xtable(r), type='html')
```
In order to give a better idea, the following table provides a sample of
data rows:
Row1
Row2
Val1
Val1
我以为我可能会错过一个乳胶包,所以我下载了ctable.sty,但我仍然得到相同的输出。感谢任何想法,谢谢!
答案 0 :(得分:6)
我使用与您非常相似的工作流程,您最好的选择是放弃经常笨重的xtable
包并使用pander
包来打印您的表格。您可以将可能要显示的任何对象包装为通用pander()
函数中的表。这是pandoc.table()
函数的包装器,它有几个选项。如果您指定选项style = "XXX"
,则可以在此处实现您的要求。有4种不同的款式可供选择; “multiline”(默认值),“grid”,“simple”或“rmarkdown”。我经常在Rstudio中编写rmarkdown文档,然后使用pander包将它们转换为Word文档:
library(pander)
Pandoc.convert("C:/Users/BlahBlahBlah/Document.md", format="docx")
转换为.docx格式后,所有4种表格样式都会转换为表格对象,但只有一种表格样式在.docx文档中正好看,而.html文件则由初始“knit”生成。那种风格是“rmarkdown”。您可以实现这两种方式。一个是:
```{r table, results='asis'}
pandoc.table(myTable, style = "rmarkdown")
```
我更喜欢在文档的开头全局设置表格样式,但是要确保我的所有表格都具有相同的格式,并允许我使用更简洁的pander(x)
而不是更详细的{{1 }}:
pandoc.table(x, style = "someStyle")
然而,使用```{r table, results='asis'}
panderOptions("table.style", "rmarkdown")
pander(myTable)
```
风格有一些副作用。主要是,它不支持单元格中的换行符,所以买家要小心。我尝试了不同的风格,并最终决定我喜欢默认的“多线”风格,因为它在单元格中的换行灵活性,即使我生成的.html文件看起来很傻。这不会打扰我,因为我真的只使用我从.md文件转换的.docx文件。我写了一篇关于制作你可能觉得有用的好桌子的blog post。它衡量了几种方法的优缺点,包括rmarkdown
和几种xtable()
方案。