Ciao a tutti, ecco una domanda davvero strana direi…
Come è possible (sempre che sia possibile) far suddividere a Latex un testo in sillabe? cioè fargli spezzare una frase in sillabe tipo io scrivo “l’ingiustizia”
e lui in output mi scrive qualcosa come “l’in-giu-sti-zia” ???
Benvenuto! Il problema è già stato trattato da qualcuno: traggo, con correzioni, dal libro di Bechtolsheim.
`\makeatletter
\def\printhyphens#1{%
\begingroup
\setbox\z@=\vbox{
\pretolerance=\m@ne
\hyphenpenalty=-\@M
\hsize=\z@
\leftskip=\z@
\rightskip=\z@
\parfillskip=\z@skip
\parindent=\z@
\hfuzz=\maxdimen
\interlinepenalty=\z@
\clubpenalty=\z@
\widowpenalty=\z@
\brokenpenalty=\z@
\hskip\z@skip
#1}%
\global\setbox\@ne=\box\voidb@x
\setbox\z@=\vbox{
\unvbox0
\loop\unskip\setbox\tw@=\lastbox
\ifhbox\tw@
\global\setbox\@ne=\hbox{\unhbox\tw@\discretionary{}{}{}\unhbox\@ne}%
\repeat
}%
\unhbox\@ne
\endgroup
}
\makeatother`
Nell’argomento di \printhyphens devi mettere solo una “parola” alla volta. Se provi con \printhyphens{l’ingiustizia} otterrai quello che desideri.
L’idea è di comporre la parola con una giustezza nulla (\hsize=0pt) dentro una \vbox e poi decomporre questa \vbox una riga alla volta (a partire dall’ultima), ricomponendola in una \hbox. L’impostazione di tutti quei parametri è per evitare effetti collaterali indesiderati.
Non si prenda paura di tutti quegli @: \z@ sta per 0 (anche per 0pt), \@ne per 1, \tw@ per 2 e \@M per 10000. Le correzioni al codice di Bechtolsheim riguardano l’uso dei registri box, Knuth si raccomanda che le assegnazioni ai registri temporanei siano locali per quelli di indice pari e globali per quelli di indice dispari. Il registro 1 è infatti usato globalmente, perché la box che si va formando in esso è costruita all’interno di una vbox nel registro box 0 😯 😀
Ciao
Enrico