Tikz e schemi di impianto (frecce e pic)

  • Creatore
    Topic
  • #114222
    Up
    0
    Down
    ::


    Salve
    Premetto che sono abbastanza inesperto, sono ancora in quella fase che rubo i codici in giro e cerco di modificarli sperando di capire come funzionano 😛
    Io sto cercando di creare una libreria per costruire velocemente (almeno questa è la speranza) piccoli schemi per impianti chimici, a tale scopo sto creando una libreria di pic con le varie apparecchiature, le mie domande sono 2.
    1 Vorrei disegnare la freccia alla fine di ogni curva attualmente per ottenere tale scopo devo fare
    \draw [->] (0,0) — (2,0);
    \draw [->] (2,0) — (2,2);
    quando potrei fare semplicemente
    \draw [->] (0,0) -| (2,2);
    ma non riesco a fare in modo che metta automaticamente la freccia
    2 Nell’esempio che segue per assegnare l’ingresso del vapore ecc prima ho assegnato al nodo della pic il nome A1 (ho usato [local bounding box=A1] perché non ho trovato altri comandi alternativi).
    Successivamente ho assegnato il punto esatto della fine della freccia con ($ (A1)+(0,1.3) $).
    é possibile dire a latex durante la stesura della pic, se io ti assegno alla pic il nome A1, te automaticamente crea dei punti A11 A12 ecc corrispondenti ai vari ingressi ed uscite dello scambiatore?
    In questo modo si può evitare di ritrovare ogni volta le coordinate esatte

    `\documentclass[multi=false,tikz,border=2mm]{standalone}
    \usepackage[utf8]{inputenc}
    \usepackage{textcomp}
    \usepackage{booktabs}
    \usepackage{tikz}
    \usetikzlibrary{shapes.geometric, arrows}
    \usetikzlibrary{calc}
    \usetikzlibrary{intersections}
    \usetikzlibrary{decorations.markings}
    \usepackage{pgf}
    \usepackage { pgfplots }

    %libreria per impianti chimici

    \tikzset{
    Condenser/.pic={
    \draw [thick, fill=white] (-0.5,-1) — (-0.5,1) to [out=90, in=90] (0.5,1) –(0.5,-1)to[out=-90, in=-90] cycle;
    \draw [thick] (-0.6,0.9) — (0.6,0.9);
    \draw [thick] (-0.6,-0.9) — (0.6,-0.9);
    \foreach \y in {-0.3,-0.1,…,0.4}{\draw (\y,0.9) — (\y,-0.9);}}
    }
    \tikzset{myptr/.style={decoration={markings,mark=at position 1 with %
    {\arrow[scale=2,>=stealth]{>}}},postaction={decorate}}}
    \begin{document}

    \begin{tikzpicture}
    \pic [local bounding box=A1] at (0,0) {Condenser} node [xshift=0.9 cm,yshift=1.2cm] {\textbf{A1}};
    \draw [myptr](-5,3)node[above]{vapore} -| ($ (A1)+(0,1.3) $);
    \draw [blue,myptr](-5,-3)node[below]{Fluido di raffreddamento}|-( $(A1)+(-0.5,-0.7)$ );
    \draw [blue,myptr] ($(A1)+(0.5,0.7)$)-|(3,2) node

    {Fluido di raffreddamento in uscita};
    \draw [myptr] ($ (A1)+(0,-1.3) $)|-(5,-3)node[above]{Condensato};
    \end{tikzpicture}

    \end{document} `

    So che sono domande abbastanza particolari 😳 ma è da un paio di mesi che non riesco a venirne fuori

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

        Thanil” post=114621Salve
        Premetto che sono abbastanza inesperto, sono ancora in quella fase che rubo i codici in giro e cerco di modificarli sperando di capire come funzionano 😛
        Io sto cercando di creare una libreria per costruire velocemente (almeno questa è la speranza) piccoli schemi per impianti chimici, a tale scopo sto creando una libreria di pic con le varie apparecchiature, le mie domande sono 2.
        1 Vorrei disegnare la freccia alla fine di ogni curva attualmente per ottenere tale scopo devo fare
        \draw [->] (0,0) — (2,0);
        \draw [->] (2,0) — (2,2);
        quando potrei fare semplicemente
        \draw [->] (0,0) -| (2,2);
        ma non riesco a fare in modo che metta automaticamente la freccia
        2 Nell’esempio che segue per assegnare l’ingresso del vapore ecc prima ho assegnato al nodo della pic il nome A1 (ho usato [local bounding box=A1] perché non ho trovato altri comandi alternativi).
        Successivamente ho assegnato il punto esatto della fine della freccia con ($ (A1)+(0,1.3) $).
        é possibile dire a latex durante la stesura della pic, se io ti assegno alla pic il nome A1, te automaticamente crea dei punti A11 A12 ecc corrispondenti ai vari ingressi ed uscite dello scambiatore?
        In questo modo si può evitare di ritrovare ogni volta le coordinate esatte

        `\documentclass[multi=false,tikz,border=2mm]{standalone}
        \usepackage[utf8]{inputenc}
        \usepackage{textcomp}
        \usepackage{booktabs}
        \usepackage{tikz}
        \usetikzlibrary{shapes.geometric, arrows}
        \usetikzlibrary{calc}
        \usetikzlibrary{intersections}
        \usetikzlibrary{decorations.markings}
        \usepackage{pgf}
        \usepackage { pgfplots }

        %libreria per impianti chimici

        \tikzset{
        Condenser/.pic={
        \draw [thick, fill=white] (-0.5,-1) — (-0.5,1) to [out=90, in=90] (0.5,1) –(0.5,-1)to[out=-90, in=-90] cycle;
        \draw [thick] (-0.6,0.9) — (0.6,0.9);
        \draw [thick] (-0.6,-0.9) — (0.6,-0.9);
        \foreach \y in {-0.3,-0.1,…,0.4}{\draw (\y,0.9) — (\y,-0.9);}}
        }
        \tikzset{myptr/.style={decoration={markings,mark=at position 1 with %
        {\arrow[scale=2,>=stealth]{>}}},postaction={decorate}}}
        \begin{document}

        \begin{tikzpicture}
        \pic [local bounding box=A1] at (0,0) {Condenser} node [xshift=0.9 cm,yshift=1.2cm] {\textbf{A1}};
        \draw [myptr](-5,3)node[above]{vapore} -| ($ (A1)+(0,1.3) $);
        \draw [blue,myptr](-5,-3)node[below]{Fluido di raffreddamento}|-( $(A1)+(-0.5,-0.7)$ );
        \draw [blue,myptr] ($(A1)+(0.5,0.7)$)-|(3,2) node

        {Fluido di raffreddamento in uscita};
        \draw [myptr] ($ (A1)+(0,-1.3) $)|-(5,-3)node[above]{Condensato};
        \end{tikzpicture}

        \end{document} `

        So che sono domande abbastanza particolari 😳 ma è da un paio di mesi che non riesco a venirne fuori

        Ciao.
        Prima una nota: nel sorgente stai caricando TikZ più e più volte. Basta inserire l’opzione tikz e standalone lo caricherà.
        Quando poi tu dici \usepackage{tikz} e poi \usepackage{pgf} e poi \usepackage{pgfplots} tenti di ricaricarlo ogni volta.
        LaTeX non lo fa perché sa che il pacchetto è già caricato, ma quel che non è corretto può poi darti problemi in altre situazioni.

        Per il disegno, trovo interessante l’idea di una libreria di componenti per schematizzare poi diversi impianti.
        Capisco quidni che ti sia rivolto a pic.
        A logica un’etichetta tipo “vapore” su un condotto deve appartenere alla pic.
        Userei anche la possibilità di inserire testo su una linea per crearle e non ulteriori nodi.

        Tuttavia, la pic non credo sia adatta allo scopo. Dovresti crearti al suo posto un nodo personalizzato. In quel caso avresti i nodi di aggancio per proseguire i condotti con “anchor”.
        Non è facile creare un tipo nodo da zero. Leggi il manuale alla sezione Symbol Shapes per avere un’idea delle potenzialità.
        Per esempio guarda l’oggetto “Cylinder”.

        Una soluzione alternativa è usare Lua in LuaLaTeX con un approccio molto diverso.
        Si crea un oggetto Lua che puoi personalizzare molto facillmente e che poi “stampi” codice TikZ, o grafico.
        Sono due soluzioni molto diverse:
        * creare nuovi tipi nodi (rimani al codice TeX, vedi alla sezione 101.2 Creatring Nodes del manuale)
        * creare oggetti Lua (basato sul linguaggio Lua, vedi un esempio articolo ArsTeXnica 2012)

        Per le frecce credo che farle apparire in automatico non sia previsto anche se è probabilmente possibile.
        Che ti costa mettere un ->

        R.

      • #114224
        Up
        0
        Down
        ::


        Grazie della risposta 🙂
        i pacchetti \usepackage{pgf} \usepackage { pgfplots } sono un refuso 😛 in realtà tikz lo sto usando in un documento nella classe book (nella quale scrivo gli appunti dell’università) dove ho anche dei grafici con \begin{axis} e mi da problemi se non li carico a parte (non so come mai) solo che mi sono dimenticato di toglierli

        Per quanto riguarda le frecce era per evitare di fare decine di righe di codice invece di usare un solo \draw ma ho sono riletto le norme UNICHIM e in teoria posso mettere una freccia ogni 2 cambi di direzione quindi va bene comunque.
        Comunque cosa intendi con basta aggiungere un -> ? in teoria comunque devo riscrivere \draw [->] (vecchio nodo di arrivo) — (nuovo nodo di arrivo);

        Ora approfondisco le 2 soluzioni che hai proposto, credo che rimarrò sul codice Tex per non fare ulteriore confusione.
        Credo di aver capito più o meno cosa cercare, mi verrà fuori un libro solo come preambolo, mi sa che dovrò imparare come fare un pacchetto da zero, così risparmio spazio ma prima imparo ad usare latex 🙂

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

          Thanil” post=114691Grazie della risposta 🙂
          i pacchetti \usepackage{pgf} \usepackage { pgfplots } sono un refuso 😛 in realtà tikz lo sto usando in un documento nella classe book (nella quale scrivo gli appunti dell’università) dove ho anche dei grafici con \begin{axis} e mi da problemi se non li carico a parte (non so come mai) solo che mi sono dimenticato di toglierli

          Per quanto riguarda le frecce era per evitare di fare decine di righe di codice invece di usare un solo \draw ma ho sono riletto le norme UNICHIM e in teoria posso mettere una freccia ogni 2 cambi di direzione quindi va bene comunque.
          Comunque cosa intendi con basta aggiungere un -> ? in teoria comunque devo riscrivere \draw [->] (vecchio nodo di arrivo) — (nuovo nodo di arrivo);

          Ora approfondisco le 2 soluzioni che hai proposto, credo che rimarrò sul codice Tex per non fare ulteriore confusione.
          Credo di aver capito più o meno cosa cercare, mi verrà fuori un libro solo come preambolo, mi sa che dovrò imparare come fare un pacchetto da zero, così risparmio spazio ma prima imparo ad usare latex 🙂

          Ciao.
          Se fai un grafico con pgfplots nel documento e non carichi il pacchetto, mi sembra che sia ovvio che tu riceva un errore 😉
          Invece, per la questione delle frecce, sinceramente non capisco cosa intendi.
          La questione è che vuoi delle frecce ogni tanto su un percorso che non è un singolo tratto ma più linee?

          Considera questo esempio dove vuoi inserire una freccia nel mezzo dell’ultimo segmento:
          `\documentclass[tikz,margin=5pt]{standalone}

          \begin{document}
          \begin{tikzpicture}

          \draw[->] (0, 0) — (1, 1) — (2, 1) — (2.5, 1.5);
          \draw (2.5, 1.5) — ++(0.5,0.5);

          \end{tikzpicture}
          \end{document}`
          Puoi vedere come si tratti un un path a tre segmenti realizzato con due comandi \draw.

          R.

        • #114226
          Up
          0
          Down
          ::


          Effettivamente mi sono spiegato un po’ male 😛 per le frecce io posso muovermi solo orizzontalmente e verticalmente per cui mi tornava utile il comando -| inoltre ogni 2 cambi di direzione deve esserci una freccia (per facilitare la lettura di grafici molto grandi) per cui usando i punti del tuo esempio io dovrei avere una cosa del genere
          `\documentclass[tikz,margin=5pt]{standalone}

          \begin{document}
          \begin{tikzpicture}

          \draw[->] (0, 0) -| (1,1);
          \draw[->] (1,1) -|(2,1.5);
          \draw[->] (2,1.5) — (2.5,1.5);

          \end{tikzpicture}
          \end{document}`
          quando hai detto “Che ti costa mettere un -> ” ho pensato ci fosse un modo per dire

          \draw[->] (0, 0) -|(1,1)[ qualche codice che aggiunge in questo punto la freccia ] -| (2,.5) [ qualche codice che aggiunge in questo punto la freccia ]– (2.5,1.5);

          in questo modo potevo usare un singolo comando per un tratto di linea di processo dall’inizio alla fine con una freccia ogni 2 cambi di direzione

          all’inizio pensavo di dover mettere la freccia ad ogni cambio di direzione, ma ho scoperto che basta metterne una freccia ogni 2

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

            Thanil” post=114702Effettivamente mi sono spiegato un po’ male 😛 per le frecce io posso muovermi solo orizzontalmente e verticalmente per cui mi tornava utile il comando -| inoltre ogni 2 cambi di direzione deve esserci una freccia (per facilitare la lettura di grafici molto grandi) per cui usando i punti del tuo esempio io dovrei avere una cosa del genere
            `\documentclass[tikz,margin=5pt]{standalone}

            \begin{document}
            \begin{tikzpicture}

            \draw[->] (0, 0) -| (1,1);
            \draw[->] (1,1) -|(2,1.5);
            \draw[->] (2,1.5) — (2.5,1.5);

            \end{tikzpicture}
            \end{document}`
            quando hai detto “Che ti costa mettere un -> ” ho pensato ci fosse un modo per dire

            \draw[->] (0, 0) -|(1,1)[ qualche codice che aggiunge in questo punto la freccia ] -| (2,.5) [ qualche codice che aggiunge in questo punto la freccia ]– (2.5,1.5);

            in questo modo potevo usare un singolo comando per un tratto di linea di processo dall’inizio alla fine con una freccia ogni 2 cambi di direzione

            all’inizio pensavo di dover mettere la freccia ad ogni cambio di direzione, ma ho scoperto che basta metterne una freccia ogni 2

            Ciao.
            L’inserimento automatico di una freccia lungo il percorso si può realizzare programmando uno stile.
            Purtroppo non è affatto facile farlo, proprio perché TikZ non prevede (a mio avviso) che le freccie possano non essere agli estremi del percorso.
            Occorre scomodare la libreria decoration.
            R.

          • #114228
            Up
            0
            Down
            ::


            ho trovato il codice che mi serviva (ovviamente rubato e modificato per i miei scopi) lo posto qui in caso servisse a qualcuno.
            `
            \documentclass[tikz,border=5]{standalone}
            \usetikzlibrary{decorations}

            \pgfdeclaredecoration{multiple arrows}{draw}{
            \state{draw}[width=\pgfdecoratedinputsegmentlength]{
            \draw [multiple arrows path/.try] (0,0) — (\pgfdecoratedinputsegmentlength,0);
            }
            }
            \usetikzlibrary{decorations.pathreplacing,decorations.markings}
            \tikzset{multiple arrows/.style={multiple arrows path/.style={#1},
            decoration=multiple arrows, decorate}}

            \usepackage{chemfig}
            \begin{document}
            \begin{tikzpicture}
            \node[label=below:$A$] (A) at (0,0) {};
            \node[label=above:$B$] (B) at (2,0.25){};
            \draw [fill=black] (A) circle (1pt);
            \draw [fill=black] (B) circle (1pt);
            \draw [ multiple arrows={-latex, thick}] (0,0) -| ++(1.14,-0.6)-| ++(1.5,-2.5) —
            node[below]{\setchemfig{atom style={scale=0.5}}\chemfig{CH_3-[,0.4]C([:45,0.8]=O)-[:-45,0.8]OH}}
            ++(-3,0) –++(0,1)-| (2,0.25);
            \draw [fill=black] (A) circle (1pt);
            \draw [fill=black] (B) circle (1pt);
            \end{tikzpicture}
            \end{document}
            `
            è più semplice cercare le soluzioni sapendo che keyword cercare 😛

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

        Go to top