我尝试过以下方法
\newdimen\fooDimen
\fooDimen=10.0pt
\newdimen\barDimen
\barDimen=20.0pt
\newcommand{\fooCommand}{2}{%
\ifdim#1 < #2
\typeout{Test}
\fi
}
\begin{document}
\fooCommand{\fooDimen}{\barDimen}
\end{document}
但我明白
! Missing number, treated as zero.
<to be read again>
##
l.18 \ifdim#
1 < #2
怎么了?提前谢谢您。
答案1
我添加\documentclass{article}
并报告了带有行号的文件以供参考:
1 \documentclass{article}
2 \newdimen\fooDimen
3 \fooDimen=10.0pt
4 \newdimen\barDimen
5 \barDimen=20.0pt
6
7 \newcommand{\fooCommand}{2}{%
8 \ifdim#1 < #2
9 \typeout{Test}
10 \fi
11 }
12
13 \begin{document}
14 \fooCommand{\fooDimen}{\barDimen}
15 \end{document}
如果我在这个文档上运行 LaTeX,我会得到
! Missing number, treated as zero.
<to be read again>
##
l.8 \ifdim#
1 < #2
?
因此您可以清楚地看到,不是调用\fooCommand
触发了错误,而是在 TeX 检查第 8 行时发生了错误。
现在你应该知道,TeX 在定义新命令时不会对替换文本做任何解释,只是将其存储起来。然而,这里实际上正在处理预期的替换文本!
错误消息表明该#
字符的位置不对:TeX 想要计算\ifdim
,但它却找到了#
(在错误消息中,它出现了两倍,表明有问题的标记的类别代码为 6)。这里没有进行参数替换,因为 TeX 是不是定义一个命令。
问题出在哪里?你对 使用了错误的语法\newcommand
:参数的数量应该放在方括号中,而不是花括号中。所以你实际上做的是定义 代表\fooCommand
。2
然后定义结束,TeX 开始处理随之而来的内容。
\newcommand{\fooCommand}[2]{%
\ifdim#1 < #2
\typeout{Test}%
\fi
}