You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用officer包在Word中显示R代码及输出并设置等宽格式?

嘿,很高兴你已经上手officer生成Word文档了!关于在文档里插入R代码(纯代码或代码加输出)并设置等宽字体的问题,我来给你一步步拆解实用方案:

1. 准备工作:加载依赖包

首先确保你已经安装并加载officermagrittr(管道操作能让代码更简洁):

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

火山引擎 最新活动