[concorsone#2] disegnare schema…

  • Creatore
    Topic
  • #84777
    robitex
    Amministratore del forum
      Up
      0
      Down
      ::


      Un benvenuto ai partecipanti,
      è indetto il concorsone numero 2 che consiste nel disegnare con gli strumenti di TeX lo schema rappresentato nel disegno.

      [attachment=665]ref.png[/attachment]

      Regolamento:
      Possono partecipare tutti gli iscritti al forum, spedendo entro e non oltre la mezzanotte del 27 aprile 2013, il codice della soluzione all’indirizzo di posta elettronica seguente (opportunamente mascherato) -> giaconet punto mailbox chicciola gmail punto com
      È ammesso l’uso di qualsiasi pacchetto disponibille su CTAN e qualsiasi formato (Plain TeX, LaTeX, ConTeXt, ecc ecc).

      Sarà assegnato un punteggio da uno a cinque ad ogni soluzione presentata in funzione dell’eleganza, dell’efficienza di esecuzione, della flessibilità del linguaggio e dell’aderenza allo schema originario. Il codice dei partecipanti con i risultati saranno pubblicati in questo filone entro tre giorni dalla scadenza del concorsone con un breve commento.
      Alla vincitrice, od al vincitore, sarà assegnato il titolo di “Gran Disegnatore TeXnico”.

      Richieste di informazioni possono essere qui pubblicate assieme ad aggiornamenti sui partecipanti.
      Buon concorsone…
      R.

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

        robitex” post=84171Un benvenuto ai partecipanti,
        è indetto il concorsone numero 2 che consiste nel disegnare con gli strumenti di TeX lo schema rappresentato nel disegno.

        [attachment=665]ref.png[/attachment]

        Regolamento:
        Possono partecipare tutti gli iscritti al forum, spedendo entro e non oltre la mezzanotte del 27 aprile 2013, il codice della soluzione all’indirizzo di posta elettronica seguente (opportunamente mascherato) -> giaconet punto mailbox chicciola gmail punto com
        È ammesso l’uso di qualsiasi pacchetto disponibille su CTAN e qualsiasi formato (Plain TeX, LaTeX, ConTeXt, ecc ecc).

        Sarà assegnato un punteggio da uno a cinque ad ogni soluzione presentata in funzione dell’eleganza, dell’efficienza di esecuzione, della flessibilità del linguaggio e dell’aderenza allo schema originario. Il codice dei partecipanti con i risultati saranno pubblicati in questo filone entro tre giorni dalla scadenza del concorsone con un breve commento.
        Alla vincitrice, od al vincitore, sarà assegnato il titolo di “Gran Disegnatore TeXnico”.

        Richieste di informazioni possono essere qui pubblicate assieme ad aggiornamenti sui partecipanti.
        Buon concorsone…
        R.

        Interessante 🙂

        Forse è una domanda stupida, ma: c’è una logica che mi sfugge sotto? Nel senso: l’equivalenza a sinistra implica il posizionamento a destra? Oppure si tratta solo di riprodurre il disegno?

        Chiaramente, nel primo caso occorre procedere in una certa direzione mentre il secondo permette di sviluppare le cose in modo diverso.

        Ciao
        Claudio

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

          cfiandra” post=84217

          Un benvenuto ai partecipanti,
          è indetto il concorsone numero 2 che consiste nel disegnare con gli strumenti di TeX lo schema rappresentato nel disegno.

          [attachment=665]ref.png[/attachment]

          Regolamento:
          Possono partecipare tutti gli iscritti al forum, spedendo entro e non oltre la mezzanotte del 27 aprile 2013, il codice della soluzione all’indirizzo di posta elettronica seguente (opportunamente mascherato) -> giaconet punto mailbox chicciola gmail punto com
          È ammesso l’uso di qualsiasi pacchetto disponibille su CTAN e qualsiasi formato (Plain TeX, LaTeX, ConTeXt, ecc ecc).

          Sarà assegnato un punteggio da uno a cinque ad ogni soluzione presentata in funzione dell’eleganza, dell’efficienza di esecuzione, della flessibilità del linguaggio e dell’aderenza allo schema originario. Il codice dei partecipanti con i risultati saranno pubblicati in questo filone entro tre giorni dalla scadenza del concorsone con un breve commento.
          Alla vincitrice, od al vincitore, sarà assegnato il titolo di “Gran Disegnatore TeXnico”.

          Richieste di informazioni possono essere qui pubblicate assieme ad aggiornamenti sui partecipanti.
          Buon concorsone…
          R.

          Interessante 🙂

          Forse è una domanda stupida, ma: c’è una logica che mi sfugge sotto? Nel senso: l’equivalenza a sinistra implica il posizionamento a destra? Oppure si tratta solo di riprodurre il disegno?

          Chiaramente, nel primo caso occorre procedere in una certa direzione mentre il secondo permette di sviluppare le cose in modo diverso.

          Ciao
          Claudio

          Si, lo schema rappresenta il funzionamento delle variabili rriferimento nei moderni linguaggi di programmazione e si legge dall’alto verso il basso.
          Domani non posso, ma martedí cercheró di caricare un immagine piú definita ed il file pdf.
          R.

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


            Eh eh,
            il concorsone #2 è on-line…
            Ecco il file pdf…

            [attachment=672]schemaref.pdf[/attachment]

            E un’immagine immediata…

            R.

            Attachments:
            You must be logged in to view attached files.
          • #84781
            robitex
            Amministratore del forum
              Up
              0
              Down
              ::


              Ciao a tutti,
              ho appena ricevuto la soluzione di Francesco Endrici (franen per gli amici (se non erro)), che giunge entro il termine stabilito dal regolamento.
              La sua proposta è molto interessante e completamente diversa da quella a cui avevo pensato io.
              Il codice, restituendo uno schema conforme a quello del concorsone, e pertanto risulta ammesso.

              Un ringraziamento particolare al concorrente a cui auguro buona fortuna per il risultato finale.
              Grande Francesco.
              R.

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


                Ciao,
                è arrivata anche la soluzione di Claudio Fiandrino.
                Il codice è conforme alle regole del concorso e pertanto viene ammesso.

                Sono quindi due i coraggiosi utenti che hanno fatto pervenire una soluzione.
                Congratulazione ai partecipanti!

                e vi ricordo che avete tempo ancora fino a domani a mezzanotte…
                affrettatevi!

                R.

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


                  Eccomi qua con notevole e colpevole ritardo.
                  Vi riporto i codici sorgente pervenuti per il presente concorsone ed alla fine dichiarerò il vincitore.
                  Ecco quello che avevo scritto io, mirando a scrivere il codice che soddisfacesse allo schema grafico nel più breve tempo possibile:
                  ho utilizzato l’oggetto nodo multiparte ed un comando appositamente definito che sovrapponesse il disegno di un nodo a due parti con il disegno della freccia ad onda:
                  `\documentclass

                  {standalone}
                  \usepackage{inconsolata}

                  \usepackage{tikz}
                  \usetikzlibrary{shapes.multipart}

                  \tikzstyle{var}=[draw,
                  line width=.4pt,
                  rectangle split,
                  rectangle split parts=2,
                  minimum width=14.8mm,
                  rectangle split part align={center},
                  text depth=0pt]

                  \tikzstyle{data}=[draw,
                  line width=0.4pt,
                  minimum width=14.8mm,
                  rectangle split,
                  rectangle split parts=2]

                  \def\cbox{\rule[-4pt]{0pt}{14pt}}
                  \newdimen\step
                  \step=17mm

                  \def\var(#1,#2)#3{
                  \node[var] at (#1, #2) {
                  \texttt{#3}
                  \nodepart{two}
                  \cbox
                  };

                  \begin{scope}[xshift=#1-6mm,yshift=#2-2mm]
                  \draw[line width=1pt,->,scale=0.32] (0,0) ..
                  controls (0.6,0.4) and (1,0.5) .. (1.3,-0.1) ..
                  controls (1.5,-.8) and (2.2, -0.7) ..(3.5,.7);
                  \end{scope}
                  }

                  \def\data(#1,#2)#3{
                  \node[data] at (#1,#2) {
                  \nodepart{two}
                  \cbox#3
                  };

                  \begin{scope}[xshift=#1-3.5mm,yshift=#2+3.5mm,scale=.22]
                  \draw[line width=1pt,->] (0,0) ..
                  controls (0.6,0.4) and (1,0.5) .. (1.3,-0.1) ..
                  controls (1.5,-.8) and (2.2, -0.7) ..(3.5,.7);
                  \end{scope}
                  }

                  \begin{document}
                  \begin{tikzpicture}

                  % assegnazione variabile v
                  \node[anchor=west] at (0, 2.5*\step) {\texttt{v = 10}};
                  \var(3cm, 2.5*\step){v}
                  \data(7.5cm, 2.5*\step){10}

                  % assegnazione variabile q
                  \node[anchor=west] at (0, 1.5*\step) {\texttt{q = v}};
                  \var(3cm, 1.5*\step){v}
                  \var(5cm, 1.5*\step){q}
                  \data(7.5cm, 1.5*\step){10}

                  % modifica della variabile v
                  \node[anchor=west] at (0, 0.5*\step) {\texttt{v = v – 5}};
                  \var(3cm, 0.5*\step){v}
                  \var(5cm, 0.5*\step){q}
                  \data(7.5cm, 0.5*\step){5}

                  % disegno partizioni
                  \foreach \y in {0,1,2,3}
                  \draw (0,\y*\step) — (8.5,\y*\step);

                  \end{tikzpicture}
                  \end{document}
                  `

                  Francesco Endrici mi ha inviato una soluzione completamente diversa, tra l’altro riuscendo a definire così bene i punti di controllo da aver fornito il codice più bello per il disegno della freccia ad onda:
                  Come potete vedere Francesco ha visto lo schema come una tabella.
                  `\documentclass[a4paper]{article}
                  \usepackage[T1]{fontenc}%per il commento
                  \usepackage[utf8]{inputenc}%per il commento
                  \usepackage[italian]{babel}%per il commento
                  \usepackage{booktabs}
                  \usepackage{tikz}
                  \usepackage{array}
                  \title{Concorsone n. 2}
                  \author{Francesco Endrici}
                  \date{18 aprile 2013}
                  % definisco un comando per creare le sottotabelle
                  % il comando genera una tabellina. Se il primo argomento, opzionale, è “u” (up) allora nella cella in alto mette una freccia con scala=1 e nella cella in basso mette il contenuto dell'argomento 2. Altrimenti (se è “d”, che è anche il valore di default) sopra va #2 e sotto va una freccia con scala=1.5.
                  \newcolumntype{M}{>{\sffamily\centering\arraybackslash}m{3em}}
                  \newcommand{\subtab}[2][d]{%
                  \ifx#1u%
                  \def\firstcell{\robyarrow}%
                  \def\secondcell{#2}%
                  \else
                  \ifx#1d%
                  \def\firstcell{#2}%
                  \def\secondcell{\robyarrow[1.5]}%
                  \else
                  \errmessage{Eh no mio caro, puoi usare solo u e d come argomenti opzionali!}%
                  \fi
                  \fi
                  \begin{tabular}{|M|}
                  \hline
                  \firstcell\\
                  \hline
                  \rule[-0.67em]{0pt}{2em}\secondcell\\
                  \hline
                  \end{tabular}
                  }
                  % creo la freccia, di dimensioni variabili. (voelndo il “thock” potrebbe diventare “very thick”)
                  \newcommand{\robyarrow}[1][1]{%
                  \begin{tikzpicture}[baseline=(current bounding box.south),scale=#1]
                  \path[use as bounding box] (0, 0.3em) rectangle (1.7em, -0.2em);
                  \draw [->,thick] (0,0.0) .. controls (1em,0.8em) and (0.2em,-1.4em) .. (2em,0.4em);
                  \end{tikzpicture}
                  }

                  \begin{document}

                  \begin{tabular}{@{\hspace{0.4em}}>\sffamily l@{\hspace{2.1em}} c@{\hspace{1.5em}} c@{\hspace{2.8em}} c}% misure messe a occhio per rendere la tabella simile all'originale, ma anche la spaziatura di default andava benissimo!
                  \toprule
                  v = 10 &\subtab{v}& &\subtab{10}\\
                  \midrule
                  q = v &\subtab{v}&\subtab{q}&\subtab{10}\\
                  \midrule
                  v = v – 5 &\subtab{v}&\subtab{q}&\subtab{5}\\
                  \bottomrule
                  \end{tabular}

                  \end{document}
                  `

                  Ecco invece la soluzione di Claudio Fiandrino:
                  mentre ha esagerato nel voler disegnare la freccia ad onda addirittura con il pacchetto hobby, ha poi snocciolato un codice programmando TikZ come solo lui sa fare.
                  `\documentclass[11pt,a4paper]{article}
                  \usepackage{charter}
                  \usepackage{tikz}
                  \usepackage{pdftexcmds}
                  \usepackage{etoolbox}
                  \usetikzlibrary{calc,hobby,matrix}

                  % codice di Enrico:
                  % http://www.guitex.org/home/it/forum/5-tex-e-latex/83195-la-libreria-hobby-tikz-non-funziona-piu#83203
                  \ExplSyntaxOn
                  \cs_if_exist:NF \prg_stepwise_function:nnnN { \cs_gset_eq:NN \prg_stepwise_function:nnnN \int_step_function:nnnN }
                  \cs_if_exist:NF \prg_stepwise_inline:nnnn { \cs_gset_eq:NN \prg_stepwise_inline:nnnn \int_step_inline:nnnn }
                  \ExplSyntaxOff

                  \newcommand{\smootharrow}[1][1]{%
                  \begin{tikzpicture}[scale=#1]
                  \draw[->](0,0) to[curve through={(0.01,0.01)..(0.19,0.1)..(0.3,-0.05)..(0.7,0.115)}](0.8,0.21);
                  \end{tikzpicture}
                  }

                  \makeatletter
                  \tikzset{item style/.style={
                  inner ysep=2pt,
                  outer sep=0pt,
                  text depth=0pt,
                  },
                  assignment style/.style={
                  align=left,
                  minimum width=2cm,
                  text width=2cm,
                  minimum height=0.5cm,
                  text height=3pt,
                  text depth=0pt,
                  },
                  item/.code args={#1 and #2}{
                  \ifnum\pdf@strcmp{#1}{smooth arrow}=\z@%
                  \draw(0,-0.3)rectangle(1,0.2)node[midway,item style]{#2};
                  \draw(0,0.2)rectangle(1,0.55)node[midway]{\smootharrow[0.5]};
                  \else%
                  \ifnum\pdf@strcmp{#2}{smooth arrow}=\z@%
                  \draw(0,-0.3)rectangle(1,0.2)node[midway]{\smootharrow[0.75]};
                  \draw(0,0.2)rectangle(1,0.55)node[midway,item style]{#1};
                  \else%
                  \draw(0,-0.3)rectangle(1,0.2)node[midway]{#2};
                  \draw(0,0.2)rectangle(1,0.55)node[midway]{#1};
                  \fi%
                  \fi%
                  },
                  smootharrow/.code={
                  \draw[->](0,0) to[curve through={(0.01,0.01)..(0.19,0.1)..(0.3,-0.05)..(0.7,0.115)}](0.8,0.21);
                  },
                  every picture/.style={font=\sffamily,},
                  }

                  \newcounter{lines}
                  \setcounter{lines}{1}

                  % that's just an alias for \node
                  \def\variable#1{\node[item=#1 and smooth arrow]{};}
                  \def\value#1{\node(m-\thelines-4)[item=smooth arrow and #1]{};}
                  \def\assignment#1{\node(m-\thelines-1)[assignment style]{#1};}
                  \def\void{\node[]{};}
                  \def\endline{\stepcounter{lines}\\}
                  \def\endenv{\\}
                  \makeatother

                  % code by Andrew:
                  % http://tex.stackexchange.com/a/28452/13304
                  \let\matamp=&
                  \catcode`\&=13
                  \makeatletter
                  \def&{\iftikz@is@matrix
                  \pgfmatrixnextcell
                  \else
                  \matamp
                  \fi}
                  \makeatother

                  \pgfkeys{/show variables environment/.cd,
                  column sep/.initial={1em},
                  column sep/.get=\columnsep,
                  column sep/.store in=\columnsep,
                  row sep/.initial={1ex},
                  row sep/.get=\rowsep,
                  row sep/.store in=\rowsep,
                  scale factor/.initial={1},
                  scale factor/.get=\scalefactor,
                  scale factor/.store in=\scalefactor,
                  }

                  \tikzset{matrix aspect/.style={
                  column sep=\columnsep,
                  column 1/.style={column sep=1.2*\columnsep},
                  row sep=\rowsep
                  }
                  }

                  \usepackage{environ}
                  \NewEnviron{showvariables}[1][]{%
                  \pgfkeys{/show variables environment/.cd,#1}
                  \setcounter{lines}{1}
                  \scalebox{\scalefactor}{
                  \begin{tikzpicture}[baseline]
                  \matrix[matrix aspect]{
                  \BODY
                  };
                  \pgfmathtruncatemacro\endloop{\thelines-1}
                  \foreach \nline[evaluate=\nline as \nextline using (int(\nline+1))] in {1,…,\endloop}{
                  \draw[shorten <=-0.5cm, shorten >=-1.25cm]
                  ($(m-\nline-1.south west)!0.3!(m-\nextline-1.north west)$)–
                  ($(m-\nline-4.south east)!0.35!(m-\nextline-4.north east)$);
                  }
                  % last
                  \draw[shorten <=-0.5cm, shorten >=-1.25cm]
                  ([yshift=-0.18cm]m-\thelines-1.south west)–([yshift=-0.3cm]m-\thelines-4.south east);
                  % first
                  \draw[shorten <=-0.5cm, shorten >=-1.25cm]
                  ([yshift=0.425cm]m-1-1.north west)–([yshift=0.545cm]m-1-4.north east);
                  \end{tikzpicture}
                  }
                  }

                  \BeforeBeginEnvironment{showvariables}{\medskip\par}
                  \AfterEndEnvironment{showvariables}{\par\medskip\noindent}

                  \begin{document}
                  \thispagestyle{empty}

                  \begin{showvariables}
                  \assignment{v = 10} & \variable{v} & \void & \value{10}\endline
                  \assignment{ q = v} & \variable{v} & \variable{q} & \value{10}\endline
                  \assignment{ v = v – 5} & \variable{v} & \variable{q} & \value{5}\endenv
                  \end{showvariables}

                  Un esempio con distanze di riga e di colonna personalizzate:

                  \begin{showvariables}[column sep=3em,row sep=3ex]
                  \assignment{v = 10} & \variable{v} & \void & \value{10}\endline
                  \assignment{ q = v} & \variable{v} & \variable{q} & \value{10}\endline
                  \assignment{v = v – 5} & \variable{v} & \variable{q} & \value{5}\endline
                  \assignment{ z = v} & \variable{v} & \variable{z} & \value{5}\endenv
                  \end{showvariables}

                  Scalare l'ambiente:

                  \begin{showvariables}[scale factor=1.5]
                  \assignment{v = 10} & \variable{v} & \void & \value{10}\endline
                  \assignment{ q = v} & \variable{v} & \variable{q} & \value{10}\endline
                  \assignment{ v = v – 5} & \variable{v} & \variable{q} & \value{5}\endenv
                  \end{showvariables}
                  \end{document}`

                  Visto il regolamento del concorsone #2 apparso nel primo post,
                  visto che sia Francesco che Claudio hanno presentato due soluzione valide entro i termini,
                  visto che oggi è una bella giornata di sole,
                  consultata la commissione in seduta pomeridiana,

                  annuncio quindi il vincitore del concorsone #2 è Claudio Fiandrino.

                  Motivazione: proprio perché il codice presentato è complesso, più da sviluppatore di pacchetti che non da semplice utente, Claudio è pervenuto alla definizione di alcuni comandi definendo lo schema in modo semantico. Poiché la commissione riserva enorme importanza al linguaggio come essenziale mezzo di utilizzo e sviluppo dei sistemi basati su TeX, si è premiata la soluzione di Claudio.
                  Francesco, ha proposto un codice pragmatico dimostrando che le soluzioni possono presentare sorprendenti e diversi punti di vista, e riuscendo a trovare la più bella definizione possibile per il disegno della freccia ad onda.

                  Grazie a tutti i partecipanti per aver contribuito con ironia al concorsone.
                  R.

                • #84784
                  franen
                  Partecipante
                    Up
                    0
                    Down
                    ::


                    Onore al vincitore! 😀
                    Fran

                  • #84785
                    Liverpool
                    Partecipante
                      Up
                      0
                      Down
                      ::


                      Congratulazioni al vincitore, ma complimenti anche a Francesco per la soluzione particolare.
                      Ora attendiamo l’articolo di @OldClaudio sulla scritta [tt]draft[/tt].

                      Ciao

                    • #84786
                      Up
                      0
                      Down
                      ::


                      Mi unisco al coro dei complimenti a Claudio, l’unico vero uomo del forum! 🙂

                      Ma sapete che cosa mi ha scritto prima? Che questa sera ci invita tutti a casa sua e cucina lui! Ooooops, mi è scappato…
                      Grazie Claudio. Raccolgo le adesioni. Facciamo qualche macchinata? 😀

                      Ciao
                      Tommaso

                    • #84787
                      Up
                      0
                      Down
                      ::


                      Wow… grazie a tutti! 🙂

                      Anche Francesco ha tirato fuori una bella soluzione basata come la mia sul concetto di “matrice” o “tabella”. Onore anche a lui 🙂

                      Invece Roberto ha usato il [tt]rectangle split[/tt]: ci avevo pensato anche io, ma alla fine ho scoperto che era complicato gestire le singole parti. Nel senso: non si riesce ad impostare un valore di altezza prefissato solo per la parte alta e/o per la parte bassa quando ci sono 2 parti. Ne risultava un allineamento un po’ sballato perciò ho finito per disegnare a mano.

                      illinguista1972″ post=85066Mi unisco al coro dei complimenti a Claudio, l’unico vero uomo del forum! 🙂

                      Ma sapete che cosa mi ha scritto prima? Che questa sera ci invita tutti a casa sua e cucina lui! Ooooops, mi è scappato…
                      Grazie Claudio. Raccolgo le adesioni. Facciamo qualche macchinata? 😀

                      😀 Propongo gnocchi al castelmagno e fritto misto alla piemontese (per presentare piatti tipici della valle e della regione): chi è d’accordo? 😀

                      Ciao
                      Claudio

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

                  Go to top