如果单词中已经包含“discretionary”,TeX 将不会对“word”进行连字符处理。因此,诸如integro-differential
and之类的复合词Rajamahendravaram--Visakhapatnam
将不会被连字符处理,因为 TeX 在每个显式连字符和破折号后都插入了一个空的 discretionary。
我知道如何欺骗 TeX 将这些复合词连字符化(此网站上已经有很多类似的问题,每个问题都有很好的答案)。我的问题是关于应该放入水平列表中的项目类型。
在TeX 按主题分类Victor Eijkhout 写道
\def\={\penalty10000 \hskip0pt -\penalty0 \hskip0pt\relax}
... integro\=differential equations...
我不认为我完全同意这个方法。
是\penalty0
最有问题的:我认为应该是\penalty\exhyphenpenalty
(或者它可以简单地是\penalty10000
,因为它前面已经有一个空的自由裁量权?)。
其次,可以将连字符前序列\penalty10000 \hskip0pt
简化为单个\kern0pt
。
最后,既然提到了 kern,这种方法并没有解决隐式紧排在连字符和破折号周围。例如,字体可以包含“o
后跟-
具有正字距调整0.03em
”和“en dash
后跟V
具有负字距调整0.09em
”的说明。
就水平列表项而言,我想出了以下方法:
<first word>
<kern> % kerning between last letter of first word and hyphen/dashes
<hyphen/dashes>
<empty discretionary>
<penalty> % no break penalty, or explicit hyphen penalty?
<glue> % no stretch nor shrink, kerning between hyphen/dashes and first letter of second word
<second word>
我理解的对吗?我是否遗漏了什么?
似乎存在一些误解,认为“\nobreak
在显式连字符后面使用 a 是错误的,因为它禁止在该连字符后换行”。我不同意,我希望以下简单的 TeX 示例可以消除这种误解:
% plain TeX example
\hsize=24pc
\catcode`\@=11
\def\hyph{\kern\z@-\nobreak\hskip\z@skip}
% This allows both pre- and post-hyphen words to be hyphenated,
% *and* the \nobreak does not prohibit line break.
\noindent
Here is a rather complicated and hard-to-understand
integro\hyph differential equation. Maybe some experts
understand this integro\hyph differential equation.
And maybe some of them can solve this integro\hyph
differential equation.
\bigskip
\def\hyph{-\penalty\z@\hskip\z@skip}
% This does not allow pre-hyphen word to be hyphenated.
% Also, breaking at explicit hyphen results in *zero penalty*
% instead of \exhyphenpenalty being charged.
\noindent
Here is a rather complicated and hard-to-understand
integro\hyph differential equation. Maybe some experts
understand this integro\hyph differential equation.
And maybe some of them can solve this integro\hyph
differential equation.
\bye
更多信息\def\hyph{-\penalty\z@\hskip\z@skip}
:除了判罚错误(判罚 0 而不是\exhyphenpenalty
),这还会扰乱扣分计算。由于现在罚球发生在罚球点,\doublehyphendemerits
因此\finalhyphendemerits
将有不影响这个显式连字符,这是错误的。所以,按照这个逻辑,即使\penalty\exhyphenpenalty
不正确,因为 break 不应该在惩罚下发生!唯一正确的连字符后惩罚是 \nobreak
。
答案1
就我所知,您说的都是对的。这就是您要找的答案吗 :)?欢迎阅读 TUGboat 文章。
据我所知,Victor 并未积极维护 TbT,也没有计划发布其他版本。
至于你关于字距的问题,根据我的经验,作者只是使用 \hyph。他们没有插入明确的字距,并且可能没有意识到输出中的差异。事实上,这也是我们很容易忽略的。
尽管从语义和印刷角度来看,允许在显式连字符之前或之后使用连字符是一种很好的对称做法,但我不确定这样做是否可取(除了连字符前的文本非常长之外)。我不记得在下一行看到过带有显式连字符的 foo-bar-baz-quux。作为一名读者,我想我会对此感到非常惊讶...