分配和 \def 之间有什么区别

分配和 \def 之间有什么区别

这两个作业的语法区别是什么(基本上)

\arraycolsep=1mm
\def\arraystretch{0.7}

命令的根本区别是什么\arraycolsep\arraystretch因为一个人不能做

\arraystretch=2

答案1

\arraycolsep是一个维度寄存器,即保存“长度”,可以分配=

使用符号名称来代替记住\dim...寄存器名称。

\arraystretch是一个宏,必须重新定义,并且可以保存任何值,但它会在扩展点被拒绝。但是你不能说 \arraystretch=...=语法仅限于 TeX 寄存器。

您可以使用以下命令显示“明显”相似的 LaTeX 实体之间的差异\meaning

\documentclass{book}

\begin{document}
\arraycolsep=1mm
\def\arraystretch{0.7}

\meaning\arraycolsep

\meaning\arraystretch
\end{document}

答案2

TeX 没有十进制数的数据类型。它只能将它们与长度结合使用,但它们实际上表示(隐式)单位的整数sp(其中 1pt=65536sp)。

人们可以考虑将\arraystretch或存储\baselinestretch为维度,但这会在使用时造成困难:例如,当\fontsize{10}{12}\selecfont执行时,LaTeX 会执行类似

\dimen@=12pt
\baselineskip=\baselinestretch\dimen@

如果\baselinestretch存储为维度寄存器,设置起来会很尴尬;而且还\setdecimal需要定义类似的宏来模拟新的数据类型。

其实做起来并不困难

\newcommand{\setdecimal}[2]{\def#1{#2}}

(也许进行了一些错误检查)因此可以说

\setdecimal{\baselinestretch}{1.2}

类似\setlength。用户界面会略有改进,但必须记住,1995 年发布 LaTeX2e 时计算机的内存非常小(绝对值上说,计算能力上说,还不到很久以前)。

请注意,它们\arraystretch非常相似\baselinestretch,只是行动的时间不同。

相反,\arraycolsep是维度寄存器的符号名称,它保存(固定)长度,因此其值应设置为

\setlength{\arraycolsep}{1mm}

这在内部转化为

\arraycolsep=1mm\relax

相关内容