- Questo topic ha 11 risposte, 4 partecipanti ed è stato aggiornato l'ultima volta 16 anni, 10 mesi fa da
egreg9.
-
CreatoreTopic
-
21 Ottobre 2009 alle 14:55 #38219::
ho guardato in po in giro sfogliata l’arte ma
la seguente tabella ha due problemi
le colonne da 1 a 10 sono allineate al centro verticalmente ma allineate a sinistra orizzontalmente mentre la colonna 11 è centrata il alto
come fare perchè le celle siano allineate sia verticalmente che orizzontalmente?
`
\begin{table}[!ht]
\centering
\begin{tabular}{*{11}{|m{.6cm}}|}
\cline{2-11}
\multicolumn{1}{c|} {}& 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\[.6cm]
\hline
1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\[.6cm]
\hline
2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 \\[.6cm]
\hline
3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 \\[.6cm]
\hline
4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 \\[.6cm]
\hline
5 & 5 & 10 & 15 & 20 & 25 & 30 & 35 & 40 & 45 & 50 \\[.6cm]
\hline
6 & 6 & 12 & 18 & 24 & 30 & 36 & 42 & 48 & 54 & 60 \\[.6cm]
\hline
7 & 7 & 14 & 21 & 28 & 35 & 42 & 49 & 56 & 63 & 70 \\[.6cm]
\hline
8 & 8 & 16 & 24 & 32 & 40 & 48 & 56 & 64 & 72 & 80 \\[.6cm]
\hline
9 & 9 & 18 & 27 & 36 & 45 & 54 & 63 & 72 & 81 & 90 \\[.6cm]
\hline
10 & 10 & 20 & 30 & 40 & 50 & 60 & 70 & 80 & 90 & 100 \\[.6cm]
\hline
\end{tabular}
\caption{Tavola pitagorica}
\label{tab:Tavolapitagorica}
\end{table}
`
grazie
Claudio
-
CreatoreTopic
-
AutoreRisposte
-
-
21 Ottobre 2009 alle 16:09 #38220::
ho guardato in po in giro sfogliata l’arte ma
la seguente tabella ha due problemi
le colonne da 1 a 10 sono allineate al centro verticalmente ma allineate a sinistra orizzontalmente mentre la colonna 11 è centrata il alto
come fare perchè le celle siano allineate sia verticalmente che orizzontalmente?
`
\begin{table}[!ht]
\centering
\begin{tabular}{*{11}{|m{.6cm}}|}
\cline{2-11}
\multicolumn{1}{c|} {}& 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\[.6cm]
\hline
1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\[.6cm]
\hline
2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 \\[.6cm]
\hline
3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 \\[.6cm]
\hline
4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 \\[.6cm]
\hline
5 & 5 & 10 & 15 & 20 & 25 & 30 & 35 & 40 & 45 & 50 \\[.6cm]
\hline
6 & 6 & 12 & 18 & 24 & 30 & 36 & 42 & 48 & 54 & 60 \\[.6cm]
\hline
7 & 7 & 14 & 21 & 28 & 35 & 42 & 49 & 56 & 63 & 70 \\[.6cm]
\hline
8 & 8 & 16 & 24 & 32 & 40 & 48 & 56 & 64 & 72 & 80 \\[.6cm]
\hline
9 & 9 & 18 & 27 & 36 & 45 & 54 & 63 & 72 & 81 & 90 \\[.6cm]
\hline
10 & 10 & 20 & 30 & 40 & 50 & 60 & 70 & 80 & 90 & 100 \\[.6cm]
\hline
\end{tabular}
\caption{Tavola pitagorica}
\label{tab:Tavolapitagorica}
\end{table}
`
grazie
ClaudioGuarda, ho lavorato un po’ alla tua tabella ma non sono ancora pienamente soddisfatto.
Quel disallineamento verticale è causato dal [0.6cm], per cui togliendolo sono giunto al risultato seguente:`\documentclass{article}
\usepackage{array}
\begin{document}\renewcommand\arraystretch{1.9}
\begin{tabular}{*{11}{|m{.5cm}}|}
\cline{2-11}
\multicolumn{1}{c|} {}& 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\\hline
1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10 \\\hline
2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20 \\\hline
3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30 \\\hline
4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40 \\\hline
5 & 5 & 10 & 15 & 20 & 25 & 30 & 35 & 40 & 45 & 50 \\\hline
6 & 6 & 12 & 18 & 24 & 30 & 36 & 42 & 48 & 54 & 60 \\\hline
7 & 7 & 14 & 21 & 28 & 35 & 42 & 49 & 56 & 63 & 70 \\\hline
8 & 8 & 16 & 24 & 32 & 40 & 48 & 56 & 64 & 72 & 80 \\\hline
9 & 9 & 18 & 27 & 36 & 45 & 54 & 63 & 72 & 81 & 90 \\\hline
10 & 10 & 20 & 30 & 40 & 50 & 60 & 70 & 80 & 90 & 100 \\\hline
\end{tabular}\end{document}`
Spero in un risultato migliore anche se la precisione assoluta in questo caso è raggiungibile solo dai massimi esperti .
Ciao. 😆
-
21 Ottobre 2009 alle 17:54 #38221
-
21 Ottobre 2009 alle 18:04 #38222::
ti ringrazio
il tuo risultato è molto migliore del mio
speriamo che i mie scolari apprezzinoIl modo migliore è di non andare a occhio. Nella tabella seguente i quadrati sono di un centimetro di lato (esclusa la cornice):
`\documentclass[a4paper]{article}\begin{document}
\begin{table}
\centering
\def\mybox#1{\fbox{\kern.5cm
\vrule height .5cm depth .5cm width 0pt \makebox(0,0){#1}%
\kern.5cm}}
\def\riga#1{%
#1&\number\numexpr#1*1\relax
&\number\numexpr#1*2\relax
&\number\numexpr#1*3\relax
&\number\numexpr#1*4\relax
&\number\numexpr#1*5\relax
&\number\numexpr#1*6\relax
&\number\numexpr#1*7\relax
&\number\numexpr#1*8\relax
&\number\numexpr#1*9\relax
&\number\numexpr#1*10\relax}
\leavevmode\vbox{\fboxsep=0pt \offinterlineskip
\halign{&\mybox{#}\kern-\fboxrule\cr
\omit&1&2&3&4&5&6&7&8&9&10\cr\noalign{\kern-\fboxrule}
\riga{1}\cr\noalign{\kern-\fboxrule}
\riga{2}\cr\noalign{\kern-\fboxrule}
\riga{3}\cr\noalign{\kern-\fboxrule}
\riga{4}\cr\noalign{\kern-\fboxrule}
\riga{5}\cr\noalign{\kern-\fboxrule}
\riga{6}\cr\noalign{\kern-\fboxrule}
\riga{7}\cr\noalign{\kern-\fboxrule}
\riga{8}\cr\noalign{\kern-\fboxrule}
\riga{9}\cr\noalign{\kern-\fboxrule}
\riga{10}\cr\noalign{\kern-\fboxrule}
}}
\caption{Tavola Pitagorica}
\end{table}
\end{document}`
Senza \halign e qualche altre bella primitiva non si fa. La tabella è effettivamente quadrata. 🙂 Dovrebbe essere chiaro come modificare le misure (cerca i .5cm).Ciao
Enrico
-
21 Ottobre 2009 alle 18:16 #38223::
non sono un massimo esperto(anzi sono uno dei due studenti acquistati dal GUIT all’ultimo Guit meeting)ma all’ultima correzione aggiungerei quanto di seguito.Si potrebbe forse usare il pacchetto widetable di beccari ma non l’ho ancora provato.
`
\documentclass{article}
\usepackage[]{siunitx}
\begin{document}\renewcommand\arraystretch{1.9}
\begin{table}[!ht]
\centering
\begin{tabular}{*{10}{|S[tabnumalign=centredecimal,tabformat=2]}|S[tabnumalign=centredecimal,tabformat=2]|}
\cline{2-11}
\multicolumn{1}{c|}{} & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\\hline
1 & 1 & 2 & 3 & 4 & 5 & 6 & 7 & 8 & 9 & 10\\\hline
2 & 2 & 4 & 6 & 8 & 10 & 12 & 14 & 16 & 18 & 20\\\hline
3 & 3 & 6 & 9 & 12 & 15 & 18 & 21 & 24 & 27 & 30\\\hline
4 & 4 & 8 & 12 & 16 & 20 & 24 & 28 & 32 & 36 & 40\\\hline
5 & 5 & 10 & 15 & 20 & 25 & 30 & 35 & 40 & 45 & 50\\\hline
6 & 6 & 12 & 18 & 24 & 30 & 36 & 42 & 48 & 54 & 60\\\hline
7 & 7 & 14 & 21 & 28 & 35 & 42 & 49 & 56 & 63 & 70\\\hline
8 & 8 & 16 & 24 & 32 & 40 & 48 & 56 & 64 & 72 & 80\\\hline
9 & 9 & 18 & 27 & 36 & 45 & 54 & 63 & 72 & 81 & 90\\\hline
10 & 10 & 20 & 30 & 40 & 50 & 60 & 70 & 80 & 90 & 100\\\hline
\end{tabular}
\caption{Tavola pitagorica}
\label{tab:Tavolapitagorica}
\end{table}\end{document}
`Spero di essere stato d’aiuto.
-
21 Ottobre 2009 alle 18:20 #38224
-
21 Ottobre 2009 alle 18:36 #38225
-
21 Ottobre 2009 alle 21:19 #38226
-
22 Ottobre 2009 alle 8:16 #38227::
La soluzione di Enrico si basa su TeX e pertanto richiede particolare abilità e conoscenza del linguaggio di Knuth, sicché non è facile e immediato ricavarla.
Rimane certamente come esempio di studio per chi come me dovrebbe cominciare a studiare seriamente TeX e colmare questa vasta lacuna di utilizzatore di LaTeX.
Tuttavia propongo qui un’altra soluzione basata sul pacchetto grafico PGF che offre un linguaggio la cui “filosofia” mi è particolarmente congeniale.Disegno della griglia:
Per disegnare la griglia della tabella pitagorica utilizziamo il comando \draw specificando un quadrato di 10 di lato (se non si specificano unità PGF intenderà i centimetri):`\draw (0,0) grid (10,10);`Riempimento della tabella:
Basta scrivere due cicli foreach nidificati che eseguono il disegno di un nodo con la comoda opzione shift. Ho copiato, questo si, il codice di Enrico in TeX per calcolare il risultato dell’espressione x * ()-y che da il valore del prodotto in tabellina, poiché PGF esegue risolve eventuali espressioni solo se si tratta di coordinate mentre per il testo da associare al nodo non effettua alcun parsing:
`\foreach \x in {1,2,3,…,10}
\foreach \y in {1,2,3,…,10}
\draw[shift={(-.5,-.5)}] (\x ,\y) node {\number\numexpr\x*(11-\y)\relax};`Mettendo insieme il codice ecco il primo risultato che da la tabellina pitagorica corretta in una griglia di 1cm x 1cm:`\documentclass[a4paper]{article}
\usepackage{tikz}
\pagestyle{empty}\begin{document}
\begin{tikzpicture}
% grid definition
\draw (0,0) grid (10,10);% fill numbers
\foreach \x in {1,2,3,…,10}
\foreach \y in {1,2,3,…,10}
\draw[shift={(-.5,-.5)}] (\x ,\y) node {\number\numexpr\x*(11-\y)\relax};
\end{tikzpicture}\end{document}`
Completando e raffinando un po’ il codice, si ottiene il seguente listato, dove la cosa più importante è l’aggiunta dell’opzione scale all’ambiente tikzpicture che scala tutto tranne che il testo assegnato agli oggetti nodo, pertanto modificando un unico parametro si può regolare le dimensione della tabella.
`\documentclass[a4paper]{article}
\usepackage{tikz}
\pagestyle{empty}\begin{document}
\begin{tikzpicture}[scale=0.675]
% grid definition
\draw (-1,0) grid (10,10);
\draw (0,10) grid (10,11);
\draw[line width=1pt, color=blue] (0,0) rectangle (10,10);% fill numbers
\foreach \x in {1,2,3,…,10}
\foreach \y in {1,2,3,…,10}
\draw[shift={(-.5,-.5)}] (\x ,\y) node {\number\numexpr\x*(11-\y)\relax};% fill first row
\foreach \x in {1,2,3,…,10}
\draw[shift={(-.5,-.5)}] (\x , 11) node {\x};% fill first column
\foreach \y in {1,2,3,…,10}
\draw[shift={(-.5,-.5)}] (0, 11-\y) node {\y};
\end{tikzpicture}\end{document}`
Ringrazio chi ha avuto la pazienza di seguire fino quì e naturalmente anche Enrico.
Firmato un impenitente non utilizzatore di TeX.
-
22 Ottobre 2009 alle 8:56 #38228::
La soluzione di Enrico si basa su TeX e pertanto richiede particolare abilità e conoscenza del linguaggio di Knuth, sicché non è facile e immediato ricavarla.
Rimane certamente come esempio di studio per chi come me dovrebbe cominciare a studiare seriamente TeX e colmare questa vasta lacuna di utilizzatore di LaTeX.
Tuttavia propongo qui un’altra soluzione basata sul pacchetto grafico PGF che offre un linguaggio la cui “filosofia” mi è particolarmente congeniale.Disegno della griglia:
Per disegnare la griglia della tabella pitagorica utilizziamo il comando \draw specificando un quadrato di 10 di lato (se non si specificano unità PGF intenderà i centimetri):`\draw (0,0) grid (10,10);`Riempimento della tabella:
Basta scrivere due cicli foreach nidificati che eseguono il disegno di un nodo con la comoda opzione shift. Ho copiato, questo si, il codice di Enrico in TeX per calcolare il risultato dell’espressione x * ()-y che da il valore del prodotto in tabellina, poiché PGF esegue risolve eventuali espressioni solo se si tratta di coordinate mentre per il testo da associare al nodo non effettua alcun parsing:
`\foreach \x in {1,2,3,…,10}
\foreach \y in {1,2,3,…,10}
\draw[shift={(-.5,-.5)}] (\x ,\y) node {\number\numexpr\x*(11-\y)\relax};`Mettendo insieme il codice ecco il primo risultato che da la tabellina pitagorica corretta in una griglia di 1cm x 1cm:`\documentclass[a4paper]{article}
\usepackage{tikz}
\pagestyle{empty}\begin{document}
\begin{tikzpicture}
% grid definition
\draw (0,0) grid (10,10);% fill numbers
\foreach \x in {1,2,3,…,10}
\foreach \y in {1,2,3,…,10}
\draw[shift={(-.5,-.5)}] (\x ,\y) node {\number\numexpr\x*(11-\y)\relax};
\end{tikzpicture}\end{document}`
Completando e raffinando un po’ il codice, si ottiene il seguente listato, dove la cosa più importante è l’aggiunta dell’opzione scale all’ambiente tikzpicture che scala tutto tranne che il testo assegnato agli oggetti nodo, pertanto modificando un unico parametro si può regolare le dimensione della tabella.
`\documentclass[a4paper]{article}
\usepackage{tikz}
\pagestyle{empty}\begin{document}
\begin{tikzpicture}[scale=0.675]
% grid definition
\draw (-1,0) grid (10,10);
\draw (0,10) grid (10,11);
\draw[line width=1pt, color=blue] (0,0) rectangle (10,10);% fill numbers
\foreach \x in {1,2,3,…,10}
\foreach \y in {1,2,3,…,10}
\draw[shift={(-.5,-.5)}] (\x ,\y) node {\number\numexpr\x*(11-\y)\relax};% fill first row
\foreach \x in {1,2,3,…,10}
\draw[shift={(-.5,-.5)}] (\x , 11) node {\x};% fill first column
\foreach \y in {1,2,3,…,10}
\draw[shift={(-.5,-.5)}] (0, 11-\y) node {\y};
\end{tikzpicture}\end{document}`
Ringrazio chi ha avuto la pazienza di seguire fino quì e naturalmente anche Enrico.
Firmato un impenitente non utilizzatore di TeX.Molto carina. Ieri sera cercavo di risolvere il problema in treno, con un paio di idee che non funzionavano. Fra stazione e casa mi è venuto in mente \makebox(0,0) per centrare il numero nel quadrato e il resto era già in via di rifinitura. Va da sé che \makebox(0.0) ha richiamato l’uso dell’ambiente picture: quel tipo di oggetto non è una tabella, ma un oggetto grafico. Chiaro che con tikz, a saperlo usare :(, si può fare.
Vediamo di commentare un po’ quel codice misterioso. Il nucleo fondamentale è costruire il quadrato di base: uso \fbox inserendo una \vrule invisibile alta mezzo centimetro e profonda altrettanto, in modo che il numero inserito tra due spazi orizzontali di mezzo centimetro sia perfettamente al centro.
La macro \riga è solo un’abbreviazione per inserire le undici caselle senza dover fare i conti.
A quel punto mi serve un opportuno preambolo per un \halign che inserisco in una \vbox dove azzero lo spazio interlinea (\offinterlineskip) e anche lo spazio che LaTeX aggiunge fra il bordo e il contenuto della \box (\fboxsep=0pt). Il preambolo, cioè lo schema per definire le colonne dell’allineamento è
`&\mybox{#}\kern-\fboxrule\cr`
che significa: ripeti quante volte serve il codice indicato fra & e \cr, sostituendo a # il contenuto effettivo della cella. Quindi il numero che compare diventa l’argomento di \mybox e una volta inserito il quadrato si torna indietro di \fboxrule, in modo che il bordo del quadrato successivo si sovrapponga al precedente.Con \omit evito di inserire il quadrato nell’angolo in alto a sinistra, e scrivo la prima riga
(in realtà mi accorgo che ci sono dei \mybox in più :(). Alla fine della riga inserisco una spaziatura verticale negativa perché il bordo della riga si sovrapponga a quello della successiva (\noalign{\kern-\fboxrule}).\halign è molto più flessibile di \tabular, ma anche più difficile. 🙂
Ciao
Enrico
-
23 Ottobre 2009 alle 20:36 #38229
-
23 Ottobre 2009 alle 22:10 #38230
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.