You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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$调用逻辑。

  1. 新建名为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
  1. 转换文件时追加--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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 08:46:34