如何在 TeX 中找到空格的长度?

如何在 TeX 中找到空格的长度?

我实施了这份可怕的文件

\documentclass{article}
\newcommand{\testspace}[1]{\hspace*{\fill}\(\vert\)\hspace*{\fill}\\
                           \null\space\(\vert\)\hspace*{3.3pt plus #1pt}\break}
\begin{document}
\noindent
\(\vert\)\space\(\vert\)\\
\(\vert\)\hspace{3.3pt}\(\vert\)\\
\testspace{1.665}
\end{document}

这样我就可以直观地检查每个垂直条,看看哪些垂直条排列得最好,从而发现单个控制空间的伸展程度。我估计一个空间的宽度约为 3.3pt 加 1.665pt,但是,我无法摆脱这种糟糕的感觉。尽管如此,TeX(我认为是 TeX 而不是 LaTeX)不允许我使用\the\space。我应该如何计算单个空间的长度?

答案1

正常空间的宽度取决于当前字体。每个字体中都有称为的全局度量项\fontdimen\fontdimen2包括正常空间的基本宽度,\fontdimen3包括之后的值plus\fontdimen4包括之后的值minus\fontdimen7包括使用时使用的额外空间\spacefactor\ge 2000

因为\font上下文中使用的原语\fontdimen<number>\font表示当前字体(并且没有正常的声明原语),所以我们可以通过代码打印正常空间的值:

\message{space: \the\fontdimen2\font\space 
   plus \the\fontdimen3\font\space minus \the\fontdimen4\font}

计算机现代罗马字体 10 pt 给出以下结果:

space: 3.33333pt plus 1.66666pt minus 1.11111pt

您可以使用\hskip原始空间来创建正常空间

\hskip \fontdimen2\font plus\fontdimen3\font minus\fontdimen4\font

但这仅用于说明目的。普通人使用\space\(控制空间)。

编辑:正常空间在任何情况下都不会生成上面提到的空间\hskip,因为存在许多例外情况。如果寄存器\spaceskip非零,\fontdimen则不使用 s,而是\spaceskip使用寄存器。此外,如果非零,则使用\xspaceskip当前\spacefactor\ge 2000then 。\xspaceskip

\(控制空间)和\space(或单词之间的正常空间,catcode 10 的标记)之间有两个区别:

  • \space在垂直模式下会被忽略,但\在垂直模式下会启动水平模式。
  • \space尊重当前\spacefactor,但与何时\执行相同操作。\space\spacefactor=1000

最后,这意味着什么该空间尊重当前\spacefactor。设 f=\spacefactor/1000且 b 为空间的基本宽度,p 为正值,m 为负值。则 p 被 p:=p*f 修改,m 被 m:=m/f 修改,b 保持不变。但是,如果\spacefactor\ge2000则 b:=b+ \fontdimen7\xspaceskip如果非零则使用或)。

我从 TeXbook naruby 第 105 页添加了一个例子:假设正常空间(当\spacefactor=1000)为 10pt plus10pt minus10pt。当然\spacefactor=600后插入空间 10pt plus 6pt minus16.666pt,当然\spacefactor=1500后插入 10pt plus15pt minus6.666。最后当然\spacefactor=3000后插入 10pt+ \fontdimen7plus 30pt minus 3.333pt。

通常,\spacefactor是 1000,但在某些语言中,\nonfrenchspacing宏会将特殊字符设置\sfcodes为几个字符。设置\spacefactor为水平模式下最后一个排版字符的值。(当和。然后是 new\sfcode时,有一个例外。)例如,普通 TeX 将句号、问号和感叹号设置为 3000,将逗号设置为 1250,将分号设置为 1500,将冒号设置为 2000。\spacefactor<1000\sfcode>1000\spacefactor=1000\sfcode

相关内容