自定义 Pandoc writer 元素输出
Customising Pandoc writer element output
是否可以为 pandoc writer 自定义元素输出?
给定 reStructuredText 输入
.. topic:: Topic Title
Content in the topic
使用 HTML 编写器,Pandoc 将生成
<div class="topic">
<p><strong>Topic Title</strong></p>
<p>Content in the topic</p>
</div>
是否有支持的方法来更改 html 输出?比如说,<strong>
到 <mark>
。或者添加另一个 class 父级 <div>
.
编辑:我假设格式化是作者的责任,但也有可能是在创建 AST 时决定的。
这就是 pandoc filters are for. Possibly the easiest way is to use Lua filters,因为它们内置于 pandoc 中,不需要安装额外的软件。
基本思路是匹配根据输入创建的 AST 元素,并为目标格式生成原始输出。因此,如果所有 Strong
元素要在 HTML 中输出为 <mark>
,您将编写
function Strong (element)
-- the result will be the element's contents, which will no longer be 'strong'
local result = element.content
-- wrap contents in `<mark>` element
result:insert(1, pandoc.RawInline('html', '<mark>'))
result:insert(pandoc.RawInline('html', '</mark>'))
return result
end
您通常希望通过 运行 pandoc --to=native YOUR_FILE.rst
检查 pandoc 的内部表示。这使得编写过滤器变得更加容易。
pandoc-discuss 邮件列表中有 similar question;它处理 LaTeX 输出,但也涉及处理自定义第一个元素。您可能会发现它具有指导意义。
注意事项:可以通过使用 pandoc 的一个功能来缩短上述内容,该功能输出 span 和 div,其中 class 已知 HTML 元素作为该元素:
function Strong (element)
return pandoc.Span(element.content, {class = 'mark'})
end
不过我觉得还是先看一般情况比较容易。
是否可以为 pandoc writer 自定义元素输出?
给定 reStructuredText 输入
.. topic:: Topic Title
Content in the topic
使用 HTML 编写器,Pandoc 将生成
<div class="topic">
<p><strong>Topic Title</strong></p>
<p>Content in the topic</p>
</div>
是否有支持的方法来更改 html 输出?比如说,<strong>
到 <mark>
。或者添加另一个 class 父级 <div>
.
编辑:我假设格式化是作者的责任,但也有可能是在创建 AST 时决定的。
这就是 pandoc filters are for. Possibly the easiest way is to use Lua filters,因为它们内置于 pandoc 中,不需要安装额外的软件。
基本思路是匹配根据输入创建的 AST 元素,并为目标格式生成原始输出。因此,如果所有 Strong
元素要在 HTML 中输出为 <mark>
,您将编写
function Strong (element)
-- the result will be the element's contents, which will no longer be 'strong'
local result = element.content
-- wrap contents in `<mark>` element
result:insert(1, pandoc.RawInline('html', '<mark>'))
result:insert(pandoc.RawInline('html', '</mark>'))
return result
end
您通常希望通过 运行 pandoc --to=native YOUR_FILE.rst
检查 pandoc 的内部表示。这使得编写过滤器变得更加容易。
pandoc-discuss 邮件列表中有 similar question;它处理 LaTeX 输出,但也涉及处理自定义第一个元素。您可能会发现它具有指导意义。
注意事项:可以通过使用 pandoc 的一个功能来缩短上述内容,该功能输出 span 和 div,其中 class 已知 HTML 元素作为该元素:
function Strong (element)
return pandoc.Span(element.content, {class = 'mark'})
end
不过我觉得还是先看一般情况比较容易。