如何在Pandoc HTML输出中格式化${date}?

3

我有一个LaTeX文档,使用Pandoc将其转换为HTML。我的模板引用$date$变量的方式如下:

$if(date)$
<p>$date$</p>
$endif$

通常情况下,$date$的值是ISO格式的日期(例如今天的日期为2022-06-17)。我想要将其格式化为可读性更强的格式,以便获得以下输出:

<p>17 Jun 2022</p>

通常情况下,可以使用格式字符串来实现这一点(例如上面的示例:%d %b %Y)。是否有一种方法可以在Pandoc的输出中实现这个呢?
1个回答

4
一个简单的 Lua 过滤器可以实现这一点。 以下过滤器代码改编自 Pandoc 文档中的 在元数据中设置日期
-- filters/date-format.lua
function Meta(meta)
  if meta.date then
    local format = "(%d+)-(%d+)-(%d+)"
    local y, m, d = pandoc.utils.stringify(meta.date):match(format)
    local date = os.time({
      year = y,
      month = m,
      day = d,
    })
    local date_string = os.date("%d %b %Y", date)

    meta.date = pandoc.Str(date_string)
    return meta
  end
end

---
# test.md
title: My Title
date: 2022-06-18
---

<!-- templates/date.html -->
$if(date)$
<p>$date$</p>
$endif$

使用命令pandoc --data-dir=. --template=date --lua-filter=date-format.lua test.md -o test.html进行编译。 输出结果应为<p>2022年6月18日</p>


2
执行时遇到了一个小问题,使用 --data-dir 修复:pandoc --template ./templates/date.html --lua-filter ./filters/date-format.lua test.md -o test.html - Nikita Karamov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接