Ciao a tutti.
La situazione è questa. Ho diverse tabelle di differente larghezza e vorrei che sforassero, eventualmente, nel margine esterno. Così come sono, invece, sforano sempre nel margine di destra. Ho racchiuso le tabelle in un comando da me definito, in questo modo:
`
\newcommand{\ivanvbox}[1]{\vbox{\footnotesize #1}}%%%
\ivanvbox{\captionof{table}{Genere}
\begin{tabular}{cccccc}
\text{Valid} &
Maschio &
110 &
24,2 &
24,8 &
24,8\\\bottomrule
\end{tabular}}`Non sono riuscito ad adattare un codice di Enrico che ho trovato sul forum per una situazione simile. In pratica vorrei che le tabelle nelle pagine pari andassero nel margine sinistro, quelle nelle pagine dispari nel margine destro. Le tabelle non dovrebbero poi eccedere la larghezza di \textwidth+\marginparsep+\marginparwidth. In questi casi vanno sistemate, diminuendo il corpo o aggiustando le spaziature tra le colonne.
Ridefinire l’ambiente tabular, come mi ha suggerito Enrico, è fuori dalla mia portata, per il momento 🙂Ho usato quel comando perché altrimenti \captionof sarebbe in alcuni casi rimasto isolato. In questo modo mantengo sempre unita la didascalia con la tabella.
Qualche idea?
Mi ricorda un viaggio in automobile, chissà perché. 🙂
`\usepackage{ifthen}
\makeatletter
\newsavebox{\ivan@box}
\newcounter{ivan@cntr}
\def\ivanvbox#1{\sbox\ivan@box{%
\stepcounter{ivan@cntr}\label{ivan@label\arabic{ivan@cntr}}%
\def\captionof##1##2{\gdef\@thisboxcaption{\captionof{##1}{##2}}\ignorespaces}
\unskip#1}% end of \ivan@box
\ifdim\wd\ivan@box<\columnwidth
\normalivan@box
\else
\bigivan@box
\fi}
\def\normalivan@box{%
\begin{center}\@thisboxcaption\medskip\unhbox\ivan@box\end{center}}
\def\bigivan@box{%
\begin{center}\@thisboxcaption\medskip
\ifthenelse{\isodd{\pageref{ivan@label\arabic{ivan@cntr}}}}
{\def\ivan@side{l}}{\def\ivan@side{r}}%
\checkivan@wd
\makebox[\columnwidth][\ivan@side]{\box\ivan@box}
\end{center}}
\def\checkivan@wd{%
\ifdim\wd\ivan@box>\dimexpr\textwidth+\marginparsep+\marginparwidth\relax
Tabella troppo grande\\
\fi}
\makeatother`
La prima cosa che fa la versione complicata di \ivanvbox è di tenersi da parte gli argomenti di \captionof, dopo aver aperto un registro box. Un contatore apposito viene incrementato per costruirsi un’etichetta implicita. La tabella viene composta e poi ne misuriamo la larghezza. Se la larghezza è minore della giustezza la componiamo normalmente centrata (con \normal@ivanbox). Altrimenti entra in azione \big@ivanbox che compone la tabella in una box di ampiezza \columnwidth con allineamento a destra o a sinistra a seconda della pagina in cui siamo (il numero è stato calcolato con \pageref dando come etichetta quella costruita poco prima; alla prima compilazione non sarà definita, poco male perché \ifthenelse non si arrabbia, al massimo la tabella sporgerà dal margine sbagliato in quell’occasione).
C’è anche un controllo in più: se la tabella sfora, viene stampato “Tabella troppo larga” in modo che chi di dovere ci dia un’occhiata. Alla fine sarà sufficiente ridefinire \def\checkivan@wd{}, quando avrai deciso che sulle tabelle non puoi più fare niente.
Ciao
Enrico