两种原本等效的空间排版方式,却产生不同的渲染效果

两种原本等效的空间排版方式,却产生不同的渲染效果

考虑以下 TeX 手稿:

\font\myfont=cmtt14\myfont
x x

x\char32x
\end

当使用 pdftex 编译时,其排版如下:

厘米特空间

为什么两行在空间呈现方式上有差异?

答案1

TeX 不会在输出中使用空格字符:而是字形之间的“间隙”。考虑到字符的大小是固定的,而 TeX 则通过改变间距来获得“好的”段落,这是有道理的。因此,字体位置 32 处的字形与排版正常空格无关:它甚至不必与空格相关。

最近,与可访问和可重排 PDF 相关的努力已导致在 pdfTeX 中包含“伪造”空间包含原语:请参阅\pdfinterwordspaceon。然而,这依赖于特定字体(仅包含伪造空间),并且实际上并非用于一般的输出更改。(到目前为止,此功能还未得到广泛使用,因此可能无法完美运行。)

答案2

从概念上来说,该构造\char<number>与用该数字输入字符不同。

例如,\char`\^^M不是产生一个行尾字符(按照正常的 TeX 约定,类别代码为 5)。类似地,\char32不是产生一个空间令牌。

该指令\char<number>直接传递到排版阶段,意味着

<number>打印当前字体槽中的字形

例如,OT1 编码字体通常有小斜线,表示波兰语“隐藏的 ell”,即 ł 和 Ł。如果你查看plain.tex,你会发现

663 \def\l{\char32l}
664 \def\L{\leavevmode\setbox0\hbox{L}\hbox to\wd0{\hss\char32L}}

(添加了行号以供参考)。但是,OT1 编码中的固定宽度字体在 32 号位置有“可见空间”字形。尝试使用纯 TeX 进行处理

\l \quad \tt \l \bye

你就会明白。

需要注意的是,通过插入的字符\char将参与连字,就像它们是直接输入的(并适合某些连字模式)并形成连字一样,因为连字与当前字体中的插槽相关,而不是与字符标记相关。

\char`f lagsta\char`f \char`f

\leavevmode
\vbox{\hsize=0pt \hfuzz=\maxdimen % no warning
  \hskip 0pt supercalifragilisticexpialidocious
}\hskip 4em
\vbox{\hsize=0pt \hfuzz=\maxdimen % no warning
  \hskip 0pt superc\char`a lifr\char`a gilisticexpi\char`a lidocious
}

\l \tt \l

\bye

在此处输入图片描述

相关内容