RMarkdown自定义字体函数问题:cat()输出至控制台而非生成代码块
解决RMarkdown中自定义字体函数cat输出不嵌入文档的问题
问题核心
自定义函数用cat()输出字体配置代码时,RMarkdown默认会将其输出到控制台,而非嵌入到生成的文档源码中,但手动复制该内容作为代码块却能正常工作——这是因为cat()的输出没有被knitr识别为需要插入文档的原始内容。
解决方案
修改自定义函数,让输出被knitr标记为原始输出(asis),这样knitr会直接将内容插入文档,而非输出到控制台。
示例代码修正
假设你原来的函数是这样:
set_font <- function(font = "Arial") { cat(paste0("\\usepackage{fontspec}\n\\setmainfont{", font, "}")) }
修改为:
set_font <- function(font = "Arial") { font_code <- paste0("\\usepackage{fontspec}\n\\setmainfont{", font, "}") knitr::asis_output(font_code) }
调用方式
在RMarkdown的代码块中直接调用函数即可,无需额外配置:
set_font("Times New Roman")
如果不想修改函数,也可以在调用函数的代码块中添加results='asis'选项,强制knitr将输出插入文档:
set_font("Arial")
注意事项
- 该方法适用于XeLaTeX或LuaLaTeX编译的PDF文档(依赖
fontspec包),如果是HTML输出,需要替换为对应的CSS字体设置代码。 - 作为包的一部分,确保你的包依赖
knitr,并在DESCRIPTION文件中声明。
内容的提问来源于stack exchange,提问作者Dieu94
相关产品推荐
相关产品推荐

