假设我有一个像 Baden-Württemberg 这样的单词。TeX 无法将这两个单词的任何部分连字符连接起来。为什么?
为什么不像这样:
小勾号表示可能的连字符点。欢迎提供技术 (TeXnical) 解释。
顺便说一句:我不是问如何解决这个问题("=
例如使用 babel 速记)。
答案1
TeXbook,第 454 页,倒数第二个双重危险弯道段落
如果一个试验词升1 … 升n已被此过程发现,则连字仍将被放弃,除非n≥ λ + ρ,其中 λ = max(1,|
\lefthyphenmin
|) 和 ρ = max(1,|\righthyphenmin
|)。(纯 TeX 取 λ = 2 和 ρ = 3。)此外,紧跟在试验词后面的项目必须由零个或多个字符、连字和隐式字距组成,后面紧跟着粘连符、显式字距、惩罚项、什么内容或来自 、 或 的垂直模式材料。\mark
因此,紧跟在试验词后面的框、规则、数学公式或自由裁量项将抑制连字。(由于 TeX 在显式连字符后插入空的自由裁量项,这些规则意味着已经连字的复合词将不会被算法进一步连字。)\insert
\vadjust
显式连字符是字符代码与字体的\hyphenchar
值匹配的字符或以这样的字符结尾的连字符(这就是为什么也--
或---
抑制连字符的原因)。
事实上,如果你尝试下面的例子,你会看到 TeX 对复合词进行了连字符连接:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\begin{document}
\hyphenchar\font=\string"7F
\parbox{1pt}{In Baden-W\"urttemberg}
\end{document}
结果是
在
巴登
-符腾
堡
州
T1 编码字体在位置上有0x7F
一个与正常连字符相同的字符。将 改为\hyphenchar
表示此位置,正常连字符不再抑制连字符。
答案2
这\hyphenchar\font=\string"7F
似乎不是解决这个问题的正确方法,因为它与字体无关。
更好的方法是设置\defaulthyphenchar=127
看起来与字体无关的。此外,缩写中定义的连字符也将是正确的。但是,文本中有连字符时仍存在问题,例如:
Baden-W\"urttemberg
\gls{BP}-Test
如果您查看“den-Würt-”,它仍然没有正确拆分成两行。最后一个例子“BP-Test”也没有拆分。我发现的唯一解决方法是在文本中使用“=”而不是“-”,目前这种方法有效。但我希望有更好的解决方案...
以下是 MWE:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
%\usepackage{lmodern}
\usepackage{mathptmx}
\usepackage[
nonumberlist,
acronym,
nopostdot,
section]
{glossaries}
\newacronym{BP}{BP}{Borderline-Pers\"onlichkeitsst\"orung}
\defaulthyphenchar=127
\begin{document}
\parbox{1pt}{In Baden"=W\"urttemberg}
\parbox{1pt}{In \gls{BP}}
\parbox{1pt}{\gls{BP}"=Test}
\end{document}