TeXbook 练习 2.4(三重引号)

TeXbook 练习 2.4(三重引号)

练习是重现```(三个左引号)的两种可能类型。之前有解释如何使用三个右引号做同样的事情,我将用自己的话重写一下,以检查我是否真的理解了:

如果您输入''',则 TeX 会假定这是一个双字符,\rq后面跟着一个单字符\rq,并适当留出空格。如果您以这种方式对它们进行分组,则会出现:'''vs. ''{'},我期望它们看起来完全相同(它们确实如此)。但是,如果您想要一个单字符,\rq后面跟着一个双字符\rq,则分组不起作用:'{''}因为空格太小。因此,您必须手动插入\thinspace: 才能获得'\thinspace''

对于练习,我认为连续三个左引号```将被解析为“双引号\lq后跟单引号\lq”,因此间距将与 一致``\thinspace',但事实并非如此。我从其他地方知道两个相邻的反引号会变成连字符。我假设此连字符与周围文本之间的间距是动态确定的(以某种方式),但如果连``字符实际上有一些硬编码的空格(即它真的变成了\thinspace``),那么我想我明白了(特别是,Don 在上一段中关于间距的评论似乎也很有道理)。这是正确的吗?

答案1

你会发现,在cmr10.tfm使用 将其转换为人类可读的形式后tftopl

   (LABEL O 47)
   (LIG O 47 O 42)
   (KRN O 77 R 0.111112)
   (KRN O 41 R 0.111112)
   (STOP)

作为 的一部分LIGTABLE。这意味着如果八进制 47(十进制 39,右引号/撇号)后面跟着相同的字符,TeX 将用八进制 42(十进制 34,双引号/引号)位置上的字形替换这两个字符。如果后面跟着八进制 77(十进制 63,问号)或八进制 41(十进制 33,感叹号),则会添加一个字距。

表中没有 的条目O 42,因此双引号后不使用字距调整。

事实上,如果你尝试

\tracingonline=1
\showboxbreadth=\maxdimen
\showboxdepth=\maxdimen
\tracingoutput=1

\nopagenumbers

'''

\bye

你得到

Completed box being shipped out [1]
\vbox(667.20255+0.0)x469.75499
.\vbox(0.0+0.0)x469.75499, glue set 14.0fil
..\glue -22.5
..\hbox(8.5+0.0)x469.75499, glue set 469.75499fil
...\vbox(8.5+0.0)x0.0
...\glue 0.0 plus 1.0fil
..\glue 0.0 plus 1.0fil minus 1.0fil
.\vbox(643.20255+0.0)x469.75499, glue set 633.20255fill
..\glue(\topskip) 3.05556
..\hbox(6.94444+0.0)x469.75499, glue set 441.97719fil
...\hbox(0.0+0.0)x20.0
...\tenrm " (ligature '')
...\tenrm '
...\penalty 10000
...\glue(\parfillskip) 0.0 plus 1.0fil
...\glue(\rightskip) 0.0
..\glue 0.0 plus 1.0fill
.\glue(\baselineskip) 24.0
.\hbox(0.0+0.0)x469.75499, glue set 469.75499fil
..\glue 0.0 plus 1.0fil

不显示字距。但是,必须考虑字形在其边界框中的位置。

\documentclass{article}

\begin{document}

\setlength{\fboxrule}{0.1pt}% hairline
\setlength{\fboxsep}{-\fboxrule}% takes no space

\fbox{''}\fbox{'}

\end{document}

在此处输入图片描述

因此,您会发现双引号中“细空格”是固定的。不同的字体可能有不同的表现方式。

相关内容