免责声明:我已经尝试寻找答案,但我找到的所有内容都与选修的\includegraphics
或其他宏及其特定实现的参数。
我正在开发一个包含使用外部程序生成的图像的(LuaLaTeX)包。
\lily{ c' }
将内容包装c'
到适当的文档中,调用 LilyPond 乐谱编写器来生成乐谱,然后将生成的 PDF 包含在文档中.tex
(使用类似tex.print('\includegraphics{<resulting-file-hash>}')
为了使二次封装能够使用生成的结果我实现了一个选项raw-pdf
,而不是发出\includegraphics
简单地将生成的哈希打印回 .tex 文档(tex.sprint(<generated-filename>)
)
\lily[raw-pdf]{ c' }
正常工作并将在编译的.tex 文档中打印生成的文件名。
但当我尝试做
\includegraphics{\lily[raw-pdf]{ c' }}
我收到错误
! TeX capacity exceeded, sorry [input stack size=5000].
<argument> \@protected@testopt \lily
\\lily {}[raw-pdf]{ c' }
l.19 ...dafter\includegraphics{\lily[raw-pdf]{ c' }}
我猜想这与扩张有关,但我完全不知道到底发生了什么。有人告诉我尝试
\expandafter\includegraphics{\lily[raw-pdf]{ c' }}
但这没有帮助。
这是一个完整的最小示例
\documentclass{scrartcl}
\usepackage{lyluatex}
\begin{document}
\includegraphics{\lily[raw-pdf]{ c' }}
\end{document}
请注意,lyluatex
必须使用来自https://github.com/jperon/lyluatex而不是 TeXLive 中已有的版本!
答案1
您可以使用扩展到参数中的名称的宏,但不能使用任意定义,您的示例如下
\includegraphics{\def\foo{aaa}\def\zz{bbb}\foo\zz}
这是行不通的。
工作是什么
\def\foo{aaa}\def\zz{bbb}\includegraphics{\foo\zz}
因此,您需要安排您使用的宏返回某个宏中的名称,然后该宏可以与一起使用\includegraphics
。
也就是说
为了让辅助包能够使用生成的结果,我实现了一个选项
raw-pdf
,它不是\includegraphics
简单地将生成的哈希打印回 .tex 文档(tex.sprint(<generated-filename>))
你可能想要\lily[raw-pdf]{..}
定义一个宏,\lilyrawpdf
然后你可以这样做
\lily[raw-pdf]{...}\includegraphics{\lilyrawpdf}
请注意,这并不特定于\includegraphics
如果你看看你自己的\lily
命令,很可能
\lily{\def\foo{c}\foo}
不像
\lily{c}
或者
\def\foo{c}\lily{\foo}