吞噬 edef 中的可选参数

吞噬 edef 中的可选参数

对于 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}

在此处输入图片描述

相关内容