这两个作业的语法区别是什么(基本上)
\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