如何让LaTeX连字符包含短划线?

在我写的一个LaTeX文档中,由于“多学科”这个词,在一行的结尾处出现,所以我得到了一个超满的hbox警告。

我可以通过把它改成multi-discipli\-nary方式来摆脱这个特殊的警告,但是其他地方也会出现同样的问题,因为这个词在本文中被大量使用。

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

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

奖金问题:我可以在哪里find自己的答案?

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

TeX不会连字符已经被连字符。 例如,(漫画)英国的Smyth-Postlethwaite姓不会连字,这可能是麻烦的。 这是正确的英文排版风格(对其他语言可能不正确),但是如果需要的话,可以用\hyph命令replace名称中的连字符,定义

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

不是常见问题解答通常build议的types… 连字符包定义了一系列这样的命令(用于在各种标点符号处引入连字符点)。


或者你可以\newcommand一个扩展到multi-discipli\-nary的命令multi-discipli\-nary (使用Search + Replace Allreplace现有的单词)。

问题(正如KennyTM所指出的那样)是LaTeX不会在短语中连字符。 幸运的是,有一个标准的软件包(ncctools的一部分)解决了这个问题,叫做extdash 。 这定义了新的连字符和破折号命令,它们不会中断连字符,并且可以允许或防止连字符/破折号处的换行符。 我更喜欢使用它的shortcuts选项,所以我可以使用,例如\-/而不是\Hyphdash 。 这就是你想要的:

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

为了防止在连字符中断,使用multi\=/disciplinary

(除此之外, “芝加哥风格手册”build议删除连字符,如“multi”,除非这个词在没有它的情况下是不明确的或不可理解的。)

我使用包hyphenat ,然后写复合词,如芬兰语Internet-yhteys英特网连接 )作为Internet\hyp yhteys 。 看起来愚蠢,但似乎是我find的最优雅的方式。

我有同样的问题。 我使用连字符加上下面的macros:

 \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软件包。

它使得-一个积极的angular色,扫描前进,看看是否跟着更多的破折号。 如果是这样,它保持- ,确保--并保持工作。 如果不是的话,它会变成hyphenat的\hyp命令,从而在单词的其余部分中断字。 这是一个通用的解决scheme,通常包含明确连字符的所有单词。

注意-变成了一个不完全可扩展的macros,所以在加载其他可能不期望的包之后尝试包含这个macros-是一个macros

编辑:这是我的第二个版本,当一个{}跟着一个连字符时,第一个版本不那么健壮。 这不是,但不像第一个版本-在这个版本是不完全可扩展的。

 multi\hskip0pt-\hskip0pt disciplinary 

你可以例如定义像

 \def\:{\hskip0pt} 

然后写

 multi\:-\:disciplinary 

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

kennytm解释说, multi-disciplinary不会被复述。 但是multi-\-disciplinary有着与multidisciplinary一样的连字机会。

我承认我不知道为什么这个工作。 它与这里描述的行为是不同的(重点是我的):

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

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

我说:

你应该在序言的某个地方设置一个连字罚分:

 \hyphenpenalty=750 

750字符的值适合我的需要在信纸(8.5×11英寸)与12磅字体的两列布局。 调整值以适应您的需求。 数字越高,连字越less。 你也可以看看hyphenatpackage,它不仅仅是连字符的惩罚

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

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

在文字中使用,压制三维字连字符。 可能不是最好的解决scheme,但它对我有用!

Interesting Posts