- Questo topic ha 279 risposte, 15 partecipanti ed è stato aggiornato l'ultima volta 13 anni, 5 mesi fa da
lorenzo.pantieri.
-
CreatoreTopic
-
21 Aprile 2012 alle 15:28 #72605::
Raccogliendo il suggerimento di @robitex, continuo qui la discussione iniziata qui.
Che faccio? Cancello l’ultimo intervento nell’altra conversazione?
P.S.: Roberto, ma il codice l’ho già inserito prima. Intendevo il codice per passare da Mathematica a pgfplots…Esempio 1:
`
\documentclass{article}
\usepackage[svgnames]{xcolor}
\usepackage{pgfplots}\begin{document}
\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}[width=0.43\textwidth, height=4cm, 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}, every axis/.append style={font=\scriptsize}]
\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=4cm, 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}, every axis/.append style={font=\scriptsize}]
\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}`[attachment=233]1b.jpg[/attachment]
Esempio 2:
`
\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}`[attachment=222]Sombrero_2012-04-21.png[/attachment]
P.S.: non ho capito perché il sito non vuole accettare un png di 23 KiB dicendo che è troppo grande, mentre ne accetta tranquillamente uno da 88 KiB.
Attachments:
You must be logged in to view attached files. -
CreatoreTopic
-
AutoreRisposte
-
-
21 Aprile 2012 alle 16:25 #72606::
Liverpool” post=71851Raccogliendo il suggerimento di @robitex, continuo qui la discussione iniziata qui.
Che faccio? Cancello l’ultimo intervento nell’altra conversazione?
P.S.: Roberto, ma il codice l’ho già inserito prima. Intendevo il codice per passare da Mathematica a pgfplots…Se si tratta di codice per Mathematica, non ci interessa naturalmente…
R.
-
21 Aprile 2012 alle 16:44 #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. -
21 Aprile 2012 alle 20:06 #72608::
Avevo messo questa risposta nell’altro filone; la ricpio qui.Tanto di cappello al sombrero di @Liverpool! Belli anche i tuoi secchi. Ma, @Liverpool hai reso perfettamante i sechhi con i manici ellitticie; Lorenzo hai disegnato i secchi con i manici ellittici; Perché? Io non ho mai visto un secchio con il manico ellittico…
Ecco le figure dei secchi; Vorrei sottolineare che anche se sembra che io abbia disegnato 4 figure, come in effetti appaiono sulla pagina, in realtà ho solo disegnato il primo, dopo averlo schizzato su carta millimetrata per leggere le coordinate; cosa che è sempre meglio fare, anche se si usano altri software che sono capaci di proporzionare gli oggetti in modo automatico; con picture è una cosa, direi, necessaria, poi cambiare scala è un giochetto che si fa cambiando localmente il valore di \unitlength; dopo aver fatto il primo disegno, in dieci minuti comprese le macro LaTeX per disegnare gli oggetti, gli altri mi sono costati il tempo di un copia e incolla e la modifica di qualche coordinata.
Naturalmente sto parlando di LaTeX2e, quindi dell’uso del pacchetto pict2e per adattare le capacità di LaTeX a quelle dei nuovi motori di composizione, con i comandi descritti da Lamport, e con qualche comando in più, offerto gratis da chi ha realizzato pict2e; e LaTeX2e permette di definire nuovi comandi, quindi l’ho usato allo scopo per non perdere tempo a ricopiare ogni volta i comandi dei disegni dei secchi, dell’acqua e della sabbia. Non ho fatto un unico comando come ha fatto @Liverpool con tiks, ma si potrebbe fare anche con pict2e; ho deliberatamente separato il contenuto dal contenitore per rendere il codice più chiaro, anche se meno efficiente.
Come si può vedere i comandi sono più o meno lo stesso numero di quelli che sarebbe necessario usare con tikz (un po’ di più, ma poco); e il disegno è fortemente strutturato come mostrano i commenti.
`
\documentclass{article}
\usepackage{xcolor}
\usepackage{pict2e}
\newcommand{\secchio}{% riferimento: il centro del manico
\put(0,0){%
\put(0,-0.75){\arc[0,180]{0.75}}
\polygon(-0.75,-0.75)(-0.5,-2.75)(0.5,-2.75)(0.75,-0.75)
}
}
\newcommand{\sabbia}{% riferimento: il centro del manico
\put(0,0){%
{\color{darkgray!60!white}\polygon*(-0.625,-1.75)(-0.5,-2.75)(0.5,-2.75)(0.625,-1.75)}}
}
\newcommand{\acquapiena}{% riferimento: il centro del manico
\put(0,0){%
{\color{lightgray}\polygon*(-0.6875,-1.25)(-0.5,-2.75)(0.5,-2.75)(0.6875,-1.25)}}
}
\newcommand{\mezzaacqua}{% riferimento: il centro del manico
\put(0,0){%
{\color{lightgray}\polygon*(-0.625,-1.75)(-0.5,-2.75)(0.5,-2.75)(0.625,-1.75)}}
}
\begin{document}
Ad un braccio di una robusta bilancia \dots\ di sabbia appeso all'altro braccio.
\begin{figure}[!ht]\centering
\unitlength=5mm
\begin{picture}(6.5,6.75)(-3.25,-6.75)\thicklines
% Perno
\put(0,0){\polygon*(0,0)(-0.3,-0.5)(0.3,-0.5)}
% bilancere
\polyline(-2.5,-0.5)(-2.5,0)(2.5,0)(2.5,-0.5)
% secchio con sabbia
\put(-2.5,-0.5){\sabbia}
\put(-2.5,-0.5){\secchio}
% secchio con acqua
\put(2.5,-0.5){\acquapiena}
\put(2.5,-0.5){\secchio}
% secchio vuoto
\put(2.5,-4){\secchio}
% tiranti
\thinlines
\Line(1.75,-1.25)(1.75,-4.75)
\Line(3.25,-1.25)(3.25,-4.75)
\end{picture}
\end{figure}Galilei si aspettava che\dots
Con sorpresa di tutti i presenti \dots\ e, naturalmente, anche dopo (vedi fig.~6.4).
\begin{figure}
\unitlength=5mm
\begin{picture}(6.5,6.75)(-3.25,-6.75)\thicklines
% Perno
\put(0,0){\polygon*(0,0)(-0.3,-0.5)(0.3,-0.5)}
% bilancere
\polyline(-2.5,-0.75)(-2.5,-0.25)(2.5,0.25)(2.5,-0.25)
% secchio con sabbia
\put(-2.5,-0.75){\sabbia}
\put(-2.5,-0.75){\secchio}
% secchio con acqua
\put(2.5,-0.25){\acquapiena}
\put(2.5,-0.25){\secchio}
% secchio vuoto
\put(2.5,-3.75){\secchio}
% tiranti
\thinlines
\Line(1.75,-1)(1.75,-4.5)
\Line(3.25,-1)(3.25,-4.5)
{\color{lightgray}% gruppo di colore grigio chiaro
% Posizione inziale del bilancere
\Line(-2.5,0)(2.5,0)
% Acqua che scende
\put(2.5,-3){\polygon*(-0.15,0)(-0.15,-2)(0.15,-2)(0.15,0)}% riferimento: centro del fondo del secchio
}
\end{picture}
\hfill
\begin{picture}(6.5,6.75)(-3.25,-6.75)\thicklines
% Perno
\put(0,0){\polygon*(0,0)(-0.3,-0.5)(0.3,-0.5)}
% bilancere
\polyline(-2.5,-0.5)(-2.5,0)(2.5,0)(2.5,-0.5)
% secchio con sabbia
\put(-2.5,-0.5){\sabbia}
\put(-2.5,-0.5){\secchio}
% secchio con meta' acqua
\put(2.5,-0.5){\mezzaacqua}
\put(2.5,-0.5){\secchio}
% secchio con metà acqua
\put(2.5,-4){\mezzaacqua}
\put(2.5,-4){\secchio}
% tiranti
\thinlines
\Line(1.75,-1.25)(1.75,-4.75)
\Line(3.25,-1.25)(3.25,-4.75)
% Acqua che scende
\put(2.5,-3.25){\color{lightgray}\polygon*(-0.15,0)(-0.15,-2.5)(0.15,-2.5)(0.15,0)}% riferimento: centro del fondo del secchio
\end{picture}
\hfill
\begin{picture}(6.5,6.75)(-3.25,-6.75)\thicklines
% Perno
\put(0,0){\polygon*(0,0)(-0.3,-0.5)(0.3,-0.5)}
% bilancere
\polyline(-2.5,-0.5)(-2.5,0)(2.5,0)(2.5,-0.5)
% secchio con sabbia
\put(-2.5,-0.5){\sabbia}
\put(-2.5,-0.5){\secchio}
% secchio vuoto
\put(2.5,-0.5){\secchio}
% secchio pieno d'acqua
\put(2.5,-4){\acquapiena}
\put(2.5,-4){\secchio}
% tiranti
\thinlines
\Line(1.75,-1.25)(1.75,-4.75)
\Line(3.25,-1.25)(3.25,-4.75)
\end{picture}\caption{L'inatteso comportamento osservato disorienta Galilei, che non riesce a trovare una spiegazione soddisfacente.}
\end{figure}\end{document}
`Io non so se con OmniGrafle ci si mette meno tempo, ma le operazioni per creare il disegno non possono venire commentate, perché il disegno esce come risultato finale, non come una costruzione progressiva. quindi in caso di modifiche, non ostante l’interattività con quanto si può vedere sullo schermo, bisogna sostanzialmente ricominciare da capo.
Certo picture esteso con pict2e non costa un euro, mentre Omnigraffle e simili programmi da disegno non integrati con LaTeX, di solito costano, specialmente se sono per il Mac.
È chiaro che il mio esercizio raccoglie solo la sfida, ma non è valido per confrontarlo con il tempo che ci metterebbe un principiante, che per altro deve leggere solo una ventina di pagine di documentazione.
Vorrei aggiungere ancora un dettaglio un po’ off topic, ma non tanto: a suo tempo usavo e facevo usare i miei studenti il programma PSpice per l’analisi dei circuiti, con la relativa produzione dei grafici, delle risposte in frequenza, eccetera.
Il programma gratuito per gli studenti conteneva anche una interfaccia grafica per disegnare il circuito di cui si voleva eseguire l’analisi; Io non ho mai usato questa interfaccia proprio per il fatto che dopo aver disegnato il circuito lavorando solo colo mouse,se si voleva fare qualsiasi modifica/correzione era necessario o agire con l’interfaccia grafica ricominciando da zero, oppure agire sul file descrittivo in termini di codice di programma, sul quale era necessario conoscere la sintassi di ogni comando per poter eseguire non solo l’introduzione o la sostituzione dei componenti, ma per assegnare i parametri di funzionamento. Il linguaggio era completamente diverso dai vari markup dei programmi del sistema TeX o dei sui plugin da disegno, siano essi picture o tiks o pstricks o pgfplots o quel che è, ma l’idea è la stessa; il programma si corregge molto più facilmente del suo risultato finito.Ai tempi di LaTeX 209, quando non esisteva nemmeno pstricks o pdflatex, mi ero creato un plugin per disegnare i circuiti elettronici per i miei libri; tra codice e commento non ero lontano da circa 10 000 righe di codice … ma disegnavo dei bellissimi circuiti, e i miei collaboratori volevano usarlo anche loro; non avevo l’abitudine di scrivere il manuale per l’utente (in fondo l’utente per il quale l’avevo disegnato ero io stesso) ma con pazienza gliel’ho insegnato; loro sono stati i prima a concordare che il tempo necessario per disegnare qualunque circuito era confrontabile con quello necessario usando interfacce grafiche, ma che il tempo di correzione era infinitamente minore.
Questo è un argomento che mi scordo sempre di citare, ma è il punto di forza del disegno programmato.
[attachment=227]Secchi_2012-04-22.pdf[/attachment]
Attachments:
You must be logged in to view attached files. -
22 Aprile 2012 alle 4:28 #72609::
OldClaudio” post=71863Tanto di cappello al sombrero di @Liverpool!
Beh, che dire? La sfida è stata accolta e i risultati sono stupefacenti (per me). Mi riferisco al sombrero disegnato da Liverpool:
a) il risultato estetico è superbo;
b) si hanno tutti i pro nel non dover usare un software esterno (per esempio, se si carica nel preambolo un pacchetto che modifica i font, il disegno viene aggiornato di conseguenza);
c) non c’è bisogno di metter mano al portafogli per comprare un software commerciale;
d) il codice è (relativamente) semplice, intuitivo, elegante.
`\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}`
Bisogna prenderci la mano, certo, ma vale lo stesso per Mathematica (e analoghi).Ora si tratta di capire quanto ci mette un principiante a padroneggiare pgfplots. Appena ho un attimo mi metto a studiare e vedo quanto ci metto per produrre grafici “decenti”. Ho in mente grafici bi- e tri-dimensionali, anche dati con un parametro e dati “per punti”, scrivendo qualcosa sugli assi coordinati. Niente di terribile, solo le esigenze minime per scrivere una tesi scientifica.
Questa parte della sfida, dicevo, è conclusa e vinta (da parte vostra). L’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. Intendiamoci, avete dimostrato che se uno è esperto, col disegno programmato ci si riesce. Ma non sono convinto che quello sia l’approccio migliore, il codice è davvero complicato. Penso ancora che per cose di questo genere sia più comodo, per un utente “normale”, lavorare a colpi di mouse. Ne riparleremo.
Grazie a tutti quelli che sono intervenuti.
A presto, per ora.
-
22 Aprile 2012 alle 7:09 #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. -
22 Aprile 2012 alle 8:27 #72611::
Il tuo codice per tikz:
`
\secchio [fill=gray, fill ratio=0.9] at (0,0);
`
non sarebbe molto diverso dal codice (che non ho allegato, ma che ho scritto — non è adatto ai principianti) di pict2e che mi permette di scrivere
`
\put(0,0){\secchio{0.9}{gray}}
`Il codice non è adatto ai principianti perché pict2e non permette di accedere ai suoi comandi interni di calcolo (benché un paio li abbia scritti io); nella fattispecie la geometria analitica non mi ha richiesto più di trenta secondi, ma lavorare un modo efficiente senza ricorrere ad altri pacchetti per eseguire i calcoli con numeri fratti mi ha richiesto una mezz’oretta; dico “senza ricorrere ad altri pacchetti esterni” perché si potrebbe ricorrere al pacchetto calc. ma lì ci sarebbe un altro manuale da studiare per il nostro principiante. Il paragrafo Expressions di etex.pdf è solo una pagina, ma credo che sia abbastanza ostico per un principiante (con LuaLaTeX sarebbe più facile, ma prima di prendere la mano con il linguaggio Lua ce ne vuole… 🙁 ).
In ogni caso non so perché Lorenzo dica che sia più semplice lavorare con il mouse per i disegni qualitativi che non lavorare con il disegno programmato; o meglio, lo so, ma non sono completamente d’accordo; certo può essere una valida alternativa, ma non sono convinto che si ottengano disegni fatti meglio; per esempio i disegni dei secchi di Lorenzo non sempre hanno la barra della bilancia perfettamente orizzontale, (là dove deve essere in equilibrio) e in più di un disegno non ha terminato il contorno della figura esattamente sullo stesso punto da cui aveva cominciato. Questi sono i tipici difetti di quando si lavora con il mouse; Lorenzo è stato bravo tanto che questi difetti non si notano se non si ingrandisce molto la figura; tuttavia con il disegno programmato questi difetti non si manifestano. Il posizionamento dei punti sul grafico ha la precisione di qualche scaled point (1 sp = 1 pt / 2^{16}) cioè, teoricamente, di una manciata di nanometri, in pratica limitata dalla discretizzazione dello schermo o delle stampanti digitali.
Tikz è molto meglio di pict2e ma la curva di apprendimento sale molto lentamente (tracciato delle competenze acquisite in funzione del tempo — non so perché gli americani la chiamino “steep learning curve” la curva è tutto fuorché “ripida” — loro si riferiscono alla acquisizione della totalità delle competneze in un tempo definito), mentre con pict2e la manciata di comandi da imparare ammonta solo a una ventina e poi ci vuole solo l’inventiva per usarli e, magari, anche l’inventiva per scriversi delle macro. Con Tikz io non posso fare a meno di tenere aperta la finestra che mostra il manuale accanto alla finestra dove compongo il codice; con pict2e non lo faccio quasi mai.
Ho scritto nel 2006 anche il pacchetto curve2e (distribuito con TeX Live, recensito su The LaTeX graphics companion); è una estensione di pict2e che speravo di completare fino a permettermi di usare nomi simbolici per le coppie di coordinate, cioè per i nomi dei punti; ho lasciato il lavoro a metà perché contemporaneamente è uscito tikz che copre abbondantemente quello che volevo fare e che ho lasciato incompiuto. Per giunta per usarlo oltre alla geometria analitica sarebbe utile conoscere anche in numeri complessi…:shock: — no buono ber brincibiante 😛
-
22 Aprile 2012 alle 8:52 #72612::
OldClaudio” post=71872Il codice non è adatto ai principianti
Lo immagino (anche quello per TikZ). Dico solo che mi piacerebbe saperlo fare. In questo senso il manuale del pacchetto non aiuta molto, ma forse è giusto così visto che si tratta di contenuti avanzati. Io ho dovuto usare calc per trovare le coordinate…
E’ un peccato che non abbia completato il tuo pacchetto.
-
22 Aprile 2012 alle 9:35 #72613::
Allora ragazzi, sto studiando, i dubbi aumentano. Liverpool ha fatto vedere che con LaTeX si può produrre un sombrero che non ha niente da invidiare a quello prodotto con Mathematica (ma vale il viceversa, basta intervenire sull’opzione PlotPoints).Supponiamo però che l’utente abbia bisogno del grafico del polinomio di Legendre di ordine 10 (è matematica non elementare, ma può capitare, in una tesi). Mathematica non batte ciglio:
`Plot[LegendreP[10, x], {x, -1, 1}]`
Supponiamo che gli serva la Gamma di Eulero. Con Mathematica è
`Plot[Gamma[x], {x, -1, 1}]`
Supponiamo che gli serva il grafico di una funzione non elementare, soluzione di una certa equazione differenziale. Con Mathematica è relativamente facile:
`NDSolve[{y'[x] == Sin[y[x]], y[0] == 1}, y, {x, 0, 4}]`
`Plot[Evaluate[y[x] /. %], {x, 0, 4}]`
Domanda: si può farlo con pfgplots?[…] altrimenti si può ricorrere senza indugio alla potenza di Mathematica & c.
Se ben capisco, con LaTeX è possibile produrre grafici funzioni relativamente elementari. Per esigenze superiori, un software come Mathematica è indispensabile. Mi sbaglio?
Passiamo al disegno qualitativo.
Vedi, pensare che l’utente “normale” possa imparare a definirsi un comando \secchio mi sembra utopia. Il disegno che ho proposto, fra l’altro, era relativamente semplice. Ricordo una tesi di didattica della fisica in cui (non chiedermi perché!) c’era bisogno di inserire una piazza con omini e donnine stilizzati, che interagivano tra loro in modo complesso, con freccine, faccine, simboli vari. Un disegno compicatissimo (ora non ce l’ho sotto mano) che richiese tre ore di lavoro a un utente molto esperto in disegni fatti a colpi di mouse. Non oso neppure pensare a quante linee di codice astruso sarebbero necessarie con LaTeX!
Ecco, forse una posizione equilibrata potrebbe riassumersi così:
Se si hanno esigenze grafiche relativamente elementari, LaTeX offre strumenti con cui inserire grafici quantitativi (pgfplots) e qualitativi (TikZ), con il vantaggio di avere risultati graficamente coerenti con il resto del documento. Ma per lavori complessi, ricorrere alla potenza di software dedicati è indispensabile.
Grazie,
L.
-
22 Aprile 2012 alle 10:05 #72614::
I linee generale la frase potrebbe andare bene, ma è il relativamente elementari che non mi piace; pict2e serve per lavori relativamente elementari (vi ho disegnato delle funzioni ellittiche (vedi l’articolo su Ars#13); tikz serve per lavori mediamante avanzati non solo di matematica (se non sbaglio Till Tantau è un matematico); basta sfogliare il manuale per capire che non si riferisce solo alla matematica. Per lavori matematici avanzati ci vuole software dedicato come Mathematica, come per un disegno esecutivo di una parte meccanica ci vuole autocad e lo stesso per una planimetria di urbanistica e simili.
-
22 Aprile 2012 alle 11:58 #72615::
Ciao Claudio, quindi mi confermi che con LaTeX non esiste un modo facile per riprodurre grafici di polinomi di Legendre, funzioni di Bessel, Gamma, armoniche sferiche, eccetera. Dico bene?La conclusione può essere corretta così:
Se si hanno esigenze grafiche elementari o mediamente avanzate, LaTeX offre strumenti molto flessibili con cui inserire grafici quantitativi (pgfplots) e qualitativi (TikZ) direttamente nel proprio documento, con il vantaggio di avere risultati graficamente coerenti con il resto del documento. Per lavori complessi, tuttavia, ricorrere alla potenza di software dedicati (come Mathematica per la matematica o Autocad per il disegno tecnico), producendo immagini vettoriali da includere nel proprio documento, è indispensabile.
Mi pare che di essere, in questo modo, vicino alla posizione di Liverpool:
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.
Grazie mille,
L.P.S. Vorrei fare i mie complimenti a Liverpool per il sombrero ottenuto con Matlab: è una piccola opera d’arte. 🙂
-
22 Aprile 2012 alle 12:19 #72616::
L’elenco delle funzioni elementari che puoi usare con pgfplots si trova nel manuale di pgf (?) nel par. 63.2 a pag. 529 (!). Se tu riesci ad esprimere (ammesso che sia possibile) la tua funzione come composizione di quelle funzioni, potrai tracciarne il grafico. Occhio che la potenza di calcolo di pgfplots non è la stessa di Mathematica e te ne puoi accorgere quando i numeri reali diventano molto grandi o molto piccoli.
Ci sono dei casi, come quello dell’equazione differenziale, in cui ovviamente pgfplots non ti può aiutare direttamente. Questo perché in realtà tu stai (involontariamente) confondendo le funzioni di calcolo proprie dei software specifici con quelle di disegno. Se non vuoi rinunciare a pgfplots, la soluzione è dietro l’angolo:
`
(* Codice di Mathematica *)
NDSolve[{y'[x] == Sin[y[x]], y[0] == 1}, y, {x, 0, 4}];
out = Table[{x, y[x] /. %}, {x, 0, 4, 0.1}];
Export[“lorenzo.txt”, out, “Table”];`
Sposta il file “lorenzo.txt” nella cartella di lavoro di Latex…
`
% codice di LaTeX
\documentclass{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{pgfplots}\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines=middle]
\addplot [no marks, thick, DarkBlue] file {lorenzo.txt};
\end{axis}
\end{tikzpicture}
\end{document}`[attachment=232]h.png[/attachment]
P.S. Se apri il file .txt ti accorgi che pgfplots ha ignorato le parentesi graffe inserite da Mathematica
Attachments:
You must be logged in to view attached files. -
22 Aprile 2012 alle 12:44 #72617::
Ricopio anche io un precedente post, migliorando e aggiungendo ulteriori osservazioni.Post vecchio
Ho fatto solo una delle figure sul bilanciamento dei pesi. Ci ho messo una decina di minuti (ma era per ritrovare un pezzo di codice utile al colore ).
Ecco il codice (esempio compilabile da subito con TeXLive):
`
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{center}
\begin{tikzpicture}
% definizione colore di riempimento
\tikzset{myfillcolor/.style ={fill=#1, draw=none}}
% definizione delle caratteristiche del nodo
\tikzset{mynode/.style={rectangle,draw, minimum width=0.5cm, minimum height=0.5cm}}
%—-
% inserimento nodi orizzontali
\foreach \x in {0.5,1.5,…,5.5}
\node[mynode,myfillcolor=black] at (\x,0.75) {};
% inserimento nodi vertical
\foreach \y in {-0.6,-1.2,…,-3.6}
\node[mynode,myfillcolor=black]at (3,\y) {};
% inserimento path che collega i primi due nodi orizzontali
\draw (0.5,0.75)–(0.5,1.5)–(5.5,1.5)–(5.5,0.5);
% inserimento label A B C
\foreach \t/\text in {{(0.5,1.5)/A},{(3,1.5)/C},{(5.5,1.5)/B}}
\node[above]at \t {\text};
% inserimento path che collega B con i nodi verticali
\draw (3,1.5)–(3,-0.35);
\end{tikzpicture}
\end{center}
\end{document}
`
Il risultato che si ottiene è:[attachment=235]Immagine.jpg[/attachment]
Il codice di cui parlavo è:
`\tikzset{myfillcolor/.style ={fill=#1, draw=none}}`
Quando si definisce un nodo, tra le opzioni, questo “comando” permette di modificare il colore utilizzando le stesse impostazioni di forma. Mi spiego: se voglio definire un quadrato nero con:`
\tikzset{mynode/.style={rectangle,draw, minimum width=0.5cm, minimum height=0.5cm,color=black}}
`
successivamente non posso colorare mynode di grigio. Con quel comando si:`
\node[mynode,myfillcolor=black]at (0,0) {};
\node[mynode,myfillcolor=blue]at (5,5) {};
`
Al di là della piccola spiegazione tecnica, si può notare come il codice non sia scritto alla cieca: c’è una logica, come c’è una logica per redigere un documento, scrivere un file di stile o una classe.Con questo intervento non voglio convincere Lorenzo, o dimostrare qualcosa… ma la sfida (riprodurre una figura) era interessante. 😆
P.S. Rispetto alla figura originale, la mia ha una differenza: le tre label (A, B, C) non erano allineate, nella mia sì. Una seconda differenza è la distanza che separa i pesi verticali: l’ho impostata forse troppo grande.
Fine post vecchio.
Affrontando come prima cosa l’argomento grafici, io non sono un matematico e non conosco Mathematica, però mi sento di dire che userei pgfplots per qualsiasi lavoro. Ci si dimentica abbastanza spesso che, in caso non sia possibile creare il grafico in modo diretto con i comandi pgfplots, esiste sempre Matlab. È vero che questo comporta il fatto di dover conoscere/imparare un linguaggio diverso, però mi sento di affermare che non sia la fine del mondo. Una volta creato il grafico con Matlab, si lancia la libreria matlab2tikz.m ed automaticamente viene generato il codice TikZ (pgfplots per essere precisi) relativo per il grafico. Con la stessa precisione e qualità.
Considerando ora i grafici qualitativi, la cosa più importante è distinguere quale sia il target finale. Se il caso è:
Ricordo una tesi di didattica della fisica in cui (non chiedermi perché!) c’era bisogno di inserire una piazza con omini e donnine stilizzati, che interagivano tra loro in modo complesso, con freccine, faccine, simboli vari.
forse non il caso di usare TikZ, specialmente se l’utente vede il codice per la prima volta. In ogni caso, si badi che non ho detto: “non si può fare”. Ci vorrebbe un bel po’ di tempo e di pazienza, ma alla fine ci si riuscirebbe. Ogni volta che si parla di come creare disegni complicati con TikZ mi viene in mente un disegno, stupendo, pubblicato su TeXample. Ecco il link (buona visione 😉 ). Su questo punto concordo con Lorenzo: per il neofita non è la soluzione migliore.
Secondo me, in conclusione, molto dipende dalla curiosità e dalla voglia di un utente nel voler imparare. Se si è interessati, mi sento di affermare che con il tempo i risultati sono premianti; per questo motivo sono favorevole ad inserire nell’Arte la conclusione di Lorenzo, ma non a riportare spiegazioni sul codice come propone @Liverpool. Credo sia sufficiente dare i riferimenti e lasciare agli interessati l’onere di documentarsi meglio.
Un ultimo commento su:
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).
È vero, ma dipende molto dalla precisione che vuoi nel tuo disegno. Tu hai scritto la soluzione “perfetta”, sia dal punto di vista del codice che del risultato finale. Se uno si “accontenta” può definire il secchio e il contenuto solo in termini di posizione (x,y) e successivamente a) ricopiare il codice modificando le coordinate, b) usando gli “shift”, ossia spostando le coordinate dei nuovi secchi in termini di distanza dal primo, di riferimento.
Ciao
Claudio
Attachments:
You must be logged in to view attached files. -
22 Aprile 2012 alle 12:54 #72618::
Liverpool” post=71879L’elenco delle funzioni elementari che puoi usare con pgfplots si trova nel manuale di pgf (?) nel par. 63.2 a pag. 529 (!). Se tu riesci ad esprimere (ammesso che sia possibile) la tua funzione come composizione di quelle funzioni, potrai tracciarne il grafico. Occhio che la potenza di calcolo di pgfplots non è la stessa di Mathematica e te ne puoi accorgere quando i numeri reali diventano molto grandi o molto piccoli.
Complimenti per il pezzo di bravura di far fare i calcoli a Mathematica, esportare i dati e importarli in pgf, che poi fa il grafico!
La sostanza, però, non mi pare che cambi molto: se faccio una tesi di fisica-matemtaica e ho bisogno di molti grafici di polinomi di Hermite, Legendre, Laguerre, funzioni di Bessel e armoniche sferiche, la strada più semplice e diretta è quella di usare Mathematica (o un software equivalente), che “conosce” queste funzioni, invece di fare contorsioni traducendole in termini di funzioni elementari (cosa peraltro non sempre possibile) per poterle disegnare con pgf.
Proprio come, se faccio una tesi di architettura e ho bisogno di inserire il rendering di un edificio complesso, userò Autocad.
In definitiva, LaTeX è in grado di impaginare qualunque tesi, di fisica-matematica come di architettura. Per le immagini, però, può essere necessario far ricorso a software esterni, se si hanno esigenze molto specializzate.
Condividi questa conclusione?
Grazie,
L.
-
22 Aprile 2012 alle 13:06 #72619::
cfiandra” post=71880Una volta creato il grafico con Matlab, si lancia la libreria matlab2tikz.m ed automaticamente viene generato il codice TikZ (pgfplots per essere precisi) relativo per il grafico. Con la stessa precisione e qualità.
Interessante. Si può fare anche con Mathematica?
cfiandra” post=71880forse non il caso di usare TikZ, specialmente se l’utente vede il codice per la prima volta. In ogni caso, si badi che non ho detto: “non si può fare”. Ci vorrebbe un bel po’ di tempo e di pazienza, ma alla fine ci si riuscirebbe. […] Su questo punto concordo con Lorenzo: per il neofita non è la soluzione migliore.
Molto bene. 🙂
cfiandra” post=71880Secondo me, in conclusione, molto dipende dalla curiosità e dalla voglia di un utente nel voler imparare. Se si è interessati, mi sento di affermare che con il tempo i risultati sono premianti; per questo motivo sono favorevole ad inserire nell’Arte la conclusione di Lorenzo, ma non a riportare spiegazioni sul codice come propone @Liverpool. Credo sia sufficiente dare i riferimenti e lasciare agli interessati l’onere di documentarsi meglio.
Sì, anch’io la penso così.
Propongo di aggiungere all’Arte un paragrafo puramente discorsivo spiegando che LaTeX offre la possibilità di “programmare i disegni”, che gli strumenti ci sono, che sono molto potenti anche se non immediati (il solo manuale di pgf è di 726 pagine: non tutte sono indispensabili, certo, ma la mole di informazioni è ragguardevole), che la qualità raggiungibile in questo modo è elevatissima (è il solo approccio che garantisce la coerenza con lo stile del documento), che la curva di apprendimento è ripida. E che, per esigenze molto particolari, software dedicati (come Mathematica o Autocad) restano indispensabili.
Anzi, propongo di aggiungere anche un paio di esempi completi di sorgente, ma (ovviamente!) senza alcuna pretesa di completezza (esattamente come facciamo per il pacchetto chemfig: non ne analizziamo la sintassi, ma presentiamo la formula di struttura dell’adrenalina come assaggio, giusto per dare un’idea delle potenzialità del pacchetto). L’esempio del sombrero ci starebbe benissimo!
Spiegare qualche comando di pgf per me non serve a molto: o le cose si fanno per bene, o non si fanno. Basterebbero poche paginette nell’Arte per mettere il lettore nelle condizioni di programmare un disegno “vero” per la sua tesi (tipo il baricentro o i secchi o il sombrero che ho mostrato)? No di certo. E allora (come del resto facciamo altre volte, quando lo spazio a disposizione non è sufficiente) si rimanda il lettore alla documentazione.
Che ne dite?
Ciao,
L.
-
22 Aprile 2012 alle 13:06 #72620::
lorenzo.pantieri” post=71882La sostanza, però, non mi pare che cambi molto: se faccio una tesi di fisica-matemtaica e ho bisogno di molti grafici di polinomi di Hermite, Legendre, Laguerre, funzioni di Bessel e armoniche sferiche, la strada più semplice e diretta è quella di usare Mathematica (o un software equivalente), che “conosce” queste funzioni, invece di fare contorsioni traducendole in termini di funzioni elementari (cosa peraltro non sempre possibile) per poterle disegnare con pgf.
Quantitativamente hai ragione, qualitativamente dipende dai punti di vista. A me è capitato di dovere disegnare un orbitale delocalizzato determinato con il software Gaussian. Siccome il risultato del software commerciale non mi piaceva più di tanto, ho esportato i dati in un software di rendering e così ho potuto scegliere i colori, le luci, le trasparenze, i punti di vista e sovrapporre la struttura molecolare. Ci ho messo un bel po’ di tempo, ma sono soddisfatto della qualità del risultato. Dipende tutto dal tempo a disposizione e dalla qualità che si vuole ottenere (non dico che i grafici di Mathematica/Matlab non siano di qualità).
Però vorrei farti due domande: (1) a che anno del corso di laurea sei dovuto arrivare per sentire parlare di polinomi di Laguerre? (2) qual è la percentuale di utenti “medi” (come dici tu) che avranno queste necessità?lorenzo.pantieri” post=71882Condividi questa conclusione?
Dici a me? Sì, condivido in pieno.
-
22 Aprile 2012 alle 13:28 #72621::
Sentite, sto seguendo con piacere la discussione sul disegno, e ovviamente quello che sto per dire non c’entra (o centra? 😉 ) nulla. Però, più che di sombreri o secchi o geoidi termici subentranti nel punto Z sublocalizzati nel segno dello scorpione conditi con l’origano della sesta delle Cinque Terre in alzata di monghi con tripudio di funghi nani del Missouri, non pensate che l’utente basico dell’Arte (quello semplice) abbia bisogno d’altro?Mi spiego: dare le informazioni per disegnare disegni più frequenti (non più utili, perché il sombrero avrà naturalmente la massima utilità nel documento che lo richiede) come semplici grafici bidimensionali (istogrammi, a torta, quelli con i punti da unire per dare l’andamento di un fenomeno) credo che sarebbe meglio. Come sarebbe buona cosa dare un esempio o due di disegni per fare mappe concettuali, quelle con gli alberi di rettangoli e cerchi pieni di testo.
Altrimenti, ancora una volta, la guida e LaTeX si sbilanciano verso chi si occupa di matematica e fisica.
Ciao
Tommaso
-
22 Aprile 2012 alle 13:40 #72622::
Liverpool” post=71884Però vorrei farti due domande: (1) a che anno del corso di laurea sei dovuto arrivare per sentire parlare di polinomi di Laguerre? (2) qual è la percentuale di utenti “medi” (come dici tu) che avranno queste necessità?
(1) Al terzo anno di università; (2) bassa, certamente. E infatti ho detto “per esigenze molto particolari un software come Mathematica è indispensabile”.
In ogni caso, dalla prossima versione l’Arte diventerà completamente agnostica, circa l’argomento “immagini vettoriali”: non spiegherà né OmniGraffle né pgf, ma si limiterà a dire che esistono l’uno e l’altro, e dirà che la prima soluzione presenta il vantaggio di una curva di apprendimento più dolce e lo svantaggio di un (ragionevole) compromesso sulla qualità, mentre la seconda ha il vantaggio della massima qualità e coerenza stilistica, al prezzo di una curva di apprendimento più ripida. Così si lascia il lettore libero di decidere.
In buona sostanza, avevate ragione voi! 😉
A presto, grazie di tutto! 🙂
-
22 Aprile 2012 alle 13:45 #72623::
illinguista1972″ post=71885Sentite, sto seguendo con piacere la discussione sul disegno, e ovviamente quello che sto per dire non c’entra (o centra? 😉 ) nulla. Però, più che di sombreri o secchi o geoidi termici subentranti nel punto Z sublocalizzati nel segno dello scorpione conditi con l’origano della sesta delle Cinque Terre in alzata di monghi con tripudio di funghi nani del Missouri, non pensate che l’utente basico dell’Arte (quello semplice) abbia bisogno d’altro?
Mi spiego: dare le informazioni per disegnare disegni più frequenti (non più utili, perché il sombrero avrà naturalmente la massima utilità nel documento che lo richiede) come semplici grafici bidimensionali (istogrammi, a torta, quelli con i punti da unire per dare l’andamento di un fenomeno) credo che sarebbe meglio. Come sarebbe buona cosa dare un esempio o due di disegni per fare mappe concettuali, quelle con gli alberi di rettangoli e cerchi pieni di testo.
Altrimenti, ancora una volta, la guida e LaTeX si sbilanciano verso chi si occupa di matematica e fisica.
Per me quello che chiedi è impossibile. Un po’ come fare “brevi cenni sull’universo”. 😉 Le esigenze di un laureando sono (potenzialmente) tanto vaste che è impossibile in poche pagine mettere l’utente nelle condizioni di fare tutto quello che gli può servire: diagrammi a torta, ad albero, istogrammi, schemi a blocchi, grafici bi- e tri-dimensionali, curve di livello, figure geometriche… l’elenco è sterminato. E infatti il manuale di pgf è di 700 pagine, quello di pgfplot di 400, quello di Mathematica di 1400. Ripeto: ce la caviamo come fatto tante altre volte: con un rimando alla documentazione.
Ciao,
L.
-
22 Aprile 2012 alle 13:50 #72624::
lorenzo.pantieri” post=71878Ciao Claudio, quindi mi confermi che con LaTeX non esiste un modo facile per riprodurre grafici di polinomi di Legendre, funzioni di Bessel, Gamma, armoniche sferiche, eccetera. Dico bene?
LaTeX (e quindi pgfplots) ha limitate capacità di calcolo, ma nulla vieta di (anzi, dopo due minuti ti rendi conto che è quasi necessario) usare programmi esterni (tipo gnuplot) per far svolgere i compiti “numerici”. Più che altro il problema è che se i punti sono molti (migliaia o decine di migliaia e oltre) la compilazione del documento rallenta in maniera drastica, per questo motivo (e non solo, ne parlai in qualche altra discussione molto tempo fa) comunque preferisco usare direttamente gnuplot per fare i grafici di funzione.
-
22 Aprile 2012 alle 13:58 #72625::
Elrond” post=71888LaTeX (e quindi pgfplots) ha limitate capacità di calcolo, ma nulla vieta di (anzi, dopo due minuti ti rendi conto che è quasi necessario) usare programmi esterni (tipo gnuplot) per far svolgere i compiti “numerici”. Più che altro il problema è che se i punti sono molti (migliaia o decine di migliaia e oltre) la compilazione del documento rallenta in maniera drastica, per questo motivo (e non solo, ne parlai in qualche altra discussione molto tempo fa) comunque preferisco usare direttamente gnuplot per fare i grafici di funzione.
Per questo esiste la libreria external:
`
\usepgfplotslibrary{external}
\tikzexternalize
`
Condivido che sia poco pratica, ma è un ottimo strumento per ovviare al problema che accennavi. Inoltre non è solo un “rallentamento” della compilazione, ma può capitare che per alcuni grafici proprio venga riportato l’errore: Here is how much of TeX’s memory you used[…]; esternalizzando si risolve.Ciao
Claudio
-
22 Aprile 2012 alle 14:42 #72626::
Ecco qui. Il paragrafo “Immagini vettoriali” a pagina 105 diventerà qualcosa del genere:Immagini vettoriali
Le immagini vettoriali sono descritte da forme, possono essere scalate e deformate senza perdere in definizione e sono adatte soprattutto per grafici e schemi. Esistono sostanzialmente due modi per produrre immagini di questo tipo in un documento scritto con LaTeX:
- prepararle \emph{a parte} con programmi specifici (alcuni dei quali raccolti nel paragrafo 6.4.4 nella pagina successiva), esportarle in un formato opportuno (quelli più diffusi sono il PDF e il suo parente stretto EPS) e aggiungerle successivamente al proprio documento;
- “programmarle” con opportune istruzioni scritte \emph{direttamente nel sorgente}, usando gli strumenti che LaTeX mette a disposizione (quelli più diffusi sono l’ambiente standard picture, i pacchetti PGF, TikZ, PSTricks, Xy-pic e i programmi METAPOST e Asymptote: se ne veda la corposa documentazione).
La prima soluzione ha il vantaggio presentare una curva di apprendimento più dolce e lo svantaggio di un (certo) compromesso sulla qualità: infatti lo stile (i font, per esempio) delle immagini prodotte in questo modo è di regola diverso da quello del documento principale. La seconda ha il vantaggio della massima qualità e coerenza stilistica, al prezzo di una curva di apprendimento ben più ripida. Va inoltre tenuto presente che per esigenze molto specifiche (matematica avanzata, disegno tecnico, eccetera) il ricorso a software dedicati può essere a volte indispensabile.
Poi bisogna fare un paio di esempi completi del sorgente per dare un’idea delle potenzialità del disegno programmato con LaTeX: direi di mettere l’esempio del sombrero scritto da Liverpool e il grafo a pagina 91 del pgfmanual.
Ciao,
L.
-
22 Aprile 2012 alle 16:01 #72627::
lorenzo.pantieri” post=71891direi di mettere l’esempio del sombrero scritto da Liverpool
Valuta l’opportunità di inserire questa variante. Il codice è un pelo più complesso, me mette in evidenza una potenzialità di pgfplots: quella di usare con disinvoltura i caratteri greci.
`
\documentclass{standalone}
\usepackage{pgfplots}\begin{document}
\begin{tikzpicture}
\begin{axis}[xtick={-3.1416,0,3.1416}, xticklabels={$-\pi$,$0$,$\pi$},
ytick={-3.1416,0,3.1416}, yticklabels={$-\pi$,$0$,$\pi$}]
\addplot3 [surf, domain=-2*pi:2*pi, samples=50, colormap/cool]
{sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)};
\end{axis}
\end{tikzpicture}
\end{document}`[attachment=236]s2.png[/attachment]
Per quanto riguarda pgfplots, io metterei un diagramma 2D che mi sembra il più frequente, facoltativamente un 3D e, come dice Tommaso, un esempio di istogramma. Per TikZ non saprei cosa scegliere, però metterei qualcosa di “originale”.
Attachments:
You must be logged in to view attached files. -
22 Aprile 2012 alle 16:22 #72628::
cfiandra” post=71880per questo motivo sono favorevole ad inserire nell’Arte la conclusione di Lorenzo, ma non a riportare spiegazioni sul codice come propone @Liverpool. Credo sia sufficiente dare i riferimenti e lasciare agli interessati l’onere di documentarsi meglio.
All’inizio avevo capito il contrario. Comunque probabilmente avete ragione voi.
-
22 Aprile 2012 alle 16:42 #72629::
Gli esempi che ho scelto, per ora, sono questi:
`\documentclass{article}
\usepackage{pgfplots}\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot+[domain=-pi:pi] {sin(deg(x))};
\end{axis}
\end{tikzpicture}\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}\begin{tikzpicture}
\begin{axis}[
ybar interval,
xticklabel= \pgfmathprintnumber\tick–\pgfmathprintnumber\nexttick
]
\addplot+[hist={bins=3}]
table[row sep=\\,y index=0] {
data\\
1\\ 2\\ 1\\ 5\\ 4\\ 10\\
7\\ 10\\ 9\\ 8\\ 9\\ 9\\
};
\end{axis}
\end{tikzpicture}\end{document}`
Mi pare che coniughino la semplicità con la capacità di illustrare le potenzialità degli strumenti.Ciao,
L.
-
22 Aprile 2012 alle 16:44 #72630::
Liverpool” post=71893
per questo motivo sono favorevole ad inserire nell’Arte la conclusione di Lorenzo, ma non a riportare spiegazioni sul codice come propone @Liverpool. Credo sia sufficiente dare i riferimenti e lasciare agli interessati l’onere di documentarsi meglio.
All’inizio avevo capito il contrario. Comunque probabilmente avete ragione voi.
Per me scrivere un capitolo che in poche pagine metta l’utente di programmare disegni, comprendo ragionevolmente la gamma delle possibili esigenze, è impossibile.
Potrei sbagliarmi, però!
Ciao,
L.
-
22 Aprile 2012 alle 16:57 #72631::
Liverpool” post=71893
per questo motivo sono favorevole ad inserire nell’Arte la conclusione di Lorenzo, ma non a riportare spiegazioni sul codice come propone @Liverpool. Credo sia sufficiente dare i riferimenti e lasciare agli interessati l’onere di documentarsi meglio.
All’inizio avevo capito il contrario. Comunque probabilmente avete ragione voi.
Anche nel primo intervento nel filone “L’Arte di scrivere con LaTeX — nuova edizione” dicevo:
La mia considerazione finale è: nell’Arte un paragrafo sul disegno programmato dovrebbe esserci, ma solo per accennare ai vari pacchetti che esistono e offire un riferimento.
Ciao
Claudio
-
23 Aprile 2012 alle 14:45 #72632::
Ciao,
vi segnalo sull’argomento la nuova guida tematica Introduzione all’uso di TikZ in Ingegneria di Claudio Fiandrino.Buona lettura!
R.
-
23 Aprile 2012 alle 15:20 #72633::
robitex” post=71931Ciao,
vi segnalo sull’argomento la nuova guida tematica Introduzione all’uso di TikZ in Ingegneria di Claudio Fiandrino.Grazie. Non sarebbe il caso di aprire una nuova discussione per dare maggiore risalto?
Ho dato una lettura veloce. Mi dispiace che manchino le carte di Smith, che si possono tracciare con [tt]pgfplots[/tt] e qualcosa tipo luogo delle radici.
@cfiandra posso fare un paio di annotazioni?Ciao
-
23 Aprile 2012 alle 15:25 #72634::
Liverpool” post=71933
Ciao,
vi segnalo sull’argomento la nuova guida tematica Introduzione all’uso di TikZ in Ingegneria di Claudio Fiandrino.Grazie. Non sarebbe il caso di aprire una nuova discussione per dare maggiore risalto?
Ho dato una lettura veloce. Mi dispiace che manchino le carte di Smith, che si possono tracciare con [tt]pgfplots[/tt] e qualcosa tipo luogo delle radici.
@cfiandra posso fare un paio di annotazioni?Ciao
Si, dovrei mettere la news nella home page del sito ma il mio tempo a disposizione è… finito.
Per le annotazioni, credo che Claudio sia ben felice di ricevere il tuo contributo.Ciao.
-
23 Aprile 2012 alle 16:54 #72635::
Liverpool” post=71933Grazie. Non sarebbe il caso di aprire una nuova discussione per dare maggiore risalto?
Ho dato una lettura veloce. Mi dispiace che manchino le carte di Smith, che si possono tracciare con [tt]pgfplots[/tt] e qualcosa tipo luogo delle radici.
@cfiandra posso fare un paio di annotazioni?Ciao
Sono le benvenute. 😉 Dopo apro un filone apposito in modo tale da ricevere lì considerazioni ed eventualmente nuovi contributi.
Ti rispondo in merito alla CdS: non sapevo assolutamente che esistesse un’integrazione con pgfplots 😮 (grazie per la segnalazione :wink:). Ho dato un’occhiata al manuale e alla libreria e mi sembra veramente ottima.
Ciao
Claudio
-
24 Aprile 2012 alle 7:39 #72636
-
24 Aprile 2012 alle 9:27 #72637::
Liverpool” post=71951Lorenzo, visto che stai dando un’occhiata a pgfplots, dalla anche al pacchetto pgfplotstable. Chissà che non trovi qualcosa di interessante per l’Arte
L’Arte, così com’è, mette nelle condizioni il lettore di comporre tabelle di svariate tipologie: credo che i pacchetti consigliati coprano l’argomento in modo ragionevolmente completo.
Per quanto riguarda pgfplots, è uno strumento che mi piace moltissimo. Più lo studio, più mi piace. La sintassi è semplice (o, almeno, non più difficile di programmi come Mathematica). Interessantissima la possibilità di importare dati da altri programmi più specializzati (come Mathematica, appunto). La documentazione di pgfplots, però, soffre di elefantiasi. Ci vorrebbe un articolo di una ventina di pagine “L’arte di fare grafici di funzioni con LaTeX” che ne riportasse le cose essenziali, venendo incontro alle le esigenze più tipiche di un “lettore medio”. Purtroppo in questo periodo non ho tanto tempo da dedicare a LaTeX, ma un articolo del genere vorrei proprio scriverlo. In ogni caso, se l’articolo venisse scritto, potrebbe benissimo essere un nuovo capitolo di un’Arte più grassa di quella attuale (con Tommaso stiamo decidendo se inserire un capitolo sui codici: non ci vorrebbe molto, basterebbe prendere il mio articolo su listings e riadattarlo un minimo).
Quindi, riassumendo:
1. pgfplotstable no: l’Arte copre a sufficienza l’argomento “tabelle”, troppe indicazioni confondono il lettore;
2. pgfplots sì (almeno come idea): è uno strumento bellissimo. Quella parte, però è tutta da scrivere.
3. TikZ non credo: non vedo il mio lettore principiante fare un grafico come quello dei secchi (o altri più complessi) scrivendo istruzioni. Qui ci vorrebbe un libro (non credo basti un articolo) dal titolo (chiedo scusa a Enrico per il plagio; del resto anche lui ha in parte plagiato me!) “L’arte esoterica di fare disegni vettoriali con LaTeX“. Nell’Arte bastano una menzione a TikZ, un esempio e un rimando alla documentazione.Per ora, la mia posizione è questa. Ma è una posizione sempre in divenire, ormai lo sapete! 😉
Ciao,
L.
-
24 Aprile 2012 alle 9:41 #72638::
http://graffletopia.com/stencils/639In un topic precedente ho parlato di un disegno contenuto in una tesi di laurea in fisica: si trattava di una piazza con decine di omini e donnine stilizzati, diversi fra loro. Pensare che il mio principiante possa fare un disegno di quel genere con TikZ magari riuscendo a definirsi comandi come \omino e \donnina o addirittura \cravatta e \berretto, mi pare del tutto irrealistico. 😉
Intendiamoci, non mi sorprenderei che Claudio o Liverpool o qualcun altro riuscissero a riprodurre omini stilizzati come quelli che vedete nel link tramite istruzioni TeX di basso livello: tuttavia mi sento di escludere del tutto che questa capacità ce l’abbia il mio lettore “medio”. L’Arte, lo ricordo, è una guida (anche) per principianti!
Ciao,
L.
-
24 Aprile 2012 alle 10:11 #72639::
lorenzo.pantieri” post=71953Per quanto riguarda pgfplots, è uno strumento che mi piace moltissimo. Più lo studio, più mi piace. La sintassi è semplice (o, almeno, non più difficile di programmi come Mathematica). Interessantissima la possibilità di importare dati da altri programmi più specializzati (come Mathematica, appunto). La documentazione di pgfplots, però, soffre di elefantiasi. Ci vorrebbe un articolo di una ventina di pagine “L’arte di fare grafici di funzioni con LaTeX” che ne riportasse le cose essenziali, venendo incontro alle le esigenze più tipiche di un “lettore medio”.
Uhm.
L’articolo è già stato scritto da due noti Autori (su Ars 2011/2).
R.
-
24 Aprile 2012 alle 10:35 #72640::
lorenzo.pantieri” post=71953pgfplotstable no: l’Arte copre a sufficienza l’argomento “tabelle”, troppe indicazioni confondono il lettore;
pgfplotstable si occupa della personalizzazione del formato dei dati di una tabella, in special modo quando questa è importata nel documento da un file esterno. Non mi sembra che i pacchetti già presenti nell’Arte facciano qualcosa di simile. Io una semplice citazione da qualche parte la farei, comprendo però il tuo punto di vista.
lorenzo.pantieri” post=71954Intendiamoci, non mi sorprenderei che Claudio o Liverpool o qualcun altro riuscissero a riprodurre omini stilizzati come quelli che vedete nel link tramite istruzioni TeX di basso livello
Non ci penso proprio e non ne sarei capace. Mi sopravvaluti…
Ciao
-
24 Aprile 2012 alle 11:14 #72641::
robitex” post=71956L’articolo è già stato scritto da due noti Autori (su Ars 2011/2).
A giudicare dall’abstract direi che l’articolo è proprio quello che ci voleva.
Creare grafici con pgfplots
(Agostino De Marco, Roberto Giacomelli)
Sommario
In questo articolo viene presentato pgfplots, il pacchetto per il disegno di grafici basato su pgf. I manuali d’uso di questi due pacchetti di estensione del linguaggio LaTeX sono molto voluminosi e dettagliati e spesso gli utenti sono scoraggiati dall’affrontare lo studio di questi due documenti. In particolare, quelli desiderosi di creare grafici tecnico-scientifici di alta qualità tipografica hanno difficoltà a districarsi nei dettagli delle tante opzioni e personalizzazioni possibili. L’impostazione dell’articolo suggerisce un approccio pratico: si mostra come preparare un grafico a partire dall’impostazione degli assi, introducendo così i comandi e le opzioni fondamentali; successivamente si introducono le nozioni per il disegno di curve e superfici, spiegando come personalizzarne l’aspetto.
Ciao,
L.
-
28 Aprile 2012 alle 14:00 #72642::
Ciao a tutti.Tanto per cominciare devo delle scuse a tutti i sostenitori del disegno programmato con LaTeX: avevate ragione, è uno strumento semplicemente meraviglioso, la prossima versione dell’Arte colmerà questa vistosa lacuna, di cui sono il solo responsabile. Come la colmeremo, è da vedere: o ce la caveremo con una menzione dei pacchetti principali, oppure (come ritengo più opportuno) con un bel capitolo introduttivo.
Sto studiando il pacchetto pgfplots (è il mio inizio, nel mare magnum del disegno programmato, abbiate pazienza), e comincio a capirci qualcosa. Ho anche molti dubbi, ma sono sicuro che qui sul forum otterrò le risposte che cerco. Tutte le vostre indicazioni mi permetteranno di scrivere un articolo “L’arte di fare disegni con pgfplots”, che è ancora in bozza. Se riuscirò a portare a termine l’articolo, sarà solo merito vostro. L’articolo potrebbe essere parte del capitolo sul disegno programmato con LaTeX da mettere nella nuova edizione dell’Arte.
1.
Disegnare grafici di funzioni scrivendo istruzioni, dunque. Non c’è nulla di strano, anche con Mathematica (cui ero abituato) si fa così: il linguaggio di pgfplots è un po’ diverso, ma non più difficile. I grafici prodotti da pgfplots sono, semplicemente, magnifici, con in più il vantaggio di averli tipograficamente coerenti col resto del documento. Gli inconvenienti principali che ho trovato “facendo fare i calcoli e i grafici a LaTeX” sono la lentezza in fase di compilazione, e la possibilità, tutt’altro che remota, di avere degli errori (fatali) di sforamento della memoria:
`
TeX capacity exceeded, sorry
Fatal error occurred, no output PDF file produced!
`
Questi errori possono presentarsi anche in un documento di dimensioni relativamente modeste: l’articolo che sto scrivendo, per esempio, contiene una ventina di grafici ad alta risoluzione, e venti grafici sono pochini. Lo sforamento, il più delle volte, si ha se si spinge troppo sul pedale “samples”. Queste cose si giustificano, io credo, col fatto che “stiamo facendo fare i conti a TeX”, che di suo farebbe un mestiere diverso. Tuttavia, come qualcuno ha già detto, il problema si risolve “facendo fare i grafici a LaTeX e i calcoli da qualcun altro”. Per esempio, si possono fare i calcoli con Mathematica, esportare i risultati non come grafici ma come file di dati (coppie o terne ordinate, ovvero i punti del grafico) e usare il comando di pgfplots
`
addplot […] file {dati.txt};
`
per produrre il grafico. Questa strada (certo meno comoda di usare comandi tutti interni a LaTeX) è di fatto obbligata se si scrive un documento di grandi dimensioni. Ho capito bene?2.
Prendiamo questa curva di Lissajous:
`
\begin{tikzpicture}
\begin{axis}
\addplot [
color=blue,
style=thick,
samples=50,
smooth,
domain=0:360,
variable=\t
]
({sin(3*t)}, {sin(2*t)});
\end{axis}
\end{tikzpicture}
`
L’opzione smooth è praticamente obbligatoria, se si vuole un risultato decente. L’alternativa è aumentare a dismisura il numero dei punti di campionamento
`
samples=100,
`
con tutti gli svantaggi in termini di tempo e di occupazione di memoria che dicevo. Questo capita praticamente sempre: per avere un grafico di qualità o si usa “smooth” con “samples” (ragionevolmente) basso, oppure se si rinuncia a “smooth” tocca aumentare molto “samples”. Dico bene?3.
Qual è il valore predefinito di “samples”?4.
Esiste un analogo di “smooth” per i grafici tridimensionali?5.
Perché sin e cos vogliono il loro argomento in gradi? Di solito nei grafici tecnico-scientifici è il radiante che la fa da padrone. Con pgfplots, invece, tocca scrivere ogni volta sin(deg(x)), un pelino scomodo.6.
Perché l’opzione “no marks” non è predefinita? In fondo, nei documenti tecnico-scientifici le funzioni sono più frequentemente rappresentate con curve e superfici “lisce” invece che per punti. Perché “thick,blue” implica “no marks”?7.
Perché l’etichetta prodotta con “ylabel” è ruotata e centrata? Io l’avevo sempre vista in alto, dritta.8.
Un’elica cilindrica:
`
\begin{tikzpicture}
\begin{axis}[
view={60}{20},
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
variable=\t
]
\addplot3 [
color=blue,
style=thick,
domain=0:5.5*pi,
samples=40,
smooth,
samples y=0,
no marks
]
({sin(deg(t))}, {cos(deg(t))},
{2*t/(5*pi)});
\end{axis}
\end{tikzpicture}
`
La doc. dice che “si è usato samples y=0 per indicare che deve essere campionata una linea invece di una matrice”. Che vuol dire? È importante: se si toglie quella riga il grafico non viene prodotto!9.
Non ho capito la chiave view. In
`
view={60}{20},
`
che cosa rappresentano 60 e 20?10.
Una superficie semisferica in forma parametrica:
`
\begin{tikzpicture}
\begin{axis}[view={60}{30}]
\addplot3 [
surf,
z buffer=sort,
samples=30,
variable=\u,
variable y=\v,
domain=-1:0,
y domain=0:2*pi
]
({sqrt(1-u^2)*cos(deg(v))},
{sqrt(1-u^2)*sin(deg(v))},
u);
\end{axis}
\end{tikzpicture}
`
Non ho capito la ragione di quel “z buffer=sort” (peraltro necessario, come sopra: se lo si toglie il grafico non viene). Ah, il codice che ho scritto è corretto? Nelle mie intenzioni, u e v parametrizzano la superficie.11.
Voglio fare il grafico della Gamma di Eulero da -5 a 5 usando Mathematica per fare i calcoli e pgfplots per fare il disegno. L’idea di campionare la Gamma con
`
out = Table[{x, Gamma[x]}, {x, -5, 5, 0.1}];
`
di esportare i punti in un file con
`
Export[“gamma”, out, “Table”];
`
da dare in pasto a pgfplots non funziona: evidentemente, a pgfplots risulta indigesto il modo con cui Mathematica esprime le disontinuiità. Come risolvo il problema?12.
Un grafico dato per punti:
`
\begin{tikzpicture}
\begin{axis}
\addplot coordinates {
(10,100)
(20,150)
(40,225)
(80,340)
(160,510)
(320,765)
(640,1150)
};
\end{axis}
\end{tikzpicture}
`
Visto quel “1,000” (con la virgola come separatore)? Perché lo scrive così? Come si fa per avere “1000” scritto senza quella virgola?Grazie
Lorenzo
-
29 Aprile 2012 alle 7:26 #72643::
Non c’è bisogno di chiedere scusa.1.a) La lentezza in fase di compilazione è inevitabile. Attualmente la soluzione migliore è la libreria external di pgf via TikZ (cap. 7 a pag. 349 del manuale), che salva una copia della figura in pdf e le volte successive carica quella, anziché rigenerare il grafico. Si carica con
`\usepgfplotslibrary{external}
\tikzexternalize`la seconda riga serve ad attivare la funzione. E’ necessaria una lettura del manuale per conoscere le opzioni.1.b) Lo sforamento della memoria. Non so se la risposta che ti do è pertinente, perché forse non ho capito bene il problema. Non dipende dalle potenzialità di calcolo di TeX, ma dalla mole di dati che è necessario memorizzare temporaneamente per tracciare il grafico, quindi il problema non si risolve ricorrendo alla funzione di importazione. La soluzione consiste nell’aumentare la memoria a disposizione di TeX (cap. 6 a pag. 346 del manuale di pgfplots e suggerimenti di Enrico su questo forum). Ho notato che a volte anche suddividere il dominio in intervalli disgiunti può risolvere il problema. Per questo mi sembra strano che il problema sia dato dal numero di grafici nel documento (una ventina, come dici tu). Potrebbe essere che tra di essi ce ne sia almeno uno che da solo sfora la memoria. Potresti mandarmi il sorgente per email?
2) con [tt]samples=300[/tt] la compilazione richiede meno di 2 secondi e non mi dà nessun problema di memoria. Possibile che abbia problemi con [tt]samples=100[/tt]? Per principio sono generalmente contrario ai metodi di interpolazione per il tracciamento dei grafici, in sostituzione di un maggior numero di punti (ma stavolta il risultato è molto buono). Per informazione, in questo caso il metodo usato è quello delle curve di Bézier cubiche.
3) [tt]samples=25[/tt]
4) non ho capito bene cosa vuoi dire. Per le curve dello spazio puoi usare [tt]smooth[/tt]. Per il metodo di colorazione della superficie puoi usare [tt]shader=interp[/tt]. C’è anche la patchplot library (par. 5.6 a pag. 305 del manuale di pgfplots), in particolare con la chiave [tt]patch refines[/tt] per le griglie.
5) vallo a capire. Una notazione alternativa è [tt]sin(\x r)[/tt] per dire che x è in radianti. In questo caso la barra rovesciata è obbligatoria.
6) Una scelta come un’altra. Non è vero che [tt]thick, blue[/tt] implica [tt]no marks[/tt]. Se usi [tt]\addplot[/tt] invece di [tt]\addplot+[/tt] i marcatori non ci sono a meno che non lo decida tu.
7) Dipende dalla visualizzazione. Se usi [tt]axis lines=box[/tt] (per difetto), così in Mathematica e Matlab come qui, l’etichetta dell’asse delle ordinate è centrata e ruotata (in Mathematica devi usare [tt]Frame->true, FrameLabel->{x,y}[/tt]). Se invece usi [tt]axis lines=middle[/tt] l’etichetta è in alto. Puoi modificarne lo stile a piacere con [tt]ylabel style[/tt].
8 ) [tt]variable=\t[/tt] va scritto tra le opzioni di [tt]\addplot[/tt], non di [tt]\axis[/tt]. Quando tu usi un comando per generare una superficie, pgfplots si crea una matrice i cui elementi sono il prodotto cartesiano dei nodi di x per i nodi di y. Su queste coppie ordinate determina la quota in funzione dell’espressione che dai. Per intenderci, l’esempio del sombrero è equivalente a questa notazione:
`\addplot3 [surf, samples=10, domain=-2*pi:2*pi, colormap/cool] ({x}, {y}, {sin(deg(sqrt(x^2+y^2)))/sqrt(x^2+y^2)});`
che vuol dire: il primo elemento è l’insieme dei nodi di x, il secondo quello dei nodi di y, il terzo è la funzione costruita sul loro prodotto cartesiano. Se tu dici [tt]samples y=0[/tt] vuoi che la y sia ignorata e che le coppie ordinate diventino funzione solo di x. Però il primo elemento della terna di parametri non è più [tt]{x}[/tt] come nel caso di default, ma è a sua volta una funzione di x, perciò quello che viene fuori è una curva dello spazio:il primo elemento è una funzione di x, il secondo una funzione di x e il terzo ancora una funzione della sola x (perché hai detto ingora y).9) azimut ed elevazione. Il manuale non è chiaro su quali siano i lati dell’azimut (che si possono desumere dalla prima figura del par. 4.10.1), però dice che la chiave [tt]view[/tt] è compatibile con l’omonimo comando di Matlab. Sulla guida di questo software si legge che l’azimut ha per lato fisso il semiasse negativo delle y, come mostra la figura seguente:
[attachment=257]view.png[/attachment]
10) Questa è difficile. La tridimensionalità di pgfplots è l’illusione generata dalla disposizione dei punti in un grafico bidimensionale. Il valore di [tt]z buffer[/tt] stabilisce quali sono i punti che vanno disegnati per primi e quindi possono essere nascosti dai successivi. Nel caso di [tt]sort[/tt] i punti più in profondità sono i primi. Il codice è corretto.
11) Il problema è che Mathematica scive [tt]ComplexInfinity[/tt] nella tabella, ma pgfplots capisce solo inf e nan, perciò bisogna sostituire tutte le occorrenze del primo con uno dei secondi. Preferisco NaN perché noi non sappiamo se è +inf o -inf. Il codice Mathematica rivisto è:
`out = Table[{x, Gamma[x]}, {x, -5, 5, 0.01}] /. {ComplexInfinity -> NaN};
Export[“gamma.txt”, out, “Table”];`
Il comando di tracciamento per pgfplots è
`\addplot [unbounded coords=jump] file {gamma.txt};`
[tt]unbounded coords[/tt] dice cosa fare quando incontra un valore inf o nan. In questo caso dice di ignorarlo, perciò il grafico viene interrotto nei punti adiacenti. Se avessi scelto [tt]discard[/tt] (default), avrebbe collegato con un segmento i punti adiacenti (come fa Mathematica).12) … gli americani! Scrivi
`\begin{axis}[yticklabel style={/pgf/number format/set thousands separator={}}]`
Attachments:
You must be logged in to view attached files. -
29 Aprile 2012 alle 12:13 #72644::
Liverpool” post=72092Lo sforamento della memoria. […] Mi sembra strano che il problema sia dato dal numero di grafici nel documento (una ventina, come dici tu). Potrebbe essere che tra di essi ce ne sia almeno uno che da solo sfora la memoria. Potresti mandarmi il sorgente per email?
Su questo punto ti rispondo subito (sugli altri voglio documentarmi prima). Metto il sorgente qui sul forum (chiedo scusa se non è minimale, ma in questo caso non può esserlo!). Il documento viene compilato perfettamente, ma se sostituisco nella prima figura (riga 12) “samples=30” con “samples=100”, ecco che ho l’errore fatale di sforamento della memoria.
`\documentclass{article}\usepackage{etex}
\usepackage{pgfplots}\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot3 [
surf,
samples=30,
domain=-2*pi:2*pi,
colormap/cool
]
{sin(deg(sqrt(x^2+y^2)))/%
sqrt(x^2+y^2)};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot {sin(deg(x))};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot [
no marks,
style=thick,
color=blue,
samples=40
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot [
domain=0:2*pi,
thick,
color=blue,
samples=40
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[axis lines=middle]
\addplot [
domain=0:2*pi,
thick,
color=blue,
samples=40
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[
axis x line=bottom,
axis y line=left
]
\addplot [
domain=0:2*pi,
style=thick,
color=blue,
samples=40
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[
axis lines=middle,
xtick={3.14, 6.28},
xticklabels={$\pi$,$2\pi$},
ytick={0.5, 1},
yticklabels={$1/2$, $1$}
]
\addplot [
domain=0:2*pi,
samples=40,
color=blue,
style=thick
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{semilogyaxis}
\addplot [
style=thick,
color=blue
]
{exp(x)};
\end{semilogyaxis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[
xlabel=$x$,
ylabel={$f(x)=x^2-x+4$}
]
\addplot {x^2-x+4};
\legend{$d=2$}
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot {x^2};
\addplot {-x^2};
\legend{$x^2$, $-x^2$}
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[
width=6cm,
height=6cm
]
\addplot [
color=blue,
style=thick,
samples=40,
smooth,
domain=0:2*pi,
variable=\t
]
({cos(deg(t))},{sin(deg(t))});
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot [
color=blue,
style=thick,
samples=50,
domain=0:6*pi,
smooth,
variable=\t
]
({t*cos(deg(t))},
{t*sin(deg(t))});
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot [
color=blue,
style=thick,
samples=50,
smooth,
domain=0:360,
variable=\t
]
({sin(3*t)}, {sin(2*t)});
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot [
color=blue,
style=thick,
samples=50,
domain=0:360,
smooth,
variable=\t
]
({sin(7*t)}, {sin(2*t)});
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[
view={60}{20},
xlabel=$x$,
ylabel=$y$,
zlabel=$z$,
variable=\t
]
\addplot3 [
color=blue,
style=thick,
domain=0:5.5*pi,
samples=40,
smooth,
samples y=0,
no marks
]
({sin(deg(t))}, {cos(deg(t))},
{2*t/(5*pi)});
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot3 [surf] {x^2-y^2};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot3 [surf, colormap/cool]
{x^2-y^2};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot3 [
mesh,
draw=red,
samples=10
]
{x^2-y^2};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot3 [
mesh,
scatter,
samples=10
]
{x^2-y^2};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[
view={-45}{45},
xlabel=$x$,
ylabel=$y$,
zlabel=$z$
]
\addplot3 [surf] {x};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[view={60}{30}]
\addplot3 [
surf,
z buffer=sort,
samples=30,
variable=\u,
variable y=\v,
domain=-1:0,
y domain=0:2*pi
]
({sqrt(1-u^2)*cos(deg(v))},
{sqrt(1-u^2)*sin(deg(v))},
u);
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[view={60}{30}]
\addplot3 [
surf,
z buffer=sort,
samples=30,
domain=0:360,
y domain=0:360,
variable=\u,
variable y=\v
]
({(3+cos(u))*cos(v)},
{(3+cos(u))*sin(v)},
{sin(u)});
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot coordinates {
(10, 100)
(20, 150)
(40, 225)
(80, 340)
(160, 510)
(320, 765)
(640, 1150)
};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot
coordinates {
(2, -2.855)
(3, -3.530)
(4, -4.305)
(5, -5.141)
(6, -6.032)
(7, -6.967)
(8, -7.937)
};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[
xmajorgrids=true]
\addplot [
xbar,
fill=red,
draw=black
]
coordinates {
(4, 0)
(1, 1)
(2, 2)
(5, 3)
(6, 4)
(1, 5)
};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[
xtick={1,2,…,12},
ytick={20,30,…,60},
ymajorgrids=true,
ymin=10,
ymax=60
]
\addplot [
ybar,
bar width=8pt,
fill=blue,
draw=black
]
coordinates {
(1, 22)
(2, 25)
(3, 35)
(4, 42)
(5, 52)
(6, 59)
(7, 44)
(8, 38)
(9, 28)
};
\end{axis}
\end{tikzpicture}\end{document}`
Non dipende dalle potenzialità di calcolo di TeX, ma dalla mole di dati che è necessario memorizzare temporaneamente per tracciare il grafico, quindi il problema non si risolve ricorrendo alla funzione di importazione.
Questa cosa che dici mi sembra strana: se uso Mathematica per fare tutti i conti e uso pgfplots solo per fare i grafici, mi pare ovvio che alleggerirò LaTeX di una bella mole di lavoro (una bella fetta del lavoro l’ha fatta Mathematica); quindi mi aspetto maggiore velocità e minori problemi di sforamento della memoria: pgfplots dovrà “solo” congiungere tutti i punti presenti nel file dati.tex con dei segmentini. Mi sbaglio?
Grazie mille!
-
29 Aprile 2012 alle 12:27 #72645::
Liverpool” post=72092Non è vero che [tt]thick, blue[/tt] implica [tt]no marks[/tt].
Ti faccio vedere con un esempio.
`\begin{tikzpicture}
\begin{axis}
\addplot
{sin(deg(x))};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot [
no marks,
thick,
blue
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}
\addplot [
thick,
blue,
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}`
La prima curva ha i marcatori (è la scelta predefinita di pgfplots). La seconda, dove è specificato, “no marks” non li ha, naturalmente. Ma neppure la terza, con solo “thick,blue”, ha i marcatori. Sbaglio?Grazie,
L.
-
29 Aprile 2012 alle 12:58 #72646::
Io il problema di memoria non ce l’ho, perché a suo tempo l’ho aumentata e ora non so più come fare per ritornare alle impostazioni di default; anzi, se qualcuno me lo spiega, mi fa un piacere. Però [tt]samples=100[/tt] per un grafico 3d vuol dire 100×100=10000 punti, che non sono pochi. Hai provato a vedere se il problema si presenta comunque commentando tutto tranne la prima figura?Il problema non è “fare i calcoli”, ma “dove metterli”. Anche se i numeri li leggo da un file esterno, se non ho sufficiente spazio per memorizzarli, dovrò fermarmi. Per togliermi il dubbio, ho fatto una prova con una tabella di 170000 valori generata da Mathematica: il problema si è verificato lo stesso. Sulla maggiore velocità nel caso di lettura da file, tabella o coordinate digitate manualmente hai ragione: la differenza si nota eccome!
La questione è nella differenza tra [tt]\addplot[/tt] e [tt]\addplot+[/tt]. Il primo sostituisce le impostazioni che seguono a quelle già definite o di default; il secondo le aggiunge semplicemente. Nel primo esempio, non hai dato opzioni e perciò pgfplots ha usato quelle di default (con i marcatori). Nel secondo caso hai detto di ignorare le impostazioni già fatte e di tracciare una linea senza marcatori (chiave inutile perché siccome nessuno gli aveva detto di mettere i marcatori, non li avrebbe messi). Nel terzo hai detto di ignorare le impostazioni già fatte e di tracciare una linea spessa blu. Non avendo detto che vuoi i marcatori, non li ha messi. Se scrivi [tt]\addplot+[thick, blue] {sin(deg(x))};[/tt] vedi che ricompaiono i marcatori, perché nelle opzioni di default ci sono già.
P.S.: Quando il sorgente è così lungo, forse sarebbe meglio allegarlo dopo averlo compresso in formato zip, perché è stata un’impresa selezionare tutto il contenuto nella finestrella.
-
29 Aprile 2012 alle 13:16 #72647::
Liverpool” post=72105Il problema non è “fare i calcoli”, ma “dove metterli”. Anche se i numeri li leggo da un file esterno, se non ho sufficiente spazio per memorizzarli, dovrò fermarmi. Per togliermi il dubbio, ho fatto una prova con una tabella di 170000 valori generata da Mathematica: il problema si è verificato lo stesso. Sulla maggiore velocità nel caso di lettura da file, tabella o coordinate digitate manualmente hai ragione: la differenza si nota eccome!
Chiarissimo. Ho dato un’occhiata alla doc. del pacchetto: gli stratagemmi per aumentare la memoria a disposizione sono cose da iniziati, lontane da quello che il principiante (lettore ideale dell’Arte) è disposto a fare. Direi che questa, in base alla mia poca esperienza, è la limitazione principale di pgfplots (un pacchetto che trovo stupendo): ci si può scontrare con messaggi di sforamento della memoria, e questo anche per un lavoro di dimensioni relativamente contenute come il mio articolo (non parliamo di una tesi o di un libro, magari pieni zeppi di grafici). Certo, le soluzioni ci sono, ma sono cose da esperti. Sbaglio?
Liverpool” post=72105La questione è nella differenza tra [tt]\addplot[/tt] e [tt]\addplot+[/tt]. Il primo sostituisce le impostazioni che seguono a quelle già definite o di default; il secondo le aggiunge semplicemente. Nel primo esempio, non hai dato opzioni e perciò pgfplots ha usato quelle di default (con i marcatori). Nel secondo caso hai detto di ignorare le impostazioni già fatte e di tracciare una linea senza marcatori (chiave inutile perché siccome nessuno gli aveva detto di mettere i marcatori, non li avrebbe messi). Nel terzo hai detto di ignorare le impostazioni già fatte e di tracciare una linea spessa blu. Non avendo detto che vuoi i marcatori, non li ha messi. Se scrivi [tt]\addplot+[thick, blue] {sin(deg(x))};[/tt] vedi che ricompaiono i marcatori, perché nelle opzioni di default ci sono già.
Chiarissimo.
Liverpool” post=72105P.S.: Quando il sorgente è così lungo, forse sarebbe meglio allegarlo dopo averlo compresso in formato zip, perché è stata un’impresa selezionare tutto il contenuto nella finestrella.
Lo terrò a mente la prossima volta!
Grazie mille, il tuo aiuto è stato preziosissimo.
Alla prossima!
-
29 Aprile 2012 alle 13:52 #72648::
Riprendo la discussione che ha per oggetto il disegno programmato nel’Arte. La prossima edizione dell’Arte, dicevo, ne terrà certamente conto e porrà l’utente di fronte a un bivio: da una parte l’uso di software esterni (via più facile ma con un compromesso sulla qualità tipografica), dall’altra il disegno programmato con LaTeX (via più ripida ma con una qualità senza compromessi).Ho iniziato a cimentarmi con pgfplots, che mi è piaciuto subito. Disegnare una funzione con
`\begin{tikzpicture}
\begin{axis}
\addplot [
domain=0:2*pi,
thick,
blue,
]
{sin(x)};
\end{axis}
\end{tikzpicture}
`
è qualcosa di naturale e intuitivo. Sto scrivendo un articolo che vuole spiegare i rudimenti di pgfplots. L’obiettivo è mettere in condizione il lettore di disegnare grafici di funzioni coprendo una gamma ragionevolmente vasta di esigenze. Certo, nessun lavoro potrà mai coprire “tutte” le esigenze tipografiche che possono presentarsi in uno studio di funzione. Quindi è naturale che per le esigenze più particolari si rimandi il lettore alla documentazione di pgfplots, di quasi 400 pagine. Però l’articolo su pgfplots potrebbe benissimo essere un capitolo della prossima edizione dell’Arte.———————————————————————
Un altro paio di maniche, però, si ha con i grafici “qualsiasi” (figure geometriche, secchi, omini, eccetera) fatti con TikZ. Scrivere un articolo introduttivo che spieghi le basi di TikZ non sarebbe neppure difficile, per esempio si potrebbe partire traducendo questo, che trovo ben fatto:
http://cremeronline.com/LaTeX/minimaltikz.pdf
Purtroppo, però, dubito che un articolo (dunque, un capitolo dell’Arte) di una ventina di pagine potrebbe mettere nelle condizioni l’utente per fare qualcosa di significativo (per la sua tesi). L’esempio di questi due maialini mi aveva già colpito in passato:
http://www.texample.net/tikz/examples/parameterised-pig/
Un laureando potrebbe avere l’esigenza di disegnare qualcosa di analogo dettaglio, ma date un’occhiata al codice: impossibile pretendere che un principiante impari cose del genere, impossibile anche solo provare a spiegarle in una guida di base. Credo che repertori di esempi come questo:
http://www.texample.net/tikz/examples/all/date/
saranno sempre insostituibili. L’utente va a guardare il codice e lo modifica di conseguenza; tutto ciò però richiede molta pazienza e molta esperienza.
In definitiva: ha senso un capitolo dell’Arte (diciamo di una ventina di pagine) dal titolo “le basi di TikZ” (del tipo del minimaltikz.pdf che vi ho segnalato), quando si sa già che dopo averlo letto l’utente non sarà in grado di disegnare praticamente nulla di “significativo”? Penso di no (ma desidero sapere che ne pensate voi, non è la prima volta che mi fate cambiare idea).
———————————————————————
Stando così le cose, l’Arte andrebbe rivista così:
- si menziona il disegno programmato, e si dice che si può usare un ambiente tikzpicture oltre che \includegraphics;
- si dice che il disegno di un grafico vettoriale “qualsiasi” richiede molto tempo; si fa vedere un esempio (magari proprio i maialini), si dice che il codice è complicato; si dice che con molta pazienza e molta esperienza si può arrivare a disegnare anche cose del genere; si rimanda alla doc. di TikZ e ad altre risorse, cartacee e online;
- si spiega estesamente, in un capitolo dedicato, come disegnare una funzione: è un’esigenza frequente, e lì ce la si può fare con uno sforzo e un tempo ragionevoli.
Che ne dite?
Grazie,
L.
-
29 Aprile 2012 alle 14:21 #72649::
lorenzo.pantieri” post=72107ci si può scontrare con messaggi di sforamento della memoria, e questo anche per un lavoro di dimensioni relativamente contenute come il mio articolo (non parliamo di una tesi o di un libro, magari pieni zeppi di grafici). Certo, le soluzioni ci sono, ma sono cose da esperti. Sbaglio?
Sbagli quando sostieni implicitamente che i problemi di memoria dipendono dal numero di diagrammi nel documento. Come ti ho detto, da quello che ho capito io (potrei sbagliare perché non ho trovato conferma da nessuna parte) la memoria viene svuotata ogni volta che un comando di tracciamento è completato. Questo vuol dire che in uno stesso ambiente in cui ci sono due comandi [tt]\addplot[/tt] la memoria viene liberata dopo aver tracciato il primo grafico e dopo aver tracciato il secondo. Quindi a maggior ragione è ininfluente il numero di diagrammi nel documento.Per quanto riguarda la complessità delle operazioni per aumentare la memoria, l’ho fatto io che non sono uno “smanettone” su Windows, quindi sono sicuro che qualunque tesista tecnico/scientifico lo sappia fare.Per quanto riguarda l’Arte neanche io ho le idee ben precise su TikZ. Secondo me lo scopo della citazione dovrebbe essere incuriosire il lettore e informarlo sull’esistenza di un pacchetto per il grafico vettoriale. Un capitolo è troppo, ma un paragrafo glielo dedicherei, probabilmente mostrando anche il codice di un esempio elementare per illustrare con che tipo di linguaggio di programmazione si avrà a che fare, altrimenti dire semplicemente che è complicato sortisce l’effetto opposto. Sai che in pgfplots puoi usare anche i comandi di TikZ? In questo modo, per esempio, puoi sovrapporre delle annotazioni di testo in un punto assegnato o tracciare delle frecce. Basta conoscere i comandi [tt]\draw[/tt] e [tt]node[/tt] o al massimo [tt]coordinate[/tt].
P.S.: ho risposto anche alla prima domanda nel mio intervento precedente.
P.S.: Le affermazioni contenute nelle frasi barrate non sono corrette.
-
29 Aprile 2012 alle 14:47 #72650::
Il numero di disegni non è ininfluente sulla quantità totale di memoria utilizzata. Dopo aver trovato il numero massimo di campioni con cui il grafico del sombrero compila senza errori (54 sulla mia macchina) ho inserito una copia identica del grafico e la compilazione è fallita, usando external va tutto bene, anche con copie multiple del grafico più pesante.Ciao
Matteo
-
29 Aprile 2012 alle 14:59 #72651::
matteo.l” post=72113Il numero di disegni non è ininfluente sulla quantità totale di memoria utilizzata.
Grazie per il tuo intervento. Come ho già detto, a suo tempo ho incrementato la memoria, perciò realizzare un esempio che sfori mi richiede un sacco di punti e quindi un’attesa non inferiore alla decina di minuti. La cosa strana è che ho notato che se un grafico dà problemi, spezzando il dominio in più intervalli disgiunti può risolverli, quindi avevo dedotto che una volta tracciato un grafico la memoria veniva liberata. Ad esempio, se dà problemi
`\addplot [samples=10000, domain=-1:1] {0};`probabilmente non li dà
`\addplot [samples=5000, domain=-1:0] {0};
\addplot [samples=5000, domain=0:1] {0};`
Tu hai provato (eventualmente con numeri diversi che sforino la memoria)? Lo puoi confermare? Se sì, come te lo spieghi?Ciao
-
29 Aprile 2012 alle 15:26 #72652::
Liverpool” post=72114
Tu hai provato (eventualmente con numeri diversi che sforino la memoria)? Lo puoi confermare? Se sì, come te lo spieghi?Ciao
Ho provato con gli stessi numeri del tuo esempio e posso confermare che il primo non compila mentre il secondo sì. Non conosco i meccanismi interni di pgfplot per cui non azzardo spiegazioni.
Ciao
Matteo
-
29 Aprile 2012 alle 15:31 #72653::
1.
Matteo ha ragione: il numero dei grafici influisce sulla possibilità di avere un errore fatale di sforamento della memoria. L’esempio è proprio nel codice che ho inviato qualche intervento fa: se in quel codice metto “samples=100” nel sombrero (è il primo grafico) ottengo un errore. Invece compilando da solo il sombrero con “samples=100” tutto fila liscio.2.
La possibilità di incrementare la memoria disponibile è notevole. In questo modo l’utente può compilare, se ne ha bisogno, anche un libro con centinaia di grafici in alta risoluzione. Naturalmente non occorre che l’Arte spieghi come si fa: è sufficiente dire che è possibile farlo, e rimandare il lettore alla doc.3.
Hai ragione Liverpool, un paragrafo su TikZ ci va. Dico di spiegare \draw a livello elementare, con qualche esempio di segmenti, poligoni, cerchi, magari anche riempiti e colorati. Poi metto un esempio più complesso completo di sorgente giusto per dare un’idea. Poi metto un esempio molto complesso (i maialini, per esempio), ma senza sorgente, dicendo che con pazienza si può fare tutto. Sì, sapevo che dentro axis si possono usare anche gli ambienti di pgfplots: questo va detto!Grazie mille,
L.
-
29 Aprile 2012 alle 17:08 #72654::
matteo.l” post=72113Il numero di disegni non è ininfluente sulla quantità totale di memoria utilizzata. Dopo aver trovato il numero massimo di campioni con cui il grafico del sombrero compila senza errori (54 sulla mia macchina) ho inserito una copia identica del grafico e la compilazione è fallita, usando external va tutto bene, anche con copie multiple del grafico più pesante.
In diversi minuti di “frittura di computer” ho provato anch’io. Ho fatto due tentativi:
1) ripetizione del grafico di una retta con un numero totale di campioni superiore al limite. Non ho avuto nessun problema, anche ripetendolo tre volte.
2) ripetizione del grafico del sombrero con un numero totale di campioni superiore al limite (300+300). La compilazione si è bloccata.
A questo punto, come dice Matteo, bisognerebbe conoscere i meccanismi interni di pgfplots per tentare una spiegazione.
-
29 Aprile 2012 alle 19:54 #72655::
Ragazzi, non ho la spiegazione di tutti i quesiti che ponete; ma ho detto mille volte che non bisogna mettere un numero inutilmente alto di campioni.Un grafico di 100mm di base e con 300 campioni lungo tutto l’asse contien 3 campioni al millimetro e qindi un campione al punto tipografico; tranne nel caso di pendenze quasi verticali, un campione al punto è una densità enorme e numeri di campioni dell’ordine di 10000 sono approcci di persone che non si fanno due conti sulle dita; quando si fa della grafica i due conti sulle dita bisogna sempre farli. Senza offesa per nessuno; ci sono cascato anch’io.
Liverpool: quando dici che per il sombrero hai suato 300+300 campioni ti sei espresso male e di fatto hai perso di vista la realtà del problema; in una figura a 3 dimensioni, hai due campionature, una lungo l’asse x e una lungo l’asse Y che produco ordinate lungo l’asse z; quindi quando campioni 300 volte lungo l’asse x e 300 volte lungo l’asse y produci in totale 90 000 campioni, che impegnano la memoria per 180 000 dati numerici da conservare; ogni dato numerico è fatto di 32 bit, cioè 4 byte, quindi impegni la memoria con 720 000 byte di dati.
Tutti possiamo leggere nel file log a quanto ammonta la memoria, o meglio, a quanto ammontano le varie memorie di cui si servono i programmi come pdftex; è scritto nelle ultime righe del file log. vedrai che 720 000 byte non sono tutta la memoria disponibile, ma una bella fetta; leggi quanta memoria è stata impiegata per una compilazione “normale” e riferisciti a quella per sapere di quanta altra memoria puoi disporre.
Aggiungere memoria ai vari programmi del sistema TeX non è difficile, ma di solito è inutile; se si arriva alla saturazione della memoria bisogna domandarsi sempre quale errore si sia fatto; e si scopre che si è fatto l’errore di non farsi due conti sulle dita prima di fare qualunque grafica.
Il fatto che oggi i calcolatori possano disporre di diversi gibibyte di RAM, non autorizza a sprecare la memoria; il tempo di esecuzione dipende anche da quanti swap il programma deve fare fra la memoria RAM disponibile e la memoria virtuale del sistema operativo (di solito il doppio della RAM); Non è infatti una questione di memoria, o soltanto di memoria, è anche questione di RAM e tempo di esecuzione.
Si vede che nessuno di voi ha mai usato il sistema TeX sotto DOS, quando la memoria disponibile di solito era una frazione dei 640KiB che dovevano essere spartiti anche con il sistema operativo 😎 Fare qualunque elaborazione disponendo un una frazione di 640 KiB era un vero problema, ma ci si riusciva gestendo al memoria dei programmi in uso con molta attenzione.
Obbiezione: ma per avere diagrammi di alta definizione bisogna avere molti campioni; non è vero: per avere disegni ad alta definizione bisogna usare le spline cubiche di Bézier che permettono di disegnare archi piuttosto lunghi con due nodi e due punti guida; gli stessi archi disegnati con la stessa definizione richiedono diverse centinaia di campioni. Detto in altri termini: l’interpolazione lineare (curve di Bézier del primo ordine: segmenti) richiede un mucchio di punti; l’interpolazione quadratica (curve di Bézier del secondo ordine; parabole raccordate in modo che mantenere la continuità della tangente) funzionano molto meglio e i contorni dei glifi dei font TrueType sono appunto realizzati con curve di Bézier quadratiche; notate qualche difetto? Con curve del terzo ordine (curve di Bézier del terzo ordine: curve cubiche che possono presentare sia flessi sia nodi/intrecci) occorrono ancora meno punti; i contorni dei font Type 1 sono descritti da curve di Bézier del terzo ordine. Le curve di Bézier del terzo ordine sono raccordate in modo da mantenere la continuità della tangente sia quella della concavità. Fidatevi di Bézier: le quadratiche vanno già bene; le cubiche vanno ottimamente.
Sia tikz sia pgfplots possono usare tranquillamente le curve di Bézier; con grossi vantaggi sul disegno e sull’impiego modesto della memoria.
Scusate il solito sproloquio…
-
30 Aprile 2012 alle 5:22 #72656::
OldClaudio” post=72123Liverpool: quando dici che per il sombrero hai suato 300+300 campioni ti sei espresso male e di fatto hai perso di vista la realtà del problem
Mi sono solo espresso male. Dicendo che “ho utilizzato un numero totale di campioni superiore al limite (300+300)”, volevo dire in un documento ho ripetuto due volte la figura del sombrero, ogni volta con [tt]samples=300[/tt], perciò il conto è 2x300x300.
Comunque, Claudio, qui il problema non era esagerare con il numero di punti. Lorenzo ha affermato che in un documento con molti grafici la compilazione si blocca quando si sale con il numero di campioni. Matteo ha addirittura individuato in 54 il numero di campioni che sforano la memoria (e 54 non mi sembrano tanti). Allora io, per evitare di creare un documento con molti grafici e pochi campioni, ne ho generato uno con due soli grafici e molti campioni, in modo da ottenere lo stesso effetto con poche istruzioni. Non avrei mai pensato ad un sombrero di 90000 punti, tant’è vero che il codice originale del sombrero ne conteneva soltanto 2500.
Ciao
-
30 Aprile 2012 alle 6:47 #72657::
OldClaudio” post=72123Detto in altri termini: l’interpolazione lineare (curve di Bézier del primo ordine: segmenti) richiede un mucchio di punti; [omissis] . Le curve di Bézier del terzo ordine sono raccordate in modo da mantenere la continuità della tangente sia quella della concavità. Fidatevi di Bézier: le quadratiche vanno già bene; le cubiche vanno ottimamente. Sia tikz sia pgfplots possono usare tranquillamente le curve di Bézier; con grossi vantaggi sul disegno e sull’impiego modesto della memoria.
Su questo punto non sono d’accordo ad occhi chiusi. Ci sono dei grafici per i quali le curve di Bézier vanno benissimo e sono quelli in cui, come hai detto tu, tra le proprietà della curva c’è la continuità della tangente e della concavità. Ci sono però delle curve che non hanno questa proprietà e tracciarle con l’interpolazione cubica può dare problemi se i punti non sono scelti bene. Prendi ad esempio il grafico di una rampa o una qualunque curva con un punto angoloso. Se i nodi sono scelti uniformemente nel dominio e sono radi, rischi di prendere fischi per fiaschi. Se invece i nodi sono uniformemente distribuiti e densi va tutto bene, ma a questo punto a che ti serve l’interpolazione non lineare? Per mantenere basso il numero dei nodi, la soluzione è addensarli in prossimità del punto angoloso e diradarli altrove, che è ciò che fanno Matlab e Mathematica quando determinano il luogo delle radici, ad esempio. Ma se non usiamo un algoritmo del genere? Pensa ad un campionamento uniforme con acquisizione dati. Affideresti alla cieca la tua analisi alle curve di Bézier? La figura che segue mostra la differenza di comportamento della rampa nel caso di interpolazione lineare e cubica su nodi equispaziati, ottenuto con questo codice:
`\documentclass{standalone}
\usepackage{pgfplots}\begin{document}
\begin{tikzpicture}
\begin{axis} [legend pos=north west, no marks]
\addplot+[thick, dashed] coordinates {(-3,0) (-2,0) (-1,0) (0,0) (1,1) (2,2) (3,3)};
\addplot+[smooth, thick] coordinates {(-3,0) (-2,0) (-1,0) (0,0) (1,1) (2,2) (3,3)};
\legend{lineare,cubica}
\end{axis}
\end{tikzpicture}
\end{document}`[attachment=246]rampa.png[/attachment]
Altro aspetto è quello del risparmio di memoria. Perché pensi che l’interpolazione di ordine superiore faccia risparmiare memoria? Secondo te dove vengono memorizzati i punti inermedi tra i nodi (*)? Quei punti che non ci metti tu nella definizione della curva se li deve calcolare e memorizzare lui per tracciare il grafico: non è che i punti sul pdf se li può inventare. Quindi non solo non risparmi memoria, ma rallenti anche la compilazione(**). Fa una prova. Io ho provato a tracciare una retta con un numero di campioni spinto quasi al limite. Ho aggiunto l’opzione [tt]smooth[/tt] e la compilazione si è arrestata per sforamento della capacità. L’interpolazione cubica serve solo a rendere più dolci i grafici quando i punti a disposizione sono pochi e ad ottenere risultati decenti non rallentando troppo la compilazione(**) con un numero sproporzionato di campioni. La soluzione sta semplicemente nel non esagerare con i nodi, ma io preferisco (quasi) sempre campioni veri a campioni inventati.
O sbaglio? Ciao
*************************************
Edit: forse ho capito ora che con “impiego modesto della memoria” volevi dire che con le curve di Bézier servono meno punti in più che con l’interpolazione lineare per ottenere generalmente buoni risultati con un modesto incremento della memoria. Se è così siamo d’accordo (con le obiezioni sollevate all’inizio), ma è bene chiarire che l’interpolazione cubica ha bisogno di ulteriore spazio di memoria per definire le curve rispetto a quella riservata ai campioni.
*************************************(*) non intendo i punti che costituiscono la linea, ma quelli necessari a determinare univocamente l’equazione della curva.
(**) rallenti la compilazione rispetto al caso in cui non aumenti tu i nodi, ma se per evitare le curve di Bézier aumenti i campioni, il discorso è vero fintantoché la funzione della quale vuoi disegnare il grafico è più “semplice” di un polinomio di terzo grado e quindi quasi mai.
Attachments:
You must be logged in to view attached files. -
30 Aprile 2012 alle 7:07 #72658::
Lo so che tu @Liverpool sai cosa vuol dire usare molti o pochi nodi; dicevo solo che ti eri espresso male e ora ho capito che cosa volevi dire.Ho anche detto che non so per quale miracolo interno di pgfplots spezzare un dominio di disegno in due renda la cosa compilabile, mentre non lo è per sforamento della memoria se il dominio del disegno viene mantenuto unico. Certo deve avvenire un parziale svuotamento di memoria se la suddivisione del dominio produce effetti positivi.
Ma il discorso di tanti disegni che saturano la memoria è collegato anche al meccanismo di svuotamento della coda delle figure. È evidente che finché una figura è in coda le sue centinaia di migliaia di dati impegnano la memoria; non appena la figura esce dalla coda e viene spedita fuori nella sua pagina e appesa al file pdf di uscita, le centinaia di migliaia di dati liberano ogni tipo di memoria che possano occupare.
Lorenzo, a te non è mai capitato di saturare la memoria perché una grande figura blocca la coda delle figure e trattiene in memoria anche figure più piccole che invece non riescono ad uscire perché sono bloccate da un elefante che non passa attraverso al porta? A me è capitato, ma è successo quando non conoscevo a fondo il meccanismo di svuotamento delle code. Ma la complicazione della figura e la coda contenente una moltitudine di figure sono due cose diverse anche se possono produrre effetti simili. Detto in altri termini; se disegni il sombrero con Mathematica e lo salvi in formato pdf, il file che lo contiene quanti mega occupa? se passi da 50 campioni in ogni direzione a 300 campioni, quanto varia la dimensione del file pdf? Non è che il disegno fatto con pgfplots sia più grande o più piccolo in termini di mega, ma prima di poter essere spedito fuori, lo stesso disegno eseguito con pgfplots deve restare nella pancia di pdftex compresi i calcoli intermedi, ed è quella la memoria di pdftex che può saturarsi.
Lo stesso vale per le foto; una volta, quando le macchine fotografiche facevano delle foto in formato jpg con 800px per 640px si potevano spedire decine di foto allegate ad un messaggio di posta elettronica; oggi che i sensori delle macchine digitali possono produrre foto anche di 12-15 mega pixel, sei fortunato se ne puoi spedire una sola (tenuto conto che il protocollo di posta elettronica spedisce un byte di 8 bit ogni 5 bit del file allegato). Ma quanti sono coloro che aprono il Finder o l’Explorer e leggono le dimensioni dei file da allegare e si rendono conto di quel 60% di ingombro in più per il protocollo di posta?
Lo stesso può succedere con i disegni programmati, con l’aggravante che non è facile sapere quale sia l’ingombro della memoria di un disegno programmato.
-
30 Aprile 2012 alle 10:49 #72659::
Liverpool” post=72127[…] con le curve di Bézier servono meno punti in più che con l’interpolazione lineare per ottenere generalmente buoni risultati con un modesto incremento della memoria. Se è così siamo d’accordo, tranne che per le obiezioni sollevate all’inizio […].
Sono d’accordo, vediamo un semplice esempio:
`\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot [
domain=0:360,
variable=\t,
% samples=200,
% samples=50,
% smooth,
color=blue,
style=thick,
]
({sin(7*t)}, {sin(2*t)});
\end{axis}
\end{tikzpicture}
\end{document}`
Se compilate questo documento così com’è, vedrete che la curva di Lissajous è resa in modo inaccettabile. Per avere un risultato decente, le strade sono due:
1. aumentare molto “samples”: “samples=50” non basta (provare per credere), occorre almeno “samples=200”;
2. usare “smooth” con “samples=50”.
Nel primo caso non si introduce alcuna ipotesi di regolarità sulla curva, ma occorre un numero di campioni molto elevato; nel secondo caso si introduce l’ipotesi di regolarità (che è vera, per la funzione in questione) e si ottiene un ottimo risultato anche senza spingere molto su “samples”. In base alla mia poca esperienza, se si ha a che fare con funzioni definite analiticamente che siano “regolari” (polinomi, seni, coseni, esponenziali, logaritmi, …) dare “smooth” funziona sempre e aiuta a ridurre drasticamente “samples”.Faccio i complimenti a Liverpool per il controesempio che mostra che le spline non sono sempre indicate . D’altra parte, stiamo parlando di interpolazione (sia lineare sia con spline cubiche): interpolare vuol dire che un (certo) errore lo si commette sempre. Si tratta di minimizzarlo.
Riguardo agli errori di sforamento della memoria, ci sono eccome, se si vogliono molti grafici ad alta risoluzione: l’esempio che ho postato qualche intervento fa mi sembra significativo. Ci sono poche decine di grafici in tutto: le curve sono tutte con “samples=40” o “samples=50” (che non è una tragedia); le superfici le ho dovute mettere tutte con “samples=30”: mi basta portarne anche una sola a “samples=40”, e ottengo l’errore di sforamento della memoria.
Qualche altra domanda:
1.
Mi confermate che l’opzione “shader=interp” è l’equivalente di “smooth” nel caso di superfici tridimensionali?2.
Qual è la chiave corrispondente al valore “thick”? In altre parole: “blue” è come dire “color=blue”; “thick” a che cosa è equivalente?3.
Qual è la chiave corrispondente di “smooth”?4.
Riguardo al procedimento per ottenere la Gamma di Eulero partendo da Mathematica, ho seguito per filo e per segno le istruzioni di Liverpool, ma ottengo qualcosa di inaspettato:
La Gamma non mi va bene per due ragioni:
1. le rette verticali in blu (sembra che facciano parte della curva!);
2. le proporzioni: no capisco perché il grafico venga così piccolo, rispetto a tutti gli altri (vedi il confronto con i due grafici di sopra).Grazie,
L.
-
30 Aprile 2012 alle 12:08 #72660::
lorenzo.pantieri” post=721382.
Qual è la chiave corrispondente al valore “thick”? In altre parole: “blue” è come dire “color=blue”; “thick” a che cosa è equivalente?Ti posso rispondere in merito a questo. 🙂 La parola chiave thick corrisponde a scrivere:
`\draw[line width=0.8pt](0,0)–(1,0);`
Informazioni complete su tutte le parole chiave riguardanti lo spessore dei segmenti le trovi nella sottosezione 15.3.1 Graphic Parameters: Line Width, Line Cap, and Line Join.Per il colore, no la relazione non è corretta. Se scrivo:
`\draw[blue](0,0)–(1,0) node
{Ciao};`
automaticamente anche la label “Ciao” diventa blu. Come mai? Perché definire un colore nelle opzioni automaticamente definisce: 1) colore del segmento, 2) colore del riempimento, 3) colore del testo. L’analogo di:`\draw[blue](0,0)–(1,0) node
{Ciao};`
è:`\draw[draw=blue,text=blue](0,0)–(1,0) node
{Ciao};`
Quello che si fa di solito è definire la colorazione in modo generale e poi cambiare solo la parte che serve. Ad esempio, per far si che la label “Ciao” sia rossa mantenendo il segmento blu:`\draw[blue,text=red](0,0)–(1,0) node
{Ciao};`
Se invece volessi costruire un box con segmento per il bordo blu, riempimento con blu sfumato e testo rosso al centro:`\draw[blue,fill= blue!10,text=red](0,0)–(1,0)–(1,0.5)–(0,0.5)–(0,0) node[above right]{Ciao};`
EDIT: ho trovato una spiegazione migliore su come impostare i colori. Riporto due commenti di Andrew Stacey da questa risposta:
When you use color=black then that is a meta-command which sets all colours to black: line colour, fill colour, and text colour. If you want to override any of those then you have to reset it afterwards.
The order of doing things is more commonly important than not. That 2+3 = 3+2 ought to be surprising – the fact that it isn’t is merely because we’re so familiar with it that we don’t notice the oddity. But almost everywhere else, order matters. In Norway there is a children’s song which translates roughly to: “Open window, look out – hello weather, how are you?”. Imagine the difference if you first put your head out of the window and then opened it.Ciao
Claudio
-
30 Aprile 2012 alle 12:43 #72661::
lorenzo.pantieri” post=721381. Mi confermate che l’opzione “shader=interp” è l’equivalente di “smooth” nel caso di superfici tridimensionali?
2. Qual è la chiave corrispondente al valore “thick”? In altre parole: “blue” è come dire “color=blue”; “thick” a che cosa è equivalente?
3. Qual è la chiave corrispondente di “smooth”?
4. Riguardo al procedimento per ottenere la Gamma di Eulero partendo da Mathematica, ho seguito per filo e per segno le istruzioni di Liverpool, ma ottengo qualcosa di inaspettato1) No. [tt]shader=interp[/tt] riguarda l’algoritmo di colorazione delle facce, non la forma e la quantità delle stesse. In altre parole, se ho solo 10 campioni per lato per il sombrero, con [tt]shader=interp[/tt] la cororazione la vedrò linearmente proporzionale alla quota, ma la forma la vedrò sempre piuttosto squadrata perché le facce sono poche. Tra l’altro l’interpolazione è lineare e non cubica. Però a volte l’effetto che dà il colore è maggiore di quello che dà la forma, perciò l’occhio si illude di vedere una superficie omogenea anche quando non lo è, solo perché se la aspetta. Penso che quello che ti serve sia [tt]patch refines[/tt], ma sinceramente non l’ho mai usato quindi non posso garantire.
2) e 3) [tt]thick[/tt] e [tt]smooth[/tt] sono entrambe chiavi, non opzioni (probabilmente le ho chiamate così perché di solito non faccio differenza). Se vedi nell’indice analitico trovi l’apposizione “key”. [tt]blue[/tt] è un’opzione che puoi dare alle chiavi [tt]draw[/tt], [tt]fill[/tt] o [tt]color[/tt], se vuoi colorare rispettivamente solo il tratto, solo il riempimento o entrambi.
4) Non hai seguito per filo e per segno le mie istruzioni 😡 , perché io ho parlato di [tt]unbounded coords[/tt] e ti ho anche spiegato la differenza tra le due opzioni. 😛
Perché dici che il grafico è più piccolo? A me sembra uguale. Forse perché una parte dello spazio la occupa il titolo…
Ciao
-
30 Aprile 2012 alle 12:54 #72662::
lorenzo.pantieri” post=72138
[…] con le curve di Bézier servono meno punti in più che con l’interpolazione lineare per ottenere generalmente buoni risultati con un modesto incremento della memoria. Se è così siamo d’accordo, tranne che per le obiezioni sollevate all’inizio […].
Sono d’accordo, vediamo un semplice esempio:
`\documentclass{article}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot [
domain=0:360,
variable=\t,
% samples=200,
% samples=50,
% smooth,
color=blue,
style=thick,
]
({sin(7*t)}, {sin(2*t)});
\end{axis}
\end{tikzpicture}
\end{document}`
Se compilate questo documento così com’è, vedrete che la curva di Lissajous è resa in modo inaccettabile. Per avere un risultato decente, le strade sono due:
1. aumentare molto “samples”: “samples=50” non basta (provare per credere), occorre almeno “samples=200”;
2. usare “smooth” con “samples=50”.
Nel primo caso non si introduce alcuna ipotesi di regolarità sulla curva, ma occorre un numero di campioni molto elevato; nel secondo caso si introduce l’ipotesi di regolarità (che è vera, per la funzione in questione) e si ottiene un ottimo risultato anche senza spingere molto su “samples”. In base alla mia poca esperienza, se si ha a che fare con funzioni definite analiticamente che siano “regolari” (polinomi, seni, coseni, esponenziali, logaritmi, …) dare “smooth” funziona sempre e aiuta a ridurre drasticamente “samples”.Faccio i complimenti a Liverpool per il controesempio che mostra che le spline non sono sempre indicate . D’altra parte, stiamo parlando di interpolazione (sia lineare sia con spline cubiche): interpolare vuol dire che un (certo) errore lo si commette sempre. Si tratta di minimizzarlo.
Riguardo agli errori di sforamento della memoria, ci sono eccome, se si vogliono molti grafici ad alta risoluzione: l’esempio che ho postato qualche intervento fa mi sembra significativo. Ci sono poche decine di grafici in tutto: le curve sono tutte con “samples=40” o “samples=50” (che non è una tragedia); le superfici le ho dovute mettere tutte con “samples=30”: mi basta portarne anche una sola a “samples=40”, e ottengo l’errore di sforamento della memoria.
Qualche altra domanda:
1.
Mi confermate che l’opzione “shader=interp” è l’equivalente di “smooth” nel caso di superfici tridimensionali?2.
Qual è la chiave corrispondente al valore “thick”? In altre parole: “blue” è come dire “color=blue”; “thick” a che cosa è equivalente?3.
Qual è la chiave corrispondente di “smooth”?4.
Riguardo al procedimento per ottenere la Gamma di Eulero partendo da Mathematica, ho seguito per filo e per segno le istruzioni di Liverpool, ma ottengo qualcosa di inaspettato:
La Gamma non mi va bene per due ragioni:
1. le rette verticali in blu (sembra che facciano parte della curva!);
2. le proporzioni: no capisco perché il grafico venga così piccolo, rispetto a tutti gli altri (vedi il confronto con i due grafici di sopra).Grazie,
L.La Gamma di Eulero non è proprio una passeggiata 😆
Il grafico con pgfplots della Gamma è riportato nell’articolo su Ars.
Il codice è pubblico ed è scaricabile da github.Attenzione alla licenza di rilascio di questo materiale, in particolare l’articolo è sotto CC.
Grazie.
-
30 Aprile 2012 alle 13:27 #72663::
Liverpool” post=721551) No. [tt]shader=interp[/tt] riguarda l’algoritmo di colorazione delle facce, non la forma e la quantità delle stesse. In altre parole, se ho solo 10 campioni per lato per il sombrero, con [tt]shader=interp[/tt] la cororazione la vedrò linearmente proporzionale alla quota, ma la forma la vedrò sempre piuttosto squadrata perché le facce sono poche. Tra l’altro l’interpolazione è lineare e non cubica. Però a volte l’effetto che dà il colore è maggiore di quello che dà la forma, perciò l’occhio si illude di vedere una superficie omogenea anche quando non lo è, solo perché se la aspetta.
Perfetto!
Liverpool” post=721552) e 3) [tt]thick[/tt] e [tt]smooth[/tt] sono entrambe chiavi, non opzioni (probabilmente le ho chiamate così perché di solito non faccio differenza). Se vedi nell’indice analitico trovi l’apposizione “key”. [tt]blue[/tt] è un’opzione che puoi dare alle chiavi [tt]draw[/tt], [tt]fill[/tt] o [tt]color[/tt], se vuoi colorare rispettivamente solo il tratto, solo il riempimento o entrambi.
Allora, vediamo di metterci d’accordo sulla terminologia. In questo codice
`\addplot`
“color” è la chiave, “blu” è il valore, “color=blue” è l’opzione. Di solito quando il valore di una chiave è “true”, questo si può sottointendere e scrivere soltanto la chiave. Nel comando \addplot, se do semplicemente “blue” questo equivale a “draw=blue”, “fill=blue” o a “color=blue”? E se “thick” e “smooth” sono chiavi, quali sono i loro valori?Liverpool” post=721554) Non hai seguito per filo e per segno le mie istruzioni 😡 , perché io ho parlato di [tt]unbounded coords[/tt] e ti ho anche spiegato la differenza tra le due opzioni. 😛 Perché dici che il grafico è più piccolo? A me sembra uguale. Forse perché una parte dello spazio la occupa il titolo…
Hai perfettamente ragione… scusami! 🙁 Ho rimediato, questo è il risultato:

Continuo a trovare il grafico più piccolo (e anche spostato un po’ a sinistra rispetto agli altri due), ma forse è solo una mia impressione…
Per robitex: ho letto l’articolo, ma cercavo qualcosa di un po’ più semplice per disegnare la gamma. Il metodo suggerito da Liverpool è decisamente facile: in definitiva, una volta generato il file con i dati, basta l’istruzione
`\addplot [unbounded coords=jump] {gamma.txt};`Grazie mille! 🙂
-
30 Aprile 2012 alle 13:31 #72664::
lorenzo.pantieri” post=72162
1) No. [tt]shader=interp[/tt] riguarda l’algoritmo di colorazione delle facce, non la forma e la quantità delle stesse. In altre parole, se ho solo 10 campioni per lato per il sombrero, con [tt]shader=interp[/tt] la cororazione la vedrò linearmente proporzionale alla quota, ma la forma la vedrò sempre piuttosto squadrata perché le facce sono poche. Tra l’altro l’interpolazione è lineare e non cubica. Però a volte l’effetto che dà il colore è maggiore di quello che dà la forma, perciò l’occhio si illude di vedere una superficie omogenea anche quando non lo è, solo perché se la aspetta.
Perfetto!
Liverpool” post=721552) e 3) [tt]thick[/tt] e [tt]smooth[/tt] sono entrambe chiavi, non opzioni (probabilmente le ho chiamate così perché di solito non faccio differenza). Se vedi nell’indice analitico trovi l’apposizione “key”. [tt]blue[/tt] è un’opzione che puoi dare alle chiavi [tt]draw[/tt], [tt]fill[/tt] o [tt]color[/tt], se vuoi colorare rispettivamente solo il tratto, solo il riempimento o entrambi.
Allora, vediamo di metterci d’accordo sulla terminologia. In questo codice
`\addplot[color=blue]`
“color” è la chiave, “blu” è il valore, “color=blue” è l’opzione. Di solito quando il valore di una chiave è “true”, questo si può sottointendere e scrivere soltanto la chiave. Nel comando \addplot, se do semplicemente “blue” questo equivale a “draw=blue”, “fill=blue” o a “color=blue”? E se “thick” e “smooth” sono chiavi, quali sono i loro valori?Liverpool” post=721554) Non hai seguito per filo e per segno le mie istruzioni 😡 , perché io ho parlato di [tt]unbounded coords[/tt] e ti ho anche spiegato la differenza tra le due opzioni. 😛 Perché dici che il grafico è più piccolo? A me sembra uguale. Forse perché una parte dello spazio la occupa il titolo…
Hai perfettamente ragione… scusami! 🙁 Ho rimediato, questo è il risultato:

Continuo a trovare il grafico più piccolo (e anche spostato un po’ a sinistra rispetto agli altri due), ma forse è solo una mia impressione…
Per robitex: ho letto l’articolo, ma cercavo qualcosa di un po’ più semplice per disegnare la gamma. Il metodo suggerito da Liverpool è decisamente facile: in definitiva, una volta generato il file con i dati, basta l’istruzione
`\addplot [unbounded coords=jump] {gamma.txt};`Grazie mille! 🙂
Il grafico è piccolo perché non ne imposti la dimensione della tela…
Un saluto.
R.
-
30 Aprile 2012 alle 13:47 #72665::
lorenzo.pantieri” post=72162Allora, vediamo di metterci d’accordo sulla terminologia. In questo codice
`\addplot`”color” è la chiave, “blu” è il valore, “color=blue” è l’opzione. Di solito quando il valore di una chiave è “true”, questo si può sottointendere e scrivere soltanto la chiave. Nel comando \addplot, se do semplicemente “blue” questo equivale a “draw=blue”, “fill=blue” o a “color=blue”? E se “thick” e “smooth” sono chiavi, quali sono i loro valori?Vedi che faccio confusione? Comunque [tt]blue[/tt] equivale a [tt]color=blue[/tt] e [tt]smooth[/tt] e [tt]thick[/tt] sono chiavi senza valore (è scritto nel manuale).
-
30 Aprile 2012 alle 13:51 #72666::
robitex” post=72163Il grafico è piccolo perché non ne imposti la dimensione della tela…
Certo, impostando le dimensioni della tela posso fare quello che voglio. Però neppure negli altri grafici due di quella pagina ho impostato le dimensioni della tela, eppure quei grafici sono un po’ più grandi. Mi chiedevo il motivo di questa differenza…
Liverpool” post=72165Comunque [tt]blue[/tt] equivale a [tt]color=blue[/tt] e [tt]smooth[/tt] e [tt]thick[/tt] sono chiavi senza valore (è scritto nel manuale).
Ottimo!
Grazie mille,
L.
-
30 Aprile 2012 alle 13:56 #72667::
lorenzo.pantieri” post=72162
Allora, vediamo di metterci d’accordo sulla terminologia. In questo codice
`\addplot`
“color” è la chiave, “blu” è il valore, “color=blue” è l’opzione. Di solito quando il valore di una chiave è “true”, questo si può sottointendere e scrivere soltanto la chiave. Nel comando \addplot, se do semplicemente “blue” questo equivale a “draw=blue”, “fill=blue” o a “color=blue”? E se “thick” e “smooth” sono chiavi, quali sono i loro valori?Ti ho risposto in merito a color e thick nel mio precedente messaggio (con un edit recente e molto interessante sulla spiegazione delle chiavi per i colori :D)
lorenzo.pantieri” post=72162
Hai perfettamente ragione… scusami! 🙁 Ho rimediato, questo è il risultato:Continuo a trovare il grafico più piccolo (e anche spostato un po’ a sinistra rispetto agli altri due), ma forse è solo una mia impressione…
Per robitex: ho letto l’articolo, ma cercavo qualcosa di un po’ più semplice per disegnare la gamma. Il metodo suggerito da Liverpool è decisamente facile: in definitiva, una volta generato il file con i dati, basta l’istruzione
`\addplot [unbounded coords=jump] {gamma.txt};`Grazie mille! 🙂
Di un grafico puoi specificare la dimensione con:
`
\pgfplotsset{width=….}
`Ciao
Claudio
-
30 Aprile 2012 alle 14:04 #72668::
lorenzo.pantieri” post=72162
Continuo a trovare il grafico più piccolo (e anche spostato un po’ a sinistra rispetto agli altri due), ma forse è solo una mia impressione…Credo che i grafici abbiano le stesse dimensioni, solo che il grafico in alto è spostato più a destra a causa delle etichette dell’asse y; per il resto i due assi x mi sembrano uguali, bisognerebbe misurare con il righello 😛
-
1 Maggio 2012 alle 7:01 #72669::
Ancora ciao. Vorrei fare il grafico di una sfera. Se scrivo semplicmente
`\begin{tikzpicture}
\begin{axis}[title={Sfera.}]
\addplot3 [
surf,
z buffer=sort,
samples=30,
variable=\u,
variable y=\v,
domain=0:180,
y domain=0:360,
colormap/cool
]
({cos(u)*sin(v)},
{sin(u)*sin(v)},
{cos(v)});
\end{axis}
\end{tikzpicture}`
l”apparenza è quella di un ellissoide. Ovviamente, ciò dipende dal fatto che la tela predefinita è in formato rettangolare. Ho cercato di curare la cosa aggiungendo alle opzioni di axis
`width=6cm,
height=6cm
`
La situazione migliora, ma l’effetto di schiacciamento c’è sempre. Come risolvo?Grazie!
-
2 Maggio 2012 alle 15:48 #72670::
Un’altra domanda. Mi seorprende il comportamento del valore “middle”.
`\documentclass{article}
\usepackage{pgfplots}
\begin{document}\begin{tikzpicture}
\begin{axis}[
axis x line=middle,
axis y line=left
]
\addplot [thick,blue] {x^2};
\end{axis}
\end{tikzpicture}\end{document}`
Come vedete, l’asse x non è “in mezzo”, come il nome suggerisce.Un altro esempio:
`\begin{tikzpicture}
\begin{axis}[
axis x line=bottom,
axis y line=middle
]
\addplot [
thick,
blue,
domain=0:2*pi
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}
`
Come vedete, questa volta è l’asse y a non essere al centro (è a sinistra).Questo è ancora più strano.
`\begin{tikzpicture}
\begin{axis}[
axis x line=middle,
axis y line=middle
]
\end{axis}
\end{tikzpicture}`
Come vedete, né l’asse x né l’asse y sono in mezzo: l’asse y è a destra, l’asse y è in basso.Sul manuale ho trovato che
The case center is a synonym for middle, both draw the line through the respective coordinate 0. If this coordinate is not part of the axis limit, the lower axis limit is chosen instead.
ma non ho proprio capito che significa. Da quel poco che ho capito, “middle” cerca di mettere l’asse al centro, ma se ciò dovesse creare la presenza di quadranti vuoti, allora l’asse x viene messo in basso e l’asse y viene messo a sinistra, se necessario. Ho detto bene? Questa cosa vorrei capirla per bene, ecco!
Un’altra cosa che non ho capito è questa (è tratta dal manuale di pgfplots, pagina 168):
`axis lines=box left middle center right none`
La chiave “axis line”, da quel che ho capito, imposta il formato di entrambi gli assi contemporaneamente. Che senso ha dire che entrambi gli assi devono essere messi a destra (“right”) o a sinistra (“left”)? A destra e a sinistra ci potrà andare l’asse y, non l’asse x!Ah, “middle” e “center” sono sinonimi, dunque?
Grazie,
L.
-
2 Maggio 2012 alle 17:42 #72671::
lorenzo.pantieri” post=72258Un’altra domanda. Mi seorprende il comportamento del valore “middle”.
`\documentclass{article}
\usepackage{pgfplots}
\begin{document}\begin{tikzpicture}
\begin{axis}[
axis x line=middle,
axis y line=left
]
\addplot [thick,blue] {x^2};
\end{axis}
\end{tikzpicture}\end{document}`
Come vedete, l’asse x non è “in mezzo”, come il nome suggerisce.Un altro esempio:
`\begin{tikzpicture}
\begin{axis}[
axis x line=bottom,
axis y line=middle
]
\addplot [
thick,
blue,
domain=0:2*pi
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}
`
Come vedete, questa volta è l’asse y a non essere al centro (è a sinistra).Questo è ancora più strano.
`\begin{tikzpicture}
\begin{axis}[
axis x line=middle,
axis y line=middle
]
\end{axis}
\end{tikzpicture}`
Come vedete, né l’asse x né l’asse y sono in mezzo: l’asse y è a destra, l’asse y è in basso.Sul manuale ho trovato che
The case center is a synonym for middle, both draw the line through the respective coordinate 0. If this coordinate is not part of the axis limit, the lower axis limit is chosen instead.
ma non ho proprio capito che significa. Da quel poco che ho capito, “middle” cerca di mettere l’asse al centro, ma se ciò dovesse creare la presenza di quadranti vuoti, allora l’asse x viene messo in basso e l’asse y viene messo a sinistra, se necessario. Ho detto bene? Questa cosa vorrei capirla per bene, ecco!
Un’altra cosa che non ho capito è questa (è tratta dal manuale di pgfplots, pagina 168):
`axis lines=box left middle center right none`
La chiave “axis line”, da quel che ho capito, imposta il formato di entrambi gli assi contemporaneamente. Che senso ha dire che entrambi gli assi devono essere messi a destra (“right”) o a sinistra (“left”)? A destra e a sinistra ci potrà andare l’asse y, non l’asse x!Ah, “middle” e “center” sono sinonimi, dunque?
Grazie,
L.Il valore “middle” non fa altro che far passare l’asse per la coordinata 0 dell’altro asse. Se la coordinata 0 non fa parte del “dominio” dei punti dell’asse viene scelto il limite inferiore di questo “dominio”. In tutti i casi se selezioni un dominio per entrambi gli assi dove lo 0 sia compreso tra gli estremi del dominio, avrai che entrambi gli assi passeranno per l’origine.
Di conseguenza
`axis x line=middle (oppure center)`
fa si che l’asse x passi per la coordinata 0 dell’asse y. Nel caso in cui i valori sull’asse y vadano da 20 a 40, l’asse x passerà per il punto 20.
La chiave “axis line” invece vale per tutti e due gli assi, solamente che bisogna “guardarli” nel verso della freccia. In pratica sinistra e destra sono definiti per un osservatore che cammina lungo l’asse x muovendosi verso + infinito.Ciao,
Roberto
-
2 Maggio 2012 alle 17:51 #72672::
maumau” post=72262Il valore “middle” non fa altro che far passare l’asse per la coordinata 0 dell’altro asse. Se la coordinata 0 non fa parte del “dominio” dei punti dell’asse viene scelto il limite inferiore di questo “dominio”. In tutti i casi se selezioni un dominio per entrambi gli assi dove lo 0 sia compreso tra gli estremi del dominio, avrai che entrambi gli assi passeranno per l’origine.
Di conseguenza
`axis x line=middle (oppure center)`
fa si che l’asse x passi per la coordinata 0 dell’asse y. Nel caso in cui i valori sull’asse y vadano da 20 a 40, l’asse x passerà per il punto 20.
La chiave “axis line” invece vale per tutti e due gli assi, solamente che bisogna “guardarli” nel verso della freccia. In pratica sinistra e destra sono definiti per un osservatore che cammina lungo l’asse x muovendosi verso + infinito.Scusami, ma questa spiegazione mi risulta oscura… Colpa mia, sicuramente.
Grazie, comunque.
-
2 Maggio 2012 alle 18:31 #72673::
lorenzo.pantieri” post=72182Ancora ciao. Vorrei fare il grafico di una sfera. Se scrivo semplicmente
`\begin{tikzpicture}
\begin{axis}[title={Sfera.}]
\addplot3 [
surf,
z buffer=sort,
samples=30,
variable=\u,
variable y=\v,
domain=0:180,
y domain=0:360,
colormap/cool
]
({cos(u)*sin(v)},
{sin(u)*sin(v)},
{cos(v)});
\end{axis}
\end{tikzpicture}`
l”apparenza è quella di un ellissoide. Ovviamente, ciò dipende dal fatto che la tela predefinita è in formato rettangolare. Ho cercato di curare la cosa aggiungendo alle opzioni di axis
`width=6cm,
height=6cm
`
La situazione migliora, ma l’effetto di schiacciamento c’è sempre. Come risolvo?Grazie!
Dopo qualche tentativo fallimentare provando ad inserire nelle opzioni di axis
`axis equal=true`
o
`plot box ratio={1}{1}{1}`
girovagando in rete ho trovato posto il medesimo problema (clicca), cui ha risposto lo sviluppatore di pgfplots, Christian Feuersaenger, qualche giorno fa: sembra esserci qualche problema appunto con la funzione proiezioni e scala.Anche se non è una soluzione, mi auguro che ciò possa fugare il tuo dubbio.
Saluti
Antonio
-
2 Maggio 2012 alle 19:06 #72674::
lorenzo.pantieri” post=72263
Il valore “middle” non fa altro che far passare l’asse per la coordinata 0 dell’altro asse. Se la coordinata 0 non fa parte del “dominio” dei punti dell’asse viene scelto il limite inferiore di questo “dominio”. In tutti i casi se selezioni un dominio per entrambi gli assi dove lo 0 sia compreso tra gli estremi del dominio, avrai che entrambi gli assi passeranno per l’origine.
Di conseguenza
`axis x line=middle (oppure center)`
fa si che l’asse x passi per la coordinata 0 dell’asse y. Nel caso in cui i valori sull’asse y vadano da 20 a 40, l’asse x passerà per il punto 20.
La chiave “axis line” invece vale per tutti e due gli assi, solamente che bisogna “guardarli” nel verso della freccia. In pratica sinistra e destra sono definiti per un osservatore che cammina lungo l’asse x muovendosi verso + infinito.Scusami, ma questa spiegazione mi risulta oscura… Colpa mia, sicuramente.
Grazie, comunque.
Penso proprio sia colpa mia, non sono mai stato bravo in italiano 😛
Allora, per quanto riguarda il posizionamento degli assi:
La traduzione del manuale sarebbe:
Il codice
`axis x line=middle`
disegna l’asse x come una retta avente equazione y=0.
Il codice
`axis y line=middle`
disegna l’asse y come una retta avente equazione x=0.Se ad esempio scrivi
`\documentclass{article}
\usepackage{pgfplots}
\begin{document}\begin{tikzpicture}
\begin{axis}[
xmin=-4, xmax=5,
ymin=-1, ymax=2,
axis x line=middle,
axis y line=left
]
\end{axis}
\end{tikzpicture}\begin{tikzpicture}
\begin{axis}[
xmin=-4, xmax=5,
ymin=-1, ymax=2,
axis x line=middle,
axis y line=middle
]
\end{axis}
\end{tikzpicture}\end{document}`
otterrai due coppie di assi cartesiani. In entrambe le coppie l’asse x passa per il punto dell’asse y avente ordinata 0.
Nel primo caso, avendo dato “axis y line=left” l’asse y passa per il punto dell’asse x avente ascissa minima (in questo caso -4).
Nel secondo caso, avendo dato “axis y line=middle” l’asse y passa per il punto dell’asse x avente ascissa 0.A questo punto scrivendo il codice
`
\begin{tikzpicture}
\begin{axis}[
xmin=1, xmax=5,
ymin=-1, ymax=2,
axis x line=middle,
axis y line=middle
]
\end{axis}
\end{tikzpicture}
`Si ottiene una coppia di assi in cui l’asse y non ha equazione x=0, ma x=1. Infatti in questo caso l’ascissa 0 è esterna al dominio visualizzato, quindi l’asse y viene fatto passare per l’ascissa più “vicina” a 0.
In tutti gli esempi sostituendo center a middle si ottiene lo stesso risultato.
Per quanto riguarda left e right, left sarebbe sopra l’asse x e right sotto l’asse x.
-
2 Maggio 2012 alle 19:14 #72675::
A pagina 168 del manuale di pgfplots, subito prima della frase da te quotata in precedenza, c’è una spiegazione che forse è più chiara della miaTicks and tick labels are placed according to the chosen value as well. The choice bottom will draw the
x line at y = ymin, middle will draw the x line at y = 0, and top will draw it at y = ymax. Finally,
box is a combination of options top and bottom.… Scegliendo “bottom” l’asse delle x sarà disegnato passante per y=ymin, con “middle” l’asse passerà per y=0, con “top” l’asse passerà per y=ymax.
-
3 Maggio 2012 alle 4:55 #72676::
1. La sfera. Ringrazio scaneco.ant per avermi segnalato la discussione. In breve, l’autore stesso dice che si tratta di un bug dell’opzione “axis equal=true”. L’opzione funziona bene nel piano, e permette di disegnare in modo impeccabile una circonferenza:
`\begin{tikzpicture}
\begin{axis}[axis equal=true]
\addplot [
domain=0:2*pi,
variable=\t,
samples=40,
smooth,
thick,
color=blue,
]
({cos(deg(t))},{sin(deg(t))});
\end{axis}
\end{tikzpicture}`
Ma in tre dimensioni non funziona più. Una piccola considerazione: si tratta di un bug abbastanza grave, che mostra come il pacchetto (splendido, peraltro) soffra ancora di qualche (inevitabile) difetto di gioventù.1. Su “middle”.
Scegliendo “bottom” l’asse delle x sarà disegnato passante per y=ymin, con “middle” l’asse passerà per y=0, con “top” l’asse passerà per y=ymax.
Questa frase (presente sul manuale di pgfplots) è vera purché 0 faccia parte dell’asse delle ordinate. In caso contrario, l’asse x verrà disegnato passante per il punto di ordinata “più vicina” a zero.
`[code]\begin{tikzpicture}
\begin{axis}[
xmin=1, xmax=5,
ymin=2, ymax=4,
axis x line=middle,
axis y line=middle
]
\end{axis}
\end{tikzpicture}`[/code]
Ho capito bene? C’è qualcuno che è in grado di riassumere il tutto in una frase corretta (più corretta di quella del manuale, dico)?Grazie mille,
L.
-
3 Maggio 2012 alle 5:46 #72677::
lorenzo.pantieri” post=722731. La sfera. Ringrazio scaneco.ant per avermi segnalato la discussione. In breve, l’autore stesso dice che si tratta di un bug dell’opzione “axis equal=true”. L’opzione funziona bene nel piano, e permette di disegnare in modo impeccabile una circonferenza:
`\begin{tikzpicture}
\begin{axis}[axis equal=true]
\addplot [
domain=0:2*pi,
variable=\t,
samples=40,
smooth,
thick,
color=blue,
]
({cos(deg(t))},{sin(deg(t))});
\end{axis}
\end{tikzpicture}`
Ma in tre dimensioni non funziona più. Una piccola considerazione: si tratta di un bug abbastanza grave, che mostra come il pacchetto (splendido, peraltro) soffra ancora di qualche (inevitabile) difetto di gioventù.1. Su “middle”.
Scegliendo “bottom” l’asse delle x sarà disegnato passante per y=ymin, con “middle” l’asse passerà per y=0, con “top” l’asse passerà per y=ymax.
Questa frase (presente sul manuale di pgfplots) è vera purché 0 faccia parte dell’asse delle ordinate. In caso contrario, l’asse x verrà disegnato passante per il punto di ordinata “più vicina” a zero.
`[code]\begin{tikzpicture}
\begin{axis}[
xmin=1, xmax=5,
ymin=2, ymax=4,
axis x line=middle,
axis y line=middle
]
\end{axis}
\end{tikzpicture}`[/code]
Ho capito bene? C’è qualcuno che è in grado di riassumere il tutto in una frase corretta (più corretta di quella del manuale, dico)?Grazie mille,
L.[OT]
Ma non mi dire che il più irriducibile nemico del disegno programmato in LaTeX ora ne sta diventando un virtuoso sopraffino! 😀Ciao
Tommaso
[/OT]
-
3 Maggio 2012 alle 7:58 #72678::
illinguista1972″ post=72274Ma non mi dire che il più irriducibile nemico del disegno programmato in LaTeX ora ne sta diventando un virtuoso sopraffino! 😀
Si vede che che sono rimasto folgorato sulla via di Damasco… 😉
Scherzi a parte: non sono un virtuoso di pgfplots, ma ne sono un ammiratore entusiasta, lo sto imparando poco a poco, con gusto.
Nonostante sia un fan di pgfplots, sul disegno programmato tout court ho ancora qualche riserva. In questi giorni che sto studiando la cosa con occhi nuovi, sono rimasto sorpreso da quante siano le esigenze grafiche di un documento tecnico-sceintifico: il disegno di funzioni è una parte importante (capita abbastanza spesso di dover disegnare il grafico di una funzione), ma assolutamente minoritaria. Basta aprire un libro di Analisi I per rendersene conto…
Le esigenze grafiche sono di gran lunga superiori a quelle (diciamo) “testuali”. Se un documento come l’Arte mette in condizione l’utente di scrivere la parte testuale sua tesi, venendo incontro alla maggior parte delle esigenze più comune (sezionamento, indici, testatine, note, bibliografia, …), per soddisfare le esigenze grafiche di un utente “medio” sarebbe necessario un libro (meglio: un’enciclopedia) di migliaia di pagine. 🙁 (La cosa mi ricorda il confronto alfabeto/ideogrammi: gli ideogrammi sono infinitamente di più.) E affrontare la cosa con LaTeX può voler dire scrivere codice complicatissimo, fuori dalla portata dell’utente medio. Vedi l’esempio pluricitato dei maialini: l’utente “medio” potrebbe volere un grafico di quel tipo, ma il codice per produrlo è fuori dalla sua portata.
Insomma, il disegno programmato con LaTeX è uno strumento utilissimo: certe cose si possono fare con difficoltà analoga a quella impiegata per imparare altri programmi (fare un grafico di funzione con pgfplots non è più difficile che farlo con Mathematica; e se proprio si avesse bisogno di Mathematica, lo si può usare per fare i calcoli lasciando a pgfplots ll compito di fare il grafico); altre cose, invece, sono molto più difficili rispetto all’uso di un software dedicato. Altre volte (pensiamo a un progetto di un edificio), usare un software esterno è necessario. Questo mi sembra un approccio equilibrato alla questione: non si tratta di schierarsi pro o contro il disegno programmato: è uno strumento utilissimo, a volte può far comodo usarlo, altre volte no.
Di sicuro, la trasformazione della parte sulle figure nella prossima versione dell’Arte sarà un grosso cambiamento. 😉
Ciao,
L.
-
3 Maggio 2012 alle 8:04 #72679::
Un’altra domanda. Ho bisogno di inserire tre grafici di funzione nello stesso riferimento. Il dominio dei tre grafici è lo stesso.
`\begin{tikzpicture}
\begin{axis}[domain=-6*pi:6*pi]
\addplot [
samples=200,
thick,
color=blue
]
{x*sin(deg(x))};
\addplot [dashed] {x};
\addplot [dashed] {-x};
\end{axis}
\end{tikzpicture}`
Questo codice funziona, ma è “logicamente” corretto? Voglio dire, di regola do la chiave “domain” nelle opzioni di \addplot, non di axis: infatti il dominio di una funzione mi pare che abbia a che vedere più col suo grafico che con il riferimento in cui è rappresentato.Però qui mi sembra giusto fare così: l’opzione “domain=-6*pi:6*pi” viene passata ai tre \addplot , così il codice è più trasparente. È sempre così? Voglio dire, posso dare qualunque opzione di \addplot indifferentemente anche come opzione di axis?
Grazie,
L.
-
3 Maggio 2012 alle 8:42 #72680::
lorenzo.pantieri” post=72279Un’altra domanda. Ho bisogno di inserire tre grafici di funzione nello stesso riferimento. Il dominio dei tre grafici è lo stesso.
`\begin{tikzpicture}
\begin{axis}[domain=-6*pi:6*pi]
\addplot [
samples=200,
thick,
color=blue
]
{x*sin(deg(x))};
\addplot [dashed] {x};
\addplot [dashed] {-x};
\end{axis}
\end{tikzpicture}`
Questo codice funziona, ma è “logicamente” corretto? Voglio dire, di regola do la chiave “domain” nelle opzioni di \addplot, non di axis: infatti il dominio di una funzione mi pare che abbia a che vedere più col suo grafico che con il riferimento in cui è rappresentato.Però qui mi sembra giusto fare così: l’opzione “domain=-6*pi:6*pi” viene passata ai tre \addplot , così il codice è più trasparente. È sempre così? Voglio dire, posso dare qualunque opzione di \addplot indifferentemente anche come opzione di axis?
Grazie,
L.Ciao,
lo trovo perfettamente coerente.
Se tutte le funzioni devono essere rappresentate nello stesso dominio…
R.
-
3 Maggio 2012 alle 9:34 #72681::
1.robitex” post=72282lo trovo perfettamente coerente. Se tutte le funzioni devono essere rappresentate nello stesso dominio…
Anch’io la penso così. In quali altri casi è giustificata una prassi del genere? Ovvero, dare in pasto ad axis opzioni che “andrebbero” date a \addplot?
2.
Resta il problema di “middle”.Scegliendo “bottom” l’asse delle x sarà disegnato passante per y=ymin, con “middle” l’asse passerà per y=0, con “top” l’asse passerà per y=ymax. Questo purché 0 faccia parte dell’asse delle ordinate: in caso contrario, l’asse x verrà disegnato passante per il punto di ordinata “più vicina” a zero.
Questa frase va bene? Come può essere migliorata?
Grazie,
L.
-
3 Maggio 2012 alle 9:49 #72682::
lorenzo.pantieri” post=722841.
lo trovo perfettamente coerente. Se tutte le funzioni devono essere rappresentate nello stesso dominio…
Anch’io la penso così. In quali altri casi è giustificata una prassi del genere? Ovvero, dare in pasto ad axis opzioni che “andrebbero” date a \addplot?
Sempre, non si tratta di concetti matematici ma di un linguaggio che li esprime, ed in questo caso la struttura delle opzioni chiave valore deve mantenere la sua logica:
* Un opzione data globalmente vale in ogni elemento (\pgfplotsset).
* Posso dare un valore diverso per un insieme di elementi (opzione ad axis).
* Per ogni elemento posso modificare localmente il valore dell’opzione (opzione a \addplot).Il linguaggio è il nucleo essenziale del mondo TeX dal punto di vista dell’utilizzatore. imho
R.
-
3 Maggio 2012 alle 10:22 #72683::
lorenzo.pantieri” post=72273Una piccola considerazione: si tratta di un bug abbastanza grave, che mostra come il pacchetto (splendido, peraltro) soffra ancora di qualche (inevitabile) difetto di gioventù.
Secondo me si tratta di un vero e proprio errore di programmazione molto grave, che mostra come il disegno in tre dimensioni non sia attendibile. Prendiamo ad esempio l’assonometria isometrica. Per realizzarla dobbiamo porre l’azimut e l’elevazione rispettivamente pari a 135° e atan(sqrt(2)/2)*180°/pi, cioè [tt]view={135}{35.26}[/tt]. In che modo possiamo verificare ad occhio che la proiezione sia realizzata correttamente? Semplice: un cubo deve apparire come un esagono regolare. Eppure questo codice non dà il risultato corretto
`\begin{tikzpicture}
\begin{axis} [axis equal=true, axis lines=none, view={135}{35.26}]
\addplot3 [mark=cube, mark size=2cm] coordinates {(0,0,0)};
\end{axis}
\end{tikzpicture}`Ho verificato che per avere l’isometria bisogna porre l’elevazione pari a circa 58,5°. Non chiedetemi perché. In tal caso anche la sfera appare come un cerchio.Un altro aspetto che è stato totalmente ignorato dall’autore del pacchetto è la possibilità di produrre proiezioni prospettiche, opzione disponibile sia in Mathematica sia in Matlab, che sono i due software che stiamo usando maggiormente per il confronto. Spero che la lacuna venga colmata al più presto.
P.S.: scusate la scarsa partecipazione, ma in questi giorni ho un po’ d’impegni.
-
3 Maggio 2012 alle 11:12 #72684::
Liverpool” post=72287Secondo me si tratta di un vero e proprio errore di programmazione molto grave […]. Un altro aspetto che è stato totalmente ignorato dall’autore del pacchetto è la possibilità di produrre proiezioni prospettiche, opzione disponibile sia in Mathematica sia in Matlab, che sono i due software che stiamo usando maggiormente per il confronto. Spero che la lacuna venga colmata al più presto.
Ti chiedo di far presente la cosa all’autore del pacchetto: è importante, confido che correggerà gli errori e integrerà le funzioni di cui parli. In effetti, siamo molto esigenti con lui! Mathematica è in giro dal 1988 (in informatica equivale a un’era geologica), pgfplots da quando? Due anni? Mathematica costa migliaia di euro, pgfplots è gratis. Mathematica (tiro a indovinare) è sviluppato da decine di programmatori professionisti, pgfplots da pochi volontari. Insomma, Davide contro Golia. Eppure pgfplots regge alla grande il confronto! E siamo solo all’inizio!
Ah, vorrei che tu ci cimentassi nell’impresa di correggermi la frase su “middle” che ho riportato nel precedente intervento: non sono sicuro che vada bene.
robitex* Un opzione data globalmente vale in ogni elemento (\pgfplotsset).
* Posso dare un valore diverso per un insieme di elementi (opzione ad axis).
* Per ogni elemento posso modificare localmente il valore dell’opzione (opzione a \addplot).Giusto. Ma vorrei sapere con precisione quali valori possono essere dati ad axis e quali no. Tutti quelli che si possono dare a \addplot? O solo alcuni?
Grazie,
L.
-
3 Maggio 2012 alle 11:14 #72685::
Riguardo agli assi, credo che lì sia stato fatto un vero pasticcio con termini ambigui e opzioni illogiche e dal comportamento astruso. E’ vero che [tt]middle[/tt]=[tt]center[/tt], ma io l’avrei chiamato piuttosto [tt]origin[/tt] che mi sembra più appropriato. Per la chiave [tt]axis lines[/tt] avrei lasciato solo i valori [tt]box[/tt], [tt]origin[/tt] e [tt]none[/tt], visto che sinistra e destra non c’entrano niente con l’asse delle ascisse, come è stato già notato. Dal momento che ci sono anche i valori [tt]top[/tt] e [tt]bottom[/tt], avrei fatto in modo che [tt]origin[/tt] significasse solo “passante per l’origine”, anche se quest’ultima si trova chissaddove nel grafico.Venendo alla frase sulla quale ci chiedi pareri, questa è vera solo se per entrambi gli assi è stato impostato un valore diverso da [tt]box[/tt] (default) o da [tt]none[/tt], altrimenti l’asse viene tracciato secondo un metodo per me incomprensibile (non è il minimo o massimo e può anche non coincidere con un trattino). Esempio:
`\begin{tikzpicture}
\begin{axis}[axis x line=bottom]
\addplot [samples=50] {x^2+12};
\end{axis}
\end{tikzpicture}`
In quel caso direi che i valori bottom e top impongono il passaggio dell’asse orizzontale [nota: non lo chiamerei né asse x, né asse delle ascisse] per y=ymin e y=ymax rispettivamente; il valore center o middle ne impone il passaggio per l’origine se il grafico taglia l’asse delle ascisse, altrimenti coincide con il valore bottom o top a seconda che il grafico sia interamente al di sopra o al di sotto di esso rispettivamente.Insomma… una frase del genere.
Ciao
@OldClaudio: non hai risposto alle mie osservazioni sull’interpolazione. Ho detto troppe fesserie? Non ti convince?
-
3 Maggio 2012 alle 11:34 #72686::
Sono sollevato: non sono il solo a trovare innaturale quella scelta!Liverpool” post=72291In quel caso direi che i valori bottom e top impongono il passaggio dell’asse orizzontale [nota: non lo chiamerei né asse x, né asse delle ascisse] per y=ymin e y=ymax rispettivamente; il valore center o middle ne impone il passaggio per l’origine se il grafico taglia l’asse delle ascisse, altrimenti coincide con il valore bottom o top a seconda che il grafico sia interamente al di sopra o al di sotto di esso rispettivamente.
Mi sono accorto di non sapere bene che signfica “origine” di un sistema di riferimento! Io l’avevo sempre interpretato come “punto d’intersezione degli assi”, ma se è così è ovvio che entrambi gli assi passano sempre per l’origine. Tu invece, mi pare, intendi origine come “punto dell’asse verticale di ordinata y=0”. Mi sbaglio? Se è così, penso che, per evitare ambiguità, la frase andrebbe resa così:
I valori bottom e top impongono il passaggio dell’asse delle ascisse per y=ymin e y=ymax rispettivamente; il valore center o middle ne impone il passaggio per il punto dell’asse verticale di ordinata y=0 se il grafico taglia l’asse delle ascisse, altrimenti coincide con il valore bottom o top a seconda che il grafico sia interamente al di sopra o al di sotto di esso rispettivamente.
Ah, perché preferisci “asse orizzontale” ad “asse delle ascisse”? Io preferisco “asse delle ascisse” e trovo “orizzontale” e “verticale” poco felici: se giri di un angolo retto il foglio il nome “orizzontale” e “verticale” è fuorviante. Ma è solo una questione di gusto. Che dici?
Ciao
L.
-
3 Maggio 2012 alle 11:50 #72687::
lorenzo.pantieri” post=72294Mi sono accorto di non sapere bene che signfica “origine” di un sistema di riferimento! Io l’avevo sempre interpretato come “punto d’intersezione degli assi”, ma se è così è ovvio che entrambi gli assi passano sempre per l’origine. Tu invece, mi pare, intendi origine come “punto dell’asse verticale di ordinata y=0”
Ho cancellato tutto perché forse ho capito l’equivoco. Per me asse delle ascisse e asse orizzontale sono generalmente due enti diversi. L’asse delle ascisse è la retta di equazione y=0 e passa sempre per l’origine O(0,0). L’asse orizzontale è la retta orientata che pgfplots assume come asse di riferimento ed ha equazione y=h con h \in {ymin, ymax, 0} nei casi già citati, quindi l’asse orizzontale può non coincidere con l’asse delle ascisse e può non passare per l’origine. Almeno questo era quello che volevo dire, poi non so se c’è un modo migliore di dirlo, ma chiamare asse delle ascisse la retta y=3 mi sembra strano e credo che porterebbe ad un assurdo rispetto a cosa intendiamo noi per ascissa e ordinata.
Orizzontale e verticale sono termini riferiti alla figura, non al foglio. Se è per questo si usa anche “limite a sinistra/destra”, “estremo superiore/inferiore”, “rotazione oraria/antioraria”.Quando tu dici valori bottom e top impongono il passaggio dell’asse delle ascisse per y=ymin e y=ymax rispettivamente per me già non ci siamo, perché per come la vedo io l’asse delle ascisse ha sempre equazione y=0.
-
3 Maggio 2012 alle 13:52 #72688::
Liverpool” post=72127
Detto in altri termini: l’interpolazione lineare (curve di Bézier del primo ordine: segmenti) richiede un mucchio di punti; [omissis] . Le curve di Bézier del terzo ordine sono raccordate in modo da mantenere la continuità della tangente sia quella della concavità. Fidatevi di Bézier: le quadratiche vanno già bene; le cubiche vanno ottimamente. Sia tikz sia pgfplots possono usare tranquillamente le curve di Bézier; con grossi vantaggi sul disegno e sull’impiego modesto della memoria.
Su questo punto non sono d’accordo ad occhi chiusi. Ci sono dei grafici per i quali le curve di Bézier vanno benissimo e sono quelli in cui, come hai detto tu, tra le proprietà della curva c’è la continuità della tangente e della concavità. Ci sono però delle curve che non hanno questa proprietà e tracciarle con l’interpolazione cubica può dare problemi se i punti non sono scelti bene. Prendi ad esempio il grafico di una rampa o una qualunque curva con un punto angoloso. Se i nodi sono scelti uniformemente nel dominio e sono radi, rischi di prendere fischi per fiaschi. Se invece i nodi sono uniformemente distribuiti e densi va tutto bene, ma a questo punto a che ti serve l’interpolazione non lineare? Per mantenere basso il numero dei nodi, la soluzione è addensarli in prossimità del punto angoloso e diradarli altrove, che è ciò che fanno Matlab e Mathematica quando determinano il luogo delle radici, ad esempio. Ma se non usiamo un algoritmo del genere? Pensa ad un campionamento uniforme con acquisizione dati. Affideresti alla cieca la tua analisi alle curve di Bézier? La figura che segue mostra la differenza di comportamento della rampa nel caso di interpolazione lineare e cubica su nodi equispaziati, ottenuto con questo codice:
`\documentclass{standalone}
\usepackage{pgfplots}\begin{document}
\begin{tikzpicture}
\begin{axis} [legend pos=north west, no marks]
\addplot+[thick, dashed] coordinates {(-3,0) (-2,0) (-1,0) (0,0) (1,1) (2,2) (3,3)};
\addplot+[smooth, thick] coordinates {(-3,0) (-2,0) (-1,0) (0,0) (1,1) (2,2) (3,3)};
\legend{lineare,cubica}
\end{axis}
\end{tikzpicture}
\end{document}`[attachment=246]rampa.png[/attachment]
Altro aspetto è quello del risparmio di memoria. Perché pensi che l’interpolazione di ordine superiore faccia risparmiare memoria? Secondo te dove vengono memorizzati i punti inermedi tra i nodi (*)? Quei punti che non ci metti tu nella definizione della curva se li deve calcolare e memorizzare lui per tracciare il grafico: non è che i punti sul pdf se li può inventare. Quindi non solo non risparmi memoria, ma rallenti anche la compilazione(**). Fa una prova. Io ho provato a tracciare una retta con un numero di campioni spinto quasi al limite. Ho aggiunto l’opzione [tt]smooth[/tt] e la compilazione si è arrestata per sforamento della capacità. L’interpolazione cubica serve solo a rendere più dolci i grafici quando i punti a disposizione sono pochi e ad ottenere risultati decenti non rallentando troppo la compilazione(**) con un numero sproporzionato di campioni. La soluzione sta semplicemente nel non esagerare con i nodi, ma io preferisco (quasi) sempre campioni veri a campioni inventati.
O sbaglio? Ciao
*************************************
Edit: forse ho capito ora che con “impiego modesto della memoria” volevi dire che con le curve di Bézier servono meno punti in più che con l’interpolazione lineare per ottenere generalmente buoni risultati con un modesto incremento della memoria. Se è così siamo d’accordo (con le obiezioni sollevate all’inizio), ma è bene chiarire che l’interpolazione cubica ha bisogno di ulteriore spazio di memoria per definire le curve rispetto a quella riservata ai campioni.
*************************************(*) non intendo i punti che costituiscono la linea, ma quelli necessari a determinare univocamente l’equazione della curva.
(**) rallenti la compilazione rispetto al caso in cui non aumenti tu i nodi, ma se per evitare le curve di Bézier aumenti i campioni, il discorso è vero fintantoché la funzione della quale vuoi disegnare il grafico è più “semplice” di un polinomio di terzo grado e quindi quasi mai.Forse mi era sfuggita la lettura di tutto il messaggio, che ora ho ritrovato e ho letto con attenzione.
ti posso dare due risposte:
1) è ovvio che una curva da tracciare contiene delle discontinuità, usi l’interpolazione lineare, quedratica, cubica solo nei tratti dove la curva è sufficientemente regolare; quindi una funzione gradino si disegna con due segmenti non raccordati; una rampa si disegna con due segmenti raccordati; una curva con cuspide si disegna con due curve (di orine 1, 2 o tre non importa; si usa la curva più adatta)che hanno solo le coordinate della cuspide in comune, eccetera.
2) le curve di Bézier richiedono ognuna quattro punti; due sono di inteprolazione e gli altri due sono di controllo; la parte difficile da fare e che fa pgfplots, è quella di determinare i punti di controllo delle due tangenti e della concavità per le curve del terzo orine, senza obbligare l’utente a definirli; poi una volta fatti questi calcoli, tenuto conto che ongi nuova curva aggiunta al grafico parte dal putno fissato con “moveto” e arriva allaltro nodo, mentre in mezzo ci sono le coordinate dei punti di controllo, ogni nuovo arco richiede un comando PostScript o un compndo PDF che aggiunge solo tre coordinate al file di uscita intercalate con poche altre informazoini relative a chi fa che cosa; tipicamente pict2e per una cubica richede di scrivere nel file di uscita il risultato della traduzione nel linguaggio del driver in uso di
`
\curveto(x1,y1)(x2,y2)(x3,y3)
`
dove x1,y1 e x2,y2 sono le coordinate dei due punti di controllo, e x3,y3 sono le coordinate del nodo di arrivo; il codice tradotto in linguaggio pdf richede un’altra mezza dozzina di caratteri; PostScript è più “verboso” e ne richiede una ventina in più.La domanda allora diventa: dove sono i punti della cirva? semplice, non ci sono; la curva viene ridisegnata ogni vola dal driver per il formato di uscita: se questo è PDF, ci pensa Preview, Skim, Adone Reader, Sumatra, xpdf, o quant’altro a tradurre quelle poche informazioni in una bela curva sia sullo schermo sia sulla carta disegnata con il colore giusto a lo spessore giusto.
Ora sarà pur vero che il linguaggio PDF non costituisce una macchina di Turing, ma è anche vero che i suoi comandi primitivi consentono di disegnare curve cubiche molto bene con tre (quattro contando anche il punto di partenza) sole coordinate e qualche byte in più per dirgli che cosa deve fare con quelle coordinate.
Ecco perché affermo che è opportuno usare sempre l’interpolazione cubica, ovviamante quando si può; certo non con funzioni discontinue, ma tra una discontinuità e l’altra.
D’altra parte come pensi che si posano disegnare i caratteri ridigitallizzando ex novo il disegno ogni volta che si cambia scala sullo schermo in modo da non ingrandire i pixel che sono serviti per digitalizzare la pagina in prima istanza?perché il font bitmapped sono così scadenti quando si ingrandisce il disegno sullo schermo? proprio perché sono definiti da una matrice fissa di quadratini/rettangolini che nella scala giusta producono un bel disegno, ma nella scala sbagliata producono un orrore. L’abilità del visualizzatore delle pagine PDF sta appunto nela sua abilità di ridisegnare e rigitalizzare ogni forma grafica che appare sullo schermo disponendo appunto delle poche informazioni costituite dai nodi di interpolazione e dai punti di controllo dei relativamante pochi archi che formao ol disegno di ogni carattere.
Prova a installarti FontForge, se non lhai già installato; anche i contorni dei caratteri sono curve; ma vai a vedere un carattere qualsiasi scegliendolo da una qualsiasi polizza pfb, o ttf, o otf, cliccando sopra il disegno del carattere puoi evidenziare in rosso sia i nodi di interpolazione sia i unti di controllo, sia il contorno del glifo; nonostante ogni glifo possa essere più o meno complicato il numero totale di nodi di interpolazione è veramente modesto; prova so a immaginare quanti nodi ci vorrebbero se si usasse solo l’interpolazione lineare. ogni glifo sarebbe disegnato usando un numro di noti superiore di almeno due ordini di grandezza rispetto a quando sono disegnati con spline cubiche; noterai che in prossimità delle cuspidi le due tangenti destra e sinistra rispetto al verso di percorrenza sono indipendenti l’una dall’altra, mentre se provi a muovere il punto di controllo di una tangente in un nodo di continuità, si muove corrispondentemente anche il punto di controllo dell’altra tangente.
Anche senza disegnare font, l’uso di FontForge insegna tante cose sull’uso dell’interpolazione cubica.
Scusa se mi sono dilungato sull’interpolazione cubica dei contorni dei glifi. questi contorni sono curve come tutte le altre ma presentano anche delle cuspidi; l’unica cosa di cui non dispongono sono le discontinuità di prima specie, perché sono sempre curve chiuse semplicemente connesse. Però in questo modo credo di avere risposto alla tua domanda sull’interpolazione.
-
3 Maggio 2012 alle 14:40 #72689::
Liverpool” post=72295
Mi sono accorto di non sapere bene che signfica “origine” di un sistema di riferimento! Io l’avevo sempre interpretato come “punto d’intersezione degli assi”, ma se è così è ovvio che entrambi gli assi passano sempre per l’origine. Tu invece, mi pare, intendi origine come “punto dell’asse verticale di ordinata y=0”
Ho cancellato tutto perché forse ho capito l’equivoco. Per me asse delle ascisse e asse orizzontale sono generalmente due enti diversi. L’asse delle ascisse è la retta di equazione y=0 e passa sempre per l’origine O(0,0). L’asse orizzontale è la retta orientata che pgfplots assume come asse di riferimento ed ha equazione y=h con h \in {ymin, ymax, 0} nei casi già citati, quindi l’asse orizzontale può non coincidere con l’asse delle ascisse e può non passare per l’origine. Almeno questo era quello che volevo dire, poi non so se c’è un modo migliore di dirlo, ma chiamare asse delle ascisse la retta y=3 mi sembra strano e credo che porterebbe ad un assurdo rispetto a cosa intendiamo noi per ascissa e ordinata.
Orizzontale e verticale sono termini riferiti alla figura, non al foglio. Se è per questo si usa anche “limite a sinistra/destra”, “estremo superiore/inferiore”, “rotazione oraria/antioraria”.Quando tu dici valori bottom e top impongono il passaggio dell’asse delle ascisse per y=ymin e y=ymax rispettivamente per me già non ci siamo, perché per come la vedo io l’asse delle ascisse ha sempre equazione y=0.
-
3 Maggio 2012 alle 16:50 #72690::
mi permetto di contribuire alla discussione con questo contributo in cui ci siamo imbattuti io e @Liverpool
non semple tikz funziona in modo corretto o meglio non si dimostra anciora un linguaggio <>
saluti
claudio
-
4 Maggio 2012 alle 6:45 #72691::
Liverpool” post=72291Venendo alla frase sulla quale ci chiedi pareri, questa è vera solo se per entrambi gli assi è stato impostato un valore diverso da [tt]box[/tt] (default) o da [tt]none[/tt], altrimenti l’asse viene tracciato secondo un metodo per me incomprensibile (non è il minimo o massimo e può anche non coincidere con un trattino).
Svelato l’arcano (per me). Nel pgfplots.code.tex la proprietà enlarge <...> limits è impostata su false per “every non boxed <...> axis“; perciò, se si vuole che bottom coincida con y=ymin, bisogna prima impostare [tt]enlarge y limits=false[/tt] o equivalentemente scegliere uno stile diverso da [tt]box[/tt] e [tt]none[/tt] per l’asse verticale, altrimenti viene aggiunto un margine di spazio ad ymin.
@Lorenzo: hai letto le osservazioni sulla differenza tra asse orizzontale e asse delle ascisse? C’è qualcun altro che vuole commentare?
@OldClaudio: grazie.
@claudio: in breve l’autore dell’articolo mi ha risposto che non ci può essere di aiuto. Non te l’ho comunicato perché non aggiungeva niente di nuovo.
-
4 Maggio 2012 alle 15:22 #72692::
Liverpool” post=72344 @Lorenzo: hai letto le osservazioni sulla differenza tra asse orizzontale e asse delle ascisse? C’è qualcun altro che vuole commentare?
Sì, le ho lette e concordo con te.
Riguardo ai difett(ucc)i di TikZ: buono a sapersi, ma, ripeto, è Davide contro Golia: chi ha scritto quel pacchetto l’ha fatto gratis, e dà filo da torcere a una multinazionale quotata in borsa che dà lavoro a decine di ingegneri del software. Cappello.
L.
-
5 Maggio 2012 alle 12:55 #72693::
lorenzo.pantieri” post=72290Ti chiedo di far presente la cosa all’autore del pacchetto
Ho contattato l’autore del pacchetto. Appena so qualcosa di utile, vi informo.
illinguista1972″ post=72274Ma non mi dire che il più irriducibile nemico del disegno programmato in LaTeX ora ne sta diventando un virtuoso sopraffino! 😀
C’è chi giurerebbe di averlo visto cimentarsi con Wenlock e Mandeville interamente realizzati con TikZ in tre dimensioni con risultati sorprendenti 😀
-
6 Maggio 2012 alle 15:23 #72694::
Nel mio intervento n. 72092 ho modificato la risposta n.9 (su view), perché era errata. Per gli amministratori: perché non riesco più ad inserire direttamente un link ad un intervento? Mi sembra che prima si potesse fare 😕L’autore del pacchetto mi ha concesso il permesso di riportare la sua risposta su questo forum. Vi riassumo in breve l’inizio della conversazione. Lui sostiene che il problema del cubo riguarda la chiave [tt]axis equal[/tt] ed è collegato al problema della sfera di Lorenzo. Io gli ho fatto notare che se proiettiamo la sfera sui piani coordinati con [tt]axis equal=true[/tt] si ottiene un cerchio in tutti e tre i casi, quindi a me sembra un problema del metodo di proiezione piuttosto che della lunghezza dei versori degli assi. Tra l’altro, misurando gli spigoli del cubo nel caso dell’assonometria isometrica che ho postato in precedenza, si ottiene lo stesso valore, mentre gli angoli tra le coppie di assi appaiono di circa 135° e 113°, quindi ancora una volta a me sembra una deformazione operata dall’algoritmo di proiezione. Ora vi riporto la risposta a queste osservazioni. Faccio presente che la soluzione di cambiare lo [tt]scale mode[/tt] che suggerisce come soluzione, funziona (per il cubo) con la versione in via di sviluppo, ma non con quella stabile in mio possesso, perciò non vi posto il codice che mi ha inviato.
Christian FeuersaengerI guess your examples actually reveal the same as in the bug report of the sphere problem (which I summarized as “axis equal” problem). Here is a detailled (yet related) list of problems. All of them need to be fixed before the problem can be considered to be “solved”:
1. pgfplots still applies ‘scale mode=stretch to fill’ although ‘axis equal’ is active. It should apply ‘scale mode=scale uniformly’. Unfortunately, the implementation of ‘scale mode=scale uniformly’ had some unfortunate pgf math issues (intermediate results became too large). I have already fixed that. I attached your example in which I replaced “axis equal” by “scale mode=scale uniformly”. I believe it looks much closer to the original expectation.
2. Even if we would apply ‘scale mode=scale uniformly’ whenever the ‘axis equal’ option is in effect, the implementation of ‘axis equal’ is wrong: it measures the size of the *projected* unit vectors (i.e. 2d vectors) and rescales them such that they have the same size. This cannot be correct. It would probably be correct to modify the plot box
ratio before it is projected to 2d. However, I have not fully understand how this has to be done (I haven’t thought about it thoroughly since I received the bug reports).3. the enlarge limits issue arises due to the default settings of pgfplots: for 3d axes, it ONLY enlarges the z limits unless the user explicitly requests ‘enlargelimits’. This is a minor issue I guess.
Currently, I believe that
– I need to disable ‘scale mode=stretch to fill’ whenever someone requested specific axis ratios. I am unsure if this causes unexpected changes to the shape of the displayed axis. I believe this is what you mentioned as “projection issue” — it certainly *is* a projection issue if stretch-to-fill is active (since it skews the axes after the 3d projection). However, ‘scale mode=scale uniformly’ should fix it.– I need to fix axis equal; it must be wrong. But I currently do not know how.
– interestingly, my current developer version must have introduced a regression concerning the view normal: the XY plane projection is wrong (and different from your image where it is still correct). That is good to know 🙂
L’ultimo punto è stato risolto.
Ciao
-
6 Maggio 2012 alle 17:15 #72695
-
7 Maggio 2012 alle 6:15 #72696::
Liverpool” post=72287
Una piccola considerazione: si tratta di un bug abbastanza grave, che mostra come il pacchetto (splendido, peraltro) soffra ancora di qualche (inevitabile) difetto di gioventù.
Secondo me si tratta di un vero e proprio errore di programmazione molto grave, che mostra come il disegno in tre dimensioni non sia attendibile. Prendiamo ad esempio l’assonometria isometrica. Per realizzarla dobbiamo porre l’azimut e l’elevazione rispettivamente pari a 45° e atan(sqrt(2)/2)*180°/pi, cioè [tt]view={45}{35.26}[/tt]. In che modo possiamo verificare ad occhio che la proiezione sia realizzata correttamente? Semplice: un cubo deve apparire come un esagono regolare. Eppure questo codice non dà il risultato corretto
`\begin{tikzpicture}
\begin{axis} [axis equal=true, axis lines=none, view={45}{35.26}]
\addplot3 [mark=cube, mark size=2cm] coordinates {(0,0,0)};
\end{axis}
\end{tikzpicture}`Ho verificato che per avere l’isometria bisogna porre l’elevazione pari a circa 58,5°. Non chiedetemi perché. In tal caso anche la sfera appare come un cerchio.Un altro aspetto che è stato totalmente ignorato dall’autore del pacchetto è la possibilità di produrre proiezioni prospettiche, opzione disponibile sia in Mathematica sia in Matlab, che sono i due software che stiamo usando maggiormente per il confronto. Spero che la lacuna venga colmata al più presto.
P.S.: scusate la scarsa partecipazione, ma in questi giorni ho un po’ d’impegni.
Ci ho pensato a lungo, ed ecco perché questo mio commento arriva così tardi. Gli angoli 35,26° e 58.5° sono sospettosamente quasi complementari; tenuto conto che il valore di 58,5° sembra ottenuto ad occhio, quindi con una relativa tolleranza nella valutazione dell’esagono, che cosa succede se si usa il valore esattamante complementare 54,74° ? Secondo me, l’esagono continua ad essere esagono (ad occhio, s’intende).
Questo mi fa sorgere il sospetto che invece dell’altezza ci vorrebbe il suo complemento; e quindi sospetto che ci sia una confusione fra la colatitudine e la latitudine nella scelta delle coordinate sferiche. È solo un sospetto; potrebbe essere una solenne cretinata.
-
7 Maggio 2012 alle 6:53 #72697::
OldClaudio” post=72447che cosa succede se si usa il valore esattamante complementare 54,74° ? Secondo me, l’esagono continua ad essere esagono (ad occhio, s’intende).
Questo:
[attachment=260]cuboclaudio.png[/attachment]
A me non sembra più un esagono. L’autore del pacchetto sostiene che la funzione [tt]axis equal[/tt], per come è implementata adesso, rende uguali le proiezioni dei versori degli assi coordinati sul quadro e questo è oggettivamente sbagliato e va corretto (anche se potrebbe non essere l’unico problema). Ho verificato, portando l’elevazione a 70°, che in effetti le lunghezze dei versori rimandono uguali, mentre l’asse delle quote dovrebbe apparire più schiacciato.
Ho studiato un po’ il problema e credo che le lunghezze dei versori proiettati dovrebbero essere rispettivamente nell’ordine:ip=sqrt(1-(cos(e)sin(a))^2), jp=sqrt(1-(cos(e)cos(a))^2), kp=sqrt(1-sin(e)^2)
dove a ed e sono rispettivamente azimut ed elevazione come definiti nella risposta 9 dell’intervento 72092.
Chiedo cortesemente agli esperti di geometria di verificare e di farmi sapere se è corretto.
Vi illustro brevemente il ragionamento (per l’asse delle ascisse). Il versore perpendicolare al quadro ha componenti (cos(e)sin(a), cos(e)cos(a), sin(e)), perciò il coseno dell’angolo che esso forma con l’asse delle x è cos(e)sin(a). Quindi il seno che l’asse delle x forma con il piano di proiezione è, a meno del segno, cos(e)sin(a). Di conseguenza, la proiezione del versore i sul quadro è pari al coseno dell’angolo individuato, cioè sqrt(1-(cos(e)sin(a))^2).
Ho provato con a=135° e e=35.26° ed effettivamente le tre proiezioni vengono uguali.
Attachments:
You must be logged in to view attached files. -
7 Maggio 2012 alle 12:33 #72698
-
7 Maggio 2012 alle 13:02 #72699::
lorenzo.pantieri” post=72469Ancora qualche domanda.
1. Quali sono i valori predefiniti della chiave view?
2. Qual è il valore predefinito della chiave mark? Che cosa fa esattamente questa chiave? Che cosa fa “mark=x”? Perché con “mark=x” non si hanno per marcatori delle “x”, ma delle semplici linee?
Grazie,
L.1.Il manuale dice 25 e 30.
2.La chiave mark non ha un valore predefinito (secondo il manuale di pgf), se non imposti niente dovrebbe plottare un cerchietto blu. Permette di cambiare la forma del marcatore scegliendo tra una serie di forme precaricate. La chiave “mak=x” disegna una croce con i bracci uguali alle diagonali di un quadrato avente lato pari al doppio del valore della chiave “mark size”. Lo spessore dei bracci si può cambiare con il codice “every mark./append style={line width=1pt}”. Il perché la x indichi la croce credo risieda nella traduzione di croce, che in inglese è cross, e che viene spesso abbreviata con la x. Se si vuole avere la lettera x come marcatore si deve utilizzare “mark=text”, dopo aver definito la chiave “/pgf/text mark=x”, il cui valore di default è “p”. Con varie opzioni si può poi cambiare lo stile del testo rappresentato.
Ciao,
Roberto
-
7 Maggio 2012 alle 14:42 #72700::
maumau” post=724701.Il manuale dice 25 e 30.
2.La chiave mark non ha un valore predefinito (secondo il manuale di pgf), se non imposti niente dovrebbe plottare un cerchietto blu. Permette di cambiare la forma del marcatore scegliendo tra una serie di forme precaricate. La chiave “mak=x” disegna una croce con i bracci uguali alle diagonali di un quadrato avente lato pari al doppio del valore della chiave “mark size”. Lo spessore dei bracci si può cambiare con il codice “every mark./append style={line width=1pt}”. Il perché la x indichi la croce credo risieda nella traduzione di croce, che in inglese è cross, e che viene spesso abbreviata con la x. Se si vuole avere la lettera x come marcatore si deve utilizzare “mark=text”, dopo aver definito la chiave “/pgf/text mark=x”, il cui valore di default è “p”. Con varie opzioni si può poi cambiare lo stile del testo rappresentato.
Grazie mille! :-)))
-
7 Maggio 2012 alle 16:04 #72701::
maumau” post=72470La chiave mark non ha un valore predefinito (secondo il manuale di pgf), se non imposti niente dovrebbe plottare un cerchietto blu.
Perché se tracci più grafici nella stessa figura il marcatore cambia automaticamente, così come il colore del tratto, secondo quanto definito dalla chiave [tt]cycle list[/tt] (def. [tt]=color[/tt]).
Ciao
-
10 Maggio 2012 alle 7:19 #72702::
Ciao a tutti,
`\documentclass{article}
\usepackage{pgfplots}\begin{document}
\begin{tikzpicture}
\begin{axis}[axis lines=middle]
\addplot [
domain=0:2*pi,
samples=40,
smooth,
thick,
color=blue
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}\end{document}`
Come si vede, la linea è tagliata in cima e in fondo. Il difetto è piccolo, ma si nota. Che succede?Grazie,
L.
-
10 Maggio 2012 alle 7:23 #72703::
Mi rispondo da solo. Si vede che il pachetto fa fatica a gestire le parti di curva che sono al limite del riferimento. Per rimediare:
`\begin{tikzpicture}
\begin{axis}[
ymin=-1.1,
ymax=1.1,
xmin=0,
xmax=6.5,
axis lines=middle]
\addplot [
domain=0:2*pi,
samples=40,
smooth,
thick,
color=blue
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}`
Lo considero un piccolo bug del pacchetto.Che ne dite?
Ciao,
L.P.S. Faccio presente che il difetto l’ho notato Tommaso, io non me n’ero accorto! 🙂
-
10 Maggio 2012 alle 7:35 #72704::
Più che un difetto di pgfplots, lo chiamerei un difetto del disegnatore; Non è una buona idea disegnare gli assi in modo che siao al limite della curva da tracciare; certo pgfplot fa fatica a disegnare qualcosa al limite del bordo della tela, e la chiamerei una feature, ma se da fisico metti il nome della grandezza tracciata , le unità di misura e la scala nelle ordinate, non metteresti mai la tacca del valore 1 sulla punta della freccia dell’asse per tracciare il seno di un angolo. Il primo disegno col difettuccio che hai messo nel forum sarebbe un disegno impresentabile non per il difettuccio della linea del seno, ma per il disegno dell’asse verticale e orizzontale.:smile:Ecco, questo esempio, invece sarebbe utile nella tua monografia sull’uso di tikz e pgfplots per dire come NON bisogna fare i disegni dei diagrammi, spiegando il perché e magari facendo riferimento alla norma UNI relativa al disegno di diagrammi, cartogrammi, e simili. Ora non ho il riferimento sottomano, ma c’è nella bibliografia della guidaGuIT.
Ciao
Claudio
-
10 Maggio 2012 alle 7:44 #72705::
Credo sia un problema di bounding box, visibile anche nel primo esempio a pagina 67 del manuale. In pratica tutto ciò che esce fuori dagli assi viene eliminato. Si ha quell’effetto nel tuo esempio perchè la linea passa effetivamente per 1 però, avendo un certo spessore, la parte superiore viene tagliata. Si risolve facilmente come hai mostrato. Io costruisco i grafici sempre con un box tutto intorno e quindi il problema non mi si è mai presentato perchè le curve sono sempre completamente all’interno.Ciao
Fra
-
10 Maggio 2012 alle 7:46 #72706::
OldClaudio” post=72664Più che un difetto di pgfplots, lo chiamerei un difetto del disegnatore; Non è una buona idea disegnare gli assi in modo che siao al limite della curva da tracciare; certo pgfplot fa fatica a disegnare qualcosa al limite del bordo della tela, e la chiamerei una feature, ma se da fisico metti il nome della grandezza tracciata , le unità di misura e la scala nelle ordinate, non metteresti mai la tacca del valore 1 sulla punta della freccia dell’asse per tracciare il seno di un angolo. Il primo disegno col difettuccio che hai messo nel forum sarebbe un disegno impresentabile non per il difettuccio della linea del seno, ma per il disegno dell’asse verticale e orizzontale.:smile:
Ecco, questo esempio, invece sarebbe utile nella tua monografia sull’uso di tikz e pgfplots per dire come NON bisogna fare i disegni dei diagrammi, spiegando il perché e magari facendo riferimento alla norma UNI relativa al disegno di diagrammi, cartogrammi, e simili. Ora non ho il riferimento sottomano, ma c’è nella bibliografia della guidaGuIT.
Eh eh, quando con LaTeX capitano cose brutte, si parla di “feature” e non di “difetti”. 😉 No, non ti seguo. Prendiamo il codice:
`\begin{tikzpicture}
\begin{axis}[axis lines=middle]
\addplot [
domain=0:2*pi,
samples=40,
smooth,
thick,
color=blue
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}`
Qui sto dicendo che voglio una (porzione di) sinusoide, con dominio compreso tra 0 e due pi greco. A livello “logico” è tutto: dovrebbe essere il pacchetto a fare il grafico correttamente, non dovrei essere io a fare gli aggiustamenti manuali al riferimento. La controprova? Se con Mathematica scrivo
`Plot[Sin[x], {x, 0, 2Pi}]`
il grafico viene perfetto, senza doverci mettere mano. È Mathematica che si occupa di aggiungere un po’ di spazio agli assi (x e y) perché il grafico venga bene. In altre parole, Mathematica risolve automaticamente i problemi di rappresentazione in entrambi gli assi. Ecco un’altra cosa da far presente all’autore del pacchetto.Vedremo quanto di questa cosa dire nell’articolo… 😉
-
10 Maggio 2012 alle 7:56 #72707::
Io non lo chiamerei neanche un difetto del disegnatore. Se la linea cade fuori dal box disegnato c’è poco da fare, metà dello spessore della linea non verrà visualizzato. Il problema si risolve dando
`begin{axis}[enlarge y limits, ………`
che automaticamente aumenta il box lungo l’asse y.Ciao,
Roberto
-
10 Maggio 2012 alle 8:07 #72708::
maumau” post=72672Io non lo chiamerei neanche un difetto del disegnatore. Se la linea cade fuori dal box disegnato c’è poco da fare, metà dello spessore della linea non verrà visualizzato. Il problema si risolve dando
`begin{axis}[enlarge y limits, ………`
che automaticamente aumenta il box lungo l’asse y.Ciao,
RobertoGiusto, se invece non si specifica l’opzione [tt]axis lines=middle[/tt], [tt]enlarge y limits[/tt] è attiva di default. Comunque credo che OldClaudio stesse parlando in generale di come si dovrebbe disegnare un grafico in maniera professionale, da li è nato il “difetto del disegnatore”.
Ciao
Fra
-
10 Maggio 2012 alle 8:13 #72709::
@Lorenzo, come ti hanno già detto l’autore non lo considererebbe un bug. Puoi usare [tt]enlarge y limits[/tt] oppure [tt]clip=false[/tt]. Nel primo caso gli assi vengono allungati oltre ymin e ymax, nel secondo quello che sporge dagli assi viene disegnato comunque (buono se vuoi aggiungere delle annotazioni che sporgano al di fuori degli assi).
-
10 Maggio 2012 alle 8:23 #72710::
Spike” post=72676
Io non lo chiamerei neanche un difetto del disegnatore. Se la linea cade fuori dal box disegnato c’è poco da fare, metà dello spessore della linea non verrà visualizzato. Il problema si risolve dando
`begin{axis}[enlarge y limits, ………`
che automaticamente aumenta il box lungo l’asse y.Ciao,
RobertoGiusto, se invece non si specifica l’opzione [tt]axis lines=middle[/tt], [tt]enlarge y limits[/tt] è attiva di default. Comunque credo che OldClaudio stesse parlando in generale di come si dovrebbe disegnare un grafico in maniera professionale, da li è nato il “difetto del disegnatore”.
Ciao
FraGià, per questo ci sarebbe bisogno di un’opzione “ISO”, per cui i grafici vengano plottati secondo le norme vigenti, con tutto l’ambaradan già impostato.
P.S. Rispetto all’opzione clip=false preferisco enlarge limits, in quanto mi visualizza anche il tick rispettivo al massimo e al minimo valore sull’asse.
Ciao,
Roberto
-
10 Maggio 2012 alle 8:54 #72711::
Grazie mille ragazzi! Ho trovato che “enlarge y limits” non funziona, mentre “clip=false” sì. Provare per credere:
`\begin{tikzpicture}
\begin{axis}[
enlarge y limits,
axis lines=middle]
\addplot [
domain=0:2*pi,
samples=40,
smooth,
thick,
color=blue
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}`
`\begin{tikzpicture}
\begin{axis}[
clip=false,
axis lines=middle]
\addplot [
domain=0:2*pi,
samples=40,
smooth,
thick,
color=blue
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}`
Domanda: esiste un’opzione per far sì che la curva non vada a sbattere sulla freccia delle x?Grazie,
L.
-
10 Maggio 2012 alle 8:59 #72712
-
10 Maggio 2012 alle 9:07 #72713::
lorenzo.pantieri” post=72686Grazie mille ragazzi! Ho trovato che “enlarge y limits” non funziona, mentre “clip=false” sì. Provare per credere:
`\begin{tikzpicture}
\begin{axis}[
enlarge y limits,
axis lines=middle]
\addplot [
domain=0:2*pi,
samples=40,
smooth,
thick,
color=blue
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}`
`\begin{tikzpicture}
\begin{axis}[
clip=false,
axis lines=middle]
\addplot [
domain=0:2*pi,
samples=40,
smooth,
thick,
color=blue
]
{sin(deg(x))};
\end{axis}
\end{tikzpicture}`
Domanda: esiste un’opzione per far sì che la curva non vada a sbattere sulla freccia delle x?Grazie,
L.Per quanto riguarda la prima domanda, “axis=middle” sovrascrive l’opzione enlarge y limits, che quindi va data dopo. Al solito, l’ordine è importante e io sono estremamente disordinato 😛 . Invertine la posizione e tutto si risolve.
Per quanto riguarda la seconda domanda, puoi risolvere con “enlarge x limits”, oppure accorpare i due “enlarge” con la chiave “enlargelimits”.Ciao,
Roberto
-
10 Maggio 2012 alle 9:41 #72714::
Ragazzi, la filosofia del bug a confronto di feature mi lascia indifferente; è chiaro che si tratta solo di dialettica; Lorenzo sta cercando giustamente di portare esempi per i neofiti; quindi ha bisogno di dare regole semplici e intuitive.
Mi paiono giuste le annotazioni presentate, di enlarge y axis, di clip, di non mettere nulla lasciando i valori di default per gli assi, eccetera. e Lorenzo ha fatto benissimo a sollevare la questione.Io vi propongo un altro aspetto: la chiave smooth fa un lavoro abbastanza modesto; invece di mettere samples=40 (un campione ogni 9 gradi d’angolo) provate a mettere samples=6 (un campione ogni 60 gradi): il disegno appare inaccettabilmente deformato.
Mi direte: già, con così pochi campioni che cosa pretendi?
In realtà non voglio pretendere nulla, ma mi aspetterei di più dall’algoritmo di determinazione dei nodi e dei punti di controllo delle spline, almeno la simmetria, mentre il disegno appare palesemente smooth, ma asimmetrico; se si mettono di valori di samples minori di 40 (o di 36) si migliora la simmetria ma vedono ad occhio nudo gli estremi delle varie spline che di default sono troppo tese (la concavità al centro di ogni arco è piuttosto bassa). METAFONT E METAPOST ci riuscirebbero molto meglio.
Vi mostro questo grafico dove in blu cè quanto fa pgdplots con samples=6, e due spline (corrispondenti in un certo senso a samples=3) con le quali l’approssimazione del seno non so dire se sia migliore o peggiore di quella ottenuta con samples-6, ma almeno è simmetrica e qualitativamente assomiglia di più alla funzione seno — attenzione: qualitativamente, perché con le spline abbiamo sempre approssimazioni, anche con spline di ordine uno e moltissimi punti, che danno l’interpolazione lineare). Non preoccupatevi delle coordinate strane; il comando \draw fa riferimento a coordinate assolute, senza tenere conto delle scale dei due assi coordinati.
Questo mi da un leggero sconforto; se da un lato le due spline di ordine tre descritte con le coordinate assolte, sono difficili da specificare, ma richiedono pochissimi nodi e punti di controllo per disegnare una curva del seno abbastanza bene approssimata, certamente accettabile “qualitativamente”, dall’altra pfgplots non è capace di fare altrettanto e con un numero doppio di nodi di interpolazione presenta una curva inaccettabile anche qualitativamente.
Certo il problema si risolve specificando un numero maggiore di campioni della curva, ma il mio assunto iniziale era e resta che con l’opzione smooth bastano meno punti per avere un risultato decente; certo occorrono più punti e se occorrono più punti si mette a dura prova la memoria di TeX.
Comunque valutate voi il codice seguente:
`
\documentclass{article}
\usepackage{pgfplots}\begin{document}
\begin{tikzpicture}
\begin{axis}[
ymin=-1.5,
ymax=1.5,
xmin=0,
xmax=400,
axis lines=middle]
\addplot [
domain=0:360,
samples=6,
smooth,
thick,
color=blue
]
{sin(x)};
\draw[red] (0,150) .. controls (55,279) and (125,279) .. (180,150);
\draw[red] (180,150) .. controls (235,21) and (305,21) .. (360,150);
\end{axis}
\end{tikzpicture}
\end{document}
`
e sperimentate con diversi valori di samples. Ho messo direttamente la scala delle ascisse in gradi, invece che in radianti, così i numeri, almeno per me, hanno un significato più immediato.
-
10 Maggio 2012 alle 10:19 #72715::
Carissimi, ringrazio tutti per avermi fatto notare l’esistenza delle opzioni “enlarge x limits”, “enlarge y limits” e “enlargelimits”, da dare mettere dopo “axis lines=middle”. Tommaso, queste cose vanno aggiunte.OldClaudio” post=72693Io vi propongo un altro aspetto: la chiave smooth fa un lavoro abbastanza modesto; […].
Non sono proprio d’accordo.
`\begin{tikzpicture}
\begin{axis}
\addplot [
samples=50,
thick,
smooth,
color=blue
]
{sin(5*deg(x))};
\end{axis}
\end{tikzpicture}`
Prova a decommentare sia “samples” che “smooth”: il risultato è inaccettabile. Ora prova a commentare solo “smooth”: il risultato è ancora inaccettabile. Senza “smooth”, per avere un buon grafico bisogna salire a “samples=200”. Questo esempio nel mio articolo l’ho fatto! 🙂 In buona sostanza, io dico che “smooth”, usato accortamente, consente di risparmiare su “samples”.Ciao,
L.
-
10 Maggio 2012 alle 10:23 #72716::
Credo che l’asimmetria sia dovuta al numero pari di samples, che invece dovrebbero essere in numero dispari. In tal caso i due grafici sono simmetrici, anche se per avere un risultato decente ci vogliono almeno 11 punti. Di default i punti sono 25, che per un diagramma di questo genere bastano e avanzano, iniziano a diventare pochi quando si visualizzano più periodi.
-
10 Maggio 2012 alle 10:29 #72717::
maumau” post=72699Credo che l’asimmetria sia dovuta al numero pari di samples, che invece dovrebbero essere in numero dispari. In tal caso i due grafici sono simmetrici, anche se per avere un risultato decente ci vogliono almeno 11 punti. Di default i punti sono 25, che per un diagramma di questo genere bastano e avanzano, iniziano a diventare pochi quando si visualizzano più periodi.
Concordo. Se i campioni sono pochissimi, i risultati possono essere completamente sballati. Ma lavorare con “samples=6”, per me, non ha molto senso. Se devo fare dei grafici di qualità lavorerò con un numero di campioni ragionevolmente elevato. Se la funzione oscilla molto, lavorare con “samples=200” può essere indispensabile, con o senza “smooth”.
`\begin{tikzpicture}
\begin{axis}
\addplot [
samples=200,
thick,
%smooth,
color=blue ]
{sin(deg(1/x))};
\end{axis}
\end{tikzpicture}`Ciao,
L.
-
10 Maggio 2012 alle 10:48 #72718::
Sul fatto che smooth possa ridurre il numero dei campioni siamo d’accordo; mi pare giusta l’osservazione di @maumau sul fatto che con un numero dispari di campioni si ottenga la simmetria. Ora guardate questo diagramma dove il rpeambolo del documento è sempre lo stesso:
`
\begin{tikzpicture}
\begin{axis}[
ymin=-1.5,
ymax=1.5,
xmin=0,
xmax=400,
axis lines=middle]
\addplot [
domain=0:360,
samples=40,
smooth,
thick,
color=blue
]
{sin(x)};
\draw[red] (0,150) .. controls (71,283) and (109,283) .. (180,150);
\draw[red] (180,150) .. controls (251,17) and (289,17) .. (360,150);
\end{axis}
\end{tikzpicture}
`Il diagramma con 40 campioni eseguito con pgfplots e il diagramma con tre camcpioni ottenuto con \draw praticamente si sovrappongono; certo i punti di controllo li ho dovuti cercare a tentoni, mentre almeno pgfplots li trova doa solo; ma…
Il mio punto è che nonostante pgflotos con smooth usi le spline cubiche, coasa che nessuno di noi ha mai messo in dubbio, e che questo fatto consenta di diminuire il numero di campioni, cosa sulla quale abbiamo potuto convergere dopo diversi messaggi, il lavoro di pgfplots produce delle spline troppo tese. la tensione è un concetto che deriva dalla terminologia di METAFONT/METAPOST; una spline è tesa quando la concavità al centro dell’arco tende a zero (ovvero il raggio di curvatura della circonferenza osculante tende a infinito). questo vuol dire che il livello di arbitrarietà nel definire i due punti di controllo per mantenere ai nodi la continuità della tangente e della curvatura, in pgfplots è usato in modo tale da avere i punti di cointrllo piuttosto vicini ai nodi così a ottenere un curva piuttosto tesa. Devo dire che i parametri di default di METAFONT/METAPOST producono un risultato migliore di quello che fa pgfplots.Per capire queste affermazioni e valutare che cosa intendo per “migliore”, ahimè, bisogna avere un discreta/notevole esperienza con METAFONT/METAPOST; so che siamo in pochi ad usare questi programmi; ma credetemi; il lavoro di pgfplots è modesto a meno che i punti di interpolazione (i nodi) non siano piuttosto ravvicinati; ecco perché occorrono molti nodi anche con smooth, anche se il numero ottimale con smooth è decisamente inforiore a quello dell’interpolazione lineare; 40 conto 200 per tracciare la curva del seno la dice lunga a favore di smooth; ma tre contro 40 la dice ancora più lunga sulla potenza delle spline di Bézier usate nella loro piena efficienza; peccato che anche con la curva del seno il lavoro manuale da fare sia molto pesante e sia molto più facile specificare 40 campioni, piuttosto che rimanere con soli tre campioni e tribolare una buona oretta per trovare “sperimentalmente” le coordinate dei punti di controllo.
-
10 Maggio 2012 alle 11:16 #72719::
OldClaudio” post=72701Il mio punto è che nonostante pgflotos con smooth usi le spline cubiche, coasa che nessuno di noi ha mai messo in dubbio, e che questo fatto consenta di diminuire il numero di campioni, cosa sulla quale abbiamo potuto convergere dopo diversi messaggi, il lavoro di pgfplots produce delle spline troppo tese. […]. Devo dire che i parametri di default di METAFONT/METAPOST producono un risultato migliore di quello che fa pgfplots.
Questo andrebbe detto all’autore del pacchetto: l’ideale sarebbe che mettesse le mani sotto al cofano del pacchetto perfezionando l’algoritmo. L’utente finale, naturalmente, si accorgerebbe della differenza solo perché potrebbe ridurre il numero di “samples” senza perdere in qualità.
Che ne dici di scrivergli due righe?
Grazie,
L.
-
10 Maggio 2012 alle 11:23 #72720::
@OldClaudio voglio leggermi bene il tuo primo intervento perché mi sembra interessante.
Per il momento vorrei farti riflettere su un aspetto. Mi sembra di aver capito che l’opzione [tt]smooth[/tt] di pgfplots utilizzi lo stesso algoritmo dell’omonima opzione di TikZ, che evita di dover determinare i punti di controllo come hai fatto tu. Quindi quello che tu affermi ci conduce ad una o più delle seguenti:a) l’algoritmo di smooth è diverso da quello di \draw .. controls ecc… (che sono entrambi di TikZ)
b) l’algoritmo di smooth non è in grado di calcolare correttamente i punti di controllo
c) i punti di controllo che tu hai trovato ad occhio, per quanto efficienti, non corrispondono a quelli che si ottengono utilizzando un algoritmo corretto per le Bézier-spline.Mi riservo di testare anche altri metodi di interpolazione spline per un confronto, nonché di dare un’occhiata al codice dell’opzione smooth (anche se il linguaggio di pgf per me è arabo).
Ciao
@Lorenzo, non mi risulta che l’opzione smooth sia definita nel codice di pgfplots. Io l’ho cercata, ma non l’ho trovata. In rete ho letto che pgfplots si appoggia a TikZ per il comando [tt]\addplot[/tt].
-
10 Maggio 2012 alle 11:49 #72721::
Liverpool” post=72704 @Lorenzo, non mi risulta che l’opzione smooth sia definita nel codice di pgfplots. Io l’ho cercata, ma non l’ho trovata. In rete ho letto che pgfplots si appoggia a TikZ per il comando [tt]\addplot[/tt].
Quindi, se ho capito bene, stai dicendo che le osservazioni di Claudio andrebbero girate all’autore non di pgfplots, ma di TikZ. Ho capito bene?
-
10 Maggio 2012 alle 12:39 #72722::
a) l’algoritmo di smooth è diverso da quello di \draw .. controls ecc… (che sono entrambi di TikZ)
b) l’algoritmo di smooth non è in grado di calcolare correttamente i punti di controllo
c) i punti di controllo che tu hai trovato ad occhio, per quanto efficienti, non corrispondono a quelli che si ottengono utilizzando un algoritmo corretto per le Bézier-spline.a) con \draw (..,..).. controls. (..,..) and (..,..) .. (..,..); i punti di controllo non sono calolati, ma sono specificati; il tutto venete trasformato in codice pdf del tipo moveto(primo punto) curveto (primo nodo)(secondo nodo)(punto finale) e l’interprete pdf esegue. smooth determina i punti di controllo e li passa probabilmente a \draw o a qualche macro interna di cui fa uso anche \draw;
b) non è che ci sia un modo corretto; esiste un certo margine di arbitrarietà che viene impostato in una certa maniera; MFONT/METAPOST, evidentemente lo impostano in un altro modo; controlla le parole chiave tesion e curl sul METAFONTBOOK.
c) non esiste un algoritmo corretto per determinare i nodi delle curve di Bézier, a causa di quel margine di arbitrarietà; essistono tanti modi per definire le curve di Bézier pre-impostando un valore della tensione, oppure dando all’utente la possibilità di specificare un valore diverso. Con METAFONT/METAPOST la connessione fra i vari nodi, quando non si specificano i punti di controllo, si indicano con .. (due punti) … (tre punti) — (due trattini) — (tre trattini) e poi, volendo si possono specificare i nodi di controllo oppure i valori della conccavità (curl) oppure il valore della tesione (tension).Come vedi il programma di Knuth ( poi quello di Hobby) è stato pensato per un particolare disegno programmato e per quel tipo di disegno funziona alla grande; so che volendo si potrebbe anche usare METAPOST per tracciare diagrammi; non l’ho mai fatto perché h sempre preferito per i miei diagrammi i programmi che mi sono scritto da solo, quando non sapevo nulla di METAFONT e di METAPOST (parliamo di circa 20 anni fa); oggi ho meno necessità di usare programmi avanzati di disegno programmato e picture mi va bene in moltissimi casi, altrimenti uso tikz; confesso di non aver mai usato pgfplots, anche se seguendo il forum mi sono fatto idee precise su quello che si può fare e non si può fare; comunque si può fare infinitamente di più che con i programmi che mi sono scritto 20 anni fa. Se i verrà voglia ridisegnerò tutti i diagrammi di Bode e gli altri diagrammi dei miei libri, giusto per fare esperienza e per dire che ho i miei libri bene aggiornati.
Comunque con l’esperienza e l’occhio che mi sono fatto posso mettere le amni nel fuoco che i parametri di tensione delle curve di Bézier impostati con smooth di default per dirimere il grado di arbitrarietà sono valori piuttosto alti e le curve risultano piuttosto tese fra due nodi consecutivi.
-
10 Maggio 2012 alle 13:55 #72723::
@OldClaudio ti ringrazio per le informazioni. Penso di aver capito quello che dici, ma voglio documentarmi meglio sugli algoritmi. A questo punto credo che un’occhiata al codice di TikZ sia doverosa. Nel frattempo, a parziale conferma di quanto affermi sulla povertà dell’algoritmo, ti mostro un confronto tra la spline di Bézier generata da pgfplots e la spline naturale di Matlab sugli stessi nodi. La seconda mi sembra produrre un risultato migliore. Nota anche che nel primo e nell’ultimo tratto la mutua posizione delle curve interpolanti rispetto alla sinusoide è differente (probabilmente a causa di una condizione sulla derivata prima).[attachment=270]spline.png[/attachment]
@Lorenzo, credo di sì ma al momento non ne sono sicuro. Ho bisogno di guardare i codici. E comunque mi è sembrato di capire che in questo periodo l’autore di pgfplots è già molto impegnato.P.S.: allora facevo bene io a dire di non fidarsi alla cieca dell’interpolazione 😉
Ciao
Attachments:
You must be logged in to view attached files. -
10 Maggio 2012 alle 16:12 #72724::
OldClaudio” post=72710Comunque con l’esperienza e l’occhio che mi sono fatto posso mettere le amni nel fuoco che i parametri di tensione delle curve di Bézier impostati con smooth di default per dirimere il grado di arbitrarietà sono valori piuttosto alti e le curve risultano piuttosto tese fra due nodi consecutivi.
Da quanto ho visto, il valore di tensione è 0.5 per difetto ed è impostato tramite il comando [tt]\pgfsetplottension[/tt] definito nella riga 124 del file pgfplotsoldpgfsupp_pgflibraryplothandlers.code.tex (per pgfplots: per TikZ c’è una definizione equivalente nella riga 104 del file pgflibraryplothandlers.code.tex). Si può modificare molto semplicemente inserendo come opzione nel comando [tt]\addplot[/tt] la chiave [tt]tension[/tt]. Purtroppo, anche aumentandone il valore, non mi sembra che ci siano grossi miglioramenti.
Ciao
P.S. probabilmente nello stesso file è definito l’algoritmo di smoothing, ma per me è arabo…
-
10 Maggio 2012 alle 20:16 #72725::
Be’, il disegno che si ottiene con il codice che ho allegato al mio messaggio http://www.guitex.org/home/forum/5-tex-e-latex/71851-il-disegno-programmato-nellarte-di-scrivere-con-latex?limit=15&start=105&lang=en#72701 sembra persino migliore di quello di Mathlab; ripeto tre soli nodi di interpolazione con 2+2 punti di controllo fra ciascuna coppia di nodi.La curva di terzo grado di Bézier è data dall’equazione:
z = z_1 t^3 +3 z_2 t^2(1-t) + 3 z_3 t(1-t)^2 +z_4(1-t)^3
dove i simboli z sono numeri complessi (o coppie ordinate, se si preferisce) e t è il parametro che lega le due equazioni reali eliminando il quale si ricava l’equazione della cubica — equazione che sarebbe difficilissima da esprimere in termini di y=f(x); non così difficile, forse, nella forma f(x, y)=0, ma facilissima da esprimere in forma parametrica.
z_1 e z_4 sono i nodi di interpolazione; z_2 e z_3 sono i punti di controllo; mentre non c’è nessun dubbio sui valori dei nodi, resta l’arbitrarietà dei moduli dei vettori z_2-z_1 e z_3-z_4. la direzione di questi due vettori è fissata dalla direzione delle tangenti, mentre i due moduli controllano la concavità dell’arco della cubica; due spline si possono raccordare molto bene imponendo la stessa tangente nel punto di contatto; se nel punto di contatto si vuole mantenere la concavità continua si può fare ma alle altre due estremità non ci sono condizioni da imporre; una catena di spline che formano una linea aperta riesce ad avere sufficienti condizioni da imporre sulla direzione della tangente e sulla concavità in tutti i nodi interni, ma solo le posizioni dei nodi dei due nodi esterni; se si chiude la catena si aggiunge una coppia di condizioni e si riduce un nodo; tuttavia per una linea chiusa il problema è definito molto meglio. Nel caso del seno la cosa è definita male, come credo di avere spiegato sopra, e quindi non mi stupisco che proprio agli estremi le cubiche determinate da Matlab siano male adattate alla sinusoide.
Se il valore di default della tensione degli archi è prefissato al valore 0.5 e gli archi sembrano tropo tesi, forse si deve diminuire il valore, non aumentarlo; in ogni caso bisogna vedere che cosa intendeva Tantau quando ha prefissato il concetto di tensione e il suo valore. Knuth e Hobby hanno definito la tensione in un altro modo, tanto che il suo valore non deve essere inferiore a 3/4; l’intera spiegazione in “inglese matematico” è riportata nelle pagine 130 e seguenti del METAFONT book; ci sono tutte le formule e le equazioni che sono necessarie a METAFONT/METAPOST per determinare le tensioni o i punti di controllo in tutti i casi possibili. Confesso che si tratta di equazioni e formule non difficili, ma per me di difficile interpretazione; richiedono molte equazioni trigonometriche che, ripeto, non sono difficili da calcolare nemmeno con una calcolatrice da tasca, ma il cui esito o valore finale non è facilmente intuibile nemmeno qualitativamente dall’andamento della funzione. Io mi sono fatto una piccola esperienza in merito quando ho scritto il pacchetto curve2e; in quella circostanza NON sono riuscito ad implementare mediate l’aritmetica intera di TeX le formule di Hobby e ho dovuto accontentarmi di una tensione costante — o meglio di una curvatura prefissata agli estremi di ogni arco — e so quindi che cosa succede quando non si riesce a regolare convenientemente la curvatura o la tensione.
Con spline quadratiche, evidentemente ci vogliono più nodi perché l’errore di approssimazione con l’interpolazione ad archi quadratici sia decente; con l’interpolazione lineare, poi bisogna aumentare i nodi di interpolazione a dismisura. Naturalmente usare spline, vuol dire usare una curva fatta di diversi spezzoni, non una curva unica. Interpolare una qualunque funzione su n+1 punti richiederebbe una funzione con n+1 coefficienti da determinare in modo acconci; se la funzione è un polinomio esso deve essere di grado n-1, anche piuttosto facile da determinare; ma se oi si traccia il polinomio sul range che interessa, l’errore è nullo nei nodi, ma è terribile fuori dai nodi: provare per credere. È per questo che io mi fido di più delle spline, che non di un’unica funzione/polinomio.
-
13 Maggio 2012 alle 15:15 #72726::
Ciao a tutti. In patente violazione dell’etichetta di questo forum pongo a chi se ne intende alcune domande su pgfplots. Spero che mi rispondiate. 🙂1.
in base a cosa pgfplots mette le tacche di marcatura sugli assi? Mi spiego: se non metto nessuna opzione, ottengo un riferimento vuoto con tacche messe in un certo modo (a 0.2 di distanza tra loro). Ma appena do un’opzione ad axis, il tutto cambia. Perché? È giusto dire che le tacche vengono visualizzate distanti tra loro l’intervallo ottimale in base al tipo e alla grandezza del grafico? Non riesco a capirlo.2.
Come si fa a scegliere l’intervallo tra le tacche? Con xtick e ytick?3.
Ho bisogno di creare una semplicissima tabella con i marcatori disponibili in pgfplots. Vorrei una cosa del genere:\toprule
Chiave o codice & Risultato
\midrule
… & … \\
\bottomruledove al posto dei puntini della prima colonna c’è il codice necessario, e al posto di quelli della seconda una semplice linea con tre o quattro marcatori per tipo (x, croci, palline, quadratini, eccetera).
Ciao
Tommaso
-
13 Maggio 2012 alle 16:19 #72727::
3.
Ho bisogno di creare una semplicissima tabella con i marcatori disponibili in pgfplots. Vorrei una cosa del genere:\toprule
Chiave o codice & Risultato
\midrule
… & … \\
\bottomruledove al posto dei puntini della prima colonna c’è il codice necessario, e al posto di quelli della seconda una semplice linea con tre o quattro marcatori per tipo (x, croci, palline, quadratini, eccetera).
Ciao
TommasoTi propongo questa soluzione che fa uso di codice tikz (e non pgfplots):
`\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\usepackage{booktabs}\begin{document}
\begin{tabular}{lc}
\toprule
Chiave & Contenuto\\
\midrule
* & \tikz \draw[very thick] plot[mark=*] coordinates {(0,0) (1,0) (2,0) (3,0)};\\
x & \tikz \draw[blue] plot[mark=x] coordinates {(0,0) (1,0) (2,0) (3,0)};\\
+ & \tikz \draw plot[mark=+] coordinates {(0,0) (1,0) (2,0) (3,0)};\\
star & \tikz \draw plot[mark=star] coordinates {(0,0) (1,0) (2,0) (3,0)};\\
\dots & \dots\\
\bottomrule
\end{tabular}\end{document}`
Come vedi puoi personalizzare come vuoi la resa del “grafico”. La sintassi usata si trova a pagina 224 del manuale di tikz. Alle altre domande per ora passo!EDIT: rispondo anche a
2.
Come si fa a scegliere l’intervallo tra le tacche? Con xtick e ytick?Si. Se, ad esempio, si vuole un intervallo sull’asse x tra le tacche di 2, basta specificare l’opzione [tt]xtick={-5,-3,…,10}[/tt] (ipotizzando che i dati vadano da -5 a 10).
Ciao
Fra
-
13 Maggio 2012 alle 17:49 #72728::
Spike” post=72806
3.
Ho bisogno di creare una semplicissima tabella con i marcatori disponibili in pgfplots. Vorrei una cosa del genere:\toprule
Chiave o codice & Risultato
\midrule
… & … \\
\bottomruledove al posto dei puntini della prima colonna c’è il codice necessario, e al posto di quelli della seconda una semplice linea con tre o quattro marcatori per tipo (x, croci, palline, quadratini, eccetera).
Ciao
TommasoTi propongo questa soluzione che fa uso di codice tikz (e non pgfplots):
`\documentclass[a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{pgfplots}
\usepackage{booktabs}\begin{document}
\begin{tabular}{lc}
\toprule
Chiave & Contenuto\\
\midrule
* & \tikz \draw[very thick] plot[mark=*] coordinates {(0,0) (1,0) (2,0) (3,0)};\\
x & \tikz \draw[blue] plot[mark=x] coordinates {(0,0) (1,0) (2,0) (3,0)};\\
+ & \tikz \draw plot[mark=+] coordinates {(0,0) (1,0) (2,0) (3,0)};\\
star & \tikz \draw plot[mark=star] coordinates {(0,0) (1,0) (2,0) (3,0)};\\
\dots & \dots\\
\bottomrule
\end{tabular}\end{document}`
Come vedi puoi personalizzare come vuoi la resa del “grafico”. La sintassi usata si trova a pagina 224 del manuale di tikz. Alle altre domande per ora passo!EDIT: rispondo anche a
2.
Come si fa a scegliere l’intervallo tra le tacche? Con xtick e ytick?Si. Se, ad esempio, si vuole un intervallo sull’asse x tra le tacche di 2, basta specificare l’opzione [tt]xtick={-5,-3,…,10}[/tt] (ipotizzando che i dati vadano da -5 a 10).
Ciao
FraGrazie per i marcatori!
Ciao
Tommaso
-
14 Maggio 2012 alle 6:28 #72729::
illinguista1972″ post=72804in base a cosa pgfplots mette le tacche di marcatura sugli assi? Mi spiego: se non metto nessuna opzione, ottengo un riferimento vuoto con tacche messe in un certo modo (a 0.2 di distanza tra loro). Ma appena do un’opzione ad axis, il tutto cambia. Perché? È giusto dire che le tacche vengono visualizzate distanti tra loro l’intervallo ottimale in base al tipo e alla grandezza del grafico? Non riesco a capirlo.
Ciao Tommaso, spero che ti accontenti di una risposta qualitativa. Ti dico quello che ho capito io, ma non sono “uno che se ne intende”.
Il passo di tacca (P) dipende:
– dalla dimensione dell’asse (L);
– dalla dimensione fisica del grafico nella direzione dell’asse (G);
– da un parametro che definisce la massima distanza consentita tra due tacche consecutive (D).In particolare, il passo aumenta con L e con D e diminuisce con G.
Definito “numero di tacche desiderato” il valore N=round(G/D), si può dire semplificando che P=L/N. Siccome non tutti i valori che si ottengono in questo modo sono gradevoli (pensa se esce P=48), il risultato viene arrotondato al più vicino elemento in un insieme ristretto di valori possibili come {1, 1/2, 1/5, 1/10} dell’ordine di grandezza del grafico. Questo semplificando molto e limitatamente all’asse in scala naturale (non logaritmico).illinguista1972″ post=72804Come si fa a scegliere l’intervallo tra le tacche? Con xtick e ytick?
Sì… O meglio, in questo modo scegli direttamente i valori delle tacche. Puoi scegliere implicitamente il passo definendo le prime due tacche ed usando i punti di sospensione, ad esempio [tt]xtick={1,2.5,…,10}[/tt] se vuoi un passo di 1.5.
-
14 Maggio 2012 alle 10:13 #72730::
Tommaso, sai che io me ne esco sempre con le norme.
Bene le norme ISO e quelle UNI per l’Italia, dicono esplicitamente che i valori numerici vicino alle tacche numerate, devono essere (in scala lineare) in progressione aritmentica di 1, oppure di 2, oppure di 5; altre progressioni non sono ammesse, nemmeno quella che ti propone Liverpool di 2,5. Hai presenti le monete? èla stessa sequenza: 1, 2, 5, 10, 20, 50,centesimi; 1, 2, 5, 10, 20, 50, 100, 200, 500 euro; ti assicuro che questa prescrizione non è cervellotica. Infatti se disegni una scala logaritmica e c’è abbastanza spazio per numerare le tacche all’interno della decade, allora le tacche della decade sono 1, 2, 5, 10 e così proseguendo per le decadi precedenti e successive; se poi la decade ha una dimensione effettiva da poter numerare diverse tacche, allora si numerano tutti i numeri interi.A che distanza metti le tacche? evidentemente ad una distanza tale da non sovrapporre i numeri (ci mancherebbe altro) ma lasciando uno spazio adeguato fra due numeri consecutivi in modo da escludere che possano essere presi per cifre consecutive appartenenti ad un solo numero. Quindi la distanza dipende anche dal numero di cifre esposte; le unità di isura insieme ai loro prefissi SI consentono di non usare più di tre cifre in qualsiasi diagramma fatto come si deve; ma se il diagramma fosse un diagramma “matematico”, senza unità di misura, è meglio farci un pensierino per farlo come si deve. per esempio qualche giorno fa si stava discutendo su quanti nodi sono necessari per disegnare un periodo completo della funzione seno; Lorenzo tracciava le ascisse in radianti; io ed altri in gradi; la cosa è tutto sommato irrilevante, ma nel disegno di Lorenzo, il fatto che il periodo fosse espresso da (2*pi greco che è circa uguale a 6,28, ma in realtà è un numero irrazionale, anzi trascendente) rendeva la scala in numeri interi poco significativa (per la discussione sul numero di nodi la cosa era irrilevante, ma…) sarebbe stato meglio se avesse messo le tacche in corrispondenza di multi interi di (pi/2); usando la scala in gradi il problema non si pone nemmeno, ma se la grandezza del diagramma l’avesse consentito sarebbe stato desiderabile procedere con le tacche di 10° in 10°, in modo da avere le debite tacche anche in corrispondenza di 90°, 180°, 270° 360°. Naturalmente è possibile usare anche le tacche secondarie; per esempio nel diagramma del seno applicare la tacca ai multipli interi di 100, ma avere tacche secondarie non numerate in corrispondenza del mezzo centinaio, e tacche ulteriormente “terziarie” in corrispondenza delle decine.
Il problema quindi va posto in altri termini (a cui ho risposto): come si graduano gli assi?
Ricordo ancora che con gli assi graduati, non ha nessuna importanza dove sia il punto di coordinate (0,0), che di solito cade fuori del diagramma; il diagramma rappresenta con i suoi assi graduati una “finestra” attraverso cui vedere parte del disegno; in matematica evidentemente questo potrebbe non essere quello che si desidera, ed è invece meglio disegnare diagrammi su scale non graduate, ma che mostrino le peculiarità della funzione tracciata, anche in relazione alla sua posizione assoluta rispetto all’origine degli assi.
-
14 Maggio 2012 alle 13:52 #72731::
Carissimi, nell’articolo vorrei aggiungere il grafico del valore assoluto della Zeta di Riemann sulla retta $\Re z=1/2$. Ci sono quasi. Con Mathematica:
`out = Table[{y, Abs[Zeta[1/2 + I y]]}, {y, 0, 40, 0.1}];`
`Export[“zeta.txt”, out, “Table”];`
Il problema è regolare quel -Zeta[1/2] nella prima riga di zeta.txt. Il codice di pgfplots che uso
`\begin{tikzpicture}
\begin{axis}[
xmin=0,
xmax=40,
ymin=0,
ymax=3,
grid=major,
title={La Zeta di Riemann.}
]
\addplot [
unbounded coords=jump,
thick,
color=blue
]
file {zeta.txt};
\end{axis}
\end{tikzpicture}
`
Grazie,
L.
-
14 Maggio 2012 alle 14:05 #72732
-
14 Maggio 2012 alle 14:12 #72733
-
14 Maggio 2012 alle 14:47 #72734::
La mia prima riga è questa:
`0 -Zeta[1/2]`
L’errore riportato da pgfplots è:
`./Grafici.tmp:15: Package PGF Math Error: Could not parse input '-Zeta[1/2]' as
a floating point number, sorry. The unreadable part was near 'Zeta[1/2]'..
`
Le righe iniziali di zeta.txt sono queste:
`0 -Zeta[1/2]
0.1 1.433807867750897
0.2 1.362770945580488
0.3 1.266515016158303
0.4 1.16345935352024
0.5 1.065349212493779
0.6 0.9775874016519019`Ciao,
L.
-
14 Maggio 2012 alle 14:58 #72735
-
14 Maggio 2012 alle 15:54 #72736::
Credo sia un problema di input. Infatti pgfplots si aspetta una serie di coordinate, e nella prima riga c’è “0 -Zeta(1/2)”. Se dai
`
\addplot [
unbounded coords=jump,
thick,
color=blue
]
file[skip first] {zeta.txt};
`
dovrebbe compilare senza problemi (ovviamente mancherà un punto).Ciao,
Roberto
-
14 Maggio 2012 alle 16:17 #72737
-
14 Maggio 2012 alle 16:21 #72738
-
15 Maggio 2012 alle 2:40 #72739
-
15 Maggio 2012 alle 7:33 #72740::
Credo che più che una funzione sarebbe interessante importare dei dati sperimentali ottenuti con qualche software di analisi. @OldClaudio qualche giorno fa parlava di PSpice; ci aggiungo LabView; per far contento Tommaso si potrebbe inserire la densità spettrale di potenza del suono di uno strumento; ma per essere un po’ più originali del solito, si potrebbe inserire qualche grafico che abbia a che fare con la biologia, la chimica o meglio ancora la medicina, con i dati ricavati tramite un software specifico del campo. Che ne dici? Ovviamente serve qualcuno che metta a disposizione una serie di dati del genere…Ciao
P.S. Dimenticavo: non mettere “unbounded coords=jump” nel grafico della zeta, tanto non serve e confonde le idee al principiante.
-
15 Maggio 2012 alle 8:23 #72741::
Liverpool” post=72856Credo che più che una funzione sarebbe interessante importare dei dati sperimentali ottenuti con qualche software di analisi. @OldClaudio qualche giorno fa parlava di PSpice; ci aggiungo LabView; per far contento Tommaso si potrebbe inserire la densità spettrale di potenza del suono di uno strumento; ma per essere un po’ più originali del solito, si potrebbe inserire qualche grafico che abbia a che fare con la biologia, la chimica o meglio ancora la medicina, con i dati ricavati tramite un software specifico del campo. Che ne dici? Ovviamente serve qualcuno che metta a disposizione una serie di dati del genere…
Ciao
P.S. Dimenticavo: non mettere “unbounded coords=jump” nel grafico della zeta, tanto non serve e confonde le idee al principiante.
Grazie Liver,
infatti anch’io avevo in mente qualche applicazione più pratica. In particolare, mi piacerebbero due (non di più) esempi di ortogramma e istogramma che contengano dati reali e aggiornati, con etichette vere, eccetera. Che ne dite?Ad ogni modo, io ottengo questo errore con la zeta:
`
Overfull \hbox (0.75864pt too wide) in paragraph at lines 1042–1042
[][]
(./Grafici.tmp
! Missing \endcsname inserted.
\protect
l.6 title={$\Zeta$ di Riemann.}]
? h
The control sequence marked
should not appear between \csname and \endcsname.
?
`
Che vuol dire?Il codice è
`
\begin{tikzpicture}
\begin{axis}
[xmin=0,xmax=40,
ymin=0,ymax=3,
grid=major,
title={La Zeta di Riemann.}]
\addplot [thick,blue]
file {zeta.txt};
\end{axis}
\end{tikzpicture}
`Ciao
Tommaso
-
15 Maggio 2012 alle 8:41 #72742
-
15 Maggio 2012 alle 11:01 #72743::
Liverpool” post=72856P.S. Dimenticavo: non mettere “unbounded coords=jump” nel grafico della zeta, tanto non serve e confonde le idee al principiante.
Giusto. Ah, Tommaso: quella non è “la Zeta di Riemann”: è “il grafico del valore assoluto della Zeta di Riemann sulla retta $\Re z=1/2$”. Va detto. E si scrive $\zeta$, non $\Zeta$ (quest’ultimo comando in LaTeX non è neppure definito). Riguardo agli esempi, io metterei sia la Gamma che la Zeta: così si vede che è possibile usare un software come MAthematica per fare i calcoli lasciando a pgfplots il compito di fare il grafico. Poi, una volta pubblicato l’articolo, ognuno dirà come sarebbe meglio integrarlo.
Resta da risolvere il problema dello sforamento della memoria. Forse una soluzione potrebbe essere quella di compilare l’articolo a sé con \tikxexternalize, raccogliere tutte le immagini in una cartellina da mettere nell’Arte e includere il capitolo usando le immagini già fatte. Non è gran che, ma potrebbe risolvere.
Ciao,
L.
-
15 Maggio 2012 alle 11:22 #72744::
lorenzo.pantieri” post=72872Resta da risolvere il problema dello sforamento della memoria. Forse una soluzione potrebbe essere quella di compilare l’articolo a sé con \tikxexternalize, raccogliere tutte le immagini in una cartellina da mettere nell’Arte e includere il capitolo usando le immagini già fatte. Non è gran che, ma potrebbe risolvere.
Se l’articolo è in fase conclusiva e quindi hai già tutte le immagini pronte, la libreria external e \tikzexternalize vanno benissimo. Il problema che avevo notato sorge quando si è costretti ad inserire un’immagine in mezzo ad altre già esternalizzate (scusate il termine 😉 ): in quel caso è necessario cancellare tutte le immagini già prodotte altrimenti quella nuova non apparirà nel pdf. Che è una bella scocciatura…
Ciao
Claudio
-
15 Maggio 2012 alle 11:23 #72745::
cfiandra” post=72873Se l’articolo è in fase conclusiva e quindi hai già tutte le immagini pronte, la libreria external e \tikzexternalize vanno benissimo. Il problema che avevo notato sorge quando si è costretti ad inserire un’immagine in mezzo ad altre già esternalizzate (scusate il termine 😉 ): in quel caso è necessario cancellare tutte le immagini già prodotte altrimenti quella nuova non apparirà nel pdf. Che è una bella scocciatura…
Condivido al cento per cento! 🙂
In ogni caso, con l’Arte si tratterà di fare una cosa un po’ diversa. Andrà compilato prima l’articolo, in modo da tirarne fuori le immagini in PDF; poi queste immagini andranno messe in una cartellina “Grafici” e messe nella cartella di lavoro dell’Arte; poi si compilerà l’Arte dicendo: “quando includi il capitolo su pgfplots, va’ a pescare le immagini nella cartellina Grafici”. Non so come si possa fare…
-
15 Maggio 2012 alle 11:39 #72746::
cfiandra” post=72873Se l’articolo è in fase conclusiva e quindi hai già tutte le immagini pronte, la libreria external e \tikzexternalize vanno benissimo. Il problema che avevo notato sorge quando si è costretti ad inserire un’immagine in mezzo ad altre già esternalizzate (scusate il termine 😉 ): in quel caso è necessario cancellare tutte le immagini già prodotte altrimenti quella nuova non apparirà nel pdf. Che è una bella scocciatura…
Ciao
ClaudioNon è necessario cancellare le immagini, ma basta forzarne la rigenerazione e ciò può essere fatto scrivendo nel preambolo
`\tikzset{external/force remake}`
dopo aver caricato tutte le impostazioni relative a tikz ed alla libreria externalize. Ovviamente rimane il problema di dover aspettare un po’ quando si aggiunge una nuova immagine in mezzo perchè vanno ricompilate tutte, ma è solo per la prima volta. In ogni caso credo che il problema si verifichi quando si sceglie di nominare le immagini tutte allo stesso modo, cambiando ad esempio solo un numero che ne dà la successione e quindi quando se ne inserisce una in mezzo tikz crede che sia già pronta e non la sostituisce. Se invece si utilizza un nome diverso per ogni immagine, specificandolo tramite
`\tikzsetnextfilename{prossimafig}`
il sistema dovrebbe operare bene perchè è costretto a vedere un nuovo nome di file. Dico dovrebbe perchè non ho mai provato, ma è questa l’idea che mi ero fatto del perché di questo “malfunzionamento”.In ogni caso, con l’Arte si tratterà di fare una cosa un po’ diversa. Andrà compilato prima l’articolo, in modo da tirarne fuori le immagini in PDF; poi queste immagini andranno messe in una cartellina “Grafici” e messe nella cartella di lavoro dell’Arte; poi si compilerà l’Arte dicendo: “quando includi il capitolo su pgfplots, va’ a pescare le immagini nella cartellina Grafici”. Non so come si possa fare…
Non ho ben capito il problema. Tramite un \input carichi esattamente lo stesso capitolo dell’articolo nell’Arte, o comunque lo riscrivi? In ogni caso non basta sostituire ad ogni [tt]\input{figura.tex}[/tt] un [tt]\includegraphics{figura.pdf}[/tt]?
Ciao
Fra
-
15 Maggio 2012 alle 13:06 #72747::
Spike” post=72875Non ho ben capito il problema. Tramite un \input carichi esattamente lo stesso capitolo dell’articolo nell’Arte, o comunque lo riscrivi? In ogni caso non basta sostituire ad ogni [tt]\input{figura.tex}[/tt] un [tt]\includegraphics{figura.pdf}[/tt]?
Il problema è questo. Il sorgente del mio articolo si chiama Grafici.tex. Se lo compilo viene fuori un articolo di venti pagine su pgfplots, ricco di grafici ad alta risoluzione. Ora, vorrei fare di questo articolo un capitolo dell’Arte (naturalmente, cambiandolo un po’: per esempio l’inizio non sarà “questo articolo spiega pgfplots”, ma “questo capitolo spiega pgfplots”).
L’idea di prendere Grafici.tex, modificarlo opportunamente e includerlo tra i capitolo dell’Arte con \input{Grafici} non funziona: si ha un errore si sforamento delle memoria.
Allora ho pensato di compilare l’articolo, esternalizzare tutte le immagini, metterle in una cartella “pippo”, mettere “pippo” nella cartella di lavoro dell’Arte, includere Grafici nel main dell’Arte ma senza fargli “calcolare” tutte le immagini (così evito lo sforamento), andando a prendere quelle di “pippo”.
Si può fare? Esistono strade migliori? Qualcuno se la sente di descrivere la procedura per Mac per disporre di più memoria, in modo da evitare lo sforamento?
Garzie,
L.
-
15 Maggio 2012 alle 13:16 #72748::
Ciao a tutti. il codice`
\begin{tikzpicture}
\begin{axis}
[ybar,ymin=0,ymax=800,xtick=data,
ymajorgrids=true,
ylabel={n. iscritti},
x tick label style=%
{rotate=90,anchor=east},
xticklabel interval boundaries,
symbolic x coords={2003,2004,
2005,2006,2007,2008,2009,
2010,2011,2012},
title={Non vi interessa.}]
\addplot
[ybar interval,
fill=lightgray,draw=black]
coordinates
{(2003,64) (2004,126)
(2005,160) (2006,401)
(2007,526) (2008,752)
(2009,694) (2010,705)
(2011,568) (2012,0)};
\end{axis}
\end{tikzpicture}
`è curioso. Infatti l’ultima colonna di questo istogramma deve essere 2011, ma per ottenerla sono costretto a mettere anche 2012 con valore 0. Avete qualche idea del perché?
Già che ci sono, metto anche questo codice:
`
\begin{tikzpicture}
\begin{axis}
[xbar,xmin=0,xmax=800,
height=6.5cm,
xmajorgrids=true,
title={I principali fiumi
italiani.},
xlabel={lunghezza in km},
symbolic y coords={Reno,Piave,
Arno,Ticino,Tanaro,Oglio,Adda,
Tevere,Adige,Po},
ytick=data,nodes near coords,
nodes near coords align=%
{horizontal}
]
\addplot
[fill=lightgray,draw=black]
coordinates
{(211,Reno) (220,Piave)
(241,Arno) (248,Ticino)
(276,Tanaro) (280,Oglio)
(313,Adda) (405,Tevere)
(410,Adige) (652,Po)};
\end{axis}
\end{tikzpicture}
`Chi se ne intende se la sente di dirmi se la sintassi è corretta? Il secondo grafico deve avere le barre separate, il primo no.
Ciao
Tommaso
-
15 Maggio 2012 alle 13:35 #72749::
Ciao Lorenzo,lorenzo.pantieriSi può fare? Esistono strade migliori? Qualcuno se la sente di descrivere la procedura per Mac per disporre di più memoria, in modo da evitare lo sforamento?
Hai già tenuto presente delle indicazioni riportate in questa discussione? Sulla base delle indicazioni di Enrico su come fare, alla fine ero riuscito a espandere la memoria sia su Windows che su Ubuntu. Ora, non possedendo un Mac, non saprei esattamente che dirti, ma credo che se trovi quel file il gioco è fatto. Spero di esserti stato utile.
Ciao,
Marco.
-
15 Maggio 2012 alle 13:39 #72750::
Marco87″ post=72879Ora, non possedendo un Mac, non saprei esattamente che dirti, ma credo che se trovi quel file il gioco è fatto. Spero che possa esserti utile.
Ciao,
Marco.Mi ricordavo di averlo già spiegato! 🙂 http://www.guitex.org/home/it/forum/6-altri-programmi/68523-memoria-insufficiente-per-tikz-e-utilizzo-lualatex
Nel mio secondo intervento del filone bene o male c’è tutta la procedura.Ciao
Fra
-
15 Maggio 2012 alle 13:41 #72751::
Marco87″ post=72879Ciao Lorenzo,
Si può fare? Esistono strade migliori? Qualcuno se la sente di descrivere la procedura per Mac per disporre di più memoria, in modo da evitare lo sforamento?
Hai già tenuto presente delle indicazioni riportate in questa discussione? Sulla base delle indicazioni di Enrico su come fare, alla fine ero riuscito a espandere la memoria sia su Windows che su Ubuntu. Ora, non possedendo un Mac, non saprei esattamente che dirti, ma credo che se trovi quel file il gioco è fatto. Spero di esserti stato utile.
Ciao,
Marco.EC-CEL-LEN-TE! 🙂
Ora aspettiamo che lo faccia prima Lorenzo, poi quando mi garantisce che il Mac non gli esplode in viso, lo faccio anch’io. Domanda: qual è il valore della memoria di TeX di default e fino a quanto si può espandere?
Ciao
Tommaso
-
15 Maggio 2012 alle 13:44 #72752::
Marco87″ post=72879Ciao Lorenzo,
Si può fare? Esistono strade migliori? Qualcuno se la sente di descrivere la procedura per Mac per disporre di più memoria, in modo da evitare lo sforamento?
Hai già tenuto presente delle indicazioni riportate in questa discussione? Sulla base delle indicazioni di Enrico su come fare, alla fine ero riuscito a espandere la memoria sia su Windows che su Ubuntu. Ora, non possedendo un Mac, non saprei esattamente che dirti, ma credo che se trovi quel file il gioco è fatto. Spero di esserti stato utile.
Ciao,
Marco.La procedura per il Mac si può trovare in questa discussione. Faccio comunque notare che a me era capitato di aumentare la memoria senza riuscire lo stesso a compilare (specialmente perché avevo una trentina di grafici e un paio di mappe delle fermate degli autobus di Torino) e ho dovuto ricorrere per forza alla libreria external.
Ciao
Claudio
-
15 Maggio 2012 alle 13:51 #72753::
Allora ragzzi, ho creato un file dal nome texmf.cnf con dentro le righe magiche
`extra_mem_top = 2000000
extra_mem_bot = 4000000
`
e l’ho messo qui
`/Users/lorenzo/Library/texmf `
ma continuo a ricevere il ferale
`./ArteLaTeX.tmp:13: TeX capacity exceeded, sorry [main memory size=3000000].
\pgfplotsprependlistXpushfront …t@pgfplots@toka
}\else \pgfplotsprependlis…
l.13 \end{axis}
`
Dove sbaglio?Grazie mille,
L.
-
15 Maggio 2012 alle 14:00 #72754::
Quali istruzioni hai eseguito? Credo non le mie perchè io indicavo un’altra cartella. Comunque non dovrebbe cambiare nulla. Hai dato [tt]texhash[/tt] da terminale?
Perchè cambi extra_mem_top/bot se il log ti suggerisce di cambiare main_memory ?Domanda: qual è il valore della memoria di TeX di default e fino a quanto si può espandere?
Non posso verificare di persona perchè non ho il mac acceso, ma puoi leggere il valore di default nel file
`/usr/local/texlive//texmf/web2c/texmf.cnf`
Il valor massimo non viene specificato nel manuale di pgfplots, credo perché dipenda da TeX e non dal pacchetto.Ciao
Fra
-
15 Maggio 2012 alle 14:03 #72755::
Ciao,illinguista72Domanda: qual è il valore della memoria di TeX di default e fino a quanto si può espandere?
In realtà io non ho fatto altro che seguire quanto detto da Enrico. Questo per dire che non ne sono affatto esperto; non saprei risponderti. 🙁 Posso solo dirti che con questo metodo io non ho più avuto problemi al riguardo.
lorenzo.pantieri… ho creato un file…
Sia su Windows che su Ubuntu io non ho mai creato quel file, perché è un file che già esiste e va solo modificato. Se segui lo stesso percorso di cartelle indicato nella discussione di cui ho messo il link, non trovi il file? (Sono cose che dico senza alcuna pretesa, anzi! Non ho mai usato un Mac).
Ciao,
Marco.
-
15 Maggio 2012 alle 14:08 #72756::
Ciao,se può essere utile, riporto ciò che trovo scritto nel file texmf.cnf:
% (Public domain.)
% This texmf.cnf file should contain only your personal changes from the
% original texmf.cnf (for example, as chosen in the installer).
%
% That is, if you need to make changes to texmf.cnf, put your custom
% settings in this file, which is …/texlive/YYYY/texmf.cnf, rather than
% the distributed file (which is …/texlive/YYYY/texmf/web2c/texmf.cnf).
% And include *only* your changed values, not a copy of the whole thing!
%
OSFONTDIR = $SystemRoot/fonts//SpikePerchè cambi extra_mem_top/bot se il log ti suggerisce di cambiare main_memory ?
Rispondo per me. Nella discussione che ho indicato, Enrico aveva fornito questa soluzione, e a me funziona. Potrei sbagliare, ma vedo anche una certa logica nella cosa: così facendo si definiscono i limiti della main memory.
Ciao,
Marco.
-
15 Maggio 2012 alle 14:23 #72757::
lorenzo.pantieri” post=72877
Allora ho pensato di compilare l’articolo, esternalizzare tutte le immagini, metterle in una cartella “pippo”, mettere “pippo” nella cartella di lavoro dell’Arte, includere Grafici nel main dell’Arte ma senza fargli “calcolare” tutte le immagini (così evito lo sforamento), andando a prendere quelle di “pippo”.Si può fare? Esistono strade migliori? Qualcuno se la sente di descrivere la procedura per Mac per disporre di più memoria, in modo da evitare lo sforamento?
Garzie,
L.Certo che si può fare, anzi, sebbene si tratti di un procedimento mauale, è efficace.
Puoi risparmiare qualche cosa se lasci i file esternalizzati dove te li mette Grafici; mettere nella cartella del capitolo dell’arte uno o più link simbolici ai file che si trovano altrove, in modo che al programma di composizione fai credere che siano lì; se dovessi ricreare qualche file per sostituzioni o correzioni, ma non cambi i nomi, il link simbolici dovrebbero puntare ancora sui file nuovi/corretti — sempre che non cmabi nome.
-
15 Maggio 2012 alle 14:27 #72758::
Scusate la domanda stupida, ma sul mio Mac non riesco a raggiungere via mouse questo percorso:
`/usr/local/texlive/2011/`
Come faccio?In alternativa, mi basterebbe sapere, una volta portatomi sul terminale in
cd /usr/local/texlive/2011/
come aprire con TextEdit (giusto?) il file texmf.cnf.
Di sicuro, preferivo evitare di modificare manualmente i file di sistema…
-
15 Maggio 2012 alle 14:43 #72759::
Finder; Goto Folder, oppure maiuscola cmd GInfatti non dovresti modificare il file di sistema, c’è sicuramente il modo di avere texmf.cnf nell’albero locale, che è lì apposta per le modifiche destinate alla macchina locale, non ad un solo utente è in /usr/local/texlive/ senza passare per la cartella 2011.
Leggiti anche la documentazione di texlive con texdoc texlive.
Non dico di non farlo, ma pensaci bene prima di ampliare la memoria; come ho detto tante volte c’è sempre un’altra soluzione, ricordando che si tratta solo di disegni, e non dei calcoli di fisica delle particelle alla ricerca del neutrino perduto.
Se decidi di farlo e devi mettere texmf.cnf da qualche parte nell’albero locale /usr/local/texlive/texmf-local, probabilmente dei essere root o almeno superuser; preparati quindi il file sul desktop, poi spostalo nella cartella dove lo vuoi mettere, e il sistema ti chiede di autenticarti, senza bisogno di lavorare da terminale dopo aver dato la specifica sudo e la parola chiave.
-
15 Maggio 2012 alle 14:47 #72760::
illinguista1972″ post=72878Infatti l’ultima colonna di questo istogramma deve essere 2011, ma per ottenerla sono costretto a mettere anche 2012 con valore 0. Avete qualche idea del perché?
La risposta è a pag. 59 del pgfmanual alla voce [tt]ybar interval[/tt] (io non saprei darla meglio…). Per il secondo codice, non so bene cosa intendi con “la sintassi è corretta”, ma penso di sì. Più che altro credo che dovremmo metterci d’accordo sull’ordine delle chiavi, per comodità, anche se in generale l’ordine non è essenziale.
Domanda: ma siete sicuri, tu e Lorenzo, che il titolo debba terminare con il punto fermo?Ciao
-
15 Maggio 2012 alle 14:49 #72761::
lorenzo.pantieri” post=72891Scusate la domanda stupida, ma sul mio Mac non riesco a raggiungere via mouse questo percorso:
`/usr/local/texlive/2011/`
Come faccio?In alternativa, mi basterebbe sapere, una volta portatomi sul terminale in
cd /usr/local/texlive/2011/
come aprire con TextEdit (giusto?) il file texmf.cnf.
Di sicuro, preferivo evitare di modificare manualmente i file di sistema…
Scusate l’intromissione, ma non credo che ci vogliano grandi magie per fare quello che Enrico disse più di un anno fa. Intanto, disse di modificare il file texmf.cnf che sta in
`usr/local/texlive/2011/`
alla quale directory si giunge da terminale con
`cd usr/local/texlive/2011/`
Giusto? Giusto. Non va modificato, invece, l’omonimo file che sta in
`usr/local/texlive/2011/texmf/web2c/`
e il cui contenuto è
`
% original texmf.cnf — runtime path configuration file for kpathsea.
% Public domain.
%
% If you modify this original file, YOUR CHANGES WILL BE LOST when it is
% updated. Instead, put your changes — and only your changes, not an
% entire copy of the full texmf.cnf! — in ../../texmf.cnf. That is, if
% this file is installed in /some/path/to/texlive/2011/texmf/web2c/texmf.cnf,
% add your custom settings to /some/path/to/texlive/2011/texmf.cnf.
%
% What follows is a super-summary of what this .cnf file can
% contain. Please read the Kpathsea manual for more information.
%
% Any identifier (sticking to A-Za-z_ for names is safest) can be assigned.
% The `=' (and surrounding spaces) is optional.
% $foo (or ${foo}) in a value expands to the envvar or cnf value of foo.
% Long lines can be continued with a \.
%
% Earlier entries (in the same or another file) override later ones, and
% an environment variable foo overrides any texmf.cnf definition of foo.
%
% All definitions are read before anything is expanded, so you can use
% variables before they are defined.
%
% If a variable assignment is qualified with `.PROGRAM', it is ignored
% unless the current executable (last filename component of argv[0]) is
% named PROGRAM. This foo.PROGRAM construct is not recognized on the
% right-hand side. For environment variables, use FOO_PROGRAM.
%
% Which file formats use which paths for searches is described in the
% various programs' and the Kpathsea documentation (http://tug.org/kpathsea).
%
% // means to search subdirectories (recursively).
% A leading !! means to look only in the ls-R db, never on the disk.
% In this file, either ; or : can be used to separate path components.
% A leading/trailing/doubled path separator in the paths will be
% expanded into the compile-time default. Probably not what you want.
%
% Brace notation is supported, for example: /usr/local/{mytex,othertex}
% expands to /usr/local/mytex:/usr/local/othertex. We make extensive
% use of this.% Part 1: Search paths and directories.
% This is the parent directory of our several trees, i.e.,
% /usr/local/texlive/YYYY in the original TeX Live distribution.
%
% All trees must be organized according to the TeX Directory Structure
% (http://tug.org/tds), or files may not be found.
%
% Redistributors will probably want $SELFAUTODIR/share, i.e., /usr/share.
TEXMFROOT = $SELFAUTOPARENT% The tree containing runtime files related to the specific
% distribution and version.
TEXMFMAIN = $TEXMFROOT/texmf% The main tree of packages, distribution-agnostic:
TEXMFDIST = $TEXMFROOT/texmf-dist% Local additions to the distribution trees.
TEXMFLOCAL = $TEXMFROOT/../texmf-local% TEXMFSYSVAR, where *-sys store cached runtime data.
TEXMFSYSVAR = $TEXMFROOT/texmf-var% TEXMFSYSCONFIG, where *-sys store configuration data.
TEXMFSYSCONFIG = $TEXMFROOT/texmf-config% Per-user texmf tree(s) — organized per the TDS, as usual. To define
% more than one per-user tree, set this to a list of directories in
% braces, as described above. (This used to be HOMETEXMF.) ~ expands
% to %USERPROFILE% on Windows, $HOME otherwise.
TEXMFHOME = ~/texmf% TEXMFVAR, where texconfig/updmap/fmtutil store cached runtime data.
TEXMFVAR = ~/.texlive2011/texmf-var% TEXMFCONFIG, where texconfig/updmap/fmtutil store configuration data.
TEXMFCONFIG = ~/.texlive2011/texmf-config% List all the texmf trees.
%
% For texconfig to work properly, TEXMFCONFIG and TEXMFVAR should be named
% explicitly and before all other trees.
%
% TEXMFLOCAL follows TEXMFMAIN (and precedes TEXMFDIST) because the
% files in TEXMFMAIN are tightly coupled with the particular version of
% the distribution, such as configuration files. Overriding them would
% be more likely to cause trouble than help. On the other hand, the
% bulk of packages and fonts are in TEXMFDIST, and locally-installed
% versions should take precedence over those — although it is generally
% a source of confusion to have different versions of a package
% installed, whatever the trees, so try to avoid it.
TEXMF = {$TEXMFCONFIG,$TEXMFVAR,$TEXMFHOME,!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}% Where to look for ls-R files. There need not be an ls-R in the
% directories in this path, but if there is one, Kpathsea will use it.
% By default, this is only the !! elements of TEXMF, so that mktexlsr
% does not create ls-R files in the non-!! elements — because if an
% ls-R is present, it will be used, and the disk will not be searched.
% This is arguably a bug in kpathsea.
TEXMFDBS = {!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}% The system trees. These are the trees that are shared by all users.
% If a tree appears in this list, the mktex* scripts will use
% VARTEXFONTS for generated files, if the original tree isn't writable;
% otherwise the current working directory is used.
SYSTEXMF = $TEXMFSYSVAR;$TEXMFMAIN;$TEXMFLOCAL;$TEXMFDIST% Where generated fonts may be written. This tree is used when the sources
% were found in a system tree and either that tree wasn't writable, or the
% varfonts feature was enabled in MT_FEATURES in mktex.cnf.
VARTEXFONTS = $TEXMFVAR/fonts% On some systems, there will be a system tree which contains all the font
% files that may be created as well as the formats. For example
% TEXMFVAR = /var/lib/texmf
% is used in many distros. In this case, set VARTEXFONTS like this
%VARTEXFONTS = $TEXMFVAR/fonts
% and do not mention it in TEXMFDBS (but _do_ mention TEXMFVAR).
%
% Remove $VARTEXFONTS from TEXMFDBS if the VARTEXFONTS directory is below
% one of the TEXMF directories (avoids overlapping ls-R files).%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Usually you will not need to edit any of the following variables.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WEB2C is for Web2C specific files. The current directory may not be
% a good place to look for them.
WEB2C = $TEXMF/web2c% TEXINPUTS is for TeX input files — i.e., anything to be found by \input
% or \openin, including .sty, .eps, etc. We specify paths for all known
% formats, past or present. Not all of them are built these days.% Plain TeX. Have the command tex check all directories as a last
% resort, we may have plain-compatible stuff anywhere.
TEXINPUTS.tex = .;$TEXMF/tex/{plain,generic,}//% Fontinst needs to read afm files.
TEXINPUTS.fontinst = .;$TEXMF/{tex,fonts/afm}//% Other plain-based formats.
TEXINPUTS.amstex = .;$TEXMF/tex/{amstex,plain,generic,}//
TEXINPUTS.csplain = .;$TEXMF/tex/{csplain,plain,generic,}//
TEXINPUTS.eplain = .;$TEXMF/tex/{eplain,plain,generic,}//
TEXINPUTS.ftex = .;$TEXMF/tex/{formate,plain,generic,}//
TEXINPUTS.mex = .;$TEXMF/tex/{mex,plain,generic,}//
TEXINPUTS.texinfo = .;$TEXMF/tex/{texinfo,plain,generic,}//% LaTeX 2e specific macros are stored in latex/, macros that can only be
% used with 2.09 in latex209/. In addition, we look in the directory
% latex209, useful for macros that were written for 2.09 and do not
% mention 2e at all, but can be used with 2e.
TEXINPUTS.cslatex = .;$TEXMF/tex/{cslatex,csplain,latex,generic,}//
TEXINPUTS.latex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.latex209 = .;$TEXMF/tex/{latex209,generic,latex,}//
TEXINPUTS.olatex = .;$TEXMF/tex/{latex,generic,}//% MLTeX.
TEXINPUTS.frlatex = .;$TEXMF/tex/{french,latex,generic,}//
TEXINPUTS.frtex = .;$TEXMF/tex/{french,plain,generic,}//
TEXINPUTS.mllatex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.mltex = .;$TEXMF/tex/{plain,generic,}//% e-TeX.
TEXINPUTS.elatex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.etex = .;$TEXMF/tex/{plain,generic,}//% pdfTeX.
TEXINPUTS.pdfcslatex = .;$TEXMF/tex/{cslatex,csplain,latex,generic,}//
TEXINPUTS.pdfcsplain = .;$TEXMF/tex/{csplain,plain,generic,}//
TEXINPUTS.pdflatex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.pdfmex = .;$TEXMF/tex/{mex,plain,generic,}//
TEXINPUTS.utf8mex = .;$TEXMF/tex/{mex,plain,generic,}//
TEXINPUTS.pdftex = .;$TEXMF/tex/{plain,generic,}//
TEXINPUTS.pdftexinfo = .;$TEXMF/tex/{texinfo,plain,generic,}//
TEXINPUTS.pdfamstex = .;$TEXMF/tex/{amstex,plain,generic,}//% pdfeTeX.
TEXINPUTS.pdfelatex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.pdfetex = .;$TEXMF/tex/{plain,generic,}//% pdfxTeX.
TEXINPUTS.pdfxlatex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.pdfxmex = .;$TEXMF/tex/{mex,plain,generic,}//
TEXINPUTS.pdfxtex = .;$TEXMF/tex/{plain,generic,}//% LuaTeX.
TEXINPUTS.lualatex = .;$TEXMF/tex/{lualatex,latex,luatex,generic,}//
TEXINPUTS.luatex = .;$TEXMF/tex/{luatex,plain,generic,}//
TEXINPUTS.dvilualatex = .;$TEXMF/tex/{lualatex,latex,luatex,generic,}//
TEXINPUTS.dviluatex = .;$TEXMF/tex/{luatex,plain,generic,}//% XeTeX.
TEXINPUTS.xelatex = .;$TEXMF/tex/{xelatex,latex,xetex,generic,}//
TEXINPUTS.xeplain = .;$TEXMF/tex/{xeplain,eplain,plain,xetex,generic,}//
TEXINPUTS.xetex = .;$TEXMF/tex/{xetex,plain,generic,}//% Omega / Aleph.
TEXINPUTS.aleph = .;$TEXMF/tex/{plain,generic,}//
TEXINPUTS.elambda = .;$TEXMF/tex/{lambda,latex,generic,}//
TEXINPUTS.eomega = .;$TEXMF/tex/{plain,generic,}//
TEXINPUTS.lambda = .;$TEXMF/tex/{lambda,latex,generic,}//
TEXINPUTS.lamed = .;$TEXMF/tex/{lamed,lambda,latex,generic,}//
TEXINPUTS.omega = .;$TEXMF/tex/{plain,generic,}//% p(La)TeX.
TEXINPUTS.ptex = .;$TEXMF/tex/{ptex,plain,generic,}//
TEXINPUTS.platex = .;$TEXMF/tex/{platex,latex,generic,}//% epTeX, and for pmpost.
TEXINPUTS.eptex = .;$TEXMF/tex/{ptex,plain,generic,}//
TEX.pmpost = eptex% (e)up(La)TeX.
TEXINPUTS.uplatex = .;$TEXMF/tex/{uplatex,platex,latex,generic,}//
TEXINPUTS.uptex = .;$TEXMF/tex/{uptex,ptex,plain,generic,}//
TEXINPUTS.euptex = .;$TEXMF/tex/{uptex,ptex,plain,generic}//% pBibTeX bibliographies and style files.
BIBINPUTS.pbibtex = .;$TEXMF/{pbibtex,bibtex}/bib//
BSTINPUTS.pbibtex = .;$TEXMF/{pbibtex,bibtex}/bst//% ConTeXt.
TEXINPUTS.context = .;$TEXMF/tex/{context,plain,generic}//% jadetex.
TEXINPUTS.jadetex = .;$TEXMF/tex/{jadetex,latex,generic,}//
TEXINPUTS.pdfjadetex = .;$TEXMF/tex/{jadetex,latex,generic,}//% XMLTeX.
TEXINPUTS.xmltex = .;$TEXMF/tex/{xmltex,latex,generic,}//
TEXINPUTS.pdfxmltex = .;$TEXMF/tex/{xmltex,latex,generic,}//% Miscellany, no longer built.
TEXINPUTS.lamstex = .;$TEXMF/tex/{lamstex,plain,generic,}//
TEXINPUTS.lollipop = .;$TEXMF/tex/{lollipop,plain,generic,}//
TEXINPUTS.frpdflatex = .;$TEXMF/tex/{french,latex,generic,}//
TEXINPUTS.frpdftex = .;$TEXMF/tex/{french,plain,generic,}//% Earlier entries override later ones, so put this generic one last.
TEXINPUTS = .;$TEXMF/tex/{$progname,generic,}//% ttf2tfm.
TTF2TFMINPUTS = .;$TEXMF/ttf2pk//% Metafont, MetaPost inputs.
MFINPUTS = .;$TEXMF/metafont//;{$TEXMF/fonts,$VARTEXFONTS}/source//
MPINPUTS = .;$TEXMF/metapost//% Dump files (fmt/base/mem) for vir{tex,mf,mp} to read.
% We want to find the engine-specific file, e.g., cont-en.fmt can
% exist under both pdftex/ and xetex/. But just in case some formats
% end up without an engine directory, look directly in web2c/ too.
% We repeat the same definition three times because of the way fmtutil
% is implemented; if we use ${TEXFORMATS}, the mpost/mf/etc. formats
% will not be found.
TEXFORMATS = .;$TEXMF/web2c{/$engine,}
MFBASES = .;$TEXMF/web2c{/$engine,}
MPMEMS = .;$TEXMF/web2c{/$engine,}
%
% As of 2008, pool files don't exist any more (the strings are compiled
% into the binaries), but just in case something expects to find these:
TEXPOOL = .;$TEXMF/web2c
MFPOOL = ${TEXPOOL}
MPPOOL = ${TEXPOOL}% support the original xdvi. Must come before the generic settings.
PKFONTS.XDvi = .;$TEXMF/%s;$VARTEXFONTS/pk/{%m,modeless}//
VFFONTS.XDvi = .;$TEXMF/%s
PSHEADERS.XDvi = .;$TEXMF/%q{dvips,fonts/type1}//
TEXPICTS.XDvi = .;$TEXMF/%q{dvips,tex}//% Device-independent font metric files.
VFFONTS = .;$TEXMF/fonts/vf//
TFMFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/tfm//% The $MAKETEX_MODE below means the drivers will not use a cx font when
% the mode is ricoh. If no mode is explicitly specified, kpse_prog_init
% sets MAKETEX_MODE to /, so all subdirectories are searched. See the manual.
% The modeless part guarantees that bitmaps for PostScript fonts are found.
PKFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/pk/{$MAKETEX_MODE,modeless}//% Similarly for the GF format, which only remains in existence because
% Metafont outputs it (and MF isn't going to change).
GFFONTS = .;$TEXMF/fonts/gf/$MAKETEX_MODE//% A backup for PKFONTS and GFFONTS. Not used for anything.
GLYPHFONTS = .;$TEXMF/fonts% A place to puth everything that doesn't fit the other font categories.
MISCFONTS = .;$TEXMF/fonts/misc//% font name map files. This isn't just fonts/map// because ConTeXt
% wants support for having files with the same name in the different
% subdirs. Maybe if the programs ever get unified to accepting the same
% map file syntax the definition can be simplified again.
TEXFONTMAPS = .;$TEXMF/fonts/map/{$progname,pdftex,dvips,}//% BibTeX bibliographies and style files. bibtex8 also uses these.
BIBINPUTS = .;$TEXMF/bibtex/bib//
BSTINPUTS = .;$TEXMF/bibtex/{bst,csf}//% MlBibTeX.
MLBIBINPUTS = .;$TEXMF/bibtex/bib/{mlbib,}//
MLBSTINPUTS = .;$TEXMF/bibtex/{mlbst,bst}//% .ris and .bltxml bibliography formats.
RISINPUTS = .;$TEXMF/bibtex/ris//
BLTXMLINPUTS = .;$TEXMF/bibtex/bltxml//% MFT style files.
MFTINPUTS = .;$TEXMF/mft//% PostScript headers and prologues (.pro); unfortunately, some programs
% also use this for acessing font files (enc, type1, truetype)
TEXPSHEADERS = .;$TEXMF/{dvips,fonts/{enc,type1,type42,type3}}//
TEXPSHEADERS.gsftopk = .;$TEXMF/{dvips,fonts/{enc,type1,type42,type3,truetype}}//% OSFONTDIR is to provide a convenient hook for allowing TeX to find
% fonts installed on the system (outside of TeX). An empty default
% value would add “//” to the search paths, so we give it a dummy value.
OSFONTDIR = /please/set/osfontdir/in/the/environment% PostScript Type 1 outline fonts.
T1FONTS = .;$TEXMF/fonts/type1//;$OSFONTDIR//% PostScript AFM metric files.
AFMFONTS = .;$TEXMF/fonts/afm//;$OSFONTDIR//% TrueType outline fonts.
TTFONTS = .;$TEXMF/fonts/{truetype,opentype}//;$OSFONTDIR//% OpenType outline fonts.
OPENTYPEFONTS = .;$TEXMF/fonts/{opentype,truetype}//;$OSFONTDIR//% Type 42 outline fonts.
T42FONTS = .;$TEXMF/fonts/type42//% Ligature definition files.
LIGFONTS = .;$TEXMF/fonts/lig//% Dvips' config.* files (this name should not start with `TEX'!).
TEXCONFIG = $TEXMF/dvips//% Makeindex style (.ist) files.
INDEXSTYLE = .;$TEXMF/makeindex//% Font encoding files (.enc).
ENCFONTS = .;$TEXMF/fonts/enc//% CMap files.
CMAPFONTS = .;$TEXMF/fonts/cmap//% Subfont definition files.
SFDFONTS = .;$TEXMF/fonts/sfd//% OpenType feature files (.fea).
FONTFEATURES=.;$TEXMF/fonts/fea//% .cid and .cidmap
FONTCIDMAPS=.;$TEXMF/fonts/cid//% pdftex config files:
PDFTEXCONFIG = .;$TEXMF/pdftex/{$progname,}//% Used by DMP (ditroff-to-mpx), called by makempx -troff.
TRFONTS = /usr{/local,}/share/groff/{current/font,site-font}/devps
MPSUPPORT = .;$TEXMF/metapost/support% For xdvi to find mime.types and .mailcap, if they do not exist in
% ~. These are single directories, not paths.
% (But the default mime.types, at least, may well suffice.)
MIMELIBDIR = $TEXMFROOT/etc
MAILCAPLIBDIR = $TEXMFROOT/etc% Default settings for the fontconfig library as used by the Windows
% versions of xetex/xdvipdfmx. On Unixish systems, fontconfig ignores
% this. ConTeXT MkIV (all platforms) also use these values.
%
FONTCONFIG_FILE = fonts.conf
FONTCONFIG_PATH = $TEXMFSYSVAR/fonts/conf
FC_CACHEDIR = $TEXMFSYSVAR/fonts/cache% TeX documentation and source files, for use with texdoc and kpsewhich.
TEXDOCS = $TEXMF/doc//
TEXSOURCES = .;$TEXMF/source//% Web and CWeb input paths.
WEBINPUTS = .;$TEXMF/web//
CWEBINPUTS = .;$TEXMF/cweb//% Omega-related fonts and other files.
OFMFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/{ofm,tfm}//
OPLFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/opl//
OVFFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/{ovf,vf}//
OVPFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/ovp//
OTPINPUTS = .;$TEXMF/omega/otp//
OCPINPUTS = .;$TEXMF/omega/ocp//% Some additional input variables for several programs. If you add
% a program that uses the `other text files' or `other binary files'
% search formats, you'll want to add their variables here as well.
T4HTINPUTS = .;$TEXMF/tex4ht//%% t4ht utility, sharing files with TeX4ht
TEX4HTFONTSET=alias,iso8859,unicode
TEX4HTINPUTS = .;$TEXMF/tex4ht/base//;$TEXMF/tex4ht/ht-fonts/{$TEX4HTFONTSET}//% TeXworks editor configuration and settings
TW_LIBPATH = $TEXMFCONFIG/texworks
TW_INIPATH = $TW_LIBPATH% For security, do not look in . for dvipdfmx.cfg, since the D option
% would allow command execution.
DVIPDFMXINPUTS = $TEXMF/dvipdfmx% Lua needs to look in TEXINPUTS for lua scripts distributed with packages.
%
% But we can't simply use $TEXINPUTS, since then if TEXINPUTS is set in
% the environment with a colon, say, TEXINPUTS=/some/dir:, the intended
% default expansion of TEXINPUTS will not happen and .lua files under
% the /tex/ will not be found.
%
% So, duplicate the TEXINPUTS.*lualatex values as LUAINPUTS.*lualatex.
% The default LUAINPUTS sufficess for luatex and dviluatex.
%
LUAINPUTS.lualatex = .;$TEXMF/scripts/{$progname,$engine,}/{lua,}//;$TEXMF/tex/{lualatex,latex,luatex,generic,}//
LUAINPUTS.dvilualatex = .;$TEXMF/scripts/{$progname,$engine,}/{lua,}//;$TEXMF/tex/{lualatex,latex,luatex,generic,}//
LUAINPUTS = .;$TEXMF/scripts/{$progname,$engine,}/{lua,}//;$TEXMF/tex/{luatex,plain,generic,}//% Lua needs to look for binary lua libraries distributed with packages.
CLUAINPUTS = .;$SELFAUTOLOC/lib/{$progname,$engine,}/lua//% Architecture independent executables.
TEXMFSCRIPTS = $TEXMF/scripts/{$progname,$engine,}//% Other languages.
JAVAINPUTS = .;$TEXMF/scripts/{$progname,$engine,}/java//
PERLINPUTS = .;$TEXMF/scripts/{$progname,$engine,}/perl//
PYTHONINPUTS = .;$TEXMF/scripts/{$progname,$engine,}/python//
RUBYINPUTS = .;$TEXMF/scripts/{$progname,$engine,}/ruby//%% The mktex* scripts rely on KPSE_DOT. Do not set it in the environment.
% KPSE_DOT = .% This definition isn't used from this .cnf file itself (that would be
% paradoxical), but the compile-time default in paths.h is built from it.
% The SELFAUTO* variables are set automatically from the location of
% argv[0], in kpse_set_program_name.
%
% This main texmf.cnf file is installed, for a release YYYY, in a
% directory such as /usr/local/texlive/YYYY/texmf/web2c/texmf.cnf.
% Since this file is subject to future updates, the TeX Live installer
% or human administrator may also create a file
% /usr/local/texlive/YYYY/texmf.cnf; any settings in this latter file
% will take precedence over the distributed one under texmf/web2c.
%
% For security reasons, it is better not to include . in this path.
%
TEXMFCNF = {$SELFAUTOLOC,$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,}/web2c}% kpathsea 3.5.3 and later sets these at runtime. To avoid empty
% expansions from binaries linked against an earlier version of the
% library, we set $progname and $engine to something non-empty:
progname = unsetprogname
engine = unsetengine% Part 2: Options.
% If this option is set to true, `tex a.b' will look first for a.b.tex
% (within each path element), and then for a.b, i.e., we try standard
% extensions first. If this is false, we first look for a.b and then
% a.b.tex, i.e., we try the name as-is first.
%
% Both names are always tried; the difference is the order in which they
% are tried. The setting applies to all searches, not just .tex.
%
% This setting only affects names being looked up which *already* have
% an extension. A name without an extension (e.g., `tex story') will
% always have an extension added first.
%
% The default is true, because we already avoid adding the standard
% extension(s) in the usual cases. E.g., babel.sty will only look for
% babel.sty, not babel.sty.tex, regardless of this setting.
try_std_extension_first = t% Enable system commands via \write18{…}. When enabled fully (set to
% t), obviously insecure. When enabled partially (set to p), only the
% commands listed in shell_escape_commands are allowed. Although this
% is not fully secure either, it is much better, and so useful that we
% enable it for everything but bare tex.
shell_escape = p% No spaces in this command list.
%
% The programs listed here are as safe as any we know: they either do
% not write any output files, respect openout_any, or have hard-coded
% restrictions similar or higher to openout_any=p. They also have no
% features to invoke arbitrary other programs, and no known exploitable
% bugs. All to the best of our knowledge. They also have practical use
% for being called from TeX.
%
shell_escape_commands = \
bibtex,bibtex8,\
kpsewhich,\
makeindex,\
repstopdf,\% we'd like to allow:
% dvips – but external commands can be executed, need at least -R1.
% epspdf, ps2pdf, pstopdf – need to respect openout_any,
% and gs -dSAFER must be used and check for shell injection with filenames.
% (img)convert (ImageMagick) – delegates.mgk possible misconfig, besides,
% without Unix convert it hardly seems worth it, and Windows convert
% is something completely different that destroys filesystems, so skip.
% pygmentize – but is the filter feature insecure?
% ps4pdf – but it calls an unrestricted latex.
% rpdfcrop – maybe ok, but let's get experience with repstopdf first.
% texindy,xindy – but is the module feature insecure?
% ulqda – but requires optional SHA1.pm, so why bother.
% tex, latex, etc. – need to forbid –shell-escape, and inherit openout_any.% plain TeX should remain unenhanced.
shell_escape.tex = f
shell_escape.initex = f% This is used by the Windows script wrapper for restricting searching
% for the purportedly safe shell_escape_commands above to system
% directories.
TEXMF_RESTRICTED_SCRIPTS = \
{!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}/scripts/{$progname,$engine,}//% Allow TeX \openin, \openout, or \input on filenames starting with `.'
% (e.g., .rhosts) or outside the current tree (e.g., /etc/passwd)?
% a (any) : any file can be opened.
% r (restricted) : disallow opening “dotfiles”.
% p (paranoid) : as `r' and disallow going to parent directories, and
% restrict absolute paths to be under $TEXMFOUTPUT.
openout_any = p
openin_any = a% Write .log/.dvi/etc. files here, if the current directory is unwritable.
%TEXMFOUTPUT = /tmp% If a dynamic file creation fails, log the command to this file, in
% either the current directory or TEXMFOUTPUT. Set to the
% empty string or 0 to avoid logging.
MISSFONT_LOG = missfont.log% Set to a colon-separated list of words specifying warnings to suppress.
% To suppress everything, use TEX_HUSH = all; this is currently equivalent to
% TEX_HUSH = checksum:lostchar:readable:special
% To suppress nothing, use TEX_HUSH = none or do not set the variable at all.
TEX_HUSH = none% Allow TeX, and MF to parse the first line of an input file for
% the %&format construct.
parse_first_line = t% But don't parse the first line if invoked as “tex”, since we want that
% to remain Knuth-compatible. The src_specials and
% file_line_error_style settings, as well as the options -enctex,
% -mltex, -8bit, etc., also affect this, but they are all off by default.
parse_first_line.tex = f
parse_first_line.initex = f% Control file:line:error style messages.
file_line_error_style = f% Enable the mktex… scripts by default? These must be set to 0 or 1.
% Particular programs can and do override these settings, for example
% dvips's -M option. Your first chance to specify whether the scripts
% are invoked by default is at configure time.
%
% These values are ignored if the script names are changed; e.g., if you
% set DVIPSMAKEPK to `foo', what counts is the value of the environment
% variable/config value `FOO', not the `MKTEXPK' value.
%
%MKTEXTEX = 0
%MKTEXPK = 0
%MKTEXMF = 0
%MKTEXTFM = 0
%MKTEXFMT = 0
%MKOCP = 0
%MKOFM = 0% Used by makempx to run TeX. We use “etex” because MetaPost is
% expecting DVI, and not “tex” because we want first line parsing.
TEX = etex% These variables specify the external program called for the
% interactive `e' option. %d is replaced by the line number and %s by
% the current filename. The default is specified at compile-time, and
% we let that stay in place since different platforms like different values.
%TEXEDIT = vi +%d '%s' % default for Unix
%TEXEDIT = texworks –position=+%d “%s” % default for Windows
%MFEDIT = ${TEXEDIT}
%MPEDIT = ${TEXEDIT}% The default `codepage and sort order' file for BibTeX8, when none is
% given as command line option or environment variable.
BIBTEX_CSFILE = 88591lat.csf% This variable is specific to Windows. It must be set to 0 or 1. The
% default is 0. Setting it to 1 tells the Windows script wrappers to
% use an already installed Perl interpreter if one is found on the
% search path, in preference to the Perl shipped with TeX Live. Thus,
% it may be useful if you both (a) installed a full Perl distribution
% for general use, and (b) need to run Perl programs from TL that use
% additional modules we don't provide. The TL Perl does provide all the
% standard Perl modules.
%
%TEXLIVE_WINDOWS_TRY_EXTERNAL_PERL = 0% Part 3: Array and other sizes for TeX (and Metafont).
%
% If you want to change some of these sizes only for a certain TeX
% variant, the usual dot notation works, e.g.,
% main_memory.hugetex = 20000000
%
% If a change here appears to be ignored, try redumping the format file.% Memory. Must be less than 8,000,000 total.
%
% main_memory is relevant only to initex, extra_mem_* only to non-ini.
% Thus, have to redump the .fmt file after changing main_memory; to add
% to existing fmt files, increase extra_mem_*. (To get an idea of how
% much, try \tracingstats=2 in your TeX source file;
% web2c/tests/memtest.tex might also be interesting.)
%
% To increase space for boxes (as might be needed by, e.g., PiCTeX),
% increase extra_mem_bot.
%
% For some xy-pic samples, you may need as much as 700000 words of memory.
% For the vast majority of documents, 60000 or less will do.
%
main_memory = 3000000 % words of inimemory available; also applies to inimf&mp
extra_mem_top = 0 % extra high memory for chars, tokens, etc.
extra_mem_bot = 0 % extra low memory for boxes, glue, breakpoints, etc.% ConTeXt needs lots of memory.
extra_mem_top.context = 2000000
extra_mem_bot.context = 4000000% Words of font info for TeX (total size of all TFM files, approximately).
% Must be >= 20000 and <= 147483647 (without tex.ch changes). font_mem_size = 3000000 % Total number of fonts. Must be >= 50 and <= 9000 (without tex.ch changes). font_max = 9000 % Extra space for the hash table of control sequences. hash_extra = 200000 % Max number of characters in all strings, including all error messages, % help texts, font names, control sequences. These values apply to TeX. pool_size = 3250000 % Minimum pool space after TeX's own strings; must be at least % 25000 less than pool_size, but doesn't need to be nearly that large. string_vacancies = 90000 % Maximum number of strings. max_strings = 500000 % min pool space left after loading .fmt pool_free = 47500 % Buffer size. TeX uses the buffer to contain input lines, but macro % expansion works by writing material into the buffer and reparsing the % line. As a consequence, certain constructs require the buffer to be % very large, even though most documents can be handled with a small value. buf_size = 200000 % Hyphenation trie. The maximum possible is 4194303 (ssup_trie_size in % the sources), but we don't need that much. The value here suffices % for all known free hyphenation patterns to be loaded simultaneously % (as TeX Live does). % trie_size = 1000000 hyph_size = 8191 % prime number of hyphenation exceptions, >610, <32767.
% http://primes.utm.edu/curios/page.php/8191.html
nest_size = 500 % simultaneous semantic levels (e.g., groups)
max_in_open = 15 % simultaneous input files and error insertions,
% also applies to MetaPost
param_size = 10000 % simultaneous macro parameters, also applies to MP
save_size = 50000 % for saving values outside current group
stack_size = 5000 % simultaneous input sources% These are Omega-specific.
ocp_buf_size = 500000 % character buffers for ocp filters.
ocp_stack_size = 10000 % stacks for ocp computations.
ocp_list_size = 1000 % control for multiple ocps.% These work best if they are the same as the I/O buffer size, but it
% doesn't matter much. Must be a multiple of 8.
dvi_buf_size = 16384 % TeX
gf_buf_size = 16384 % MF% It's probably inadvisable to change these. At any rate, we must have:
% 45 < error_line < 255; % 30 < half_error_line < error_line - 15; % 60 <= max_print_line; % These apply to TeX, Metafont, and MetaPost. error_line = 79 half_error_line = 50 max_print_line = 79 % Metafont only. screen_width.mf = 1664 screen_depth.mf = 1200 % BibTeX only (max_strings also determines hash_size and hash_prime). ent_str_size = 250 glob_str_size = 5000 max_strings.bibtex = 35307 max_strings.bibtex8 = 35307 max_strings.bibtexu = 35307 max_strings.pbibtex = 35307 % GFtype only. line_length.gftype = 500 max_rows.gftype = 8191 max_cols.gftype = 8191 ` per i motivi che ha spiegato. Bene. Poi un anno fa si disse di aprire con i privilegi di amministratore il file texmf.cnf con un comando del tipo sudo gedit texmf.cnf dopo essersi portati nella cartella 2011 (al posto di gedit va bene un editor di testo qualunque) e di aggiungere in calce a ciò che vi si trova scritto, nel mio caso (controllato un minuto fa) ` % (Public domain.) % This texmf.cnf file should contain only your personal changes from the % original texmf.cnf (for example, as chosen in the installer). % % That is, if you need to make changes to texmf.cnf, put your custom % settings in this file, which is .../texlive/YYYY/texmf.cnf, rather than % the distributed file (which is .../texlive/YYYY/texmf/web2c/texmf.cnf). % And include *only* your changed values, not a copy of the whole thing! % TEXMFHOME = ~/Library/texmf TEXMFVAR = ~/Library/texlive/2011/texmf-var TEXMFCONFIG = ~/Library/texlive/2011/texmf-config ` le righe ` extra_mem_top = 2000000 extra_mem_bot = 4000000 ` Poi si salva e si chiude. Il fatto è che io non riesco ad aprire quel file da terminale, perché mi si dice che il comando non è conosciuto, qualunque editor io usi. Posso aprirlo con TextEdit e copiarci le due righe, ma poi non mi si salva perché non ho i privilegi di amministratore. Come si fa? Ciao Tommaso -
15 Maggio 2012 alle 14:52 #72762
-
15 Maggio 2012 alle 15:04 #72763
-
15 Maggio 2012 alle 15:53 #72764::
illinguista1972″ post=72895
Scusate la domanda stupida, ma sul mio Mac non riesco a raggiungere via mouse questo percorso:
`/usr/local/texlive/2011/`
Come faccio?In alternativa, mi basterebbe sapere, una volta portatomi sul terminale in
cd /usr/local/texlive/2011/
come aprire con TextEdit (giusto?) il file texmf.cnf.
Di sicuro, preferivo evitare di modificare manualmente i file di sistema…
Scusate l’intromissione, ma non credo che ci vogliano grandi magie per fare quello che Enrico disse più di un anno fa. Intanto, disse di modificare il file texmf.cnf che sta in
`usr/local/texlive/2011/`
alla quale directory si giunge da terminale con
`cd usr/local/texlive/2011/`
Giusto? Giusto. Non va modificato, invece, l’omonimo file che sta in
`usr/local/texlive/2011/texmf/web2c/`
e il cui contenuto è
`
% original texmf.cnf — runtime path configuration file for kpathsea.
% Public domain.
%
% If you modify this original file, YOUR CHANGES WILL BE LOST when it is
% updated. Instead, put your changes — and only your changes, not an
% entire copy of the full texmf.cnf! — in ../../texmf.cnf. That is, if
% this file is installed in /some/path/to/texlive/2011/texmf/web2c/texmf.cnf,
% add your custom settings to /some/path/to/texlive/2011/texmf.cnf.
%
% What follows is a super-summary of what this .cnf file can
% contain. Please read the Kpathsea manual for more information.
%
% Any identifier (sticking to A-Za-z_ for names is safest) can be assigned.
% The `=' (and surrounding spaces) is optional.
% $foo (or ${foo}) in a value expands to the envvar or cnf value of foo.
% Long lines can be continued with a \.
%
% Earlier entries (in the same or another file) override later ones, and
% an environment variable foo overrides any texmf.cnf definition of foo.
%
% All definitions are read before anything is expanded, so you can use
% variables before they are defined.
%
% If a variable assignment is qualified with `.PROGRAM', it is ignored
% unless the current executable (last filename component of argv[0]) is
% named PROGRAM. This foo.PROGRAM construct is not recognized on the
% right-hand side. For environment variables, use FOO_PROGRAM.
%
% Which file formats use which paths for searches is described in the
% various programs' and the Kpathsea documentation (http://tug.org/kpathsea).
%
% // means to search subdirectories (recursively).
% A leading !! means to look only in the ls-R db, never on the disk.
% In this file, either ; or : can be used to separate path components.
% A leading/trailing/doubled path separator in the paths will be
% expanded into the compile-time default. Probably not what you want.
%
% Brace notation is supported, for example: /usr/local/{mytex,othertex}
% expands to /usr/local/mytex:/usr/local/othertex. We make extensive
% use of this.% Part 1: Search paths and directories.
% This is the parent directory of our several trees, i.e.,
% /usr/local/texlive/YYYY in the original TeX Live distribution.
%
% All trees must be organized according to the TeX Directory Structure
% (http://tug.org/tds), or files may not be found.
%
% Redistributors will probably want $SELFAUTODIR/share, i.e., /usr/share.
TEXMFROOT = $SELFAUTOPARENT% The tree containing runtime files related to the specific
% distribution and version.
TEXMFMAIN = $TEXMFROOT/texmf% The main tree of packages, distribution-agnostic:
TEXMFDIST = $TEXMFROOT/texmf-dist% Local additions to the distribution trees.
TEXMFLOCAL = $TEXMFROOT/../texmf-local% TEXMFSYSVAR, where *-sys store cached runtime data.
TEXMFSYSVAR = $TEXMFROOT/texmf-var% TEXMFSYSCONFIG, where *-sys store configuration data.
TEXMFSYSCONFIG = $TEXMFROOT/texmf-config% Per-user texmf tree(s) — organized per the TDS, as usual. To define
% more than one per-user tree, set this to a list of directories in
% braces, as described above. (This used to be HOMETEXMF.) ~ expands
% to %USERPROFILE% on Windows, $HOME otherwise.
TEXMFHOME = ~/texmf% TEXMFVAR, where texconfig/updmap/fmtutil store cached runtime data.
TEXMFVAR = ~/.texlive2011/texmf-var% TEXMFCONFIG, where texconfig/updmap/fmtutil store configuration data.
TEXMFCONFIG = ~/.texlive2011/texmf-config% List all the texmf trees.
%
% For texconfig to work properly, TEXMFCONFIG and TEXMFVAR should be named
% explicitly and before all other trees.
%
% TEXMFLOCAL follows TEXMFMAIN (and precedes TEXMFDIST) because the
% files in TEXMFMAIN are tightly coupled with the particular version of
% the distribution, such as configuration files. Overriding them would
% be more likely to cause trouble than help. On the other hand, the
% bulk of packages and fonts are in TEXMFDIST, and locally-installed
% versions should take precedence over those — although it is generally
% a source of confusion to have different versions of a package
% installed, whatever the trees, so try to avoid it.
TEXMF = {$TEXMFCONFIG,$TEXMFVAR,$TEXMFHOME,!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}% Where to look for ls-R files. There need not be an ls-R in the
% directories in this path, but if there is one, Kpathsea will use it.
% By default, this is only the !! elements of TEXMF, so that mktexlsr
% does not create ls-R files in the non-!! elements — because if an
% ls-R is present, it will be used, and the disk will not be searched.
% This is arguably a bug in kpathsea.
TEXMFDBS = {!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}% The system trees. These are the trees that are shared by all users.
% If a tree appears in this list, the mktex* scripts will use
% VARTEXFONTS for generated files, if the original tree isn't writable;
% otherwise the current working directory is used.
SYSTEXMF = $TEXMFSYSVAR;$TEXMFMAIN;$TEXMFLOCAL;$TEXMFDIST% Where generated fonts may be written. This tree is used when the sources
% were found in a system tree and either that tree wasn't writable, or the
% varfonts feature was enabled in MT_FEATURES in mktex.cnf.
VARTEXFONTS = $TEXMFVAR/fonts% On some systems, there will be a system tree which contains all the font
% files that may be created as well as the formats. For example
% TEXMFVAR = /var/lib/texmf
% is used in many distros. In this case, set VARTEXFONTS like this
%VARTEXFONTS = $TEXMFVAR/fonts
% and do not mention it in TEXMFDBS (but _do_ mention TEXMFVAR).
%
% Remove $VARTEXFONTS from TEXMFDBS if the VARTEXFONTS directory is below
% one of the TEXMF directories (avoids overlapping ls-R files).%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Usually you will not need to edit any of the following variables.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% WEB2C is for Web2C specific files. The current directory may not be
% a good place to look for them.
WEB2C = $TEXMF/web2c% TEXINPUTS is for TeX input files — i.e., anything to be found by \input
% or \openin, including .sty, .eps, etc. We specify paths for all known
% formats, past or present. Not all of them are built these days.% Plain TeX. Have the command tex check all directories as a last
% resort, we may have plain-compatible stuff anywhere.
TEXINPUTS.tex = .;$TEXMF/tex/{plain,generic,}//% Fontinst needs to read afm files.
TEXINPUTS.fontinst = .;$TEXMF/{tex,fonts/afm}//% Other plain-based formats.
TEXINPUTS.amstex = .;$TEXMF/tex/{amstex,plain,generic,}//
TEXINPUTS.csplain = .;$TEXMF/tex/{csplain,plain,generic,}//
TEXINPUTS.eplain = .;$TEXMF/tex/{eplain,plain,generic,}//
TEXINPUTS.ftex = .;$TEXMF/tex/{formate,plain,generic,}//
TEXINPUTS.mex = .;$TEXMF/tex/{mex,plain,generic,}//
TEXINPUTS.texinfo = .;$TEXMF/tex/{texinfo,plain,generic,}//% LaTeX 2e specific macros are stored in latex/, macros that can only be
% used with 2.09 in latex209/. In addition, we look in the directory
% latex209, useful for macros that were written for 2.09 and do not
% mention 2e at all, but can be used with 2e.
TEXINPUTS.cslatex = .;$TEXMF/tex/{cslatex,csplain,latex,generic,}//
TEXINPUTS.latex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.latex209 = .;$TEXMF/tex/{latex209,generic,latex,}//
TEXINPUTS.olatex = .;$TEXMF/tex/{latex,generic,}//% MLTeX.
TEXINPUTS.frlatex = .;$TEXMF/tex/{french,latex,generic,}//
TEXINPUTS.frtex = .;$TEXMF/tex/{french,plain,generic,}//
TEXINPUTS.mllatex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.mltex = .;$TEXMF/tex/{plain,generic,}//% e-TeX.
TEXINPUTS.elatex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.etex = .;$TEXMF/tex/{plain,generic,}//% pdfTeX.
TEXINPUTS.pdfcslatex = .;$TEXMF/tex/{cslatex,csplain,latex,generic,}//
TEXINPUTS.pdfcsplain = .;$TEXMF/tex/{csplain,plain,generic,}//
TEXINPUTS.pdflatex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.pdfmex = .;$TEXMF/tex/{mex,plain,generic,}//
TEXINPUTS.utf8mex = .;$TEXMF/tex/{mex,plain,generic,}//
TEXINPUTS.pdftex = .;$TEXMF/tex/{plain,generic,}//
TEXINPUTS.pdftexinfo = .;$TEXMF/tex/{texinfo,plain,generic,}//
TEXINPUTS.pdfamstex = .;$TEXMF/tex/{amstex,plain,generic,}//% pdfeTeX.
TEXINPUTS.pdfelatex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.pdfetex = .;$TEXMF/tex/{plain,generic,}//% pdfxTeX.
TEXINPUTS.pdfxlatex = .;$TEXMF/tex/{latex,generic,}//
TEXINPUTS.pdfxmex = .;$TEXMF/tex/{mex,plain,generic,}//
TEXINPUTS.pdfxtex = .;$TEXMF/tex/{plain,generic,}//% LuaTeX.
TEXINPUTS.lualatex = .;$TEXMF/tex/{lualatex,latex,luatex,generic,}//
TEXINPUTS.luatex = .;$TEXMF/tex/{luatex,plain,generic,}//
TEXINPUTS.dvilualatex = .;$TEXMF/tex/{lualatex,latex,luatex,generic,}//
TEXINPUTS.dviluatex = .;$TEXMF/tex/{luatex,plain,generic,}//% XeTeX.
TEXINPUTS.xelatex = .;$TEXMF/tex/{xelatex,latex,xetex,generic,}//
TEXINPUTS.xeplain = .;$TEXMF/tex/{xeplain,eplain,plain,xetex,generic,}//
TEXINPUTS.xetex = .;$TEXMF/tex/{xetex,plain,generic,}//% Omega / Aleph.
TEXINPUTS.aleph = .;$TEXMF/tex/{plain,generic,}//
TEXINPUTS.elambda = .;$TEXMF/tex/{lambda,latex,generic,}//
TEXINPUTS.eomega = .;$TEXMF/tex/{plain,generic,}//
TEXINPUTS.lambda = .;$TEXMF/tex/{lambda,latex,generic,}//
TEXINPUTS.lamed = .;$TEXMF/tex/{lamed,lambda,latex,generic,}//
TEXINPUTS.omega = .;$TEXMF/tex/{plain,generic,}//% p(La)TeX.
TEXINPUTS.ptex = .;$TEXMF/tex/{ptex,plain,generic,}//
TEXINPUTS.platex = .;$TEXMF/tex/{platex,latex,generic,}//% epTeX, and for pmpost.
TEXINPUTS.eptex = .;$TEXMF/tex/{ptex,plain,generic,}//
TEX.pmpost = eptex% (e)up(La)TeX.
TEXINPUTS.uplatex = .;$TEXMF/tex/{uplatex,platex,latex,generic,}//
TEXINPUTS.uptex = .;$TEXMF/tex/{uptex,ptex,plain,generic,}//
TEXINPUTS.euptex = .;$TEXMF/tex/{uptex,ptex,plain,generic}//% pBibTeX bibliographies and style files.
BIBINPUTS.pbibtex = .;$TEXMF/{pbibtex,bibtex}/bib//
BSTINPUTS.pbibtex = .;$TEXMF/{pbibtex,bibtex}/bst//% ConTeXt.
TEXINPUTS.context = .;$TEXMF/tex/{context,plain,generic}//% jadetex.
TEXINPUTS.jadetex = .;$TEXMF/tex/{jadetex,latex,generic,}//
TEXINPUTS.pdfjadetex = .;$TEXMF/tex/{jadetex,latex,generic,}//% XMLTeX.
TEXINPUTS.xmltex = .;$TEXMF/tex/{xmltex,latex,generic,}//
TEXINPUTS.pdfxmltex = .;$TEXMF/tex/{xmltex,latex,generic,}//% Miscellany, no longer built.
TEXINPUTS.lamstex = .;$TEXMF/tex/{lamstex,plain,generic,}//
TEXINPUTS.lollipop = .;$TEXMF/tex/{lollipop,plain,generic,}//
TEXINPUTS.frpdflatex = .;$TEXMF/tex/{french,latex,generic,}//
TEXINPUTS.frpdftex = .;$TEXMF/tex/{french,plain,generic,}//% Earlier entries override later ones, so put this generic one last.
TEXINPUTS = .;$TEXMF/tex/{$progname,generic,}//% ttf2tfm.
TTF2TFMINPUTS = .;$TEXMF/ttf2pk//% Metafont, MetaPost inputs.
MFINPUTS = .;$TEXMF/metafont//;{$TEXMF/fonts,$VARTEXFONTS}/source//
MPINPUTS = .;$TEXMF/metapost//% Dump files (fmt/base/mem) for vir{tex,mf,mp} to read.
% We want to find the engine-specific file, e.g., cont-en.fmt can
% exist under both pdftex/ and xetex/. But just in case some formats
% end up without an engine directory, look directly in web2c/ too.
% We repeat the same definition three times because of the way fmtutil
% is implemented; if we use ${TEXFORMATS}, the mpost/mf/etc. formats
% will not be found.
TEXFORMATS = .;$TEXMF/web2c{/$engine,}
MFBASES = .;$TEXMF/web2c{/$engine,}
MPMEMS = .;$TEXMF/web2c{/$engine,}
%
% As of 2008, pool files don't exist any more (the strings are compiled
% into the binaries), but just in case something expects to find these:
TEXPOOL = .;$TEXMF/web2c
MFPOOL = ${TEXPOOL}
MPPOOL = ${TEXPOOL}% support the original xdvi. Must come before the generic settings.
PKFONTS.XDvi = .;$TEXMF/%s;$VARTEXFONTS/pk/{%m,modeless}//
VFFONTS.XDvi = .;$TEXMF/%s
PSHEADERS.XDvi = .;$TEXMF/%q{dvips,fonts/type1}//
TEXPICTS.XDvi = .;$TEXMF/%q{dvips,tex}//% Device-independent font metric files.
VFFONTS = .;$TEXMF/fonts/vf//
TFMFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/tfm//% The $MAKETEX_MODE below means the drivers will not use a cx font when
% the mode is ricoh. If no mode is explicitly specified, kpse_prog_init
% sets MAKETEX_MODE to /, so all subdirectories are searched. See the manual.
% The modeless part guarantees that bitmaps for PostScript fonts are found.
PKFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/pk/{$MAKETEX_MODE,modeless}//% Similarly for the GF format, which only remains in existence because
% Metafont outputs it (and MF isn't going to change).
GFFONTS = .;$TEXMF/fonts/gf/$MAKETEX_MODE//% A backup for PKFONTS and GFFONTS. Not used for anything.
GLYPHFONTS = .;$TEXMF/fonts% A place to puth everything that doesn't fit the other font categories.
MISCFONTS = .;$TEXMF/fonts/misc//% font name map files. This isn't just fonts/map// because ConTeXt
% wants support for having files with the same name in the different
% subdirs. Maybe if the programs ever get unified to accepting the same
% map file syntax the definition can be simplified again.
TEXFONTMAPS = .;$TEXMF/fonts/map/{$progname,pdftex,dvips,}//% BibTeX bibliographies and style files. bibtex8 also uses these.
BIBINPUTS = .;$TEXMF/bibtex/bib//
BSTINPUTS = .;$TEXMF/bibtex/{bst,csf}//% MlBibTeX.
MLBIBINPUTS = .;$TEXMF/bibtex/bib/{mlbib,}//
MLBSTINPUTS = .;$TEXMF/bibtex/{mlbst,bst}//% .ris and .bltxml bibliography formats.
RISINPUTS = .;$TEXMF/bibtex/ris//
BLTXMLINPUTS = .;$TEXMF/bibtex/bltxml//% MFT style files.
MFTINPUTS = .;$TEXMF/mft//% PostScript headers and prologues (.pro); unfortunately, some programs
% also use this for acessing font files (enc, type1, truetype)
TEXPSHEADERS = .;$TEXMF/{dvips,fonts/{enc,type1,type42,type3}}//
TEXPSHEADERS.gsftopk = .;$TEXMF/{dvips,fonts/{enc,type1,type42,type3,truetype}}//% OSFONTDIR is to provide a convenient hook for allowing TeX to find
% fonts installed on the system (outside of TeX). An empty default
% value would add “//” to the search paths, so we give it a dummy value.
OSFONTDIR = /please/set/osfontdir/in/the/environment% PostScript Type 1 outline fonts.
T1FONTS = .;$TEXMF/fonts/type1//;$OSFONTDIR//% PostScript AFM metric files.
AFMFONTS = .;$TEXMF/fonts/afm//;$OSFONTDIR//% TrueType outline fonts.
TTFONTS = .;$TEXMF/fonts/{truetype,opentype}//;$OSFONTDIR//% OpenType outline fonts.
OPENTYPEFONTS = .;$TEXMF/fonts/{opentype,truetype}//;$OSFONTDIR//% Type 42 outline fonts.
T42FONTS = .;$TEXMF/fonts/type42//% Ligature definition files.
LIGFONTS = .;$TEXMF/fonts/lig//% Dvips' config.* files (this name should not start with `TEX'!).
TEXCONFIG = $TEXMF/dvips//% Makeindex style (.ist) files.
INDEXSTYLE = .;$TEXMF/makeindex//% Font encoding files (.enc).
ENCFONTS = .;$TEXMF/fonts/enc//% CMap files.
CMAPFONTS = .;$TEXMF/fonts/cmap//% Subfont definition files.
SFDFONTS = .;$TEXMF/fonts/sfd//% OpenType feature files (.fea).
FONTFEATURES=.;$TEXMF/fonts/fea//% .cid and .cidmap
FONTCIDMAPS=.;$TEXMF/fonts/cid//% pdftex config files:
PDFTEXCONFIG = .;$TEXMF/pdftex/{$progname,}//% Used by DMP (ditroff-to-mpx), called by makempx -troff.
TRFONTS = /usr{/local,}/share/groff/{current/font,site-font}/devps
MPSUPPORT = .;$TEXMF/metapost/support% For xdvi to find mime.types and .mailcap, if they do not exist in
% ~. These are single directories, not paths.
% (But the default mime.types, at least, may well suffice.)
MIMELIBDIR = $TEXMFROOT/etc
MAILCAPLIBDIR = $TEXMFROOT/etc% Default settings for the fontconfig library as used by the Windows
% versions of xetex/xdvipdfmx. On Unixish systems, fontconfig ignores
% this. ConTeXT MkIV (all platforms) also use these values.
%
FONTCONFIG_FILE = fonts.conf
FONTCONFIG_PATH = $TEXMFSYSVAR/fonts/conf
FC_CACHEDIR = $TEXMFSYSVAR/fonts/cache% TeX documentation and source files, for use with texdoc and kpsewhich.
TEXDOCS = $TEXMF/doc//
TEXSOURCES = .;$TEXMF/source//% Web and CWeb input paths.
WEBINPUTS = .;$TEXMF/web//
CWEBINPUTS = .;$TEXMF/cweb//% Omega-related fonts and other files.
OFMFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/{ofm,tfm}//
OPLFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/opl//
OVFFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/{ovf,vf}//
OVPFONTS = .;{$TEXMF/fonts,$VARTEXFONTS}/ovp//
OTPINPUTS = .;$TEXMF/omega/otp//
OCPINPUTS = .;$TEXMF/omega/ocp//% Some additional input variables for several programs. If you add
% a program that uses the `other text files' or `other binary files'
% search formats, you'll want to add their variables here as well.
T4HTINPUTS = .;$TEXMF/tex4ht//%% t4ht utility, sharing files with TeX4ht
TEX4HTFONTSET=alias,iso8859,unicode
TEX4HTINPUTS = .;$TEXMF/tex4ht/base//;$TEXMF/tex4ht/ht-fonts/{$TEX4HTFONTSET}//% TeXworks editor configuration and settings
TW_LIBPATH = $TEXMFCONFIG/texworks
TW_INIPATH = $TW_LIBPATH% For security, do not look in . for dvipdfmx.cfg, since the D option
% would allow command execution.
DVIPDFMXINPUTS = $TEXMF/dvipdfmx% Lua needs to look in TEXINPUTS for lua scripts distributed with packages.
%
% But we can't simply use $TEXINPUTS, since then if TEXINPUTS is set in
% the environment with a colon, say, TEXINPUTS=/some/dir:, the intended
% default expansion of TEXINPUTS will not happen and .lua files under
% the /tex/ will not be found.
%
% So, duplicate the TEXINPUTS.*lualatex values as LUAINPUTS.*lualatex.
% The default LUAINPUTS sufficess for luatex and dviluatex.
%
LUAINPUTS.lualatex = .;$TEXMF/scripts/{$progname,$engine,}/{lua,}//;$TEXMF/tex/{lualatex,latex,luatex,generic,}//
LUAINPUTS.dvilualatex = .;$TEXMF/scripts/{$progname,$engine,}/{lua,}//;$TEXMF/tex/{lualatex,latex,luatex,generic,}//
LUAINPUTS = .;$TEXMF/scripts/{$progname,$engine,}/{lua,}//;$TEXMF/tex/{luatex,plain,generic,}//% Lua needs to look for binary lua libraries distributed with packages.
CLUAINPUTS = .;$SELFAUTOLOC/lib/{$progname,$engine,}/lua//% Architecture independent executables.
TEXMFSCRIPTS = $TEXMF/scripts/{$progname,$engine,}//% Other languages.
JAVAINPUTS = .;$TEXMF/scripts/{$progname,$engine,}/java//
PERLINPUTS = .;$TEXMF/scripts/{$progname,$engine,}/perl//
PYTHONINPUTS = .;$TEXMF/scripts/{$progname,$engine,}/python//
RUBYINPUTS = .;$TEXMF/scripts/{$progname,$engine,}/ruby//%% The mktex* scripts rely on KPSE_DOT. Do not set it in the environment.
% KPSE_DOT = .% This definition isn't used from this .cnf file itself (that would be
% paradoxical), but the compile-time default in paths.h is built from it.
% The SELFAUTO* variables are set automatically from the location of
% argv[0], in kpse_set_program_name.
%
% This main texmf.cnf file is installed, for a release YYYY, in a
% directory such as /usr/local/texlive/YYYY/texmf/web2c/texmf.cnf.
% Since this file is subject to future updates, the TeX Live installer
% or human administrator may also create a file
% /usr/local/texlive/YYYY/texmf.cnf; any settings in this latter file
% will take precedence over the distributed one under texmf/web2c.
%
% For security reasons, it is better not to include . in this path.
%
TEXMFCNF = {$SELFAUTOLOC,$SELFAUTODIR,$SELFAUTOPARENT}{,{/share,}/texmf{-local,}/web2c}% kpathsea 3.5.3 and later sets these at runtime. To avoid empty
% expansions from binaries linked against an earlier version of the
% library, we set $progname and $engine to something non-empty:
progname = unsetprogname
engine = unsetengine% Part 2: Options.
% If this option is set to true, `tex a.b' will look first for a.b.tex
% (within each path element), and then for a.b, i.e., we try standard
% extensions first. If this is false, we first look for a.b and then
% a.b.tex, i.e., we try the name as-is first.
%
% Both names are always tried; the difference is the order in which they
% are tried. The setting applies to all searches, not just .tex.
%
% This setting only affects names being looked up which *already* have
% an extension. A name without an extension (e.g., `tex story') will
% always have an extension added first.
%
% The default is true, because we already avoid adding the standard
% extension(s) in the usual cases. E.g., babel.sty will only look for
% babel.sty, not babel.sty.tex, regardless of this setting.
try_std_extension_first = t% Enable system commands via \write18{…}. When enabled fully (set to
% t), obviously insecure. When enabled partially (set to p), only the
% commands listed in shell_escape_commands are allowed. Although this
% is not fully secure either, it is much better, and so useful that we
% enable it for everything but bare tex.
shell_escape = p% No spaces in this command list.
%
% The programs listed here are as safe as any we know: they either do
% not write any output files, respect openout_any, or have hard-coded
% restrictions similar or higher to openout_any=p. They also have no
% features to invoke arbitrary other programs, and no known exploitable
% bugs. All to the best of our knowledge. They also have practical use
% for being called from TeX.
%
shell_escape_commands = \
bibtex,bibtex8,\
kpsewhich,\
makeindex,\
repstopdf,\% we'd like to allow:
% dvips – but external commands can be executed, need at least -R1.
% epspdf, ps2pdf, pstopdf – need to respect openout_any,
% and gs -dSAFER must be used and check for shell injection with filenames.
% (img)convert (ImageMagick) – delegates.mgk possible misconfig, besides,
% without Unix convert it hardly seems worth it, and Windows convert
% is something completely different that destroys filesystems, so skip.
% pygmentize – but is the filter feature insecure?
% ps4pdf – but it calls an unrestricted latex.
% rpdfcrop – maybe ok, but let's get experience with repstopdf first.
% texindy,xindy – but is the module feature insecure?
% ulqda – but requires optional SHA1.pm, so why bother.
% tex, latex, etc. – need to forbid –shell-escape, and inherit openout_any.% plain TeX should remain unenhanced.
shell_escape.tex = f
shell_escape.initex = f% This is used by the Windows script wrapper for restricting searching
% for the purportedly safe shell_escape_commands above to system
% directories.
TEXMF_RESTRICTED_SCRIPTS = \
{!!$TEXMFMAIN,!!$TEXMFLOCAL,!!$TEXMFDIST}/scripts/{$progname,$engine,}//% Allow TeX \openin, \openout, or \input on filenames starting with `.'
% (e.g., .rhosts) or outside the current tree (e.g., /etc/passwd)?
% a (any) : any file can be opened.
% r (restricted) : disallow opening “dotfiles”.
% p (paranoid) : as `r' and disallow going to parent directories, and
% restrict absolute paths to be under $TEXMFOUTPUT.
openout_any = p
openin_any = a% Write .log/.dvi/etc. files here, if the current directory is unwritable.
%TEXMFOUTPUT = /tmp% If a dynamic file creation fails, log the command to this file, in
% either the current directory or TEXMFOUTPUT. Set to the
% empty string or 0 to avoid logging.
MISSFONT_LOG = missfont.log% Set to a colon-separated list of words specifying warnings to suppress.
% To suppress everything, use TEX_HUSH = all; this is currently equivalent to
% TEX_HUSH = checksum:lostchar:readable:special
% To suppress nothing, use TEX_HUSH = none or do not set the variable at all.
TEX_HUSH = none% Allow TeX, and MF to parse the first line of an input file for
% the %&format construct.
parse_first_line = t% But don't parse the first line if invoked as “tex”, since we want that
% to remain Knuth-compatible. The src_specials and
% file_line_error_style settings, as well as the options -enctex,
% -mltex, -8bit, etc., also affect this, but they are all off by default.
parse_first_line.tex = f
parse_first_line.initex = f% Control file:line:error style messages.
file_line_error_style = f% Enable the mktex… scripts by default? These must be set to 0 or 1.
% Particular programs can and do override these settings, for example
% dvips's -M option. Your first chance to specify whether the scripts
% are invoked by default is at configure time.
%
% These values are ignored if the script names are changed; e.g., if you
% set DVIPSMAKEPK to `foo', what counts is the value of the environment
% variable/config value `FOO', not the `MKTEXPK' value.
%
%MKTEXTEX = 0
%MKTEXPK = 0
%MKTEXMF = 0
%MKTEXTFM = 0
%MKTEXFMT = 0
%MKOCP = 0
%MKOFM = 0% Used by makempx to run TeX. We use “etex” because MetaPost is
% expecting DVI, and not “tex” because we want first line parsing.
TEX = etex% These variables specify the external program called for the
% interactive `e' option. %d is replaced by the line number and %s by
% the current filename. The default is specified at compile-time, and
% we let that stay in place since different platforms like different values.
%TEXEDIT = vi +%d '%s' % default for Unix
%TEXEDIT = texworks –position=+%d “%s” % default for Windows
%MFEDIT = ${TEXEDIT}
%MPEDIT = ${TEXEDIT}% The default `codepage and sort order' file for BibTeX8, when none is
% given as command line option or environment variable.
BIBTEX_CSFILE = 88591lat.csf% This variable is specific to Windows. It must be set to 0 or 1. The
% default is 0. Setting it to 1 tells the Windows script wrappers to
% use an already installed Perl interpreter if one is found on the
% search path, in preference to the Perl shipped with TeX Live. Thus,
% it may be useful if you both (a) installed a full Perl distribution
% for general use, and (b) need to run Perl programs from TL that use
% additional modules we don't provide. The TL Perl does provide all the
% standard Perl modules.
%
%TEXLIVE_WINDOWS_TRY_EXTERNAL_PERL = 0% Part 3: Array and other sizes for TeX (and Metafont).
%
% If you want to change some of these sizes only for a certain TeX
% variant, the usual dot notation works, e.g.,
% main_memory.hugetex = 20000000
%
% If a change here appears to be ignored, try redumping the format file.% Memory. Must be less than 8,000,000 total.
%
% main_memory is relevant only to initex, extra_mem_* only to non-ini.
% Thus, have to redump the .fmt file after changing main_memory; to add
% to existing fmt files, increase extra_mem_*. (To get an idea of how
% much, try \tracingstats=2 in your TeX source file;
% web2c/tests/memtest.tex might also be interesting.)
%
% To increase space for boxes (as might be needed by, e.g., PiCTeX),
% increase extra_mem_bot.
%
% For some xy-pic samples, you may need as much as 700000 words of memory.
% For the vast majority of documents, 60000 or less will do.
%
main_memory = 3000000 % words of inimemory available; also applies to inimf&mp
extra_mem_top = 0 % extra high memory for chars, tokens, etc.
extra_mem_bot = 0 % extra low memory for boxes, glue, breakpoints, etc.% ConTeXt needs lots of memory.
extra_mem_top.context = 2000000
extra_mem_bot.context = 4000000% Words of font info for TeX (total size of all TFM files, approximately).
% Must be >= 20000 and <= 147483647 (without tex.ch changes). font_mem_size = 3000000 % Total number of fonts. Must be >= 50 and <= 9000 (without tex.ch changes). font_max = 9000 % Extra space for the hash table of control sequences. hash_extra = 200000 % Max number of characters in all strings, including all error messages, % help texts, font names, control sequences. These values apply to TeX. pool_size = 3250000 % Minimum pool space after TeX's own strings; must be at least % 25000 less than pool_size, but doesn't need to be nearly that large. string_vacancies = 90000 % Maximum number of strings. max_strings = 500000 % min pool space left after loading .fmt pool_free = 47500 % Buffer size. TeX uses the buffer to contain input lines, but macro % expansion works by writing material into the buffer and reparsing the % line. As a consequence, certain constructs require the buffer to be % very large, even though most documents can be handled with a small value. buf_size = 200000 % Hyphenation trie. The maximum possible is 4194303 (ssup_trie_size in % the sources), but we don't need that much. The value here suffices % for all known free hyphenation patterns to be loaded simultaneously % (as TeX Live does). % trie_size = 1000000 hyph_size = 8191 % prime number of hyphenation exceptions, >610, <32767.
% http://primes.utm.edu/curios/page.php/8191.html
nest_size = 500 % simultaneous semantic levels (e.g., groups)
max_in_open = 15 % simultaneous input files and error insertions,
% also applies to MetaPost
param_size = 10000 % simultaneous macro parameters, also applies to MP
save_size = 50000 % for saving values outside current group
stack_size = 5000 % simultaneous input sources% These are Omega-specific.
ocp_buf_size = 500000 % character buffers for ocp filters.
ocp_stack_size = 10000 % stacks for ocp computations.
ocp_list_size = 1000 % control for multiple ocps.% These work best if they are the same as the I/O buffer size, but it
% doesn't matter much. Must be a multiple of 8.
dvi_buf_size = 16384 % TeX
gf_buf_size = 16384 % MF% It's probably inadvisable to change these. At any rate, we must have:
% 45 < error_line < 255; % 30 < half_error_line < error_line - 15; % 60 <= max_print_line; % These apply to TeX, Metafont, and MetaPost. error_line = 79 half_error_line = 50 max_print_line = 79 % Metafont only. screen_width.mf = 1664 screen_depth.mf = 1200 % BibTeX only (max_strings also determines hash_size and hash_prime). ent_str_size = 250 glob_str_size = 5000 max_strings.bibtex = 35307 max_strings.bibtex8 = 35307 max_strings.bibtexu = 35307 max_strings.pbibtex = 35307 % GFtype only. line_length.gftype = 500 max_rows.gftype = 8191 max_cols.gftype = 8191 ` per i motivi che ha spiegato. Bene. Poi un anno fa si disse di aprire con i privilegi di amministratore il file texmf.cnf con un comando del tipo sudo gedit texmf.cnf dopo essersi portati nella cartella 2011 (al posto di gedit va bene un editor di testo qualunque) e di aggiungere in calce a ciò che vi si trova scritto, nel mio caso (controllato un minuto fa) ` % (Public domain.) % This texmf.cnf file should contain only your personal changes from the % original texmf.cnf (for example, as chosen in the installer). % % That is, if you need to make changes to texmf.cnf, put your custom % settings in this file, which is .../texlive/YYYY/texmf.cnf, rather than % the distributed file (which is .../texlive/YYYY/texmf/web2c/texmf.cnf). % And include *only* your changed values, not a copy of the whole thing! % TEXMFHOME = ~/Library/texmf TEXMFVAR = ~/Library/texlive/2011/texmf-var TEXMFCONFIG = ~/Library/texlive/2011/texmf-config ` le righe ` extra_mem_top = 2000000 extra_mem_bot = 4000000 ` Poi si salva e si chiude. Il fatto è che io non riesco ad aprire quel file da terminale, perché mi si dice che il comando non è conosciuto, qualunque editor io usi. Posso aprirlo con TextEdit e copiarci le due righe, ma poi non mi si salva perché non ho i privilegi di amministratore. Come si fa? Ciao Tommaso[/quote] Tommaso, potresti provare da terminale a cambiare i permessi di lettura e scrittura del file. Ad esempio: ` cd usr/local/texlive/2011/ chmod 777 texmf.cnf ` Dopo puoi tranquillamente aprire il file ed editarlo con un editor qualsiasi e salvare. Se si vuole vedere il file nel finder: ` cd usr/local/texlive/ open -R 2011/ ` vado a memoria, ma dovrebbe essere il comando esatto. Io come editor uso Smultron e mi trovo molto bene. Ciao Claudio -
15 Maggio 2012 alle 16:31 #72765::
Liverpool” post=72897Tommaso, che ne dici di aggiungere [tt]xtick pos=left[/tt] al primo grafico e [tt]ytick pos=left[/tt] al secondo, per rimuovere le tacche sul lato superiore e destro del box?
P.S.: Ma poi l’errore era colpa del file ausiliario?
Ciao Liverpool (non sappiamo il tuo nome 🙂 ) il problema era FORSE nel file ausiliario: ho riscritto completamente il codice e tutto è andato a posto. In verità, avevo fatto copia e incolla dalla mail 🙂
Grazie per le dritte! Descriveremo proprio quelle opzioni da qualche parte! SOno molto utili.
Non ho ancora capito, però, se aumentare la memoria di TeX è davvero dannoso oppure no.
@OldClaudio: se ho capito bene, dovrei creare ex novo un file texmf.cnf con questo contenuto:`
% (Public domain.)
% This texmf.cnf file should contain only your personal changes from the
% original texmf.cnf (for example, as chosen in the installer).
%
% That is, if you need to make changes to texmf.cnf, put your custom
% settings in this file, which is …/texlive/YYYY/texmf.cnf, rather than
% the distributed file (which is …/texlive/YYYY/texmf/web2c/texmf.cnf).
% And include *only* your changed values, not a copy of the whole thing!
%
TEXMFHOME = ~/Library/texmf
TEXMFVAR = ~/Library/texlive/2011/texmf-var
TEXMFCONFIG = ~/Library/texlive/2011/texmf-configextra_mem_top = 2000000
extra_mem_bot = 4000000
`e metterlo nell’albero locale che è
`/usr/local/texlive/texmf-local/`
Giusto? Giusto. Ma posso semplicemente copiarlo lì dentro e basta? Vorrei sapere se si fanno danni e se i valori sono corretti. Poi non rompo più 🙂
Ciao
Tommaso
-
15 Maggio 2012 alle 20:00 #72766::
Secondo il manuale di TeX Live, a pagina 15 si descrivono gli alberi rappresentati dalle variabili d’ambiente TEXMFLOCAL (che sul Mac corrisponde a /usr/local/texlive/texmf-local/) e TEXMFHOME (che sul Mac corrsiponde a ~/Library/texmf/ cioè, espandendo la tilde, /Users//Library/texmf/) Secondo lo stesso manuale, nel §7.1.2 si descrive esplicitamente il file texmf.cnf e si dice che se uno deve apporare modifiche dovrebbe intervenire solo sulla copia che si trova in…/texlive/
/, cioè sul Mac e con la versione di quest’anno in /usr/local/texlive/2011/ Non parla affato di un file texmf.cnf nell’albero TEXMFLOCAL, quindi la mia supposizione era sbagliata. Conviene però leggere il §7.1.2 a fondo. Io ho avuto spesso la tentazione di aumentare la memoria, ma ho sempre trovato do’era l’inghippo che me la saturava; vorrei che fosse chiaro che :
1) non so a che cosa corrispondano i due limiti rappresentati dalle variabili extra-mem_bot e extra_mem_top; le appendici dei nomi farebbero supporre ad un limite minimo e a un limite massimo, ma non ho mai visto un limite minimo maggiore di un limite massimo; quindi evidentemente non sono quello che il nome lascerebbe supporre.
2) la main memory è di 3 000 000 di parole; ciascuna parola è di 4 byte; dunque la main memory è di 12 MB; a me pare una quantità enorme, e tutte le volte che guardo l’ultima dozzina di righe dei file log, vedo che si tratta di un limite lontano dall’essere raggiunto in condizioni normali. Perché pgfplots non dovrebbe comportarsi in maniera normale? Ecco, questo è un problema abbondantemente dibattuto su questo forum e in particolare in questo filone; tutavia continuo a pensare che normalmente vengano usati troppi nodi sia in diagrammi 2D e a maggior ragione in diagrammi 3D. Continuo a pensare che prima di specificare un numero di samples così alto, bisognerebbe pensarci due volte; la curva è regolare e priva di discontinuità? allora le spline cubiche sono il modo per ridurre il numero dei campioni; La corva in realtà rappresenta i campioni di una serie di misure?, allora ha senso riportare lo sciame, ma non la curva, che assomiglierebbe ad un andamento rumoroso leggermente strutturato. I puntini dello sciame andrebbero rappresentati con piccoli glifi, non con cerchietti disegnati mediante circle o cose del genere. I “punti fermi” testuali in corpo tiny sono più che sufficienti; dei quadratini disegnati con un piccolissimo rectangle sono più che sufficienti; bisogna infatti ricordare che anche se i puntini non sono uniti fra di loro, le istruzioni di basso livello che ne definiscono il contorno, il colore, e la posizione, occupano molti byte di memoria; molti quanti?, non lo so; non ho mai fatto esperimenti per determinare il loro ingombro di memoria, ma stimerei che la cosa non impegni meno di una trentina di byte. Mettere su un grafico uno sciame di 100 000 puntini sarebbe ingegneristicamente parlando poco sensato; darebbero solo l’idea della fluttuazione casuale delle misure attorno al loro valore atteso, ma sarebbe carta sprecata.Credo di avere espresso queste idee in una forma o nell’altra diverse volte; lo ripeto come Catone il Censore che continuava a concludere i suoi discorsi con …
Ma non ne parlerò più, non voglio seccarvi con i miei pallini e le mie idee poco condivise; non mi offendo affatto se non le codividete. Voglio solo incitarvi a pensare prima di ricorrere a mezzi drastici.
-
16 Maggio 2012 alle 5:12 #72767::
Sono riuscito a trovare qualche piccola documentazione a proposito delle memorie top e bot; una brevissima frase c’è anche sulla documentazione di TeX Live, ma è detto meglio nel file texmf.cnf di sistema, non quella modificabile:
`
main_memory = 3000000 % words of inimemory available; also applies to inimf&mp
extra_mem_top = 0 % extra high memory for chars, tokens, etc.
extra_mem_bot = 0 % extra low memory for boxes, glue, breakpoints, etc.
`
Il valore di main_memory può essere modificato nella configurazione personale, ma siccome è rilevanto solo per initex (la versione che genera i formati) se lo si cambia bisogna ricreare i formati; gli altri due valori sono specificati nelle righe di commento; quindi si tratta di due aree di memeria distinte e non c’entrano per niente le mis supposizioni sbagliate che fossero dei limit minimo e massimo; se li si modifica nel file di configurazione personale, essi permettono di aggiungere quegli spazi di memoria a quelli accessibili dal formato esistente, quindi non è richiesto di ricreare i formati. Vale la pena di notare che per context essi sono posti a:
`
% ConTeXt needs lots of memory.
extra_mem_top.context = 2000000
extra_mem_bot.context = 4000000
`
e, come si vede, il motivo è che context richiede un mucchio di memoria aggiuntiva.Continuo a pensare che bisogna sempre cercare di scoprire perché sia necessaria tanta memoria e possibilmente trovare il modo di evitarlo: pensare prima di agire…:smile: È vero che con i calcolatori di oggi con parecchi gibibyte di RAM, la memoria non è un problema, però…
-
16 Maggio 2012 alle 7:09 #72768::
OldClaudio” post=72909Sono riuscito a trovare qualche piccola documentazione a proposito delle memorie top e bot; una brevissima frase c’è anche sulla documentazione di TeX Live, ma è detto meglio nel file texmf.cnf di sistema, non quella modificabile:
`
main_memory = 3000000 % words of inimemory available; also applies to inimf&mp
extra_mem_top = 0 % extra high memory for chars, tokens, etc.
extra_mem_bot = 0 % extra low memory for boxes, glue, breakpoints, etc.
`
Il valore di main_memory può essere modificato nella configurazione personale, ma siccome è rilevanto solo per initex (la versione che genera i formati) se lo si cambia bisogna ricreare i formati; gli altri due valori sono specificati nelle righe di commento; quindi si tratta di due aree di memeria distinte e non c’entrano per niente le mis supposizioni sbagliate che fossero dei limit minimo e massimo; se li si modifica nel file di configurazione personale, essi permettono di aggiungere quegli spazi di memoria a quelli accessibili dal formato esistente, quindi non è richiesto di ricreare i formati. Vale la pena di notare che per context essi sono posti a:
`
% ConTeXt needs lots of memory.
extra_mem_top.context = 2000000
extra_mem_bot.context = 4000000
`
e, come si vede, il motivo è che context richiede un mucchio di memoria aggiuntiva.Continuo a pensare che bisogna sempre cercare di scoprire perché sia necessaria tanta memoria e possibilmente trovare il modo di evitarlo: pensare prima di agire…:smile: È vero che con i calcolatori di oggi con parecchi gibibyte di RAM, la memoria non è un problema, però…
È davvero la RAM il problema! Io sul mio Mac ho 8 GiB di RAM. Credo che per 10 figure in 3D di 6.3 cm di lato possano bastare, o no? 🙂 Eppure ricevo ancora l’errore lamentato.
Ciao
TommasoPS: per il momento non ho modificato nulla. Stasera vedo Enrico e vediamo che si può fare.
-
16 Maggio 2012 alle 8:18 #72769::
illinguista1972″ post=72903Ciao Liverpool (non sappiamo il tuo nome 🙂 )
“Nessuno è il mio nome: Nessuno mi chiamano mia madre e mio padre e tutti gli altri compagni”
Scherzi a parte: sai che non ci avevo fatto caso? Comunque il mio nome è Luigi e penso che tu lo dovresti sapere, perché tempo fa ci siamo scambiati delle email 😡
P.S.: però scrivere un intervento solo per dire il proprio nome 😳
-
16 Maggio 2012 alle 8:34 #72770::
Tommaso, la RAM non è completamente disponibile per i programmi degli utenti, ma per una buona metà è occupata dai processi di sistema, dai programmi aperti e mssi da parte cliccando il bottoncino giallo della finestra e per altre cose che non sembrano dare fastidio, ma ci sono eccome.Ma 8GiB è una schioppettata; se anche aumentassi la high memory di 10.000.000 parole, (invece che come 2.000.000, come fa context e come suggerì Enrico) quelli occuperebbero solo 40MiB di memoria; ricorda che 1MiB sono $2^{20}$ byte, mentre 1GiB sono $2^{30}$ byte. 40MiB sono un bicchierino da grappa rispetto alla grandezza della damigiana della tua RAM da 8GiB.
Inoltre il fatto che i tuoi disegni siano di 63mm di larghezza (e, supponiamo, siano quadrati) non vuole dire assolutamente niente per il disegno vettoriale; il disegno vettoriale differisce dalle immagini bitmap, proprio perché la sua occupazione di memoria è sostanzialmente la stessa, indipendentemente dalla dimensione del disegno; una bitmap contiene l’immagine completa già digitalizzata; un disegno vettoriale contiene solo le istruzioni di basso livello per disegnarlo; ci pensa poi il visualizzatore PDF (Anteprima, Skim, Adobe Reader, eccetera) a usare quelle istruzioni per creare l’immagine digitalizzata sullo schermo o sulla carta.
Se ti va in saturazione anche dopo aver allargato la memoria allora potrebbero esserci problemi che mi sfuggono e non riesco ad immaginare, ma potrebbe essere anche un certo calcolo, interno all’aritmetica di pgfplot, che va in loop infinito allocando nuova memoria ad un ciclo (è solo un esempio irreale, perché ciascuno di quei disegni viene eseguito correttamente; è la loro presenza simultanea che da problemi, se ho capito bene).
Certo che un \clearpage dopo ogni disegno, potrebbe risolvere il problema; se fosse così, allora più memoria alta e più memoria bassa potrebbero aiutare a trattenere in memoria più disegni contemporaneamente.
Ciao
Claudio
-
16 Maggio 2012 alle 10:19 #72771::
Liverpool” post=72912
Ciao Liverpool (non sappiamo il tuo nome 🙂 )
“Nessuno è il mio nome: Nessuno mi chiamano mia madre e mio padre e tutti gli altri compagni”
Scherzi a parte: sai che non ci avevo fatto caso? Comunque il mio nome è Luigi e penso che tu lo dovresti sapere, perché tempo fa ci siamo scambiati delle email 😡
P.S.: però scrivere un intervento solo per dire il proprio nome 😳
Ti chiedo scusa, perché hai ragione. Non per altro. 😉
Apprezzo però la citazione dotta! Omero è uno dei miei preferiti.Ciao
Tommaso
-
17 Maggio 2012 alle 6:02 #72772::
Liverpool” post=72897Tommaso, che ne dici di aggiungere [tt]xtick pos=left[/tt] al primo grafico e [tt]ytick pos=left[/tt] al secondo, per rimuovere le tacche sul lato superiore e destro del box?
P.S.: Ma poi l’errore era colpa del file ausiliario?
Ciao Liverpool,
le due opzioni che mi hai proposto in realtà non levano le tacche, ma spostano tutte le etichette a destra o a sinistra 🙂Ciao
Tommaso
-
17 Maggio 2012 alle 6:23 #72773::
illinguista1972″ post=72954le due opzioni che mi hai proposto in realtà non levano le tacche, ma spostano tutte le etichette a destra o a sinistra 🙂
Che ti stia confondendo con [tt]yticklabel pos[/tt]?
Ciao
Edit: forse mi ero spiegato male. [tt]ytick pos[/tt] devi usarlo per rimuovere le tacche sul lato del box in cui non ci sono le etichette. Se il valore è [tt]left[/tt], le tacche si troveranno solo sul lato sinistro insieme alle etichette (e a destra non ci sarà niente); però è chiaro che se il valore è [tt]right[/tt] le tacche si troveranno sul lato destro insieme alle etichette (e a sinistra non ci sarà niente). L’obiettivo era rimuovere quelle inutili tacche “orfane” a destra del box.
-
17 Maggio 2012 alle 8:13 #72774::
Ciao a tutti, seguendo le istruzioni del topic sono riuscito ad aumentare la memoria disponibile per LaTeX. Vorrei sapere, però come aumentarla ancora. In particolare, ho visto che impostare
`extra_mem_top = 2000000
extra_mem_bot = 4000000
`non è stato sufficiente, ma ho dovuto ricorrere a
`extra_mem_top = 2000000
extra_mem_bot = 5000000
`
In particolare, vorrei sapere che significano esattamente quelle righe, e a quanto è consigliabile/possibile aumentare quei valori. Immagino che dipenda da
a) la mole di calcoli e disegni fatti da pgfplots;
b) la RAM installata sulla propria macchina.Questa cosa dovremmo dirla nel nostro articolo, Tommaso. Anche se l’idea che il nostro lettore modifichi i file di sistema di LaTeX non mi va proprio a genio… 🙁
Grazie,
L.
-
17 Maggio 2012 alle 9:19 #72775::
Lorenzo, evidentemente non hai letto il mio ultimo post su questo argomento; le informazioni su queste memeoria alta e bassa sono contenute nelle righe di commento di texmf.cnf quella di sistema in /texmf/web2c/Nella documentazione di TeX Live si accenna appena a queste memorie e rimanda alla documentazione di Kpathsea, ma in questo io non ho trovato niente.
-
17 Maggio 2012 alle 9:52 #72776::
lorenzo.pantieri” post=72968Ciao a tutti, seguendo le istruzioni del topic sono riuscito ad aumentare la memoria disponibile per LaTeX. Vorrei sapere, però come aumentarla ancora. In particolare, ho visto che impostare
`extra_mem_top = 2000000
extra_mem_bot = 4000000
`non è stato sufficiente, ma ho dovuto ricorrere a
`extra_mem_top = 2000000
extra_mem_bot = 5000000
`
In particolare, vorrei sapere che significano esattamente quelle righe, e a quanto è consigliabile/possibile aumentare quei valori. Immagino che dipenda da
a) la mole di calcoli e disegni fatti da pgfplots;
b) la RAM installata sulla propria macchina.Questa cosa dovremmo dirla nel nostro articolo, Tommaso. Anche se l’idea che il nostro lettore modifichi i file di sistema di LaTeX non mi va proprio a genio… 🙁
Grazie,
L.Ciao,
come regola generale direi che con pgfplots debbono essere disegnati i grafici mentre i numeri debbono essere ottenuti con altri strumenti.
Dipende quindi dal lavoro che si vuole fare, ma in genere non dovrebbe essere necessario aumentare la memoria per pgfplots se si segue la regola precedente.
Ciò non toglie che per un buon numero di casi pgfplots potrebbe svolgere anche i conti.
In fondo ci sono due tipi di grafici, quelli matematici derivanti da una funzione matematica e quelli su insiemi numerici come quelli sperimentali. I primi richiedono di comprendere la “complessità” numerica della funzione, i secondi richiedono di capire l’entità della mole dei dati.Insomma, forse è meglio fare di tutto per non dover aumentare la memoria standard. Pgfplots NON è un tool di analisi numerica.
Un saluto.
R.Ps. Sono contento che il nuovo capitolo dell’Arte sulla grafica stia venendo bene.
-
17 Maggio 2012 alle 10:21 #72777::
1.
`main_memory = 3000000 % words of inimemory available; also applies to inimf&mp
extra_mem_top = 0 % extra high memory for chars, tokens, etc.
extra_mem_bot = 0 % extra low memory for boxes, glue, breakpoints, etc.
`
Non capisco bene che cosa siano quella “high memory” e “low memory”, se i due valori siano indipendenti, di quanto sia possibile/consigliabile aumentarle. Due valori possibili sono 2 milioni e 4 milioni; ma andrebbe bene metterle entrambe (poniamo) uguali a 10 milioni? A 100 milioni? La prima a zero e la seconda a 100 milioni? La prima a 100 milioni e la seconda a zero? Insomma, avrei bisogno di informazioni così. E se volessi modificare anche la “main_memory”? Potrebbe essere necessario? Ovviamente, tutto questo è terrificante, mi ricorda gli albori dell’informatica, quando si doveva specificare a mano l’occupazione della memoria per ogni applicazione; oggi queste cose le fa automaticamente l’OS; analogamente, dovrebbe pensarci LaTeX, a prendere la memoria che gli serve! Mi hanno detto che Lua lo fa, ma LaTeX no. 🙁2.
Evitare in ogni modo di aumentare la memoria. Più facile a dirsi che a farsi. Il nostro articolino è di 20 pagine, con qualche decina di grafici ad alta risoluzione. Non abbiamo esagerato: le curve hanno al massimo “samples=100” (in un caso limite abbiamo un “samples=200”), le superfici sono fatte con “samples=30”. Ripeto, non abbiamo esagerato. Eppure, ci siamo ben presto imbattuti in problemi di sforamento della memoria che hanno richiesto la modifica del file di configurazione. In caso contrario, avremmo dovuto rinunciare a qualche figura. E noi possiamo farlo, visto che gli esempi li scegliamo noi! Un laureando che facesse la tesi sulle quadriche non potrebbe certo farlo!3.
Far fare i conti a software esterni e usare pgfplots solo per fare i grafici. Questo è un punto su cui dobbiamo essere chiari, Tommaso. Far fare i grafici direttamente a LaTeX è comodissimo, ma va detto che appoggiarsi a software esterni come Mathematica può essere necessario. Nell’articolo abbiamo fatto l’esempio della Gamma di Eulero e della Zeta di Riemann, ma forse potremmo dire che se le figure sono molte conviene usare un software esterno, produrre un file testuale per ogni grafico e dare il tutto in pasto a pgfplots, sgravando il pacchetto dal compito di fare calcoli. Insomma, la tecnica può essere utile non solo se le funzioni sono “esotiche”.4.
Supponiamo che voglia fare il disegno di una funzione di due variabili, diciamo un paraboloide a sella, facendo fare i conti a Mathematica e il disegno a pgfplots? La procedura è analoga a quella per le curve nel piano?Grazie,
L
-
17 Maggio 2012 alle 12:31 #72778::
C’è un file texmf.cnf anche nella cartella:`usr/local/texlive/2011/texmf-dist/doc/latex/pgfplots/`
almeno su Mac. Potrebbe essere utile per l’ampliamento della memoria?
Ancora: il file che su Mac è
`usr/local/texlive/2011/texmf.cfn`
ha analoghi in Windows e Linux? Domanda sciocca, lo so, ma su Win esiste un file texmf proprio nella cartella 2011 ma è un file di composizione veloce che non riesco ad aprire per vederne il contenuto. (Siccome la domanda è sciocca, accetto anche risposte sciocche 🙂 )
Ciao
Tommaso
-
17 Maggio 2012 alle 12:45 #72779::
lorenzo.pantieri” post=72986ma forse potremmo dire che se le figure sono molte conviene usare un software esterno, produrre un file testuale per ogni grafico e dare il tutto in pasto a pgfplots, sgravando il pacchetto dal compito di fare calcoli. Insomma, la tecnica può essere utile non solo se le funzioni sono “esotiche”.
Come ho detto tempo non molto tempo fa qui a partire dall’intervento #72092, il problema non è (solo) “fare i calcoli”, ma dove memorizzare i valori, perciò non è assolutamente garantito che con un software esterno non si sfori la memoria di base. Nell’intervento #72105 ti ho dimostrato che anche ricorrendo a Mathematica, il problema si può presentare. Ora, volendo indagare, si tratta di vedere effettivamente se, e in caso affermativo, quanto, i semplici calcoli influiscono sullo sforamento. Si potrebbe per esempio fare un confronto tra dati importati e coordinate valutate internamente per vedere se la questione è dovuta semplicemente alla memorizzazione dei valori o anche al loro calcolo, e in tal caso di quanto. Per me è un po’ complicato perché tempo fa ho esteso la memoria a 60 milioni 😮 e ora, anche se la riporto a 3 milioni, non ho capito perché ma MiKTeX me la lascia alta. Insomma: mi ci vorrebbe una giornata per fare un confronto. Se qualcun altro è interessato, può essere interessante…
lorenzo.pantieri” post=72986Supponiamo che voglia fare il disegno di una funzione di due variabili, diciamo un paraboloide a sella, facendo fare i conti a Mathematica e il disegno a pgfplots? La procedura è analoga a quella per le curve nel piano?
Certo che tu e Tommaso, quando vi mettete a studiare un pacchetto… Sai che non ci avevo mai pensato? Comunque si può fare, ma i dati devono essere preparati opportunamente. Inoltre ogni samples righe (se varia prima la x) o samples y righe (se varia prima la y) devi inserire una riga vuota. Ad esempio:
x1 y1 z1
x2 y1 z2
…………………….
xn y1 znx1 y2 z_(n+1)
x2 y2 z_(n+2)
…………………….
xn y2 z_(2n)…………………….
xn yn z_(n^2)oppure facendo variare la y prima della x.
Ciao
-
17 Maggio 2012 alle 14:31 #72780::
main_memory = 3000000 % words of inimemory available; also applies to inimf&mp
extra_mem_top = 0 % extra high memory for chars, tokens, etc.
extra_mem_bot = 0 % extra low memory for boxes, glue, breakpoints, etc.Non capisco bene che cosa siano quella “high memory” e “low memory”, se i due valori siano indipendenti, di quanto sia possibile/consigliabile aumentarle. Due valori possibili sono 2 milioni e 4 milioni; ma andrebbe bene metterle entrambe (poniamo) uguali a 10 milioni? A 100 milioni? La prima a zero e la seconda a 100 milioni? La prima a 100 milioni e la seconda a zero? Insomma, avrei bisogno di informazioni così. E se volessi modificare anche la “main_memory”? Potrebbe essere necessario? Ovviamente, tutto questo è terrificante, mi ricorda gli albori dell’informatica, quando si doveva specificare a mano l’occupazione della memoria per ogni applicazione; oggi queste cose le fa automaticamente l’OS; analogamente, dovrebbe pensarci LaTeX, a prendere la memoria che gli serve! Mi hanno detto che Lua lo fa, ma LaTeX no.
Come vedi è scritto di finaco a ciascun tipo di memoria a che cosa serve; la main memori è un po’ di uso generale e le statistiche alla fine del file log parlano essenzialmente di quella, anche perché la maggior parte degli utenti non ha riservato nulla per le memorie extra alta e/o bassa, quindi è difficile riportare statistiche su qualcosa che non c’è.
Le altre due servono per memorizzare le cose che vi sono scritte nei file di commento. Perché una sia memoria alta e una bassa non lo so e non è molto importante, salvo il fatto informatico di riservare quei pezzi di memoria in aree della memoria reale disponibile ad indirizzi alti piuttosto che bassi; Tutte queste aree di memoria sono stivate nella RAM quando sono in uso, quindi i massimi dipendodono da quanta ram si dispone; 100MiB potrebbero essere troppo in una vecchia macchina con 500MiB di RAM, e un ammontare insignificante in na macchina come quella di Tommaso che ha 8Gib di Ram; ma dipende sempre da quanta ram è impegnata dai programmi e dai dati dei processi residenti e di quanto swap di memoria si è disposti a sopportare; più si scambiano dati fra la RAM e il disco, più lenti sono i processi “più” significa una maggiore quanti dati di dati e uno scambi più frequente.
Con i nostri Mac standard con 4GiB di Ram i numeri che hai proposto non dovrebbero dare problemi; ma se sia meglio aumentare la memoria bassa piuttosto che quella alata dipende dal numero e TIPO di dati da memorizzare. Con pgfplots sembrerebbe che le scatole siano l’oggetto più usato e del quale ci sia maggiore necessità di memoria.
Ricorda quanto ho detto sulla risoluzione delle figure vettoriali; esse sono a risoluzione “infinita”, stiracchiando il significato delle parole, ma non ad occupazione di memoria infinita, anzi. Se volevi dire con un numero alto di campioni, e poi questi campioni sono 100 o 200 (o 900 = 30 \times 30) per quelli bidimensionali, si tratta di numerosità forse leggermente superiori alle reali necessità, ma non riguardano la risoluzione, a meno di non voler stiracchiare anche qui il significato delle parole.
Anche se pgfplots fa cose meravigliose, esso deve sempre fare i conti con una macchina che esegue calcoli con i numeri interi e solo con i numeri interi; quindi ogni operazione con i numeri fratti richiede continue acrobazie che in un modo o nell’altro convertono i numeri fratti in numeri interi, eseguono i calcoli sui numeri interi, poi riconvertono i risultati in numeri fratti.
Lualatex sa fare i conti con il linguaggio lua, quindi non mi meraviglio se il suo modo di fare i conti sia più efficiente.
il motore luatex usa la memoria dinamica in automatico? Ahi, ahi ahi; questo può essere utile se chi usa un programma sa quello che sta facendo; può essere disastroso se succede il contrario. Non è un caso se negli anni ’80 c’erano i fautori di C che allocava memoria dinamicamente e i fautori di FORTRAN, non non faceva uso di allocazione dinamica. Entrambi i gruppi avevano buone frecce ai loro archi; ma sulle macchine piccole, quelle disponibili allora, avevano la meglio i fautori di FORTRAN, perché la RAM disponibile era così piccola che era necessario un controllo preciso dell’occupazione della memoria.
Knuth è stato molto cauto nel definire il programma iniziale scritto per essere compilato con Pascal, che in realtà inizialmente era un preprocessore per far eseguire FORTRAN, quindi l’allocazione dinamica era solo simulata. pdftex, il motore di composizione, fa lo stesso: richede una quantità precisa di memoria al sistema operativo e in quella fa quello che viole, apparentemente allocando la memoria che gli serve, ma in realtà non ne può usare un byte in più di quella allocata inizialmente. Lorenzo, io non sono un informatico, ma gli informatici in rete ti possono spiegare meglio quello che ti ho detto da “orecchiante”. Quello che ti posso dire e che ho cercato di sottilineare in questo fileno, è che bisogna fare di tutto per restare nella memoria disponibile, senza chedere nesuuna allocazione dinamica e possibilmente senza chiedere inizialmente nemmeno una grande allocazione statica come si può fare con oggi con texmf.cnf.
[Tommaso que file che hai trovato si trova nel ramo doc della distribuzione, quindi può forse servire a texdoc per fornire qualche informazione sul suo contenuto, ma non viene mai usato dai programmi né di inizializzazione né di composizione, perché il ramo doc non si trova su nessun percorso di ricerca per i file eseguibili suddetti.]
Ciao
Claudio
-
17 Maggio 2012 alle 15:02 #72781::
Quando è cominciato questo topic non sapevo praticamente nulla di disegno programmato. Ora pgfplots lo conosco abbastanza bene, anche se non benissimo. Mi sento di dire che il difetto principale del pacchetto sta nei problemi di sforamento della memoria che possono presentarsi scrivendo un lavoro di dimensioni anche modeste.Claudio dice che bisognerebbe cercare di evitare di modificare manualmente il file di configurazione, ma, ripeto, non è sempre possibile “economizzare”, soprattutto se si vuole un risultato di alta qualità. Il raggiungimento della più alta qualità tipografica è proprio la ragione principale che giustifica il ricorso al disegno programmato, sbaglio? Se si ricorre al disegno programmato e si fanno grafici scalettati “perché altrimenti LaTeX spalla”, tanto valeva ricorrere a un programma esterno, fare i grafici con la più alta risoluzione disponibile, esportarli in PDF e includerli tutti nel documento finito.
La soluzione al problema c’è: si tratta “solo” di modificare un file di configurazione. In un mondo ideale, ritengo che non dovrebbe accadere: dovrebbe essere il programma a farlo per noi, soprattutto oggi, 2012, in cui un giga di RAM costa poco più di un bicchier d’acqua minerale…
Ciao,
L.
-
17 Maggio 2012 alle 17:17 #72782::
Piccola riflessione personale. Adoro TikZ e lo consiglio a molta gente, ho fatto diversi disegni usando questo pacchetto e sono soddisfatto dei risultati, ma pgfplots mi piace molto poco. Ha capacità di calcolo ridicole, dopo esserti divertito con seno e coseno ti rendi subito conto che ti devi appoggiare a un programma esterno per fargli fare i calcoli (come feci notare in questa discussione). Inoltre mi sembra davvero assurdo che sia necessario tutto questo uso di memoria per fare uno stupido grafico: sono d’accordo con OldClaudio, il fatto che le memoria oggigiorno costino poco non significa che debbano essere usate in maniera sconsiderata. Personalmente preferisco di gran lunga gnuplot per fare i grafici di funzioni matematiche per i seguenti motivi (ma non solo):
– si può interfacciare con LaTeX & Co. (quindi con gli stessi vantaggi di pgfplots, per esempio quello di avere etichette dello stesso font del documento) in numerosi modi;
– ha una capacità di calcolo decisamente superiore a pgfplots (anche se naturalmente non è “colpa” di pgfplots, eredità i limiti di TeX) e fa un uso ridicolo della memoria: per esempio ho provato a fare un grafico con 10000 samples ed è apparso subito, mentre il consumo della ram sul monitor di sistema è rimasto immutato, solo quella della CPU ha avuto un leggero rialzo;
– se anche gnuplot si rivelasse limitato per fare alcuni calcoli (ma, ripeto per l’ennesima volta, i limiti si riscontrano molto più tardi rispetto a pgfplots) c’è sempre la possibilità di utilizzare i risultati di altri programmi, esattamente come si fa con pgfplots.Potete vedere alcuni esempi delle cose che si possono realizzare con gnuplot qui e qui. La qualità dei grafici fatti con gnuplot non mi sembra che abbia molto da invidiare a quella dei grafici di pgfplots. Tenete presente che la maggior parte dei grafici che vedrete non fanno uso dei terminali legati a LaTeX & Co., sono solo degli esempi per far vedere cosa si può disegnare
Prima di conoscere TikZ utilizzavo, in maniera piuttosto rozza, gnuplot per fare dei semplici disegni ma non erano particolarmente belli, questo perché gnuplot non serve per fare disegni ma grafici di funzione. D’altra parte preferisco usare gnuplot per fare i grafici di funzione e lasciar fare a TikZ il suo lavoro con i disegni, che svolge egregiamente.
Vantaggi (secondo me!) di gnuplot rispetto ad altri programmi tipo Mathematica (che comunque fa molto altro, non sono paragonabili)? È software libero (anche se non ha nulla a che fare con il progetto GNU a dispetto del nome, non usa neanche la licenza GPL) 🙂
-
17 Maggio 2012 alle 17:37 #72783::
Elrond” post=73020Piccola riflessione personale. Adoro TikZ e lo consiglio a molta gente, ho fatto diversi disegni usando questo pacchetto e sono soddisfatto dei risultati, ma pgfplots mi piace molto poco.
Per me vale l’opposto. Adoro pgfplots, trovo la sua sintassi chiara e intuitiva, e la comodità di fare grafici direttamente on LaTeX è semplicemente impareggiabile. Per disegnare una spirale archimedea si usa il codice
`\begin{tikzpicture}
\begin{axis}[title={Spirale archimedea}]
\addplot [
domain=0:6*pi,
variable=\t,
samples=50,
smooth,
thick,
blue
]
({t*cos(deg(t))}, {t*sin(deg(t))});
\end{axis}
\end{tikzpicture} `
che trovo assolutamente intuitivo: “title” imposta il titolo, “domain” il dominio, “variable” il parametro, “thick” lo spessore, “blue” il colore, eccetera. Chiarissimo. Serve disegnare grafici esotici (tipo la Gamma o la Zeta)? Si usa Mathematica per fare i conti e si fa fare il disegno al pacchetto: meno comodo, certo, ma così si ha a disposizione il meglio dei due mondi, se serve.Difetti? Gli unici che mi sento di segnalare sono quello dello sforamento della memoria e della lentezza; sono difetti risolvibili (abbastanza) facilmente, peraltro.
TikZ? No, qui non vi seguo! I risultati che si possono ottenere sono eccellenti, certo, ma il codice è troppo difficile per me e per il principiante che è il lettore ideale dell’Arte.
http://www.texample.net/tikz/examples/parameterised-pig/
Guardo il risultato e mi piace. Guardo il codice e mi metto le mani nei capelli. Troppo, troppo, troppo difficile. Certo, l’Arte la cambieremo: diremo che per disegnare l’utente può rivolgersi a programmi WYSIWYG o al disegno programmato; ma diremo che il disegno programmato (accanto ai vantaggi in termini di qualità) ha una curva di apprendimento enormemente più ripida. In definitiva, si tratta di uno strumento molto potente (un esperto può fare quello che vuole, gli esempi lo provano ampiamente), ma non alla portata di tutti: ci vogliono tempo, esperienza, pazienza e “sbuzzo” per padroneggiarlo. Se invece i disegni da fare sono grafici di funzione, è un altro paio di maniche: pgfplots sì che è alla portata di tutti.
Diciamo che TikZ va bene (per me, per il mio principiante) se i disegni da fare sono molto, molto semplici.
Dall’inizio della discussione ho cambiato idea sul disegno programmato, pgfplots mi è piaciuto subito, ma TikZ è troppo complicato, se si tratta di disegni “articolati”. Magari cambierò idea ancora, ma non credo. Dubito che verrà un giorno in cui troverò “facile” il codice dei maialini! 😉 Ma vediamo che ne pensa Tommaso.
Ciao,
L.P.S. L’articolo è in dirittura di arrivo…
-
17 Maggio 2012 alle 18:13 #72784::
C’è di meglio 🙂http://www.texample.net/tikz/examples/india-map/
Date un’occhiata al sorgente 8)
Ciao
Tommaso
-
18 Maggio 2012 alle 8:16 #72785::
lorenzo.pantieri” post=73023
Piccola riflessione personale. Adoro TikZ e lo consiglio a molta gente, ho fatto diversi disegni usando questo pacchetto e sono soddisfatto dei risultati, ma pgfplots mi piace molto poco.
Per me vale l’opposto. Adoro pgfplots, trovo la sua sintassi chiara e intuitiva, e la comodità di fare grafici direttamente on LaTeX è semplicemente impareggiabile. Per disegnare una spirale archimedea si usa il codice
`\begin{tikzpicture}
\begin{axis}[title={Spirale archimedea}]
\addplot [
domain=0:6*pi,
variable=\t,
samples=50,
smooth,
thick,
blue
]
({t*cos(deg(t))}, {t*sin(deg(t))});
\end{axis}
\end{tikzpicture} `
che trovo assolutamente intuitivo: “title” imposta il titolo, “domain” il dominio, “variable” il parametro, “thick” lo spessore, “blue” il colore, eccetera. Chiarissimo.Codice gnuplot
`set parametric
set title “Spirale archimedea”
plot [0:6*pi] t*cos(t),t*sin(t) smooth bezier`Sintassi complicata? 🙂 La prima riga serve per impostare i grafici parametrici, la seconda per impostare il titolo, la terza per disegnare il grafico con dominio [0:6*pi] usando una curva di Bezier di ordine n uguale al numero di samples, predefiniti sono 100. Bisogna specificare il sistema di smoothing perché gnuplot ne conosce diversi.lorenzo.pantieri” post=73023Difetti? Gli unici che mi sento di segnalare sono quello dello sforamento della memoria e della lentezza; sono difetti risolvibili (abbastanza) facilmente, peraltro.
Per quanto mi riguarda non è un difetto trascurabile, ho abbandonato pgfplots (in cui riponevo molte speranze) proprio per questo motivo e per il fatto che comunque bisogna appoggiarsi a programmi esterni per fare i calcoli. Visto che gnuplot permette già di fare grafici per LaTeX mi sfugge l’utilità di passare per pgfplots.
Capitolo TikZ: non l’avevo specificato, ma lo uso per fare disegni tecnici, in cui c’è bisogno di precisione, un programma di grafica “manuale” non assicura gli stessi risultati, a meno di usare zoom spropositati per fissare il centro di una circonferenza e il suo raggio o per individuare i punti di intersezione fra due curve. Due maialini o la mappa dell’India (peraltro generata automaticamente utilizzando uno script, l’intervento umano è limitato) non rientrano nel mio concetto di “disegno tecnico” 😉 In realtà avere una mappa dell’India sotto forma di codice TikZ è utile se per qualche motivo qualcuno provasse il forte desiderio di ridefinire i confini del Paese o dei suoi Stati, altrimenti rimane solo un esercizio per dimostrare cosa si può, in linea di principio, realizzare usando questo strumento.
-
18 Maggio 2012 alle 10:59 #72786::
Riporto anche io qualche considerazione personale.Elrond” post=73020Piccola riflessione personale. Adoro TikZ e lo consiglio a molta gente, ho fatto diversi disegni usando questo pacchetto e sono soddisfatto dei risultati, ma pgfplots mi piace molto poco. Ha capacità di calcolo ridicole, dopo esserti divertito con seno e coseno ti rendi subito conto che ti devi appoggiare a un programma esterno per fargli fare i calcoli (come feci notare in questa discussione).
TikZ non so usarlo, conosco solo qualche comando. Sarebbe bello impararlo ma il tempo è davvero poco (di questi tempi!). Quando (ma quando?) ho del tempo a disposizione preferisco sfruttarlo per altri programmi ad uso, sperabilmente, professionale. Con professionale intendo programmi di uso aziendale, che è sempre bene conoscere. Ecco perché di recente ho fatto qualche disegno con DraftSight, un CAD multipiattaforma gratuito della Dassault Systèmes (una sorta di AutoCAD gratuito); mi piace perché, oltre al fatto di essere gratuito e multipiattaforma, ha anche una stampante SVG con tutti i vantaggi che potete immaginare, infatti il flusso di lavoro che in genere faccio è DraftSight > Inkscape > LaTeX. TikZ è sicuramente più preciso, elegante, programmabile, e così via, ma attualmente penso che ad una azienda interessi ben altro, pertanto ragiono in questo modo. Con il tempo, se ci sarà, approfondirò il discorso TikZ. Però…(*)
Elrond” post=73020Inoltre mi sembra davvero assurdo che sia necessario tutto questo uso di memoria per fare uno stupido grafico: sono d’accordo con OldClaudio, il fatto che le memoria oggigiorno costino poco non significa che debbano essere usate in maniera sconsiderata. Personalmente preferisco di gran lunga gnuplot per fare i grafici di funzioni matematiche per i seguenti motivi (ma non solo):
– si può interfacciare con LaTeX & Co. (quindi con gli stessi vantaggi di pgfplots, per esempio quello di avere etichette dello stesso font del documento) in numerosi modi;
– ha una capacità di calcolo decisamente superiore a pgfplots (anche se naturalmente non è “colpa” di pgfplots, eredità i limiti di TeX) e fa un uso ridicolo della memoria: per esempio ho provato a fare un grafico con 10000 samples ed è apparso subito, mentre il consumo della ram sul monitor di sistema è rimasto immutato, solo quella della CPU ha avuto un leggero rialzo;
– se anche gnuplot si rivelasse limitato per fare alcuni calcoli (ma, ripeto per l’ennesima volta, i limiti si riscontrano molto più tardi rispetto a pgfplots) c’è sempre la possibilità di utilizzare i risultati di altri programmi, esattamente come si fa con pgfplots.pgfplots lo adoro. Semplice, elegante, pratico; del resto nasce da TikZ. Il fatto di fare i calcoli da un altro programma per me non è un ostacolo. Anzi: è quasi d’obbligo, perlomeno nell’ingegneria dove si usano diversi programmi (commerciali e non) di calcolo numerico, analisi strutturale ed altri ancora, tutti per fare proprio queste cose, cioè i calcoli. Quindi, come sopra, preferisco apprendere questi strumenti per poi esportare i risultati in file esterni (in genere .dat) da dare “in pasto” a pgfplots.
Per quanto riguarda i problemi di memoria, francamente, non ne ho mai avuti 😀 .
Elrond” post=73020Potete vedere alcuni esempi delle cose che si possono realizzare con gnuplot qui e qui. La qualità dei grafici fatti con gnuplot non mi sembra che abbia molto da invidiare a quella dei grafici di pgfplots. Tenete presente che la maggior parte dei grafici che vedrete non fanno uso dei terminali legati a LaTeX & Co., sono solo degli esempi per far vedere cosa si può disegnare
È vero, gnuplot offre diverse possibilità, ed è sicuramente uno strumento validissimo, però LaTeX per LaTeX, preferisco pgfplots :-).
Elrond” post=73020Vantaggi (secondo me!) di gnuplot rispetto ad altri programmi tipo Mathematica (che comunque fa molto altro, non sono paragonabili)? È software libero (anche se non ha nulla a che fare con il progetto GNU a dispetto del nome, non usa neanche la licenza GPL) 🙂
Certo. Dove si può, è bene preferire un programma gratuito ad uno commerciale. Talvoltà, però, questo non si può fare; come per esempio mi è capitato nella tesi dove, quasi obbligato, ho dovuto fare grafici con Excel. Per fortuna non ho avuto difficoltà a scrivere la tesi in LaTeX… anche se il mio supervisore (credo anche i suoi colleghi) non sapeva cosa fosse!
(*) Chiudo con questa considerazione: pur non ritenendo, “ora”, Tikz indispensabile per la mia formazione, preparazione e cultura personale, ritengo che sia utile conoscerne almeno i rudimenti per poter estendere, all’occorenza, le potenzialità di pgfplots. I maialini e mappe di quel tipo, come Elrond giustamente sottolinea, non sono disegni tecnici, quindi il problema non si pone proprio! 🙂
Ciao
Orlando
-
18 Maggio 2012 alle 12:00 #72787::
ansys” post=73052pgfplots lo adoro. Semplice, elegante, pratico; del resto nasce da TikZ. Il fatto di fare i calcoli da un altro programma per me non è un ostacolo. Anzi: è quasi d’obbligo, perlomeno nell’ingegneria dove si usano diversi programmi (commerciali e non) di calcolo numerico, analisi strutturale ed altri ancora, tutti per fare proprio queste cose, cioè i calcoli. Quindi, come sopra, preferisco apprendere questi strumenti per poi esportare i risultati in file esterni (in genere .dat) da dare “in pasto” a pgfplots.
Perfetto.
ansys” post=73052Per quanto riguarda i problemi di memoria, francamente, non ne ho mai avuti 😀 .
Sei stato fortunato. 😉
ansys” post=73052I maialini e mappe di quel tipo, come Elrond giustamente sottolinea, non sono disegni tecnici, quindi il problema non si pone proprio! 🙂
Il problema si pone perché un laureando potrebbe aver bisogno di disegni di quel tipo. In quel caso, non esiterei a consigliargli un software esterno: il codice TiKZ è troppo complicato.
L.
-
18 Maggio 2012 alle 14:13 #72788::
lorenzo.pantieri” post=73058Il problema si pone perché un laureando potrebbe aver bisogno di disegni di quel tipo. In quel caso, non esiterei a consigliargli un software esterno: il codice TiKZ è troppo complicato.
Attenzione: se il laureando, o chiunque esso sia, è un neofita, allora ti do ragione. Se il laureando è già esperto, il problema non dovrebbe porsi. L’esperto, come ha accettato di buon grado il concetto di WYSIWYM (ma sopratutto lo ha assimilato) non dovrebbe avere difficoltà ad estenderlo al disegno, anzi, può solo trarne giovamento (il mio personale problema è il tempo).
Poi, che si usi l’approccio WYSIWYM oppure WYSIWYG, in questi anni sto imparando che prima di mettermi davanti al PC a disegnare, programmare, scrivere o altro, qualche “conticino a mano” va sempre fatto, e credo che questo valga anche per il disegno, “marcato” o meno.
Ciao
Orlando
-
18 Maggio 2012 alle 14:24 #72789::
ansys” post=73068
Il problema si pone perché un laureando potrebbe aver bisogno di disegni di quel tipo. In quel caso, non esiterei a consigliargli un software esterno: il codice TiKZ è troppo complicato.
Attenzione: se il laureando, o chiunque esso sia, è un neofita, allora ti do ragione. Se il laureando è già esperto, il problema non dovrebbe porsi. L’esperto, come ha accettato di buon grado il concetto di WYSIWYM (ma sopratutto lo ha assimilato) non dovrebbe avere difficoltà ad estenderlo al disegno, anzi, può solo trarne giovamento (il mio personale problema è il tempo).
Poi, che si usi l’approccio WYSIWYM oppure WYSIWYG, in questi anni sto imparando che prima di mettermi davanti al PC a disegnare, programmare, scrivere o altro, qualche “conticino a mano” va sempre fatto, e credo che questo valga anche per il disegno, “marcato” o meno.
Il lettore ideale dell’Arte è un utente alle prime armi con LaTeX. Codice come quello dell’India o dei maialini è del tutto fuori dalla sua portata, dunque, ma anche (io credo) fuori dalla portata di molti esperti. Più importante, se devo fare un disegno come quello dei maialini non vedo grandi vantaggi nell’approccio WYSIWYM, anzi: direi che LaTeX è più un impiccio che un vantaggio. Certo, c’è il vantaggio della massima coerenza tipografica col documento. Ma non credo, francamente, che il gioco valga la candela.
Nella prosssima edizione dell’Arte parleremo di pgfplots, ma solo di sfuggita di TikZ. Diremo che è uno strumento potentissimo, ma riservato a utenti “pro”.
Ciao,
L.
-
18 Maggio 2012 alle 15:09 #72790::
Ciao,lorenzo.pantieriCerto, c’è il vantaggio della massima coerenza tipografica col documento.
Per ottenere questo risultato pur partendo da un disegno fatto con programmi grafici, c’è il pacchetto [tt]overpic,[/tt] il cui utilizzo è veramente banale (la documentazione, che si trova con “texdoc opic-rel” oppure con “texdoc opic-abs”, è di una pagina). Per quanto ne so ha solo due svantaggi:
- richiede una buona pazienza;
- la posizione delle etichette è fatta “a occhio” (che non vuol dire che il risultato non possa essere ottimo).
Anche un utente neofita non avrebbe alcuna difficoltà a usare questo pacchetto.
Ciao,
Marco.
-
18 Maggio 2012 alle 15:32 #72791::
lorenzo.pantieri” post=73070
[quote=”lorenzo.pantieri” post=73058]Il problema si pone perché un laureando potrebbe aver bisogno di disegni di quel tipo. In quel caso, non esiterei a consigliargli un software esterno: il codice TiKZ è troppo complicato.
Attenzione: se il laureando, o chiunque esso sia, è un neofita, allora ti do ragione. Se il laureando è già esperto, il problema non dovrebbe porsi. L’esperto, come ha accettato di buon grado il concetto di WYSIWYM (ma sopratutto lo ha assimilato) non dovrebbe avere difficoltà ad estenderlo al disegno, anzi, può solo trarne giovamento (il mio personale problema è il tempo).
Poi, che si usi l’approccio WYSIWYM oppure WYSIWYG, in questi anni sto imparando che prima di mettermi davanti al PC a disegnare, programmare, scrivere o altro, qualche “conticino a mano” va sempre fatto, e credo che questo valga anche per il disegno, “marcato” o meno.
Il lettore ideale dell’Arte è un utente alle prime armi con LaTeX. Codice come quello dell’India o dei maialini è del tutto fuori dalla sua portata, dunque, ma anche (io credo) fuori dalla portata di molti esperti.[/quote]La mappa dell’India credo sia fuori dalla portata di qualsiasi essere umano, è stata generata automaticamente a partire da un’altra figura. Dubito che qualsiasi persona sana di mente (o perlomeno non con mesi interi di tempo da dedicare a questo lavoro) si metterebbe a calcolarsi punto per punto i confini di ogni Stato. Ti do ragione sul fatto che è improponibile utilizzare TikZ indiscriminatamente per fare un qualsiasi disegno, i disegni per cui è utilissimo sono quelli in cui lavorare con le coordinate sia un vantaggio (vedi articolo di cfiandra), non un impaccio (come mi sembra succeda nel caso dei maialini). È divertente vedere che si possano disegnare maialini con TikZ, ma personalmente non ci proverei neanche a riprodurre quel disegno.
lorenzo.pantieri” post=73070Più importante, se devo fare un disegno come quello dei maialini non vedo grandi vantaggi nell’approccio WYSIWYM, anzi: direi che LaTeX è più un impiccio che un vantaggio. Certo, c’è il vantaggio della massima coerenza tipografica col documento. Ma non credo, francamente, che il gioco valga la candela.
Ho risposto alla prima parte del messaggio senza leggere la fine, a quanto pare siamo d’accordo su questo punto 🙂
-
18 Maggio 2012 alle 16:52 #72792::
Scusate il doppio post. Per concludere la mia riflessione sul confronto pgfplots-gnuplot, vi propongo un documento in cui ci sono due grafici realizzati usando i due diversi strumenti: quale grafico è stato realizzato con quale strumento? 🙂 Un occhio attento sicuramente troverà le differenze che permettono di distinguere i due grafici, voglio solo far vedere che è possibile ottenere con gnuplot risultati analoghi a quelli di pgfplots.A me piacerebbe molto avere uno strumento potente come gnuplot direttamente “dentro” LaTeX (riconosco che dover scrivere uno script “esterno” a LaTeX possa essere una scocciatura, infatti speravo di poter utilizzare pgfplots per sostituire definitivamente gnuplot), però per quanto mi riguarda pgfplots non ha tutti i requisiti che mi permettono di sceglierlo come strumento predefinito per realizzare i grafici. Formulo meglio: mettendo sulla mia personale bilancia i pro e i contro di tutti e due gli strumenti risulta vincitore gnuplot. Ciò non toglie che per semplici grafici pgfplots sia uno strumento fantastico. Forse sono stato particolarmente drastico finora e non si era colto questo concetto: pgfplots non mi fa schifo, però preferisco altro.
[attachment=297]lissajous.pdf[/attachment]
Attachments:
You must be logged in to view attached files. -
18 Maggio 2012 alle 17:07 #72793
-
18 Maggio 2012 alle 17:19 #72794
-
18 Maggio 2012 alle 17:28 #72795::
Ciao,scusate, ma quel grafico non dovrebbe essere simmetrico sia rispetto all’asse x che rispetto all’asse y? In quel caso, il secondo è certamente migliore, visto che il primo non mantiene queste simmetrie (più che altro sembra avere una simmetria rispetto all’origine). Questo, per me, è un buon motivo per far fare i calcoli a un programma esterno prima di usare [tt]pgfplots.[/tt]
Ciao,
Marco.
-
18 Maggio 2012 alle 17:38 #72796::
Marco87″ post=73097Ciao,
scusate, ma quel grafico non dovrebbe essere simmetrico sia rispetto all’asse x che rispetto all’asse y? In quel caso, il secondo è certamente migliore, visto che il primo non mantiene queste simmetrie (più che altro sembra avere una simmetria rispetto all’origine). Questo, per me, è un buon motivo per far fare i calcoli a un programma esterno prima di usare [tt]pgfplots.[/tt]
Ciao,
Marco.Evidentemente il motore matematico di pgf(plots) è limitato. Come ho detto prima, preferisco fare calcoli con altri programmi e poi importo i valori con dei file .dat.
Ciao
Orlando
-
18 Maggio 2012 alle 19:39 #72797::
Sì, effettivamente il disegno fatto con pgfplots non è così preciso come quello fatto con gnuplot, ma se Marco87 non l’avesse fatto notare non me ne sarei accorto; per altro i due disegni hanno scale delle ascisse uguali, ma scale delle ordinate diverse, quindi sarebbe improprio confrontarli senza disegnarli con le stesse scale; ho il sospetto che la leggere deformazione degli archi delle curve si veda anche con le stesse scale.pgfplots fa miracoli, tenedo presente che il motore matematico lavora solo con numeri interi; questo non vuol dire che anche sa fa miracoli, e la maggior parte dei disegni che si fanno con pgfplots siano molto belli, la sua matematica lascia un po’ a desiderare.
Invito agli utenti di lualatex: perché non provate a rfare il diagramma di Lassajous facendo fare i conti al motore matematico incorporato in lualatex?
Capisco che se con lualatex si può fare di meglio, non sarebbe argomento da tutorial come l’Arte, o Grafici.pdf; ma varrebbe la pena, specialmente in Grafici.pdf mostrare i confronti. So che Lorenzo e Tommaso incorporeranno con qualche modifica il contenuto di Grafici in una prossima versione dell’Arte; bene fra le modifiche da fare ci sarà anche l’eliminazione del paragrafo che fa in confronti della stessa figura con pgfplots, gnuplot e lualatex 😉
Grafici.pdf potrebbe diventare, invece, una guida tematica con il titolo Introduzione ai grafici bi- e tridimensionali con pgfplots.
Tommaso; inserisci ogni grafico che non sia accanto al suo codice in un ambiente figure con tanto di didascalia e lascialo flottare; vediamo anche se così continua ad essere necessaria tanta memoria, quanta ne è necessaria quando ogni grafico è un oggetto di testo.
Titoli delle figure: vanno tutti senza punto finale. Didascalie: vanno con il punto finale solo se contengono più periodi. Almeno, questo è il mio suggerimento; la ratio è che se la didascalia è formata da una sola proposizione, eventualmente anche senza verbo, questa proposizione rappresenta solo un titolo, non una descrizione minuziosa e dettagliata della figura, ma è certamente una didascalia se contiene (in automatico) anche la locuzione Figura 3.17, come quando si usa \caption.
-
18 Maggio 2012 alle 20:36 #72798::
ansys” post=73095Il primo è fatto con pgfplots? Se non erro ha le “tick” (sono quelle vero?) in grigio.
Ciao
Orlandops: sia chiaro: anche a me gnuplot non fa schifo, ma preferisco pgfplots 😀 .
Sì, confermo, il primo è fatto con pgfplots, il secondo con gnuplot. Il dettagli che hai notato tu è corretto, io guardavo invece il colore della curva, quello di pgfplots è leggermente più chiaro di quello di gnuplot e sinceramente mi piace di più quello di pgfplots. Per fare il primo grafico ho usato il codice che ho trovato sulla nuova guida della serie de “L’arte di…” cambiando solo il colore della curva in [tt]red[/tt]
-
19 Maggio 2012 alle 3:13 #72799::
Elrond” post=73083La mappa dell’India credo sia fuori dalla portata di qualsiasi essere umano, è stata generata automaticamente a partire da un’altra figura. Dubito che qualsiasi persona sana di mente (o perlomeno non con mesi interi di tempo da dedicare a questo lavoro) si metterebbe a calcolarsi punto per punto i confini di ogni Stato. Ti do ragione sul fatto che è improponibile utilizzare TikZ indiscriminatamente per fare un qualsiasi disegno, i disegni per cui è utilissimo sono quelli in cui lavorare con le coordinate sia un vantaggio (vedi articolo di cfiandra), non un impaccio (come mi sembra succeda nel caso dei maialini). È divertente vedere che si possano disegnare maialini con TikZ, ma personalmente non ci proverei neanche a riprodurre quel disegno.
D’accordissimo su questo!
-
19 Maggio 2012 alle 3:20 #72800::
OldClaudio” post=73099Capisco che se con lualatex si può fare di meglio, non sarebbe argomento da tutorial come l’Arte, o Grafici.pdf; ma varrebbe la pena, specialmente in Grafici.pdf mostrare i confronti. So che Lorenzo e Tommaso incorporeranno con qualche modifica il contenuto di Grafici in una prossima versione dell’Arte; bene fra le modifiche da fare ci sarà anche l’eliminazione del paragrafo che fa in confronti della stessa figura con pgfplots, gnuplot e lualatex 😉
Grafici.pdf potrebbe diventare, invece, una guida tematica con il titolo Introduzione ai grafici bi- e tridimensionali con pgfplots.
Non so se un confronto di quel tipo sia davvero utile al nostro lettore, le differenze sono piccolissime. Però un cenno alla questione lo possiamo fare senz’altro: “se serve la massima precisione, si usa un programma speciliazzato per fare i calcoli e si danno in pasto i dati a pgfplots”.
OldClaudio” post=73099Tommaso; inserisci ogni grafico che non sia accanto al suo codice in un ambiente figure con tanto di didascalia e lascialo flottare; vediamo anche se così continua ad essere necessaria tanta memoria, quanta ne è necessaria quando ogni grafico è un oggetto di testo.
È un esperimento fattibile, ma la versione finale dell’articolo è meglio che abbia sorgente ed esempi fianco a fianco: in generale, trovo che sia la soluzione più comprensibile per il lettore.
OldClaudio” post=73099Titoli delle figure: vanno tutti senza punto finale. Didascalie: vanno con il punto finale solo se contengono più periodi. Almeno, questo è il mio suggerimento; la ratio è che se la didascalia è formata da una sola proposizione, eventualmente anche senza verbo, questa proposizione rappresenta solo un titolo, non una descrizione minuziosa e dettagliata della figura, ma è certamente una didascalia se contiene (in automatico) anche la locuzione Figura 3.17, come quando si usa \caption.
Non sono prorpio d’accordo. In una didascalia del tipo (invento)
Questa figura mostra il grafico della Gamma di Eulero e della Zeta di Riemann nel piano cartesiano ortogonale, per $x$ compreso tra $-5$ e $5$
pur costituita da un solo periodo, sentirei la mancanza del punto finale. Il punto finale, per me, si può omettere se la dida è brevissima
Gamma di Eulero Zeta di Riemann
va benissimo. Poi però c’è la questione dell’omogeneità: meglio che le dida siano o tutte con punto finale o tutte senza punto finale.
Visto che i titoli dei grafici concorrono con le didascalie, forse il punto si dovrebbe mettere; visto che i titoli dei grafici sono tutti cortissimi, forse si potrebbe non mettere. Deciderà Tommaso!
Ciao,
L.
-
19 Maggio 2012 alle 5:01 #72801::
Elrond” post=73101Per fare il primo grafico ho usato il codice che ho trovato sulla nuova guida della serie de “L’arte di…” cambiando solo il colore della curva in [tt]red[/tt]
Se il tuo obiettivo era quello di mostrare che con gnuplot si possono ottenere più o meno gli stessi risultati siamo d’accordo. Non so però quanto sia facile incorporare il grafico in LaTeX. Anch’io penso che gnuplot sia un ottimo strumento, ma trovo un punto a favore il fatto che pgfplots lavori direttamente all’interno del sorgente del documento. In tanti anni sono stato più volte tentato da gnuplot, ma non mi sono mai cimentato perché a quel punto ritenevo più semplice realizzare i grafici con un software esterno e incorporarli; mentre pgfplots è diverso perché tu scrivi tutto insieme.
Se invece lo scopo era il confronto dei risultati, dovremmo sapere anche in che condizioni sono stati generati i grafici. Per esempio, se ho capito bene tu hai detto che gnuplot usa 100 campioni per default, mentre nel grafico dell’articolo samples è 50 e la schiacciatura è senz’altro dovuta all’utilizzo delle curve di Bézier. Se aggiungi i marcatori scopri che laddove la curva si “schiaccia” ci sono proprio i nodi e l’algoritmo deve collegare un tratto molto curvo con uno praticamente dritto. Tra l’altro, @OldClaudio ha già fatto notare che l’algoritmo di interpolazione è piuttosto debole.
Ciao
-
19 Maggio 2012 alle 5:22 #72802::
Mah; il discorso delle didascalie è un po’ off topic.
Tuttavia, non so dove ho letto la “regola” che ho descritto nel post precedente, ma ho cercato di applicarla sempre.Si basa sul fatto che la didascalia è fatta di tre parti, non di due o di una sola parte: (1) il titolino corrente; (2) il titolo; (3) la descrizione. Gli elementi 1 e 3 sono facoltativi; nel caso rimanga solo l’elemento 2, allora il titolo del diagramma è ridondante (oppure è ridondante la didascalia); l’unica differenza sarebbe che il titolo del diagramma sarebbe sopra al diagramma e la didascalia sarebbe sotto.
Il titolino corrente, spesso in nero, spesso sporgente a sinistra del blocco degli elementi 2 e 3, è senza punto finale ed è separato dall’elemento 2 da uno spazio di un quadrato (che mi pare coerente con gli altri titolini), oppure da un segno di due punti (default di LaTeX) o da un lineato medio.
Il titolo (2) è terminato dal punto fermo solo se è seguito dall’elemento 3.
L’elemento 3 è sempre seguito dal punto fermo.
Seguire questa regola vuol dire essere coerenti, non solo da didascalia a didascalia, anche se le didascalie sembrano diversamente punteggiate; lo sono perché sono diversamente strutturate. Ma vuol dire essere coerenti anche con gli altri titoli; i titoli del documento dei capitoli, i titolini dei paragrafi, sottoparagrafi, persino dei capoversi e degli enunciati non sono mai seguiti dalla punteggiatura, ma da uno spazio di almeno un quadrato (che poi sarebbe 1em) e sono evidenziati con un font diverso, sia esso nero, corsivo, maiuscoletto o altro.Ovviamente questa non è verità ovvia di per sé come gli assiomi. Spesso è specificato come comporre le didascalia nelle istruzioni di stile delle varie case editrici, e ognuna fa a modo suo; però nei libri pubblicati prima dell’avvento della composizione elettronica ho visto spessissimo seguita questa regola.
-
19 Maggio 2012 alle 5:42 #72803::
Tra l’altro, @OldClaudio ha già fatto notare che l’algoritmo di interpolazione è piuttosto debole.
Sì, è debole e forse lo è altrettanto in gnuplot, perché la regola con la quale sono scelti i samples non è ottimale; in realtà il disegno con le spline di Bézier non è debole per niente, tant’è che ho dimostrato che scegliendo i punti giusti bastano tre nodi di interpolazione per disegnare un ciclo completo della funzione seno. Il disegno viene male con pochi nodi con pgfplots, perché i nodi sono scelti “a caso”, cioè prescindendo dalla forma della curva da disegnare. Per ovviare a questo inconveniente è necessario scegliere molti più nodi di quanto si potrebbe fare con una scelta intelligente.
Ragazzi: voi forse non avete mai disegnato curve matematiche a mano servendovi dei curvilinee; ai miei tempi, quando ero studente o giovane laureato e ancora per parecchi anni, l’unico modo di disegnare grafici era quello di calcolare alcuni punti della curva da tracciare, non uniformemente spaziati sulle ascisse, ma in modo intelligente, addensandoli dove la curva variava di più, e poi usando il curvilinee, eventualmente quello con l’anima di piombo, che era la versione “antica” delle spline di Bézier; infatti “spline”, stando al dizionario di Oxford, indica proprio “a flexible wood or rubber strip used esp. in drawing large curves.”. È ovvio che se volevamo disegnare qualunque curva un po’ complessa in un tempo ragionevole dovevamo usare il minimo di punti assolutamente necessari. Per i disegni dell’attenuazione di filtri di solito io usavo dei particolari curvilinee che venivano chiamati “a spirale logaritmica”; per la banda attenuata andavano benissimo. per la banda passante erano più utili i curvilinee ad archi di ellisse.
-
19 Maggio 2012 alle 7:37 #72804::
Liverpool” post=73106
Per fare il primo grafico ho usato il codice che ho trovato sulla nuova guida della serie de “L’arte di…” cambiando solo il colore della curva in [tt]red[/tt]
Se il tuo obiettivo era quello di mostrare che con gnuplot si possono ottenere più o meno gli stessi risultati siamo d’accordo. Non so però quanto sia facile incorporare il grafico in LaTeX. Anch’io penso che gnuplot sia un ottimo strumento, ma trovo un punto a favore il fatto che pgfplots lavori direttamente all’interno del sorgente del documento. In tanti anni sono stato più volte tentato da gnuplot, ma non mi sono mai cimentato perché a quel punto ritenevo più semplice realizzare i grafici con un software esterno e incorporarli; mentre pgfplots è diverso perché tu scrivi tutto insieme.
Se invece lo scopo era il confronto dei risultati, dovremmo sapere anche in che condizioni sono stati generati i grafici. Per esempio, se ho capito bene tu hai detto che gnuplot usa 100 campioni per default, mentre nel grafico dell’articolo samples è 50 e la schiacciatura è senz’altro dovuta all’utilizzo delle curve di Bézier. Se aggiungi i marcatori scopri che laddove la curva si “schiaccia” ci sono proprio i nodi e l’algoritmo deve collegare un tratto molto curvo con uno praticamente dritto. Tra l’altro, @OldClaudio ha già fatto notare che l’algoritmo di interpolazione è piuttosto debole.
Ciao
No, no, lo scopo era far vedere che i risultati “estetici” sono molto simili, infatti ansys ha dovuto controllare il colore dei tick per notare la differenza. Lo script gnuplot che ho utilizzato ha un numero di samples più elevato (se non sbaglio avevo impostato 500) e non ha smoothing, credo che alla fine si otterrebbe lo stesso risultato con pgfplots. Preferisco aumentare il numero di samples piuttosto che usare lo smoothing e fare questo con gnuplot è indolore.
Riconosco che non sia immediato aggiungere grafici gnuplot in un documento LaTeX, almeno non come è possibile fare con pgfplots: devi scrivere lo script, eseguire gnuplot sullo script, includere con [tt]\input{file-di-output}[/tt] il file .tex generato dallo script (gnuplot produce due file: la figura vera e propria e un file .tex contenente tutte le scritte e che include la figura, il .tex è quello che viene incluso nel proprio documento, è grazie a questo che si hanno gli stessi font del proprio documento). Per documenti elaborati mi scrivo sempre un Makefile (in realtà riciclo sempre lo stesso con minimi cambiamenti) che mi automatizza tutte le operazioni che portano alla compilazione del documento finale, fra le quali l’esecuzione di gnuplot sullo script (cosa peraltro necessaria solo quando cambio lo script), quindi le operazioni realmente da fare sono (a) scrivere il codice, (b) includere la figura nel sorgente LaTeX scrivendo una brevissima riga. Tutto sommato non cambia molto rispetto a lavorare con pgfplots, a parte il fatto che usando gnuplot dimezzo i tempi di compilazione.
Mi ero avvicinato a pgfplots proprio per provare a eliminare tutti i passaggi intermedi di cui ho parlato (così come ho utilizzato TikZ per fare i disegni che prima realizzavo, con un po’ di difficoltà a essere sinceri, con gnuplot). Tra l’altro pgfplots permette di scrivere uno script gnuplot direttamente dentro il codice LaTeX e inizialmente apprezzavo molto questa possibilità, poi mi son reso conto che è piuttosto macchinoso perché con un singolo script gnuplot si possono realizzare infiniti grafici tutti con le stesse impostazioni (o anche diverse, però lo script è uno solo), con pgfplots bisogna creare un ambiente axis per disegnare ciascun grafico (riscrivendo sempre lo stesso “preambolo” gnuplot).
A parte il grande vantaggio di lavorare direttamente dentro il sorgente LaTeX ho incontrato più contro che pro nel lavorare con pgfplots, quindi son tornato indietro. Ciò non toglie che per pochi semplici grafici penso che possa andare più che bene pgfplots.
-
19 Maggio 2012 alle 9:10 #72805::
Elrond” post=73119
[quote=”Elrond” post=73101]Per fare il primo grafico ho usato il codice che ho trovato sulla nuova guida della serie de “L’arte di…” cambiando solo il colore della curva in [tt]red[/tt]
Se il tuo obiettivo era quello di mostrare che con gnuplot si possono ottenere più o meno gli stessi risultati siamo d’accordo. Non so però quanto sia facile incorporare il grafico in LaTeX. Anch’io penso che gnuplot sia un ottimo strumento, ma trovo un punto a favore il fatto che pgfplots lavori direttamente all’interno del sorgente del documento. In tanti anni sono stato più volte tentato da gnuplot, ma non mi sono mai cimentato perché a quel punto ritenevo più semplice realizzare i grafici con un software esterno e incorporarli; mentre pgfplots è diverso perché tu scrivi tutto insieme.
Se invece lo scopo era il confronto dei risultati, dovremmo sapere anche in che condizioni sono stati generati i grafici. Per esempio, se ho capito bene tu hai detto che gnuplot usa 100 campioni per default, mentre nel grafico dell’articolo samples è 50 e la schiacciatura è senz’altro dovuta all’utilizzo delle curve di Bézier. Se aggiungi i marcatori scopri che laddove la curva si “schiaccia” ci sono proprio i nodi e l’algoritmo deve collegare un tratto molto curvo con uno praticamente dritto. Tra l’altro, @OldClaudio ha già fatto notare che l’algoritmo di interpolazione è piuttosto debole.
Ciao
No, no, lo scopo era far vedere che i risultati “estetici” sono molto simili, infatti ansys ha dovuto controllare il colore dei tick per notare la differenza. Lo script gnuplot che ho utilizzato ha un numero di samples più elevato (se non sbaglio avevo impostato 500) e non ha smoothing, credo che alla fine si otterrebbe lo stesso risultato con pgfplots. Preferisco aumentare il numero di samples piuttosto che usare lo smoothing e fare questo con gnuplot è indolore.
Riconosco che non sia immediato aggiungere grafici gnuplot in un documento LaTeX, almeno non come è possibile fare con pgfplots: devi scrivere lo script, eseguire gnuplot sullo script, includere con [tt]\input{file-di-output}[/tt] il file .tex generato dallo script (gnuplot produce due file: la figura vera e propria e un file .tex contenente tutte le scritte e che include la figura, il .tex è quello che viene incluso nel proprio documento, è grazie a questo che si hanno gli stessi font del proprio documento). Per documenti elaborati mi scrivo sempre un Makefile (in realtà riciclo sempre lo stesso con minimi cambiamenti) che mi automatizza tutte le operazioni che portano alla compilazione del documento finale, fra le quali l’esecuzione di gnuplot sullo script (cosa peraltro necessaria solo quando cambio lo script), quindi le operazioni realmente da fare sono (a) scrivere il codice, (b) includere la figura nel sorgente LaTeX scrivendo una brevissima riga. Tutto sommato non cambia molto rispetto a lavorare con pgfplots, a parte il fatto che usando gnuplot dimezzo i tempi di compilazione.
Mi ero avvicinato a pgfplots proprio per provare a eliminare tutti i passaggi intermedi di cui ho parlato (così come ho utilizzato TikZ per fare i disegni che prima realizzavo, con un po’ di difficoltà a essere sinceri, con gnuplot). Tra l’altro pgfplots permette di scrivere uno script gnuplot direttamente dentro il codice LaTeX e inizialmente apprezzavo molto questa possibilità, poi mi son reso conto che è piuttosto macchinoso perché con un singolo script gnuplot si possono realizzare infiniti grafici tutti con le stesse impostazioni (o anche diverse, però lo script è uno solo), con pgfplots bisogna creare un ambiente axis per disegnare ciascun grafico (riscrivendo sempre lo stesso “preambolo” gnuplot).
A parte il grande vantaggio di lavorare direttamente dentro il sorgente LaTeX ho incontrato più contro che pro nel lavorare con pgfplots, quindi son tornato indietro. Ciò non toglie che per pochi semplici grafici penso che possa andare più che bene pgfplots.[/quote]
Ciao,
ovvio che non conosco le tue necessità di rappresentazione dei grafici, ma forse la tua esperienza con pgfplots ti ha fatto prematuramente preferire altre soluzioni, anche perché una volta imparato bene uno strumento, impiegare tempo per capire i dettagli di una seconda soluzione è un ostacolo.Con un po’ di calma, converrebbe ripetere qualche esperimento con pgfplots, considerando che:
* anche in pgfplots puoi impostare proprietà generali dei grafici. Se adoperi la modalità, come è spesso consigliabile, puoi preparare un file con l’unica istruzione \pgfplotsset;
* i calcoli matematici possono essere eseguiti da gnuplot dietro le quinte da pgfplots;
* il dettaglio grafico raggiungibile con pgfplots è notevole. Pensa per esempio, alla possibilità di usare tutti comandi tikz sulla tela del grafico.Insomma, non ti sto imponendo l’uso di pgfplots ma una soluzione che solo tu puoi valutare se è più efficace di quella attuale.
L’idea sott’intesa è questa: usare lo strumento matematico vero e proprio per svolgere l’analisi e l’indagine numerica, e solo dopo creare il grafico opportuno per il documento finale non più solamente con gli occhi dello “studioso” ma anche con quelli del “tipografo progettista” di libri.
R.
-
19 Maggio 2012 alle 10:03 #72806::
Elrond” post=73093[attachment=297]lissajous.pdf[/attachment]
E’ un gran bell’esempio. Ma basta mettere in pgfplots “samples=200” e il grafico viene reso in maniera impeccabile. Quanto a “Gnuplot (o Mathematica) contro pgfplots”, lo trovo un falso dilemma. E’ perfino ovvio che un software specializzato sia più efficiente di un programma nato per fare altro; ma i programmi si possono usare insieme, se serve. Se usa Mathematica per fare i calcoli e pgfplots per fare i grafici.
Ah, non è vero che “Mathematica ha più qualità di pgfplots”. Può essere vero che Mathematica, a parità di tempo di calcolo e di occupazione di memoria faccia un grafico migliore. Però queste risorse non sono in genere un problema: si aumenta “samples” e si ha un grafico di qualità eccellente anche in pgfplots.
Ciao,
L.
-
19 Maggio 2012 alle 10:05 #72807::
Su invito di @OldClaudio, riporto un codice per LuaLaTeX. Attenzione: non è farina del mio sacco perché mi sono basato su un codice di @azoun su TeX StackExchange: LuaLaTeX:PGFplots can’t read data passed by Lua.`% !TEX program = LuaLaTeX
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{luacode}\begin{luacode*}
function Liss(val,t)
return math.sin(val*t)
endfunction stampa_pgf(a,b)
tex.sprint(“\\addplot[mark=, red, smooth] coordinates{“)
— 2pi_greco/500=0.0125663
for i=0,2*math.pi,0.0125663 do
x=Liss(a,i)
y=Liss(b,i)
tex.sprint(“(“..x..”,”..y..”)”)
endtex.sprint(“};”)
end\end{luacode*}
\newcommand\myaddplot[2]{\directlua{stampa_pgf(#1,#2)}}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\myaddplot{7}{2}
\end{axis}
\end{tikzpicture}
\end{document}%%% Local Variables:
%%% mode: latex
%%% TeX-engine: luatex
%%% TeX-master: t
%%% End:`
Ciao
Orlando
-
19 Maggio 2012 alle 10:12 #72808::
Elrond” post=73093Scusate il doppio post. Per concludere la mia riflessione sul confronto pgfplots-gnuplot, vi propongo un documento in cui ci sono due grafici realizzati usando i due diversi strumenti: quale grafico è stato realizzato con quale strumento? 🙂 Un occhio attento sicuramente troverà le differenze che permettono di distinguere i due grafici, voglio solo far vedere che è possibile ottenere con gnuplot risultati analoghi a quelli di pgfplots.
A me piacerebbe molto avere uno strumento potente come gnuplot direttamente “dentro” LaTeX (riconosco che dover scrivere uno script “esterno” a LaTeX possa essere una scocciatura, infatti speravo di poter utilizzare pgfplots per sostituire definitivamente gnuplot), però per quanto mi riguarda pgfplots non ha tutti i requisiti che mi permettono di sceglierlo come strumento predefinito per realizzare i grafici. Formulo meglio: mettendo sulla mia personale bilancia i pro e i contro di tutti e due gli strumenti risulta vincitore gnuplot. Ciò non toglie che per semplici grafici pgfplots sia uno strumento fantastico. Forse sono stato particolarmente drastico finora e non si era colto questo concetto: pgfplots non mi fa schifo, però preferisco altro.
[attachment=297]lissajous.pdf[/attachment]
Il primo è fatto con pgf, si riconosce perché è sbagliato (come abbiamo già visto nel caso del seno). Io comunque continuo a preferire pgfplots, i grafici che devo realizzare sono per lo più fatti di punti, e raramente qualche curva, comunque abbastanza semplice. Nel mio caso, realizzare il tutto all’interno di LaTeX mi permette di avere un risultato “consistente”, senza ricorrere a programmi esterni, e con una sintassi estremamente semplice. Quando mi è servito ho esportato i punti necessari con Matlab e li ho importati con pgfplots.
Ciao,
Roberto
-
19 Maggio 2012 alle 11:17 #72809::
robitex” post=73122Ciao,
ovvio che non conosco le tue necessità di rappresentazione dei grafici, ma forse la tua esperienza con pgfplots ti ha fatto prematuramente preferire altre soluzioni, anche perché una volta imparato bene uno strumento, impiegare tempo per capire i dettagli di una seconda soluzione è un ostacolo.Con un po’ di calma, converrebbe ripetere qualche esperimento con pgfplots, considerando che:
* anche in pgfplots puoi impostare proprietà generali dei grafici. Se adoperi la modalità, come è spesso consigliabile, puoi preparare un file con l’unica istruzione \pgfplotsset; Sì, questo lo so e apprezzo molto questa possibilità 😉
robitex” post=73122* i calcoli matematici possono essere eseguiti da gnuplot dietro le quinte da pgfplots;
Il punto è proprio questo: se con gnuplot ottengo lo stesso risultato grafico (l’esempio della curva di Lissajous serviva proprio a mostrare questo, non che gnuplot possa essere più preciso) perché devo passare per pgfplots? 🙂 Con Mathematica, e tanti altri programmi simili, il problema non si pone: non si possono ottenere gli stessi risultati grafici, quindi da gnuplot o pgfplots bisogna per forza passare.
robitex” post=73122* il dettaglio grafico raggiungibile con pgfplots è notevole. Pensa per esempio, alla possibilità di usare tutti comandi tikz sulla tela del grafico.
Conoscevo già TikZ e proprio questo mi faceva ben sperare in pgfplots, però le mie speranze sono rimaste (per ora!) deluse 🙁
robitex” post=73122Insomma, non ti sto imponendo l’uso di pgfplots ma una soluzione che solo tu puoi valutare se è più efficace di quella attuale.
L’idea sott’intesa è questa: usare lo strumento matematico vero e proprio per svolgere l’analisi e l’indagine numerica, e solo dopo creare il grafico opportuno per il documento finale non più solamente con gli occhi dello “studioso” ma anche con quelli del “tipografo progettista” di libri.
R.
Sull’idea sono d’accordo, sulla fattibilità di meno. Però magari un giorno riproverò con maggiore convinzione a usare pgfplots e cambierò idea 😀
-
19 Maggio 2012 alle 17:23 #72810::
ansys” post=73127Su invito di @OldClaudio, riporto un codice per LuaLaTeX. Attenzione: non è farina del mio sacco perché mi sono basato su un codice di @azoun su TeX StackExchange: LuaLaTeX:PGFplots can’t read data passed by Lua.
`% !TEX program = LuaLaTeX
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{luacode}\begin{luacode*}
function Liss(val,t)
return math.sin(val*t)
endfunction stampa_pgf(a,b)
tex.sprint(“\\addplot[mark=, red, smooth] coordinates{“)
— 2pi_greco/500=0.0125663
for i=0,2*math.pi,0.0125663 do
x=Liss(a,i)
y=Liss(b,i)
tex.sprint(“(“..x..”,”..y..”)”)
endtex.sprint(“};”)
end\end{luacode*}
\newcommand\myaddplot[2]{\directlua{stampa_pgf(#1,#2)}}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\myaddplot{7}{2}
\end{axis}
\end{tikzpicture}
\end{document}%%% Local Variables:
%%% mode: latex
%%% TeX-engine: luatex
%%% TeX-master: t
%%% End:`
Ciao
OrlandoHo provato il cidce. A parte il fatto che il mio TeXShop non interpreta correttamente la riga magica relativa al program (la riga giusta dovrebbe essere % !TEX TS-program = LuaLaTeX); il disegno di Lissajous è calcolato per 500 punti di interpolazione; il disegno viene benissimo e la memoria di Lua non ne viene minimamante intasata, ma di fatto il codice lua genera la tabella che pgfplot interpreta come al solito; dagli ultimi messaggi di Lorenzo, sembrerebbe che se il numero di campioni arriva 10001 (non 11000) calcolati da Mathematica, ma se sono calcolati da mathlab o da Lua e lo stesso, si supera la capacità di memoria di pgfplots anche avendo allargato la memoria di pdftex some ci ha spiegato in un altro post; Certo con 200 samples il disegno viene bene anche con pgfplots; con i 500 samples calcolati da Lua le cose vanno ancora meglio; ma il problema della saturazione della memoria non ne viene toccato.
Io ho trovato molto istruttivo l’esempio, perché mostra quanto sia semplice il codice Lua da usare. Non sono ancora convinto che non si possa fare meglio con le cubiche di Bézier (di Bernstein/) scegliendo adeguatamente i nodi di interpolazione. Certo, scegliere adeguatamante vuol dire disporre di un programma molto intelligente, oppure di fare le cose a mano.
-
19 Maggio 2012 alle 18:22 #72811::
OldClaudio” post=73156
Su invito di @OldClaudio, riporto un codice per LuaLaTeX. Attenzione: non è farina del mio sacco perché mi sono basato su un codice di @azoun su TeX StackExchange: LuaLaTeX:PGFplots can’t read data passed by Lua.
`% !TEX program = LuaLaTeX
\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{luacode}\begin{luacode*}
function Liss(val,t)
return math.sin(val*t)
endfunction stampa_pgf(a,b)
tex.sprint(“\\addplot[mark=, red, smooth] coordinates{“)
— 2pi_greco/500=0.0125663
for i=0,2*math.pi,0.0125663 do
x=Liss(a,i)
y=Liss(b,i)
tex.sprint(“(“..x..”,”..y..”)”)
endtex.sprint(“};”)
end\end{luacode*}
\newcommand\myaddplot[2]{\directlua{stampa_pgf(#1,#2)}}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\myaddplot{7}{2}
\end{axis}
\end{tikzpicture}
\end{document}%%% Local Variables:
%%% mode: latex
%%% TeX-engine: luatex
%%% TeX-master: t
%%% End:`
Ciao
OrlandoHo provato il cidce. A parte il fatto che il mio TeXShop non interpreta correttamente la riga magica relativa al program (la riga giusta dovrebbe essere % !TEX TS-program = LuaLaTeX); il disegno di Lissajous è calcolato per 500 punti di interpolazione; il disegno viene benissimo e la memoria di Lua non ne viene minimamante intasata, ma di fatto il codice lua genera la tabella che pgfplot interpreta come al solito; dagli ultimi messaggi di Lorenzo, sembrerebbe che se il numero di campioni arriva 10001 (non 11000) calcolati da Mathematica, ma se sono calcolati da mathlab o da Lua e lo stesso, si supera la capacità di memoria di pgfplots anche avendo allargato la memoria di pdftex some ci ha spiegato in un altro post; Certo con 200 samples il disegno viene bene anche con pgfplots; con i 500 samples calcolati da Lua le cose vanno ancora meglio; ma il problema della saturazione della memoria non ne viene toccato.
Io ho trovato molto istruttivo l’esempio, perché mostra quanto sia semplice il codice Lua da usare. Non sono ancora convinto che non si possa fare meglio con le cubiche di Bézier (di Bernstein/) scegliendo adeguatamente i nodi di interpolazione. Certo, scegliere adeguatamante vuol dire disporre di un programma molto intelligente, oppure di fare le cose a mano.
Se proprio vi sono un numero notevole di punti che pgfplots non riesce a gestire, basta spezzare la curva in diversi \addplot.
Ne avevamo già parlato in un altro post tempo fa.
R.
-
19 Maggio 2012 alle 20:39 #72812::
Anche Lua ha i suoi problemini: ho modificato leggermente il codice già visto permettendo di scegliere il numero di campioni:
`
% !TEX TS-program = LuaLaTeX\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{luacode}\begin{luacode*}
function Liss(val,t)
return math.sin(val*t)
endfunction stampa_pgf(a,b,s)
tex.sprint(“\\addplot[mark=, red, smooth] coordinates{“)
— 2pi_greco/500=0.0125663
step=2*math.pi/s
for i=0,2*math.pi,step do
x=Liss(a,i)
y=Liss(b,i)
tex.sprint(“(“..x..”,”..y..”)”)
endtex.sprint(“};”)
end\end{luacode*}
\newcommand\myaddplot[3]{\directlua{stampa_pgf(#1,#2,#3)}}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\myaddplot{7}{2}{1000}
\end{axis}
\end{tikzpicture}
\end{document}%%% Local Variables:
%%% mode: latex
%%% TeX-engine: luatex
%%% TeX-master: t
%%% End:
`Come si vede nelle ultime righe della tikzpicture ho impostato 1000 campioni. se si impostano valori inferiori, la curva di Lissajous non si chiude. Questo dipende dal ciclo for che à basato su numeri reali, quindi anche un minimo arrotondamento o troncamento può rendere verificato il test di fine ciclo prima che in effetti la curva sia chiusa; bisognerebbe avere l’accortezza di eseguire i cicli usando solo numeri interi per “contare” le iterazioni.
Provate a sostituire 1000 con 750, con 500, e via scendendo; la curva non si chiude mai e quando il numero di campioni scende sotto a 200 si vede ad occhio nudo che pfgplots non ce la fa a rendere la curva come si deve.
Per sbaglio ho messo una volta il numero 75000 come numero di campioni; sebbene i calcoli li faccia Lua con aritmetica floating point, il tempo che ci mette lascia dubitare che la memoria, oltre che il processore, sia messa a dura prova; però alla fine del calcolo, la lettura del file log è stranamente molto parca; non ho ancora imparato a decifrare completamente le indicazioni che vi appaiono, ma sembra che occupi pochissima memoria.
-
20 Maggio 2012 alle 6:08 #72813::
OldClaudio” post=73156dagli ultimi messaggi di Lorenzo, sembrerebbe che se il numero di campioni arriva 10001 (non 11000) calcolati da Mathematica, ma se sono calcolati da mathlab o da Lua e lo stesso, si supera la capacità di memoria di pgfplots anche avendo allargato la memoria di pdftex some ci ha spiegato in un altro post; Certo con 200 samples il disegno viene bene anche con pgfplots; con i 500 samples calcolati da Lua le cose vanno ancora meglio; ma il problema della saturazione della memoria non ne viene toccato.
È un punto importante: se hai un (solo) disegno con 10.001 punti, pgfplots si impalla; 10 mila punti possono sembrare un’enormità per un (solo) disegno, ma non è detto. Per esempio, se campiono la Gamma con solo mille punti il risultato lascia a desiderare, come si è visto. Quindi per avere un grafico di alta qualità può essere necessario avvicinarsi alla fatidica soglia dei 10 mila.
Una domanda: il valore di “samples” rappresenta esattamente il numero dei punti da campionare? In altre parole, chiedendo di campionare la Gamma con
`out = Table[{x, Gamma[x]}, {x, -5, 5, 0.001}] /. {ComplexInfinity -> NaN}; Export[“gamma.txt”, out, “Table”];`
è come se stessi dicendo “samples=11000”?Grazie,
L.
-
20 Maggio 2012 alle 7:42 #72814::
robitex” post=73158Se proprio vi sono un numero notevole di punti che pgfplots non riesce a gestire, basta spezzare la curva in diversi \addplot.
Ne avevamo già parlato in un altro post tempo fa.Infatti, ad onor del vero, quando nell’intervento #72092 al punto 1.b dicevo “ho notato che…”, in realtà era stato @robitex a farmelo notare. Nella prima versione del messaggio c’era scritto esplicitamente; poi siccome l’affermazione era stata messa in dubbio, ho preferito non coivolgere altri utenti.
@Lorenzo: samples=1+floor((xmax-xmin)/delta) quindi 1+(5+5)*1000=10001
-
20 Maggio 2012 alle 12:46 #72815::
OldClaudio” post=73161Come si vede nelle ultime righe della tikzpicture ho impostato 1000 campioni. se si impostano valori inferiori, la curva di Lissajous non si chiude. Questo dipende dal ciclo for che à basato su numeri reali, quindi anche un minimo arrotondamento o troncamento può rendere verificato il test di fine ciclo prima che in effetti la curva sia chiusa; bisognerebbe avere l’accortezza di eseguire i cicli usando solo numeri interi per “contare” le iterazioni.
Provate a sostituire 1000 con 750, con 500, e via scendendo; la curva non si chiude mai e quando il numero di campioni scende sotto a 200 si vede ad occhio nudo che pfgplots non ce la fa a rendere la curva come si deve.
Per sbaglio ho messo una volta il numero 75000 come numero di campioni; sebbene i calcoli li faccia Lua con aritmetica floating point, il tempo che ci mette lascia dubitare che la memoria, oltre che il processore, sia messa a dura prova; però alla fine del calcolo, la lettura del file log è stranamente molto parca; non ho ancora imparato a decifrare completamente le indicazioni che vi appaiono, ma sembra che occupi pochissima memoria.
Si può “giocare” sulla precisione del passo. Del codice precedente, modificando [tt]step=2*math.pi[/tt] con [tt]step=string.format(“\%.10f”,2*math.pi/s)[/tt] la curva si chiude. Ho provato anche con 150 campioni e la curva rimane identica, con 100 invece non si chiude.
Ciao
OrlandoEdit: con [tt]step=string.format(“\%.50f”,2*math.pi/s)[/tt] e 100 campioni la curva si chiude ma non viene tanto bene. Però ammetto che non so questo cosa comporti in termini di memoria.
-
20 Maggio 2012 alle 13:43 #72816::
Iterando sui numeri interi con questo codice:
`
% !TEX TS-program = LuaLaTeX\documentclass{standalone}
\usepackage{pgfplots}
\usepackage{luacode}\begin{luacode*}
function Liss(val,t)
return math.sin(val*t)
endfunction stampa_pgf(a,b,s)
tex.sprint(“\\addplot[mark=, red, smooth] coordinates{“)
— 2pi_greco/500=0.0125663 — valore con 500 campioni
— ansys suggerisce di usare per il calcolo di step la formula
— step=string.format(“\%.50f”,2*math.pi/s)
— step=2*math.pi/s
step=string.format(“\%.50f”,2*math.pi/s)
— for i=0,2*math.pi,step do
for i=0,s,1 do
u= i*step
x=Liss(a,u)
y=Liss(b,u)
tex.sprint(“(“..x..”,”..y..”)”)
endtex.sprint(“};”)
end\end{luacode*}
\newcommand\myaddplot[3]{\directlua{stampa_pgf(#1,#2,#3)}}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\myaddplot{7}{2}{100}
\end{axis}
\end{tikzpicture}
\end{document}%%% Local Variables:
%%% mode: latex
%%% TeX-engine: luatex
%%% TeX-master: t
%%% End:
`
che itera sui numeri interi la curva si chiude sempre. Con 30 campioni viene uno schifo; con 100 campioni è leggermente deformata, ma difficile da notarlo ad occhio nudo; con 200 campioni viene benissimo.Occupazione di memoria: dal file log con 100 campioni si legge
`
Here is how much of LuaTeX's memory you used:
17683 strings out of 494981
100000,552014 words of node,token memory allocated
3419 words of node memory still in use:
77 hlist, 1 vlist, 1 rule, 20 math, 310 glue, 22 glyph, 56 glue_spec, 1 writ
e, 311 pdf_literal, 10 pdf_colorstack nodes
avail lists: 1:1,2:34,3:313,4:362,5:1,6:30,7:1,9:83
20513 multiletter control sequences out of 65536+200000
25 fonts using 994935 bytes
63i,10n,82p,653b,1495s stack positions out of 5000i,500n,10000p,200000b,50000s
`Con 200 campioni si legge invece:
`
Here is how much of LuaTeX's memory you used:
17715 strings out of 494981
100000,662416 words of node,token memory allocated
4119 words of node memory still in use:
77 hlist, 1 vlist, 1 rule, 20 math, 410 glue, 22 glyph, 56 glue_spec, 1 writ
e, 411 pdf_literal, 10 pdf_colorstack nodes
avail lists: 1:1,2:34,3:413,4:462,5:1,6:30,7:1,9:83
20545 multiletter control sequences out of 65536+200000
25 fonts using 994935 bytes
63i,10n,82p,653b,1495s stack positions out of 5000i,500n,10000p,200000b,50000s
`A quanto pare sono aumentati di 100 unità soltanto i glue nodes. Ma non sono in grado di dire quanti ce ne fossero disponibili.
-
20 Maggio 2012 alle 13:57 #72817
-
20 Maggio 2012 alle 14:50 #72818::
Già; l’ho detto che non conosco il linguaggio Lua; ho copiato integralmente il tuo codice senza avere la minima idea di quello che volesse dire; ora lo so e ti confermo che viene la stessa cosa (con l’iterazione controllata numeri interi) se si pone [tt\step=string.format(“\%.5f”,2*math.pi/s)[/tt], quindi con solo 5 cifre decimali; probabilmente il problema di arrotondamento non è nemmeno visibile con meno cifre decimali, mettiamo solo 3, ma tanto l’aritmetica interna di TeX lavora con quel numero di cifre decimali “apparenti”. Del resto anche lasciandogli fare le sue cose di default con [tt]step=2*math.pi/s[/tt] non si vede nessuna differenza. È sempre importante che l’iterazione del ciclo for sia controllata con i numeri interi.Si con un po’ di prove abbiamo messo in luce alcuni punti secondo me importanti.
-
22 Maggio 2012 alle 6:53 #72819::
lorenzo.pantieri” post=72986Supponiamo che voglia fare il disegno di una funzione di due variabili, diciamo un paraboloide a sella, facendo fare i conti a Mathematica e il disegno a pgfplots? La procedura è analoga a quella per le curve nel piano?
Finalmente ho avuto un po’ di tempo per provare la soluzione.
Un aspetto che mi era sfuggito, quando ho risposto a questa domanda nell’intervento #72993 (che ora ho modificato), è che ogni samples righe (se varia prima la x) oppure ogni samples y righe (se varia prima la y) bisogna inserire una riga vuota, altrimenti il grafico viene disegnato come tante curve su piani perpendicolari al piano [xy].
Cioè nel caso samples=3 e samples y=2:
`
oppure
x_1 y_1 z_1 x_1 y_1 z_1
x_2 y_1 z_2 x_1 y_2 z_2
x_3 y_1 z_3
x_2 y_1 z_3
x_1 y_2 z_4 x_2 y_2 z_4
x_2 y_2 z_5
x_3 y_2 z_6 x_3 y_1 z_5
x_3 y_2 z_6`
Questo potrebbe essere un problema da gestire automaticamente con un software esterno. Ho provato con MATLAB e bisogna aggiungere 5 righe di codice per la scrittura corretta su file. Con Mathematica me ne sono servite 3, ma la sintassi è alquanto astrusa. Più complicata è la gestione di un file di dati prodotto da un software specialistico, che normalmente non ha funzioni di intervento nella scrittura su file. In tal caso, bisognerebbe modificare il file, eventualmente con l’aiuto di uno script, prima di darlo in pasto a pgfplots. Insomma: un’operazione da sconsigliare…Ciao
P.S. Forse è scontato, ma nell’articolo non è stato detto che pgfplots non maneggia i numeri complessi, perciò per tracciare qualcosa sul piano di Gauss è necessario separare a priori la parte reale da quella immaginaria.
-
23 Maggio 2012 alle 7:08 #72820::
Liverpool” post=73212
Supponiamo che voglia fare il disegno di una funzione di due variabili, diciamo un paraboloide a sella, facendo fare i conti a Mathematica e il disegno a pgfplots? La procedura è analoga a quella per le curve nel piano?
Finalmente ho avuto un po’ di tempo per provare la soluzione.
Un aspetto che mi era sfuggito, quando ho risposto a questa domanda nell’intervento #72993 (che ora ho modificato), è che ogni samples righe (se varia prima la x) oppure ogni samples y righe (se varia prima la y) bisogna inserire una riga vuota, altrimenti il grafico viene disegnato come tante curve su piani perpendicolari al piano [xy].
Cioè nel caso samples=3 e samples y=2:
`
oppure
x_1 y_1 z_1 x_1 y_1 z_1
x_2 y_1 z_2 x_1 y_2 z_2
x_3 y_1 z_3
x_2 y_1 z_3
x_1 y_2 z_4 x_2 y_2 z_4
x_2 y_2 z_5
x_3 y_2 z_6 x_3 y_1 z_5
x_3 y_2 z_6`
Questo potrebbe essere un problema da gestire automaticamente con un software esterno. Ho provato con MATLAB e bisogna aggiungere 5 righe di codice per la scrittura corretta su file. Con Mathematica me ne sono servite 3, ma la sintassi è alquanto astrusa. Più complicata è la gestione di un file di dati prodotto da un software specialistico, che normalmente non ha funzioni di intervento nella scrittura su file. In tal caso, bisognerebbe modificare il file, eventualmente con l’aiuto di uno script, prima di darlo in pasto a pgfplots. Insomma: un’operazione da sconsigliare…Ciao
P.S. Forse è scontato, ma nell’articolo non è stato detto che pgfplots non maneggia i numeri complessi, perciò per tracciare qualcosa sul piano di Gauss è necessario separare a priori la parte reale da quella immaginaria.
Luigi, ti ho scritto una mail all’indirizzo al quale tu mi scrivesti tempo fa. Non interessa a nessuno, naturalmente, ma finché non saranno ripristinati i messaggi privati, dobbiamo mettere in piazza gli affari nostri.
Ciao
Tommaso
-
26 Giugno 2012 alle 7:19 #72821::
Riapro questo filone per un aggiornamento.
Ieri mi ha scritto l’autore di pgfplots, Christian Feuersaenger, per comunicarmi di avere rivisto l’algoritmo di scalatura degli assi, che dovrebbe essere disponibile nella prossima versione stabile del pacchetto, secondo le nostre indicazioni.Ciao
-
6 Settembre 2012 alle 11:47 #72822
-
6 Settembre 2012 alle 14:51 #72823
-
6 Settembre 2012 alle 19:36 #72824
-
7 Settembre 2012 alle 6:12 #72825
-
11 Marzo 2013 alle 14:11 #72826::
Solo 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.
-
11 Marzo 2013 alle 14:44 #72827::
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.
Ehi, capo, non strafare, mi raccomando! 😉
Ciao
Tommaso
-
11 Marzo 2013 alle 17:38 #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
-
11 Marzo 2013 alle 18:01 #72829::
cfiandra” post=82867E probabilmente presto ce ne sarà uno nuovo… dico bene Tommaso 😉 ?
Direi di sì, ora possiamo riprendere il lavoro 🙂
Come dice Claudio, nell’Arte io menzionerei i pacchetti basati su TikZ che “fanno cose”. Qualcuno fa diagrammi ad albero, altri diagrammi di flusso, altri altre cose ancora. L’utente può usarli benissimo ignorando la sintassi di TikZ. Mi serve un diagramma ad albero per uno stemma codicum? Uso il pacchetto relativo. Eccetera. Alcuni sono molto ben fatti.
Ciao
Tommaso
-
13 Marzo 2013 alle 13:33 #72830::
Allora 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…
-
13 Marzo 2013 alle 16:03 #72831::
Ciao Lorenzo,prima che ti risponda qualcuno di più esperto di me, o prima che trovi un’altra soluzione ti propongo la seguente. Purtroppo devo dirti che è necessaria la libreria [tt]\usetikzlibrary{calc}[/tt] (che comunque ritengo indispensabile e irrinunciabile rispetto a tante altre; vediamo che ne pensano quelli esperti).
`\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)+(31.5:.375)$) {$\alpha$};
\node at ($(3,3)+(211.5:.375)$) {$\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}`
[tt]$(x,y)+(ang:dist)$[/tt] determina una coordinata che è distante [tt]dist[/tt] da [tt](x,y)[/tt] e a un angolo [tt]ang[/tt] rispetto all’orizzontale (misurato in senso antiorario). Il fatto è che nel tuo codice [tt]above right[/tt] e similmente [tt]below left[/tt] pongono il testo a 45° e quindi non centrano quello di 63° dato da alpha.Ciao,
Marco.
-
13 Marzo 2013 alle 16:10 #72832::
Ciao,aggiungo una cosa.
lorenzo.pantieriAh, quel “63” l’ho ottenuto con un po’ di geometria analitica, praticamente indispensabile se si usa TikZ…
In realtà quel segmento inclinato potevi tracciarlo usando le coordinate polari e pertanto l’angolo di inclinazione l’avresti deciso tu all’inizio e ti sarebbe stato noto esattamente. Oppure, per tracciare l’ampiezza degli angoli, usando la libreria [tt]tkz-euclide[/tt] e il comando [tt]\tkzDrawArc.[/tt] Altra soluzione sarebbe usare un [tt]\clip…[/tt]
Ciao,
Marco.
-
14 Marzo 2013 alle 11:39 #72833::
Ciao 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!
-
14 Marzo 2013 alle 19:09 #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
-
14 Marzo 2013 alle 19:37 #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
-
15 Marzo 2013 alle 13:05 #72836
-
15 Marzo 2013 alle 13:21 #72837::
Visto 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);`
-
15 Marzo 2013 alle 13:45 #72838::
lorenzo.pantieri” post=82961In particolare, è vero che se devo disegnare due oggetti diversi posso sempre farlo con un’unica istruzione \draw?
Non è sempre vero, ma nel caso dei rettangoli sì. Disegnare tutto con un’unica espressione equivale a non alzare la penna dal foglio (tranne che per le figure chiuse come cerchi e rettangoli); disegnare con più espressioni equivale a fermarsi ogni volta che cambi espressione. TikZ ha tre tipi di estremità delle linee e tre tipi di connessioni tra le linee ([tt]butt[/tt], [tt]rect[/tt] e [tt]round[/tt]). A seconda del tipo scelto, potresti avere risultati differenti.
Confronta ad esempio queste immagini:
`\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfsetroundjoin
\draw (1,1) arc (0:180:1)
arc (90:270:1)
arc (180:360:1)
arc (-90:90:1) — cycle;
\end{tikzpicture}
\begin{tikzpicture}
\pgfsetroundjoin
\draw (1,1) arc (0:180:1);
\draw (-1,1) arc (90:270:1);
\draw (-1,-1) arc (180:360:1);
\draw (1,-1) arc (-90:90:1);
\end{tikzpicture}
\end{document}`
-
16 Marzo 2013 alle 9:56 #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. -
17 Marzo 2013 alle 10:44 #72840::
Ciao a tutti. Ho un grafico definito così:
`\begin{tikzpicture}[scale=0.7]
…
\end{tikzpicture}`
Le proporzioni del grafico sono perfette, ma il grafico è troppo grosso per il mio documento. Come si fa a dire a TikZ “prendi questo grafico e riscalamelo *tutto* (font compresi) in modo da avere una larghezza pari a \textwidth?Grazie,
L.
-
17 Marzo 2013 alle 11:21 #72841::
lorenzo.pantieri” post=83071Ciao a tutti. Ho un grafico definito così:
`\begin{tikzpicture}[scale=0.7]
…
\end{tikzpicture}`
Le proporzioni del grafico sono perfette, ma il grafico è troppo grosso per il mio documento. Come si fa a dire a TikZ “prendi questo grafico e riscalamelo *tutto* (font compresi) in modo da avere una larghezza pari a \textwidth?Grazie,
L.La cosa più semplice è aggiungere la chiave [tt]transform shape[/tt]: `
\begin{tikzpicture}[scale=0.7,transform shape]
…
\end{tikzpicture}
` Esiste anche il pacchetto tikzscale, ma non l’ho mai usato. Altrimenti puoi sempre utilizzare:`
\scalebox{0.5}{\begin{tikzpicture}
…
\end{tikzpicture}
}
`Ciao
Claudio
-
17 Marzo 2013 alle 11:39 #72842::
No, non funziona: l’immagine continua a fuoriuscire dal bordo.
`\documentclass{scrartcl}\usepackage{textcomp}
\usepackage[dvipsnames,pdftex,fixpdftex]{xcolor}
\usepackage{tikz}
\usepackage{lipsum}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{calc}\begin{document}
\lipsum[2]
\begin{figure}
\centering\begin{tikzpicture}[
scale=0.7,transform shape,
annotline/.style = {stealth-},
arrows1loop/.style={->,red},
arrows2loop/.style={->,white},
arrows3loop/.style={->,draw=Gray},
]
\draw[draw=Gray,double=Gray!10,double distance=4pt]
(12,12) to[out=135,in=45](0,12)–(0,0)–(22,0)–(22,12)–(12,12)–(12,0);
\node[text width=4cm, text centered,font=\small] at (6,13)
{Struttura\\di contenimento};
% legend
\begin{scope}[yshift=-2cm]
\filldraw[draw=red,fill=red!10] (1,0) rectangle ++(2,1);
\node[text width=4cm, font=\small,right] at (3,0.5)
{Acqua pressurizzata\\(ciclo primario)};
\filldraw[draw=blue,bottom color=blue!40,top color=Gray!30]
(11,0) rectangle ++(2,1);
\node[text width=4cm, font=\small,right] at (13,0.5)
{Acqua e vapore\\(ciclo secondario)};
\filldraw[draw=Blue,fill=Blue!10] (21,0) rectangle ++(2,1);
\node[text width=4cm, font=\small,right] at (23,0.5)
{Acqua\\(ciclo di raffreddamento)};
\end{scope}
% 2nd loop ——————————————————————–
\begin{scope}[xshift=7.25cm,yshift=3cm]
% vessel left
\filldraw[draw=blue,bottom color=blue!40,top color=Gray!30]
(0,0) to[out=-20,in=200] (3.5,0) —
(3.5,4.5) to[out=120,in=60] (0,4.5) — (0,0);
% vessel right
\filldraw[draw=blue,bottom color=blue!40,top color=Gray!30,xshift=7cm]
(0,0) to[out=-20,in=200] (3.5,0) —
(3.5,5) to[out=120,in=60] (0,5) — (0,0);
% circuits
\draw[draw=blue,double=blue!40,double distance=4pt]
(1.75,-0.3) — ++(0,-1) — ++(7,0) — ++(0,1);
\draw[draw=blue,double=Gray!30,double distance=4pt]
(1.75,5.38) — ++(0,1) — ++(4,0) — ++(0,1) — ++(3,0) — ++(0,-1.5);
% arrows
\draw[arrows2loop] (3.5,-1.3) — (3,-1.3);
\draw[arrows2loop] (1.75,-0.9) — (1.75,-0.4);
\draw[arrows2loop] (4.5,6.38) — (5,6.38);
\draw[arrows2loop] (7,7.38) — (7.5,7.38);
\draw[arrows2loop] (8.75,6.4) — (8.75,5.9);
\draw[arrows2loop] (8.75,-0.4) — (8.75,-0.9);
%
\foreach \x in {0.5,1,…,3}
\draw[arrows2loop,xshift=7cm] (\x,3) — (\x,2.5);
% labels
\draw[annotline] (2.5,-1.3) — ++(3.5,1.3)
node[text width=1cm,font=\small,above] {Liquido};
\draw[annotline] (2.5,6.38) — ++(3.5,-1.3)
node[text width=1cm,font=\small,below] {Vapore};
% pump
\begin{scope}[xshift=160,yshift=-40]
\filldraw[fill=Blue!20,draw=Blue] (0,0) circle (0.5cm);
\node[below,font=\small] at (0,-0.5) {Pump};
\filldraw[fill=Blue!40,draw=Blue,yshift=-0.5cm]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=Blue!40,draw=Blue,yshift=+0.5cm,rotate=180]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=Blue!40,draw=Blue,xshift=+0.5cm,rotate=90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=Blue!40,draw=Blue,xshift=-0.5cm,rotate=-90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\end{scope}
% generator …
\draw[xshift=6.5cm,draw=Gray,double=Gray!10,double distance=4pt]
(3,4) — ++(2,0);
\filldraw[xshift=6.5cm,fill=orange!10,draw=orange]
(1.8,4) — (3.0,3.3) — (3.0,4.7) — cycle;
\filldraw[xshift=6.5cm,fill=orange!10,draw=orange]
(1.5,4) — (2.5,3.4) — (2.5,4.6) — cycle;
\filldraw[xshift=6.5cm,fill=orange!10,draw=orange]
(1.2,4) — (2 ,3.5) — (2 ,4.5) — cycle;
\filldraw[xshift=6.5cm,fill=orange!10,draw=orange]
(4.5,3.3) rectangle (7.3,4.7);
%labels
\node[text width=3cm, text centered,font=\small] at (1.75,4)
{Generatore\\di vapore};
\node[text width=2cm, text centered,font=\small] at (8.8,5) {Turbina};
\node[text width=2cm, text centered,font=\small] at (12.4,4) {Alternatore};
% transmission lines
\node (aa) at (11.1,4.6) {};
\node (bb) at (11.6,4.6) {};
\node (cc) at (12.1,4.6) {};
\node (dd) at (12.6,4.6) {};
\node (ee) at (13.1,4.6) {};
\node (ff) at (13.6,4.6) {};\end{scope}
% 3 loop ——————————————————————–
\begin{scope}[xshift=23cm,yshift=1cm]
% circuit
\draw[draw=Blue,double=Blue!10,double distance=4pt]
(1,2.5) — ++(-8.5,0) — ++(0,+1.5) — ++(8.5,0);
% arrows
\draw[arrows3loop] (-5.5,2.5) — (-6,2.5);
\draw[arrows3loop] (-1.5,2.5) — (-2,2.5);
\draw[arrows3loop] (-6,4) — (-5.5,4);
\draw[arrows3loop] (-2,4) — (-1.5,4);
% tower
\filldraw[draw=Gray,fill=Gray!20] (1,7) to[out=270,in=80]
(0,0) to[out=-20,in=200]
(6,0) to[out=100,in=270]
(5,7);
\filldraw[draw=Gray,fill=Gray!40] (1,7) to[out=30,in=150]
(5,7) to[out=200,in=-20]
(1,7);
% labels
\node[text width=3cm, text centered,font=\small] at (3,3.5)
{Torre\\di raffreddamento};
\node[text width=2cm, text centered,font=\small] at (-3.5,1.5)
{Liquido\\refrigerante};
\node[text width=2cm, text centered,font=\small] at (-5.6,3.25)
{Condensatore};
% pump
\begin{scope}[xshift=-10,yshift=115]
\filldraw[fill=purple!20,draw=purple] (0,0) circle (0.5cm);
\node[below,font=\small] at (0,-0.5) {Pompa};
\filldraw[fill=purple!40,draw=purple,yshift=-0.5cm]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=purple!40,draw=purple,yshift=+0.5cm,rotate=180]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=purple!40,draw=purple,xshift=+0.5cm,rotate=90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=purple!40,draw=purple,xshift=-0.5cm,rotate=-90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\end{scope}
\end{scope}
%1 loop ——————————————————————–
\begin{scope}[xshift=2cm,yshift=4cm]
% Reactor vessel
\filldraw[draw=red,fill=red!10] (0,-0.5) to[out=-20,in=200]
(3.5,-0.5) —
(3.5,4.5) to[out=160,in=20]
(0,4.5) —
(0,-0.5);
% circuit
\draw[draw=red,double=red!10,double distance=4pt]
(0.1,1) — ++(-1,0) — ++(0,-3) — ++(5,0) — ++(0,1.5) —
++(3,0) — ++(0,2) — ++(-3.7,0);
% Pressurizer
\draw[draw=red,double=red!10,double distance=4pt] (4.2,1.6) — ++(0,0.8);
\filldraw[draw=Green,bottom color=red!40,top color=Green!20]
(4,2.4) to[out=-20,in=200]
(4.5,2.4) —
(4.5,3.6) to[out=160,in=20]
(3.9,3.6) —
(3.9,2.4);
% arrows
\draw[arrows1loop] (-0.7,1) — (-0.2,1);
\draw[arrows1loop] (-0.9,-0.5) — (-0.9,0);
\draw[arrows1loop] (0.7,-2) — (0.2,-2);
\draw[arrows1loop] (4.5,1.5) — (5,1.5);
\draw[arrows1loop] (7.1,0.5) — (7.1,0);
\draw[arrows1loop] (5.5,-0.5) — (5,-0.5);% pump
\begin{scope}[xshift=75,yshift=-55,fill=red!20,draw=red]
\filldraw (0,0) circle (0.5cm);
\node[below,font=\small] at (0,-0.5) {Pump};
\filldraw[yshift=-0.5cm] (0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[yshift=+0.5cm,rotate=180]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[xshift=+0.5cm,rotate=90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[xshift=-0.5cm,rotate=-90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\end{scope}
% reactor core
\filldraw[fill=red!30,draw=red] (0.7,0) rectangle (2.8,2);% control rods
\foreach \x in {1.0,1.5,2.0,2.5}
\draw[draw=Gray,double=Gray!50,double distance=0.5pt] (\x,0.3) — (\x,3.7);%labels
\draw[annotline] (0.3,0.5) — ++(-3.3,-1.5)
node[text width=1cm,font=\small,left] {Nucleo \mbox{del reattore}};
\node[text width=2cm, text centered,font=\small] at (1.75,5.4) {Recipiente del reattore};
\draw[annotline] (0.9,2.8) — ++(-3.3,1.5)
node[text width=2cm, text centered,font=\small,left=-8pt] {Barre\\di controllo};
\draw[annotline] (4.2,3.7) — ++(0.5,1.5)
node[text width=2cm, text centered,font=\small,above] {Pressurizzatore};
\draw[annotline] (3.9,1.5) — ++(1.3,-0.6)
node[text width=2.4cm, text centered,below=-2pt,font=\small]
{Refrigerante (330\,\textdegree C)};
\draw[annotline] (-0.1,-2) — ++(-0.3,-0.6)
node[text width=2.4cm, text centered,below=-2pt,font=\small]
{Refrigerante (280\,\textdegree C)};
\end{scope}
% clouds ———————————-
\begin{scope}[xshift=26cm,yshift=10cm, fill=blue!10, draw=Blue,
decoration={bumps,segment length=0.5cm}]
\filldraw[yshift=-1.5cm,rotate=-25,decorate]
(0,0) — ++(-0.4,1.25)– ++(-0.1,0.75)– ++(0.2,0.5)– ++(0.3,0.5)–
++(0.3,-0.5)– ++(0.2,-0.5)– ++(-0.1,-0.75)– ++(-0.4,-1.25);
\filldraw[xshift=0.5cm,yshift=-2cm,rotate=-30,decorate]
(0,0) — ++(-0.4,1.25)– ++(-0.1,0.75)– ++(0.2,0.5)– ++(0.3,0.5)–
++(0.3,-0.5)– ++(0.2,-0.5)– ++(-0.1,-0.75)– ++(-0.4,-1.25);
\filldraw[xshift=-1.05cm,yshift=-2.15cm,rotate=-20,decorate]
(0,0) — ++(-0.4,1.25)– ++(-0.1,0.75)– ++(0.2,0.5)– ++(0.3,0.5)–
++(0.3,-0.5)– ++(0.2,-0.5)– ++(-0.1,-0.75)– ++(-0.4,-1.25);
%labels
\node[text width=1cm, text centered,font=\small] at (0.2,1.5) {Vapor acqueo};
\end{scope}% palo della luce
\begin{scope}[xscale=0.2,xshift=113cm,yshift=19cm,line width=1pt,Brown]
\draw (0,0) — (-6,-6)
(0,0) — ( 6,-6)
(-1,-1) — ( 1,-1)
(-1,-1) — ( 2,-2)
( 1,-1) — (-2,-2)
(-2,-2) — ( 2,-2)
(-2,-2) — ( 3,-3)
( 2,-2) — (-3,-3)
( 3,-3) — (-3,-3)
(-3,-3) — ( 4,-4)
( 3,-3) — (-4,-4)
( 4,-4) — (-4,-4)
(-4,-4) — ( 5,-5)
( 4,-4) — (-5,-5)
( 5,-5) — (-5,-5)
(-6,-6) — ( 0,-5.2)
( 6,-6) — ( 0,-5.2);
\draw (-1.5,-1.5) — (-4,-1.5) — (-1,-1)
( 1.5,-1.5) — ( 4,-1.5) — ( 1,-1);
\path (-4,-1.4) node (a) {}
( 4,-1.4) node (b) {};
\draw[line width=1pt,Brown] (-3.5,-3.5) — (-7.5,-3.5) — (-3,-3)
( 3.5,-3.5) — ( 7.5,-3.5) — ( 3,-3);
\path (-7.5,-3.4) node (c) {}
( 7.5,-3.4) node (d) {}
(-5.5,-3.4) node (e) {}
( 5.5,-3.4) node (f) {};
\end{scope}
% transmission lines
\draw[dashed,Gray] (c) — (aa)
(a) — (bb)
(e) — (cc)
(b) — (dd)
(f) — (ee)
(d) — (ff);
\end{tikzpicture}\caption{Schema di una centrale nucleare.}
\label{fig:centralenucleare}
\end{figure}\end{document}`
-
17 Marzo 2013 alle 12:10 #72843::
Prova con questo:`\documentclass{scrartcl}
\usepackage{textcomp}
\usepackage[dvipsnames,pdftex,fixpdftex]{xcolor}
\usepackage{tikz}
\usepackage{lipsum}
\usetikzlibrary{decorations.pathmorphing}
\usetikzlibrary{calc}\begin{document}
\lipsum[2]
\begin{figure}
\centering\begin{tikzpicture}[
scale=0.4,transform shape,
annotline/.style = {stealth-},
arrows1loop/.style={->,red},
arrows2loop/.style={->,white},
arrows3loop/.style={->,draw=Gray},
]
\draw[draw=Gray,double=Gray!10,double distance=4pt]
(12,12) to[out=135,in=45](0,12)–(0,0)–(22,0)–(22,12)–(12,12)–(12,0);
\node[text width=4cm, text centered,font=\small] at (6,13)
{Struttura\\di contenimento};
% legend
\begin{scope}[yshift=-2cm]
\filldraw[draw=red,fill=red!10] (1,0) rectangle ++(2,1);
\node[text width=4cm, font=\small,right] at (3,0.5)
{Acqua pressurizzata\\(ciclo primario)};
\filldraw[draw=blue,bottom color=blue!40,top color=Gray!30]
(11,0) rectangle ++(2,1);
\node[text width=4cm, font=\small,right] at (13,0.5)
{Acqua e vapore\\(ciclo secondario)};
\filldraw[draw=Blue,fill=Blue!10] (21,0) rectangle ++(2,1);
\node[text width=4cm, font=\small,right] at (23,0.5)
{Acqua\\(ciclo di raffreddamento)};
\end{scope}
% 2nd loop ——————————————————————–
\begin{scope}[xshift=7.25cm,yshift=3cm]
% vessel left
\filldraw[draw=blue,bottom color=blue!40,top color=Gray!30]
(0,0) to[out=-20,in=200] (3.5,0) —
(3.5,4.5) to[out=120,in=60] (0,4.5) — (0,0);
% vessel right
\filldraw[draw=blue,bottom color=blue!40,top color=Gray!30,xshift=7cm]
(0,0) to[out=-20,in=200] (3.5,0) —
(3.5,5) to[out=120,in=60] (0,5) — (0,0);
% circuits
\draw[draw=blue,double=blue!40,double distance=4pt]
(1.75,-0.3) — ++(0,-1) — ++(7,0) — ++(0,1);
\draw[draw=blue,double=Gray!30,double distance=4pt]
(1.75,5.38) — ++(0,1) — ++(4,0) — ++(0,1) — ++(3,0) — ++(0,-1.5);
% arrows
\draw[arrows2loop] (3.5,-1.3) — (3,-1.3);
\draw[arrows2loop] (1.75,-0.9) — (1.75,-0.4);
\draw[arrows2loop] (4.5,6.38) — (5,6.38);
\draw[arrows2loop] (7,7.38) — (7.5,7.38);
\draw[arrows2loop] (8.75,6.4) — (8.75,5.9);
\draw[arrows2loop] (8.75,-0.4) — (8.75,-0.9);
%
\foreach \x in {0.5,1,…,3}
\draw[arrows2loop,xshift=7cm] (\x,3) — (\x,2.5);
% labels
\draw[annotline] (2.5,-1.3) — ++(3.5,1.3)
node[text width=1cm,font=\small,above] {Liquido};
\draw[annotline] (2.5,6.38) — ++(3.5,-1.3)
node[text width=1cm,font=\small,below] {Vapore};
% pump
\begin{scope}[xshift=160,yshift=-40]
\filldraw[fill=Blue!20,draw=Blue] (0,0) circle (0.5cm);
\node[below,font=\small] at (0,-0.5) {Pump};
\filldraw[fill=Blue!40,draw=Blue,yshift=-0.5cm]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=Blue!40,draw=Blue,yshift=+0.5cm,rotate=180]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=Blue!40,draw=Blue,xshift=+0.5cm,rotate=90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=Blue!40,draw=Blue,xshift=-0.5cm,rotate=-90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\end{scope}
% generator …
\draw[xshift=6.5cm,draw=Gray,double=Gray!10,double distance=4pt]
(3,4) — ++(2,0);
\filldraw[xshift=6.5cm,fill=orange!10,draw=orange]
(1.8,4) — (3.0,3.3) — (3.0,4.7) — cycle;
\filldraw[xshift=6.5cm,fill=orange!10,draw=orange]
(1.5,4) — (2.5,3.4) — (2.5,4.6) — cycle;
\filldraw[xshift=6.5cm,fill=orange!10,draw=orange]
(1.2,4) — (2 ,3.5) — (2 ,4.5) — cycle;
\filldraw[xshift=6.5cm,fill=orange!10,draw=orange]
(4.5,3.3) rectangle (7.3,4.7);
%labels
\node[text width=3cm, text centered,font=\small] at (1.75,4)
{Generatore\\di vapore};
\node[text width=2cm, text centered,font=\small] at (8.8,5) {Turbina};
\node[text width=2cm, text centered,font=\small] at (12.4,4) {Alternatore};
% transmission lines
\node (aa) at (11.1,4.6) {};
\node (bb) at (11.6,4.6) {};
\node (cc) at (12.1,4.6) {};
\node (dd) at (12.6,4.6) {};
\node (ee) at (13.1,4.6) {};
\node (ff) at (13.6,4.6) {};\end{scope}
% 3 loop ——————————————————————–
\begin{scope}[xshift=23cm,yshift=1cm]
% circuit
\draw[draw=Blue,double=Blue!10,double distance=4pt]
(1,2.5) — ++(-8.5,0) — ++(0,+1.5) — ++(8.5,0);
% arrows
\draw[arrows3loop] (-5.5,2.5) — (-6,2.5);
\draw[arrows3loop] (-1.5,2.5) — (-2,2.5);
\draw[arrows3loop] (-6,4) — (-5.5,4);
\draw[arrows3loop] (-2,4) — (-1.5,4);
% tower
\filldraw[draw=Gray,fill=Gray!20] (1,7) to[out=270,in=80]
(0,0) to[out=-20,in=200]
(6,0) to[out=100,in=270]
(5,7);
\filldraw[draw=Gray,fill=Gray!40] (1,7) to[out=30,in=150]
(5,7) to[out=200,in=-20]
(1,7);
% labels
\node[text width=3cm, text centered,font=\small] at (3,3.5)
{Torre\\di raffreddamento};
\node[text width=2cm, text centered,font=\small] at (-3.5,1.5)
{Liquido\\refrigerante};
\node[text width=2cm, text centered,font=\small] at (-5.6,3.25)
{Condensatore};
% pump
\begin{scope}[xshift=-10,yshift=115]
\filldraw[fill=purple!20,draw=purple] (0,0) circle (0.5cm);
\node[below,font=\small] at (0,-0.5) {Pompa};
\filldraw[fill=purple!40,draw=purple,yshift=-0.5cm]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=purple!40,draw=purple,yshift=+0.5cm,rotate=180]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=purple!40,draw=purple,xshift=+0.5cm,rotate=90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[fill=purple!40,draw=purple,xshift=-0.5cm,rotate=-90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\end{scope}
\end{scope}
%1 loop ——————————————————————–
\begin{scope}[xshift=2cm,yshift=4cm]
% Reactor vessel
\filldraw[draw=red,fill=red!10] (0,-0.5) to[out=-20,in=200]
(3.5,-0.5) —
(3.5,4.5) to[out=160,in=20]
(0,4.5) —
(0,-0.5);
% circuit
\draw[draw=red,double=red!10,double distance=4pt]
(0.1,1) — ++(-1,0) — ++(0,-3) — ++(5,0) — ++(0,1.5) —
++(3,0) — ++(0,2) — ++(-3.7,0);
% Pressurizer
\draw[draw=red,double=red!10,double distance=4pt] (4.2,1.6) — ++(0,0.8);
\filldraw[draw=Green,bottom color=red!40,top color=Green!20]
(4,2.4) to[out=-20,in=200]
(4.5,2.4) —
(4.5,3.6) to[out=160,in=20]
(3.9,3.6) —
(3.9,2.4);
% arrows
\draw[arrows1loop] (-0.7,1) — (-0.2,1);
\draw[arrows1loop] (-0.9,-0.5) — (-0.9,0);
\draw[arrows1loop] (0.7,-2) — (0.2,-2);
\draw[arrows1loop] (4.5,1.5) — (5,1.5);
\draw[arrows1loop] (7.1,0.5) — (7.1,0);
\draw[arrows1loop] (5.5,-0.5) — (5,-0.5);% pump
\begin{scope}[xshift=75,yshift=-55,fill=red!20,draw=red]
\filldraw (0,0) circle (0.5cm);
\node[below,font=\small] at (0,-0.5) {Pump};
\filldraw[yshift=-0.5cm] (0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[yshift=+0.5cm,rotate=180]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[xshift=+0.5cm,rotate=90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\filldraw[xshift=-0.5cm,rotate=-90]
(0,0) arc (240:180:0.4cm) arc (200:280:0.4cm) ;
\end{scope}
% reactor core
\filldraw[fill=red!30,draw=red] (0.7,0) rectangle (2.8,2);% control rods
\foreach \x in {1.0,1.5,2.0,2.5}
\draw[draw=Gray,double=Gray!50,double distance=0.5pt] (\x,0.3) — (\x,3.7);%labels
\draw[annotline] (0.3,0.5) — ++(-3.3,-1.5)
node[text width=1cm,font=\small,left] {Nucleo \mbox{del reattore}};
\node[text width=2cm, text centered,font=\small] at (1.75,5.4) {Recipiente del reattore};
\draw[annotline] (0.9,2.8) — ++(-3.3,1.5)
node[text width=2cm, text centered,font=\small,left=-8pt] {Barre\\di controllo};
\draw[annotline] (4.2,3.7) — ++(0.5,1.5)
node[text width=2cm, text centered,font=\small,above] {Pressurizzatore};
\draw[annotline] (3.9,1.5) — ++(1.3,-0.6)
node[text width=2.4cm, text centered,below=-2pt,font=\small]
{Refrigerante (330\,\textdegree C)};
\draw[annotline] (-0.1,-2) — ++(-0.3,-0.6)
node[text width=2.4cm, text centered,below=-2pt,font=\small]
{Refrigerante (280\,\textdegree C)};
\end{scope}
% clouds ———————————-
\begin{scope}[xshift=26cm,yshift=10cm, fill=blue!10, draw=Blue,
decoration={bumps,segment length=0.5cm}]
\filldraw[yshift=-1.5cm,rotate=-25,decorate]
(0,0) — ++(-0.4,1.25)– ++(-0.1,0.75)– ++(0.2,0.5)– ++(0.3,0.5)–
++(0.3,-0.5)– ++(0.2,-0.5)– ++(-0.1,-0.75)– ++(-0.4,-1.25);
\filldraw[xshift=0.5cm,yshift=-2cm,rotate=-30,decorate]
(0,0) — ++(-0.4,1.25)– ++(-0.1,0.75)– ++(0.2,0.5)– ++(0.3,0.5)–
++(0.3,-0.5)– ++(0.2,-0.5)– ++(-0.1,-0.75)– ++(-0.4,-1.25);
\filldraw[xshift=-1.05cm,yshift=-2.15cm,rotate=-20,decorate]
(0,0) — ++(-0.4,1.25)– ++(-0.1,0.75)– ++(0.2,0.5)– ++(0.3,0.5)–
++(0.3,-0.5)– ++(0.2,-0.5)– ++(-0.1,-0.75)– ++(-0.4,-1.25);
%labels
\node[text width=1cm, text centered,font=\small] at (0.2,1.5) {Vapor acqueo};
\end{scope}% palo della luce
\begin{scope}[xscale=0.2,xshift=113cm,yshift=19cm,line width=1pt,Brown]
\draw (0,0) — (-6,-6)
(0,0) — ( 6,-6)
(-1,-1) — ( 1,-1)
(-1,-1) — ( 2,-2)
( 1,-1) — (-2,-2)
(-2,-2) — ( 2,-2)
(-2,-2) — ( 3,-3)
( 2,-2) — (-3,-3)
( 3,-3) — (-3,-3)
(-3,-3) — ( 4,-4)
( 3,-3) — (-4,-4)
( 4,-4) — (-4,-4)
(-4,-4) — ( 5,-5)
( 4,-4) — (-5,-5)
( 5,-5) — (-5,-5)
(-6,-6) — ( 0,-5.2)
( 6,-6) — ( 0,-5.2);
\draw (-1.5,-1.5) — (-4,-1.5) — (-1,-1)
( 1.5,-1.5) — ( 4,-1.5) — ( 1,-1);
\path (-4,-1.4) node (a) {}
( 4,-1.4) node (b) {};
\draw[line width=1pt,Brown] (-3.5,-3.5) — (-7.5,-3.5) — (-3,-3)
( 3.5,-3.5) — ( 7.5,-3.5) — ( 3,-3);
\path (-7.5,-3.4) node (c) {}
( 7.5,-3.4) node (d) {}
(-5.5,-3.4) node (e) {}
( 5.5,-3.4) node (f) {};
\end{scope}
% transmission lines
\draw[dashed,Gray] (c) — (aa)
(a) — (bb)
(e) — (cc)
(b) — (dd)
(f) — (ee)
(d) — (ff);
\end{tikzpicture}\caption{Schema di una centrale nucleare.}
\label{fig:centralenucleare}
\end{figure}\end{document}`
A me funziona.
Ciao
Tommaso
-
17 Marzo 2013 alle 12:15 #72844
-
17 Marzo 2013 alle 12:18 #72845::
lorenzo.pantieri” post=83075La modifica che hai introdotto è solo questa
`\begin{tikzpicture}[
scale=0.4,transform shape,`
giusto?In ogni caso, non mi pare che ci siamo, i font vengono troppo piccoli.
Ma tu lamentavi che l’immagine fuoriusciva dal bordo, non parlavi di font. Modificando il valore di [tt]scale[/tt] almeno l’immagine rientra nella gabbia del testo.
Ma siccome non me ne intendo, passo a chi ne sa più di me, cioè tutti 🙂Ciao
Tommaso
-
17 Marzo 2013 alle 12:20 #72846::
lorenzo.pantieri” post=83071Come si fa a dire a TikZ “prendi questo grafico e riscalamelo *tutto* (font compresi) in modo da avere una larghezza pari a \textwidth?
Che vuoi dire con riscalare font compresi? Io capisco che anche i font debbano seguire la riscalatura del disegno, perciò saranno più o meno grandi a seconda che si ingrandisca o rimpicciolisca il disegno. Almeno io leggo questo nel tuo messaggio.
Con Palatino a 10 punti quel disegno sarebbe orribile. I font risulterebbero insolitamente enormi.
Ciao
Tommaso
-
17 Marzo 2013 alle 12:20 #72847::
illinguista1972″ post=83076
Ma tu lamentavi che l’immagine fuoriusciva dal bordo, non parlavi di font. Modificando il valore di [tt]scale[/tt] almeno l’immagine rientra nella gabbia del testo.
Ma siccome non me ne intendo, passo a chi ne sa più di me, cioè tutti 🙂No, parlavo proprio di font:
Le proporzioni del grafico sono perfette, ma il grafico è troppo grosso per il mio documento. Come si fa a dire a TikZ “prendi questo grafico e riscalamelo *tutto* (font compresi) in modo da avere una larghezza pari a \textwidth?
Provo a spiegarmi meglio.
Se compilo l’immagine del reattore a sé e ottengo un bel PDF, posso includerlo nel solido modo:
`\begin{figure}
\centering
\includegraphics[width=\columnwidth]{pressurized-water-reactor}
%\input{codice-reattore}
\caption{Schema di una centrale nucleare.}
\label{fig:centralenucleare}
\end{figure}
`
Vorrei ottenere lo stesso risultato usando il sorgente:`\begin{figure}
\centering
%\includegraphics[width=\columnwidth]{pressurized-water-reactor}
\input{codice-reattore}
\caption{Schema di una centrale nucleare.}
\label{fig:centralenucleare}
\end{figure}
`
dove in codice-reattore c’è, ovviamente, il sorgente che ho postato (copiato dal noto sito di esempi).Ho l’impressione che con la tua soluzione (peraltro valida, complimenti!) i font vengano leggermente più piccoli che passando per l’inclusione del PDF. Ma magari sbaglio io!
-
17 Marzo 2013 alle 12:24 #72848
-
17 Marzo 2013 alle 12:54 #72849::
Ciao,lorenzo.pantieri” post=83073No, non funziona: l’immagine continua a fuoriuscire dal bordo.
Lorenzo, non vedo il problema (e spero di non dire sciocchezze a causa del fatto che non ho capito cosa intendi) e mi sembra naturale che continui a fuoriuscire: evidentemente la larghezza complessiva dell’immagine moltiplicata per [tt].7[/tt] è ancora maggiore della larghezza della gabbia del testo. Basta mettere [tt]scale=.45[/tt] e l’immagine starà nel bordo. L’opzione [tt]transform shape[/tt] funziona proprio come ha detto Claudio: se la usi viene scalato anche il testo, altrimenti viene scalata la sola immagine. Insomma, usando [tt]scale[/tt] e [tt]transform shape[/tt] non trovo alcun problema nel far stare quell’immagine nel bordo (sia con testo scalato che non).
Se mi è permesso, devo dire che non sono molto d’accordo con la scalatura del testo. Spiego le mie ragioni: una delle cose belle dell’usare [tt]TikZ[/tt] è la coerenza che si nota poi fra i vari disegni del documento. Solitamente in un documento si usa una dimensione per il testo principale e poi sottomisure ben precise negli altri casi. Far scalare il testo a [tt]TikZ[/tt] secondo coefficienti arbitrari vuol dire, a mio avviso, perdere quel “rigore” nella scelta delle misure dei caratteri del testo. Certo, nel caso si tratti di un disegno su tutto il documento la cosa si noterà poco, ma nel caso sia applicato a tanti, a mio avviso si perderà un po’ di coerenza. Apprezzo molto il fatto che se voglio scalare di poco un’immagine, il testo possa lasciarlo tale e quale in modo da avere una coerenza con tutti gli altri disegni. Ovviamente questa è solo la mia opinione.
Ciao,
Marco.P.S. Con un’immagine come quella che hai presentato, a mio parere o uno la disegna già su misura per la gabbia del testo (e quindi usa fin dall’inizio la dimensione corretta del carattere) oppure, sapendo di doverla successivamente scalare (e di molto) inserisce un comando personalizzato che gli consenta di scegliere la dimensione del font usato nel testo modificando una sola riga di codice.
-
17 Marzo 2013 alle 13:15 #72850::
lorenzo.pantieri” post=83079Sì, la mia impressione era giusta.

La prima immagine l’ho prodotta con il codice di Tommaso, la seconda compilando con scale=0.7 e includendo il PDF con \includegraphics.
Posso solo esprimere un giudizio estetico, che prescinde da assiomi del tipo “con TikZ bisogna fare così o cosà”. Il primo disegno mi piace più del secondo, lo trovo più genuino anche nei tratti. Certo, con il font un pelo più grande starebbe forse meglio, e do ragione a Lorenzo. Di sicuro, non si può lasciare Palatino a 10 punti come fosse del testo da mettere in una tabella. Come dice Marco, forse bisogna scalare il testo secondo coefficienti precisi e non arbitrari.
Nell’Arte abbiamo fatto di tutto per lasciare il testo nelle tabelle a [tt]\normalsize[/tt], appunto per la coerenza, riducendolo a [tt]\small[/tt] solo in un caso o due. Di sicuro TikZ permetterà di avere il testo inserito in un disegno alle grandezze stabilite dai comandi standard di LaTeX.
Il secondo mi sembra più esile e artificiale, asettico.
Ciao
Tommaso
-
17 Marzo 2013 alle 14:11 #72851
-
17 Marzo 2013 alle 14:30 #72852::
Nell’esempio di Tommaso tu scali al 40% testo e immagine quindi il testo è al 40% del valore non scalato.
Nel tuo esempio, tu scali solo l’immagine al 70% e poi scali testo e immagine alla larghezza della pagina. Ammettendo che il 40% di Tommaso coincida con la larghezza della pagina, tu scali l’immagine al 40% e il testo solo al 57% (4/7), con il risultato che il testo del tuo esempio è quasi 1.5 volte più grande di quello di Tommaso.
Inoltre, il comando [tt]scale[/tt] non riscala lo spessore delle linee, mentre l’opzione passata ad [tt]\includegraphics[/tt] sì. Il risultato è che il disegno di Tommaso ha le linee dello spessore originale, mentre il tuo ha le linee più sottili.Ciao
-
17 Marzo 2013 alle 15:44 #72853::
Ragazzi, non ci capiamo. Provo a spiegarmi meglio.Vorrei inserire nell’articolo su TikZ l’immagine della centrale nucleare qui riportata.
http://www.texample.net/tikz/examples/pressurized-water-reactor/
Come vedete, il sorgente TikZ comincia con
`\begin{tikzpicture}[scale=0.7]
…
Codice della centrale
…
\end{tikzpicture}
`
All’inizio ho proceduto ingenuamente (abbiate pietà): ho preso il PDF risultante, frutto della compilazione del documento a sé, e l’ho incluso nell’articolo nel (per me) solito modo:
`\begin{figure}
\includegraphics[width=\columnwidth]{pressurized-water-reactor}
\end{figure}
`
Il risultato è la figura in basso nell’immagine che ho postato (quella con le scritte in inglese): le scritte sono piccole, ma tutto sommato leggibili.—————-
Tommaso, però, mi ha fatto giustamente osservare che era il caso di avere font compatibili con quelli che usiamo noi (altrimenti perché usare TikZ?) e per far stare la figura nella pagina ha proposto questo codice:
`\begin{figure}
\centering
\input{codice-reattore}
\end{figure}
`
dove codice-reattore comincia così:
`\begin{tikzpicture}[scale=0.4,transform shape]
…
Codice della centrale
…
\end{tikzpicture}
`
Il problema, però, è che in questo secondo modo i font vengono troppo piccoli, illeggibili. Vedete il risultato nell’immagie in alto, quella con le scritte in italiano.——————
Il problema è: indipendentemente da considerazioni estetiche, come posso avere un risultato come quello della figura in basso, senza \includegraphics?
Grazie!
-
17 Marzo 2013 alle 15:54 #72854
-
17 Marzo 2013 alle 16:05 #72855::
La soluzione più semplice (e l’unica che mi venga in mente) mi sembra partire da una dimensione di font più grande di quella usata nel disegno originale. Puoi anche usare il pacchetto [tt]tikzscale[/tt] per scalare l’immagine (mediante [\tt]includegraphics[/tt]) esattamente alla larghezza di pagina. In tal caso nel file originale togli l’opzione [tt]scale[/tt], aggiungi [tt]transform shape[/tt] per scalare anche il testo e aumenta la dimensione dei caratteri.
-
17 Marzo 2013 alle 16:14 #72856::
La soluzione più semplice mi sembra partire da una dimensione di font più grande di quella usata nel disegno originale.
Altra soluzione è aggiungere l’opzione [tt]every node/.style={scale=1.5}[/tt] oltre a [tt]transform shape[/tt] per avere più o meno i caratteri grandi come li volevi tu.Puoi anche usare il pacchetto [tt]tikzscale[/tt] per scalare l’immagine (mediante [tt]includegraphics[/tt]) esattamente alla larghezza di pagina. In tal caso nel file originale togli l’opzione [tt]scale[/tt], e aggiungi [tt]transform shape, every node/.style={scale=1.5}[/tt] per scalare anche il testo.
-
17 Marzo 2013 alle 17:03 #72857
-
24 Marzo 2013 alle 8:00 #72858::
Ciao 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! 🙂
-
24 Marzo 2013 alle 12:21 #72859::
lorenzo.pantieri” post=834221. 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)?Che io sappia la sintassi “base” per definire un nodo è [tt]\path node[/tt], non all’interno di un [tt]\draw[/tt]. [tt]\node[/tt] è un’abbreviazione di [tt]\path node[/tt]. Il nome del nodo ([tt](A)[/tt] e [tt](B)[/tt] nel tuo esempio) non è obbligatorio (neanche la coordinata in realtà, se non la indichi ti mette il nodo nell’origine), l’unica cosa obbligatoria è l’etichetta fra parentesi graffe, eventualmente vuota.
lorenzo.pantieri” post=83422
2. I codici
`\draw [fill=red,draw=red] (1,1) circle (0.5);`
e
`\fill [red] (1,1) circle (0.5);`
sono equivalenti?Credo che non siano completamente equivalenti. [tt]\draw[/tt] è l’abbreviazione di [tt]\path[draw][/tt], [tt]\fill[/tt] è l’abbreviazione di [tt]\path[fill][/tt], [tt]\filldraw[/tt] è l’abbreviazione di [tt]\path[fill,draw][/tt]. Nel tuo caso coincidono perché hai usato lo stesso colore, in generale [tt]\draw[fill=
,draw= ][/tt] sono diversi. lorenzo.pantieri” post=83422
3. Perché con la chiave scale viene riscalato il disegno, ma non il testo?
`\begin{tikzpicture} [scale=3]`[tt]scale[/tt] moltiplica solo le coordinate per il fattore di scala, non tocca il testo
lorenzo.pantieri” post=83422
4. Come riprodurre con TikZ nel modo ottimale il disegnino seguente?
Passo 🙂 In realtà la cosa più fastidiosa di questo disegno è l’etichetta per l’angolo, non ho ancora trovato un metodo efficiente generale che metta l’etichetta a metà dell’arco,[tt]arc[/tt] non accetta nodi partway (ma forse in una delle prossime versioni di pgf sì), altre soluzioni che si trovano su internet sono spesso inutilmente complicate secondo me, finisco spesso per mettere le etichette degli archi manualmente. Gli altri elementi sono tutti piuttosto semplici da realizzare, sono tutte linee
-
24 Marzo 2013 alle 12:58 #72860::
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
-
24 Marzo 2013 alle 13:06 #72861::
Ciao,lorenzo.pantieri3. Perché con la chiave scale viene riscalato il disegno, ma non il testo?
`\begin{tikzpicture} [scale=3]`A questa ha già risposto Elrond. Io aggiungo che questa è una cosa che apprezzo molto in [tt]TikZ;[/tt] se fosse diversamente mi darebbe alquanto fastidio. Ho già spiegato perché la penso così.
lorenzo.pantieri4. Come riprodurre con TikZ nel modo ottimale il disegnino seguente?
Ti mostro un codice permette di rendere quel disegnino. Tuttavia, non è esattamente il codice che userei io e non credo che sia quello di cui eri in cerca. Lo mostro solo perché comunque potrebbe dare qualche informazione utile a chi ne sa meno di me di [tt]TikZ[/tt] (fermo restando che fra tutti quelli che usano [tt]TikZ[/tt] qui sul forum sono, se non quello che ne sa di meno, tra quelli meno esperti).
`\begin{tikzpicture}
% definizioni
\def\ang{35}
\def\raggio{1.2}% coordinate
\coordinate (ix) at (-1,0); %inizio x
\coordinate [label=90:$x$] (fx) at (3,0); %fine x
\coordinate (iy) at (0,-1); %inizio y
\coordinate [label=180:$y$] (fy) at (0,3); %fine y\coordinate (o) at (0,0); %origine
\coordinate [label=\ang:$P$] (p) at (\ang:2); %punto P
\coordinate (o') at ($(o)!.3cm!90:(p)$); %punto o'
\coordinate (p') at ($(p)!.3cm!-90:(o)$); %punto p'
\coordinate [label=\ang+90:$\ell$] (elle) at ($(o')!.5!(p')$); %punto elle% angolo
\draw [gray, fill=gray!35] (o) — +(\raggio,0) arc (0:\ang:\raggio);
\node at ($(o)+(\ang/2:.75*\raggio)$) {$\alpha$};% assi
\draw \(\) (ix) — (fx);
\draw \(\) (iy) — (fy);% segmento o–p
\draw (o) — (p);
\draw [decorate,decoration=brace] (o') — (p');
\fill (p) circle (1.2pt);\end{tikzpicture}`
Il codice che userei io credo che ti sembrerebbe inutilmente complicato (ma anche su questo mi sono già spiegato). Quindi, per avere una risposta soddisfacente credo che dovrai (e dovrò, perché sono sempre curioso di vedere come lo fanno loro) aspettare i veri guru di [tt]TikZ.[/tt]Ciao e buono studio/divertimento!
Marco.
-
24 Marzo 2013 alle 13:11 #72862
-
24 Marzo 2013 alle 17:02 #72863
-
28 Marzo 2013 alle 10:57 #72864::
Carissimi, l’articolo su TikZ procede a piccoli passi, ma procede. Qualche dubbio.1.
Dire (come ho trovato scritto in Rete) che
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (8,4);
\draw [thick,red] (0,0) parabola (2,4);
\end{tikzpicture}`
disegna “l’arco di parabola che congiunge (0,0) e (2,4)” è un non-sesno, visto che di archi di parabola congiungenti (quei) due punti ce ne sono infiniti. Vediamo se ho capito bene.
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (8,4);
\draw [thick,red] (0,0) parabola (2,4);
\draw [thick,green] (3,0) parabola bend (4.5,5) (5,4);
\draw [thick,blue] (6,0) parabola [bend at end] (8,4);
\end{tikzpicture}`
La prima istruzione disegna l’arco di parabola di punto iniziale (0,0) e finale (2,4): la parabola ha asse verticale e vertice in (0, 0).
La seconda istruzione disegna l’arco di parabola di punto iniziale (3, 0) e finale (5, 4): la parabola ha asse verticale e vertice (bend) in (4.5, 5).
La terza istruzione disegna l’arco di parabola di punto iniziale (6,0) e finale (8,4) con vertice in (8, 4). Giusto?2.
La chiave rotate.
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\draw [dashed,gray] (0,0) rectangle (2,2);
\draw [rotate=45] (0,0) rectangle (2,2);
\draw [->] (1,0) arc (0:45:1);
\end{tikzpicture}`
Non ho capito, in generale, qual è il centro della rotazione. Nell’esempio considerato è chiaro che è l’origine, ma in generale?3.
La sintassi dell’istruzione arc mi risulta un po’ oscura:
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\draw [->] (2,0) arc (0:90:2);
\end{tikzpicture}`
L’arco di raggio 2 comincia nel punto (2,0) -e questo mi è chiaro. Gli angoli iniziale e finale sono 0° e 90°, rispettivamente. Solo che non so come spiegare bene al mio lettore (sicuramente perché non li ho capiti bene io!) quegli angoli: angoli tra cosa e cosa?
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\draw [dashed] (1,1) circle (1);
\draw (2,1) circle (2pt)
(1,2) circle (3pt)
(1,0) circle (4pt);
\draw [->,thick] (2,1) arc (0:45:1);
\draw [->,thick] (1,2) arc (90:180:1);
\draw [->,thick] (1,0) arc (270:225:1);
\end{tikzpicture}
`4.
Di questo esempio (trovato in Rete):
`\begin{tikzpicture}
\draw [style=help lines] (0,0) grid (3,4);
\draw [<->] (0,4) node{$y$}
— (0,0)
— (3,0) node [below] {$x$};
\draw (-.5,.25) parabola bend (0,0) (2,4) node [below right] {$x^2$};
\shade [top color=blue,bottom color=gray!20] (0,0) parabola (1.5,2.25) |- (0,0);
\draw (2,1) node{$\displaystyle\int_0^{3/2} x^2 dx$};
\end{tikzpicture}`
non ho capito la sintassi della riga
`\shade [top color=blue,bottom color=gray!20] (0,0) parabola (1.5,2.25) |- (0,0);`
In ogni caso, il risultato non mi pare impeccabile, visto che l’asse x è in parte coperto dalla zona ombreggiata e in parte no. Mi sbaglio?Grazie anticipate,
L.
-
28 Marzo 2013 alle 11:19 #72865::
Ciao,rispondo relativamente al punto 4. Il codice
`\shade [top color=blue,bottom color=gray!20] (0,0) parabola (1.5,2.25) |- (0,0);`
vuol dire che riempie il percorso tracciato con una sfumatura (con progressione lineare se non sbaglio) che va dal grigio (in basso) al blu (in alto). Prova a cambiare [tt]top[/tt] e [tt]bottom[/tt] con [tt]left[/tt] e [tt]right.[/tt] L’asse della sfumatura (nel tuo caso verticale) è normale alla direzione data dai due estremi che fornisci (nel tuo caso [tt]top[/tt] e [tt]bottom[/tt]). Sempre che abbia capito cosa intendevi.Per quanto riguarda il disegno, direi che è sbagliato l’ordine con cui vengono disegnate le varie parti del disegno. Se usi questo (ho cambiato solo l’ordine delle righe del tuo codice):
`\begin{tikzpicture}
\draw [style=help lines] (0,0) grid (3,4);\shade [top color=blue,bottom color=gray!20] (0,0) parabola (1.5,2.25) |- (0,0);
\draw [<->] (0,4) node
{$y$}
— (0,0)
— (3,0) node [below] {$x$};
\draw (-.5,.25) parabola bend (0,0) (2,4) node [below right] {$x^2$};
\draw (2,1) node{$\displaystyle\int_0^{3/2} x^2 dx$};
\end{tikzpicture}`
vedrai che il risultato è impeccabile. Quello che non andava era che il riempimento copriva metà della parabola e degli assi (il riempimento arriva sino all’asse delle linee che definiscono il percorso riempito).Potrebbe essere una buona idea fare in modo che la scritta non sia attraversata dalla griglia del grafico. In tal caso una soluzione sarebbe usare:
`\draw (2,1) node [fill=white, right] {$\displaystyle\int_0^{3/2} x^2 dx$};`Ciao,
Marco.P.S. Trovo che il comando [tt]arc[/tt] sia comodo solo in rari e particolari casi. Troverei molto più comodo un comando che funzioni un po’ come un compasso. Chiedo le vostre opinioni in merito. È vero che la libreria [tt]tkzeuclide[/tt] ha un comando del genere, ma questo non è utilizzabile nella composizione di un percorso unico insieme a vari altri tratti. Credete che potrebbe essere una buona idea chiedere agli autori del pacchetto se fosse possibile implementare un comando del genere?
-
28 Marzo 2013 alle 12:10 #72866::
Grazie della risposta. In realtà non capisco bene la parte finale di quella riga.
`|- (0,0);`Marco87P.S. Trovo che il comando [tt]arc[/tt] sia comodo solo in rari e particolari casi. Troverei molto più comodo un comando che funzioni un po’ come un compasso. Chiedo le vostre opinioni in merito. È vero che la libreria [tt]tkzeuclide[/tt] ha un comando del genere, ma questo non è utilizzabile nella composizione di un percorso unico insieme a vari altri tratti. Credete che potrebbe essere una buona idea chiedere agli autori del pacchetto se fosse possibile implementare un comando del genere?
Quello che mi risulta non intuitivo del comando arc è che il centro della circonferenza… non c’è. Se io dovessi dire a qualcuno di disegnare un arco gli direi una cosa del genere:
Considera la circonferenza di centro $(1,2)$ e raggio $3$. In essa, prendi l’arco compreso tra 20 e 30 gradi (angoli misurati rispetto alla direzione positiva dell’asse x).
Quindi la sintassi di TikZ, in cui c’è il punto iniziale dell’arco ma non il centro della circonferenza, mi risulta ostica.
-
28 Marzo 2013 alle 12:18 #72867::
Ciao Lorenzo,in realtà devi considerare questo codice:
`(1.5,2.25) |- (0,0)`
Al posto di [tt]\shade[/tt] considera [tt]\draw.[/tt] Detto ciò, quella parte del codice vuol dire che dal punto in cui finisce la parabola [tt](1.5,2.25)[/tt] traccia un segmento sino al punto che ha la stessa ascissa di [tt](1.5,2.25)[/tt] e la stessa ordinata di [tt](0,0)[/tt] e poi da questo a [tt](0,0).[/tt] In altri termini i due punti in questione vengono uniti con due segmenti diretti uno verticalmente (prima) e l’altro orizzontalmente (dopo). (Se inverti [tt]|-[/tt] con [tt]-|[/tt] succederà il contrario.) Con [tt]\shade[/tt] l’unica cosa che cambia è che invece di tracciare il percorso, lo riempie.Prova a invertire [tt]|-[/tt] con [tt]-|[/tt] e vedrai che dal punto [tt](1.5,2.25)[/tt] il segmento che parte sarà orizzontale.
Concordo pienamente sulla questione dell’arco. Per il momento uso [tt]arc[/tt] solo quando non impazzisco a capire che valori inserire e uso invece il comando fornito dalla libreria [tt]tkzeuclide.[/tt] Sto seriamente considerando l’idea di proporre questa cosa agli autori di [tt]TikZ.[/tt]
Ciao,
Marco.
-
28 Marzo 2013 alle 12:30 #72868::
lorenzo.pantieri” post=83596Carissimi, l’articolo su TikZ procede a piccoli passi, ma procede. Qualche dubbio.
2.
La chiave rotate.
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\draw [dashed,gray] (0,0) rectangle (2,2);
\draw [rotate=45] (0,0) rectangle (2,2);
\draw [->] (1,0) arc (0:45:1);
\end{tikzpicture}`
Non ho capito, in generale, qual è il centro della rotazione. Nell’esempio considerato è chiaro che è l’origine, ma in generale?L.
A quanto capisco dal manuale di TikZ esistono diversi tipi di sistemi di coordinate:
- canvas
- canvas polar
- xyz polar
- xy polar
- brycentric
- node
- …
ai quali si può fare riferimento in modo esplicito o implicito.
Nel tuo codice il riferimento è implicito visto che manca un codice del tipo:
`\draw (canvas cs: …) rectangle … `Detto questo la risposta è che dipende dal sistema di coordinate che si usano.
Tieni presente che uno può definirsi un suo sistema di coordinate come indicato a pagina 130 del manuale.
Non so se sono stato d’aiuto.
Saluti
-
28 Marzo 2013 alle 14:02 #72869::
`\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\draw [dashed,gray] (0,0) rectangle (2,2);
\draw [rotate=45] (0,0) rectangle (2,2);
\draw [->] (1,0) arc (0:45:1);
\end{tikzpicture}`alegenn” post=83604
Detto questo la risposta è che dipende dal sistema di coordinate che si usano.Dire che “il centro di rotazione dipende dal sistema scelto” non mi sembra una risposta valida. Nel codice (ben preciso!) che ho proposto, qual è il centro di rotazione? Perché? Se non si specifica alcun sistema di riferimento e si dice solo “\draw [rotate=45] … “, qual è il centro di rotazione?
Altro dubbio.
Ho appena scoperto che il codice
`\draw (0,0) — node [below] {$4$ cm} (4,0);`
produce un nodo al centro del segmento. È sempre vero? In altre parole, se si dà l’istruzione “node” prima e non dopo il punto finale di un segmento, il nodo viene sempre piazzato a metà del segmento?Grazie!
-
28 Marzo 2013 alle 14:05 #72870
-
28 Marzo 2013 alle 14:14 #72871::
Nel punto 1 hai detto tutto bene. Come hai osservato, la direttrice è sempre orizzontale. Direi semplicemente “estremi” e non “punto iniziale/finale” perché possono anche essere scambiati e la parabola viene tracciata ugualmente. Ovviamente esiste al più una parabola che soddisfa quelle condizioni. Quando il vertice non è uno dei due estremi e il problema non ammette soluzione, credo che vengano tracciate le due parabole che soddisfano la condizione sul vertice e su uno dei due estremi alternativamente.Nel punto 2 il perno di rotazione è l’origine del sistema di coordinate. Se l’opzione è data all’interno di un nodo, il perno di rotazione è la coordinata del nodo, come ha osservato @alegenn.
Punto 3. La sintassi di [tt]arc[/tt] richiede un estremo dell’arco semplicemente perché in tal modo si può “attaccare” ad altri eventuali oggetti nel percorso. Gli angoli sono l’angolo di partenza e di arrivo (con la convenzione della goniometria) sulla circonferenza alla quale l’arco appartiene. Tale circonferenza è univocamente determinata dalla coordinata di uno degli estremi + angolo corrispondente + raggio della circonferenza, mentre l’altro angolo serve solo ad individuare l’arco.
Come si determina la circonferenza (costruzione geometrica con squadre, compasso e goniometro)? Tracciata la circonferenza con centro in uno dei due estremi e raggio assegnato, si traccia il “diametro” con inclinazione pari all’angolo corrispondente. Di questo diametro si individua l’unico estremo che “vede” il centro della circonferenza sotto l’angolo assegnato (se preferisci, la “scocca” del vettore diametro determinato). Tale punto è il centro della circonferenza.
Analiticamente, indicato con \(P(x_P,y_P)\) l’estremo assegnato dell’arco, con \(r\) il raggio dell’arco, con \(\phi_P\) e \(\phi_Q\) gli angoli associati agli estremi dell’arco e con \(C(x_C,y_C)\) il centro (non noto) della circonferenza che contiene l’arco, un generico punto dell’arco ha coordinate \(N(x_C+r\cos\phi, y_C+r\sin\phi)\). Dovendo \(P\) appartenere all’arco, è facile verificare che \(x_P=x_C+r\cos\phi_P\) e \(y_P=y_C+r\sin\phi_P\), quindi le coordinate del centro della circonferenza sono \(C(x_P-r\cos\phi_P, y_P-r\sin\phi_P)\).
Osservazione: quando si vuole tracciare un arco su una circonferenza di centro noto, si può usare l’espressione delle coordinate di \(P\) per determinare uno degli estremi dell’arco.Il punto 4 mi sembra risolto.
Ciao
-
28 Marzo 2013 alle 14:24 #72872::
lorenzo.pantieri” post=83608Altro dubbio.
`\begin{tikzpicture}
\draw [thick] (0,0) arc (270:90:0.5 and 1.5);
\draw [dashed,color=gray] (0,0) arc (-90:90:0.5 and 1.5);
\end{tikzpicture}`
Se volessi colorare l’interno dell’ellisse, come dovrei fare?Senz’altro esistono soluzioni più eleganti, ma:
`\begin{tikzpicture}
\draw [thick,fill=gray] (0,0) arc (270:90:0.5 and 1.5);
\draw [dashed,fill=gray,color=gray] (0,0) arc (-90:90:0.5 and 1.5);
\end{tikzpicture}`Per il tuo post precedente, che io sappia quando si usa un nodo, il suo centro funge da centro del sistema di coordinate.
Ciao
-
28 Marzo 2013 alle 15:09 #72873::
Liverpool” post=83609Nel punto 1 hai detto tutto bene. Come hai osservato, la direttrice è sempre orizzontale. Direi semplicemente “estremi” e non “punto iniziale/finale” perché possono anche essere scambiati e la parabola viene tracciata ugualmente. Ovviamente esiste al più una parabola che soddisfa quelle condizioni. Quando il vertice non è uno dei due estremi e il problema non ammette soluzione, credo che vengano tracciate le due parabole che soddisfano la condizione sul vertice e su uno dei due estremi alternativamente.
Ottimo: accoglierò il tuo suggerimento, ovviamente!
Liverpool” post=83609
Nel punto 2 il perno di rotazione è l’origine del sistema di coordinate. Se l’opzione è data all’interno di un nodo, il perno di rotazione è la coordinata del nodo, come ha osservato @alegenn.Perfetto.
Liverpool” post=83609
Punto 3. La sintassi di [tt]arc[/tt] richiede un estremo dell’arco semplicemente perché in tal modo si può “attaccare” ad altri eventuali oggetti nel percorso. Gli angoli sono l’angolo di partenza e di arrivo (con la convenzione della goniometria) sulla circonferenza alla quale l’arco appartiene. Tale circonferenza è univocamente determinata dalla coordinata di uno degli estremi + angolo corrispondente + raggio della circonferenza, mentre l’altro angolo serve solo ad individuare l’arco.
Come si determina la circonferenza? Tracciata la circonferenza con centro in uno dei due estremi e raggio assegnato, si traccia il “diametro” con inclinazione pari all’angolo corrispondente. Di questo diametro si individua l’unico estremo che “vede” il centro della circonferenza sotto l’angolo assegnato (se preferisci, la “scocca” del vettore diametro determinato). Tale punto è il centro della circonferenza.Ok, era quello che sospettavo. Sta di fatto che non dare il centro della circonferenza mi pare poco naturale (e la procedura che descrivi per trovarlo non è di certo immediata), ma il motivo è senz’altro quello che hai detto: così si può “attaccare” ad altri eventuali oggetti nel percorso. È la filosofia di TikZ, in cui ogni figura, in definitiva, è formata da uno o più percorsi.
Liverpool” post=83609
Il punto 4 mi sembra risolto.Ok.
Grazie mille! 🙂
La bozza dell’articolo è a un buon punto: fra qualche giorno lo passo a Tommaso che lo trasformerà in un articolo “vero”. Dopo di che, come già fatto per pgfplots, la tua/vostra supervisione sarà più che benvenuta…
-
28 Marzo 2013 alle 15:14 #72874::
Aggiungo solo un paio di particolari alle già esaurienti risposte che hai ricevuto.1. Marco dice bene che cambiando l’ordine del codice si ottiene un risultato migliore. Se non vuoi essere costretto a cambiare ordine devi ricorrere alla libreria [tt]backgrounds[/tt]:`
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}
\draw [style=help lines] (0,0) grid (3,4);
\draw [<->] (0,4) node{$y$}
— (0,0)
— (3,0) node [below] {$x$};
\draw (-.5,.25) parabola bend (0,0) (2,4) node [below right] {$x^2$};
\begin{scope}[on background layer]
\shade [top color=blue,bottom color=gray!20] (0,0) parabola (1.5,2.25) |- (0,0);
\end{scope}
\draw (2,1) node{$\displaystyle\int_0^{3/2} x^2 dx$};
\end{tikzpicture}
\end{document}
` oppure: `
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\begin{document}
\begin{tikzpicture}
\draw [style=help lines] (0,0) grid (3,4);
\draw [<->] (0,4) node{$y$}
— (0,0)
— (3,0) node [below] {$x$};
\draw (-.5,.25) parabola bend (0,0) (2,4) node [below right] {$x^2$};
\begin{pgfonlayer}{background}
\shade [top color=blue,bottom color=gray!20] (0,0) parabola (1.5,2.25) |- (0,0);
\end{pgfonlayer}
\draw (2,1) node{$\displaystyle\int_0^{3/2} x^2 dx$};
\end{tikzpicture}
\end{document}
` sono esattamente la stessa cosa del codice proposto da Marco.2. Per colorare l’interno puoi fare così: `
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw [fill=red!10,thick] (0,0) arc (270:90:0.5 and 1.5);
\draw [gray,fill=red!10,dashed] (0,0) arc (-90:90:0.5 and 1.5);
\end{tikzpicture}
\end{document}
` Non è il massimo, ma funziona. Nota: se usi [tt]color=gray[/tt] è come se dicessi [tt]draw=gray,fill=gray,text=gray[/tt] perciò per avere lo sfondo di colore diverso devi sovrascrivere la chiave [tt]fill[/tt] specificando dopo quale valore assume. Io evito [tt]color=[/tt]: se metti direttamente il colore ha lo stesso significato.Soluzione migliore per l’ellisse: usare la forma [tt]ellipse[/tt] dalla libreria [tt]shapes.geometric[/tt] oppure il path [tt]ellipse[/tt]. Un esempio del secondo tipo: `
\begin{tikzpicture}
\draw[fill=red!10] (0,0) ellipse [x radius=1cm,y radius=.5cm,rotate=90];
\end{tikzpicture}
`Ciao
Claudio
-
28 Marzo 2013 alle 17:09 #72875
-
28 Marzo 2013 alle 18:22 #72876::
lorenzo.pantieri” post=83616la procedura che descrivi per trovarlo non è di certo immediata
E’ la costruzione geometrica con squadre, compasso e goniometro. Nel caso dell’arco di ellisse la situazione si complica, perché gli angoli associati agli estremi vanno determinati a partire dalla circonferenza concentrica di diametro pari alla lunghezza dell’asse verticale e “proiettati” orizzontalmente sull’ellisse.
Questo esempio chiarirà:
`\documentclass{standalone}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}[>=latex, font=\scriptsize]
\draw [->] (-2.3,0) — (2.3,0); % asse x
\draw [->] (0,-1.3) — (0,1.3); % asse y
\draw [gray] (0,0) — (30:1.8); % raggio vettore
\node at (0.7,0.16) {$30^\circ$}; % etichetta dell'angolo
\draw [->, gray, dashed] (-2.2,0.5) — (2.2,0.5); % linea di proiezione
\draw [->] (1,0) arc (0:30:1); % arco sulla circonferenza
\draw [opacity=0.4] (1,0) arc (360:30:1); % completamento della circonferenza
\draw [->, red, thick] (2,0) arc (0:30:2 and 1); % arco proiettato sull'ellisse
\draw [red, opacity=0.4] (2,0) arc (360:30:2 and 1); % completamento dell'ellisse
\node at (0,-1.5) {\verb!(2,0) arc (0:30:2 and 1)!}; % didascalia
%
\begin{scope}[xshift=5cm] % trasla il contenuto di 5 cm verso destra
\draw [->] (-2.3,0) — (2.3,0); % asse x
\draw [->] (0,-2.3) — (0,2.3); % asse y
\draw [gray] (0,0) — (150:2.3); % raggio vettore
\node at (0.17,0.2) {$150^\circ$}; % etichetta dell'angolo
\draw [->, gray, dashed] (2,1) — (-2,1); % linea di proiezione
\draw [->] (2,0) arc (0:150:2); % arco sulla circonferenza
\draw [opacity=0.4] (2,0) arc (360:150:2); % completamento della circonferenza
\draw [->, red, thick] (1,0) arc (0:150:1 and 2); % arco proiettato sull'ellisse
\draw [red, opacity=0.4] (1,0) arc (360:150:1 and 2); % completamento dell'ellisse
\node at (0,-1.5) {\verb!(1,0) arc (0:150:1 and 2)!}; % didascalia
\end{scope}
\end{tikzpicture}
\end{document}`[attachment=646]prova2_2013-03-29.png[/attachment]
Da qui in poi il commento è in itinere
A questo punto la prima domanda è: che relazione esiste tra l’angolo (assegnato) sulla circonferenza concentrica \(\phi\) e l’angolo effettivo sull’ellisse \(\theta\)?
Consideriamo circonferenza ed ellisse nell’origine perché, dato che ci serve la relazione tra gli angoli, un’eventuale traslazione non ha alcun effetto. L’equazione cartesiana dell’ellisse sia: \[\frac{x^2}{a^2}+\frac{y^2}{b^2}=1\]
Poiché il raggio della circonferenza è \(b\), l’estremo libero dell’arco sulla circonferenza ha coordinate \(P(b\cos\phi,b\sin\phi)\). Allora l’estremo libero dell’arco sull’ellisse si determina intersecando la stessa con la retta di equazione \(y=b\sin\phi\) e si ottiene \(x_{1,2}=\pm a\cos\phi\). Va da sé che la soluzione che ci interessa è quella che ha lo stesso segno di \(\cos\phi\), dunque \(x=a\cos\phi\). Quindi il punto proiettato sull’ellisse ha coordinate \(P'(a\cos\phi,b\sin\phi)\). Allora l’angolo effettivo sull’ellisse è: \[\theta=\arg(a\cos\phi+ib\sin\phi)\]e di conseguenza:\[\phi=\arg(b\cos\theta+ia\sin\theta)\]
La seconda domanda è: come costruisco l’ellisse?
La costruzione può essere realizzata con squadre, compasso ed eventualmente goniometro (senza calcolatrice). Si traccia la circonferenza con centro in \(P’\) (assegnato) e raggio \(CP’\) (essendo noti \(a\), \(b\) e \(\phi\), dove \(C\) indica il centro dell’ellisse. Si determina l’angolo \(\theta\) e si traccia per \(P’\) il diametro orientato con inclinazione pari a \(\theta\). La scocca del diametro è il centro \(C\) dell’ellisse della quale sono note anche le lunghezze degli assi.Ciao
Attachments:
You must be logged in to view attached files. -
29 Marzo 2013 alle 13:04 #72877::
lorenzo.pantieri” post=83616la procedura che descrivi per trovarlo non è di certo immediata
E’ la costruzione geometrica con squadre, compasso e goniometro. Nel caso dell’arco di ellisse la situazione si complica, perché gli angoli associati agli estremi vanno determinati a partire dalla circonferenza concentrica di diametro pari alla lunghezza dell’asse verticale e “proiettati” orizzontalmente sull’ellisse.
Questo esempio chiarirà:
`\documentclass{standalone}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}[>=latex, font=\scriptsize]
\draw [->] (-2.3,0) — (2.3,0); % asse x
\draw [->] (0,-1.3) — (0,1.3); % asse y
\draw [gray] (0,0) — (30:1.8); % raggio vettore
\node at (0.7,0.16) {$30^\circ$}; % etichetta dell'angolo
\draw [->, gray, dashed] (-2.2,0.5) — (2.2,0.5); % linea di proiezione
\draw [->] (1,0) arc (0:30:1); % arco sulla circonferenza
\draw [opacity=0.4] (1,0) arc (360:30:1); % completamento della circonferenza
\draw [->, red, thick] (2,0) arc (0:30:2 and 1); % arco proiettato sull'ellisse
\draw [red, opacity=0.4] (2,0) arc (360:30:2 and 1); % completamento dell'ellisse
\node at (0,-1.5) {\verb!(2,0) arc (0:30:2 and 1)!}; % didascalia
%
\begin{scope}[xshift=5cm] % trasla il contenuto di 5 cm verso destra
\draw [->] (-2.3,0) — (2.3,0); % asse x
\draw [->] (0,-2.3) — (0,2.3); % asse y
\draw [gray] (0,0) — (150:2.3); % raggio vettore
\node at (0.17,0.2) {$150^\circ$}; % etichetta dell'angolo
\draw [->, gray, dashed] (2,1) — (-2,1); % linea di proiezione
\draw [->] (2,0) arc (0:150:2); % arco sulla circonferenza
\draw [opacity=0.4] (2,0) arc (360:150:2); % completamento della circonferenza
\draw [->, red, thick] (1,0) arc (0:150:1 and 2); % arco proiettato sull'ellisse
\draw [red, opacity=0.4] (1,0) arc (360:150:1 and 2); % completamento dell'ellisse
\node at (0,-1.5) {\verb!(1,0) arc (0:150:1 and 2)!}; % didascalia
\end{scope}
\end{tikzpicture}
\end{document}`[attachment=646]prova2_2013-03-29.png[/attachment]
A questo punto la prima domanda è: che relazione esiste tra l’angolo (assegnato) sulla circonferenza concentrica \(\phi\) e l’angolo effettivo sull’ellisse \(\theta\)?
Consideriamo circonferenza ed ellisse nell’origine perché, dato che ci serve la relazione tra gli angoli, un’eventuale traslazione non ha alcun effetto. L’equazione cartesiana dell’ellisse sia: \[\frac{x^2}{a^2}+\frac{y^2}{b^2}=1\]
Poiché il raggio della circonferenza è \(b\), l’estremo libero dell’arco sulla circonferenza ha coordinate \(P(b\cos\phi,b\sin\phi)\). Allora l’estremo libero dell’arco sull’ellisse si determina intersecando la stessa con la retta di equazione \(y=b\sin\phi\) e si ottiene \(x_{1,2}=\pm a\cos\phi\). Va da sé che la soluzione che ci interessa è quella che ha lo stesso segno di \(\cos\phi\), dunque \(x=a\cos\phi\). Quindi il punto proiettato sull’ellisse ha coordinate \(P'(a\cos\phi,b\sin\phi)\). Allora l’angolo effettivo sull’ellisse è: \[\theta=\arg(a\cos\phi+ib\sin\phi)\]e di conseguenza:\[\phi=\arg(b\cos\theta+ia\sin\theta)\]
La seconda domanda è: come costruisco l’ellisse?
La costruzione può essere realizzata con squadre, compasso ed eventualmente goniometro (senza calcolatrice). Si traccia la circonferenza con centro in \(P’\) (assegnato) e raggio \(CP’\) (essendo noti \(a\), \(b\) e \(\phi\), dove \(C\) indica il centro dell’ellisse. Si determina l’angolo \(\theta\) e si traccia per \(P’\) il diametro orientato con inclinazione pari a \(\theta\). La scocca del diametro è il centro \(C\) dell’ellisse della quale sono note anche le lunghezze degli assi.Ciao
-
29 Marzo 2013 alle 13:07 #72878::
Nota: è un aggiornamento dell’ultimo messaggio, che ho rimosso contestualmente.lorenzo.pantieri” post=83616la procedura che descrivi per trovarlo non è di certo immediata
E’ la costruzione geometrica con squadre, compasso e goniometro. Nel caso dell’arco di ellisse la situazione si complica, perché gli angoli associati agli estremi vanno determinati a partire dalla circonferenza concentrica di diametro pari alla lunghezza di un asse e “proiettati” sull’ellisse parallelamente all’altro asse, oppure equivalentemente a partire dalla circonferenza concentrica inscritta (risp. circoscritta) e “proiettati” parallelamente all’asse maggiore (risp. minore), come nella costruzione geometrica dell’ellisse dati i suoi assi. La motivazione per una tale scelta risiede probabilmente nella possibilità di utilizzare rapidamente l’equazione della conica in forma polare.
Questo esempio chiarirà:
`\documentclass{standalone}
\usepackage{tikz}\begin{document}
\begin{tikzpicture}[>=latex, font=\scriptsize]
\draw [->] (-2.3,0) — (2.3,0); % asse x
\draw [->] (0,-1.3) — (0,1.3); % asse y
\draw [gray] (0,0) — (30:1.8); % raggio vettore
\node at (0.7,0.16) {$30^\circ$}; % etichetta dell'angolo
\draw [->, gray, dashed] (-2.2,0.5) — (2.2,0.5); % linea di proiezione
\draw [->] (1,0) arc (0:30:1); % arco sulla circonferenza
\draw [opacity=0.4] (1,0) arc (360:30:1); % completamento della circonferenza
\draw [->, red, thick] (2,0) arc (0:30:2 and 1); % arco proiettato sull'ellisse
\draw [red, opacity=0.4] (2,0) arc (360:30:2 and 1); % completamento dell'ellisse
\node at (0,-1.5) {\verb!(2,0) arc (0:30:2 and 1)!}; % didascalia
%
\begin{scope}[xshift=5cm] % trasla il contenuto di 10 cm verso destra
\fill [red!25] (0,0) — (0:2) arc (0:45:2 and 1) — cycle; % sfondo dell'angolo phi
\fill [blue!15] (0,0) — (0:1) arc (0:45:1) — cycle; % sfondo dell'angolo theta
\foreach \i in {0,22.5,…,360}{
\draw [gray] (0,0) — (\i:2.1); % raggio vettore
\draw [gray, dashed, very thin] (\i:1) — ({2*cos(\i)},{sin(\i)}); % proiezioni degli archi
\draw [gray, dashed, very thin] (\i:2) — ({2*cos(\i)},{sin(\i)});
}
\draw [->] (-2.3,0) — (2.3,0); % asse x
\draw [->] (0,-2.3) — (0,2.3); % asse y
\node [blue] at (22.5:0.6) {$\phi$}; % etichetta dell'angolo phi
\node [red] at (13:1.3) {$\theta$}; % etichetta dell'angolo theta
\foreach \i in {1,2}{ % circonferenze inscritta e circoscritta
\draw [-latex] (\i,0) arc (0:45:\i); % arco sulla circonferenza
\draw [opacity=0.4] (\i,0) arc (360:45:\i); % completamento della circonferenza
}
\draw [-latex, red, thick,] (2,0) arc (0:45:2 and 1); % arco proiettato sull'ellisse
\draw [red, opacity=0.4] (2,0) arc (360:45:2 and 1); % completamento dell'ellisse
\node at (0,-1.5) {\verb!(2,0) arc (0:45:2 and 1)!}; % didascalia
\node [font={\scriptsize\sffamily}] at (0,-1.8) {costruzione dell'ellisse dati i suoi assi};
\end{scope}
%
\begin{scope}[xshift=10cm] % trasla il contenuto di 5 cm verso destra
\fill [blue!15] (0,0) — (0:2) arc (0:45:2) — cycle; % sfondo dell'angolo theta
\fill [red!25] (0,0) — (0:1) arc (0:45:1 and 2) — cycle; % sfondo dell'angolo phi
\foreach \i in {0,22.5,…,360}{
\draw [gray] (0,0) — (\i:2.1); % raggio vettore
\draw [gray, dashed, very thin] (\i:1) — ({cos(\i)},{2*sin(\i)}); % proiezioni degli archi
\draw [gray, dashed, very thin] (\i:2) — ({cos(\i)},{2*sin(\i)});
}
\draw [->] (-2.3,0) — (2.3,0); % asse x
\draw [->] (0,-2.3) — (0,2.3); % asse y
\node [blue] at (22.5:1.4) {$\phi$}; % etichetta dell'angolo phi
\node [red] at (31.7:0.7) {$\theta$}; % etichetta dell'angolo theta
\foreach \i in {1,2}{ % circonferenze inscritta e circoscritta
\draw [-latex] (\i,0) arc (0:45:\i); % arco sulla circonferenza
\draw [opacity=0.4] (\i,0) arc (360:45:\i); % completamento della circonferenza
}
\draw [-latex, red, thick,] (1,0) arc (0:45:1 and 2); % arco proiettato sull'ellisse
\draw [red, opacity=0.4] (1,0) arc (360:45:1 and 2); % completamento dell'ellisse
\node at (0,-1.5) {\verb!(1,0) arc (0:45:1 and 2)!}; % didascalia
\node [font={\scriptsize\sffamily}] at (0,-1.8) {costruzione dell'ellisse dati i suoi assi};
\end{scope}
\end{tikzpicture}
\end{document}`[attachment=657]e2.png[/attachment]
A questo punto la prima domanda è: che relazione esiste tra l’angolo (assegnato) sulla circonferenza concentrica \(\phi\) e l’angolo effettivo sull’ellisse \(\theta\)?
Poiché tutti i metodi descritti sono equivalenti, utilizziamo il primo. Consideriamo circonferenza ed ellisse nell’origine perché, dato che ci serve la relazione tra gli angoli, un’eventuale traslazione non ha alcun effetto. L’equazione cartesiana dell’ellisse sia: \[\frac{x^2}{a^2}+\frac{y^2}{b^2}=1\].
Sia \(b\) il raggio della circonferenza, allora l’estremo libero dell’arco sulla circonferenza ha coordinate \(P_C(b\cos\phi,b\sin\phi)\). Allora l’estremo libero dell’arco sull’ellisse si determina intersecando la stessa con la retta di equazione \(y=b\sin\phi\) e si ottiene \(x_{1,2}=\pm a\cos\phi\). Va da sé che la soluzione che ci interessa è quella che ha lo stesso segno di \(\cos\phi\), dunque \(x=a\cos\phi\). Quindi il punto proiettato sull’ellisse ha coordinate \(P(a\cos\phi,b\sin\phi)\). Allora l’angolo effettivo in gradi sull’ellisse è:
\[\theta= PROTECTED1 \]
e di conseguenza, essendo \(\cot\theta=\frac{a\cos\phi}{b\sin\phi}=\frac{a}{b}\cot\phi\Rightarrow\cot\phi=\frac{b}{a}\cot\theta=\frac{b\cos\theta}{a\sin\theta}\),
\[\phi= PROTECTED2 \]
relazione che può essere utile se si vuole conoscere il valore da inserire nella formula di TikZ. Nelle formule precedenti (che sono banalmente l’estensione della funzione arcocotangente a valori in un angolo giro), l’arcotangente dà valori in radianti e \(\theta\) e \(\phi\) sono espressi in gradi sessagesimali nell’intervallo \([0^\circ,360^\circ[\).
Osservazione: se il centro dell’ellisse è \(C(x_C,y_C)\), le coordinate di \(P\) sono \(P(x_C+a\cos\phi, y_C+b\sin\phi)\) e rappresentano banalmente le coordinate di un punto generico dell’ellisse nel sistema di riferimento polare.La seconda domanda è: come costruisco l’ellisse?
La costruzione geometrica può essere realizzata con squadre, compasso ed eventualmente goniometro (senza calcolatrice). Si traccia la circonferenza con centro in \(P\) (assegnato) e raggio \(CP\) (essendo noti \(a\), \(b\) e \(\phi\)). Si determina l’angolo \(\theta\) e si traccia per \(P\) il diametro orientato con inclinazione pari a \(\theta\). La scocca del diametro è il centro \(C\) dell’ellisse della quale sono note anche le lunghezze degli assi…
La determinazione dell’angolo \(\theta\) non è strettamente necessaria, perché note le coordinate di \(P\) nel sistema \(xCy\), con una traslazione si ricavano le coordinate di \(C\) nel sistema \(xPy\): \(C(-a\cos\phi,-b\sin\phi)\), perciò \(C\) si può individuare squadre e compasso.
Analiticamente, indicato con \(P(x_P,y_P)\) l’estremo assegnato dell’arco e con \(\phi_P\) e \(\phi_Q\) gli angoli associati agli estremi dell’arco di circonferenza corrispondente, un generico punto dell’arco ha coordinate \(N(x_C+a\cos\phi, y_C+b\sin\phi)\). Dovendo \(P\) appartenere all’arco, è facile verificare che \(x_P=x_C+a\cos\phi_P\) e \(y_P=y_C+b\sin\phi_P\), quindi le coordinate del centro dell’ellisse sono \(C(x_P-a\cos\phi_P, y_P-b\sin\phi_P)\).
Osservazione: quando si vuole tracciare un arco su un’ellisse di centro noto, si può usare l’espressione delle coordinate di \(P\) per determinare uno degli estremi dell’arco.
Attachments:
You must be logged in to view attached files. -
29 Marzo 2013 alle 13:41 #72879::
Liverpool” post=83653Nota: è un aggiornamento dell’ultimo messaggio, che ho rimosso contestualmente.
Ti ringrazio moltissimo per la spiegazione. Ovviamente nell’articolo/capitolo queste cose andranno sintetizzate e semplificate al massimo.
Resta sintonizzato, il tuo contributo è preziosissimo… 😉
-
29 Marzo 2013 alle 18:39 #72880::
Leggermente OT 🙂 , ma visto sia la prossima ricorrenza sia l’interesse di Lorenzo penso sia carino augurare buona Pasqua con TikZ-uova:[attachment=648]KbYfv.png[/attachment]
Il codice: `
\documentclass{article}
\usepackage{tikz,charter}
\usetikzlibrary{hobby,
shapes.geometric,
decorations,
decorations.shapes,
shapes.geometric,
patterns
}% http://www.guitex.org/home/it/forum/5-tex-e-latex/83195-la-libreria-hobby-tikz-non-funziona-piu#83203
\ExplSyntaxOn
\cs_if_exist:NF \prg_stepwise_function:nnnN { \cs_gset_eq:NN \prg_stepwise_function:nnnN \int_step_function:nnnN }
\cs_if_exist:NF \prg_stepwise_inline:nnnn { \cs_gset_eq:NN \prg_stepwise_inline:nnnn \int_step_inline:nnnn }
\ExplSyntaxOff\makeatletter
\pgfdeclareradialshading[tikz@ball]{easter bg}{\pgfpoint{5bp}{25bp}}{%
color(0cm)=(tikz@ball!20);
color(0.15cm)=(tikz@ball!30);
color(0.4cm)=(tikz@ball!60);
color(0.9cm)=(tikz@ball)
}
\tikzoption{easter bg color}{\pgfutil@colorlet{tikz@ball}{#1}\def\tikz@shading{easter bg}\tikz@addmode{\tikz@mode@shadetrue}}\pgfkeys{/tikz/easter star/.code args={#1 and #2}{
\pgfdeclareradialshading[tikz@ball]{easter star}{\pgfpoint{#1}{#2}}{%
color(0cm)=(tikz@ball!20);
color(0.3cm)=(tikz@ball!40);
color(0.65cm)=(tikz@ball!60);
color(1cm)=(tikz@ball)
}
}
\tikzoption{easter star color}{\pgfutil@colorlet{tikz@ball}{#1}\def\tikz@shading{easter star}\tikz@addmode{\tikz@mode@shadetrue}}
}\makeatother
% original code by Paul Gaborit:
% tex.stackexchange.com/questions/72784/arrow-with-two-colors-with-tikz/#72793
\tikzset{
double path/.style args={#1 colored by #2 and #3}{
-,line join=round,line cap=rect,
shorten >=0.1cm,
shorten <=0.1cm, line width=#1,#2, % first path postaction={draw,-,#3,line width=(#1)/1.5, shorten <=(#1)/3,shorten >=(#1)/3,
}, % second path
}
}\tikzset{easter decoration 1/.style={
decorate,
decoration={
shape backgrounds,
shape=star,shape size=7pt,
shape sep={0.5cm, between center},
},
inner color=yellow,
outer color=yellow!50!orange,
draw=red!20!orange,
}
}\pgfdeclarepatternformonly{fivepointed stars easter 2}{\pgfpointorigin}{\pgfpoint{10mm}{10mm}}{\pgfqpoint{10mm}{8mm}}%
{
\pgftransformshift{\pgfqpoint{1mm}{1mm}}
\pgfpathmoveto{\pgfqpointpolar{18}{1mm}}
\pgfpathlineto{\pgfqpointpolar{162}{1mm}}
\pgfpathlineto{\pgfqpointpolar{306}{1mm}}
\pgfpathlineto{\pgfqpointpolar{90}{1mm}}
\pgfpathlineto{\pgfqpointpolar{234}{1mm}}
\pgfpathclose%
\pgfusepath{fill}
}\tikzset{easter decoration 3/.style={
draw=green!17!yellow,
line width=2pt,
star,
}
}\pgfdeclarepatternformonly{fivepointed stars easter 3}{\pgfpointorigin}{\pgfpoint{12mm}{12mm}}{\pgfqpoint{12mm}{11mm}}%
{
\pgftransformshift{\pgfqpoint{1mm}{1mm}}
\pgfpathmoveto{\pgfqpointpolar{18}{1mm}}
\pgfpathlineto{\pgfqpointpolar{162}{1mm}}
\pgfpathlineto{\pgfqpointpolar{306}{1mm}}
\pgfpathlineto{\pgfqpointpolar{90}{1mm}}
\pgfpathlineto{\pgfqpointpolar{234}{1mm}}
\pgfpathclose%
\pgfusepath{fill}
}% * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
\begin{document}
% Easter Egg 1
\begin{tikzpicture}[use Hobby shortcut]
\node[above,xshift=-3.5cm,yshift=-1.5cm] at (0.5,1){Easter Egg 1};
% path clipping
\clip[scale=-6](0.5,0.1) .. (0.775,0.35) .. (0.5,1) .. (0.225,0.35) .. (0.5,0.1) .. cycle;
% shading
\shade[easter bg color=orange,scale=-6](0.5,0.1) .. (0.775,0.35) .. (0.5,1) .. (0.225,0.35) .. (0.5,0.1) .. cycle;% colored paths
\draw[double path=5pt colored by orange!80!yellow and yellow,scale=-6] (0.775,0.35) .. (0.735,0.35) .. (0.65,0.3) .. (0.45,0.4) .. (0.235,0.355) .. (0.225,0.35);
\draw[double path=5pt colored by orange!80!yellow and yellow,scale=-6] (0.9,0.5) .. (0.775,0.55) .. (0.55,0.5) .. (0.45,0.6) .. (0.235,0.55) .. (0.1,0.5);
\draw[double path=5pt colored by orange!80!yellow and yellow,scale=-6] (0.9,0.7) .. (0.775,0.75) .. (0.55,0.7) .. (0.45,0.8) .. (0.235,0.75) .. (0.1,0.7);% stars
\draw[easter decoration 1,scale=-6] (0.775,0.25) .. (0.735,0.25) .. (0.65,0.2) .. (0.45,0.3) .. (0.235,0.255) .. (0.225,0.25);
\draw[easter decoration 1,scale=-6] (0.9,0.4) .. (0.775,0.45) .. (0.55,0.4) .. (0.45,0.5) .. (0.235,0.45) .. (0.1,0.4);
\draw[easter decoration 1,scale=-6] (0.9,0.6) .. (0.775,0.65) .. (0.55,0.6) .. (0.45,0.7) .. (0.235,0.65) .. (0.1,0.6);
\draw[easter decoration 1,scale=-6] (0.9,0.8) .. (0.775,0.85) .. (0.55,0.8) .. (0.45,0.9) .. (0.235,0.85) .. (0.1,0.8);% draw again the border
\draw[scale=-6](0.5,0.1) .. (0.775,0.35) .. (0.5,1) .. (0.225,0.35) .. (0.5,0.1) .. cycle;
\end{tikzpicture}
% Easter Egg 2
\begin{tikzpicture}[use Hobby shortcut]
\node[above,xshift=-3.5cm,yshift=-1.5cm] at (0.5,1){Easter Egg 2};
% path clipping
\clip[scale=-6](0.5,0.1) .. (0.775,0.35) .. (0.5,1) .. (0.225,0.35) .. (0.5,0.1) .. cycle;
% shading
\draw[easter bg color=blue!65!cyan,scale=-6,postaction={pattern=fivepointed stars easter 2,pattern color=blue}](0.5,0.1) .. (0.775,0.35) .. (0.5,1) .. (0.225,0.35) .. (0.5,0.1) .. cycle;\begin{scope}[transform canvas={shift={(-3.5,-3.5)}}]
\node[star,scale=2.25,easter star=2bp and 10bp, easter star color=cyan!65!blue] at (0.35,0.75){};
\node[star,scale=1.5,easter star=-2bp and 15bp, easter star color=cyan!85!blue,rotate=10] at (1.45,1.45){};\node[star,scale=1.5,easter star=5bp and 10bp, easter star color=cyan!75!blue,rotate=-10] at (-0.5,1.95){};
\node[star,scale=1.65,easter star=5bp and 15bp, easter star color=cyan!45!blue,rotate=-5] at (-0.75,-0.85){};
\node[star,scale=1.7,easter star=5bp and 15bp, easter star color=cyan!37!blue,rotate=-3] at (0,-1.65){};
\node[star,scale=1.5,easter star=5bp and 10bp, easter star color=cyan!60!blue,rotate=2] at (0.85,-0.65){};
\node[star,scale=1.75,easter star=-2bp and 2bp, easter star color=cyan!60!blue,rotate=14] at (2,0){};
\end{scope}
% draw again the border
\draw[scale=-6](0.5,0.1) .. (0.775,0.35) .. (0.5,1) .. (0.225,0.35) .. (0.5,0.1) .. cycle;
\end{tikzpicture}
% Easter Egg 3
\begin{tikzpicture}[use Hobby shortcut]
\node[above,xshift=-3.5cm,yshift=-1.5cm] at (0.5,1){Easter Egg 3};
% path clipping
\clip[scale=-6](0.5,0.1) .. (0.775,0.35) .. (0.5,1) .. (0.225,0.35) .. (0.5,0.1) .. cycle;
% shading
\draw[easter bg color=green!77!blue,scale=-6,postaction={pattern=fivepointed stars easter 3,pattern color=green!20!yellow}](0.5,0.1) .. (0.775,0.35) .. (0.5,1) .. (0.225,0.35) .. (0.5,0.1) .. cycle;\begin{scope}[transform canvas={shift={(-3.5,-3.5)}}]
\node[easter decoration 3,scale=2.25] at (0.55,0.65){};
\node[easter decoration 3,scale=1.5,rotate=10] at (1.45,1.45){};\node[easter decoration 3,scale=1.5,rotate=-10] at (-0.5,1.95){};
\node[easter decoration 3,scale=1.65,rotate=-5] at (-0.75,-0.70){};
\node[easter decoration 3,scale=1.7,rotate=-3] at (0,-1.65){};
\node[easter decoration 3,scale=1.5,rotate=2] at (0.85,-0.65){};
\node[easter decoration 3,scale=1.75,rotate=14] at (2,0){};
\end{scope}
% draw again the border
\draw[scale=-6](0.5,0.1) .. (0.775,0.35) .. (0.5,1) .. (0.225,0.35) .. (0.5,0.1) .. cycle;
\end{tikzpicture}\end{document}
` Probabilmente è un po’ più complicato rispetto ai classici disegni: chi vorrà cimentarsi per studiarlo potrà però imparare come costruirsi ombreggiature proprie e personalizzarle (colorazione, punto di luce, ecc…), come personalizzare “in due minuti” nuovi pattern (presi dalla libreria ufficiale e modificata solo la “distanza” fra le stelle) e utilizzare quella libreria semi-sconosciuta quale [tt]decorations.shapes[/tt].EDIT: oh.. messaggio 900 🙂
Ciao
Claudio
Attachments:
You must be logged in to view attached files. -
30 Marzo 2013 alle 12:35 #72881
-
30 Marzo 2013 alle 18:00 #72882
-
14 Aprile 2013 alle 7:34 #72883::
Lorenzo e Tommaso, prima che pubblichiate l’articolo, vorrei consigliarvi di aggiungere un paragrafo sui pacchetti/librerie più utili collegati a TikZ. Io candido [tt]tkz-euclide[/tt], che per chi realizza disegni geometrici può essere molto utile. Claudio (@cfiandra) potrà suggerirne altri.Ciao
-
14 Aprile 2013 alle 7:41 #72884::
Liverpool” post=84203Lorenzo e Tommaso, prima che pubblichiate l’articolo, vorrei consigliarvi di aggiungere un paragrafo sui pacchetti/librerie più utili collegati a TikZ. Io candido [tt]tkz-euclide[/tt], che per chi realizza disegni geometrici può essere molto utile. Claudio (@cfiandra) potrà suggerirne altri.
Un paragrafo di questo genere c’è. In ogni caso, la pubblicazione dell’articolo non ha nulla di definitivo: molte cose saranno aggiunte grazie al vostro contributo.
-
-
AutoreRisposte
- Devi essere connesso per rispondere a questo topic.
