扩展错误

扩展错误

我在尝试编译这个最小示例时遇到错误:

最小分类号:

\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。需要了解如何定义可疑命令。

也可以看看最小 \protected@edef 示例嵌套 \noexpand 和 \edef 的问题

相关内容