如何让LaTeX连字包含破折号的单词?


107

在我正在编写的LaTeX文档中,由于单词“ multi-disciplinary”(多学科)出现在行尾,我得到了一个过高的hbox警告。

我可以通过将其更改为来摆脱这种特殊的警告multi-discipli\-nary,但是在其他地方也会发生相同的问题,因为该词在本文中使用了很多。

我想改用该\hyphenation{}命令,但显然我的暂定命令\hyphenation{multi-disci-pli-na-ry}不起作用,因为它不能正确理解第一个破折号。

我需要什么咒语才能在已经包含破折号的单词中获得正确的缩进?

奖励问题:我本人可以在哪里找到该问题的答案?


为什么单词在硬连字符处打断是一个问题?“多维\\换行维”行吗?
Geoff Reedy'2

1
奖励答案:谷歌搜索“乳胶连字”产生了各种有用的结果,包括乳胶维基书,其答案为:en.wikibooks.org/wiki/LaTeX/Formatting#Hyphenation
Mica

3
@mica:不,不是。几年前,我已经阅读了所有这些页面。@geoff:如果乳胶在这里连字符,那就可以了。但在此示例中,它将导致“ hbox不足”,并且乳胶选择根本不使用连字符。
Gyom

您可以在\ hyphenation命令中反斜杠第一个吗?
布莱恩·波斯托

1
感谢您的评论@DrewSteen。显然我同意。但是在我的辩护中,当我问这个问题时,没有tex.SX :-)
Gyom

Answers:


52

来自https://texfaq.org/FAQ-nohyph

TeX不会将已经被连字的单词连字。例如,(讽刺的)英语姓氏Smyth-Postlethwaite不会连字符,这可能很麻烦。这是正确的英文排版样式(对于其他语言可能不是正确的排版样式),但是如果需要,可以使用\hyph 定义的命令替换名称中的连字符

 \def\hyph{-\penalty0\hskip0pt\relax}

不是 FAQ通常建议的那种东西…… hyphenat程序包定义了一堆这样的命令(用于在各种标点符号处引入连字符点)。


或者,您可以\newcommand将命令扩展为multi-discipli\-nary(使用“搜索+全部替换”替换现有单词)。


非常感谢。我怀疑,没有“完美”的答案。因为我不是该文档中的唯一作者,所以我真的不想强迫其他人在\newcommand任何地方都使用它(这就是为什么我要根据寻求帮助的原因\hyphenation)。我猜我默认情况下会保持“原样”,并在Latex抱怨hbox过多时手动添加显式连字符。
Gyom

63

问题(如KennyTM所指出的)是LaTeX不会在其中带有破折号的单词之间加连字符。幸运的是,有一个解决这个问题的标准软件包(ncctools的一部分)extdash。这定义了新的连字符和破折号命令,这些命令不会破坏连字符,并且可以允许或防止在连字符/破折号处出现换行符。我更喜欢将其与shortcuts选项一起使用,因此可以使用例如\-/而不是\Hyphdash。这就是您想要的:

\usepackage[shortcuts]{extdash} ... multi\-/disciplinary

为防止连字符破损,请使用 multi\=/disciplinary

(此外:《芝加哥风尚手册》建议删除连词,如“ multi”之类的附加词缀,除非该词含糊不清或难以理解。)


很棒,但是当我在章节字符串中使用它时,会产生hyperref警告Package hyperref Warning: Token not allowed in a PDF string。在那里,其他建议的解决方案(\def\hyph{-\penalty0\hskip0pt\relax})起作用。
Jan-Philip Gehrcke博士2014年

1
@ Jan-PhilipGehrcke:也可以使用修复这些警告\texorpdfstring(它为进入章节标题的字符串提供条件编译)。我将用法隐藏在语义宏内部(可能在此处\multidisciplinary)。是的,这并不完美。
Blaisorblade

22

我使用package hyphenat,然后将诸如芬兰字Internet-yhteys(英语Internet连接)之类的复合词写为Internet\hyp yhteys。看起来很愚蠢,但似乎是我找到的最优雅的方式。


6

multi-disciplinary不会被连字,如kennytm所解释。但是multi-\-disciplinary具有相同的断头机会multidisciplinary

我承认我不知道为什么会这样。它与此处描述的行为(强调我的行为)不同:

该命令\-在单词中插入任意连字符。这也成为该单词中唯一允许连字符的点


替换--\-不会改变输出,至少使用overleaf.com中的默认设置(可能是pdflatex,但overleaf并未实际说出)。
卡米尔·古德塞内

4

我有同样的问题。我用连字符加上以下宏:

\RequirePackage{hyphenat}
\RequirePackage{expl3}


% The following defs make sure words that contain an explicit `-` (hyphen) are still hyphenated the normal way, and double- and triple hyphens keep working the way they should. Just don't use a `-` as the last token of your document. Also note that `-` is now a macro that is not fully expandable

\ExplSyntaxOn

% latex2e doesn't like commands starting with 'end', apparently expl3 doesn't have any problems with it
\cs_new:Npn \hyphenfix_emdash:c {---}
\cs_new:Npn \hyphenfix_endash:c {--}

\cs_new:Npn \hyphenfix_discardnext:NN #1#2{#1}


\catcode`\-=\active

\cs_new_protected:Npn -{
    \futurelet\hyphenfix_nexttok\hyphenfix_i:w
}

\cs_new:Npn \hyphenfix_i:w {
    \cs_if_eq:NNTF{\hyphenfix_nexttok}{-}{
        %discard the next `-` token
        \hyphenfix_discardnext:NN{\futurelet\hyphenfix_nexttok\hyphenfix_ii:w}
    }{
        % from package hyphenat
        \hyp
    }
}

\cs_new:Npn \hyphenfix_ii:w {
    \cs_if_eq:NNTF{\hyphenfix_nexttok}{-}{
        \hyphenfix_discardnext:NN{\hyphenfix_emdash:c}
    }{
        \hyphenfix_endash:c
    }
}


\ExplSyntaxOff

请注意,这使用了Latex3的expl3软件包。

它使-活动字符向前扫描以查看其后是否有更多破折号。如果是这样,它将保持为-,以确保-----继续工作。如果没有,它将成为\hyp连字符命令,从而在其余单词中启用分词。这是一种通用解决方案,可以使所有包含显式连字符的单词正常连字符。

请注意,它-变成了不能完全扩展的宏,因此请在加载其他可能不是-宏的程序包后尝试将其包括在内

编辑:这是我的第二个版本,第一个版本在连字符{}后接连字符时不那么可靠。这个不是,但是与第一个版本不同-,该版本不能完全扩展。


3
multi\hskip0pt-\hskip0pt disciplinary

您可以例如定义像

\def\:{\hskip0pt}

然后写

multi\:-\:disciplinary

请注意,babel俄语包中有其自己的一组破折号,例如,不禁止使用连字符"~(双引号+波浪号)。


1
应该是multi-\hskip0pt disciplinary。就像您在MWE中一样,它会过多化。只需设置\setlength{\textwidth}{0.1cm}即可尝试。
LaRiFaRi 2014年

-3

我在这里回答了类似的问题:LaTeX分解了太多单词

我说:

您应该在序言中的某处设置连字符惩罚:

\hyphenpenalty=750

750的值适合我在12磅字体的信纸(8.5x11英寸)上两列布局的需要。调整值以适合您的需求。数值越大,连字符越少。您可能还需要看一下hyphenat软件包,它不仅提供了连字符惩罚功能


1
他在问的是如何避免连字符,而不是关于如何定义限制。
2013年

-4

为了避免在已被连字的单词中产生连字,我将不间断空格~与后退空格结合使用\!。例如,命令

3~\!\!\!\!-~\!\!\!D

在文本中使用时,禁止在单词3-D中连字。可能不是最好的解决方案,但是它对我有用!


4
这是在回答所问的相反问题。另外,正如试图编辑您的帖子的人指出的那样,还有一种更好的方法来完成您的工作:\mbox{3-D}
zwol 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.