Salve,
Ho un problema con la creazione di un ambiente. Sto cercando, per prendere più confidenza con le box, di ricreare l’ambiente del libro digital typography using latex (pag. 66)
`\newenvironment{myQuote}[2]%
{\begin{list}{}{\leftmargin#1\rightmargin#2}\item{}}%
{\end{list}}……………. %posso anche creare un ambiente con newenvironment
\setbox0=\hbox{\includegraphics[width=2.8cm]{fig.pdf}}
\dimen0=\ht0 \advance\dimen0 by \medskipamount
\hrule\noindent\includegraphics[width=2.8cm]{fig.pdf}\vspace{-\dimen0}
\begin{myQuote}{\wd0}{0cm}
the text … bla bla bla … the text the text … bla bla bla …
\end{myQuote}\par\smallskip
\hrule`Se il testo dentro myQuote è lungo, non ci sono problemi. Il problema sorge quando il testo è poco e quindi il secondo \hrule va a sovrapporsi alla figura. Inoltre ho creato un nuovo ambiente quote per non avere problemi in caso di testo su più pagine. Infatti l’ambiente a pag.66 del libro occupa 3 pagine.
Per uniformità tutti gli ambienti di questo tipo dovrebbero avere lo stesso rientro dal margine sinistro, direi. Ma è facile modificare l’ambiente che ti propongo per tenere conto di ampiezze variabili della figura.
`\newbox\hquotebox
\newdimen\hquoteminht
\newenvironment{hquote}[1]
{\par\addvspace{\medskipamount}\hrule\par\nobreak
\setbox0=\hbox{\includegraphics[width=2.8cm]{#1}}%
\hquoteminht=\ht0 \advance\hquoteminht\baselineskip
\advance\hquoteminht\topsep
\setbox\hquotebox\vbox\bgroup % comincia una scatola
\list{}{\leftmargin3cm \labelwidth3cm \labelsep0pt}
\item[\hbox to 0pt{\hss\vbox to 0pt{\box0 \vss}\hskip2mm}]\ignorespaces}
{\endlist\egroup % finisce la scatola
\ifdim\ht\hquotebox<\hquoteminht
\vbox to\hquoteminht{\unvbox\hquotebox\vfill}
\else
\unvbox\hquotebox
\fi
\nobreak\hrule\addvspace{\medskipamount}}`
L'ambiente hquote ha un argomento: il nome del file grafico.
1. entro in modo verticale e aggiungo una spaziatura; compongo la linea orizzontale e impedisco il cambio pagina
2. misuro l'altezza della figura da inserire e aumento questa dimensione di una tolleranza (=\baselineskip) e dello spazio che list inserisce alla fine dell'ambiente (\topsep); memorizzo questa dimensione per dopo
3. comincio a comporre l'ambiente in una mia scatola (\setbox\hquotebox=\vbox\bgroup); la chiusura della scatola sarà nella parte finale dell'ambiente
4. inizio un list, con \leftmargin di 3cm e inserisco nell'etichetta la figura, ma con dimensioni verticali nulle
5. dopo \ignorespaces comincia il testo dell'ambiente
6. a \end{hquote} finisco list e chiudo la scatola che adesso devo misurare
7. se l'altezza di questa scatola è minore di quella della figura (aumentata di quanto si deve), ne costruisco una dell'altezza giusta che compongo
8. se l'altezza della scatola è sufficiente, la smonto e la passo alla composizione
9. impedisco un cambio pagina, aggiungo la riga orizzontale e una spaziatura
Se però uno di questi ambienti comincia verso un cambio pagina, rischi di avere problemi. Si dovrebbe fare un controllo su quanto spazio si ha a disposizione, roba lunga e noiosa; si guarda in fase di impaginazione finale.
Ciao
Enrico
[nota: ho modificato \labelwidth e \labelsep]