我有一个 LaTeX 文档,我使用 Pandoc 将其转换为 HTML。我的模板引用了
$date$
变量,如下所示:
$if(date)$
<p>$date$</p>
$endif$
与往常一样,
$date$
的值是 ISO 格式的日期(例如,今天是 2022-06-17)。我想对其进行格式化,使其具有人类可读的格式,以便我可以获得以下输出:
<p>17 Jun 2022</p>
通常,可以使用格式字符串来实现这一点(对于上面的示例:
%d %b %Y
)。有没有办法对 Pandoc 的输出做到这一点?
一个简单的 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>18 Jun 2022</p>
。
这是您可以使用的另一种方法,假设您在 Linux / Unix 环境中运行 pandoc,并且您在编译文档时尝试获取日期以动态填充 HTML 标头。
我正在使用 Markdown 输入文档,但我相信此方法应该适用于支持 pandoc 文档标题的其他类型的输入(https://pandoc.org/MANUAL.html#extension-yaml_metadata_block)。
对于上下文,使用 https://pandoc.org/MANUAL.html#templates
与我的输入文件
document.md
---
title: "Document title goes here"
date: $date
---
...
...
注意此处引用的变量
$date
使用这样的命令进行编译
pandoc document.md \
-V "date:$(date '+%Y-%m-%d')" \
--output=document.html \
--from=markdown \
--to=html
输出
document.html
将包含这样的内容
<!DOCTYPE html>
...
<body>
<header id="title-block-header">
<h1 class="title">Document title goes here</h1>
<p class="date">2024-02-14</p>
</header>
...
如您所见,日期“2024-02-14”已插入 HTML 输出中