如何让LaTeX连接包含短划线的单词?

时间:2010-02-03 16:02:58

标签: latex hyphenation

在我写的LaTeX文档中,由于“多学科”这个词,我得到一个 overfull hbox 警告,这恰好在一行的末尾呈现。

我可以通过将其更改为multi-discipli\-nary来消除此特定警告,但同样的问题将在其他地方发生,因为本文中使用了这个词。

我想使用\hyphenation{}命令,但显然我的暂定\hyphenation{multi-disci-pli-na-ry}不起作用,因为它无法正确理解第一个短划线。

在一个已包含短划线的单词中,我需要使用什么咒语才能获得正确的缩进?

奖金问题:我自己哪里可以找到这个问题的答案?

8 个答案:

答案 0 :(得分:56)

问题(正如KennyTM所说)是LaTeX不会用破折号连字。幸运的是,有一个标准包(ncctools的一部分)可以解决这个问题,称为extdash。这定义了新的连字符和短划线命令,它们不会中断连字符,并且可以允许或阻止连字符/短划线处的换行符。我更喜欢将其与shortcuts选项一起使用,因此我可以使用\-/而不是\Hyphdash。这就是你想要的:

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

要防止在该连字符处断开,请使用multi\=/disciplinary

(旁白: The Chicago Manual of Style 建议删除附加词缀的连字符,例如'multi',除非单词含糊不清或无法理解。)

答案 1 :(得分:50)

来自http://www.tex.ac.uk/cgi-bin/texfaq2html?label=nohyph

  

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

     

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

     

这个FAQ通常会推荐的东西...... hyphenat包定义了一组这样的命令(用于在各种标点字符处引入连字符点)。


或者您可以\newcommand扩展为multi-discipli\-nary的命令(使用Search + Replace All替换现有单词)。

答案 2 :(得分:21)

我使用包hyphenat,然后将复合词(如芬兰语 Internet-yhteys (Eng。 Internet连接))写为Internet\hyp yhteys。看起来很傻,但似乎是我找到的最优雅的方式。

答案 3 :(得分:3)

我遇到了同样的问题。我使用hyphenat加上以下宏:

\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命令,在单词的其余部分启用单词分隔符。这是一种通用解决方案,可以使包含显式连字符的所有单词正常连字符。

请注意,-会变成一个无法完全展开的宏,因此请在加载其他可能不希望-为宏的软件包后尝试包含此内容

修改:这是我的第二个版本,当{}跟随连字符时,第一个版本不太健壮。这个不是,但与第一个版本不同,此版本中的-不能完全展开。

答案 4 :(得分:3)

multi\hskip0pt-\hskip0pt disciplinary

你可以,例如定义如

\def\:{\hskip0pt}

然后写

multi\:-\:disciplinary

请注意,babel俄语语言包有自己的一组破折号,不会禁止连字符,例如"~(双引号+代字号)。

答案 5 :(得分:3)

如pennytm所解释的,

multi-disciplinary不会被连字符。但是multi-\-disciplinary具有与multidisciplinary具有相同的连字机会。

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

  

命令\-将自由连字符插入一个单词。 这也是唯一允许在单词中使用连字符的点。

答案 6 :(得分:-4)

我在这里回答了类似的问题:LaTeX breaking up too many words

我说:

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

\hyphenpenalty=750

750的值适合我对信纸(8.5x11英寸)和12磅字体的双列布局的需求。调整值以满足您的需求。数字越大,连字数越少。您可能还想查看连字符包,它提供的不仅仅是连字符惩罚

答案 7 :(得分:-4)

为避免在已经连字符的单词中使用连字符,我将非空格~与后向空格\!结合使用。例如,命令

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

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