【问题标题】:Pandoc re-run latex filter on element after latex+raw_tex and lua filterPandoc 在 latex+raw_tex 和 lua 过滤器之后对元素重新运行 Latex 过滤器
【发布时间】:2021-02-22 09:35:12
【问题描述】:

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

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

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

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

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

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

自定义环境由我的过滤器处理得很好,但内部的 itemizetabular 或类似的未处理,如您所料。

有没有办法使用标准的latex 扩展(即过滤器)来处理自定义环境的内容?我认为这将是来自 Lua 过滤器的调用。

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

【问题讨论】:

  • 我现在正在尝试walk_blockwalk_inline,看起来很有希望……会回来报告。

标签: lua latex pandoc


【解决方案1】:

我找到的最佳解决方案是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,但无法让它们像这样工作。我会欢迎这样做的答案。

【讨论】:

  • Fwiw,我可以让 walk_blockwalk_inline 应用我定义的子过滤器,但我不知道如何让它们应用 OG latex+raw_tex 扩展/过滤器。使用read 很好,但如果有一种方法可以用walk_x 做类似的事情,那就太好了。
猜你喜欢
  • 2019-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-02
  • 1970-01-01
  • 1970-01-01
  • 2013-05-01
相关资源
最近更新 更多