You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Quarto生成docx:表格/图编号引用及全局字体设置求助

R Markdown 生成docx文档的需求解决方案

1. 表格与图表自动编号+标题置顶

基础R Markdown对docx的自动编号支持有限,推荐使用bookdown扩展包实现该功能,它能自动为表格、图表编号并将标题置于顶部。

操作步骤:

  1. 安装并加载bookdown包:
install.packages("bookdown")
library(bookdown)
  1. 在YAML头部指定输出格式为bookdown::word_document2:
---
title: "你的文档标题"
output:
  bookdown::word_document2:
    toc: true # 可选,生成目录
---
  1. 为图表和表格添加标题:
  • 图表:在代码块中用fig.cap参数指定标题:
```{r cars-plot, fig.cap="汽车速度与刹车距离的关系"}
plot(cars)
- 表格:用`knitr::kable()`的`caption`参数指定标题:
```r
```{r mtcars-table, tab.cap="前5行mtcars数据集示例"}
knitr::kable(mtcars[1:5, 1:3])
## 2. 交叉引用表格与图表
通过代码块命名+`\@ref()`语法实现引用,格式为`\@ref(fig:代码块名)`引用图表,`\@ref(tab:代码块名)`引用表格。

### 示例:
在正文里直接写:
> 从\@ref(fig:cars-plot)可以看出,汽车速度与刹车距离呈正相关;详细数据见\@ref(tab:mtcars-table)。

生成的文档会自动替换为`Figure 1`或`Table 1`这类带编号的引用,且编号会随内容调整自动更新。

## 3. 设置全局字体(Verdana)
有两种常用方法实现全局字体替换:

### 方法一:使用自定义docx模板
1. 在Word中新建空白文档,统一设置所有样式的字体为Verdana:
   - 包含正文(Normal样式)、各级标题、表格标题、图表标题等
2. 将文档保存为`custom_template.docx`
3. 在YAML中指定模板路径:
```yaml
---
title: "你的文档标题"
output:
  bookdown::word_document2:
    toc: true
    reference_docx: "custom_template.docx"
---

方法二:用officer包动态修改样式

如果不想手动制作模板,可通过officer包在代码中直接修改文档样式:

install.packages(c("officer", "flextable"))
library(officer)
library(flextable)

# 创建docx对象并设置全局样式
doc <- read_docx() %>%
  # 设置正文默认字体为Verdana,字号11
  body_set_default_style(style_id = "Normal",
                         fp_text(font.size = 11, font.family = "Verdana")) %>%
  # 修改一级标题样式
  style_update(style_id = "Heading 1",
               fp_text(font.size = 16, font.family = "Verdana", bold = TRUE)) %>%
  # 修改表格标题样式
  style_update(style_id = "Table Caption",
               fp_text(font.size = 12, font.family = "Verdana", bold = TRUE)) %>%
  # 修改图表标题样式
  style_update(style_id = "Figure Caption",
               fp_text(font.size = 12, font.family = "Verdana", bold = TRUE))

# 添加示例内容
doc <- doc %>%
  body_add_par("这是正文内容,字体为Verdana") %>%
  body_add_gg(plot(cars), style = "centered") %>%
  body_add_caption("汽车速度与刹车距离的关系", style = "Figure Caption") %>%
  body_add_flextable(flextable(mtcars[1:5,1:3]) %>% set_caption("前5行mtcars数据"))

# 保存文档
print(doc, target = "output.docx")

内容的提问来源于stack exchange,提问作者larry77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 09:43:11