答案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