为多语言文档指定多个连字例外列表

为多语言文档指定多个连字例外列表

这个问题引出了包中的一个新功能:
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

babel2013 年 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}

相关内容