练习是重现```
(三个左引号)的两种可能类型。之前有解释如何使用三个右引号做同样的事情,我将用自己的话重写一下,以检查我是否真的理解了:
如果您输入
'''
,则 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}
因此,您会发现双引号中“细空格”是固定的。不同的字体可能有不同的表现方式。