如果我@
在定义宏时使用带有 的宏,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
使用整数值而不是计数器的值进行调用。
只是好奇发生了什么。这个问题源自一位学生问为什么他们的文档没有编译:我给了他们另一种方法来实现他们想要的,但我想让他们清楚地解释一下他们第一次尝试时出了什么问题。