Provo a indovinare: hai messo il comando \label prima del comando caption e così il \label recupera solo l’ultimo contatore riferenziabile che sia stato incrementato; per recuperare anche il numero della tabella devi mettere \label dopo che \caption ha incrementato il numero riferenziabile “table”
Se non e così, allora non ho idea da dove possa arrivare il tuo problema, almeno se stati usando classi e pacchetti “normali”.
\label l’ho messo dopo \captionof{}{}. Ho provato a spostare alcuni comandi del codice di Enrico ma ottengo riferimenti corretti solo a partire dalla seconda tabella. Riporto un esempio minimo:
`\documentclass{book}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{caption}
\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{% \par\addvspace{\bigskipamount} \noindent\parbox{\textwidth}{\centering \@thisboxcaption\unhbox\ivan@box} \par\addvspace{\bigskipamount}} \def\bigivan@box{% \par\addvspace{\bigskipamount} \noindent\parbox{\textwidth}{\centering \@thisboxcaption \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}} \par\addvspace{\bigskipamount}} \def\checkivan@wd{% \ifdim\wd\ivan@box>\dimexpr\textwidth+\marginparsep+\marginparwidth\relax
Tabella troppo grande\\
\fi}
\makeatother\begin{document}
\chapter{Primo}
Si veda la tabella \ref{tab:classe}
\ivanvbox{\captionof{table}{Classe frequentata}\label{tab:classe}
\begin{tabular}{cccccc}
\toprule
& 3 & 122 & 26,9 & 27,4 & 60,8\\
\bottomrule
\end{tabular}}
\end{document}`Ciao
Ivan
Come nel codice disabilito temporaneamente \captionof, occorre farlo anche per \label.
`\def\ivanvbox#1{\sbox\ivan@box{%
\stepcounter{ivan@cntr}\label{ivan@label\arabic{ivan@cntr}}%
\gdef\@thisboxlabel{}%
\def\label##1{\gdef\@thisboxlabel{\label{##1}}\ignorespaces}%
\gdef\@thisboxcaption{}%
\def\captionof##1##2{\gdef\@thisboxcaption{\captionof{##1}{##2}}\ignorespaces}%
#1}% end of \ivan@box `
Poi, subito dopo \@thisboxcaption nelle due macro che compongono le tabelle, aggiungi \@thisboxlabel.
Ho aggiunto anche un azzeramento di \@thisboxcaption nel caso una delle tabelle non avesse didascalia; e per simmetria. 🙂 E ho tolto \unskip perché finalmente mi sono accorto dov’era lo spazio in più. 🙂 Però avresti potuto dire subito che ti serviva anche \label, orsù. 😉
Ciao
Enrico