diagramma con TikZ

  • Creatore
    Topic
  • #118125
    Up
    0
    Down
    ::


    Buongiorno,
    sono alle prime armi con TikZ e avrei bisogno di un aiuto per un diagramma. Quello che vorrei è esattamente il seguente, senza però il secondo, il terzo ed il quarto cerchietto:
    `\begin{center}
    \begin{tikzpicture}[scale=0.50]
    \foreach \n/\x/\l/\p in{
    1/{(0,0)}/{$i$}/above,
    2/{(2,0)}/{$d_{ij}$}/above,
    3/{(4,0)}/{$g_{ij}$}/above,
    4/{(6,0)}/{$d_{ji}$}/above,
    5/{(8,0)}/{$j$}/above
    }
    {
    \node[inner sep=2pt, draw, circle, label={\p:\l}] (\n) at \x {};
    }
    \draw (1) node[left, below=0.1cm] {$s_i$} — (5) node[right, below=0.1cm] {$s_j$};
    \end{tikzpicture}
    \end{center}`Immagino che sia una sciocchezza, ma ho fatto vari tentativi senza riuscire.

    Grazie mille

    William

Visualizzazione 10 filoni di risposte
  • Autore
    Risposte
    • #118126
      GKT
      Partecipante
        Up
        0
        Down
        ::

        william” post=118567Buongiorno,
        sono alle prime armi con TikZ e avrei bisogno di un aiuto per un diagramma. Quello che vorrei è esattamente il seguente, senza però il secondo, il terzo ed il quarto cerchietto:
        `\begin{center}
        \begin{tikzpicture}[scale=0.50]
        \foreach \n/\x/\l/\p in{
        1/{(0,0)}/{$i$}/above,
        2/{(2,0)}/{$d_{ij}$}/above,
        3/{(4,0)}/{$g_{ij}$}/above,
        4/{(6,0)}/{$d_{ji}$}/above,
        5/{(8,0)}/{$j$}/above
        }
        {
        \node[inner sep=2pt, draw, circle, label={\p:\l}] (\n) at \x {};
        }
        \draw (1) node[left, below=0.1cm] {$s_i$} — (5) node[right, below=0.1cm] {$s_j$};
        \end{tikzpicture}
        \end{center}`Immagino che sia una sciocchezza, ma ho fatto vari tentativi senza riuscire.

        Grazie mille

        William

        Ciao. Qualcosa come questo potrebbe andare?`\documentclass{minimal}

        \usepackage[T1]{fontenc}
        \usepackage[utf8]{inputenc}
        \usepackage{mwe}
        \usepackage{tikz}

        \begin{document}
        \begin{tikzpicture}[scale=0.50]
        \foreach \n/\x/\l/\p in{
        1/{(0,0)}/{$i$}/above,
        2/{(8,0)}/{$j$}/above
        }
        {
        \node[inner sep=2pt, draw, circle, label={\p:\l}] (\n) at \x {};
        }
        \draw (1) node[left, below=0.1cm] {$s_i$} — (2) node[right, below=0.1cm] {$s_j$};
        \end{tikzpicture}
        \end{document}`
        Lorenzo

      • #118127
        Up
        0
        Down
        ::


        Grazie mille, Lorenzo!

        Così però sono spariti anche d_ij, g_ij e d_ji. Io li vorrei lì dove sono, semplicemente senza i cerchietti sotto. Un’altra cosa, poi, se posso: come posso costruire un diagramma con due nodi (cerchietti) e un doppio o triplo “legame” tra i due?

        Grazie ancora
        William

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

          william” post=118579Grazie mille, Lorenzo!

          Così però sono spariti anche d_ij, g_ij e d_ji. Io li vorrei lì dove sono, semplicemente senza i cerchietti sotto. Un’altra cosa, poi, se posso: come posso costruire un diagramma con due nodi (cerchietti) e un doppio o triplo “legame” tra i due?

          Grazie ancora
          William

          Ciao William,
          se non vuoi i cerchietti si può separare il disegno degli estremi con quello delle etichette intermedie.
          Con istruzioni separate disegni i segmenti e gli estremi etichettati:
          `\node[inner sep=2pt, draw, circle, label=above:{$i$},label=below:$s_i$] (i) at (0,0) {};
          \node[inner sep=2pt, draw, circle, label=above:{$j$},label=below:$s_j$] (j) at (4,0) {};
          \draw (i) — (j);`
          Come vedi si possono assegnare più etichette alla volta al nodo.
          Nel ciclo \foreach opportunamente modificato puoi continuare a disegnare le etichette:
          `\foreach \x/\lbl in {1/$d_{ij}$, 2/$g_{ij}$, 3/$d_{ij}$}{
          \node[inner sep=2pt,label=above:\lbl] at (\x,0) {};
          }`
          Se vuoi più linee le puoi disegnare con l’opzione yshift:
          `\draw[yshift=0.5mm] (0,0) — (4,0);
          \draw[yshift=-0.5mm] (0,0) — (4,0);`
          a patto di aggiungere l’opzione fill=white al disegno dei cerchietti e di disegnare le linee parallele prima di quella centrale.

          Il codice non è ancora abbastanza elegante ma funziona bene.
          Per migliorarlo sarebbe utile creare uno stile apposito per i nodi con cerchietto. Poi si dovrebbe risolvere il problema del piccolo disallineamento verticale tra le etichette centrali e di estremità dovuto alla presenza in quelle centrali della j che ha un discendente e perciò l’etichetta appare un po’ più in alto.
          Le linee parallele possono essere disegnate anche con diversi stili su un unico segmento.
          E ancora, fatto di convenzione matematica, occorre accertarsi che i simboli siano corretti perché io di solito uso il font “dritto” per i pedici:
          `$d_\mathrm{ij}$`
          Naturalmente il codice del tuo disegno è abbastanza semplice se si legge la doc del pacchetto TiKZ.
          Alla prossima.
          Ciao.
          R.

        • #118129
          GKT
          Partecipante
            Up
            0
            Down
            ::

            william” post=118579Grazie mille, Lorenzo!

            Così però sono spariti anche d_ij, g_ij e d_ji. Io li vorrei lì dove sono, semplicemente senza i cerchietti sotto. Un’altra cosa, poi, se posso: come posso costruire un diagramma con due nodi (cerchietti) e un doppio o triplo “legame” tra i due?

            Grazie ancora
            William

            Soltanto per mettere insieme in un esempio compilabile i preziosi consigli di @robitex,`\documentclass{minimal}

            \usepackage[T1]{fontenc}
            \usepackage[utf8]{inputenc}
            \usepackage{mwe}
            \usepackage{tikz}

            \begin{document}
            \begin{tikzpicture}

            % etichetta e cerchio a sinistra
            \node[inner sep=2pt, draw, circle, label=above:{$i$},label=below:$s_\mathrm{i}$] (i) at (0,0) {};

            % etichetta e cerchio a destra
            \node[inner sep=2pt, draw, circle, label=above:{$j$},label=below:$s_\mathrm{j}$] (j) at (4,0) {};

            % etichette intermedie
            \foreach \x/\lbl in {1/$d_\mathrm{ij}$, 2/$g_\mathrm{ij}$, 3/$d_\mathrm{ij}$}{
            \node[inner sep=2pt,label=above:\lbl] at (\x,0) {};
            }

            % linea cerchio-cerchio
            \draw (0,0) — (4,0);
            \end{tikzpicture}
            \end{document}`.
            Lorenzo

          • #118130
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::



              @robitex
              , i pedici vanno diritti se e solo se indicano apposizioni alle variabili, non se sono degli indici (pedici o apici) che rappresentano grandezze variabili; in sostanza `$d_{ij}$ % perché i e j sonodue indici matematici che variano in un dato intervallo
              $x_{\mathrm{max}}$ % perché max, abbreviazione di massimo, è un'apposizione della variable x
              `

              Inoltre il disallineamento dei nodi con della matematica dentro si risulver \inserendo un \mathstrut prima o dopo l’espressione che caratterizza il nodo, ma sempre in ambiente matematico; il pilastrino \mathstrut si estende in alto e in basso tanto quanto una parentesi, ma ha larghezza nulla ed è invisibile, pur occupando il suo spazio di altezza, profondità e larghezza (nulla); in matematica \mathsrtut cambia dimensioni a seocnda che l’ambientte matemaco in cui si trova sia composto in \textstyle, \displaystyle, \scriptstyle o \scriptscriptstyle – i quattro stili di composizione della matematica.

            • #118131
              Up
              0
              Down
              ::


              Grazie mille!

              William

            • #118132
              GKT
              Partecipante
                Up
                0
                Down
                ::

                OldClaudio” post=118588 @robitex, i pedici vanno diritti se e solo se indicano apposizioni alle variabili, non se sono degli indici (pedici o apici) che rappresentano grandezze variabili; in sostanza `$d_{ij}$ % perché i e j sonodue indici matematici che variano in un dato intervallo
                $x_{\mathrm{max}}$ % perché max, abbreviazione di massimo, è un'apposizione della variable x
                `

                Inoltre il disallineamento dei nodi con della matematica dentro si risulver \inserendo un \mathstrut prima o dopo l’espressione che caratterizza il nodo, ma sempre in ambiente matematico; il pilastrino \mathstrut si estende in alto e in basso tanto quanto una parentesi, ma ha larghezza nulla ed è invisibile, pur occupando il suo spazio di altezza, profondità e larghezza (nulla); in matematica \mathsrtut cambia dimensioni a seocnda che l’ambientte matemaco in cui si trova sia composto in \textstyle, \displaystyle, \scriptstyle o \scriptscriptstyle – i quattro stili di composizione della matematica.

                Riporto il codice completo per comodità`\documentclass{minimal}

                \usepackage[T1]{fontenc}
                \usepackage[utf8]{inputenc}
                \usepackage{mwe}
                \usepackage{tikz}

                \begin{document}
                \begin{tikzpicture}

                % etichetta e cerchio a sinistra
                \node[inner sep=2pt, draw, circle, label=above:{$\mathstrut i$},label=below:$\mathstrut s_{i}$] (i) at (0,0) {};

                % etichetta e cerchio a destra
                \node[inner sep=2pt, draw, circle, label=above:{$\mathstrut j$},label=below:$\mathstrut s_{j}$] (j) at (4,0) {};

                % etichette intermedie
                \foreach \x/\lbl in {1/$\mathstrut d_{ij}$, 2/$\mathstrut g_{ij}$, 3/$\mathstrut d_{ij}$}{
                \node[inner sep=2pt, label=above:\lbl] at (\x,0) {};
                }

                % linea cerchio-cerchio
                \draw (0,0) — (4,0);
                \end{tikzpicture}
                \end{document}`
                Lorenzo

              • #118133
                Up
                0
                Down
                ::


                Grazie ancora!

                L’unica cosa che non ho ancora capito è come ottenere un doppio o triplo legame tra due cerchietti:

                “Se vuoi più linee le puoi disegnare con l’opzione yshift:
                \draw[yshift=0.5mm] (0,0) — (4,0);
                \draw[yshift=-0.5mm] (0,0) — (4,0);

                a patto di aggiungere l’opzione fill=white al disegno dei cerchietti e di disegnare le linee parallele prima di quella centrale.”

                Ho provato con

                \begin{tikzpicture}[scale=0.50]
                \node[inner sep=1.5pt, draw, circle, fill=white] (1) at (0,0) {};
                \node[inner sep=1.5pt, draw, circle, fill=white] (2) at (2,0) {};
                \draw[yshift=0.5mm] (1) — (2);
                \draw[yshift=-0.5mm] (1) — (2);
                \end{tikzpicture}

                ma non ottengo ciò che voglio, e non capisco “disegnare le linee parallele prima di quella centrale”.

                Grazie mille
                William

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

                  william” post=118596Grazie ancora!

                  L’unica cosa che non ho ancora capito è come ottenere un doppio o triplo legame tra due cerchietti:

                  “Se vuoi più linee le puoi disegnare con l’opzione yshift:
                  \draw[yshift=0.5mm] (0,0) — (4,0);
                  \draw[yshift=-0.5mm] (0,0) — (4,0);

                  a patto di aggiungere l’opzione fill=white al disegno dei cerchietti e di disegnare le linee parallele prima di quella centrale.”

                  Ho provato con

                  \begin{tikzpicture}[scale=0.50]
                  \node[inner sep=1.5pt, draw, circle, fill=white] (1) at (0,0) {};
                  \node[inner sep=1.5pt, draw, circle, fill=white] (2) at (2,0) {};
                  \draw[yshift=0.5mm] (1) — (2);
                  \draw[yshift=-0.5mm] (1) — (2);
                  \end{tikzpicture}

                  ma non ottengo ciò che voglio, e non capisco “disegnare le linee parallele prima di quella centrale”.

                  Grazie mille
                  William

                  Ciao William,
                  puoi usare il tag code per racchiudere il codice grazie.
                  Quanto al problema, è che se usi i nomi dei nodi anziché indicare le loro coordinate l’opzione yshift non funziona.
                  Usa:
                  `\draw[yshift=0.5mm] (0, 0) — (2,0);
                  \draw[yshift=-0.5mm] (0,0) — (2,0);`
                  Ciao.
                  R.

                • #118135
                  Up
                  0
                  Down
                  ::


                  Grazie mille,

                  l’ultima cosa: con il seguente codice (mi spiace, ma non so cosa sia il tag code per racchiudere il codice), però, ottengo un triplo legame che parte dall’interno del cerchietto. Io invece vorrei il cerchietto tutto bianco.

                  \begin{tikzpicture}[scale=0.50]
                  \node[inner sep=1.5pt, draw, circle, fill=white] (1) at (0,0) {};
                  \node[inner sep=1.5pt, draw, circle, fill=white] (2) at (2,0) {};
                  \draw[yshift=0.7mm] (0, 0) — (2,0);
                  \draw[yshift=0mm] (0,0) — (2,0);
                  \draw[yshift=-0.7mm] (0, 0) — (2,0);
                  \end{tikzpicture}

                  Grazie ancora
                  William

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

                    william” post=118601Grazie mille,

                    l’ultima cosa: con il seguente codice (mi spiace, ma non so cosa sia il tag code per racchiudere il codice), però, ottengo un triplo legame che parte dall’interno del cerchietto. Io invece vorrei il cerchietto tutto bianco.

                    `
                    \begin{tikzpicture}[scale=0.50]
                    \node[inner sep=1.5pt, draw, circle, fill=white] (1) at (0,0) {};
                    \node[inner sep=1.5pt, draw, circle, fill=white] (2) at (2,0) {};
                    \draw[yshift=0.7mm] (0, 0) — (2,0);
                    \draw[yshift=0mm] (0,0) — (2,0);
                    \draw[yshift=-0.7mm] (0, 0) — (2,0);
                    \end{tikzpicture}
                    `

                    Grazie ancora
                    William

                    Il tag code lo si inserisce con il pulsante in alto con l’icona di una pagina con il simboli di minore e maggiore.
                    … per questo ti avevo suggerito di disegnare PRIMA le linee in modo che disegnando DOPO il cerchietto bianco coprisse gli estremi.
                    R.

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

                Go to top