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

问题描述 投票:0回答:2

我有一个 LaTeX 文档,我使用 Pandoc 将其转换为 HTML。我的模板引用了

$date$
变量,如下所示:

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

与往常一样,

$date$
的值是 ISO 格式的日期(例如,今天是 2022-06-17)。我想对其进行格式化,使其具有人类可读的格式,以便我可以获得以下输出:

<p>17 Jun 2022</p>

通常,可以使用格式字符串来实现这一点(对于上面的示例:

%d %b %Y
)。有没有办法对 Pandoc 的输出做到这一点?

pandoc
2个回答
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>18 Jun 2022</p>


0
投票

这是您可以使用的另一种方法,假设您在 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 输出中

© www.soinside.com 2019 - 2024. All rights reserved.