考虑以下示例,在 里面使用\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
?
``