![\newdimen、\newskip 和 \newlength 之间有什么区别?](https://linux22.com/image/238737/%5Cnewdimen%E3%80%81%5Cnewskip%20%E5%92%8C%20%5Cnewlength%20%E4%B9%8B%E9%97%B4%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
\newdimen
、\newskip
和之间有何区别\newlength
?
我应该何时使用它们?请为每种情况提供一个非平凡的例子。
答案1
\newlength
是 LaTeX2e 版本的\newskip
。它有额外的检查来避免重新定义或非法名称。在 LaTeX2e 中,它被定义为
\def\newlength#1{\@ifdefinable#1{\newskip#1}}
例如,
\newlength\foo % OK
\newlength\foo % redefinition ERROR!
\newlength\endbar % ERROR: \endbar is illegal command name in LaTeX2e.
% It is reserved by LaTeX kernel to define bar environment together with \bar
\newskip
仅分配一个新的跳过(粘合或橡胶空间)寄存器。如果您改用低级 TeX 命令\newskip
,则不会显示任何错误消息。
在 LaTeX 中您应该始终使用\newlength
而不是\newskip
。
\newdimen
是另一个分配新维度寄存器的低级 TeX 宏,它与 不同\newskip
。它们的含义不同。例如,
\newdimen\rigidlength
\rigidlength=2pt % or \setlength{\rigidlength}{2pt}
\newlength\rubberlength % you cannot use \newdimen here
\setlength{\rubberlength}{2pt plus 2pt minus 1pt}
答案2
\newlength
是 LaTeX 语法并且始终是一个跳过寄存器:
\documentclass{article}
\newskip\foo
\foo=1cm plus 1mm minus 3mm
\newdimen\bar
\bar=1cm %plus 1mm minus 3mm % not possible
\newlength\baz
\setlength\baz{1cm plus 1mm minus 3mm}
\begin{document}
\the\foo \par
\the\bar \par
\the\baz
\end{document}