Ricapitoliamo. La frase in discussione (tratta dal paragrafo sulla revisione finale dell’Arte di maggio) era (è) questa:
Il valore di \looseness è un parametro locale relativo al capoverso in cui compare, quindi l’effetto del comando non si propaga.
Questa frase, che ha tratto in inganno Carlo, è giusta o sbagliata? Carlo non ha tutti i torti: allungando (o accorciando) un capoverso che si trova a pagina 1 di un documento di 500 pagine, può succedere, al limite, che tutti i capoversi successivi vengano spostati (anche se restano composti con la loro lunghezza “naturale”), quindi, a rigore, l’effetto di quell’unico, iniziale \looseness si è propagato per tutto il documento.
Naturalmente, il senso della frase non era quello: si voleva (e si vuole) semplicemente dire che, ai fini dell’allungamento/accorciamento, il comando \looseness ha effetto solo nel relativo capoverso. Ho cercato di specificare meglio il concetto così (è la versione che ora si trova nell’Arte di giugno):
Il valore di \looseness è un parametro locale relativo al capoverso in cui compare, quindi l’effetto del comando non si propaga ai capoversi successivi (che vengono composti con parametro \looseness=0).
Ora penso che il concetto sia più chiaro, ma l’ambiguità osservata da Carlo rimane. Per essere irreprensibili, forse bisognerebbe scrivere così:
Il valore di \looseness è un parametro locale relativo al capoverso in cui compare: i capoversi successivi (a meno che non venga specificato diversamente) vengono composti con la loro lunghezza “naturale” (con parametro \looseness=0).
Si noti la precisazione “a meno che non venga specificato diversamente”: forse la si potrebbe semplicemente sottindendere, ma, come abbiamo appena visto, i sottointesi possono generare confusione… L’ultima frase, certo la più rigorosa di quelle scritte, è forse un po’ pignola (anche per i miei gusti che un po’ pignoli sono…), mentre quella di adesso (l’effetto del comando non si propaga ai capoversi successivi, che vengono composti con \looseness=0″), meno rigorosa, è più suggestiva
Un bel problema didattico, insomma. 🙄
Ciao,
L.
Il valore dato a \looseness conta solo nel capoverso in cui viene assegnato, perché TeX imposta \looseness=0 all’inizio di ogni capoverso.
A dire il vero è il comando \par che azzera \looseness dopo che il capoverso è stato composto, ma è un punto TeXnico irrilevante, visto che in modo verticale il valore di \looseness è ignorato.
Di solito si dice che una riga vuota (o un \par) in modo verticale non ha alcun effetto; in realtà l’effetto c’è: si azzerano i parametri locali (\looseness, \hangindent, \hangafter e \parshape). Il motivo è che azzerarli quando il capoverso è cominciato potrebbe annullare dichiarazioni dell’utente:
`\looseness=1\noindent`
comporrebbe il capoverso con \looseness=0, perché è \noindent che fa cominciare il capoverso. Quindi Knuth ha deciso che l’azzeramento è causato da \par. Così
`\looseness=1\noindent`
ha l’effetto richiesto. Forse è meglio aggiungere qualche parola su come specificare il valore; l’esempio c’è, ma con poco commento:
`… fine del capoverso precedente.
\looseness=x
Testo del capoverso …`
è il modo più semplice per avere ciò che si vuole. Naturalmente senza lasciare righe vuote fra \loosenes=x e il testo, ça va sans dire.
Ciao
Enrico