如何让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,但它对我有用!