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

如何使用officer设置目录的罗马数字+数字混合编号样式?

解决officer中body_add_toc生成罗马数字+阿拉伯数字混合目录的问题

方案1:分级别自定义标题样式

通过为不同编号格式的章节分配不同标题级别,并修改对应级别的编号规则,实现目录的混合编号:

library(officer)

# 初始化Word文档
doc <- read_docx()

# 修改默认Heading 1样式为小写罗马数字编号
doc <- doc %>%
  style_update(
    style_id = "heading 1",
    num_fmt = "lowerRoman",
    level = 1
  )

# 添加罗马数字编号的章节
doc <- body_add_par(doc, "章节1", style = "heading 1")
doc <- body_add_par(doc, "章节2", style = "heading 1")
doc <- body_add_par(doc, "章节3", style = "heading 1")

# 新建阿拉伯数字编号的标题样式(基于Heading 2)
doc <- doc %>%
  style_add(
    style_name = "Arabic Heading",
    base_style = "heading 2",
    num_fmt = "decimal",
    level = 2
  )

# 添加阿拉伯数字编号的章节
doc <- body_add_par(doc, "新章节1", style = "Arabic Heading")
doc <- body_add_par(doc, "新章节2", style = "Arabic Heading")

# 生成包含2级标题的目录
doc <- body_add_toc(doc, level = 2)

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

说明:

  • 将需罗马数字编号的章节设为Heading 1,修改其编号格式为lowerRoman
  • 新建基于Heading 2的自定义样式,设置编号格式为decimal(阿拉伯数字)用于后续章节
  • 生成目录时指定level = 2,即可同时收录两种编号格式的章节

方案2:同级别下切换编号序列

如果需要同一标题级别下混合使用罗马/阿拉伯数字编号,可通过run_autonum创建独立编号序列实现:

library(officer)

doc <- read_docx()

# 添加罗马数字编号的章节(使用独立序列ID)
doc <- body_add_par(
  doc,
  value = ftext("章节1", fp_text()),
  style = "heading 1",
  run_autonum(seq_id = "roman_seq", num_fmt = "lowerRoman", bkm = "ch1")
)

doc <- body_add_par(
  doc,
  value = ftext("章节2", fp_text()),
  style = "heading 1",
  run_autonum(seq_id = "roman_seq", bkm = "ch2")
)

doc <- body_add_par(
  doc,
  value = ftext("章节3", fp_text()),
  style = "heading 1",
  run_autonum(seq_id = "roman_seq", bkm = "ch3")
)

# 重置为阿拉伯数字编号(新序列ID,从1开始)
doc <- body_add_par(
  doc,
  value = ftext("新章节1", fp_text()),
  style = "heading 1",
  run_autonum(seq_id = "arabic_seq", num_fmt = "decimal", start_at = 1, bkm = "new_ch1")
)

doc <- body_add_par(
  doc,
  value = ftext("新章节2", fp_text()),
  style = "heading 1",
  run_autonum(seq_id = "arabic_seq", bkm = "new_ch2")
)

# 生成目录(收录Heading 1级别)
doc <- body_add_toc(doc, level = 1)

print(doc, target = "same_level_mixed_toc.docx")

说明:

  • 用seq_id区分不同编号序列,罗马数字序列和阿拉伯数字序列相互独立
  • start_at = 1确保阿拉伯数字序列从1开始计数
  • 生成目录时仅需指定级别1,即可自动收录两种编号格式的章节

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:40:38