• R语言已解决
  • Rmarkdown 如何word文档中表格和图片的标题包含章节数

我将描述我想要的效果,已经做出的尝试,以及尝试的结果。

想要的效果: 图片和表格的标题包含二级序号,一级序号未章节数,二级序号未章节内的排序。如下例:
章节1
表格1-1
表格1-2
图片1-1
图片1-2

章节...

章节5
表格5-1
表格5-2
图片5-1
图片5-2

尝试1:
在YAML中使用bookdown::word_document2模板,加载bookdown和knitr包,然后可在knitr chunk option中设置推盘和表格的标题参数。
此处我尝试了两种风格不同的代码:
代码1:
{r tab.id='tab1',tab.cap='First Table',tab.cap.tnd=1,tab.cap.sep='-'}
head(mtcars)

代码2:

#| tab.id: 'tab1'
#| tab.cap: 'First Table'
#| tab.cap.tnd: 1
#| tab.cap.sep='-'
head(mtcars)

图片同理,修改seq_id为fig即可。

结果:图片标题成功达到预期效果,仅除修改分隔符不成功;表格标题生成失败。

尝试2:
使用officedown::rdocx_document模板,后在knitr chunk option中设置标题参数。
参数设置过程同上,代码一致。

结果:部分达成效果。图片和表格标题的序号第一位包含章节数;序号第二位按全文排序计数。例如图片1-1,1-2,2-3(应为2-1),3-4(应为3-1).

可能可行但我未找到执行方案的办法:

  1. 在YAML中加载样板文档,并在样板文档中设置图片和表格标题。问题:word无法预设置标题,只能在图片和表格生成后insert caption。
  2. 使用定制pandoc lua。问题:我未能google到合适的定制lua

尝试3:
直接使用bookdown::word_document2模板,不添加任何chunk 参数。

结果:
生成包含二级序号的标题;分隔符为. 未发现调整分隔符的方法。

我会继续研究word_document2 生成标题序号的代码和逻辑。

bookdown::word_document 控制图片和表格标题中章节数的argument是global_numbering = !number_sections, 默认值为false. 当global_numbering设置为true时,标题将不再包含章节数,而是只显示objecti的全局序数。

officedown::rdocx_document可以设置base_format = bookdown::word_document2,但无法pass global_numbering argument到rdocx_document下。

officedown的优势是可在文档中加入landscape和multicolumn页面,但officedown不能使用bookdown syntax.

在officedown::rdocx_document中实现的方案如下:

  1. 加载officer包
  2. 定义caption number style
    runs <- list(
      run_word_field("STYLEREF 3 \\s"),
      ftext(" - "),
      run_autonum(seq_id = "tab", pre_label = "", post_label = "")
    )
  3. 使用自定义style
    ::: {custom-style="Table Caption"}
  4. 给图片/表格添加标题
    Figure/ Table r run_bookmark('id',runs): caption
  5. crossref
    I want to call Figure/Table r run_reference(id='id')

至此,本问题得到解决。

总结:

  1. bookdown为本问题提供了简单直接的解决方案,但bookdown syntax的排版功能有限。
  2. officedown提供了快捷的排版功能,但要解决本问题需要采取麻烦的workaround.

Takehome tips:
生成word文档时,如果不需要高级排版功能的话,用bookdown::word_document2.