在 TeX 中,像这样的代码I\kern37ptlike\hskip100ptcake
运行得很好。这让我想知道像 这样的原始命令的语法到底是怎样的\kern
,\hskip
工作的?TeX 如何确定它们的参数在何处结束?
TeX 是否仅仅利用了这样一个事实:(据我所知)所有长度单位都由两个字母组成?
(我看不出需要 MWE。)
答案1
的参数\kern
是 ⟨dimen⟩,因此 TeX 首先查找 ⟨decimal number⟩(可以是任何可接受表示形式的整数,也可以是十进制表示法中的小数,小数部分用句号或逗号分隔),然后查找 ⟨unit of measure⟩,即一对字母,代表可接受的单位之一(pt、cm、mm、in、dd、pc、cc、bp、sp、em、ex)。数字和单位之间的任意空格都会被忽略,单位后面可以跟一个可选空格(使用扩展查找)。任何其他字母对都会触发错误消息
! Illegal unit of measure (pt inserted).
因此,\kern37pclike
具有正确的值\kern
,但\kern 37 pc like
会给出完全相同的结果。
小心使用\kern
,因为如果在垂直或水平(或数学)模式下调用,该命令会执行不同的操作。\enspace
在开始段落之前使用 会让你头疼。
的参数\hskip
应该改为 ⟨skip⟩;应用与之前相同的方法,但在表示自然宽度的 ⟨dimen⟩ 之后,TeX 会查找关键字plus
或minus
(带扩展)。如果找到,它会再次使用与之前相同的规则查找 ⟨dimen⟩,但 ⟨decimal number⟩ 后面也可以跟fil
,fill
或filll
(不是真正的事实,但是一个很好的近似值)后面再加一个可选的空格,它会被查找并忽略。无论是否plus
找到 if ,TeX 都会使用minus
相同的规则查找关键字。
因此\hskip 2pt minuscule chances of errors
会触发令人费解的错误信息。
当 TeX 寻找 ⟨dimen⟩ 或 ⟨skip⟩ 时,与之前相同的方法有效。如有疑问,尤其是 ⟨skip⟩,请添加\relax
,即\setlength
,\hspace
然后\vspace
在 LaTeX 中执行。