将 \newcommand 定义的所有简写替换为完整命令

将 \newcommand 定义的所有简写替换为完整命令

我习惯在排版论文时使用自己的速记,比如说

\newcommand{\f}{\frac} 
\newcommand{\e}{\epsilon}

最近,让其他人能够阅读我的源文件对我来说变得很重要,因此这种简写是不可取的。有没有办法用\newcommand全名替换所有出现的简写?例如

\lim_{\e\to0} \f{\sin{\e}}{\e}=0

应替换为

\lim_{\epsilon\to0} \frac{\sin{\epsilon}}{\epsilon}=0

因此,我可以使用我通常的速记方式打字,但也可以轻松地复制我的源文件并展开所有速记方式。

答案1

这实际上不是 TeX 问题,所以这里不使用 TeX。最简单的方法可能是使用正则表达式(任何好的文本编辑器都会支持它们)。例如,您可以使用\\f(?![a-zA-Z])查找所有出现的\f并将其替换为\\frac(或\frac,取决于编辑器和首选项)。如果您的文档中有\makeatletter,并且您确定您从未写过\f@您想要的位置\frac@(为什么会这样?),则使用 更安全\\f(?![a-zA-Z@])

这当然不会检测到\csname f\endcsname或之类的东西\@nameuse{f}

答案2

这个问题已经回答在 stackoverflow 上,我在这里重现一下。

有一个不错的 Python 脚本可以完成您要查找的操作:

http://www.ctan.org/tex-archive/support/de-macro

相关内容