![吞噬 edef 中的可选参数](https://linux22.com/image/359599/%E5%90%9E%E5%99%AC%20edef%20%E4%B8%AD%E7%9A%84%E5%8F%AF%E9%80%89%E5%8F%82%E6%95%B0.png)
对于 reledmac/reledpar 的一些改进(https://github.com/maieul/ledmac/issues/668),我需要在 中使用宏之前吞噬宏的任何参数\edef
。但我收到错误。
参见此 MWE
\documentclass{book}
\usepackage{imakeidx}
\makeindex[name=toto,title=toto]
\makeindex
\begin{document}
s\renewcommand{\index}[1]{}
\edef\titi{\index{sncf}a}%That works
s\renewcommand{\index}[2][]{}
\edef\titi{\index[a]{sncf}a}%That does not work
\end{document}
答案1
带有可选参数的宏不会保留\edef
,除非它们是用 定义的xparse
(\NewExpandableDocumentCommand
有一些限制)。
\documentclass{book}
\usepackage{xparse}
\usepackage{imakeidx}
\makeindex[name=toto,title=toto]
\makeindex
\begin{document}
s\renewcommand{\index}[1]{}
\edef\titi{\index{sncf}a}%That works
\titi
s\RenewExpandableDocumentCommand{\index}{om}{}
\edef\titi{\index[a]{sncf}a}%This works, too
\titi
\end{document}