- Questo topic ha 11 risposte, 2 partecipanti ed è stato aggiornato l'ultima volta 6 anni, 12 mesi fa da
Pierpaolo.
-
CreatoreTopic
-
11 Settembre 2019 alle 14:10 #116398::
Ciao a tutti.
Circa 10 giorni fa, scrivevo riguardo ad una tabella contenente immagini e testo.
Ora sono alle prese con questa tabella e sto avendo non pochi problemi, purtroppo la scadenza della consegna è veramente prossima e ho paura di dover ricorrere a word in caso non riuscissi a sistemare tutto.Ad ogni modo: devo realizzare una tabella di 2 colonne, la prima contiente una piccola immagine, schematica, la seconda una descrizione, a volte un po’ lunga da dover andare a capo automaticamente (al massimo 3 righe).
Come suggeritomi da OldClaudio, ho provato il pacchetto array, ma non credo faccia al caso mio (ma forse sono io che non ne conosco bene le potenzialità).
Dovendo contenere la tabella delle immagini, questa diventa subito più lunga di una pagina, così sto provando ad usare il pacchetto longtable con la seguente sintassi:
`
\begin{center}
\begin{longtable}{p{4cm}p{7cm}}
\caption{List of symbols}\\
\label{tab:symb_list}\\
\hline \multicolumn{1}{c}\textbf{Symbol}&\multicolumn{1}{l}\textbf{Description}\\ \hline
\endfirsthead\multicolumn{2}{c}%
{{\bfseries \tablename\ \thetable{} — continued from previous page}} \\
\hline \multicolumn{1}{c}{\textbf{Symbol}} & \multicolumn{1}{l}{\textbf{Description}} \\ \hline
\endhead\hline \multicolumn{2}{c}{{Continued on next page}} \\ \hline
\endfoot\hline \hline
\endlastfoot
\multicolumn{1}{c}{\includegraphics[width=0.2\textwidth]{front.jpg}}&\textbf{Front} axle suspension kit\\
\includegraphics[width=0.2\textwidth]{immagine_1.jpg}&Descrizione immagine 1\\
`I problemi che ho trovato sono:
- la prima immagine mi copre il filetto orizzontale dell’intestazione,
- nella prima riga di intestazione ho allineamento a destra di entrambe le colonne (Symbol e Description) nonostante abbia specificato “centro” e “sinistra”
- nella seconda colonna avrei bisogno di centrare verticalmente ciò che scrivo (rispetto all’immagine), invece rimane “in basso” rispetto a questa
Devo dire che la documentazione del pacchetto longtable non l’ho trovata particoltamente chiara come per altri pacchetti.
Come sempre: grazie in anticipo!
-
CreatoreTopic
-
AutoreRisposte
-
-
11 Settembre 2019 alle 15:37 #116399::
Ciao a tutti.
Ho risolto il problema n°2 … era un mio errore di sintassi nelle parentesi, il codice corretto ora è:`\begin{center}
\begin{longtable}{p{4cm}p{7cm}}
\caption{List of symbols}\\
\label{tab:symb_list}\\
\hline \multicolumn{1}{c}{\textbf{Symbol}}&\multicolumn{1}{l}{\textbf{Description}}\\ \hline
\endfirsthead\multicolumn{2}{c}%
{{\bfseries \tablename\ \thetable{} — continued from previous page}} \\
\hline \multicolumn{1}{c}{\textbf{Symbol}} & \multicolumn{1}{l}{\textbf{Description}} \\ \hline
\endhead\hline \multicolumn{2}{c}{{Continued on next page}} \\ \hline
\endfoot\hline \hline
\endlastfoot
\multicolumn{1}{c}{\includegraphics[width=0.2\textwidth]{front.jpg}}&\textbf{Front} axle suspension kit\\
\includegraphics[width=0.2\textwidth]{immagine_1.jpg}&Descrizione immagine 1\\`
-
11 Settembre 2019 alle 18:14 #116400
-
12 Settembre 2019 alle 4:26 #116401
-
12 Settembre 2019 alle 4:36 #116402::
Ri ciao.
Ecco un esempio del documento:
`\documentclass[a4paper,twoside,12pt,english,notitlepage,openright]{report}
\usepackage[latin1]{inputenc}
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage{longtable}
\usepackage{array}
\usepackage{tabularx}\begin{document}
\section{Key picture}
\label{sec:cat_picture}
Some introduction to explain what are we showing\dots\begin{center}
\begin{longtable}{cp{4cm}p{7cm}}
\caption{List of symbols}\\
\label{tab:symb_list}\\
\hline \multicolumn{1}{c}{\textbf{Symbol}}&\multicolumn{1}{l}{\textbf{Description}}\\ \hline
\endfirsthead\multicolumn{2}{c}%
{\bfseries \tablename\ \thetable{} — continued from previous page} \\
\hline \multicolumn{1}{c}{\textbf{Symbol}} & \multicolumn{1}{l}{\textbf{Description}} \\ \hline
\endhead\hline \multicolumn{2}{c}{{Continued on next page}} \\ \hline
\endfoot\hline \hline
\endlastfoot\includegraphics[width=0.2\textwidth]{front.jpg} &Text 1st row\\
\includegraphics[width=0.2\textwidth]{rear.jpg} &Text 2nd row\\
…..
\hline
\end{longtable}
\end{center}
\end{document}`Grazie in anticipo, a dopo!
-
12 Settembre 2019 alle 6:19 #116403::
Non ti è chiaro il concetto di punto di riferimento; quello delle immagini incluse nel file mediante \includegraphics è nel loro punto inferiore sinistro. Se usi i descrittori p per le colonne è chiaro che la figura e il testo di una riga che lo affianca sono entrembe allineate in fondo; se il testo è di più righe, la sua prima riga ha la base allineata con la base della figura.Per curare questo problema devi usare i descrittori m
Ma non basta, perché come al solito il punto di riferimento della figura continaa ad essere il punto inderiore sinistro.
Quindi bisogna mascherare questa situazione con una \parbox centrata. Per questo ha definito alcune cose, la più importante e “strana” delle quali è il nuovo comando \insertimage, il cui primo argomento è facoltativo e di default vale la larghezza della prima colonna, ma se lo specifichi puoi avere un altro valore di larghezza. Quegli \hbox contenti una riga verticale di cui è specificata una larghezza nulla, servono per immettere nella \parbox uno spazietto bianco sopra e un altro sotto la scatola che contiene l’immagine vera e propria.
Ciò premesso il codice, che a me funziona e che non presenta nessuno dei problemi che indichi, è il seguente:`\documentclass[a4paper,twoside,12pt,english,notitlepage,openright]{report}
\usepackage[latin1]{inputenc}% Perché insisti con latin1?
% Oggi ci vuole sempre utf8.
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage{longtable}
\usepackage{array,booktabs}% Nelle tabelle senza filetti verticali usare
% sempre booktabs e i suoi comandi per i filetti orizzontali% Queste definizioni sono convenienti; se ne impostano i valori dentro l'ambiente che contiene la tabella
\newlength\primacolonna
\newlength\secondacolonna\newcommand\insertimage[2][\primacolonna]{%
\parbox[c]{#1}{\hbox{\rule{0pt}{0.5ex}}%
\hbox{\includegraphics[width=\hsize]{#2}}%
\hbox{\rule{0pt}{1ex}}%
}%
}\usepackage{mwe}% per le figure fasulle
\newcommand\BlaText{Bla bla bla bla bla bla bla bla bla bla% Per il testo fasullo
% bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla.}% con la riga
% di mezzo commentata nel mio EMC il testo è meno alto della figura;
% se togli il segno di commento, il testo è più alto della figura.\begin{document}
\section{Key picture}
\label{sec:cat_picture}
Some introduction to explain what are we showing\dots\begin{center}
\setlength{\primacolonna}{4cm}
\setlength{\secondacolonna}{7cm}\begin{longtable}{cm{\primacolonna}m{\secondacolonna}}
\caption{List of symbols}\\
\label{tab:symb_list}\\
\toprule \multicolumn{1}{c}{\textbf{Symbol}}&\multicolumn{1}{l}{\textbf{Description}}\\ \midrule
\endfirsthead\multicolumn{2}{c}%
{\bfseries \tablename\ \thetable{} — continued from previous page} \\
\toprule \multicolumn{1}{c}{\textbf{Symbol}} & \multicolumn{1}{l}{\textbf{Description}} \\ \midrule
\endhead\midrule \multicolumn{2}{c}{{Continued on next page}} \\ \bottomrule
\endfoot\bottomrule
\endlastfoot%\includegraphics[width=0.2\textwidth]{front.jpg} &Text 1st row\\
%\includegraphics[width=0.2\textwidth]{rear.jpg} &Text 2nd row\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\end{longtable}
\end{center}\end{document}`Attento che ho tolto tutti gli \hline dalle impostazioni di longtable e li ho sostituiti con i comandi di booktabs.
-
12 Settembre 2019 alle 12:41 #116404::
Eccomi qua …
Intanto grazie per la risposta, con le modifiche suggerite ho delle perplessità, perché non ho capito tutto quello che hai scritto e qualche dubbio, perché non è ancora tutto perfetto.
Cominciando da “cosa non va”:- Lo spazio dedicato al testo nella seconda colonna sembra uguale alla prima, quindi va a capo più frequentemente di quanto dovrebbe, allego immagine:
.
- Provando a cambiare i valori delle colonne e rigenerando il documento, alla fine la dimensione della tabella non cambia, rimane sempre la stessa.
Invece non ho capito quanto segue:
- per quel poco che so di Latex, per inserire un nuovo comando, la sintassi dovrebbe essere: `\newcommand{nomecomando}[n_argomenti]{definizione}`. Perciò non ho capito la tua sintassi: `\newcommand\insertimage[2][\primacolonna]{%
\parbox[c]{#1}{\hbox{\rule{0pt}{0.5ex}}%
\hbox{\includegraphics[width=\hsize]{#2}}%
\hbox{\rule{0pt}{1ex}}%
}%
`. In particolare, perché dopo l’argomento è inserito `[\primacolonna]`? - Non sto usanto utf8 perché nel testo ho delle lettere con dieresi (E maiuscola in particolare) e non so come inserirle per fare in modo che non mi risulti un errore, con latin1 non ho questo problema, ho giàa tanti problemi con questa tabella che non me ne cerco un altro con la codifica…
Sicuramente questi problemi sono frutto della mia ignoranza in materia, sto infatti cercando di capire come hai realizzato la tabella.
Sto facendo delle prove su un documento quasi vuoto in cui rigenero il pdf ad ogni modifica.
- Lo spazio dedicato al testo nella seconda colonna sembra uguale alla prima, quindi va a capo più frequentemente di quanto dovrebbe, allego immagine:
-
12 Settembre 2019 alle 16:52 #116405::
Mah …
Nel pomeriggio avrò fatto un milione di tentativi, però resta il problema della spaziatura del testo nella seconda colonna.
In sostanza il testo viene formattato con una larghezza uguale a quella della prima colonna, anche se i filetti orizzontali di intestazione restano più larghi, inoltre cambiando il parametro della larghezza della seconda colonna, resta tutto uguale.
-
12 Settembre 2019 alle 17:14 #116406::
Hai ragione, c’era un c di troppo nella serie di descrittori delle colonne. INoltre ho notato che le figure così alte fanno si che la riga mediana della figura inserita in ogni cella della prima colonna, non atraversi la figura fasulla per il suo centro.Con questa modifica le cose dovrebbero andare meglio`\documentclass[a4paper,twoside,12pt,english,notitlepage,openright]{report}
\usepackage[latin1]{inputenc}% Perché insisti con latin1?
% Oggi ci vuole sempre utf8.
\usepackage[english]{babel}
\usepackage[T1]{fontenc}
\usepackage{longtable}
\usepackage{array,booktabs}% Nelle tabelle senza filetti verticali usare
% sempre booktabs e i suoi comandi per i filetti orizzontali\errorcontextlines=100
\newlength\primacolonna
\newlength\secondacolonna
\newcommand\insertimage[2][\primacolonna]{%
\parbox[c]{#1}{\mbox{\rule{0pt}{0.5ex}}\newline
\mbox{\includegraphics[width=\hsize]{#2}}\newline
\mbox{\rule{0pt}{1ex}}%
}%
}\usepackage{mwe}
\newcommand\BlaText[1][\secondacolonna]{\parbox[c]{#1}{%
Bla bla bla bla bla bla bla bla bla bla
% bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
bla bla bla bla bla bla bla bla bla bla bla bla bla bla.}}
% con la riga
% di mezzo commentata nel mio EMC il testo è meno alto della figura;
% se togli il segno di commento, il testo è più alto della figura.\begin{document}
\section{Key picture}
\label{sec:cat_picture}
Some introduction to explain what are we showing\dots\begin{center}
\setlength{\primacolonna}{4cm}
\setlength{\secondacolonna}{7cm}\begin{longtable}{m{\primacolonna}m{\secondacolonna}}
\caption{List of symbols}\\
\label{tab:symb_list}\\
\toprule \multicolumn{1}{c}{\textbf{Symbol}}&\multicolumn{1}{l}{\textbf{Description}}\\ \midrule
\endfirsthead\multicolumn{2}{c}%
{\bfseries \tablename\ \thetable{} — continued from previous page} \\
\toprule \multicolumn{1}{c}{\textbf{Symbol}} & \multicolumn{1}{l}{\textbf{Description}} \\ \midrule
\endhead\midrule \multicolumn{2}{c}{{Continued on next page}} \\ \bottomrule
\endfoot\bottomrule
\endlastfoot%\includegraphics[width=0.2\textwidth]{front.jpg} &Text 1st row\\
%\includegraphics[width=0.2\textwidth]{rear.jpg} &Text 2nd row\\
\rule{\primacolonna}{1pt} & \rule{\secondacolonna}{1pt}\\[\baselineskip]
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\insertimage{example-image-a} &\BlaText\\
\insertimage{example-image-b} &\BlaText\\
\end{longtable}
\end{center}\end{document}`Se non capisci che cosa indichi il secondo argomento fra quadre del comando \inserimage e similmente nel comando \BlaText, bisogna che studi la grammatica e la sintassi dei comandi di LaTeX; se non sai dove guardare, c’è sempre la guida tematica Il LaTeX Reference Manual commentato, che credo di averti già indicato; è scaricabile dal paragrafo delle guide tematiche della sezione Documentazione di questo forum.
Le spiegazioni te le do quando uso i comandi nativi di TeX; nel codice che ti ho inviato ho usato solo comandi di LaTeX; nella prima riga della tabella ho messo due righe esattamente larghe quanto ciascuna colonna, ma ho sempre usato comandi nativi di LaTeX; ti ho tolto anche le macro \hbox, quindi, davvero, non ho usato nessun trucco che non sia realizzabile con i comandi di LaTeX, senza arrampicarsi sui vetri.
-
13 Settembre 2019 alle 4:27 #116407::
Ciao!
Grazie mille!
Ora funziona come dovrebbe, ti ringrazio ancora.
Ho rimosso la riga `\rule{\primacolonna}{1pt} & \rule{\secondacolonna}{1pt}\\[\baselineskip]`
perché a me viene come in figura allegata.
A parte questo tutto ok.In merito alla questione più importante, devo ammettere che pensavo di aver raggiunto un livello sufficiente, con Latex, da riuscire più o meno a cavarmela. Ma devo dire che alcuni aspetti non mi sono chiari. Ieri pomeriggio ho smanettato non poco cercando di modificare il `\newcommand` che avevi scritto e qualche risultato l’ho ottenuto, ma non ho proprio pensato di rimuovere quel descrittore della tabella e ancora adesso non ho capito come possa essere stato determinante per la spaziatura della seconda colonna.
Sicuramente andrò a sbirciare la guida che mi hai mandato (mi rendo conto che nella vita di tutti i giorno, almeno nella mia, è davvero difficile mettersi lì e dedicare del tempo ad imparare qualcosa che si può già fare in altro modo …).
Ho finalmente capito questo: `Se non capisci che cosa indichi il secondo argomento fra quadre del comando \inserimage` è un argomento di default giusto?
Mentre non ho capito la sintassi usata.
Non avevo mai usato prima `\newcommand` da solo, quindi sono andato a guardarmi la guida e ho trovato la sintassi:
`\newcommand{nome_comando}[n_argomenti]{azioni_del_comando}`
Infatti tu non hai messo le graffe attorno a nome_comando e non capisco perché funziona lo stesso … (m a lo lascio così ci mancherebbe!).
Sono ancora nella fase in cui, quando devo fare un nuovo documento mi scarico man mano le guide dei vari pacchetti nuovi che non ho usato prima e impiego una marea di tempo per leggerele e sperimentare, dovrei fare al contrario lo so …
Grazie moltissimo comunque, senza il tuo aiuto avrei reimpaginato tutto con word nel weekend, da lunedì a mercoledì sarò in Inghilterra a presentare il prodotto con questi foglietti in mano!Un saluto
-
13 Settembre 2019 alle 5:39 #116408::
0) hai fatto bene a togliere quella prima riga con i due \rule; io l’avevo messa nel mio EMC solo per verificare che le larghezze delle colonne fossero proprio quelle specificate.1) quel c nella descrizione delle colonne diceva che la tabela aveva 3 colonne la prima di tipo c, la seconda di tipo m{\primacolonna} e la terza di tipo m{\secondacolonna}; Nel corpo della tabella avevo nella prima cella di tipo c un oggetto di larghezza \primacolonna; nella seconda cella di tipo m{\primacolonna} avevo il testo prodotto dal comando \BlaText, che quidi veniva composto nella giustezza \primacolonna della — in effetti — seconda colonna; nella terza colonna di tipo m{\secondacolonna} non avevo niente perché ero già andato nella riga successiva con \\.
2) Le parentesi graffe attorno al nome della macro da definire sono superflue, perché non occorrono per racchiudere un solo token; il nome della macro da definire comincia con \ ed è formato solo da lettere, quindi TeX sa che quella stringa di caratteri è un solo token. Metterci le parentesi graffe on disturba per niente, ma è superfluo.
3) la sintassi di \newcommand (come anche di \renewcommand e \providecommand) è la seguente:
\newcommand{⟨comando⟩}[⟨numero argomenti⟩][⟨default⟩]{⟨definizione⟩}
\renewcommand{⟨comando⟩}[⟨numero argomenti⟩][⟨default⟩]{⟨definizione⟩}
\providecommand{⟨comando⟩}[⟨numero argomenti⟩][⟨default⟩]{⟨definizione⟩}Come specificato nel paragrafo 1.7.1; vi viene spiegato che i due argomenti facoltativi sono appunto facoltativi; se mancano il nuovo comando è privo di argomenti; se c’è soli il primo facoltativo il comando vuole obbligatoriamente tanti argomenti quanto è in valore del numero di argomenti; se c’è anche il secondo argomento facoltativo, questo dice che il primo argomento è facoltativo e se “default” non è vuoto, quel default è il valore dell’argomento facoltativo se nell’uso del comando non viene specificato il suo primo argomento facoltativo. Perciò, se il “comando” è \mycommand,
a) se numero argomenti non c’è la chiamata del comando \mycommand è semplicemente \mycommand
b) se numero argomenti vale 2 ma il default non è specificato, la chiamata del comando \mycommand è \mycommand{primo}{secondo}
c) se è specificato il secondo argomento facoltativo, la chiamata del comando \mycommand è \mycommand{secondo} oppure \mycommand[primo]{secondo}; con la prima chiamata il valore del rpimo argomento è vuoto o default a seconda di cosa si è messo dentro al secondo facoltativo della definizione.Sembra complicato, ma poi pensandoci su si vede che è logico, anche se le definizioni eseguibili con queste tre comandi nativi di LaTeX sono un po’ limitate; se si vogliono eseguire definizioni più complesse, con più argomenti facoltativi diversamente racchiusi e non limitati al solo primo argomento, le definizioni avanzate che si possono eseguire con le funzionalità del pacchetto xparse sono una cannonata. Ma richiedono di leggere la documentazione di xparse e di capirla fino in fondo. xparse si basa sul linguaggio LaTeX3, che è quello che prima o poi sostituirà completamente LaTeX2e, anche se verrà mantenuta la compatibilità con il linguaggio LaTeX che noi utenti normali usiamo quotidianamente.
-
14 Settembre 2019 alle 5:19 #116409::
Caspita!
Grazie anche per la spiegazione.
Sono certo che esista una sorta di logicità (in fondo chi lo realizza è un team di programmatori), ma al momento non la vedo in tutte le condizioni, ma penso sia dovuto al non aver ancora abbastanza praticità con l’ambiente. Ad ogni modo, negli ambiti in cui riesco a muovermi con un po’ meno di goffagine riesco ad apprezzarlo anche io.Ho raccolto degli appunti sul “caso” delle tabelle lunghe, spero che non mi serva chiedere altro su questo argomento.
Grazie 1000 ancora.
Un saluto.
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.