如何将YAML选项传入rmarkdown::render以调整PDF页边距与字体
解决方法
当然可以,不用修改原markdown文件就能传递这些YAML配置,有两种常用方式:
方法一:通过metadata参数传递顶层YAML配置
rmarkdown::render提供了metadata参数,专门用来传递顶层YAML元数据(比如mainfont、geometry这类不属于pdf_document子选项的配置),而pdf_document的专属参数(比如latex_engine)依然在output_format里设置。示例代码如下:
rmarkdown::render( input = "my_report.md", output_format = rmarkdown::pdf_document(latex_engine = "xelatex"), metadata = list( mainfont = "LiberationSans", geometry = "left=5cm,right=3cm,top=2cm,bottom=2cm" ) )
这种方式最简洁,不需要改动原文件,直接通过函数参数完成配置。
方法二:临时注入YAML头到markdown内容
如果需要更复杂的YAML配置,或者担心metadata参数的兼容性,可以先读取原markdown内容,在开头拼接YAML头后写入临时文件,再渲染临时文件。示例代码:
# 读取原markdown文件内容 md_content <- readLines("my_report.md") # 构建要添加的YAML头 yaml_header <- c( "---", "output:", " pdf_document:", " latex_engine: xelatex", "mainfont: LiberationSans", "geometry: \"left=5cm,right=3cm,top=2cm,bottom=2cm\"", "---", "" ) # 合并YAML头与原内容 new_md_content <- c(yaml_header, md_content) # 创建临时markdown文件 temp_file <- tempfile(fileext = ".md") writeLines(new_md_content, temp_file) # 渲染临时文件 rmarkdown::render( input = temp_file, output_format = rmarkdown::pdf_document(latex_engine = "xelatex") ) # 可选:渲染完成后删除临时文件 file.remove(temp_file)
这种方式灵活性更高,适合需要添加多种YAML配置的场景。
内容的提问来源于stack exchange,提问作者mirirai
相关产品推荐
相关产品推荐

