连字符复合词:哪些项目应该放入水平列表中?

连字符复合词:哪些项目应该放入水平列表中?

如果单词中已经包含“discretionary”,TeX 将不会对“word”进行连字符处理。因此,诸如integro-differentialand之类的复合词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。作为一名读者,我想我会对此感到非常惊讶...

相关内容