tabella pitagorica

  • Creatore
    Topic
  • #38219
    claudio
    Partecipante
      Up
      0
      Down
      ::


      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

    Visualizzazione 10 filoni di risposte
    • Autore
      Risposte
      • #38220
        robitex
        Amministratore del forum
          Up
          0
          Down
          ::

          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

          Guarda, 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. 😆

        • #38221
          claudio
          Partecipante
            Up
            0
            Down
            ::


            ti ringrazio
            il tuo risultato è molto migliore del mio
            speriamo che i mie scolari apprezzino
            🙂
            Ciao
            Claudio

          • #38222
            Up
            0
            Down
            ::

            ti ringrazio
            il tuo risultato è molto migliore del mio
            speriamo che i mie scolari apprezzino

            Il 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

          • #38223
            Up
            0
            Down
            ::


            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.

          • #38224
            Up
            0
            Down
            ::


            ops….

            mentre stavo scrivendo la mia soluzione, non ho visto che era stata postata la soluzione definitiva.

            Fate come se non avessi scritto nulla.

          • #38225
            claudio
            Partecipante
              Up
              0
              Down
              ::


              la soluzione di Enrico è ottima
              per non dire esoterica
              ha solo un problema
              il centering non funziona
              e la tabella è allineata a sinistra e non al centro
              per il resto è perfetta
              grazie claudio

            • #38226
              Up
              0
              Down
              ::

              la soluzione di Enrico è ottima
              per non dire esoterica
              ha solo un problema
              il centering non funziona
              e la tabella è allineata a sinistra e non al centro
              per il resto è perfetta

              È vero: occorre aggiungere \leavevmode prima di \vbox; lo correggo anche nel messaggio precedente.

              Ciao
              Enrico

            • #38227
              robitex
              Amministratore del forum
                Up
                0
                Down
                ::


                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.

              • #38228
                Up
                0
                Down
                ::

                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

              • #38229
                claudio
                Partecipante
                  Up
                  0
                  Down
                  ::


                  per la serie anche i grandi sbagliano o meglio
                  si distraggono nel codice di Enrico vi è un piccolo refuso
                  dove 🙂
                  Saluti Claudio

                • #38230
                  Up
                  0
                  Down
                  ::

                  per la serie anche i grandi sbagliano o meglio
                  si distraggono nel codice di Enrico vi è un piccolo refuso
                  dove 🙂

                  Corretta la parentesi quadra. Era un lascito della colorazione. 🙁

                  Ciao
                  Enrico

              Visualizzazione 10 filoni di risposte
              • Devi essere connesso per rispondere a questo topic.

              Go to top