Formattazione immagine TikZ

  • Creatore
    Topic
  • #91969
    Up
    0
    Down
    ::


    Buonasera,

    Vi scrivo per chiedere aiuto nella formattazione dell’immagine in tikz in allegato. Sto imparando a usare questa libreria quindi non sono molto “pratico”. Se doveste avere consigli oltre che commenti, correzioni e osservazioni sono ben accette.

    Il mio obiettivo é di allineare i box esterni uno sull’altro oltre che di averli tutti delle stesse dimensioni e, possibilmente, centrare i box interni in colonna (magari in modo automatico). Inoltre, come settare lo spacing tra un box e l’altro in modo che si ridimensioni in funzione del contenuto?

    Se avete bisogno di altri dettagli, semplicemente chiedete!
    Grazie per l’aiuto! 🙂

    Attachments:
    You must be logged in to view attached files.
Visualizzazione 8 filoni di risposte
  • Autore
    Risposte
    • #91970
      Up
      0
      Down
      ::

      ftabaro” post=91504Buonasera,

      Vi scrivo per chiedere aiuto nella formattazione dell’immagine in tikz in allegato. Sto imparando a usare questa libreria quindi non sono molto “pratico”. Se doveste avere consigli oltre che commenti, correzioni e osservazioni sono ben accette.

      Il mio obiettivo é di allineare i box esterni uno sull’altro oltre che di averli tutti delle stesse dimensioni e, possibilmente, centrare i box interni in colonna (magari in modo automatico). Inoltre, come settare lo spacing tra un box e l’altro in modo che si ridimensioni in funzione del contenuto?

      Se avete bisogno di altri dettagli, semplicemente chiedete!
      Grazie per l’aiuto! 🙂

      Usa le matrici!!

      Ciao
      Claudio

    • #91971
      Up
      0
      Down
      ::


      dici di usare array per il testo e poi fare tipo un overlay per il bordo del nodo? qualcosa tipo questo esempio: http://www.texample.net/tikz/examples/highlighting-matrix/

    • #91972
      Up
      0
      Down
      ::

      ftabaro” post=91549dici di usare array per il testo e poi fare tipo un overlay per il bordo del nodo? qualcosa tipo questo esempio: http://www.texample.net/tikz/examples/highlighting-matrix/

      Si, più o meno.

      Non ti consiglio proprio di usare quel particolare esempio perché è parecchio vecchio e come puoi notare il riempimento rende opaco il testo. A te non serve forse un riempimento, ma per correttezza va detto. In Highlight elements in the matrix trovi molti esempi; oltretutto, ho la sensazione che con fit avrai più problemi che non vantaggi: se vuoi fare un fit per ogni riga e la dimensione delle righe non è uguale sei punto a capo. Invece, se disegni “a mano” partendo dall’ancora south west del nodo iniziale di riga fino a ancora north east nel nodo finale della riga, hai più libertà: se qualche elemento occupa uno spazio maggiore e devi aggiustarlo, poter disegnare a mano il bordo ti permette di fare una compensazione che fit non farebbe.

      Ciao
      Claudio

    • #91973
      Up
      0
      Down
      ::


      ok ci stiamo avvicinando al risultato desiderato 🙂 Tuttavia, ho ancora qualche domanda.

      – Come faccio a specificare che la prima colonna non deve avere i box come le altre? Per ora li disegno in bianco ma ci deve essere una soluzione migliore.
      – Come faccio a specificare che i box esterni (quelli rossi, per capirci) devono essere un po’ piú grandi di quelli interni?

      Allego un esempio compilabile 🙂
      Ancora grazie del supporto!

      Attachments:
      You must be logged in to view attached files.
    • #91974
      Up
      0
      Down
      ::


      Potresti utilizzare la chiave [tt]outer sep = dimen[/tt] che imposta la distanza tra il punto di ancora del nodo e il bordo del nodo che disegni (normalmente è impostato a 0). Devi aggiungerlo allo stile di tutti i nodi interessati (io per comodità lo passato a tutti, nel tuo caso non c’è differenza).
      Il tuo codice diventa
      `
      \documentclass[13pt]{scrartcl}
      \usepackage[landscape,top=3cm, bottom=3cm, left=2.5cm, right=2.5cm]{geometry}
      \usepackage{tikz}
      \usetikzlibrary{matrix}
      %\tikzset{%
      % highlight/.style={rectangle,fill=blue,draw=none,fill opacity=.1,inner sep=0pt}
      %}
      \title{my title}
      \subtitle{my subtitle}
      \date{}

      \renewcommand{\familydefault}{\sfdefault}
      \begin{document}
      \pagenumbering{gobble}
      \maketitle
      \centering
      \begin{tikzpicture} %[row 2 column 3/.style=red, fill=green]
      %\matrix

      (magic) [matrix of nodes]
      \matrix[matrix of nodes,row sep=0.8em,column sep=1em,style={nodes={rectangle,draw=black}},column 1/.style={nodes={rectangle,draw=none}},nodes={outer sep=.5ex,minimum width = 10em, minimum height = 2em}](m)
      {
      barcode & \LaTeX (col$^*$) & \LaTeX (col$^*$) & \LaTeX (col$^*$) & \LaTeX (col$^*$)\\[1.5em]
      code1 & \LaTeX & \LaTeX & \LaTeX & \LaTeX \\
      code2 & \LaTeX & \LaTeX & \LaTeX & \LaTeX \\
      code3 & \LaTeX & \LaTeX & \LaTeX & \LaTeX\\
      code4 & \LaTeX & \LaTeX & \LaTeX & \LaTeX\\
      code5 & \LaTeX & \LaTeX & \LaTeX & \LaTeX\\
      };
      %\draw(m-1-1.north west) — (m-1-5.north east) — (m-1-1.south east) — (m-1-5.south west);
      \foreach\x in{1,…,6}\draw (m-\x-1.north west) — (m-\x-5.north east) — (m-\x-5.south east) — (m-\x-1.south west) — (m-\x-1.north west);

      \end{tikzpicture}
      \flushright
      \begin{minipage}[!b]{10cm}
      \scriptsize
      *: some cool text \begin{ttfamily}even in monospace\end{ttfamily} 😀
      \end{minipage}
      \end{document}
      `
      Per semplificare ho fatto tutti i [tt]\draw[/tt] con un unico [tt]\foreach[/tt], ma la sostanza è la stessa :D.

      Per non fare disegnare un percorso la chiave da dare è [tt]draw=none[/tt]. Non cambia molto dal colorarlo di bianco, ma se tu avessi uno sfondo non bianco risalterebbe.

    • #91975
      Up
      0
      Down
      ::


      Alternative all’ottima soluzione di skevin: `
      \documentclass[13pt]{scrartcl}
      \usepackage[landscape,top=3cm, bottom=3cm, left=2.5cm, right=2.5cm]{geometry}
      \usepackage{tikz}
      \usetikzlibrary{calc,matrix}
      %\tikzset{%
      % highlight/.style={rectangle,fill=blue,draw=none,fill opacity=.1,inner sep=0pt}
      %}
      \title{my title}
      \subtitle{my subtitle}
      \date{}

      \renewcommand{\familydefault}{\sfdefault}
      \begin{document}
      \pagenumbering{gobble}
      \maketitle
      \centering
      \begin{tikzpicture} %[row 2 column 3/.style=red, fill=green]
      %\matrix

      (magic) [matrix of nodes]
      \matrix[matrix of nodes,
      row sep=0.8em,column sep=1em,
      style={nodes={rectangle,draw=black}},
      column 1/.style={nodes={rectangle,draw=none}},
      nodes={minimum width = 10em, minimum height = 2em}](m)
      {
      barcode & \LaTeX (col$^*$) & \LaTeX (col$^*$) & \LaTeX (col$^*$) & \LaTeX (col$^*$)\\[1.5em]
      code1 & \LaTeX & \LaTeX & \LaTeX & \LaTeX \\
      code2 & \LaTeX & \LaTeX & \LaTeX & \LaTeX \\
      code3 & \LaTeX & \LaTeX & \LaTeX & \LaTeX \\
      code4 & \LaTeX & \LaTeX & \LaTeX & \LaTeX \\
      code5 & \LaTeX & \LaTeX & \LaTeX & \LaTeX \\
      };

      % uso della libreria calc,
      % ho riordinato le coordinate per semplicità
      % (per avere stesso segno sugli shift)
      % partendo dal punto in basso a sinistra
      % della prima cella e
      % disegnado un rettangolo con destinatione
      % ultima cella in alto a destra;
      % è più semplice che scrivere tutto il percorso
      % per il colore, basta indicare il nome
      \draw[red]
      ($(m-1-1.south west)-(0.2,0.2)$) rectangle ($(m-1-5.north east)+(0.2,0.2)$);

      % in alternativa, puoi creare uno shift agendo sulle coordinate

      \foreach \row in {2,…,6}% con un ciclo è più semplice
      \draw[red]
      ([shift={(-0.2,0.1)}]m-\row-1.north west) rectangle ([shift={(0.2,-0.1)}]m-\row-5.south east);

      \end{tikzpicture}
      \flushright
      \begin{minipage}[!b]{10cm}
      \scriptsize
      *: some cool text \begin{ttfamily}even in monospace\end{ttfamily} 😀
      \end{minipage}
      \end{document}
      ` Il codice è commentato per chiarezza.

      Ciao
      Claudio

    • #91976
      Up
      0
      Down
      ::


      grazie ragazzi! il risultato è esattamente quello che volevo realizzare!! 😀

      solo un paio di domande sulla sintassi di calc:
      `\draw[red]
      ($(m-1-1.south west)-(0.2,0.2)$) rectangle ($(m-1-5.north east)+(0.2,0.2)$);
      `
      questa riga disegna il bordo intorno alla prima riga della matrice. (0.2,0.2) è l’offset da m-1.1-sout west?

      grazie anche per avermi mostrato un ciclo for, è la prima volta 🙂

    • #91977
      Up
      0
      Down
      ::


      Esatto ed è questa la potenza della libreria [sf]calc[/sf]: puoi calcolare direttamente le coordinate. Come una normale coordinata, il primo valore è l’offset sull’asse x, il secondo sull’asse y. Questo ti permette, al contrario del mio codice, di allungare maggiormente il rettangolo lungo uno dei due assi.

      [tt]\foreach[/tt] non è l’unico modo di fare un ciclo for in LaTeX, ma sicuramente per tikz è il più indicato ;D

    • #91978
      Liverpool
      Partecipante
        Up
        0
        Down
        ::

        skevin93″ post=91630Esatto ed è questa la potenza della libreria [sf]calc[/sf]: puoi calcolare direttamente le coordinate.

        Veramente non è necessaria la libreria [tt]calc[/tt] per eseguire calcoli sulle coordinate.

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

    Go to top