这个问题引出了包中的一个新功能:
babel
默认情况下,(La)TeX 无法对某些单词进行连字符处理,例如,英文单词potable
(应该是pot-able
) 或德文单词Mor-dop-fer
(谋杀受害者,应为Mord-op-fer
)。有两种策略可以实现正确的连字:
在序言中为文档的主要语言添加“连字符例外”列表
\hyphenation{pot-able}
;在文档主体中的每个实例中使用
pot\-able
。(这也是已经包含连字符的单词的唯一方法。)
但是如果文档是多语言的,该怎么办呢?由于\hyphenation
只适用于文档的主要语言,是否必须返回到文档主体中手动进行连字更正来处理其他语言?或者是否可以为各个语言指定单独的连字例外列表?
\documentclass[draft]{article}
\usepackage[ngerman,english]{babel}
\begin{document}
The language is \languagename\ (correct hyphenation is \verb|pot-able|):
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX X potable
\selectlanguage{ngerman}
The language is \languagename\ (correct hyphenation is \verb|Mord-op-fer|):
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX Mordopfer
\end{document}
答案1
环境hyphenrules
只是改变语言;此外\hyphenation
命令始终是全局的并引用当前语言,因此这是最好的策略
\documentclass[draft]{article}
\usepackage[ngerman,english]{babel}
\hyphenation{pot-able}
\begin{hyphenrules}{ngerman}
\hyphenation{mord-op-fer}
\end{hyphenrules}
\begin{document}
...
\end{document}
为了更加清楚,您还可以\hyphenation
在适当的hyphenrules
环境中插入第一个命令。
babel
以下内容可能是一个有用的补充
\makeatletter
\let\@@hyphenation\hyphenation
\renewcommand{\hyphenation}[2][\languagename]{%
\begingroup
\@ifundefined{l@#1}
{\@nolanerr{#1}}
{\bbl@patterns{#1}%
\languageshorthands{none}%
\@@hyphenation{#2}}%
\endgroup
}
\makeatother
这样之前的输入就可以变成
\hyphenation{pot-able} % or \hyphenation[english]{pot-able}
\hyphenation[ngerman]{mord-op-fer}
答案2
egreg 的解决方案非常棒,尤其适合于您想要使用尽可能少的软件包的情况。如果您正在使用biblatex
用于管理您的参考书目和引文的包:此包还提供了多个连字符例外列表的机制,即宏\DefineHyphenationExceptions{<language>}{<exceptions>}
。
\documentclass[draft]{article}
\usepackage[ngerman,english]{babel}
\usepackage{biblatex}
\DefineHyphenationExceptions{english}{pot-able}
\DefineHyphenationExceptions{ngerman}{Mord-op-fer}
% Everything from here to \begin{document} only serves to avoid biber errors
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
The language is \languagename\ (correct hyphenation is \verb|pot-able|):
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX X potable
\selectlanguage{ngerman}
The language is \languagename\ (correct hyphenation is \verb|Mord-op-fer|):
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX Mordopfer
\end{document}
答案3
babel
2013 年 3 月发布的 v3.9 引入了该\babelhyphenation
宏。引用手册第 14 页:
\babelhyphenation[<language>,<language>,...]{<exceptions>}
为给定的语言设置连字例外,或者,如果没有可选参数,则为全部语言(例如专有名词或常见借词,当然还有单语文档)。语言例外优先于全局例外。
有关更多详细信息,请参阅手册第 1.6 节。
\documentclass[draft]{article}
\usepackage[ngerman,english]{babel}
% The following requires babel v3.9 (released March 2013)
\babelhyphenation[english]{pot-able}
\babelhyphenation[ngerman]{Mord-op-fer}
\begin{document}
The language is \languagename\ (correct hyphenation is \verb|pot-able|):
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX X potable
\selectlanguage{ngerman}
The language is \languagename\ (correct hyphenation is \verb|Mord-op-fer|):
XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX XXXX Mordopfer
\end{document}