- Questo topic ha 15 risposte, 5 partecipanti ed è stato aggiornato l'ultima volta 9 anni, 11 mesi fa da
OldClaudio.
-
CreatoreTopic
-
12 Aprile 2016 alle 20:15 #106047
-
CreatoreTopic
-
AutoreRisposte
-
-
12 Aprile 2016 alle 20:43 #106048::
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
-
13 Aprile 2016 alle 16:14 #106049
-
14 Aprile 2016 alle 4:26 #106050::
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.pdfE 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.
-
14 Aprile 2016 alle 14:48 #106051::
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}
`
-
11 Giugno 2016 alle 21:47 #106052
-
11 Giugno 2016 alle 21:49 #106053
-
10 Agosto 2016 alle 15:50 #106054::
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.pdfE 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.
-
11 Agosto 2016 alle 4:18 #106055::
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.pdfE 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.
-
11 Agosto 2016 alle 5:23 #106056::
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
ClaudioCiao
Claudio
-
11 Agosto 2016 alle 5:36 #106057::
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.
-
11 Agosto 2016 alle 6:47 #106058::
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
-
11 Agosto 2016 alle 16:19 #106059::
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.
-
11 Agosto 2016 alle 17:45 #106060::
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
-
29 Settembre 2016 alle 14:15 #106061::
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.texAgli 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.
-
30 Settembre 2016 alle 6:06 #106062::
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 \iftruePerò 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.
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.