将knitr
和rmarkdown
一起用于创建Word文档时,您可以使用现有文档来设置输出的样式。
例如在我的yaml标题中:
output:
word_document:
reference_docx: style.docx
fig_caption: TRUE
在这种风格中,我创建了一个默认的表格样式 - 这里的目标是以正确的样式输出kable
表格。
当我编写word文档并使用style.docx时,表格不会根据表格进行样式化。
到目前为止,使用样式检查器没有帮助,不确定默认表格样式是否是要修改的错误样式。
示例代码:
```{r kable}
n <- 100
x <- rnorm(n)
y <- 2*x + rnorm(n)
out <- lm(y ~ x)
library(knitr)
kable(summary(out)$coef, digits=2, caption = "Test Captions")
```
不幸的是,我没有可以上传的程式化文档进行测试。
TL; DR:想要自动设定rmarkdown和knitr的表输出(通过kable)
更新:到目前为止,我发现更改了&#39; compact&#39; docx中的样式将自动更改表格的文本内容 - 但这并不能解决整个表格样式,如单元格颜色和对齐方式。
更新2:经过更多研究和创建样式后,我发现knitr
似乎没有问题来访问段落样式。但是,表格样式不属于该样式类别,并且似乎不适用于我的个人测试。
更新3:涉及ReporteRs
软件包 - 虽然它能够生成表格,但是这样做所需的语法很费力。更确切地说,风格会自动应用。
更新4:您无法更改TableNormal样式,也无法设置“表格正常”样式。 XML方法不是我们想要的。我有一个VBA宏可以解决这个问题,只是想在可能的情况下删除该过程。
答案 0 :(得分:12)
这实际上是the answer that recommends TableNormal
,this post on rmarkdown.rstudio.com和我自己的实验的组合,以展示如何使用TableNormal
样式来自定义由kable
生成的表格:< / p>
<强> RMD 强>:
---
output:
word_document
---
```{r}
knitr::kable(cars)
```
TableNormal
作为样式名称并定义所需的样式。在我的实验中,大多数样式都有效,但有些样式没有。 (向第一列添加颜色并使第一行变为粗体没有问题;忽略每一秒的突出显示。)此答案中的最后一个屏幕截图说明了此步骤。styles.docx
。修改RMD文件中的标题以使用参考DOCX(参见here;不要搞砸缩进 - 花了我10分钟发现这个错误):
---
output:
word_document:
reference_docx: styles.docx
---
再次编织到DOCX - 现在应该应用样式。
按照上面描述的步骤产生此输出:
这里是用于定义TableNormal
的表格样式对话框的屏幕截图。不幸的是,这是德语,但也许有人可以提供它的英文版本:
由于这似乎对大多数用户(除了我......之外的任何人)都不起作用,我建议我们系统地测试一下。基本上,有4个步骤可能出错:
TableNormal
样式的方式不同。因此,我建议使用上面发布的相同的最小RMD(full code on pastebin)来找出结果开始的位置不同:
TableNormal
的同一文档:reference.docx 这三个文件在以下系统上生成:Windows 7 / R 3.3.0 / RStudio 0.99.896 / pandoc 1.15.2 / Office 2010。
我在使用Windows 7 / R 3.2.4 / RStudio 0.99.484 / pandoc 1.13.1 / Office 2010的系统上获得相同的结果。
我认为最有可能的罪魁祸首是pandoc和Office版本。不幸的是,我目前无法测试其他配置。现在看到以下内容会很有趣:对于不起作用的用户,会发生什么......
有许多用户运行这些测试,应该可以找出导致问题的原因。
答案 1 :(得分:4)
这实际上是a known issue。幸运的是,它在pandoc
的v2.0或更高版本中得到了解决。
我测试了新版本,发现有一个新添加的隐藏样式称为“表”。关注@ CL。建议改变reference.docx
中的“表格”风格现在没问题。
此外,请查看pandoc
的v2.0发行说明的此条目:
对表格样式(#3275)使用
Table
而不是Table Normal
。Table Normal
是默认的表格样式,无法修改。
答案 2 :(得分:3)
截至 2021 年,我无法获得任何其他建议的答案。
但是,我确实发现了 {officedown}
包,它支持 .docx
文档中表格的样式。您可以使用 {officedown}
remotes::install_github("davidgohel/officedown")
要使用 {officedown}
将 .Rmd
渲染为 .docx
,您必须替换
output:
word_document
在您的文档标题中使用
output:
officedown::rdocx_document
除此之外,{officedown}
包必须加载到您的 .Rmd
中。
与 word_document
输出格式一样,{officedown}
允许我们使用模板文档中的样式和设置,再次使用 reference_docx
参数。
对于参考文档 styles.docx
,最小示例 .Rmd
可能如下所示:
---
date: "2038-01-19"
author: "The Reasonabilists"
title: "The end of time as we know it"
output:
officedown::rdocx_document:
reference_docx: styles.docx
---
```{r setup, include = FALSE}
# Don't forget about me: I'm important!
library(officedown)
```
{officedown}
允许我们更进一步,指定要在文档前端使用的表格样式的名称。此表格样式可以是我在 styles.docx
中创建的自定义样式,也可以是我喜欢的 Word 内置样式之一。
假设我创建了一个样式 My Table
:
我可以告诉 {officedown}
在我的前台使用这种表格样式:
output:
officedown::rdocx_document:
reference_docx: styles.docx
tables:
style: My Table
总之,编织最小的.Rmd
:
---
date: "2038-01-19"
author: "The Reasonabilists"
title: "The end of time as we know it"
output:
officedown::rdocx_document:
reference_docx: styles.docx
tables:
style: My Table
---
```{r setup, include = FALSE}
# Don't forget about me: I'm important!
library(officedown)
```
```{r}
head(mtcars)
```
生成一个 .docx
文档,如下所示:
答案 3 :(得分:2)
您需要有一个reference_docx: style.docx
,其中带有“表格”样式。 (请参见上面的@Liang Zhang的说明和链接)。
pandoc -o custom-reference.docx --print-default-data-file reference.docx
reference.docx
文件中,找到创建的表(带标题的基本1行表)。使用此参考文档,您还可以更改表格和图形标题的样式。
答案 4 :(得分:0)
TableNormal
也不适合我。
在我的荷兰语版本的Word 2016(Office 365)上,我发现我可以使用 Compact
样式标记表格。
输入(refdoc.docx
包含Compact
样式):
---
title: "Titel"
subtitle: "Ondertitel"
author: "`r Sys.getenv('USERNAME')`"
output:
word_document:
toc: true
toc_depth: 2
fig_width: 6.5
fig_height: 3.5
fig_caption: true
reference_docx: "refdoc.docx"
---
和RMarkdown:
# Methoden {#methoden}
```{r}
kable(cars)
```
输出:
答案 5 :(得分:0)
我能够将单词输出设置为使用我在参考.docx中定义的默认表格样式。
而不是&#39; TableNormal&#39;,它默认为的表样式是&#39;表&#39;。
我通过用kable编织rmarkdown来发现这一点。
---
date: "December 1, 2017"
output:
word_document:
reference_docx: Template.docx
---
`r knitr::kable(source)`
然后,我查看了生成的文档的XML,看看它默认的样式。
require(XML)
docx.file <- "generated_doc.docx"
## unzip the docx converted by Pandoc
system(paste("unzip", docx.file, "-d temp_dir"))
document.xml <- "temp_dir/word/document.xml"
doc <- xmlParse(document.xml)
tblStyle <- getNodeSet(xmlRoot(doc), "//w:tblStyle")
tblStyle
我定义了&#39;表&#39;样式在参考docx中放置一些颜色和边框。这适用于整个文档中的一种标准表格样式,我还没有找到一种方法来使用不同的样式。
即使在我打开参考文档并对其进行编辑之后,这仍然存在。