如何在RMarkdown Beamer演示中自定义自动引用的字体大小与颜色?
解决方案:RMarkdown Beamer演示文稿中设置灰色小号引用字体
问题背景
作为RMarkdown新手,制作beamer_presentation格式PDF时,希望将自动引用([@shortname])设置为比普通文本稍小的灰色字体。此前在LaTeX Beamer中可通过重定义cite命令实现,但在RMarkdown中无效;手动用\textcolor{gray}{[e.g., @shortname]}修改时出现“Missing $ inserted”错误。
解决方法
由于使用了CSL格式定义引用样式,直接修改LaTeX cite命令无法生效,需通过Pandoc Lua过滤器处理引用的格式输出:
步骤1:创建Lua过滤器文件
新建名为gray-citations.lua的文件,内容如下:
function Cite(cite) -- 给引用添加灰色、小号字体的LaTeX命令 return pandoc.RawInline('latex', '\\textcolor{gray}{\\small ') .. cite .. pandoc.RawInline('latex', '}') end
步骤2:修改RMarkdown文档的YAML配置
在原MWE的YAML头部添加过滤器引用,并确保相关LaTeX包加载:
--- title: "演示文稿标题" author: "Till" date: 2022.07.25 output: beamer_presentation: incremental: true toc: false slide_level: 2 latex_engine: lualatex keep_tex: TRUE filter: gray-citations.lua # 引用Lua过滤器 bibliography: literature.bib csl: american-sociological-association.csl header-includes: - \usepackage{xcolor} ---
步骤3:调整幻灯片内容中的引用方式
无需手动包裹颜色命令,直接使用标准RMarkdown引用语法:
# 第一部分 ## 示例幻灯片 - 一些文本,后跟引用 [@shortname] - 更多无引用的文本
对应的literature.bib文件保持不变
@article{shortname, title = {引用标题}, journaltitle = {期刊名}, shortjournal = {期刊名}, author = {Lastname, Firstname}, date = {2022}, }
原理说明
Lua过滤器会拦截Pandoc处理过程中的所有引用元素(Cite节点),自动为其包裹\textcolor{gray}{\small ...}命令,既实现格式需求,又避免手动嵌套LaTeX命令导致的语法错误。
内容的提问来源于stack exchange,提问作者Till
相关产品推荐
相关产品推荐

