Rmarkdown 与 pandoc 模板,在中间 .tex 上应用 lua 过滤器
我正在尝试使用 lua 过滤器来捕获手稿中的图像,并在其末尾的特殊 \ 部分中列出它们的标题。 我正在处理一个 rmarkdown 文档,它本身使用 .tex 模板。
我无法到达任何地方,所以我运行了一个非常简单的过滤器:
function Header (head) print(pandoc.utils.stringify(head)) end
并注意到只有降价中的标题被识别,而不是模板中的标题。
我发现让 lua 过滤器识别模板中的元素的唯一方法是使用 pandoc 重新运行生成的 .tex 文件:
pandoc -f latex -t latex -o test2.tex --lua-filter=my_filters.lua test.tex
但这删除了正文之外的所有乳胶格式和结构内容,例如 \documentclass、\usepackage 和其他自定义命令。所以这是不行的。
那么问题来了,在编织 rmarkdown 文档时,有没有办法在集成 Latex 模板后强制应用 lua 过滤器呢?
I'm trying to use lua filters to capture images in my manuscript and list their caption in a special \section at the end of it.
I am working on a rmarkdown document that itself uses a .tex template.
I wasn't able to get anywhere, so I run a very simple filter:
function Header (head) print(pandoc.utils.stringify(head)) end
and noticed that just the headers in the markdown were recognized, not the ones in the ones in the template.
The only way I found to have lua filters recognize the elements in the template was to rerun the produced .tex file with pandoc:
pandoc -f latex -t latex -o test2.tex --lua-filter=my_filters.lua test.tex
but that removed all latex formatting and structure content outside the body, e.g., \documentclass, \usepackage and other custom commands. So it's a no go.
So the question is, is there a way to force lua filter to be applied after the integration of a latex template when knitting a rmarkdown document?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
可能有一种方法,但它很可能无法满足您的需要。
当 pandoc 读取文档时,它会解析该文档并将其转换为其内部数据结构。然后可以使用过滤器修改该内部结构。 LaTeX 是一种非常具有表现力且复杂的文档格式,任何从 LaTeX 到 pandoc 内部格式的转换都会导致(布局)信息的丢失。在大多数情况下这已经足够好了,但在您的情况下这将是一个问题。
有两种可能的方法可以做到这一点:一种是对输出进行后处理,这可能很乏味且容易出错。另一个是找到一种方法来生成所需的输出,例如通过 pandoc 过滤器,而不首先将其添加到模板中。
我相信您的其他问题是正确的方法。
There might be a way, but it most likely won't do what you need.
When pandoc reads a document, it parses it and converts it into it's internal data structure. That internal structure can then be modified with a filter. LaTeX is a very expressive and complex document format, and any conversion from LaTeX into pandoc's internal format will result in a loss of (layout) information. That's good enough in most cases, but would be a problem in your case.
There are two possible ways to do this: one is to post-process the output, which is probably tedious and error-prone. The other is to find a way to generate the desired output, e.g. via a pandoc filter, without adding it to the template first.
I believe your other question is the right way to go.