自定义Pandoc-writer元素输出



是否可以为pandoc编写器自定义元素输出?

给定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>。或者添加另一个类,即父<div>

edit:我认为格式化是作者的责任,但也有可能是在创建AST时决定的。

这就是pandoc过滤器的作用。可能最简单的方法是使用Lua过滤器,因为这些过滤器内置在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讨论邮件列表上也有类似的问题;它处理LaTeX输出,但也处理自定义rst元素。你可能会觉得它很有指导意义。


Nota-bene:以上内容可以通过使用pandoc的一个功能来缩短,该功能输出带有一类已知HTML元素的跨度和div:

function Strong (element)
return pandoc.Span(element.content, {class = 'mark'})
end

但我认为先看一般情况更容易。

相关内容

  • 没有找到相关文章

最新更新