我在尝试编译这个最小示例时遇到错误:
最小分类号:
\ProvidesClass{min}
\LoadClass{minimal}
\NeedsTeXFormat{LaTeX2e}
\newenvironment{myenv}{}{
\def\aaa{test }
\expandafter\def\csname bbb\endcsname{$4\sqrt{2}$}
\bbb
\edef\aaa{\aaa \bbb}
\aaa
}
\endinput
mintest.tex:
\documentclass{min}
\begin{document}
\begin{myenv}
Test
\end{myenv}
\end{document}
在 mintest.tex 上运行 latex 会产生以下错误:
ERROR: Use of \@sqrt doesn't match its definition.
--- TeX said ---
\@ifnextchar ...eserved@d =#1\def \reserved@a {#2}
\def \reserved@b {#3}\futu...
l.7 \end{myenv}
\aaa
很奇怪。我想通过连接来扩展 的定义。有什么想法吗?
答案1
TeX 不喜欢查找带有可选参数或在;\DeclareRobustCommand
内部定义的命令\edef
,\sqrt
而属于第一种类型,\bfseries
属于第二种。
在你的情况下
\protected@edef\aaa{\aaa\bbb}
将工作。
但要小心:脆弱的命令,如\linebreak
不能直接进入\protected@edef
,并且必须在前面加上\protect
。需要了解如何定义可疑命令。