Tikz e linee curve con frecce mancanti

  • Creatore
    Topic
  • #29182
    Up
    0
    Down
    ::


    Salve,
    Ho un piccolo problema con auna tikz picture.
    Non riesco a far disegnare a tikz le punte delle frecce se le definisco curve mediante il sistema a punti di controllo, mentre negli altri casi tutto funziona.

    `
    \begin{tikzpicture}
    [inner sep=2pt,
    pnode/.style={circle,draw,fill=black}, auto,>=latex]

    \node …

    \node …

    \draw [->] (top-a) to node {$\gamma$} (top-c);
    \draw [->] (eq0-a) .. controls +(down:1cm) and +(right:3pt) ..
    node[sloped] {$\gamma$} (eq0-c);
    \end{tikzpicture}
    `

    Ho provato a ridefinirla con i comandi bend e funziona, ma il risultato è diverso
    `
    \draw [gamma] (eq0-a) to [bend right=-35] node {$\gamma$} (eq0-c);
    `

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

        Salve,
        Ho un piccolo problema con auna tikz picture.
        Non riesco a far disegnare a tikz le punte delle frecce se le definisco curve mediante il sistema a punti di controllo, mentre negli altri casi tutto funziona.

        `
        \begin{tikzpicture}
        [inner sep=2pt,
        pnode/.style={circle,draw,fill=black}, auto,>=latex]

        \node …

        \node …

        \draw [->] (top-a) to node {$\gamma$} (top-c);
        \draw [->] (eq0-a) .. controls +(down:1cm) and +(right:3pt) ..
        node[sloped] {$\gamma$} (eq0-c);
        \end{tikzpicture}
        `

        Ho provato a ridefinirla con i comandi bend e funziona, ma il risultato è diverso
        `
        \draw [gamma] (eq0-a) to [bend right=-35] node {$\gamma$} (eq0-c);
        `

        Dovresti dare un esempio minimo che riproduca il problema poiché il codice:`\begin{tikzpicture}
        [inner sep=2pt,
        pnode/.style={circle,draw,fill=black}, auto,>=latex]
        \path (0,0) node (eq0-a) {Hello my world!};
        \path (10,10) node (eq0-c) {Hello your world!};
        \draw [->] (eq0-a) .. controls +(down:1cm) and +(right:3pt) .. node[sloped] {$\gamma$} (eq0-c);
        \end{tikzpicture}`
        non mi da problemi (caricando pgf nel preambolo senza librerie particolari).

        Inoltre dovresti riportare l’eventuale messaggio d’errore od essere più preciso su quello che non riesci ad ottenere.

        Benvenuto nel forum.

      • #29184
        Up
        0
        Down
        ::


        Questa è la figura completa che sto cercando di produrre con pgf (con la libreria positioning).
        I comandi seguenti non danno nessun errore, produce il documento correttamente senza darmi nemmeno warning.
        Ma le frecce che vanno da un nodo all’altro nel caso delle linee definite con punti di controllo non ci sono (come anche nel tuo esempio), negli altri casi invece vengono disegnate correttamente.
        Nemmeno nel manuale trovo riferimento a comandi particolari che dovrei usare per ottenere queste frecce.

        `
        \documentclass[11pt,italian]{article}
        \usepackage{tikz}
        \usetikzlibrary{positioning}

        \begin{document}
        \begin{tikzpicture}
        [inner sep=2pt,
        pnode/.style={circle,draw,fill=black}, auto,>=latex]

        \node (top-c) [pnode,label=above:$\top$] {};
        \node (geq0-c) [pnode,label=left:$\geq 0$,below=of top-c] {};
        \node (eq0-c) [below=of geq0-c,pnode,label=left:$> 0$] {};
        \node (bottom-c) [below=of eq0-c,pnode,label=below:$\bot$] {};
        \draw [-] (top-c) — (bottom-c);

        \node at (4,0) (top-a) [pnode,label=above:$\top$,label distance=2pt] {};
        \node (geq0-a) [pnode,label=left:$\geq 0$,below=of top-a] {};
        \node (eq0-a) [pnode,label=left:$> 0$,below left=of geq0-a] {};
        \node (safe-a) [pnode,label=right:safe,below=of geq0-a] {};
        \node (edge-a) [pnode,label=right:edge,below right=of geq0-a] {};
        \node (bottom-a) [pnode,label=below:$\bot$,label distance=2pt,below=of safe-a] {};
        \draw [-] (top-a) — (geq0-a);
        \draw [-] (geq0-a) — (safe-a);
        \draw [-] (geq0-a) — (edge-a);
        \draw [-] (geq0-a) — (eq0-a);
        \draw [-] (safe-a) — (bottom-a);
        \draw [-] (edge-a) — (bottom-a);
        \draw [-] (eq0-a) — (bottom-a);

        \draw [->] (top-a) to node {$\gamma$} (top-c);
        \draw [->] (eq0-a) .. controls +(down:1cm) and +(right:3pt) ..
        node[sloped] {$\gamma$} (eq0-c);
        \draw [->] (geq0-a) .. controls +(up:1cm) and +(right:3pt) ..
        node[sloped] {$\gamma$} (geq0-c);
        \draw [->] (bottom-a) to node {$\gamma$} (bottom-c);
        \draw [->] (safe-a) to node {$\gamma$} (geq0-c);
        \draw [->] (edge-a) .. controls +(up:0.9cm) and +(right:3pt) ..
        node[sloped] {$\gamma$} (geq0-c);
        \end{tikzpicture}
        \end{document}
        `

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


          Se togli l’opzione fill=black per i nodi, vedrai che le frecce vengono disegnate con inclinazione pari a zero posizionate con il proprio centro nel nodo.

          Ecco perchè il mio esempio funziona!
          Così com’è sembra un bug di pgf.

          A questo punto scriverei un esempio minuscolo con due nodi solamente e la linea che li connette (con freccia) controllata dai controls, così da poter stabilire se si tratta di qualche opzione non ben gestita da pgf o non ben scritta nel codice.
          Ciao.

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


            Ho modificato il tuo codice (cancellando alcune righe che non influiscono sul problema), aggiungendo una specifica .east al nome del nodo.

            Così facendo TikZ trova le informazioni per piazzare la freccia altrimenti la mette sul nodo e con inclinazione 0.

            `\documentclass[11pt]{article}
            \usepackage{tikz}
            \usetikzlibrary{positioning}

            \begin{document}
            \begin{tikzpicture}
            [inner sep=2pt,
            pnode/.style={circle,draw,fill=black}, auto,>=latex]

            \node (top-c) [pnode,label=above:$\top$] {};
            \node (geq0-c) [pnode,label=left:$\geq 0$,below=of top-c] {};
            \node (eq0-c) [below=of geq0-c,pnode,label=left:$> 0$] {};
            \node (bottom-c) [below=of eq0-c,pnode,label=below:$\bot$] {};
            \draw [-] (top-c) — (bottom-c);

            \node at (4,0) (top-a) [pnode,label=above:$\top$,label distance=2pt] {};
            \node (geq0-a) [pnode,label=left:$\geq 0$,below=of top-a] {};
            \node (eq0-a) [pnode,label=left:$> 0$,below left=of geq0-a] {};
            \node (safe-a) [pnode,label=right:safe,below=of geq0-a] {};
            \node (edge-a) [pnode,label=right:edge,below right=of geq0-a] {};
            \node (bottom-a) [pnode,label=below:$\bot$,label distance=2pt,below=of safe-a] {};
            \draw [-] (top-a) — (geq0-a);
            \draw [-] (geq0-a) — (safe-a);
            \draw [-] (geq0-a) — (edge-a);
            \draw [-] (geq0-a) — (eq0-a);
            \draw [-] (safe-a) — (bottom-a);
            \draw [-] (edge-a) — (bottom-a);
            \draw [-] (eq0-a) — (bottom-a);

            \draw [->] (eq0-a) .. controls +(down:1cm) and +(right:3pt) ..
            node[sloped] {east too} (eq0-c.east);

            \draw [->] (geq0-a) .. controls +(up:1cm) and +(right:3pt) ..
            node[sloped] {east} (geq0-c.east);

            \end{tikzpicture}
            \end{document} `

            a pagina 311 del manuale ci sono le specifiche per ancorare meglio la freccia. Prova per esempio .north east.

            Rimane il problema della rotazione della freccia che compare sempre ad asse orizzontale, ma leggendo bene il manuale potrebbe esserci la soluzione anche a questo.

            Ciao.

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

        Go to top