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