如何向R Markdown PDF的YAML配置添加自定义首页信息项
R Markdown 首页新增自定义信息实现方案
直接按以下两步修改文档即可,同时兼容PDF和HTML输出,不需要额外修改复杂模板。
1. 替换原有YAML配置
把你原来的YAML头部替换成下面的内容,静态信息(课程名、导师名)直接替换成自己的实际内容即可,动态统计项不需要手动修改,会自动计算填充:
--- title: "Title of report " author: | my name *邮箱*: my email *课程名称*: 替换为你的实际课程名称 *指导导师*: 替换为你的实际导师姓名 *文档总字数*: `r total_words` *图表总数量*: `r total_figs` *表格总数量*: `r total_tables` date: '2022-07-06' output: pdf_document: latex_engine: xelatex fig_width: 4.5 fig_height: 3 html_document: df_print: paged header-includes: - \usepackage{setspace} - \onehalfspacing - \usepackage{authblk} csl: chicago-author-date.csl bibliography: bib1.bib ---
配置里加的
authblk是LaTeX包,作用是让首页作者区域的多行内容自动适配排版,不会挤成一行,用TinyTeX的话渲染时会自动安装,不需要手动操作。
2. 在YAML后添加统计代码块
紧挨着YAML头部的下方,添加下面的隐藏R代码块,作用是自动统计总字数、图表数、表格数,代码运行过程不会显示在最终文档里:
```{r global_stats, include=FALSE} # 首次使用请先运行安装依赖:install.packages("stringi") library(stringi) # 文档渲染完成后自动执行统计 knitr::knit_hooks$set(document = function(x) { # 统计总字数:剔除代码块内容,只统计正文、图注、表注文字 clean_content <- x[!grepl("^```", x)] assign("total_words", stri_count_words(paste(clean_content, collapse = " ")), envir = globalenv()) # 统计图表总数:排除设置了隐藏属性的图片,只统计最终展示的图表 all_chunks <- knitr::knit_code$get() valid_fig_chunks <- Filter(function(chunk_opt) { !isTRUE(chunk_opt$fig.show == "hide") & !isTRUE(chunk_opt$eval == FALSE) }, all_chunks) assign("total_figs", length(valid_fig_chunks), envir = globalenv()) # 统计表格总数:兼容kable、gt、基础表格、flextable等主流表格输出格式 table_match <- grepl("(\\\\begin\\{table\\})|(<table class=)|(::: \\{.cell\\})|(gt_table)|(flextable)", x) assign("total_tables", sum(table_match), envir = globalenv()) x }) ```
注意事项
- 字数统计默认排除R代码块内容,如果需要把代码块内容算入总字数,删掉
clean_content那一行的过滤规则即可 - 如果你用的是DT、reactable这类交互表格,默认统计规则也能识别,如果出现计数偏差,可以调整代码里表格匹配的正则规则
- 如果不需要某一项展示,直接在YAML的
author字段里删掉对应行就行
内容的提问来源于stack exchange,提问作者Faranak omidi
相关产品推荐
相关产品推荐

