如何在Pandoc导出HTML时格式化$date$变量的日期格式?
Pandoc日期格式化实现方法
你可以根据自己使用的Pandoc版本,选择以下任意一种方案实现自定义日期格式:
方案1:原生模板语法(推荐,Pandoc 2.17+版本支持)
Pandoc从2.17版本开始,原生支持在模板中直接对日期类型的变量指定输出格式,不需要额外写脚本或过滤器。
你只需要修改自定义模板中$date$的调用方式,把目标格式字符串作为参数传入即可,对应你需要的日 月缩写 年效果,模板代码修改为:
$if(date)$ <p>$date("%d %b %Y")$</p> $endif$
其中%d %b %Y是标准strftime格式字符串,会自动把ISO格式的2022-06-17转换为17 Jun 2022,直接输出你需要的HTML结构。
注意:该方法要求
date变量的值为合法的ISO 8601格式(YYYY-MM-DD结构),非合法日期值会直接原样输出,不做格式化处理。
方案2:Lua过滤器兼容旧版本
如果使用的是2.17以下的旧版Pandoc,可以通过轻量Lua过滤器在元数据传入模板前完成日期格式化,不需要修改原有模板的$date$调用逻辑。
- 新建名为
date-format.lua的过滤器文件,写入以下代码:
function Meta(meta) if not meta.date then return meta end local year, month, day = tostring(meta.date):match("^(%d%d%d%d)-(%d%d)-(%d%d)$") if not (year and month and day) then return meta end local month_abbr = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} meta.date = pandoc.MetaString(string.format("%d %s %d", day, month_abbr[tonumber(month)], year)) return meta end
- 转换文件时追加
--lua-filter参数加载该过滤器即可,命令示例:
pandoc your-document.tex -o output.html --template=your-custom-template.html --lua-filter=date-format.lua
方案3:命令行传入预格式化日期
如果你的文档不需要保留元数据内的原始日期,只是需要输出当前日期的指定格式,可以直接在转换命令中生成格式化后的日期值,通过元数据参数传入覆盖原有date变量:
pandoc your-document.tex -o output.html --template=your-custom-template.html -M date="$(date +"%d %b %Y")"
该方法依赖系统的date命令,Windows系统可根据对应的shell环境调整日期生成语句。
内容的提问来源于stack exchange,提问作者Nikita Karamov
相关产品推荐
相关产品推荐

