如何在 \xpatchcmd 中使用 \csname?

如何在 \xpatchcmd 中使用 \csname?

考虑以下示例,在 里面使用\csname和的正确方法是什么?\endcsname\xpatchcmd

\documentclass{article}

\usepackage{regexpatch}

\begin{document}

\def\foo{foo}
\def\bar{with a macro \foo}

\bar

% \xpatchcmd{\bar}{\foo}{bar}{}{\FAIL}
\xpatchcmd{\bar}{\csname\foo\endcsname}{bar}{}{\FAIL}

\bar

\end{document}

答案1

在下一个版本的 LaTeX 中,\ExpandArgs你将能够

\ExpandArgs{nc}\xpatchcmd{\bar}{\foo}{bar}{}{\FAIL}

这在开发分支中已经是可能的;如果你pdflatex-dev在代码上运行

\documentclass{article}

\usepackage{regexpatch}

\begin{document}

\def\foo{foo}
\def\bar{with a macro \foo}

\ShowCommand\bar

\ExpandArgs{nc}\xpatchcmd{\bar}{\foo}{bar}{}{\FAIL}

\ShowCommand\bar

\end{document}

控制台将显示

> \bar=macro:
->with a macro \foo .
<argument> \bar

l.10 \ShowCommand\bar

?
> \bar=macro:
->with a macro bar.
<argument> \bar

l.14 \ShowCommand\bar

?
``

相关内容