我编写了一个自定义乳胶
.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
:但是什么也没发生。我面临的主要挑战是我或多或少不存在的 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 块。
自定义 Lua
writer