Re: [risolto] Quando LaTeX decide dove mettere una figura?

#37810
Up
0
Down
::

Sto provando a creare una macro personale che andrà utilizzata all’interno dell’ambiente figure.
Il comportamento della macro sarà differente se la figura si troverà in una pagina pari o in una pagina dispari (in particolare, l’elemento grafico da includere sarà allineato a destra o a sinistra, ma l’ingombro complessivo della figura – intesa come immagine + didascalia – non cambia con la condizione).

Ho provato mettendo dentro la definizione del comando qualcosa tipo: `\ifthenelse{\isodd{\value{page}}}{ comandi se pagina dispari }{ comandi pagine pari }` ma non funziona; la mia impressione è che LaTeX prima valuti il numero della pagina nel punto in cui inizia a elaborare l’ambiente figure, di conseguenza decida quale parte di comando eseguire (e lo esegua) e solo a questo punto posizioni la figura, eventualmente non nel punto in cui ha iniziato ad elaborare figure.
Tutto ciò, ovviamente, ha senso, perché solo dopo aver valutato il contenuto dell’ambiente figure LaTeX può decidere fin dove far “galleggiare” la figura.

Da qui, la domanda nell’oggetto :Quando LaTeX decide definitivamente dove mettere una figura?
Come posso fare in modo che la condizione venga valutata quando il posizionamento dell’immagine è già stato scelto, ovvero che una parte del contenuto venga tenuta “in sospeso” sino a che la figura non è incollata al foglio? Ho pensato a qualcosa tipo: metti nella figura un elemento fittizio (phantom) che ha gli ingobri dell’elemento effettivo, piazza la figura sul foglio, valuta il test “pagina pari/dispar”i e poi vai ad incollare nello spazio già riservato il contenuto della condizione vera. Il fatto è che questo concetto è difficile da esprimere in italiano, in TeXnico, per me, è impossibile.

L’infrastruttura che cerchi esiste già, ed è il sistema label/ref. Il test \isodd è in grado di valutare correttamente anche riferimenti del tipo
`\isodd{\pageref{etichetta}}`
Il problema si risolve generando un’etichetta:
`\newcounter{dancingfigure}
\newenvironment{dancingfigure}[1][htp]
{\begin{figure}[#1]
\refstepcounter{dancingfigure}\label{d@f\thedancingfigure}
\ifthenelse{\isodd{\pageref{d@f\thedancingfigure}}}{\dfodd}{\dfeven}}
{\end{figure}}`
Che cosa facciano \dfodd e \dfeven lo puoi decidere tu e su questo basare il resto della costruzione. Ogni volta che si chiama l’ambiente dancingfigure, viene generata una nuova etichetta il cui nome è irrilevante per l’utente. Il fatto importante è che l’associazione del numero di pagina con l’etichetta viene fatta al momento della composizione effettiva della pagina, cioè quando LaTeX sa dove ha piazzato la figura. Ovvio che occorreranno più compilazioni per rimettere le cose a posto, ma non è un vero problema.

Ciao
Enrico

Go to top