egreg9″ post=66672
Un modo di grazie a tutti ed in particolare un ringraziamento speciale al prof. Gregorio per la sua soluzione.
Perfetta, era proprio quella che cercavo e a cui non sarei mai arrivato da solo.Devo dire che la sintassi mi è ancora piuttosto oscura e per questo cercherò di migliorare in futuro e di approfondire le mie conoscenze.
Per il momento però non posso che ringraziarvi ancora e augurarvi una felice giornata.
Fabio
Ho definito un ambiente apposito per includere l’azzeramento del contatore. Nell’esempio le colonne in cui eseguire i conteggi sembrano essere solo due; perciò definisco un comando da eseguire alla fine di ogni cella della seconda colonna: si esegue un \par e si conta quante righe sono state composte (con \prevgraf) e si rende globalmente disponibile questo numero. Nella terza faccio lo stesso: se il numero di righe qui è maggiore che nella seconda colonna, aumento il contatore di questo numero, altrimenti uso il precedente. Ci sono un paio di faccende tecniche (\@finalstrut) da mettere a posto, ma è (quasi) routine: no, ci ho messo un po’ a sistemarlo. 🙂
Se le colonne sono di più bisogna fare un po’ di lavoro supplementare.
Ciao
Enrico
Salve prof. Gregorio,
mi scusi se la disturbo nuovamente, ma negli ultimi giorni sono incappato in un problema dalla difficile soluzione che spero di poter risolvere, magari grazie a qualche suo intervento o suggerimento.
Non so se ricorda, ma qualche tempo fa lei riuscì a risolvere un problema che prevedeva il calcolo delle righe effettivamente occupate da una tabella. Negli ultimi giorni ho però notato che la soluzione trovata fallisce nel momento in cui vengano inseriti dei ritorni a capo all’interno di una cella della tabella (in questo caso inserisco \par avendo dei paragraph box).
`
\documentclass[a4paper]{article}
\usepackage[italian,english]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[scaled]{helvet}
\usepackage{booktabs,array}
\newenvironment{numtabular}[1][c]
{\setcounter{tabnumlines}{0}\begin{tabular}[#1]}
{\end{tabular}}
\newcounter{tabnumlines}
\makeatletter
\newcommand{\updatecountA}{\@finalstrut\@arstrutbox\par
\xdef\tempA{\the\prevgraf}\let\@finalstrut\@gobble}
\newcommand{\updatecountB}{\@finalstrut\@arstrutbox\par
\addtocounter{tabnumlines}{%
\ifnum\prevgraf>\tempA
\prevgraf
\else
\tempA
\fi}\let\@finalstrut\@gobble
}
\makeatother
\begin{document}
\begin{numtabular}{lp{7cm}<{\updatecountA}p{2cm}<{\updatecountB}} \toprule \small\bfseries Codice & \small\bfseries Descrizione & \small\bfseries Altro\\ \midrule 1 & Una riga molto molto molto molto molto molto molto molto molto molto \par lungaaaaaaaaaaaaaaa & Altra cosa\\ 2 & Una riga molto molto molto molto molto molto molto molto molto molto lungaaaaaaaaaaaaaaa & Altra cosa\\ \bottomrule \end{numtabular} La tabella precedente ha \thetabnumlines~righe. \end{document} ` Se nota, a differenza dell'ultima volta, nel codice ho inserito un \par nella seconda cella della prima riga della tabella. Il numero delle righe senza \par era 7, ora mi sarei aspettato un 8, ed invece il risultato risulta essere 5. Il problema credo sia dovuto al fatto che si esegue un \par e si conta quante righe sono state composte (con \prevgraf). Ora però, il numero che viene utilizzato non è il numero di tutte le righe nel record, ma esclusivamente il numero di righe a partire dall'ultimo \par ritrovato (spero di esser stato un minimo chiaro). Il risultato è che quindi per il primo record si conteggia esclusivamente un'unica riga (praticamente la riga occupata dalla sola parola " lungaaaaaaaaaaaaaaa"); per il secondo record sono conteggiate correttamente 3 righe e quindi viene tirato fuori il risultato finale di 5 (l'ultima linea non ho ancora ben capito se sia quella dell'intestazione della tabella o una riga vuota aggiuntiva non voluta di cui si parla nella documentazione finstrut.sty). Ora per risolvere il problema non so se si possa definire una sorta di "delimitatore" differente dal \par oppure se si possa in un qualche modo conteggiare ed aggiornare il numero di righe in una cella fino a che non si raggiunga una nuova riga della tabella. Spero di non aver fatto troppa confusione nell'esposizione del problema e spero vivamente che possa darmi qualche consiglio o al limite suggerirmi della documentazione che possa aiutarmi. Nel frattempo la ringrazio in anticipo per il tempo che ancora una volta mi concede e la saluto. Fabio