我确实搜索了很多并尝试了很多提示(也来自这个网站),但我无法使全局连字命令正常工作。
在我的文本中,我可以像这样设置正确的连字符:
LensKit"=Frame"-work
但如果我尝试全局设置它,它不起作用:
\hyphenation{LensKit-Frame-work}
我究竟做错了什么?
这是我的代码的一个小示例:
\documentclass[a4paper,twoside,11pt,ngerman]{book}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{ae,aecompl}
\usepackage{bibgerm}
\hyphenation{LensKit-Frame-work}
\clubpenalty = 10000
% Keine einzelnen Zeilen am Ende eines Abschnitts (Hurenkinder)
\widowpenalty = 10000 \displaywidowpenalty = 10000
% EOF
\begin{document}
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. LensKit"=Frame\-work LensKit"=Frame\-work LensKit"=Frame\-work LensKit"=Frame\-work LensKit"=Frame\-work LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework LensKit-Framework
\end{document}
答案1
存在许多问题。
您没有加载
babel
,因此该ngerman
选项不起作用。实际上,该bibgerm
包加载了过时的german
包。您的
\hyphenation
指令提到了“LensKitFramework”一词没有显式连字符。TeX 永远不会使用显式连字符对单词进行连字符连接,除非用户授权它这样做,例如使用简写"-
。这些软件包
ae
和aecompl
已经过时了。该指令
\clubpenalty = 10000
*没有按照您期望的方式执行。
当然,第 3 点和第 4 点与当前问题无关,您可以通过定义宏来解决:
\newcommand\LensKitFramework{LensKit"-Framework}
\hyphenation{frame-work}
让我们看一下完整的序言:
\documentclass[a4paper,twoside,11pt]{book}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{bibgerm}
\hyphenation{frame-work}
\clubpenalty = 10000
\makeatletter
\@clubpenalty = 10000 % LaTeX uses `\@clubpenalty to restore the value of `\clubpenalty`
\makeatother
% Keine einzelnen Zeilen am Ende eines Abschnitts (Hurenkinder)
\widowpenalty = 10000 \displaywidowpenalty = 10000
% EOF
\begin{document}
\newcommand{\LensKitFramework}{LensKit-""Framework}
Here we use \LensKitFramework{} and it will hyphenate correctly.
定义应该放在之后\begin{document}
,因为只有这样简写才会被激活。
答案2
以下解决方案可能与那些不使用babel
并且因此不能使用@egreg 和@DavidCarlisle 提供的答案中提出的方法的人相关。
因为单词“LensKit-Framework”已经包含一个显式连字符,所以 TeX 不会对长单词的第二部分(或者第一部分)进行连字符处理。您可以通过以下方式覆盖此行为:
LensKit-\hspace{0pt}Framework
每当这个词出现时(TeX 知道如何连字符Framework
),或者更有效地定义一个宏,例如
\newcommand{\LKF}{LensKit-\hspace{0pt}Frame\-work}
在文档的序言中,然后\LKF
在文档本身的正文中使用。使用此设置,TeX 现在将在行末的“LensKit-”或“Frame”之后断开单词。
当然,如果你想让 TeX 在“Lens”之后也选择一个换行符,你可以将宏更改为
\newcommand{\LKF}{Lens\-Kit-\hspace{0pt}Frame\-work}
答案3
TeX 不会自动对明确带连字符的单词进行连字符处理。您的命令
\hyphenation{LensKit-Frame-work}
告诉 TeX 中有两个可能的可选连字符点,LensKitFramework
但您的文档没有它有的LensKit-Framework
。用显式连字符 TeX 来概括仅有的将显式连字符视为可能的断点。(这种babel
"-
简写本质上使该结构在 TeX 看来就像两个单词,因此它会分别考虑复合词的每个部分。)
可以设置 lccode -
(因此连字算法将其视为单词的一部分),但由于标准连字表不包含这个“字母”,因此必须小心谨慎,一般来说我认为大多数人建议使用显式构造"-
或其他显式标记。