Re: Comandi chiusura nuovo ambiente

#68545
Up
0
Down
::

franen” post=67644Ciao, voglio costruire un ambiente che mi crei un testo posizionato sul fondo della pagina che abbia un’interlinea diversa da quella del resto del documento.
La definizione `\newenvironment{ambiente}{%
\null\vskip 0pt plus 1fill
\setlength{\parindent}{0pt}
\setlength{\baselineskip}{18pt} %18 è solo per esempio
}{\pagebreak}`
funziona per tutti i capoversi tranne che per l’ultimo, in cui l’interlinea non viene modificata (salvo che non lasci uno spazio fra il mio ultimo capoverso e \end{ambiente}). Se nell’ultima riga scrivo `{\par\pagebreak}` tutto funziona.
Mi sapreste dire perché?

TeX usa sempre la stessa interlinea per ciascun capoverso: il valore di \baselineskip quando si incontra il comando \par (o la riga vuota) che termina il capoverso stesso. Nel tuo caso che cosa succede?
`\begin{ambiente}
Primo capoverso.

Secondo capoverso.
\end{ambiente}
Testo che segue.`
Noterai che “Testo che segue” apparirà di seguito a “Secondo capoverso.” e ci sarà un cambio pagina fra quella riga e la seguente.

Infatti \pagebreak non ordina a TeX di terminare un capoverso, ma inserisce solo fra la riga attuale e la seguente il comando per cambiare pagina. Inoltre questo unico capoverso userà l’interlinea normale, perché questo è il valore riassegnato al termine dell’ambiente (gli ambienti formano gruppi e i valori assegnati al loro interno sono dimenticati quando il gruppo finisce).

Non cambierebbe molto se fra \end{ambiente} e il testo seguente lasciassi una riga vuota (che è esattamente come dare \par): quando TeX vede questo \par, il valore di \baselineskip è già tornato a quello valido prima di \begin{ambiente}.

Una faccenda analoga succede quando si scrive
`{\Large Testo su più righe}`
e si nota che questo testo viene composto in modo molto più compatto di quanto ci si aspetta. Il motivo è che il primo \par che TeX incontra è necessariamente dopo la graffa che fa tornare il valore dell’interlinea impostato da \Large a quello valido fuori. Le righe non vengono sovrapposte, perché TeX non lo fa mai, ma di sicuro sono composte scorrettamente.

Soluzione:
`\newenvironment{ambiente}
{\par % a scanso di equivoci
\vspace*{\fill} % non usiamo comandi di basso livello se ce ne sono già di alto livello disponibili
\setlength{\parindent}{0pt}
\setlength{\baselineskip}{18pt} %18 è solo per esempio
}
{\par % vogliamo essere sicuri che il testo sia composto come si deve
\pagebreak % cambio pagina
}`
Ciao
Enrico

Go to top