LaTeX'in tire içeren bir kelimeyi tirelemesini nasıl sağlayabilirim?


107

Yazdığım bir LaTeX belgesinde , bir satırın sonunda ortaya çıkan "multi-disipliner" kelimesinden dolayı aşırı dolu bir hbox uyarısı alıyorum .

Bu özel uyarıyı olarak değiştirerek kurtulabilirim multi-discipli\-nary, ancak aynı sorun başka yerlerde de olacak, çünkü bu kelime gazetede çokça kullanıldı.

\hyphenation{}Onun yerine komutu kullanmak isterdim , ancak açıkçası benim geçici \hyphenation{multi-disci-pli-na-ry}çalışmıyor çünkü ilk tireyi doğru anlamıyor.

Zaten tire içeren bir kelimede doğru girintiyi elde etmek için hangi büyülü sözlere ihtiyacım var?

Bonus soru: Bu sorunun cevabını kendim nerede bulabilirdim?


Kelimenin sert hipende kırılması neden bir problem? "Multi- \ newline boyutlu" tamam değil mi?
Geoff Reedy

1
Bonus cevap: Google'da yapılan bir "lateks tireleme" araması, yanıtı olan lateks wiki kitabı da dahil olmak üzere her türlü yararlı sonucu verdi: en.wikibooks.org/wiki/LaTeX/Formatting#Hyphenation
Mica

3
@mica: hayır öyle değil. Bütün o sayfaları yıllar önce okudum. @geoff: Lateks orada kısa çizgi yapsaydı gerçekten de sorun olmazdı. ancak bu örnekte "yetersiz dolu hbox" a neden olur ve lateks hiç tireleme yapmamayı seçer.
Gyom

ilk - tireleme komutunda ters eğik çizgi çizebilir misiniz?
Brian Postow

1
Yorumunuz için teşekkürler @DrewSteen. Açıkçası katılıyorum. Bu sorular :-) sorulduğunda Ama savunmada tex.SX arka diye bir şey yoktu
Gyom

Yanıtlar:


52

Gönderen https://texfaq.org/FAQ-nohyph :

TeX, zaten tirelenmiş bir kelimeyi tireleme yapmaz. Örneğin, (karikatür) İngilizce soyadı Smyth-Postlethwaite heceleme yapmaz ki bu zahmetli olabilir. Bu doğru İngilizce dizgi stilidir (diğer diller için doğru olmayabilir), ancak gerekirse, addaki kısa çizgiyi \hyph tanımlanmış bir komutla değiştirebilirsiniz.

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

Bu, bu SSS'nin normalde tavsiye edeceği türden bir şey değildirhyphenatPaket, bu tür komutların bir demetini tanımlar (çeşitli noktalama karakterlerinde tireleme noktaları eklemek için).


Veya \newcommandgenişleyen bir komut multi-discipli\-nary(varolan sözcükleri değiştirmek için Ara + Tümünü Değiştir'i kullanın).


Çok teşekkürler. Şüphelendiğim gibi, "mükemmel" bir cevap yok. O dokümandaki tek yazar ben olmadığım için, diğerlerini \newcommandher yerde kullanmaya zorlamak istemiyorum (bu yüzden temel alan bir şey arıyordum \hyphenation). Sanırım bunu varsayılan olarak '' olduğu gibi '' tutacağım ve Lateks fazla dolu hbox'lardan şikayet ettiğinde manuel olarak açık kısa çizgiler ekleyeceğim.
Gyom

63

Sorun (KennyTM'nin belirttiği gibi), LaTeX'in sözcükleri içinde tire ile tirelememesidir. Neyse ki, adı verilen bu soruna hitap eden standart bir paket (ncctools'un parçası) var extdash. Bu, tirelemeyi kesintiye uğratmayan ve tire / tirede satır kesmelerine izin verebilen veya bunları engelleyebilen yeni tire ve tire komutlarını tanımlar. Bunu shortcutsseçenekle birlikte kullanmayı tercih ederim , bu yüzden örneğin \-/yerine kullanabilirim \Hyphdash. Buyrun istedikleriniz:

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

Bu kısa çizgide kırılmayı önlemek için kullanın multi\=/disciplinary

(Bir yana: Chicago Stil El Kitabı , kelime belirsiz veya onsuz anlaşılmaz olmadığı sürece, 'multi' gibi ekleri ekleyen kısa çizgilerin kaldırılmasını önerir.)


Bu harika ama ben bir bölüm dizesinde kullanmak bir Hyperref uyarı verir geçerli: Package hyperref Warning: Token not allowed in a PDF string. Burada önerilen diğer çözüm ( \def\hyph{-\penalty0\hskip0pt\relax}) çalışır.
Dr Jan-Philip Gehrcke

1
@ Jan-PhilipGehrcke: Bu uyarılar kullanılarak da düzeltilebilir \texorpdfstring(bölüm başlıklarına giren dizeler için koşullu derleme sağlar). Anlamsal makroların içindeki kullanımları gizlerim (burada, muhtemelen \multidisciplinary). Evet, mükemmel değil.
Blaisorblade

22

Paket kullanıyorum hyphenatve ardından Fin kelimesi İnternet-yhteys (İng. İnternet bağlantısı ) gibi bileşik kelimeler yazıyorum Internet\hyp yhteys. Aptal görünüyor ama bulduğum en zarif yol gibi görünüyor.


6

multi-disciplinarykennytm tarafından açıklandığı gibi tirelenmeyecektir. Ancak multi-\-disciplinaryaynı tireleme fırsatlarına sahiptir.multidisciplinary sahiptir.

Bunun neden işe yaradığını bilmediğimi kabul ediyorum. Davranış açıklanan gelen bu farklıdır burada (vurgu benim):

Komut \-, bir sözcüğe isteğe bağlı bir kısa çizgi ekler. Bu aynı zamanda bu kelimede tirelemeye izin verilen tek nokta olur .


Değiştirme -ile -\-overleaf.com varsayılan ayarlarla en azından çıkışı, değişmez (muhtemelen pdflatex ama arka sayfadaki aslında demiyor).
Camille Goudeseune

4

Ben de aynı sorunu yaşadım. Kullandığım hyphenat artı aşağıdaki makro:

\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

Bunun latex3'ün expl3 paketini kullandığına dikkat edin.

-Ardından daha fazla çizgi gelip gelmediğini görmek için ileriye doğru tarayan etkin bir karakter yapar . Eğer öyleyse, -emin olmak --ve ---çalışmaya devam etmek için a olarak kalır . Değilse,\hyp komut kelimenin geri kalanında kelime kesmelerini sağlar. Bu, açık tireler içeren tüm sözcüklerin normal olarak tirelenmesini sağlayan genel bir çözümdür.

Bunun -tam olarak genişletilemeyen bir makro olduğunu unutmayın , bu nedenle -makro olması beklenmeyen diğer paketleri yükledikten sonra bunu eklemeye çalışın.

Düzenleme: Bu benim ikinci sürümüm, ilk sürüm, bir tire işaretinin ardından {veya }sonrasında daha az sağlamdı . Bu değil, ancak ilk sürümden farklı olarak, -bu sürümdeki tam olarak genişletilemez.


3
multi\hskip0pt-\hskip0pt disciplinary

Örneğin şöyle tanımlayabilirsiniz

\def\:{\hskip0pt}

ve sonra yaz

multi\:-\:disciplinary

Babel Rusça dil paketinin, "~örneğin tirelemeyi (çift tırnak + tilde) yasaklamayan kendi çizgi dizisine sahip olduğuna dikkat edin .


1
Olmalı multi-\hskip0pt disciplinary. MWE'nizde olduğu gibi, çok fazla hipenize olacak. Bunu \setlength{\textwidth}{0.1cm}denemek için ayarlayın.
LaRiFaRi

-3

Burada benzer bir cevap verdim: LaTeX çok fazla kelimeyi ayırıyor

Dedim:

önsözünüzde bir yerde tireleme cezası belirlemelisiniz:

\hyphenpenalty=750

750 değeri, mektup kağıdında (8,5x11 inç) 12 pt yazı tipiyle iki sütunlu düzen ihtiyaçlarımı karşıladı. Değeri ihtiyaçlarınıza göre ayarlayın. Sayı ne kadar yüksekse tireleme o kadar az olur. Tireleme paketine de bir göz atmak isteyebilirsiniz, tireleme cezasından biraz daha fazlasını sağlar


1
Sınırların nasıl tanımlanacağını değil, tirelemeden nasıl kaçınılacağını soruyor.
Andras Gyomrey

-4

Zaten tirelenmiş sözcükte tirelemeyi önlemek için ~, geriye doğru boşlukla birlikte bölünemez boşluk kullandım \!. Örneğin, komut

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

metinde kullanılan, 3-D kelimesindeki tirelemeyi bastırın. Muhtemelen en iyi çözüm değil, ama benim için çalıştı!


4
Bu, sorulan sorunun tam tersi soruyu yanıtlıyor . Ayrıca, dışarı söyledi noktaya post düzenlemek çalıştı kişi olarak, ne yaptığını yapmak çok daha iyi bir yol var: \mbox{3-D}.
zwol
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.