zac*_*dav 31 r docx pandoc knitr r-markdown
使用knitr和rmarkdown一起创建word文档时,可以使用现有文档来设置输出样式.
例如在我的yaml标题中:
output:
word_document:
reference_docx: style.docx
fig_caption: TRUE
Run Code Online (Sandbox Code Playgroud)
在这种风格中,我创建了一个默认的表格样式 - 这里的目标是让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")
```
Run Code Online (Sandbox Code Playgroud)
不幸的是,我没有可以上传的程式化文档进行测试.
TL; DR:想要自动设定rmarkdown和knitr的表输出(通过kable)
更新:到目前为止,我发现更改docx中的"紧凑"样式将自动更改表格的文本内容 - 但这并不能解决整个表格样式,如单元格颜色和对齐方式.
更新2:经过更多研究和创建样式后,我发现knitr访问段落样式似乎没有问题.但是表格样式不属于该样式类别,似乎不适用于我的个人测试.
更新3:涉及ReporteRs软件包 - 虽然它能够生成表格,但是这样做所需的语法很费力.更确切地说,风格会自动应用.
更新4:您不能更改TableNormal样式,也不能设置表格正常样式.XML方法不是我们想要的.我有一个VBA宏可以做到这一点,只是想尽可能删除该过程.
CL.*_*CL. 16
这实质上是一个组合是建议的答案TableNormal,这个职位上rmarkdown.rstudio.com和我自己的实验来说明如何使用TableNormal风格像定制所产生的这些表kable:
RMD:
---
output:
word_document
---
```{r}
knitr::kable(cars)
```
Run Code Online (Sandbox Code Playgroud)
TableNormal样式名称并定义所需的样式.在我的实验中,大多数样式都有效,但有些样式没有.(向第一列添加颜色并使第一行变为粗体没有问题;忽略每一秒的突出显示.)此答案中的最后一个屏幕截图说明了此步骤.styles.docx.修改RMD文件中的标题以使用参考DOCX(参见此处 ;不要搞砸缩进 - 让我花了10分钟找到这个错误):
---
output:
word_document:
reference_docx: styles.docx
---
Run Code Online (Sandbox Code Playgroud)再次编织到DOCX - 现在应该应用样式.
按照上面描述的步骤生成此输出:
这里是用于定义的表格样式对话框的屏幕截图TableNormal.不幸的是它是德语,但也许有人可以提供它的英文版本:
因为这似乎对大多数用户(除了我......以外的任何人)都有用,我建议我们系统地测试一下.基本上,有4个步骤可能出错:
TableNormalDOCX中保存样式的方式不同.因此,我建议使用上面发布的相同的最小RMD(在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版本.不幸的是,我目前无法测试其他配置.现在看到以下内容会很有趣:对于不起作用的用户,会发生什么......
有许多用户运行这些测试,应该可以找出导致问题的原因.
截至 2021 年,我无法获得任何其他建议的答案。
然而,我确实发现了这个{officedown}包,除其他外,它支持文档中表格的样式.docx。您可以{officedown}安装remotes::install_github("davidgohel/officedown")
要用于{officedown}渲染.Rmd,.docx您必须替换
output:
word_document
Run Code Online (Sandbox Code Playgroud)
在你的文档标题中
output:
officedown::rdocx_document
Run Code Online (Sandbox Code Playgroud)
除此之外,该{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")
```
Run Code Online (Sandbox Code Playgroud)
{officedown}允许我们更进一步,指定要在文档的前面内容中使用的表格样式的名称。该表格样式可以是我们在 中创建的自定义样式styles.docx,也可以是您喜欢的 Word 内置样式之一。
假设我们创建了一种样式My Table:
我们可以{officedown}在前面的内容中使用这种表格样式:
---
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")
```
Run Code Online (Sandbox Code Playgroud)
总而言之,编织最小的.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)
```
Run Code Online (Sandbox Code Playgroud)
生成的.docx文档如下所示: