Dovoli Latexu, da preloži besede s pomišljaji
Allow Latex Hyphenate Words With Dashes
Rešitev:
Tradicionalna tipografska praksa je izogibanje prepisovanju takih besed, zato je takšno pravilo Knuth kodiral v program TeX.
Kljub temu je še vedno mogoče vstaviti vezaj, ki dopušča prelome, tako da TeX zavedemo v razmišljanje, da imamo dve ločeni besedi (z vstavljanjem praznega lepila). To je zelo enostavno narediti, če smo pripravljeni vnesti posebno zaporedje, kot je Hyphdash oz
-/ namesto vezaja, kar ponujajo paketi, kot je
extdash. Če pa vztrajamo pri vnašanju običajnih vezajev v datoteko TeX, potem klasični mehanizmi TeX (kar pomeni, razen LuaTeX) ponujajo le en način, da se običajni vezaji obravnavajo kot nekaj drugega, in to je sprememba kode kode
- na aktivno, tako da postane makro, ki se razširi na nekaj daljšega. Toda to bi vedno povzročilo težave
- se uporablja kjer koli razen običajnega besedila, kar je precej pogosto (primere težave glejte v Stevenovem odgovoru). Predstavljam si, da če bi v klasičnem svetu TeX za to obstajala dobra rešitev, bi bil kakšen paket podoben
extdash bi to pokril.
(Pravzaprav obstaja popolnoma razumen pristop, ki iz nekega razloga ni zelo priljubljen v svetu TeX: in to je, da vhodno datoteko predhodno obdelate s kakšno pametno zunanjo pisavo, pri čemer nadomestite samo vezaje, ki se pojavljajo v običajnem besedilu z Hyphdash (ali njegova razširitev) ali karkoli drugega. Toda iz nekega razloga ljudje želijo narediti vse v TeX -u.)
Z LuaTeX-om, ki omogoča večji dostop do notranjosti TeX-a, postane veliko stvari možno, veliko mačjih kod in glavobolov, povezanih z makro, pa ni več. Na primer, LuaTeX imapovratni klic preklapljanja, ki ga lahko uporabite za spreminjanje običajnega vezaja. Ta povratni klic dobi seznam vozlišč, kamor lahko vstavimo diskrecijska vozlišča (vezaje), kamor koli se odločimo. To je veliko lažje, kot če bi morali vse narediti z makri (težko je nastaviti ustrezen vnos, ki se kasneje razširi na točno tisto, kar potrebujemo, brez drugih motenj). In obstaja celo a
lang.hyphenate funkcijo, s katero lahko preprosto naredimo tisto, kar počne običajna vezaja.
Zdi se, da deluje naslednje: recimo v datoteko vnesite naslednjehyphenateall.lua:
funkcija hyphenate_always (glava, rep) lokalno n = glava, medtem ko n naredi, če node.type (n.id) == 'glyph' in n.char == string.byte ('-') nato-vstavite neskončno kazen pred , in vozlišče lepila z ničelno širino za vezajem. -Tako kot pisanje ' nobreak- hspace {0pt}' ali enakovredno ' penal10000- hskip0pt' lokalno p = node.new (node.id ('kazen')) p.penalty = 10000 glavo, p = vozlišče. vstavi_pred (head, n, p) lokalno g = node.new (node.id ('lepilo')) head, g = node.insert_after (head, n, g) n = g konec n = n. naslednji konec lang. vezaj (glava, rep) konec luatexbase.add_to_callback ('preliv', preliv_ vedno, 'Prečrtaj celo besede, ki vsebujejo vezaje')in samo dal directlua {require ('hyphenateall')} v vašem.tex.
Na primer (izposoja primera iz Stevenovega odgovora):

documentclass {article} % Ni potreben-v tem primeru uporabljen samo zato, da pokaže, da ni potreben :-) newcommand ? { nobreak- hspace {0pt}} start {document} begin {minipage} [t] {0in} hbox {Pred:} pogosto lačen Dela: pogosto ? Lačen Kaj pa: pogosto lačen end {minipage} hspace {1in}% directlua {require ('hyphenateall')}% start {minipage} [t] {0in} hbox {Po:} pogosto lačen Dela: pogosto ? lačen Kaj pa: pogosto lačen end {minipage} end {document}Upoštevajte, da po directlua klic, za dodatno povezovanje nismo potrebovali posebne skladnje.
To lahko storite tako, da spremenite kodno kodo-, vendar to od takrat lomi vse vrste stvari- ni samo pomišljaj, ampak tudi negativen znak pri matematiki (pa tudi znak za dimenzioniranje, kot v core-1pt, vspace {- baselineskip}, pravilo [-1pt] {1pt} {3pt}).
Zato je spodnji MWE zgolj demonstracija in ne dejansko priporočilo. Prikazano v MWE za dve ničelni širiniministrani, brez nato z aktivnimi-.
documentclass {article} let svdash- { catcode`-= active % gdef-{ nobreak svdash nobreak hspace {0pt}}} start {document} start {minipage} [t] { 0in} catcode`- = 12 % Najprej, asteroid Nato, tuš Zadnji, asteroid-shower end {minipage} hspace {1in} % begin {minipage} [t] {0in} catcode`-= active % Najprej asteroid, nato še zadnja prha, asteroid-tuš end {minipage} end {document} 
Zato bi bil boljši pristop k (kot je navedeno zaextdash), tej posebni vrsti vezaja dodelite poseben makro. Tukaj izbiram ?, kar ima za posledico enak izhod kot prejšnji MWE:
documentclass {article} newcommand ? { nobreak- nobreak hspace {0pt}} begin {document} start {minipage} [t] {0in} Najprej asteroid Potem, nazadnje tuš, asteroid-tuš end {minipage} hspace {1in}% begin {minipage} [t] {0in} Najprej asteroid Potem pa zadnja prha, asteroid ? tuš end {minipage} end {document}