- Questo topic ha 6 risposte, 3 partecipanti ed è stato aggiornato l'ultima volta 14 anni, 5 mesi fa da
Fabio.
-
CreatoreTopic
-
14 Dicembre 2011 alle 8:02 #67678::
Salve a tutti, sono un neo utilizzatore di LaTeX ed attualmente mi ritrovo di fronte ad un problema piuttosto ostico.Per formattare correttamente una pagina avrei la necessità di conoscere in qualche modo il numero di righe di una tabella creata da latex…..mi spiego meglio.
Supponendo di avere un semplice codice come il seguente:
`
\documentclass[a4paper]{article}
\usepackage[italian,english]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[scaled]{helvet}
\usepackage{booktabs}\begin{document}
\begin{tabular}{p{1cm}p{7cm}p{2cm}}
\small{\textbf{Codice}} & \small{\textbf{Descrizione}} & \small{\textbf{Altro}}\\ \midrule
1 & Una riga molto molto molto molto molto molto molto molto molto molto lungaaaaaaaaaaaaaaa & Altra cosa\\
\end{tabular}
\end{document}
`una volta impostato il layout della pagina, i bordi, i limiti delle celle della tabella ecc…, latex dispone nel miglior modo il contenuto all’interno. Ora nel momento della scrittura del file tex come nell’esempio fornito, io scrivo unicamente una riga. Ora tex per evidenti ragioni di spazio effettua delle andate a capo e formatta il contenuto nel miglior modo possibile.
La mia necessità sarebbe di conoscere, se possibile, il numero di righe che il compilatore cercherà di utilizzare. Ossia conoscere il numero di righe effettivamente presenti in quella tabella (nel nostro esempio sono 3). Esiste una qualche primitiva di tex in grado di fare ciò?
Ne avrei bisogno in quanto sto facendo lavorare insieme python e LaTeX e quel numero per me sarebbe fondamentale…..Qualunque idea e consiglio è più che ben accetta
Saluti a tutti
Fabio
-
CreatoreTopic
-
AutoreRisposte
-
-
14 Dicembre 2011 alle 8:53 #67679::
MiceneSagitter” post=66658Salve a tutti, sono un neo utilizzatore di LaTeX ed attualmente mi ritrovo di fronte ad un problema piuttosto ostico.
Per formattare correttamente una pagina avrei la necessità di conoscere in qualche modo il numero di righe di una tabella creata da latex…..mi spiego meglio.
Supponendo di avere un semplice codice come il seguente:
`
\documentclass[a4paper]{article}
\usepackage[italian,english]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[scaled]{helvet}
\usepackage{booktabs}\begin{document}
\begin{tabular}{p{1cm}p{7cm}p{2cm}}
\small{\textbf{Codice}} & \small{\textbf{Descrizione}} & \small{\textbf{Altro}}\\ \midrule
1 & Una riga molto molto molto molto molto molto molto molto molto molto lungaaaaaaaaaaaaaaa & Altra cosa\\
\end{tabular}
\end{document}
`una volta impostato il layout della pagina, i bordi, i limiti delle celle della tabella ecc…, latex dispone nel miglior modo il contenuto all’interno. Ora nel momento della scrittura del file tex come nell’esempio fornito, io scrivo unicamente una riga. Ora tex per evidenti ragioni di spazio effettua delle andate a capo e formatta il contenuto nel miglior modo possibile.
La mia necessità sarebbe di conoscere, se possibile, il numero di righe che il compilatore cercherà di utilizzare. Ossia conoscere il numero di righe effettivamente presenti in quella tabella (nel nostro esempio sono 3). Esiste una qualche primitiva di tex in grado di fare ciò?
Ne avrei bisogno in quanto sto facendo lavorare insieme python e LaTeX e quel numero per me sarebbe fondamentale…..Qualunque idea e consiglio è più che ben accetta
Saluti a tutti
FabioCiao,
le informazioni che dai sono un po’ poche per capire il problema.
Posso solo dire due cose:
1 – è un problema interessante (quello di utilizzare LaTeX da Python)
2 – le tabelle si possono “misurare” ovvero potresti teoricamente dopo una prima compilazione del sorgente opportunamente programmato in TeX, leggere nel file di log la dimensione che ti interessa, dividerla per l’altezza di una riga ed ottenere il numero di righe; passare poi ad una seconda compilazione con il dato richiesto (negli Appunti di programmazione di TeX di Enrico Gregorio trovi come misurare un oggetto).Comunque, spero che esista una strada diversa che non ottenere il numero di righe, altrimenti dovrai avere a che fare con una procedura troppo complicata, poco efficiente, e poco manutenibile.
Meglio lasciare i problemi di impaginazione all’interno di TeX.Un saluto.
-
14 Dicembre 2011 alle 11:56 #67680::
MiceneSagitter” post=66658Salve a tutti, sono un neo utilizzatore di LaTeX ed attualmente mi ritrovo di fronte ad un problema piuttosto ostico.
Per formattare correttamente una pagina avrei la necessità di conoscere in qualche modo il numero di righe di una tabella creata da latex…..mi spiego meglio.
Supponendo di avere un semplice codice come il seguente:
`
\documentclass[a4paper]{article}
\usepackage[italian,english]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[scaled]{helvet}
\usepackage{booktabs}\begin{document}
\begin{tabular}{p{1cm}p{7cm}p{2cm}}
\small{\textbf{Codice}} & \small{\textbf{Descrizione}} & \small{\textbf{Altro}}\\ \midrule
1 & Una riga molto molto molto molto molto molto molto molto molto molto lungaaaaaaaaaaaaaaa & Altra cosa\\
\end{tabular}
\end{document}
`una volta impostato il layout della pagina, i bordi, i limiti delle celle della tabella ecc…, latex dispone nel miglior modo il contenuto all’interno. Ora nel momento della scrittura del file tex come nell’esempio fornito, io scrivo unicamente una riga. Ora tex per evidenti ragioni di spazio effettua delle andate a capo e formatta il contenuto nel miglior modo possibile.
La mia necessità sarebbe di conoscere, se possibile, il numero di righe che il compilatore cercherà di utilizzare. Ossia conoscere il numero di righe effettivamente presenti in quella tabella (nel nostro esempio sono 3). Esiste una qualche primitiva di tex in grado di fare ciò?
Ne avrei bisogno in quanto sto facendo lavorare insieme python e LaTeX e quel numero per me sarebbe fondamentale…..Qualunque idea e consiglio è più che ben accetta
Saluti a tutti
Fabio`\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 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}` Ciao Enrico
-
14 Dicembre 2011 alle 15:36 #67681::
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
-
14 Dicembre 2011 alle 15:47 #67682::
MiceneSagitter” post=66671Un 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
-
15 Dicembre 2011 alle 8:16 #67683::
egreg9″ post=66672
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
EnricoAncora grazie infinite.
Purtroppo date le mie ancora scarse conoscenze ci ho messo un po’ per capire, ma il suo ultimo post è stato illuminante.
In effetti nel mio caso ho una tabella con 8 colonne, ma di queste solo una presenta un campo descrizione il cui contenuto mi è sconosciuto a priori e che quindi mi creava non pochi problemi.
La sua soluzione è andata ben oltre le mie aspettative. Infatti un unico \updatecountA è stato più che sufficiente alle mie esigenze. L’esempio è stato comunque interessante dato che sicuramente in futuro mi si ripresenterà un caso in cui effettuare più controlli ed anche perché ho imparato nuove macro a me totalmente sconosciute e che saranno da approfondire.Detto questo le rinnovo i miei più vivi ringraziamenti e la saluto augurandole una felice giornata.
Fabio
-
2 Aprile 2012 alle 11:48 #67684::
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
EnricoSalve 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
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.