如何使用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
相关产品推荐
相关产品推荐

