如何使用officer包在Word中显示R代码及输出并设置等宽格式?
嘿,很高兴你已经上手officer生成Word文档了!关于在文档里插入R代码(纯代码或代码加输出)并设置等宽字体的问题,我来给你一步步拆解实用方案:
1. 准备工作:加载依赖包
首先确保你已经安装并加载officer和magrittr(管道操作能让代码更简洁):
install.packages(c("officer", "magrittr")) library(officer) library(magrittr)
2. 定义等宽字体格式
先提前定义Courier等宽字体的样式,后续可以直接复用:
# 常规等宽字体(用于输出) courier_normal <- fp_text(font.family = "Courier", size = 10, bold = FALSE) # 加粗等宽字体(用于代码本身,区分度更高) courier_bold <- fp_text(font.family = "Courier", size = 10, bold = TRUE) # 可选:给代码段落加左侧缩进,更美观 code_indent <- fp_par(margin = margin(l = 1, unit = "cm"))
3. 插入纯R代码
有两种常用方式,按需选择:
方式A:直接插入文本并应用格式
适合完全自定义样式的场景:
# 创建空Word文档对象 doc <- read_docx() # 示例代码 my_code <- "x <- seq(1, 100, by = 5) summary(x) plot(x, main = '序列可视化')" # 添加标题+代码,并应用等宽格式 doc <- doc %>% body_add_par("纯R代码示例:", style = "Heading 2") %>% body_add_par(my_code, style = "Normal") %>% body_set_paragraph_properties(fp_p = code_indent, fp_t = courier_bold)
方式B:用body_add_code快速插入
officer自带的body_add_code函数默认会用等宽样式,如果你不需要太复杂的自定义,可以直接用:
doc <- doc %>% body_add_par("用body_add_code插入代码:", style = "Heading 2") %>% body_add_code(code = my_code, style = "Code")
提示:如果默认的"Code"样式不符合需求,你可以在Word里修改这个样式的字体,或者在R里用
fp_text重新定义后替换。
4. 插入R代码+运行输出
要同时展示代码和运行结果,我们可以用capture.output()捕获代码的输出,再分别插入并设置格式:
# 捕获代码运行的输出内容 my_output <- capture.output({ x <- seq(1, 100, by = 5) print(summary(x)) }) # 插入代码+输出 doc <- doc %>% body_add_par("代码+运行输出示例:", style = "Heading 2") %>% # 插入代码,用加粗等宽字体 body_add_par(my_code, style = "Normal") %>% body_set_paragraph_properties(fp_p = code_indent, fp_t = courier_bold) %>% # 插入输出,用常规等宽字体 body_add_par("运行输出:", style = "Normal") %>% body_add_par(paste(my_output, collapse = "\n"), style = "Normal") %>% body_set_paragraph_properties(fp_p = code_indent, fp_t = courier_normal)
5. 保存文档
最后将编辑好的文档保存到本地:
print(doc, target = "可复现研究文档.docx")
这样操作下来,你就能在Word文档里清晰展示R代码和输出,并且保持统一的等宽字体格式啦。如果还有细节问题,随时再问!
内容的提问来源于stack exchange,提问作者Paul




