TikZ oppure MetaPost?

  • Creatore
    Topic
  • #88040
    Up
    0
    Down
    ::


    Ciao a tutti,

    Per fare i disegni io utilizzo sempre TikZ. Tuttavia, un collega mi ha mostrato un suo disegno costruito con MetaPost ed ho trovato che il linguaggio di quest’ultimo fosse particolarmente semplice. Mi è venuto così il seguente dubbio filosofico: è più comodo utilizzare TikZ oppure MetaPost? Sono programmi tutto sommato equivalenti, oppure uno dei due è “migliore” in qualche senso? È conveniente mettersi a studiare qualche guida MetaPost oppure qualsiasi cosa si possa fare con MetaPost si può fare anche (con una sintassi ovviamente differente) con TikZ?

    Spero che qualcuno di voi si sia fatto un’idea più chiara di me!

    Ciao,

    Andrea

Visualizzazione 8 filoni di risposte
  • Autore
    Risposte
    • #88041
      OldClaudio
      Partecipante
        Up
        0
        Down
        ::


        Metapost è un linguaggio che deriva da Metafont; è nato per disegni a due dimensioni, anche se c’è qualche tentativo di estenderlo al 3D.
        Tikz ha un linguaggio molto simile a quello di Meta* per quel che riguarda i path: se poi si usa l’estensione hobby.sty fa esattamente le stesse cose, ma Tikz fa molto di più, in particolare il 3D le funzioni, compatibile con pgfplots, eccetera.

        Quindi per certi scopi potrebbe essere più semplice usare Metapost, per altri è indispensabile Tikz. Difficile dire quale dei due programmi sia preferibile; per certi scopi è persino più semplice usare il pacchetto picture.sty, o usare l’ambiente picture standard eventualmente esteso con pic2e.
        Dipende sempre da cosa si vuol fare.

      • #88042
        Up
        0
        Down
        ::


        Quello di cui mi sto rendendo conto è che TikZ non è la panacea, le capacità in 3D non mi sembrano eccezionali (a parte tikz3dplot, mi sembra che il trucco più usato sia quello di disegnare in due dimensioni la proiezione di quello di quello che si vorrebbe realizzare in tre dimensioni, ma non tutti hanno voglia di calcolarsi manualmente la proiezione e comunque non mi sembra la cosa più naturale da fare, però sarei felice di saperne di più da chi ha maggiore esperienza in questo ambito) e per evitare tempi di compilazione biblici sto iniziando a creare i disegni in file PDF esterni realizzati usando la classe [tt]standalone[/tt] demolendo l’unico forte aspetto positivo di TikZ, cioè la diretta integrazione nel codice sorgente. Poi, ditemi quello che volete ma [tt]pgfplots[/tt] non mi piace, ma non per il risultato finale che è ottimo, ma a mio parere le sue limitazioni (grafici con non molti punti pena tempi di compilazione geologici, sempre che non si esaurisca la memoria di TeX se non si usa lua*tex) sono gravi

      • #88043
        Up
        0
        Down
        ::

        Elrond” post=87485Quello di cui mi sto rendendo conto è che TikZ non è la panacea, le capacità in 3D non mi sembrano eccezionali (a parte tikz3dplot, mi sembra che il trucco più usato sia quello di disegnare in due dimensioni la proiezione di quello di quello che si vorrebbe realizzare in tre dimensioni, il che non è la cosa più naturale e immediata da fare, non tutti hanno voglia di calcolarsi a mano la proiezione, ma sarei felice di saperne di più da chi ha maggiore esperienza in questo ambito) e per evitare tempi di compilazione biblici sto iniziando a creare i disegni in file PDF esterni realizzati usando la classe [tt]standalone[/tt] demolendo l’unico forte aspetto positivo di TikZ, cioè la diretta integrazione nel codice sorgente. Poi, ditemi quello che volete ma pgfplots non mi piace, ma non per il risultato finale che è ottimo, ma a mio parere le sue limitazioni (grafici con non molti punti e, di nuovo, tempi di compilazione geologici) sono gravi

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

          logos” post=87481Ciao a tutti,

          Per fare i disegni io utilizzo sempre TikZ. Tuttavia, un collega mi ha mostrato un suo disegno costruito con MetaPost ed ho trovato che il linguaggio di quest’ultimo fosse particolarmente semplice. Mi è venuto così il seguente dubbio filosofico: è più comodo utilizzare TikZ oppure MetaPost? Sono programmi tutto sommato equivalenti, oppure uno dei due è “migliore” in qualche senso? È conveniente mettersi a studiare qualche guida MetaPost oppure qualsiasi cosa si possa fare con MetaPost si può fare anche (con una sintassi ovviamente differente) con TikZ?

          Spero che qualcuno di voi si sia fatto un’idea più chiara di me!

          Ciao,

          Andrea

          Alla risposta di Claudio aggiungo che Metapost è un linguaggio che viene eseguito da un programma .
          Quindi è piú potente di Tikz quanto a cicli, condizionali, definizione di funzioni, chiamate ricorsive.
          Se si devono fare disegni frattali per esempio, metapost può essere una valida scelta.
          Da Metapost è stato creato Asymptote per esempio.
          Essendo poi metapost incluso in luatex, mi sembra che se ne debba tener comunque in conto, anche se la grafica di tikz tende ad essere migliore.

          R.

        • #88045
          Up
          0
          Down
          ::


          Ciao a tutti e grazie delle risposte.

          Per quel poco che ho visto riguardo a MetaPost, sono rimasto molto colpito dal fatto che si possa dare i nomi alle curve e indicizzarle con il ciclo for. Per esempio, avevo disegnato una superficie e ci volevo disegnare sopra le curve di livello. Poi volevo evidenziare un elemento di superficie, ma non riesco a farlo con TikZ perché non riesco a indicizzare le curve per prenderne le intersezioni. Questo è soltanto un esempio di cosa mi ha colpito di MetaPost.

          So che che il ciclo for c’è anche su TikZ (\foreach) ma non si può dare i nomi alle curve con la semplicità di MetaPost. Faccio un esempio di MataPost:

          `
          beginfig(1);
          path p[],q[],ics,ips;
          u = 1.0cm;
          ics = (0,0) — (4,4);
          as = (0,0) — (-4,4);
          pickup pencircle scaled .6pt;
          for i=0 upto 9:
          p=ics shifted (i*8.8u,0);
          q=ips shifted (i*7.8u,0);
          endfor
          z4 = p5 intersectionpoint q5;
          z5 = p4 intersectionpoint q6;
          endfig;
          end
          `

          Secondo voi questo si può fare su TikZ?

          Ciao,

          Andrea

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

            Elrond” post=87485Quello di cui mi sto rendendo conto è che TikZ non è la panacea, le capacità in 3D non mi sembrano eccezionali (a parte tikz3dplot, mi sembra che il trucco più usato sia quello di disegnare in due dimensioni la proiezione di quello di quello che si vorrebbe realizzare in tre dimensioni, ma non tutti hanno voglia di calcolarsi manualmente la proiezione e comunque non mi sembra la cosa più naturale da fare, però sarei felice di saperne di più da chi ha maggiore esperienza in questo ambito) e per evitare tempi di compilazione biblici sto iniziando a creare i disegni in file PDF esterni realizzati usando la classe [tt]standalone[/tt] demolendo l’unico forte aspetto positivo di TikZ, cioè la diretta integrazione nel codice sorgente. Poi, ditemi quello che volete ma [tt]pgfplots[/tt] non mi piace, ma non per il risultato finale che è ottimo, ma a mio parere le sue limitazioni (grafici con non molti punti e, di nuovo, tempi di compilazione geologici) sono gravi

            Ciao Elrond.
            Quando si parla di grafici è ovvio che si incontra subito il problema numerico.
            Pgfplots essendo basato su TeX non può far altro che essere limitato gravemente.
            Ma nel futuro pgfplots potrà avvalersi di motori numerici più potenti.
            Poi c’è il punto di vista model-view: pgfplots dovrebbe solo disegnare il grafico per punti la cui densità e posizione è giá stata stabilita da software esterni.
            Ovvero: lavoro in un ambiente appropriato di modellazione e poi creo i grafici giá risolti.
            R.

          • #88047
            Up
            0
            Down
            ::

            robitex” post=87489Poi c’è il punto di vista model-view: pgfplots dovrebbe solo disegnare il grafico per punti la cui densità e posizione è giá stata stabilita da software esterni.
            Ovvero: lavoro in un ambiente appropriato di modellazione e poi creo i grafici giá risolti.

            Il punto è che con gnuplot ho risultati estetici analoghi, tanto vale fare i grafici direttamente con gnuplot, continua a sfuggirmi perché dovrei far fare i calcoli a gnuplot e la grafica a pgfplots (con le sue limitazioni di potenza e rapidità) se gnuplot si può occupare di entrambi. E riconosco che in quanto a potenzia di calcolo gnuplot non è ai livelli di tanti altri programmi, come Matlab o Mathematica, ma a differenza di questi i suoi grafici possono essere perfettamente integrati nei documenti LaTeX, basta solo usare l’opportuno terminale.

            Devo fare un grafico simile a una mappa del calore, con una matrici di 5000×5000. A proposito di questo problema su TeX.StackExchange Jake ha detto (http://tex.stackexchange.com/a/50020/31416)

            JakeThis can then be plotted with PGFplots. Note, however, that this is a very memory intensive task, even the 87 by 61 volcano dataset could only be plotted using lualatex because pdflatex would exceed its memory limits. Plotting a 400 by 1000 matrix would take a very long time.

            Usare gnuplot per me in questo caso non è un capriccio ma una necessità dato che devo rappresentare una matrice che è 50 volte più grande di quella che “would take a very long time”.

          • #88048
            OldClaudio
            Partecipante
              Up
              0
              Down
              ::


              Come al solito la risposta è nel “dipende da cosa vuoi fare”

              Naturalmente il che cosa vuoi fare non contiene solo il disegno specifico da eseguire, ma anche la fatica di imparare un nuovo software, il tempo che bisogna aspettare per l’elaborazione, eccetera.

              Certamente se bisogna analizzare e collegare molti punti, l’aritmetica interna di pdflatex & company (eccetto lualatex), non è la via migliore; è molto meglio fare eseguire i calcoli a motori di composizione che sono in grado di eseguire ogni calcolo in flating point direttamente, senza dover simulare i numeri reali con moltiplicatori di grandezze, che implicano di trasformare in continuazione una stringa decimale con unità di misura in un numero intero, eseguire i calcoli su numeri interi, e poi togliere le unità di misura intendendo il numero intero come una lunghezza espressa in scaled points; questo implica contiene operazione di read e write dietro le quinte, cosa che è particolarmente fastidiosa e relativamente lenta; oppure si può evitare tutto ciò eseguendo le operazioni decimali una cifra alla volta come se si facessero i conti a mano, gestendo i riporti, che, se ben ricordate da quando facevamo le operazioni a mano anni e anni fa, erano le cose più fastidiose da fare ed erano particolarmente error prone (almeno a mano).
              Lualatex risolve attraverso lua molti di questi problemi, ma questo lo rende abbastanza lento; su file che non richiedono conti particolari, e quindi non richiedono l’uso di lua, ho esperienza empirica di velocità circa 10 volte inferiori a quelle di pdflatex. Non si può avere nulla senza pagare qualche costo.

            • #88049
              Up
              0
              Down
              ::

              logos” post=87488So che che il ciclo for c’è anche su TikZ (\foreach) ma non si può dare i nomi alle curve con la semplicità di MetaPost.

              Anche TikZ permette di dare nomi alle curve e non credo ci sia nulla di complicato nell’aggiungere un [tt]name path[/tt] alle opzioni di un qualsiasi [tt]\draw[/tt] con la libreria [tt]intersections[/tt]. Tali nomi possono anche essere globali, basta aggiungere un [tt]global[/tt] alla chiave precedente.

              In merito ai paths, bisogna dire che con TikZ si può fare molto di più di quello che c’è scritto nel manuale; infatti possono essere salvati [tt]save path=\something[/tt] e riutilizzati successivamente [tt]\againpath=\something[/tt]. Peccato che certe cose non siano ben documentate.

              logos” post=87488Secondo voi questo si può fare su TikZ?

              Tutto si può fare con TikZ 😉

              Ciao
              Claudio

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

          Go to top