首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Knitr & Rmarkdown docx表

Knitr & Rmarkdown docx表
EN

Stack Overflow用户
提问于 2016-06-07 06:20:40
回答 6查看 26K关注 0票数 36

当同时使用knitrrmarkdown创建word文档时,可以使用现有文档对输出进行样式化。

例如,在我的yaml标题中:

代码语言:javascript
复制
output: 
  word_document:
    reference_docx: style.docx
    fig_caption: TRUE

在这种样式中,我创建了一个默认的表样式--这里的目标是使kable表输出具有正确的样式。

当我编织单词文档并使用style.docx时,表不会根据该表进行样式化。

到目前为止,使用样式检查器没有帮助,不确定默认表样式是否是要修改的不正确样式。

示例代码:

代码语言:javascript
复制
```{r kable}

N <- 100

X <- r范数(N)

Y <- 2*x +r范数(N)

出<- lm(y ~ x)

图书馆(针织品)

kable(总结(Out)$coef,digits=2,标题=“测试标题”)

代码语言:javascript
复制

我没有一个样式化的文件,我可以上传为不幸的测试。

TL;DR:想要将表输出自动地从rmarkdown和针织品中输出(通过可选)

更新:到目前为止,我发现在docx中更改“紧凑”样式将自动更改表的文本内容,但这并不能解决表格的整体样式问题,如单元格颜色和对齐。

更新2:在对样式进行了更多的研究和创建之后,我发现knitr似乎没有访问段落样式的问题。然而,表样式不属于该样式类别,并且似乎不适用于我的个人测试。

更新3:尝试使用ReporteRs包-尽管它能够根据需要生成表,但这样做所需的语法是很辛苦的。更确切地说,样式是自动应用的。

更新4:您不能更改TableNormal样式,也不能设置表正常样式。XML方法不是我们所要寻找的。我有一个VBA宏,它可以完成这个任务,如果可能的话,我只想删除这个过程。

EN

回答 6

Stack Overflow用户

发布于 2016-06-17 21:47:25

这本质上是TableNormal这篇文章发表在rmarkdown.rstudio.com上和我自己的实验的结合,展示了如何使用TableNormal样式自定义表,比如由kable生成的表:

RMD

代码语言:javascript
复制
---
output:
  word_document
---

```{r}

针织品::kable(汽车)

代码语言:javascript
复制
  • 点击RStudio中的“编织词”。→文档在Word中打开,还没有任何自定义样式。
  • 在该文档(不是在新文档中)中,添加所需的样式。这篇文章解释了基本知识。键不是直接应用样式,而是修改样式。见这篇文章是关于support.office.com关于Word风格基础的文章。
  • 具体来说,要为表添加样式,需要添加表样式。我的Word版本是非英语的,但是根据上面链接的文章,表格样式可以通过“Design,上下文选项卡”获得。
  • 选择TableNormal作为样式名称并定义所需的样式。在我的实验中,大多数风格都奏效了,但有些没有。(向第一列添加颜色并使第一行粗体显示没有问题;忽略了第二行的突出显示。)这个答案中的最后一个屏幕截图说明了这个步骤。
  • 保存文档,例如作为styles.docx
  • 修改RMD文件中的头以使用引用DOCX (请参阅这里;不要搞砸缩进-花了10分钟找出这个错误): -输出: word_document: reference_docx: styles.docx
  • 再次编织到DOCX -样式现在应该被应用。

按照我前面描述的步骤,将产生以下输出:

这里是用于定义TableNormal的表样式对话框的屏幕截图。不幸的是,它是用德语写的,但也许有人可以提供它的英文版本:

因为这似乎不适用于大多数用户(除了me…之外的任何人),我建议我们系统地测试这个。本质上,有四个步骤可能出错:

  • 错误的RMD (不太可能)
  • 最初生成的DOCX中的差异。
  • 在DOCX中保存TableNormal样式的方式不同。
  • 引用DOCX用于格式化最终DOCX的方式不同。

因此,我建议使用上面发布的相同的最小RMD (pastebin上的完整代码)来找出结果从哪里开始的不同:

这三个文件是在以下系统上生成的: Windows 7/R3.3.0/ RStudio 0.99.896 / pandoc 1.15.2 / Office 2010。

在Windows7/R3.2.4/ RStudio 0.99.484 /Pandoc1.13.1/ Office 2010的系统上,我得到了相同的结果。

我认为最有可能的罪魁祸首是pandoc和Office版本。不幸的是,我目前无法测试其他配置。现在,您会很感兴趣地看到以下内容:对于不工作的用户,…会发生什么?

  • …如果你从我的initial.docx开始?
  • 如果这不起作用,如果您使用我的reference.docx作为参考文档怎么办?
  • 如果不起作用,生成的XML文件(在DOCX容器中)是否存在引人注目的差异?请分享您的文件和确切的版本信息。

在许多用户运行这些测试的情况下,应该可以找出导致这些问题的原因。

票数 23
EN

Stack Overflow用户

发布于 2017-12-11 12:32:18

这实际上是一个已知的问题。幸运的是,它在pandoc的2.0或更高版本中得到了解决。

我对新版本进行了测试,发现有一种新添加的隐藏样式,称为"Table“。按照@CL.的建议,修改reference.docx中的"Table“样式,现在可以了。

此外,查看pandoc的v2.0发行说明的这一条目:

表样式( Table )使用Table而不是Table Normal (#3275)。Table Normal是默认的表样式,不能修改。

票数 7
EN

Stack Overflow用户

发布于 2021-03-10 22:26:38

到2021年,我无法得到任何其他建议的工作答案。

但是,我确实发现了{officedown}包,它支持.docx文档中表的样式。您可以使用{officedown}安装remotes::install_github("davidgohel/officedown")

若要使用{officedown}.Rmd呈现为.docx,必须替换

代码语言:javascript
复制
output:
  word_document

在您的文档标题中

代码语言:javascript
复制
output:
  officedown::rdocx_document

此外,必须在{officedown}包中加载.Rmd包。

word_document输出格式一样,{officedown}允许我们使用模板文档中的样式和设置,同样使用reference_docx参数。

对于参考文档styles.docx,最小的.Rmd示例可能如下所示:

代码语言:javascript
复制
---
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}

别忘了我:我很重要!

图书馆(“办公大楼”)

代码语言:javascript
复制

{officedown}允许我们更进一步,指定要在文档前面使用的表样式的名称。这个表格样式可以是我们创建的自定义样式 in styles.docx,也可以是Word内置的样式之一。

假设我们创建了一个样式My Table

我们可以告诉{officedown}在前面的事情中使用这种桌子样式,如下所示:

代码语言:javascript
复制
output: 
  officedown::rdocx_document:
    reference_docx: styles.docx
    tables:
      style: My Table

总之,编织最小的.Rmd

代码语言:javascript
复制
---
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}

别忘了我:我很重要!

图书馆(办公大楼)

代码语言:javascript
复制
```{r}

磁头(地铁)

代码语言:javascript
复制

产生的.docx文档如下所示:

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37671868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档