问题描述
我一直在编写一个自定义的 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}
自定义环境由我的过滤器处理得很好,但是内部的 itemize
或 tabular
或类似的东西没有处理,正如您所期望的那样。
是否有某种方法可以使用标准的 latex
扩展(即过滤器)处理自定义环境的内容?我认为这将是来自 Lua 过滤器的调用。
我试图避免这样做的一个想法是将内容写入临时文件并在其上运行另一个 pandoc
。似乎这种情况无处不在,我希望有更好的方法。谢谢!
解决方法
我找到的最佳解决方案是 pandoc.read
:
https://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_block
和 walk_inline
,但无法让它们像这样工作。我会欢迎这样做的答案。