如何在Pandoc生成的Reveal.js幻灯片内容中显示YAML元数据值?
在Reveal.js幻灯片内容中调用YAML元数据的方法
当然可以实现,以下是两种实用方案:
方案一:使用内联Lua过滤器
这是最灵活的方式,只需要一段简单的Lua脚本,就能让Pandoc在编译时自动替换内容里的标记为YAML元数据对应的值。
- 准备你的markdown文件(比如
slides.md),示例内容如下:
--- title: "我的演示文稿" author: "张三" date: "2024-05-20" --- ## 幻灯片1 这是由{{author}}在{{date}}制作的《{{title}}》演示文稿。
- 创建Lua过滤器文件(比如
meta-filter.lua),代码如下:
function Str(s) local text = s.text -- 匹配{{变量名}}格式的标记,替换为对应元数据 local replaced = text:gsub("{{(.-)}}", function(var) return PANDOC_META[var] or text end) return pandoc.Str(replaced) end
- 编译时带上过滤器参数:
pandoc slides.md -t revealjs -o slides.html --lua-filter=meta-filter.lua
编译完成后,幻灯片里的{{author}}、{{date}}、{{title}}会自动替换成YAML中对应的元数据值。
方案二:结合--variable参数与HTML片段
如果不想写Lua脚本,也可以通过传递变量+启用HTML解析的方式实现,适合仅引用少量元数据的场景:
- 修改markdown内容,用HTML包裹模板语法:
--- title: "我的演示文稿" --- ## 幻灯片2 当前演示文稿标题:<span>$title$</span>
- 编译时传入变量并启用原始HTML解析:
pandoc slides.md -t revealjs -o slides.html --variable title="$title$" --raw-html=markdown
注意:直接在markdown内容里写$variable-name$无效,因为Pandoc仅会在模板文件中解析这类语法,内容区域默认不处理,必须通过上述两种方式实现变量替换。
内容的提问来源于stack exchange,提问作者Miren BZ
相关产品推荐
相关产品推荐

