微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Pandoc 在 latex+raw_tex 和 lua 过滤器之后在元素上重新运行乳胶过滤器

如何解决Pandoc 在 latex+raw_tex 和 lua 过滤器之后在元素上重新运行乳胶过滤器

我一直在编写一个自定义的 LaTeX 阅读器 Lua 过滤器,将一堆 LaTeX 源代码转换为 Pandoc Markdown,这将是我的多个文档的新源。

我运行常用的过滤器,如下所示。

pandoc file.tex \ 
  -f latex+raw_tex \
  -t markdown \
  -o file.md \
  --lua-filter myfilter.lua

这很好用。我已经能够将多个自定义 LaTeX 环境转换为 Div 等。

但是,当我将标准 LaTeX 嵌套 inside 自定义环境时,过滤器输出将保持原样,未转换。例如。

\begin{custom_environment}
\begin{itemize}
\item foo
\item bar
\end{itemize}
\end{custom_environment}

自定义环境由我的过滤器处理得很好,但是内部的 itemizetabular 或类似的东西没有处理,正如您所期望的那样。

是否有某种方法可以使用标准的 latex 扩展(即过滤器)处理自定义环境的内容?我认为这将是来自 Lua 过滤器的调用

我试图避免这样做的一个想法是将内容写入临时文件并在其上运行另一个 pandoc。似乎这种情况无处不在,我希望有更好的方法。谢谢!

解决方法

我找到的最佳解决方案是 pandoc.readhttps://pandoc.org/lua-filters.html#helper-functions

我是这样使用的。

internal_div = pandoc.Div(
    pandoc.read(
        contents_of_custom_environment,'latex'
    ).blocks,'div_label'
)

现在 internal_div 包含自定义环境的 latex 处理内容。请注意,contents_of_custom_environment 只是一个字符串。

我尝试使用 walk_blockwalk_inline,但无法让它们像这样工作。我会欢迎这样做的答案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。