宏中的 At 命令

宏中的 At 命令

如果我@在定义宏时使用带有 的宏,Latex 会给出看似不相关的错误。错误在 tectonic、pdflatex 和 Overleaf 中是一致的,尽管 Overleaf 似乎可以克服错误并生成文档。

深入研究使用\@whilenum宏定义时出现的错误,我得到了以下可重现该错误的最小乳胶:

\documentclass{article}
\makeatletter
\def\@atcommand #1{}
\makeatother
\begin{document}
\newcommand{\mymacro}{
  \newcounter{x}
  \makeatletter
  \@atcommand{\value{x}}
  \makeatother
}
\mymacro
Notempty % Ensure we don't get emptydoc
\end{document}

这会出现错误:

! You can't use `\spacefactor' in vertical mode.
\@ ->\spacefactor 
                  \@m {}
l.12 \mymacro

或者,如果在tikzpicture(如原始片段所示)中Missing number, treated as zero

以下任何一种方式都可以避免出现错误:@从宏的定义和使用中删除atcommand;从宏之外删除定义mymacro并直接运行;atcommand使用整数值而不是计数器的值进行调用。

只是好奇发生了什么。这个问题源自一位学生问为什么他们的文档没有编译:我给了他们另一种方法来实现他们想要的,但我想让他们清楚地解释一下他们第一次尝试时出了什么问题。

相关内容