Risposte nei forum create
-
AutoreRisposte
-
16 Marzo 2013 alle 9:56 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72839::
Liverpool” post=83017Visto che nessuno l’ha detto, lo dico io: [tt]coordinate[/tt] non è altro che un nodo particolare, perciò gli si può attribuire direttamente un’etichetta tra le opzioni. Se i nodi ti servono solo per le etichette, allora puoi farne a meno, ad esempio così:
`\coordinate [label=below:$c_1$] (c1) at (1,0);`In effetti è vero: si veda TikZ: difference between \node and \coordinate? per maggiori dettagli.
In realtà, per automatizzare le cose si può esagerare un pochettino e fare sì che un nuovo comando di tipo nodo realizzi il tutto: `
\poligono[num vertici=4, poligono con etichette] {};
` La vera potenzialità di TikZ, infatti, sono le chiavi che garantiscono una personalizzazione estrema direi e la possibilità di raggruppare in chiavi parte del codice da svolgere. Ecco come avrei fatto io partendo da How to generate n points on a circumference and connect all of them while having constraints on the image size?: `
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,shapes.geometric} % required for the polygon shape% Disegnare la griglia
\pgfkeys{/tikz/.cd,
griglia x max/.initial=0,
griglia x max/.get=\grxmax,
griglia x max/.store in=\grxmax,
griglia y max/.initial=0,
griglia y max/.get=\grymax,
griglia y max/.store in=\grymax,
griglia x min/.initial=0,
griglia x min/.get=\grxmin,
griglia x min/.store in=\grxmin,
griglia y min/.initial=0,
griglia y min/.get=\grymin,
griglia y min/.store in=\grymin,
disegna griglia/.code={
\begin{scope}[draw opacity=0.3,text opacity=0.45 ]
\draw[help lines,xstep=1,ystep=1] (\grxmin,\grymin) grid (\grxmax,\grymax);
\pgfmathsetmacro\xstep{\grxmin+1}% da rivedere: se xmin è positivo fa casotto
\pgfmathsetmacro\ystep{\grymin+1}% da rivedere: se xmin è positivo fa casotto
\foreach \x[evaluate=\x as \xprint using int(\x)] in {\grxmin,\xstep,…,\grxmax}{
\node [anchor=north] at (\x,0) {\xprint};
}
\foreach \y[evaluate=\y as \yprint using int(\y)] in {\grymin,\ystep,…,\grymax}{
\node [anchor=east] at (0,\y) {\yprint};
}
\end{scope}
}
}% Il poligono
\pgfkeys{/tikz/.cd,
num vertici/.initial=6,
num vertici/.get=\vertices,
num vertici/.store in=\vertices,
raggio cerchio/.initial=3,
raggio cerchio/.get=\circleradius,
raggio cerchio/.store in=\circleradius,
angolo poligono/.initial=0,
angolo poligono/.get=\shiftshapeangle,
angolo poligono/.store in=\shiftshapeangle,
angolo etichette/.initial=0,
angolo etichette/.get=\shiftangle,
angolo etichette/.store in=\shiftangle,
at pos/.initial={(0,0)},
at pos/.get=\position,
at pos/.store in=\position,
colore etichette/.initial=black,
colore etichette/.get=\collabel,
colore etichette/.store in=\collabel,
colore poligono/.initial=black,
colore poligono/.get=\colshape,
colore poligono/.store in=\colshape,
colore cerchi/.initial=black,
colore cerchi/.get=\colpin,
colore cerchi/.store in=\colpin,
colore riempimento cerchi/.initial=white,
colore riempimento cerchi/.get=\colfillpin,
colore riempimento cerchi/.store in=\colfillpin,
prefisso etichetta/.initial=x,
prefisso etichetta/.get=\prefixlabel,
prefisso etichetta/.store in=\prefixlabel,
}% un alias di \node
\makeatletter
\def\poligono{\tikz@path@overlay{node}}
\makeatother\pgfkeys{/tikz/poligono con etichette/.code={
\pgfmathsetmacro\halfcircleradius{\circleradius/2}
\node [draw=\colshape,
regular polygon,
regular polygon sides=\vertices,
minimum size=\circleradius cm,
name={vertex set},
shape border rotate=\shiftshapeangle] at \position {};
\foreach \x in {1,…,\vertices}{
\node[draw,circle, inner sep=1pt,\colpin, fill=\colfillpin] at (vertex set.corner \x) {};
\pgfmathparse{\shiftangle-360*(\x-1)/ \vertices}
\node at ($(vertex set)+(\pgfmathresult:\halfcircleradius)$)
[label={[font=\small,\collabel]\pgfmathresult:$\prefixlabel_\x$}]{};
}
}
}\begin{document}
% Personalizzo la griglia
\tikzset{griglia/.style={
griglia x min=-3,
griglia x max=7,
griglia y min=-3,
griglia y max=3,
disegna griglia
}
}
\begin{tikzpicture}[griglia]
% i valori iniziali sono usati per le chiavi
\poligono[at pos={(0,0)}, poligono con etichette] {};% valori personalizzati
\poligono[num vertici=4,
raggio cerchio=2,
at pos={(5,0)},
angolo poligono=45,
angolo etichette=90,
colore poligono=red,
colore etichette=red,
colore riempimento cerchi=black,
prefisso etichetta=c,
poligono con etichette] {};
\end{tikzpicture}
\end{document}
` Ho aggiunto a quel codice originale la possibilità di disegnare una griglia automaticamente a partire, anche qui, da una personalizzazione iniziale. Ovviamente, in vista dell’articolo non entrerei nel dettaglio di come creare le chiavi e compagnia: questa risposta va intesa come cosa può fare TikZ anche per un disegno semplice come quello voluto. Anche perché, avendo pronto il codice via [tt]pgfkeys[/tt] credo sia molto intuitivo, da parte utente, scrivere solo`
\poligono[num vertici=4,
raggio cerchio=2,
at pos={(5,0)},
angolo poligono=45,
angolo etichette=90,
colore poligono=red,
colore etichette=red,
colore riempimento cerchi=black,
prefisso etichetta=c,
poligono con etichette] {};
` ed avere tutto pronto.Il risultato:
[attachment=631]Senzanome_2013-03-16.jpg[/attachment]
Ciao
Claudio
Attachments:
You must be logged in to view attached files.14 Marzo 2013 alle 19:37 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72835::lorenzo.pantieri” post=82961Ciao a tutti. Con TikZ una cosa si può fare in più e più modi. Per esempio, voglio disegnare un quadrato con ciascun vertice contrassegnato da un cerchietto ed etichettato. Il codice che userei io è molto ingenuo:
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\coordinate (c1) at (1,0);
\coordinate (c2) at (0,1);
\coordinate (c3) at (1,2);
\coordinate (c4) at (2,1);\node at (c1) [below] {$c_1$};
\node at (c2){$c_2$};
\node at (c3) [above] {$c_3$};
\node at (c4){$c_4$};
\draw (c1) circle (2pt);
\draw (c2) circle (2pt);
\draw (c3) circle (2pt);
\draw (c4) circle (2pt);\draw (c1) — (c2) — (c3) — (c4) — cycle;
\end{tikzpicture}`
Insomma:
1. definisco sulla tela le 4 coordinate, una alla volta ;
2. inserisco, in corrispondenza di queste coordinate, le 4 etichette, una alla volta;
3. disegno i 4 cerchietti, uno alla volta (sempre usando le coordinate);
4. disegno il quadrato (sempre usando le coordinate).Comprensibilissimo, ma tutte quelle istruzioni ripetute sono bruttine.
Ecco un codice più elegante:
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\path (1,0) coordinate (c1)
(0,1) coordinate (c2)
(1,2) coordinate (c3)
(2,1) coordinate (c4);
\draw (c1) — (c2) — (c3) — (c4) — cycle;
\draw (c1) circle (2pt)
(c2) circle (2pt)
(c3) circle (2pt)
(c4) circle (2pt)
(c1) node [below] {$c_1$}
(c2) node{$c_2$}
(c3) node [above] {$c_3$}
(c4) node{$c_4$};
\end{tikzpicture} `
Quello che si fa qui è:
1. si traccia un “cammino invisibile” con il solo scopo di definire le coordinate dei vertici;
2. si disegna il quadrato (usando le coordinate);
3. si disegnano cerchietti ed etichette, usando un’unica istruzione \draw.Questo secondo codice è elegante, ma lo trovo meno intuitivo. Mi date qualche delucidazione in più?
In particolare, è vero che se devo disegnare due oggetti diversi posso sempre farlo con un’unica istruzione \draw?
Per esempio.
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\draw (0,0) rectangle (1,1)
(0,2) rectangle (1,3)
(2,2) rectangle (3,3)
(2,0) rectangle (3,1);
\end{tikzpicture}
`
è uguale al più goffo (ma per me più intuitivo)
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\draw (0,0) rectangle (1,1);
\draw (0,2) rectangle (1,3);
\draw (2,2) rectangle (3,3);
\draw (2,0) rectangle (3,1);
\end{tikzpicture}`
Mi illuminate?Grazie!
Partendo dal fondo: si è la stessa cosa in termini di risultato, tempi di compilazione e peso del pdf. I due documenti: `
\documentclass{article}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\draw (0,0) rectangle (1,1)
(0,2) rectangle (1,3)
(2,2) rectangle (3,3)
(2,0) rectangle (3,1);
\end{tikzpicture}
\end{document}
` e `
\documentclass{article}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,3);
\draw (0,0) rectangle (1,1);
\draw (0,2) rectangle (1,3);
\draw (2,2) rectangle (3,3);
\draw (2,0) rectangle (3,1);
\end{tikzpicture}
\end{document}
` mi forniscono 8468 Byte entrambi.Passando al primo quesito. Userei un bel [tt]foreach[/tt] con cui si fa decisamente prima: `
\documentclass{article}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\coordinate (c1) at (1,0);
\coordinate (c2) at (0,1);
\coordinate (c3) at (1,2);
\coordinate (c4) at (2,1);\node at (c1) [below] {$c_1$};
\node at (c2){$c_2$};
\node at (c3) [above] {$c_3$};
\node at (c4){$c_4$};
\foreach \x in {1,…,4}{
\draw (c\x) circle (2pt);
}\draw (c1) — (c2) — (c3) — (c4) — cycle;
\end{tikzpicture}
\end{document}
` visto che l’operazione disegno dei cerchi era ripetuta. La macro [tt]\x[/tt] assume via via i valori nella lista (da 1 a 4: i tre puntini servono per velocizzare la scrittura) perciò tutto torna viste le definizioni delle coordinate. Poi, potresti dire: perché non applicarlo anche alla definizione delle coordinate? Ecco come: `
\documentclass{article}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\foreach \posizione/\x in {{1,0/1},{0,1/2},{1,2/3},{2,1/4}}{
\coordinate (c\x) at (\posizione);
}\node at (c1) [below] {$c_1$};
\node at (c2){$c_2$};
\node at (c3) [above] {$c_3$};
\node at (c4){$c_4$};
\foreach \x in {1,…,4}{
\draw (c\x) circle (2pt);
}\draw (c1) — (c2) — (c3) — (c4) — cycle;
\end{tikzpicture}
\end{document}
` Occorre proteggere fra [tt]{ }[/tt] ogni elemento della lista altrimenti le virgole fra coordinate vengono confuse con quelle di demarcazione dei vari elementi.In realtà però, il costrutto [tt]foreach[/tt] è dotato di una comodissima chiave [tt]count[/tt] che conta gli elementi nella lista, quindi non c’è motivo di usare due variabili esplicite: `
\documentclass{article}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\foreach \posizione[count=\x] in {{1,0},{0,1},{1,2},{2,1}}{
\coordinate (c\x) at (\posizione);
}\node at (c1) [below] {$c_1$};
\node at (c2){$c_2$};
\node at (c3) [above] {$c_3$};
\node at (c4){$c_4$};
\foreach \x in {1,…,4}{
\draw (c\x) circle (2pt);
}\draw (c1) — (c2) — (c3) — (c4) — cycle;
\end{tikzpicture}
\end{document}
` funziona bene ugualmente. Siccome poi si è capito il sistema, applichiamolo anche ai nodi: `
\documentclass{article}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\foreach \posizione[count=\x] in {{1,0},{0,1},{1,2},{2,1}}{
\coordinate (c\x) at (\posizione);
}\foreach \posizione[count=\x] in {below,left,above,right}{
\node at (c\x) [\posizione] {$c_\x$};
}
\foreach \x in {1,…,4}{
\draw (c\x) circle (2pt);
}\draw (c1) — (c2) — (c3) — (c4) — cycle;
\end{tikzpicture}
\end{document}
` Nota che si possono tranquillamente riutilizzare le variabili di prima e il [tt]foreach[/tt] tratta benissimo anche liste non numeriche (chiavi in questo caso). Siccome poi con un minimo di conoscenze matematiche si può tranquillamente calcolare la sequenza numerica (1,2,3,4,1) del percorso, ecco che un’altra delle opzioni di [tt]foreach[/tt] è di aiuto: `
\documentclass{article}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\foreach \posizione[count=\x] in {{1,0},{0,1},{1,2},{2,1}}{
\coordinate (c\x) at (\posizione);
}\foreach \posizione[count=\x] in {below,left,above,right}{
\node at (c\x) [\posizione] {$c_\x$};
}
\foreach \x in {1,…,4}{
\draw (c\x) circle (2pt);
}\foreach \x[evaluate=\x as \nextx using {int(mod(\x,4)+1)}] in {1,…,4}{
\draw (c\x) — (c\nextx);
}
\end{tikzpicture}
\end{document}
` Ovviamente tutti questi codici forniscono lo stesso risultato 🙂Nota, a me non piace molto avere un solo [tt]path[/tt] con miliardi di istruzioni, ma è una preferenza personale; dipende tutto da quante istruzioni devi scrivere: se sono 4 o 5 va bene, se sono di più è indubbio: meglio usare il [tt]foreach[/tt].
Ciao
Claudio
14 Marzo 2013 alle 19:09 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72834::lorenzo.pantieri” post=82922Allora cari, il mio studio di TikZ procede, con soddisfazione. “Programmare un disegno” (con TikZ) è un po’ strano, all’inizio. Ma ci si abitua presto, e in fondo anche “programmare un testo” (con LaTeX) richiede un po’ di spirito di adattamento…
Userò questo topic per proporre i miei dubbi.
Questo è il primo:
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (5,4);
\draw [fill=yellow] (2,1) — (2.75,1) arc (0:63:0.75) — cycle;
\draw [fill=yellow] (3,3) — (2.25,3) arc (180:243:0.75) — cycle;
\node at (2,1) [above right] {$\alpha$};
\node at (3,3) [below left] {$\alpha$};
\draw [thick] (0,1) node{$C$} — (5,1) node
{$D$};
\draw [thick] (0,3) node{$A$} — (5,3) node
{$B$};
\draw [thick] (1.5,0) node [below] {$E$} — (3.5,4) node [above] {$F$};
\end{tikzpicture}`
Ho tratto ispirazione da
http://www.texample.net/media/tikz/examples/PDF/parallel-lines.pdf
di cui trovo il sorgente
http://www.texample.net/media/tikz/examples/TEX/parallel-lines.tex
troppo complicato per i miei gusti.Il problema del mio codice è, ovviamente, che non sono soddisfatto del posizionamento delle lettere greche. Che cosa c’è che non va nel mio codice? Come migliorarlo (senza complicarlo troppo!)?
Grazie.
P.S.
Ah, quel “63” l’ho ottenuto con un po’ di geometria analitica, praticamente indispensabile se si usa TikZ…
Senza cambiare troppe cose io utilizzerei la sintassi di [tt]label[/tt] (manuale pagina 194 e seguenti) che permette di specificare l’angolo di posizionamento: devi però togliere [tt]$\alpha$[/tt] come argomento finale altrimenti salta fuori due volte.
Codice nuovo:`
\documentclass{article}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (5,4);
\draw [fill=yellow] (2,1) — (2.75,1) arc (0:63:0.75) — cycle;
\draw [fill=yellow] (3,3) — (2.25,3) arc (180:243:0.75) — cycle;
\node at (2,1) [label=30:$\alpha$] {};
\node at (3,3) [label=210:$\alpha$] {};
\draw [thick] (0,1) node{$C$} — (5,1) node
{$D$};
\draw [thick] (0,3) node{$A$} — (5,3) node
{$B$};
\draw [thick] (1.5,0) node [below] {$E$} — (3.5,4) node [above] {$F$};
\end{tikzpicture}
\end{document}
` In alternativa, ma non fornisce lo stesso risultato, puoi specificare la distanza di [tt]above right[/tt] o [tt]below left[/tt]: `
\documentclass{article}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (5,4);
\draw [fill=yellow] (2,1) — (2.75,1) arc (0:63:0.75) — cycle;
\draw [fill=yellow] (3,3) — (2.25,3) arc (180:243:0.75) — cycle;
\node at (2,1) [above right=0.125cm] {$\alpha$};
\node at (3,3) [below left=0.125cm] {$\alpha$};
\draw [thick] (0,1) node{$C$} — (5,1) node
{$D$};
\draw [thick] (0,3) node{$A$} — (5,3) node
{$B$};
\draw [thick] (1.5,0) node [below] {$E$} — (3.5,4) node [above] {$F$};
\end{tikzpicture}
\end{document}
`Ciao
Claudio
::logos” post=82923Ho visto le figure, ma quei solidi sono un po’ troppo semplici per quel che devo fare io: avrei bisogno almeno almeno di fare anche il dodecaedro e l’icosaedro. Anche un “pallone da calcio” con pentagoni ed esagoni mi servirebbe, ma non è indispensabile come i solidi platonici.
Ho trovato anche questa discussione su un dodecaedro: mi sembra che il pacchetto per PSTricks sia una buona soluzione.
logos” post=82923Riguardo a PSTricks, lo usavo cinque o sei anni fa, ma non ricordo più come si usa e mi sa anche che sia una tragedia con il PDF.
Se compili con [tt]xelatex[/tt] non dovresti avere problemi.
Ciao
Claudio
::
Un esempio dovrebbe essere chiarificatore (ho usato sia il pacchetto listings come suggerivo che [tt]\textt[/tt] come suggeriva Enrico): `
\documentclass{beamer}
\usepackage{lmodern}
\usepackage{listings}
\lstset{basicstyle=\ttfamily}
\usetheme{EastLansing}
\setbeamercolor{block title alerted}{parent=palette tertiary}
\setbeamercolor{block body alerted}{parent=palette primary}\begin{document}
\begin{frame}[fragile]{Codici}
\begin{alertblock}{Obbiettivo}
Mostrare l'uso dei comandi con overlay specifications.
\end{alertblock}
\uncover<1->{\lstinline!System.out.println(“Hello World”); – uncover!}\visible<2->{\lstinline!System.out.println(“Hello World”); – visible!}
\onslide<3->{\lstinline!System.out.println(“Hello World”); – onslide!}
\uncover<1->{\texttt{System.out.println(“Hello World”); – uncover}}
\visible<2->{\texttt{System.out.println(“Hello World”); – visible}}
\onslide<3->{\texttt{System.out.println(“Hello World”); – onslide}}
\end{frame}
\end{document}
` Il risultato:[attachment=624]pr_2013-03-14.gif[/attachment]
Ciao
Claudio
Attachments:
You must be logged in to view attached files.::logos” post=82918Salve a tutti,
Scusatemi per il disturbo: ho bisogno di realizzare alcuni poliedri in LaTeX per preparare un compito di geometria solida. Oltre ai cinque solidi platonici, ho bisogno di disegnare qualche piccolo altro poliedro (piramidi, prismi) per fare delle domande nel compito. Sono tuttavia troppi disegni per farli a mano con TikZ. Dunque mi domando se esiste qualche pacchetto che permetta di disegnare agilmente i poliedri.
Spero che possiate aiutarmi!
Ciao,
Andrea
Probabilmente in questo caso, se vuoi un pacchetto la soluzione migliore è usare [tt]pst-solides3d[/tt] che personalmente non conosco. L’ho visto in una di queste risposte. Se non vuoi avere a che fare con la famiglia PSTricks, l’unica alternativa è utilizzare la risposta di Alain Matthes (ultima in basso).
Ciao
Claudio
::gmd86″ post=82905Sto preparando delle slide in cui mostro il codice sorgente.
Mi sono accorto che il comando \uncover ed il comando \verb fanno a pugni
`\uncover<4->{ \verb!codice!}`
In modalità presentazione mi da errore.
È possibile risovere tale problema?
Grazie in anticipo.
Io userei il pacchetto [tt]listing[/tt] e quindi `\uncover<4->{\lstinline!codice!}` che dovrebbe funzionare. Comunque, l’opzione [tt]fragile[/tt] che suggerisce @ansys è sempre necessaria quando inserisci del codice.
Ciao
Claudio
::Marco87″ post=82879Ciao a tutti,
a causa della tesi sono alle prese con un disegno che vuole riprodurre un certo provino in calcestruzzo. Ho guardato sulla documentazione di [tt]TikZ[/tt] e, naturalmente, non esiste un pattern definito per questo. Quello che ho fatto io è stato di creare un “motivo” da ripetere mediante l’uso di [tt]\foreach[/tt] e poi da ritagliare con [tt]\clip,[/tt] in questo modo:
`\documentclass{standalone}\usepackage{tikz}
\usetikzlibrary{calc}\begin{document}
\begin{tikzpicture}
\clip (1.5,1.5) circle (1.5cm);\def\latoCls{1}
\foreach \y in {0,…,3}
\foreach \x in {0,…,3}
{
\fill [gray!35] ($(0,0)+(\x,\y)$) rectangle +(\latoCls,\latoCls);
\fill [gray] ($(.25,.25)+(\x,\y)$) — +(.05,0) — +(-.025,.05);
\fill [gray] ($(.25,.75)+(\x,\y)$) — ++(.03,-.06) — ++(.06,.09);
\fill [gray] ($(.73,.55)+(\x,\y)$) — ++(.07,-.07) — ++(.07,.09);
\fill [gray] ($(.125,.125)+(\x,\y)$) circle (.21pt);
\fill [gray] ($(.1,.48)+(\x,\y)$) circle (.21pt);
\fill [gray] ($(.115,.75)+(\x,\y)$) circle (.21pt);
\fill [gray] ($(.625,.125)+(\x,\y)$) circle (.21pt);
\fill [gray] ($(.5,.5)+(\x,\y)$) circle (.21pt);
\fill [gray] ($(.7,.81)+(\x,\y)$) circle (.21pt);
\fill [gray] ($(.85,.24)+(\x,\y)$) circle (.21pt);
}
\end{tikzpicture}\end{document}`
La mia domanda è: è possibile, invece di usare questo escamotage (anche poco elegante mi pare), definire un nuovo pattern? O è una cosa improponibile? Vi ringrazio per qualsiasi suggerimento abbiate da darmi.Grazie e buona giornata,
Marco.L’idea del nuovo pattern in se è buona, purtroppo però credo tu debba fare in modo di avere casualità nella generazione di cerchi e triangoli (impurità? non sono sicuro sia il termine tecnico però le chiamerò così lo stesso) e i pattern si comportano decisamente male con i numeri casuali (generalmente non ottieni mai il risultato voluto, al massimo inventi qualcosa di nuovo come il pattern tegole vedi qui 😀 ).
Ecco che in casi come questi il buon [tt]path picture[/tt] toglie le castagne dal fuoco. Il discorso è che si vuole riempire lo sfondo di una qualsiasi forma e le impurità devono distribuirsi più o meno in modo casuale a prescindere se è un quadrato o un cerchio o chissà cosa. Con [tt]path picture[/tt] tutto ciò che viene disegnato non eccede mai il bordo ([tt]bounding box[/tt]) della forma ed, essendo un nodo, ha le solite ancore utili per caratterizzare il riempimento.
Io ho pensato di:
1) generare un certo numero di impurità (meno triangoli e più cerchi);
2) posizionare ogni impurità in questo modo: a) generando due numeri casuali compresi fra 0 e 1 come offset b) generando due numeri casuali compresi fra -1 e 1 come coefficiente, c) definire la posizione x,y come somma fra il centro della bounding box e il prodotto fra offset e coefficiente (per il termine x ho ancora moltiplicato per 2 – spiego bene dopo perché).Il codice: `
\documentclass{standalone}\usepackage{tikz}
\usetikzlibrary{calc}\begin{document}
\tikzset{calcestruzzo/.style={
path picture={
\foreach \trignum in {1,…,10}{
\pgfmathrnd
\pgfmathsetmacro\xoff\pgfmathresult
\pgfmathrnd
\pgfmathsetmacro\yoff\pgfmathresult
\pgfmathrand
\pgfmathsetmacro\xcoeff\pgfmathresult
\pgfmathrand
\pgfmathsetmacro\ycoeff\pgfmathresult
\fill [gray] ($(2*\xoff*\xcoeff,\yoff*\ycoeff)+(path picture bounding box.center)$)
— +(.05,0) — +(-.025,.05);
}
\foreach \circlenum in {1,…,25}{
\pgfmathrnd
\pgfmathsetmacro\xoff\pgfmathresult
\pgfmathrnd
\pgfmathsetmacro\yoff\pgfmathresult
\pgfmathrand
\pgfmathsetmacro\xcoeff\pgfmathresult
\pgfmathrand
\pgfmathsetmacro\ycoeff\pgfmathresult
\fill [gray] ($(2*\xoff*\xcoeff,\yoff*\ycoeff)+(path picture bounding box.center)$)
circle (.21pt);
}
}
}
}
\begin{tikzpicture}
\fill[gray!35,calcestruzzo] (0,0) circle (0.5cm);
\fill[gray!35,calcestruzzo] (0,1)–(3,2)–(4,0.75)–cycle;
\fill[gray!35,calcestruzzo] (1,0)–(3,-0.5)[rounded corners=2pt]–(4,0.5)–(2,0.65)–cycle;
\end{tikzpicture}
\end{document}
` Il risultato:[attachment=622]pr_2013-03-12.jpg[/attachment]
A questo punto si noti che in realtà non è che tutti i cerchi e triangoli appaiano effettivamente nel riempimento, di qualsiasi forma: ciò è dovuto al fatto che il numero casuale generato probabilmente è troppo alto e viene “tagliato”. Se si eliminasse il 2* ciò non accadrebbe più, ma tutte le impurità sarebbero troppo concentrate non dando assolutamente l’idea giusta. Chiaramente il discorso cambia ad ogni minuto di compilazione: PGF ha un seed basato su \time*\year perciò ad ogni minuto i numeri casuali differiscono e quindi le impurità cambiano posizione.
P.S. Lascio a chi vuole la possibilità di migliorare il codice creando apposite chiavi per personalizzare almeno: a) numero di impurità (una chiave per tipo), b) il colore dell’impurità.
EDIT: c’era un errore grave che ho corretto. Gli offsets sono generati con numeri casuali fra ([tt]\pgfmathrand[/tt]) -1 e 1 perché in questo modo nella forma possono ricoprire l’intera area (se fosse stato fra 0 e 1 gli aggregati (grazie Marco per la correzione 🙂 ) si sarebbero disposti solo nel “quadrante positivo”).
Ciao
Claudio
Attachments:
You must be logged in to view attached files.11 Marzo 2013 alle 17:38 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72828::lorenzo.pantieri” post=82860Solo gli stupidi non cambiano mai idea, dicono.
Beh, ho cambiato idea: un capitolo su TikZ nell’Arte ci deve essere. E ci sarà, appena l’avrò studiato a dovere (ho appena iniziato).
Giusto un paio di considerazioni.
1. Se si desidera comporre un lavoro di qualità superlativa, fare i propri disegni programmati TikZ/pgfplots è irrinunciabile. Punto.
2. Per imparare a usare TikZ ci vuole tempo. Non è detto che il mio laureando (il lettore ideale dell’Arte) ce l’abbia. In questo caso usare un software WYSIWYG per fare i disegni e includerli successivamente con LaTeX è un compromesso onorevole. Questo va detto con chiarezza.
Bene, mi rimetto al lavoro. L’idea è questa: studio TikZ, quando sono in difficoltà chiedo sul forum, appena sono a buon punto pubblico un articolo (il titolo sarà qualcosa come “L’Arte (un po’) esoterica di disegnare con LaTeX”), e quando l’articolo sarà sufficientemente maturo (grazie ai vostri contributi e al lavoro di Tommaso, che da un paio di anni a questa parte è il vero autore dell’Arte) diventerà un nuovo capitolo dell’Arte.
A presto.
Ottima notizia 🙂
Condivido pienamente i punti citati, specialmente il secondo. Ma occorre dire anche che dipende molto dal tipo di tesi (scientifica o umanistica) e dal tipo di disegni che si devono realizzare: un conto è dover disegnare grafi, alberi, diagrammi di flusso o schemi semplici, ma il discorso cambia se si deve riprodurre una centrale (è solo un esempio per dare l’idea). Non che non si possa fare, http://www.texample.net/tikz/examples/pressurized-water-reactor/ ma chiaramente occorre molto più tempo che non quello necessario a disegnare un diagramma di flusso. Il messaggio è: cose semplici sono realizzabili in poco tempo perché il manuale ha molti esempi da cui si può ricopiare il codice e altri ancora se ne possono trovare su http://www.texample.net/tikz/examples/.
Un consiglio: senza entrare troppo nel dettaglio, potresti anche accennare che oggi numerosi pacchetti sono basati su TikZ; trovi la lista completa su http://www.ctan.org/tex-archive/graphics/pgf/contrib/
E probabilmente presto ce ne sarà uno nuovo… dico bene Tommaso 😉 ?
Ciao
Claudio
::
Marco,come dicevo, la parte di codice “importante” non è interamente mio, anzi. È una delle tante “magie” di Jake (per rendere l’idea, in TeX.SX, è il top scorer per tikz-pgf) che ho semplicemente adattato allo scopo, ossia fornire un riferimento arbitrariamente posizionato su segmenti. Non che il codice iniziale non lo facesse, ma creava disambiguità quando si trattava di “usare” i riferimenti: in pratica introducendo un numero arbitrario di markers n, si poteva fare rifermento al secondo con “use marker id=2”; il problema sorge quando ci sono diversi segmenti ognuno con diversi marker: come fare ad identificare esattamente a quale segmento appartiene “use marker id=2” se ci sono tre segmenti tutti suddivisi con lo stesso numero di marker? Inserendo un nodo con una propria label semplifica di molto le cose (così ho distinto x,y e z). Notare che ora, per modificare la divisione della piramide è sufficiente modificare la posizione dei markers (da 0.4 a 0.5) e automaticamente si spostano le label con le percentuali (con la rotazione sembra che cifre e – si sovrappongano.. 😕 ), le linee di divisione e la colorazione.
Lorenzo,
più che ostico, direi che ci vuole pazienza quando si tratta di creare figure abbastanza complesse. Come hai visto, per l’esempio con cerchio e triangolo le cose sono semplici mentre in questo caso meno, ma dal codice di Marco si vede come con un po’ di pazienza, definendo bene tutte le posizioni di coordinate e nodi si riesca benissimo lo stesso.
Ciao
Claudio
::lorenzo.pantieri” post=82859`\begin{tikzpicture}
\draw [fill=cyan!20] (0,0) circle(1);
\draw (-1.732, -1) node [below left] {allenamento} —
(1.732, -1) node [below right] {riposo} —
(0, 2) node [above] {alimentazione} — cycle;
\end{tikzpicture}`
Che ne dite, ragazzi? 😉Codice compatto, semplice e che non richiede librerie extra.
Studio TikZ da neanche un giorno, e già mi piace… 🙂
Ottimo 🙂 Nota che con TikZ non esiste una strada, ma si possono usare diversi stili. Ho notato, ad esempio, che Marco e Francesco generalmente prima definiscono le posizioni dei nodi prima attraverso il comando [tt]\coordinate[/tt]: `
\coordinate at (0,0) (origine);
\node[opzioni] (label) at (origine) {Testo};
` Io, invece, preferisco avere singoli nodi: `
\node[opzioni] (label) at (0,0) {Testo};
` Ma si può anche fare come hai fatto tu, ossia inserendo i nodi direttamente mentre si disegna il triangolo.Ciao
Claudio
::frappask” post=82831Salve,
ho un problema con TorinoTh, il modo per fare la presentazione-beamer formato tesi.
Una volta installato, non dovrebbe funzionare semplicemente scrivendo:\documentclass{beamer}
\usetheme{TorinoTh}
\author{}
\rel{}
\title{}
\ateneo{}
\date{}\begin{document}
\titlepageframeMi da questo errore:
! Undefined control sequence.
\reserved@b…ions #1[{\beamer@torinoth@language
}][{}]\noexpand \@pkgexten…Vi ringrazio molto per l’aiuto!
francesco
Occorre sempre almeno specificare il logo e la lingua; un vero esempio minimo è: `
\documentclass{beamer}
\usetheme[titlepagelogo=logopolito,language=italian]{TorinoTh}
\author{}
\rel{}
\title{}
\ateneo{}
\date{}\begin{document}
\titlepageframe\end{document}
` Probabilmente devo documentare meglio questi passaggi 🙂Ciao
Claudio
::lorenzo.pantieri” post=82804Ciao a tutti. Anche se in questo periodo non sto studiando LaTeX (mi limito a usarlo per i miei documenti), ho (finalmente, dirà qualcuno…) maturato la consapevolezza che imparare il disegno programmato con LaTeX sia essenziale, se si desidera un documento finito di altissima qualità.
Appena avrò tempo a disposizione lo dedicherò a imparare TikZ. L’Arte del futuro colmerà l’attuale, vistosa, lacuna e conterrà un corposo capitolo su TikZ.
Per il momento, però, ho bisogno di voi.
Qualcuno sa suggerirmi il codice per riprodurre questo disegno?

Grazie anticipate,
L.Ottima domanda… disegnare oggetti 3D con TikZ non è affatto facile, ma con un po’ di ingengo si possono fare cose interessanti.
Il problema principale che vedo è come fare per dividere la piramide all’interno: inserire le etichette o colorare lo sfondo sono cose del tutto secondarie una volta effettuata la divisione. A tal proposito ho semi-riciclato il codice usato in hf-tikz per “contraddistinguere” punti di un segmento (basato a sua volta su How to draw tangent line of an arbitrary point on a path in TikZ): quello presentato qui è meno automatico perché si deve inserire il nome del marcatore oltre che alla posizione. Ogni segmento, di qualsiasi lunghezza, può essere contrassegnato con la libreria apposita con posizioni che vanno da 0 a 1 (inizio e fine del segmento rispettivamente) e quel codice sfrutta proprio questa filosofia.
Il codice: `
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds,calc,decorations.markings}% Codice basato su hf-tikz e la risposta di Jake in:
% http://tex.stackexchange.com/questions/25928/how-to-draw-tangent-line-of-an-arbitrary-point-on-a-path-in-tikz/25940#25940\newif\ifshowmarkers
\pgfkeys{/tikz/show markers/.is if=showmarkers}
\pgfkeys{/tikz/show markers=false}\pgfkeys{/tikz/.cd,%
marker color/.initial=blue,
marker color/.get=\colmarker,
marker color/.store in=\colmarker,
marker size/.initial=1pt,
marker size/.get=\sizemarker,
marker size/.store in=\sizemarker,
}\tikzset{
mark at/.style args={#1 named #2}{
decoration={
markings,
mark=
at position #1
with
{
\coordinate (marker point-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,0pt);
\coordinate (marker unit vector-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (1,0pt);
\coordinate (marker orthogonal unit vector-\pgfkeysvalueof{/pgf/decoration/mark info/sequence number}) at (0pt,1);
\node[coordinate] (#2) at (0pt,0pt){};
\ifshowmarkers% conditional to make them appear just when invoked
\draw[draw=none,fill=\colmarker,radius=\sizemarker] (0,0) circle ;
\else
\relax
\fi
}
},
postaction=decorate
},
use marker id/.style={
shift=(marker point-#1),
x=(marker unit vector-#1),
y=(marker orthogonal unit vector-#1)
},
use marker id/.default=1,
}\begin{document}
\begin{tikzpicture}[marker size=2pt]
\draw[show markers,mark at=0.4 named x1,mark at=0.675 named x2] (0,0) –(2,5);
\draw[show markers,mark at=0.4 named y1,mark at=0.675 named y2] (3.25,-0.25) –(2,5);
\draw[show markers,mark at=0.4 named z1,mark at=0.675 named z2] (4.5,0.25) –(2,5);% Base
\draw(0,0)–(3.25,-0.25)–(4.5,0.25);% Connessioni intermedie:
% meglio fare pezzo per pezzo così da annotare il punto intermedio
% della piramide in luce per inserire le percentuali
\draw[mark at=0.5 named inter-x1] (x1)–(y1);
\draw[mark at=0.5 named inter-x2] (x2)–(y2);\draw(z1)–(y1);
\draw(z2)–(y2);% Etichette con percentuali
\node[above=0.5cm,rotate=-3.5] at (inter-x1) {20-30\%};
\node[below=0.5cm,rotate=-3.5] at (inter-x1) {60-70\%};
\node[above=0.1cm,rotate=-3.5] at (inter-x2) {10\%};% Coloriamo la piramide usando le coordinate note
\begin{scope}[on background layer]
\fill[blue!30!cyan!30](x1) — (y1) — (3.25,-0.25)–(0,0)–cycle;
\fill[blue!50!cyan!40](z1) — (y1) — (3.25,-0.25)–(4.5,0.25)–cycle;\fill[green!30!lime!30](x2) — (y2) — (2,5) — cycle;
\fill[green!60!lime!40](z2) — (y2) — (2,5) — cycle;\tikzset{etichette/.style={
inner sep=0pt,
anchor=east,
align=center,
font=\footnotesize,
}
}% Altre etichette
\path let \p1=(0,0), \p2=(x1) in
node[etichette,text width=2cm]
at (\x1,0.5*\y2) {Metabolismo basale};
\path let \p1=(x1), \p2=(x2) in
node[etichette] at (\x1,0.8*\y2) {Attività Fisica};
\path let \p1=(x2), \p2=(2,5) in
node[etichette,text width=1.75cm] at (\x1,0.875*\y2) {TID termogenesi indotta degli alimenti};
\end{scope}
\end{tikzpicture}\end{document}
` Nel disegno finale si rimuovano i [tt]show markers[/tt] usati come debug per capire dove i marcatori vengono posizionati.Il risultato:
[attachment=619]Senzanome_2013-03-10.jpg[/attachment]
Questa è una grande idea per il prossimo tipo di diagramma in smartdiagram 😉
Ciao
Claudio
Attachments:
You must be logged in to view attached files.::Matteo_01″ post=82748
Ciao e benvenuto 🙂
Per primissima cosa potresti mostrare il codice (compilabile, quindi con [tt]\documentclass[/tt] e il frame incriminato) che hai utilizzato, non necessariamente con le immagini che servono alla tua presentazione. Per “immagini esempio” puoi utilizzare il pacchetto mwe.
Ciao
ClaudioGrazie:)
allora non sono molto esperto….io in pratica ho questa roba qui
`\documentclass{beamer}
\mode{\usetheme{Warsaw}
\setbeamercovered{transparent}}
\usepackage[british]{babel}% or whatever
\usepackage[latin1]{inputenc}
%\usepackage[italian]{babel}
% or whatever
\usepackage{tabularx}
\usepackage{amscd}
\usepackage{times}
\usepackage[T1]{fontenc}
\usepackage{graphicx}`e devo ad esempio compilare questa slide qui
`\begin{frame}
\frametitle{Titolo}
{\color{red}\textbf{Titolo}}\\
\pause
\begin{scatola}
\emph{BLABLABLA}
\end{scatola}
\pause
\begin{figure}
\includegraphics[width=12cm]{elastico1.jpg}\\
\end{figure}
\end{frame}`Premetto che non ho idea di cosa sia l’ambiente [tt]scatola[/tt] perciò tutto va preso con le pinze e ho anche ipotizzato che tu volessi prima mostrare il testo di scatola non in evidenza, poi in evidenza e poi l’immagine.
Al di là di quanto ti ha già detto @OldClaudio sulle figure mobili in presentazioni, aggiungo che il pacchetto [tt]graphicx[/tt] viene già caricato da Beamer quindi la sua chiamata è inutile e [tt]\mode[/tt] credo tu lo abbia usato inappropriatamente (se vuoi solo fare una presentazione puoi ometterlo, ma consulta la documentazione sezione 21.3 Details on Modes). Inoltre, ho ipotizzato tu volessi il titolo in rosso e, onestamente, è molto più facile ottenerlo di come hai fatto tu.
Passiamo al codice vero e proprio: ho commentato tutto e ho inserito due esempi. Il primo illustra come non procedere, il secondo è il metodo raccomandato in quanto tiene conto del jumping effect (vedi Beamer: righe che saltano). `
\documentclass{beamer}
% Puoi anche fare a meno di \mode se hai in mente di fare solo una presentazione “normale”
\usetheme{Warsaw}
\setbeamercovered{transparent}
\usepackage[british]{babel}% or whatever
\usepackage[latin1]{inputenc}
%\usepackage[italian]{babel}
% or whatever
\usepackage{tabularx}
\usepackage{amscd}
\usepackage{times}
\usepackage[T1]{fontenc}
%\usepackage{graphicx} % viene già caricato da Beamer% NOn so cosa sia scatola
\newenvironment{scatola}{}{\vspace*{1.25\baselineskip}}\usepackage{mwe}
\begin{document}
\setbeamercolor{frametitle}{fg=red}
\begin{frame}{Titolo}
%\frametitle{Titolo}\\ %-> NON PUOI DARE UN \\ DOPO IL FRAMETITLE
%{\color{red}\textbf{Titolo}}
% se vuoi il titolo rosso ci sono altri metodi
\pause
\begin{scatola}
\emph{BLABLABLA}
\end{scatola}%la successiva riga vuota è obbligatoria (prova senza per vedere cosa succede)%\begin{figure} % inutile inserirlo
\includegraphics<3->[scale=0.6]{example-image}
%\end{figure} % inutile inserirlo
\end{frame}\begin{frame}{Titolo}
\begin{overlayarea}{\textwidth}{0.8\textheight}
\pause
\begin{scatola}
\emph{BLABLABLA}
\end{scatola}%la successiva riga vuota è obbligatoria (prova senza per vedere cosa succede)\includegraphics<3->[scale=0.6]{example-image}
\end{overlayarea}
\end{frame}
\end{document}
` Il risultato:[attachment=614]pr.gif[/attachment]
Ciao
Claudio
Attachments:
You must be logged in to view attached files. -
AutoreRisposte