Re: Il disegno programmato nell’Arte di scrivere con LaTeX

#72860
Up
0
Down
::

lorenzo.pantieri” post=83422Ciao a tutti. Alcuni dubbi.

1. Con TikZ i nodi “si fanno attraversare dalle linee”:
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\draw (1,1) node [circle,draw] {$A$}
— (2,2) node [circle,draw] {$B$};
\end{tikzpicture}`
Perché questa scelta? Per avere nodi che “non si facciano attraversare dalle linee” si può fare così:
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\node [circle,draw] (A) at (1,1) {$A$};
\node [circle,draw] (B) at (2,2) {$B$};

\draw (A) — (B);
\end{tikzpicture}
`
Esistono altri modi che non prevedano la definizione di quella sorta di etichette che sono (A) e (B)?

2. I codici
`\draw [fill=red,draw=red] (1,1) circle (0.5);`
e
`\fill [red] (1,1) circle (0.5);`
sono equivalenti?

3. Perché con la chiave scale viene riscalato il disegno, ma non il testo?
`\begin{tikzpicture} [scale=3]`

4. Come riprodurre con TikZ nel modo ottimale il disegnino seguente?

Grazie anticipate! 🙂

Partiamo dal punto 1.

In PGF l’entità fondamentale è il segmento [tt]path[/tt]: in prima fase il segmento viene costruito e in seguito usato (non ricordo la pagina, ma il manuale dice proprio così) perciò visto che TikZ è solo una sovrastruttura di PGF ecco spiegato perché anche i nodi possano essere definiti mentre si disenga un segmento.

Perché non vuoi avere dei nomi che identifichino i nodi? Sono estremamente utili non solo per non dover stare sempre a ripetere le coordinate, ma anche perché `
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\node [circle,draw] (A) at (1,1) {$A$};
\node [circle,draw] (B) at (2,2) {$B$};

\draw (1,1) — (2,2);
\end{tikzpicture}
` è sbagliato. Compilando capirai che un nodo ha intrinsecamente la proprietà di occupare un certo spazio, cosa che se effettui la connessione utilizzando direttamente le coordinate di posizione non ottieni. Nota che puoi anche assegnare degli alias oltre che etichette attraverso la chiave [tt]alias[/tt]. Per capire meglio cosa dico ecco un esempio in cui uno dei due nodi è più grande: `
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\node [circle,draw,alias=c] (A) at (1,1) {$A$};
\node [circle,draw,minimum size=1.5cm] (B) at (2,2) {$B$};

\draw (c) — (B);
\end{tikzpicture}
` In definitiva se non etichetti un nodo in qualche modo alla fine saranno dolori prima o poi.

Punto 2.

Sbagliato. Non del tutto sbagliato, però. Bisogna distinguere però due cose: le chiavi dentro le parentesi e i comandi.

Per quanto riguarda le chiavi, lo sbaglio è al 66.66% 😀 Infatti, la sintassi: `
\draw[red]…
` è equivalente a scrivere: `
\draw[draw=red,fill=red,text=red]
` contemporaneamente. Cioè: bordo del segmento, riempimento, testo. Un esempio:
`
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\draw[red] (1,1)–(2,1) node

{ciao};
\end{tikzpicture}
` è uguale a: `
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\draw[draw=red,fill=red,text=red] (1,1)–(2,1) node

{ciao};
\end{tikzpicture}
` I comandi invece, sono diversi. Infatti sono definiti come: `
\def\draw{\path[draw]}
\def\fill{\path[fill]}
` dove poi le opzioni draw e fill attivano i corrispettivi modi: `
\tikz@addmode{\tikz@mode@filltrue}%
\tikz@addmode{\tikz@mode@drawtrue}%
` Per farla breve se usi [tt]\fill[/tt] ti perdi il bordo del disegno. Esempio: `
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\fill[red] (1,1) circle (0.5);
\end{tikzpicture}
` confrontato con: `
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\draw[blue,fill=red] (1,1) circle (0.5);
\end{tikzpicture}
` Ma l’ultimo esempio è in tutto e per tutto uguale a: `
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\fill[red,draw=blue] (1,1) circle (0.5);
\end{tikzpicture}
` perché [tt]draw=blue[/tt] ha sostanzialmente sovrascritto le impostazioni classiche di [tt]\fill[/tt].

Punto 3.

L’opzione [tt]scale[/tt] scala solo le coordinate, mai il testo perché in genere tutte le trasformazioni si fanno solo sui segmenti. Per scalare il testo c’è l’apposita opzione [tt]transform shape[/tt].

Punto 4.

Ottimale? Ecco le linee guida:
1) disegnare gli assi, ma è facile: `
\draw[stealth-stealth] (0,-1)–(0,3) node

{$y$};
\draw[stealth-stealth] (-1,0)–(4,0) node[below]{$x$};
`
2) disegnare il punto P: `
\coordinate (O) at (0,0);
\coordinate (P) at (2,1);
\draw (O)–(P) node[circle,fill=black,inner sep=0.75pt, label=90:$P$]{};
`
3) creare l’angolo con il pacchetto tkz-euclide (vedi TikZ: Create right angle triangle with angle labels): `
\usepackage{tkz-euclide}
\usetkzobj{all}
—-
\coordinate (X) at (4,0);
\tkzMarkAngle[fill= gray,size=1.2cm,opacity=.4](X,O,P)
\tkzLabelAngle[pos = 0.75](X,O,P){$\alpha$}
`
4) creare la graffa con l’apposita libreria: `
\usetikzlibrary{decorations.pathreplacing}
—-
\draw[decorate,decoration={brace, raise=2pt}] (O)–(P) node[above left,midway]{$l$}; % fedele al disegno base
%\draw[decorate,decoration={brace, raise=2pt}] (O)–(P) node[above=2pt,midway,sloped]{$l$}; % a me piace più così
`

Codice finale: `
\documentclass[png,border=10pt,tikz]{standalone}

\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\usepackage{tkz-euclide}
\usetkzobj{all}

\begin{document}
\begin{tikzpicture}
\coordinate (O) at (0,0);
\coordinate (P) at (2,1);
\coordinate (X) at (4,0);
\draw[stealth-stealth] (0,-1)–(0,3) node

{$y$};
\draw[stealth-stealth] (-1,0)–(X) node[below]{$x$};
\draw (O)–(P) node[circle,fill=black,inner sep=0.75pt, label=90:$P$]{};
\tkzMarkAngle[fill= gray,size=1.2cm,opacity=.4](X,O,P)
\tkzLabelAngle[pos = 0.75](X,O,P){$\alpha$}
%\draw[decorate,decoration={brace, raise=2pt}] (O)–(P) node[above left,midway]{$l$};
\draw[decorate,decoration={brace, raise=2pt}] (O)–(P) node[above=2pt,midway,sloped]{$l$};
\end{tikzpicture}
\end{document}
`

Ciao
Claudio

Go to top