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

如何让LaTeX将包含破折号的单词连字符?,latex,hyphenation,Latex,Hyphenation,在我正在写的一篇LaTeX文档中,我收到了一条hbox过量的警告,因为“多学科”一词恰好出现在一行的末尾 我可以通过将其改为多学科来消除这一特殊警告,但同样的问题也会发生在其他地方,因为该词在论文中被大量使用 我想改用\hyphenation{}命令,但显然我的暂定\hyphenation{multi-disci pli}不起作用,因为它不能正确理解第一个破折号 我需要什么咒语才能在已经包含破折号的单词中获得正确的缩进 额外问题:我自己在哪里可以找到这个问题的答案?来源: TeX不会将已经连字符

在我正在写的一篇LaTeX文档中,我收到了一条hbox过量的警告,因为“多学科”一词恰好出现在一行的末尾

我可以通过将其改为多学科来消除这一特殊警告,但同样的问题也会发生在其他地方,因为该词在论文中被大量使用

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

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

额外问题:我自己在哪里可以找到这个问题的答案?

来源:

TeX不会将已经连字符的单词连字符。对于 例如,(漫画式的)英国姓氏Smyth Postlethwaite就不会 连字符,这可能会很麻烦。这是正确的英语 排版风格(对于其他语言可能不正确),但如果 如果需要,您可以将名称中的连字符替换为
\hyf
命令,已定义

 \def\hyph{-\penalty0\hskip0pt\relax}
这不是本常见问题解答通常推荐的类型… 该包定义了一组这样的命令(用于 在各种标点符号处引入连字符点)



或者您可以
\newcommand
一个扩展到
多学科的命令(使用搜索+替换全部替换现有单词)。

我在这里回答了类似的问题:

我说,

您应该在序言中的某个地方设置断字惩罚:

\hyphenpenalty=750

750的值适合我在信纸(8.5x11英寸)上的两列布局,字体为12磅。调整值以满足您的需要。数字越大,出现的断字就越少。您可能还想看看连字符包,它提供的不仅仅是连字符惩罚

来避免在已经连字符的单词中连字符。我使用了不间断空格
~
和后向空格
\。例如,命令

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

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

我使用package
hyphenat
,然后将芬兰语单词internetyhteys(英语互联网连接)这样的复合词写成
internethyp-yhteys
。看起来很傻,但这似乎是我发现的最优雅的方式。

我也有同样的问题。我使用plus以下宏:

\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包

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

请注意,
-
将成为一个不可完全扩展的宏,因此请在加载可能不希望
-
成为宏的其他包后尝试将其包括在内

编辑:这是我的第二个版本,当
{
}
后跟连字符时,第一个版本的健壮性较差。此版本不是,但与第一个版本不同,此版本中的
-
不是完全可扩展的

multi\hskip0pt-\hskip0pt disciplinary
例如,你可以定义like

\def\:{\hskip0pt}
然后写

multi\:-\:disciplinary
请注意,babel俄语软件包有自己的一组破折号,不禁止连字号,例如,
“~
(双引号+波浪号)。

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

\usepack[shortcuts]{extdash}
...
多学科

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


(旁白:建议删除附加诸如“multi”等词缀的连字符,除非该词没有它就模棱两可或难以理解。)

多学科的
将不会被连字符,正如kennytm所解释的那样。但是
多学科的
具有与
多学科的
相同的连字符机会

我承认我不知道为什么会这样。这与所描述的行为(我的重点)不同:

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


为什么这个词在硬宣传中被打断是个问题?难道“多维”\newline dimensional“不好吗?额外的答案是:谷歌搜索“latex断字”“产生了各种有用的结果,包括latex维基书籍,它的答案是:@mica:不,它没有。我几年前就看过了所有这些页面@杰夫:如果乳胶在那里连字符就好了。但在本例中,它会导致“hbox未满”,latex选择根本不使用连字符。能否在\hyphenation命令中反斜杠第一个-谢谢您的评论@DrewSteen。显然我同意。但在我的辩护中,当我问这个问题时,没有像tex.SX这样的东西:-)非常感谢。正如我所怀疑的,没有“完美”的答案。因为我不是该文档中的唯一作者,所以我并不想强迫其他人在任何地方都使用
\newcommand
(这就是为什么我在寻找基于
\hyphenation
的东西)。我想我还是保持原样吧