pandoc md -> Latex 编写 lua-filter 来更改用于标题的 Latex 宏

问题描述 投票:0回答:1

我编写了一个自定义乳胶

.cls
文件来为我的研究所的科学期刊建立排版工作流程。文本应该用 Markdown 编写,然后用
pandoc
处理为 LaTeX。

我已经有了一个详细的 pandoc 模板来生成 LaTeX 序言等。到目前为止,它工作得很好。

但是对于图形,我需要使用

\sidecaption
而不是 LaTeX 中的
\caption
设置 Markdown 文件中的标题,以及图形列表中图像属性的可选参数(短标题)。

为了让后者工作,我使用了 pandoc 存储库中 GitHub 讨论中的以下模板:

PANDOC_VERSION:must_be_at_least '3.1' if FORMAT:match 'latex' then function Figure(f) local short = f.content[1].content[1].attributes['short-caption'] if short and not f.caption.short then f.caption.short = pandoc.Inlines(short) end return f end end
工作没有任何缺陷。

但现在我需要弄清楚如何更改用于标题的 LaTeX 宏。 @tarleb 发布的 pre pandoc 版本 3.0 的旧方法非常直观,我可以轻松地根据我的需求进行调整。但自 pandoc 3.0 以来,出现了新的

复杂数字 方法,到目前为止,我无法弄清楚如何使用这种新行为更改用于字幕的 LaTeX 宏。 我尝试了类似的方法(改编自here

if FORMAT:match 'latex' then function RawBlock (raw) local caption = raw.text:match('\\caption') if caption then raw:gsub('\\caption', '\\sidecaption') end return raw end end

但是什么也没发生。
我面临的主要挑战是我或多或少不存在的 lua 技能。我只是从来不需要用它来完成我的日常任务。我考虑过使用 

awk

sed

 来使用正则表达式替换来编辑 
.tex
 文件本身,但这应该仍然是一个绝对的权宜之计,因为它使整个工作流程不太可移植。
因此,我希望得到 pandoc-lua 脚本形式的提示/解决方案,它 1. 帮助我实现目标,2. 提高我对 lua 和未来类似任务的
复杂数字

方法的理解.

编辑

Julien 建议的普通 LaTeX 解决方案并不是一个真正的选择。 \caption

宏在后端非常复杂,无法通过

\let

\NewCommandCopy
 或类似的东西即时复制。即使这样做之后,例如
\NewCommandCopy{\oldcaption}{\caption}
,然后设置 
\RenewDocumentCommand{\caption}{o m}{\sidecaption[#1]{#2}}
 没有任何变化,并且 
\caption
 的定义,用 
\meaning
 或类似的东西检查,保持与以前相同(甚至 
\DeclareDocumentCommand
 不起作用)。
最后,也许可以以某种方式改变 
\caption

宏本身。但付出的努力可能不值得(这对 TeX.SE 来说更是一个问题)。

一定有一个更简单的使用Lua的解决方案。也许朱利安也建议的作家选项值得一试。但为此,我缺少的 Lua 技能仍然是一个障碍。现在,我正在使用 sed 脚本,它运行得很好。但它限制了 Unix 系统的使用。因此,一个简单的 pandoc 解决方案仍然是我们的目标。

Lua 过滤器仅更改 Pandoc 文档的 AST 表示,即在将其转换为 LaTeX 之前。原始块过滤器不会作用于 Pandoc 的 LaTeX 输出,而只会作用于 markdown 本身中的原始 LaTeX 块。
filter lua pandoc caption
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.