Re: Mantenere titolo unito al paragrafo successivo

#52780
Up
0
Down
::

[quote][quote]Risolto con:
`\newcommand{\articolo}[1][]{%
\par\vspace*{2ex}
{\centering \sffamily ART. \Roman{articolo}#1%
\nobreak\par\vspace*{2ex}}
\refstepcounter{articolo}}`

Il segreto sta in \vspace*. Con \vspace non funziona.

Ma che ci sta a fare \nobreak prima di \par?

🙄 Evidentemente non serve…I dubbi si moltiplicano. A cosa serve realmente \nobreak? È equivalente a \penalty10000, giusto? Lo stesso problema delle righe isolate l’avevo incontrato anche per lo stile philosophy-modern. Anche in quel caso, con \vspace* funzionava e con \vskip no, anche con \null davanti. Perché? \null\vskip non dovrebbe essere equivalente a \vspace*?[/quote]
È vero, \nobreak è equivalente a \penalty10000; ma se lo dai là sei ancora in modo orizzontale, mentre a te serve in modo verticale.

Infatti
`\newcommand{\articolo}[1][]{%
\par\vspace{2ex}
{\centering\sffamily ART. \refstepcounter{articolo}\Roman{articolo}#1\par
\nobreak\vspace{2ex}}}`
funziona allo stesso modo. Nota le modifiche: il primo \vspace va senza asterisco, perché così può essere eliminato a un cambio di pagina. Probabilmente sarebbe meglio specificare anche una componente di allargamento.

TeX non spezza una pagina che in certe posizioni. Può spezzare a uno skip, purché sia preceduto da un “non discardable item”; può spezzare a un kern, se è seguito da uno skip; oppure a una penalità.

Il \par fa andare in modo verticale e TeX esamina se può spezzare la pagina: il prossimo item è una penalità, quindi sarebbe possibile, tuttavia la penalità in questione è 10000, cioè talmente alta che TeX nemmeno ci pensa (la potrebbe però usare in condizioni estreme, con avviso di Underfull \vbox o Overfull \vbox).

Allo skip successivo non può spezzare, perché una penalità è un “discardable item”. Né può spezzare al successivo item che è ancora uno skip; infatti \vspace emesso in modo verticale emette due skip, uno uguale all’argomento specificato e uno nullo. L’item precedente è ancora uno skip.

Perché funziona con \vspace*{2ex}? Perché questo comando inserisce
(1) una \hrule invisibile
(2) \nobreak
(3) \vskip{2ex}
(4) \vskip{0pt plus 0pt minus 0pt}

Esattamente come \vspace, ma c’è la \hrule seguita da \nobreak. 🙂

Lo skip nullo emesso da \vspace e \vspace* serve per l’interazione con \addvspace. Credo; non c’è traccia del motivo in source2e.

\null è equivalente a \hbox{}; quindi \null\vspace produce esattamente il contrario di quello che ti serve: un posto ottimo dove cambiare pagina, perché c’è uno skip preceduto da un “non discardable item”, la \hbox vuota.

Ti confondi perché è possibile usare \null\vfill per iniziare una pagina con spazio bianco; ma la faccenda riguarda l’eliminazione degli skip (e degli altri “discardable item”) a un cambio pagina.

Ciao
Enrico[/quote]
Chiarissimo come sempre 😀
Ecco il codice:
`\newcommand{\articolo}[1][]{%
\par\vskip2ex plus 2pt minus 1pt
{\centering\sffamily ART. \refstepcounter{articolo}\Roman{articolo}#1\par
\nobreak\vskip2ex plus 2pt minus 1pt}} `
Funziona correttamente. Come vedi ho aggiunto degli spazi elastici.

Ciao
Ivan

Go to top