Semicerchio graduato con freccia

  • Creatore
    Topic
  • #106047
    Up
    0
    Down
    ::


    Buonasera,
    vorrei per cortesia un consiglio.
    Devo fare una ricetta prescrizione occhiali in latex.

    Come si fanno i semicerchi graduati con freccia (allego esempio)?

    Ringrazio

    Carlo

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

      orbscan” post=106129Buonasera,
      vorrei per cortesia un consiglio.
      Devo fare una ricetta prescrizione occhiali in latex.

      Come si fanno i semicerchi graduati con freccia (allego esempio)?

      Ringrazio

      Carlo

      L’esempio più simile da cui prendere spunto mi sembrano le risposte a questa domanda

      Ciao
      Claudio

    • #106049
      Up
      0
      Down
      ::


      Grazie per la risposta.
      Ho arrangiato due esempi ma non riesco ad andare avanti…
      Potete aiutarmi?

      Oppure consigliarmi a chi posso rivolgermi?

      Grazie

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

        orbscan” post=106131Grazie per la risposta.
        Ho arrangiato due esempi ma non riesco ad andare avanti…
        Potete aiutarmi?

        Oppure consigliarmi a chi posso rivolgermi?

        Grazie

        Un passo alla volta con una buona guida…
        Per esempio l’Arte di disegnare con LaTeX mi sembra fatta molto bene.
        Questo il link: http://www.lorenzopantieri.net/LaTeX_files/ArteTikZ.pdf

        E ho l’opinione che questo progetto di documento possa essere anche un lavoro da presentare ad ArsTeXnica, la rivista del gruppo GuIT.
        Sul forum dovresti fare domande più precise.
        Per quale motivo non riesci ad andare avanti?
        R.

      • #106051
        Up
        0
        Down
        ::


        Non so se quello che tu volessi ottenere fosse proprio questo, comunque io ho provato a riscrivere il comando (è così che si chiama?) con 4 valori opzionali, il I dichiara il raggio, il II e il III dichiarano l’angolo delle due frecce e il IV serve per aumentare la distanza tra i due semicerchi.
        Non sono riuscito a rendere dinamica la dimensione della freccia, forse qualcuno potrà aiutarti se il risultato è quello che volevi. Anche sul testo si può forse fare qualche miglioria.

        `
        \documentclass{article}
        \usepackage{tikz}
        \usepackage{xparse}
        \usetikzlibrary{arrows.meta,calc,bending}

        \NewDocumentCommand{\cercle}{O{2cm}O{90}O{90}O{2.5cm}}{%
        \def\radius{#1}%
        \begin{tikzpicture}[>={stealth}]
        \coordinate (A) at (0,0);
        \coordinate (B) at ($(0,0)+(2*\radius+#4,0)$);
        \draw[line width=1pt] (A) arc[start angle=0, end angle=180, radius=#1];
        \draw[line width=1pt] (B) arc[start angle=0, end angle=180, radius=#1];
        \foreach \angp in {5,15,…,175}
        {
        \draw[line width=1pt] ([shift=(180:\radius)]\angp:\radius)–([shift=(180:\radius)]\angp:\radius+0.2cm);
        \draw[line width=1pt] ([shift=(0:\radius+#4)]\angp:\radius)–([shift=(0:\radius+#4)]\angp:\radius+0.2cm);
        }
        \foreach \angp in {10,20,…,170}
        {
        \draw[line width=1pt] ([shift=(180:\radius)]\angp:\radius)–([shift=(180:\radius)]\angp:\radius+0.4cm);
        \draw[line width=1pt] ([shift=(0:\radius+#4)]\angp:\radius)–([shift=(0:\radius+#4)]\angp:\radius+0.4cm);
        }
        \foreach \angp in {0,30,…,180}
        {
        \draw[line width=1pt] ([shift=(180:\radius)]\angp:\radius)–([shift=(180:\radius)]\angp:\radius+0.6cm);
        \draw[line width=1pt] ([shift=(0:\radius+#4)]\angp:\radius)–([shift=(0:\radius+#4)]\angp:\radius+0.6cm);
        \node [rotate=\angp-90] at ([shift=(180:\radius)]\angp:\radius+0.8cm) {\angp};
        \node [rotate=\angp-90] at ([shift=(0:\radius+#4)]\angp:\radius+0.8cm) {\angp};
        }
        \node [below] at (-\radius,-0.5) {OCCHIO DESTRO};
        \node [below] at (\radius+#4,-0.5) {OCCHIO SINISTRO};
        \draw [->,line width=1pt] (-\radius,0)–++(#2:\radius);
        \draw [->,line width=1pt] (\radius+#4,0)–++(#3:\radius);
        \end{tikzpicture}%
        }

        \begin{document}

        \cercle[2cm][60][30]

        \end{document}
        `

      • #106052
        Up
        0
        Down
        ::


        Scusami il ritardo per la risposta.
        Sei stato molto gentile e mi hai risolto il problema.
        Grazie di cuore

      • #106053
        Up
        0
        Down
        ::


        È stato un piacere, sono sicuro anche che potrebbe essere migliorato ulteriormente.

      • #106054
        Up
        0
        Down
        ::

        robitex” post=106133

        Grazie per la risposta.
        Ho arrangiato due esempi ma non riesco ad andare avanti…
        Potete aiutarmi?

        Oppure consigliarmi a chi posso rivolgermi?

        Grazie

        Un passo alla volta con una buona guida…
        Per esempio l’Arte di disegnare con LaTeX mi sembra fatta molto bene.
        Questo il link: http://www.lorenzopantieri.net/LaTeX_files/ArteTikZ.pdf

        E ho l’opinione che questo progetto di documento possa essere anche un lavoro da presentare ad ArsTeXnica, la rivista del gruppo GuIT.
        Sul forum dovresti fare domande più precise.
        Per quale motivo non riesci ad andare avanti?
        R.

        Ciao Roberto,
        è molto tempo che medito di scrivere per bene questo progetto, ma ancora non ho raggiunto le competenze sufficienti per farlo in solitaria. Mi sono letto appunti di programmazione in LaTeX e TeX di Enrico, ma ancora non mi sento pronto (ci mancherebbe altro che bastasse una sola lettura e guida); sai se c’è qualcuno nel gruppo che vuole provare a darmi una mano? Oppure c’è altro materiale da leggere così da capire come funzionano gli argomenti opzionali, vorrei passara da quello che ho scritto a qualcosa della forma

        `
        \cercle[radius=2.5cm,label=true,eye=L]{60}{30}
        `
        In modo da poter definire se si vuole disegnare solo un occhio, con o senza la scritta e altre opzioni che ora non ho citato, perché al momento mi viene in mente solo un laborioso e poco efficace schema di if consecutivi.
        Resto a disposizione.

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

          schwarz89it” post=107326

          [quote=”orbscan” post=106131]Grazie per la risposta.
          Ho arrangiato due esempi ma non riesco ad andare avanti…
          Potete aiutarmi?

          Oppure consigliarmi a chi posso rivolgermi?

          Grazie

          Un passo alla volta con una buona guida…
          Per esempio l’Arte di disegnare con LaTeX mi sembra fatta molto bene.
          Questo il link: http://www.lorenzopantieri.net/LaTeX_files/ArteTikZ.pdf

          E ho l’opinione che questo progetto di documento possa essere anche un lavoro da presentare ad ArsTeXnica, la rivista del gruppo GuIT.
          Sul forum dovresti fare domande più precise.
          Per quale motivo non riesci ad andare avanti?
          R.

          Ciao Roberto,
          è molto tempo che medito di scrivere per bene questo progetto, ma ancora non ho raggiunto le competenze sufficienti per farlo in solitaria. Mi sono letto appunti di programmazione in LaTeX e TeX di Enrico, ma ancora non mi sento pronto (ci mancherebbe altro che bastasse una sola lettura e guida); sai se c’è qualcuno nel gruppo che vuole provare a darmi una mano? Oppure c’è altro materiale da leggere così da capire come funzionano gli argomenti opzionali, vorrei passara da quello che ho scritto a qualcosa della forma

          `
          \cercle[radius=2.5cm,label=true,eye=L]{60}{30}
          `
          In modo da poter definire se si vuole disegnare solo un occhio, con o senza la scritta e altre opzioni che ora non ho citato, perché al momento mi viene in mente solo un laborioso e poco efficace schema di if consecutivi.
          Resto a disposizione.[/quote]
          Buongiorno.
          La cosa più semplice per realizzare quel comando è probabilmente quella di tenersi all’interno del pacchetto TikZ.
          Questo pacchetto grafico è dotato di un modulo chiamato pgfkeys per costruire parametri chiave/valore.
          Per documentarti apri il manulae di TikZ con il comando da terminale $ texdoc pgf e scorri fino al capitolo “Key management”.

          In alternativa, potresti implementare \cercle in LaTeX3, che fornisce la gestione chiave/valore e metodi per creare comandi dalla sintassi molto flessibile. Per documentarti leggi gli articoli su LaTeX3 di Enrico pubblicati sugli utlimi numeri di ArsTeXnica scaricandoli dalla sezione apposita del sito GuIT.
          LaTeX3 ti permetterebbe di essere più generale riepetto a pgfkeys nel senso che ti permette più possibilità di estensione futura dei comandi.

          Una domanda: ma se disegni il grafico per l’occhio sinistro, per esempio, non devi poi anche disegnare quello per l’occhio destro?

          Per l’articolo per Ars tieni conto che puoi sempre presentare un primo lavoro introduttivo.
          Grazie.
          R.

        • #106056
          Up
          0
          Down
          ::

          schwarz89it” post=107326[…]è molto tempo che medito di scrivere per bene questo progetto, ma ancora non ho raggiunto le competenze sufficienti per farlo in solitaria. Mi sono letto appunti di programmazione in LaTeX e TeX di Enrico, ma ancora non mi sento pronto (ci mancherebbe altro che bastasse una sola lettura e guida); sai se c’è qualcuno nel gruppo che vuole provare a darmi una mano?

          Non credo che gli appunti di Enrico coprano l’uso delle pgfkeys che in questo caso sono decisamente lo strumento da usare perché pensate appositamente per TikZ.

          schwarz89it” post=107326Oppure c’è altro materiale da leggere così da capire come funzionano gli argomenti opzionali, vorrei passara da quello che ho scritto a qualcosa della forma

          `
          \cercle[radius=2.5cm,label=true,eye=L]{60}{30}
          `
          In modo da poter definire se si vuole disegnare solo un occhio, con o senza la scritta e altre opzioni che ora non ho citato, perché al momento mi viene in mente solo un laborioso e poco efficace schema di if consecutivi.

          Prova a dare uno sguardo a Drawing a large binary matrix as colored grid in TikZ. È un progettino abbastanza semplice in cui si crea proprio un comando simile a quello che vuoi.

          In alternativa, è più complesso però, puoi leggere il mio articolo su ArsTeXnica del pacchetto Sa-TikZ. Il codice del pacchetto è abbastanza commentato. Sempre su ArsTeXnica, il numero 19, trovi “Personalizzazione e riproducibilità nel disegno programmato: introduzione al pacchetto pgfkeys” che fornisce un’introduzione.

          Ciao
          Claudio

          Ciao
          Claudio

        • #106057
          Up
          0
          Down
          ::


          Ringrazio entrambi per gli utili consigli, oggi mi documento, non ricordavo che pgf avesse anche questa possibilità. Eventualmente posso pensare a LaTeX3 se poi dovessi essere soddisfatto del primo risultato. Visto che sono alle prime armi, ritengo he valga la pena imparare direttamente il linguaggio di LaTeX3, che ricordo aver trovato più familiare quando l’ho visto al meeting di Trento.
          Per rispondere alla tua domanda Roberto, è vero che di solito uno disegna e parla congiuntamente di ambo gli occhi, ma non sapendo quali impieghi potrebbe avere, mi volevo tenere la possibilità di consentire all’utente finale di descrivere anche solo un occhio o, nell’ipotesi di testo universitario o simile, di poter anche mostrare la lunetta senza indicazioni e/o senza la freccia.
          Magari è inutile non lo so, ma se Orbscan poi vorrà fornirmi anche altre idee per migliorarlo sarò ben lieto di tentare di adattarlo alle reali esigenze.

        • #106058
          Up
          0
          Down
          ::


          Sebbene esistano esempi di pacchetti per TikZ che usano il linguaggio LaTeX3 (per esempio ecgdraw), io ne sono fortemente contrario. Usare le risorse interne di TikZ è più che sufficiente per la stragrande maggioranza dei casi. Appoggiarsi a LaTeX3 ha vantaggi e svantaggi e tra gli svantaggi che personalmente ritengo facciano pendere la bilancia, c’è sicuramente quello che a ogni aggiornamento di funzioni in LaTeX3 uno prega che il proprio pacchetto sia ancora funzionante (vedi su http://tex.stackexchange.com/questions/tagged/hobby quanti sono i problemi).

          Ciao
          Claudio

        • #106059
          Up
          0
          Down
          ::


          Il materiale suggerito è ottimo, ma ora sono alle prese con il primo vero grande problema, gli \if
          `\documentclass{article}
          \usepackage{tikz}

          \makeatletter
          \tikzset{
          eye/.initial=both,
          eye/.get=\eye,
          eye/.store in=\eye,
          }
          \newcommand{\eyecir}[1][]{
          \begin{tikzpicture}
          \if\eye=both
          \draw (0,0)–(2,0);
          \draw (0,-1)–(2,-1);
          \else
          \draw (0,0)–(2,0);
          \fi
          \end{tikzpicture}%
          }
          \makeatother

          \begin{document}
          \eyecir[eye=both]
          \end{document}`

          Ovviamente quel modo di confrontare \eye con both non è giusto; ho letto l’articolo di Beccari su ArsTeXnica numero 17 e ho visto che è pieno di if, ma sembra che nessuno sia quello che cerco, come devo procedere? Risolto questo problema per ora sarei già a buon punto.

        • #106060
          Up
          0
          Down
          ::

          schwarz89it” post=107350Il materiale suggerito è ottimo, ma ora sono alle prese con il primo vero grande problema, gli \if
          `\documentclass{article}
          \usepackage{tikz}

          \makeatletter
          \tikzset{
          eye/.initial=both,
          eye/.get=\eye,
          eye/.store in=\eye,
          }
          \newcommand{\eyecir}[1][]{
          \begin{tikzpicture}
          \if\eye=both
          \draw (0,0)–(2,0);
          \draw (0,-1)–(2,-1);
          \else
          \draw (0,0)–(2,0);
          \fi
          \end{tikzpicture}%
          }
          \makeatother

          \begin{document}
          \eyecir[eye=both]
          \end{document}`

          Ovviamente quel modo di confrontare \eye con both non è giusto; ho letto l’articolo di Beccari su ArsTeXnica numero 17 e ho visto che è pieno di if, ma sembra che nessuno sia quello che cerco, come devo procedere? Risolto questo problema per ora sarei già a buon punto.

          Per i condiizionali c’è un costrutto apposito, trovi un esempio in Two independent optional arguments for new commands. Un esempio più complesso in The ‘.is if’ handler of pgfkeys.

          Nota una cosa: come scritto nell’articolo su Ars, usare i tre costrutti initial, get e store in non è propriamente corretto. Trovi tutte le spiegazioni in What do the pgfkeys key handlers .get and .store in do?.

          Ciao
          Claudio

        • #106061
          Up
          0
          Down
          ::


          Non so se aggiungere la questione qui o aprire una nuova discussione dal momento che si tratta di un problema di condizionali. Intanto espongo il problema qui, poi al più lo ricopierò altrove.
          Sono un po’ demoralizzato, dopo 6 settimane sono tornato a questo progetto che avevo lasciato in sospeso per problemi di tempo, e tra la lettura dei forum suggeritimi e quella del manuale di pgf sono arrivato alla conclusione di usare il comando \newif coadiuvato dal ` \pgfkeys{/eye/. is choice}`

          Riporto qui il pasticcio
          `\documentclass{article}
          \usepackage{tikz}
          \usepackage{pgfkeys}

          \makeatletter
          \newif\ifboth\bothfalse
          \newif\ifleft\leftfalse
          \newif\ifright\rightfalse

          \pgfkeys{/eye/.store in=\eye,
          /eye={},}

          \newcommand{\cerquad}[1][]{
          \pgfkeys{/eye/.is choice}
          \pgfkeys{/eye/{}/.\bothtrue}
          \pgfkeys{/eye/left/.\lefttrue}
          \pgfkeys{/eye/right/.\righttrue}
          \pgfkeys{/eye/both/.\bothtrue}
          \begin{tikzpicture}
          \ifboth
          \else
          \draw (0,0)circle(1);
          \draw(2,0)rectangle(3,1);
          \fi
          \ifleft
          \else
          \draw (0,0)circle(1);
          \fi
          \ifright
          \else
          \draw(0,0)rectangle(1,1);
          \fi
          \end{tikzpicture}%
          }
          \makeatother

          \begin{document}

          \cerquad[eye=left]\\
          \cerquad[eye=both]\\
          \cerquad[eye=right]

          \end{document}`

          Ora se ho capito bene [tt]\newif[/tt] costruisce una nuova condizione, prendendo a modello[tt]\ifnew\ifboth[/tt] io pongo inizialmente che questo sia [tt]\bothfalse[/tt]. Quindi quando userò [tt]\ifboth[/tt] se la condizione sarà falsa uscirà dalla verifica, se vera seguirà il percorso di [tt]\else[/tt].
          Questa dovrebbe essere la teoria, o quello comunque che ho capito.

          Quando tuttavia provo l’EMC ottengo l’errore

          ! Incomplete \iffalse; all text was ignored after line 39.

          \fi
          <*> ./InProveMin.tex

          Agli occhi di un esperto la cosa sarà chiarissima, ma per me è criptica.
          Domanda marginale: Perché in latex l’uso degli if è reso così complicato? In fondo quello che volevo fare era semplicemente confrontare il [tt]value[/tt] della chiave [tt]eye[/tt] con una stringa.
          Spero nella risposta di qualche anima.

        • #106062
          OldClaudio
          Partecipante
            Up
            0
            Down
            ::


            Forse ho capito male quello che dici, ma mi sembra che tu faccia un po’ di confusione fra l’interazione dei tuoi \ifboth e fratellini, e il valore di \bothfalse. Il costrutto condizionale è il seguente`
            \ifboth
            VERO
            \else
            FALSO
            \fi`Il comando \bothfalse non fa altro che rendere \ifboth equivalente a \iffalse; viceversa \bothtrue rende \ifboth equivalente a \iftrue

            Però credo che il tuo problema non sia solo quello di avere scambiato (se è corretto quello che ho capito) il ramo VERO con il ramo FALSO del costrutto, ma quello per il quale qualcosa contenuto in VERo o FALSO è fragile e quindi il costrutto non viene chiuso correttamente.
            In ArsTeXnica di aprile 2015 ho scritto un articolo I costrutti condizionali, descrivendone la fragilità, mostrando esempi, e indicando come irrobustirli. Puoi scaricare liberamante dalla sezione ArsTeXnica di questo forum.

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

        Go to top