与英语不同,德语中有相当多的单词包含连字符,例如“Arbeiter-Unfallversicherung”(工人事故保险)。默认情况下,(La)TeX 只会在现有连字符后断开此类单词,并忽略所有其他断点。此行为通常会导致德语文本的水平盒子过满。
至少有三种方法可以实现正确的连字,其中两种使用babel
包的简写,但我认为都不能令人满意:
简写
"=
:Arbeiter"=Unfallversicherung
。这允许每个(否则合法的)断点,因此可能会产生正确但不利的连字(例如 Arbeiter-Un-fallversicherung)。这似乎是最后的手段,适合在(几乎)没有人工干预的情况下创建的文档。命令
\-
:Ar\-beiter-Unfall\-ver\-si\-che\-rung
。通过手动设置允许的断点,可以避免在当前连字符之前或之后出现不利的断点(我使用最少四个字符作为经验法则)。缺点是,必须查找相应单词的正确断点。此外,LaTeX 文档的正文可能会变得相当混乱。简写
"-
:Ar"-beiter-Unfall"-versicherung
。此方法(我目前正在使用的方法)还可以避免不利的断点,并使文档主体更加整洁。但仍需查找正确的断点。
长话短说:有没有办法自动允许对已经包含连字符的单词进行连字符连接,而忽略现有连字符之前或之后少于四个字符的断点?
答案1
不。您可以使用外部解析脚本将其中一个选项应用于文本,但编写它仍然需要大量工作,因此在实践中手动添加命令可能工作量较少。
未来更新:LuaTeX 对一些特殊的连字情况有基本的支持,并且在未来的版本中(最有可能是 2014 年春季)将对加权连字和多次连字过程提供核心支持。
答案2
这似乎就是连字符软件包的用途。手册中写道:
TeX 不会对源文件中已经连字符的单词进行连字符处理,例如
electromagnetic-endioscopy
。
该\hyp
命令与其他\...hyp
命令类似,只是它会排版连字符并允许对组成复合词的其他单词进行全自动连字符处理。它的用法类似于electromagnetic\hyp{}endioscopy
。
我不确定你的最后一个标准,但似乎如果 TeX 应用其正常的连字规则,那么这种情况就不太可能发生,因为(我认为)发生的事情是 the 之后的单词\hyp{}
(就连字而言)被视为一个新单词,而且我猜在前几个(或最后几个)字符中没有多少单词被连字。
答案3
\hyphenation
使用 LuaTeX,一个简单的解决方案是在命令中输入明确的连字符=
。
\hyphenation{Ar-beiter=Unfall-ver-si-che-rung}
\showhyphens{Arbeiter-Unfallversicherung}
\bye
使用 LuaTeX 编译此文档后,.log 文件显示可以进行连字
[][] \tenrm Ar-beiter-Unfall-ver-si-che-rung
带连字符工人...和...非承保按照\hyphenation
命令的要求被省略。
这样,LuaTeX 就无需在文档源中进一步标记,即可自动处理(选定的)单词。不过,这不是一个完全自动化的解决方案,因为需要维护一个明确的单词列表。而且所有连字符都是硬编码的,IE,更改单词内部连字符最小值非常繁琐。仍有改进空间...
LuaTeX 手册在“语言和字符、字体和字形”部分有更多关于与 Knuth 的 TeX 连字相关差异的信息。
答案4
看egreg 的回答质疑为什么带有连字符的单词不能用连字符连接?
事实上,如果你尝试下面的例子,你会看到 TeX 对复合词进行了连字符连接:
\documentclass{article} \usepackage[T1]{fontenc} \usepackage[ngerman]{babel} \begin{document} \hyphenchar\font=\string"7F \parbox{1pt}{In Baden-W\"urttemberg} \end{document}