2010-02-03 112 views
85

在我寫的一個LaTeX文檔中,我得到一個過滿的hbox警告,因爲單詞「多學科」,恰好在一行的末尾呈現。如何讓LaTeX連字符包含短劃線?

我可以通過將其更改爲multi-discipli\-nary來擺脫此特定警告,但同樣的問題會在其他地方發生,因爲這個詞在本文中被大量使用。

我想使用\hyphenation{}命令來代替,但顯然我的暫定\hyphenation{multi-disci-pli-na-ry}不起作用,因爲它不能正確理解第一個破折號。

我需要什麼咒語才能在一個已經包含破折號的單詞中得到正確的縮進?

紅利問題:我在哪裏可以找到自己對這個問題的答案?

+0

爲什麼這個詞在艱難的情況下被打破?是不是「多\換行尺寸」好嗎? – 2010-02-03 16:19:54

+1

獎金回答:「乳膠連字符」的谷歌搜索產生了各種有用的結果,包括乳膠維基書中有答案:http://en.wikibooks.org/wiki/LaTeX/Formatting#Hyphenation – Mica 2010-02-04 16:25:58

+3

@mica:不,不是的。我幾年前閱讀過所有這些頁面。 @geoff:如果乳膠在那裏連字符,那就沒問題了。但在這個例子中,它會導致一個「不完整的hbox」,乳膠根本不會選擇連字符。 – Gyom 2010-02-04 17:02:59

回答

44

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

的TeX不會連字包括已經斷字一個字。例如,(漫畫)英國姓Smyth-Postlethwaite不會連字符,這可能是麻煩的。這是正確的英文排版風格(這可能不是其他語言正確的),但如果需要,必須,你可以用一個\hyph命令替換在名稱中連字符,定義

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

這是這個常見問題解答通常會推薦的東西... hyphenat包定義了一系列這樣的命令(用於在各種標點符號處引入連字符點)。


,或者你可以\newcommand一個可擴展到multi-discipli\-nary(使用搜索+替換全部替換現有的字)的命令。

+0

非常感謝。正如我懷疑的那樣,沒有「完美」的答案。因爲我不是該文檔中唯一的作者,所以我並不想強迫其他人在任何地方都使用'\ newcommand'(這就是爲什麼我要根據'\ hyphenation'來尋求一些東西)。我想默認情況下我會保持原樣,並在乳膠抱怨過滿的盒子時手動添加明確的連字符。 – Gyom 2010-02-04 17:22:48

+1

正確的命令是'\ hyp {}' – scheffield 2015-09-26 05:43:01

-4

我回答類似的東西在這裏:LaTeX breaking up too many words

我說:

,你應該在你的序言的地方設置一個連字符點球:

\hyphenpenalty=750 

750適合於我的兩個需求的價值信紙(8.5x11英寸)上的字體佈局與12磅字體。調整值以適應您的需求。數字越高,連字會發生的越少。您可能還需要有一個看看hyphenatpackage,它提供的不僅僅是斷字罰

+1

他在詢問如何避免斷字,而不是如何定義限制。 – 2013-08-27 18:34:28

-4

爲了避免我使用非打破空間~結合反向空間\!已經複姓字斷字多一點。例如,命令

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

在文本中使用,禁止單詞3-D中的連字符。可能不是最好的解決方案,但它對我有用!

+4

這回答了所提問題的*相反問題。另外,正如試圖編輯你的帖子的人指出的那樣,還有更好的方法來做你所做的:'\ mbox {3-D}'。 – zwol 2011-04-25 15:51:11

17

我使用包hyphenat,然後寫複合詞,如芬蘭文字Internet-yhteys(Eng。Internet連接)作爲Internet\hyp yhteys。看起來很愚蠢,但似乎是我找到的最優雅的方式。

+0

終於有用了,謝謝! – 2012-12-02 12:24:24

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命令,從而使單詞的其餘部分可以分詞。這是一個通用的解決方案,通常包含顯式連字符連字符的所有單詞。

注意-成爲一個宏,不是完全可擴展的,所以嘗試加載可能沒有想到-做個宏

編輯其他包後,包括這一點:這是我的第二個版本,第一個當{}後跟連字符時版本不太穩健。這不是,但與第一個版本不同,此版本中的-不完全可擴展。

3
multi\hskip0pt-\hskip0pt disciplinary 

你可以例如這樣定義

\def\:{\hskip0pt} 

,然後寫

multi\:-\:disciplinary 

注意的是,巴貝爾俄語語言包都有自己的一套短線不禁止斷字,"~(雙引號+波浪號)爲例的。

+1

應該是'multi- \ hskip0pt紀律'。就像你在MWE中一樣,它會變得太多。只要設置'\ setlength {\ textwidth} {0.1cm}'爲了嘗試。 – LaRiFaRi 2014-07-30 10:57:18

47

問題(正如KennyTM指出的那樣)是LaTeX不會在連字符中連字符。幸運的是,有一個標準的軟件包(ncctools的一部分)解決了這個問題,叫做extdash。這定義了新的連字符和破折號命令,它們不會中斷連字符,並且可以允許或防止連字符/破折號處的換行符。我更喜歡將它與shortcuts選項一起使用,因此我可以使用例如\-/而不是\Hyphdash。這裏就是你想要的東西:

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

,是爲了避免連字符突破,使用multi\=/disciplinary

(旁白:The Chicago Manual of Style建議丟棄連字符連接,如 '多' 的詞綴,除非該詞沒有含糊或無法理解)

+0

這很好,但是當我在章節字符串中使用它時會產生hyperref警告:'Package hyperref警告:令牌不允許在PDF字符串中。在那裏,另一個建議的解決方案('\ def \ hyph { - \ penalty0 \ hskip0pt \ relax}')可以工作。 – 2014-08-26 12:22:31

+0

@ Jan-PhilipGehrcke:這些警告也可以使用'\ texorpdfstring'(它爲進入章節標題的字符串提供條件編譯)來修復。我隱藏了語義宏中的用法(這裏可能是'\ multidisciplinary')。是的,這並不完美。 – Blaisorblade 2017-07-21 16:08:41

3

multi-disciplinary不會被複數連接,正如kennytm所解釋的那樣。但是multi-\-disciplinarymultidisciplinary具有相同的連字機會。

我承認我不知道這是爲什麼起作用。

命令\-插入酌情連字符到一個字:從行爲描述here(重點煤礦)它是不同的。 這也成爲在這個詞允許斷字的唯一的一點。

相關問題