Risposte nei forum create
-
AutoreRisposte
-
22 Aprile 2012 alle 7:09 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72610::
lorenzo.pantieri” post=71867L’Arte andrà aggiornata sicuramente: (almeno) una menzione al disegno programmato va fatta, avevate ragione.
Resto invece ancora scettico sul codice per produrre grafici qualitativi, come il mio baricentro e i mie secchi.Sono contento. Ad onor del vero va detto che anche con Mathematica si può ottenere lo stesso grafico, aggiungendo un po’ di opzioni a [tt]Plot3D[/tt] (e qui ti accorgeresti che anche la sintassi di Mathematica non è che sia tanto intuitiva). Inoltre non tutto quello che si può fare (/semplicemente) con un software di calcolo si può fare (/altrettanto semplicemente) con pgfplots. Ad esempio al momento non mi risulta che si possano aggiungere effetti di luce.
Questo(*) l’ho fatto con Matlab aggiungendo più punti luce (di colore diverso) ed attribuendo un certo grado di riflessione alla superficie:[attachment=229]d2.jpg[/attachment]
Si nota subito che le etichette sono in Arial, che la griglia è appena visibile e che lo sfondo non è trasparente (per questo è necessario un software di fotoritocco).
In conclusione, (1) penso che per la maggior parte dei grafici pgfplots vada più che bene, (2) che in qualche caso si possono importare i dati elaborati da un software di calcolo, (3) altrimenti si può ricorrere senza indugio alla potenza di Mathematica & c.Passiamo al disegno qualitativo. @OldClaudio, hai ragione: come ho detto andavo di fretta e ho semplicemente cercato di riprodurre la figura senza nemmeno vedere di che si parla (l’ho chiamato secchio solo perché mi ricordava la forma del secchio). Penso che il codice si possa migliorare molto. Secondo me qualcuno sarebbe addirittura in grado di scrivere un comando dalla sintassi simile a quella di TikZ tipo:
`
\secchio [fill=gray, fill ratio=0.9] at (0,0);
`ma io non ne sono capace (se qualcuno vuole approfittare mostrare qui come si fa è il benvenuto).
Sono d’accordo con Lorenzo quando dice che per i grafici qualitativi i software specifici sono ancora una valida alternativa, anche se ci sono disegni e disegni. Per un semplice triangolo, rettangolo o cerchio o qualcosa di semplicemente composto TikZ va più che bene. Almeno una paginetta per illustrare i comandi fondamentali (draw, circle, node, rectangle, arc) ce la metterei.
Con TikZ (o pict2e) c’è una questione che bisogna inevitabilmente affrontare: è necessario conoscere almeno le basi della geometria analitica e non è detto che tutti la conoscano o se la ricordino. Per il disegno dei secchi la maggior parte del tempo l’ho persa nel ricavare le coordinate del pelo libero del liquido in funzione della percentuale di riempimento (prerequisito: equazione della retta per due punti). Se avessi usato Inkscape avrei dovuto seplicemente cliccare col mouse sui vertici del trapezio…Ciao
P.S.: @OldClaudio hai stimolato la mia curiosità verso pict2e. Ora gli do un’occhiata.
(*) Per salvaguardare i diritti d’autore ho sostituito l’immagine originale con quella del “sombrero di Matlab”.
Attachments:
You must be logged in to view attached files.21 Aprile 2012 alle 16:44 in risposta a: Il disegno programmato nell’Arte di scrivere con LaTeX #72607::
Questo l’ho fatto veramente in fretta perché devo uscire. Sono sicuro che si può fare di meglio, ma ribadisco che io TikZ non lo conosco bene. Il comando secchio richiede quattro argomenti. I primi due sono le cordinate dell’apice, il terzo è la percentuale di riempimento in valore naturale e il quarto è il colore di riempimento. In questo modo basta definirlo una volta e si può riempire e svuotare a piacere 8)
`
\documentclass{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{patterns}
\usetikzlibrary{calc}\begin{document}
\begin{tikzpicture}
\def\secchio(#1,#2,#3,#4){ % x, y, percentuale di riempimento e colore
\begin{scope}[shift={(#1,#2)}]
\draw (0,0) +(-1,-0.5) arc [start angle=180, end angle=0, x radius=1, y radius=0.5];
\fill[#4] (-0.5,-2.5) — (0.5,-2.5) — ($({0.5*(#3+1))},{2*#3-2.5})$) — ($({-0.5*(#3+1)},{2*#3-2.5})$) — cycle;
\draw (-1,-0.5) — (-0.5,-2.5) — (0.5,-2.5) — (1,-0.5) — cycle;
\end{scope}}
\secchio(0,0,0.5,gray)
\secchio(4,0,0.9,black!10)
\secchio(4,-4,0,white)
\draw (0,0) — (0,1) — (4,1) — (4,0);
\draw(3,-0.5) — (3,-4.5);
\draw(5,-0.5) — (5,-4.5);
\fill[draw, pattern=north east lines] (2,1) — (1.8,0.7) — (2.2,0.7) — cycle;
\end{tikzpicture}
\end{document}`
@Lorenzo, capirai che realizzare la figura completa è solo una questione di tempo e di geometria analitica.Buona serata
[attachment=234]2.png[/attachment]
Attachments:
You must be logged in to view attached files.::lorenzo.pantieri” post=71840Domanda: che cosa si deve fare con TikZ per avere risultati analoghi?
Presto detto:
`
\documentclass{standalone}
\usepackage{pgfplots}\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot3 [surf, samples=50, domain=-2*pi:2*pi, colormap/cool]
{sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)};
\end{axis}
\end{tikzpicture}
\end{document}`
Ovviamente si può migliorare, come hai visto nel grafico precedente. La sfida continua…
Comunque, come ti ha detto @robitex, le potenzialità di calcolo di Mathematica sono maggiori di quelle di pgfplots. Non ci vedrei niente di male nel generare i dati con un software di calcolo ed importarli in pgfplots per trattarli con lo stile di LaTeX, cosa che faccio abitualmente. Se vuoi ti faccio vedere come si fa nell’esempio del sombrero.N.B: anche questo l’ho fatto con pgfplots, non TikZ, perché se la vede lui a disegnare gli assi e le etichette ed è più semplice e facilmente configurabile (per esempio puoi assegnare una dimensione alla figura, cosa che con TikZ non è altrettanto facile. Pgfplots, però serve solo per diagrammi di vario tipo.
[attachment=221]Sombrero.png[/attachment]
Attachments:
You must be logged in to view attached files.::robitex” post=71798Del resto lo suggerii io stesso in questo lontano post.
Scusa, hai ragione! Non me lo ricordavo proprio… E sì che l’avevo letto! Si vede che la memoria comincia a fare acqua da tutte le parti 🙁
Ciao
::illinguista1972″ post=71817Visto che qui c’è chi ne sa molto, sul disegno, direi che si potrebbero raccogliere le forze e scrivere una guida tematica che illustri il funzionamento di base di TikZ (che mi pare essere il top di gamma) o PS-Triks o come si scrive. Spiegando le cose elementari sapute le quali si può partire per produrre disegni più complicati in autonomia.
Se alludi a me, non me la sento di scrivere una guida su TikZ, anche perché non lo conosco bene, come ho già detto in passato. Sicuramente Claudio @cfiandra e Roberto @robitex e qualcun altro ne sanno molto di più (e che dire di @OldClaudio con picture e pict2e e il postscript?). D’altra parte, di guide più o meno semplici sulla grafica programmata in giro già ce ne sono. Qui si discuteva dell’opportunità di aggiungere qualche pagina all’Arte. Progetto che secondo me rimane ancora valido.
E’ sorto però un inconveniente. Mi sembra di capire, dai discorsi che sono emersi, che né tu né Lorenzo conosciate bene la sintassi dei pacchetti in questione. Allora la domanda è: chi dovrebbe scrivere queste pagine? Secondo me affidare a qualcun altro il lavoro rischia di rovinare il carattere della guida, a meno di una vostra attenta supervisione e revisione. Perciò la questione, effettivamente, si complica.Ciao
P.S.: la richiesta di una sezione dedicata al disegno era stata già avanzata in passato, ma data l’attenzione alle segnalazioni degli utenti, incomincio a pensare che dall’altra parte del monitor non ci sia nessuno 🙁
::lorenzo.pantieri” post=71802Elementare e intuitivo, dici?
Mi spiego meglio. Il codice necessario per realizzare il primo grafico è solo
`
\begin{tikzpicture}
\begin{axis}[axis lines=middle]
\foreach \n in {1,4}
\addplot[samples=500] {\n*max(1-abs(1-\n*x),0)};
\end{axis}
\end{tikzpicture}`
che mi sembra veramente abbastanza elementare ed intuitivo. Il resto serve solo per realizzarlo ricalcando il tuo, ma non è affatto necessario.
::
Che te ne pare?`
\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{pgfplots}\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[width=0.43\textwidth, height=5cm, axis lines=middle, clip=false, axis on top,
xmin=-2.2, xmax=4, ymin=0, ymax=5, xtick={-2,…,3}, ytick={0,…,4},
xlabel={$x$}, xlabel style=below, ylabel={$u_n(x)$}, ylabel style=left,
cycle list={dashed, solid}]
\pgfplotsset{legend style={font=\scriptsize, draw=none, fill=none}}
\addplot[fill=LightBlue!50, draw=none, mark=none, forget plot] % serve solo per lo sfondo colorato
coordinates {(-2.6,-1) (4.5,-1) (4.5,5.5) (-2.6,5.5)};
\foreach \n in {1,4}
{\addplot+[samples=500, domain=-2.2:4, thick] {\n*max(1-abs(1-\n*x),0)};
\addlegendentryexpanded{$n=\n$}}
\end{axis}
\end{tikzpicture}
\hspace{0.04\textwidth}
\begin{tikzpicture}
\begin{axis}[width=0.43\textwidth, height=5cm, axis lines=middle, clip=false, axis on top,
xmin=-3.2, xmax=3.5, ymin=0, ymax=2, xtick={-3,…,3}, ytick={0,0.5,…,1.75},
xlabel={$x$}, xlabel style=below, ylabel={$u_n(x)$}, ylabel style=left,
cycle list={dashed, solid}]
\pgfplotsset{legend style={font=\scriptsize, draw=none, fill=none}}
\addplot[fill=LightBlue!50, draw=none, mark=none, forget plot] % serve solo per lo sfondo colorato
coordinates {(-3.6, -0.4) (4,-0.4) (4,2.2) (-3.6,2.2)};
\foreach \n in {1,3}
{\addplot+[samples=500, domain=-3.2:3.5, thick] {\n*exp(-(\n*x)^2)/sqrt(pi)};
\addlegendentryexpanded{$n=\n$}}
\end{axis}
\end{tikzpicture}
\end{figure}
\end{document}`
Come avrai visto, il codice per il grafico è veramente elementare e intuitivo. L’unica difficoltà che ho incontrato è stato lo sfondo colorato, che non avevo mai fatto e che ho realizzato con una soluzione ruspante. Magari qualcun altro sa fare di meglio.La sfida è cominciata. Ora postaci tu il codice di Mathematica…
[attachment=220]1.png[/attachment]
Attachments:
You must be logged in to view attached files.::lorenzo.pantieri” post=71782Quanto tempo e quante righe di codice ci vogliono?
Già! Quanto tempo… Ma non si membra che con LaTeX abbiamo mai fatto una questione di tempo o di righe con altri programmi. Altrimenti dovremmo chiederci: quanto tempo ci vuole per farlo con Word? Quante righe di codice di preambolo servono prima di poter iniziare a scrivere qualcosa di sensato? Quanto tempo c’è voluto per imparare i comandi di LaTeX prima di ottenere qualcosa di decente? Ne abbiamo fatto una questione di qualità e nel tuo discorso non se ne fa proprio cenno (soprattutto nell’immagine tridimensionale di Mathematica 😛 ).
Anch’io, per studio e per lavoro, ho imparato Matlab e Mathematica. Nella mia tesi li ho usati tutti e due, più un programma di grafica vettoriale e uno di rendering per modellazione tridimensionale, perché all’epoca non conoscevo ancora TikZ e compagni. L’effetto è che nelle immagini (raster) incluse, la perdita di qualità si nota, oltre alla differente formattazione del testo. Ora probabilmente proverei a fare tutto (o quasi) con LaTeX. Ci metterei più tempo, ma sarei probabilmente più soddisfatto del risultato.Altra questione. Per lavoro utilizzo un simulatore professionale (costo intorno ai 2500 $, se non ricordo male). Questo simulatore genera diagrammi cartesiani ma, non ci crederai, non ha alcuna funzione seria di esportazione delle immagini se non un “copia gli appunti”. Ti lascio immaginare la qualità dei risultati. Ha però una funzione di esportazione dei dati in un file di testo. Per me è molto più efficiente esportare i valori per importarli in pgfplots, piuttosto che incollare il file d’immagine scadente nel documento. Qui non c’è storia.
Vorrei accettare la tua sfida, ma penso di essere fuori target: non sono un principiante e non sono un esperto di disegno, perciò come interpreteremmo i miei risultati? E poi sono un perfezionista, perciò chissà quante ore ci metterei per rifare i tuoi disegni (ma succederebbe anche con il programma di grafica vettoriale)…
Ciao
::illinguista1972″ post=71754Se si tratta di raccogliere le notizie di lilypond-book in un documento unico, posso provarci, mi ci vorrà un po’ di tempo.
Allora non ti preoccupare. Pensavo avessi già le idee “ben chiare” su cosa fare, ma se ti devi mettere a studiare per conto terzi, non è giusto che te lo si chieda: a questo punto non vedo perché non dovrei farlo da solo.
Grazie per la disponibilità.Comunque non sapevo dell’avversione di Lorenzo per la grafica programmata, altrimenti non avrei tirato fuori l’argomento. Come dice @OldClaudio, è molto più difficile fare una presentazione con beamer, che un diagramma cartesiano con pgfplots; e aggiungo che, almeno per me, è molto più frequente la necessità di realizzare un grafico che non una presentazione. Fine della storia.
::OldClaudio” post=71737Secondo me è giusto che nell’arte sia detto che listings è incompatibile con Unicode
Va bene così. Lo chiedevo perché ho un sorgente utf8 che usa listings per un codice minuscolo e non avevo riscontrato nessuna incompatibilità, ma guarda caso non ci sono commenti. D’altra parte sul manuale non mi sembra che dica qualcosa in merito.
Grazie per la dritta: avrei convertito da latin1 a utf8 un documento lunghissimo, per poi scoprire che i codici mi avrebbero dato errore 🙁Ciao
::
Tommaso, io pgfplots lo so usare abbastanza bene (TikZ molto meno), perciò il discorso non lo facevo per me, ma perché penso che l’Arte sarebbe più completa così. Non dico un’intera sezione dedicata al disegno, ma solo un paragrafo dedicato alla realizzazione di grafici. Sono d’accordo anch’io che le potenzialità di TikZ siano troppo vaste da rientrare in una guida di base, per questo ho citato pgfplots che è molto più semplice. Basterebbe dire: <> con un paio di esempi senza entrare nemmeno nel dettaglio della spiegazione dei comandi. < >. In modo che chi abbia la necessità di inserire dei grafici nel proprio documento sappia che c’è anche questa strada. Una domanda: nell’Arte dite che [tt]listings[/tt] è incompatibile con Unicode. Come fate a saperlo?
Per Tommaso: mi piacerebbe che scrivessi una guida sull’integrazione tra Lilypond e LaTeX. Non credo che ce ne siano altre in giro e sarebbe veramente preziosa.
Ciao
::
Cari Lorenzo e Tommaso 🙂 Sull’Arte c’è un intero capitolo dedicato alla matematica, ma non c’è nemmeno un paragrafo dedicato alla grafica vettoriale. Visto che chi tratta di matematica non è raro che abbia la necessità di tracciare grafici, non sarebbe il caso di aggiungere un paragrafo, non dico dedicato a TikZ, ma almeno a pgfplots con un paio di esempi (uno di funzione generata direttamente dal pacchetto e l’altro di file importato)? Qualcosa di molto semplice, solo per introdurre il pacchetto.P.S.: lo so che sono rompiscatole 😛
Ciao
::
Per impostazione, Matlab nasconde le maniglie della griglia, perciò bisogna prima svelarle, poi è possibile modificarne le proprietà oppure estrarne le coordinate per poterle importare in pgfplots, come ti hanno già suggerito. Questa seconda soluzione è di solito preferibile, per la migliore resa grafica, ma in questo caso richiede un bel po’ di passaggi aggiuntivi e non me la sento di consigliartela. Per rispondere alla tua domanda, segui questo codice Matlab:
`
set(0, 'ShowHiddenHandles', 'on') % svela le maniglie nascoste
hf = get(gcf, 'Children'); % ottiene tutte le maniglie della figura
hg = get(hf(3), 'Children'); % ottiene tutte le maniglie ai vari elementi della griglia (etichette e linee)
for i = 1:length(hg) % processa un elemento della griglia per volta
if strcmp(get(hg(i), 'Type'), 'line') % se l'elemento è una linea…
set(hg(i), 'LineWidth', 1) % … ne modifica lo spessore (inizialmente 0.5)
end
end`Penso che i commenti siano abbastanza chiari. Per provare altri spessori di linea, devi sostituire “1” con un altro numero. Se invece vuoi uno stile di linea differente, devi sostituire la terz’ultima riga con (ad esempio):
`set(hg(i), 'LineStyle', '–') % … ne modifica lo stile (inizialmente ':')`Se invece vuoi avere accesso alle coordinate per usare pgfplots, devi estrarre i valori di ‘XData’ e ‘YData’ per le linee e i primi due elementi di ‘Position’ per le etichette, ma il lavoro si complica e meriterebbe una risposta a parte.Le alternative possibili sono:
1) modificare direttamente il file EPS aprendolo con un editor di testo qualunque. Non sono un esperto di EPS, ma prova a modificare questa riga:
`/DO { [0.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef`[tt]0.5[/tt] è la “lunghezza” del “punto” che tu vuoi modificare, [tt]4[/tt] è la distanza tra i punti. Per esempio, se scrivi`/DO { [4 dpi2point mul 4 dpi2point mul] 0 setdash } bdef`avrai una linea tratteggiata con la lunghezza del tratto pari alla distanza tra due tratti. Puoi scegliere le proporzioni che più ti piacciono.2) utilizzare lo script [tt]matlab2tikz[/tt] (vedi altrove su questo forum), che fa il lavoro sporco per te, ma in questo caso non funziona correttamente (mancano le etichette della griglia).
In ogni caso, dopo aver installato lo script nel percorso di Matlab ed aver generato la figura, scrivi`matlab2tikz('luogo.tikz')` nella finestra di comando. Copia il file generato nella cartella di lavoro di LaTeX, carica [tt]pgfplots[/tt] nel preambolo del documento e, nel punto in cui vuoi inserire il grafico, scrivi:`\begin{tikzpicture}
\input{luogo.tikz}
\end{tikzpicture}`Anche in questo caso, puoi modificare le dimensioni dei tratti agendo sul file [tt].tikz[/tt], che si apre normalmente con il tuo editor. Dovresti cercare le righe con la parola [tt]dotted[/tt] ed agire su quelle. Puoi modificare la dimensione dei punti sostituendo ad esempio con
`dotted, line width=1pt,` oppure adoperare altri tipi di linea (manuale di pgf, par. 15.3.2 pag. 157).
Puoi anche modificare tutte le righe in una sola volta, ridefinendo lo stile dotted, ad esempio, in questo modo:
`\begin{tikzpicture}
\tikzstyle{dotted}=[line width=1pt];
\input{rlocus.tikz}
\end{tikzpicture}`o
`\begin{tikzpicture}
\tikzstyle{dotted}=[dashed];
\input{rlocus.tikz}
\end{tikzpicture}`
CiaoP.S.: poi facci sapere che strada hai scelto e com’è andata
-
AutoreRisposte