Re: Spettro elettromagnetico con TikZ

#85177
Up
0
Down
::


Rispondo a Roberto ed Andrea e poi commento il codice del messaggio precedente.

robitex” post=84587Ciao,
perché usi \phantom{gamma}?

Dunque, nel codice originale c’erano dei [tt]\null[/tt] che non conosco come comando, ma ho intuito che lo scopo era quello di “far occupare” spazio nella riga successiva i [tt]\\[/tt]: in questo modo tutti i testi erano “allineati” in alto e quelli corti non centralmente. Stesso fine del comando [tt]\phantom[/tt], ma occorre avere buon senso nel scegliere l’argomento: io ho scelto [tt]gamma[/tt] perché era l’unica parola con una [tt]g[/tt] e pertanto permette di “far occupare” il giusto spazio. Teoricamente però se si ri-usano [tt]\\ \null[/tt] dovrebbe andare bene comunque.

logos” post=84592La striscia colorata mi sembrava bella per vedere lo zoom. Però così come l’hai costruita non funziona! Sarebbe bella se fosse sfumata dal violetto al rosso anche in cima. Invece, per come è fatta in questo momento, in altro è tutta azzurro-verdognola e non si vede la sfumatura di tutti i colori. Per spiegarmi meglio, provo a raccontare cosa vorrei vedere in maniera discreta (non sfumata): se nella freccia nera ci sono viola, blu, ciano, verde, arancione, giallo rosso, e sotto idem ma su un rettangolo più grosso, sarebbe bello vi fosse una specie di trapezio opaco al 50% che collega parte piccola viola a parte grande viola, parte piccola blu con parte grossa blu, ecc.

Togliendo le curve di Bezier, e sostituendole con righe dritte, potrei farla con tanti trapezi monocromati, ma uno spettro è sfumato, non fatto di rettangoli monocromatici. Per questo speravo fosse possibile fare uno shading trapezioidale in maniera tale da vedere “aprirsi” la sfumatura.

Direi che non avevo ben capito io cosa intendevi. In questo caso, per quanto ne so io non si riesce a fare, ma se a) trovi una funzione adatta, b) conosci il PostScript forse riesci a tirare fuori qualcosa dalla sotto sezione 83.2.3 General (Functional) Shadings del pgfmanual.

Il “problema” è che al momento l’ombreggiatura è definita a partire da un rettangolo, quindi utilizzandola in una forma chiusa stretta in alto e ampia in basso, automaticamente la parte in basso viene usata come parametro di “normalizzazione”. Di conseguenza, nella parte stretta in alto vedi solo parte dell’ombreggiatura perché in realtà è come se in sfondo ci fosse un rettangolo in cui tutto è tagliato tranne la forma chiusa.

Commenti al codice
Per prima cosa, non era un vero esempio “minimo” (qualche pacchetto poteva essere levato). 😉

In genere, preferisco tenere nel preambolo dichiarazioni di ombreggiature e stili. Attenzione anche a caricare [tt]xcolor[/tt]: è meglio passare le opzioni direttamente fra quelle di classe per evitare che copiando/spostando l’ordine di caricamento dei pacchetti si incappi nel classico [tt]option clash[/tt].

Per evitare di impazzire a mettere i $ per la modalità matematica, è possibile definirsi un semplicissimo stile: `
\tikzset{math mode/.style={
execute at begin node=$,
execute at end node=$,
}
}
` A questo punto, passare [tt]math mode[/tt] come opzione a [tt]scope[/tt]: `\begin{scope}[font=\tiny, below, math mode]
% Scala dello spettro
\node at (-2,2.9) {\SI{0.001}{\nano\meter}};
\node at (1,2.9) {\SI{1}{\nano\meter}};
\node at (4,2.9) {\SI{1000}{\nano\meter}};
\node at (7,2.9) {\SI{1}{\milli\meter}};
\node at (8,2.9) {\SI{1}{\meter}};
\node at (10,2.9) {\SI{1}{\kilo\meter}};
\end{scope}` permette di risparmiare un po’ di fatica. In quel caso, ho anche levato [tt]below[/tt] da tutti i nodi: passandolo a [tt]scope[/tt] è sempre valido.

Discorso delle [tt]minipage[/tt]s: con TikZ se ne può fare a meno. Infatti, l’opzione [tt]text width[/tt] automaticamente manda a capo il testo. Pertanto ho sfoltito decisamente il codice, ma ho lasciato un errorino: infatti, per [tt]infrarosso (IR)[/tt] ho lasciato un [tt]\centering[/tt] che non produce effetti. Siccome nelle opzioni di [tt]scope[/tt] l’allineamento è a destra (default per tutti i nodi), per renderlo centrale ci sono due strade: [tt]align=center[/tt] oppure [tt]text centered[/tt] (mi pare sia una vecchia chiave, ma non so se deprecata o meno). Quindi: `
\begin{scope}[right,font=\tiny,right,color=white, text width=1cm]
% Nome delle onde
\node at (-2.2,3.6)
{raggi cosmici};
\node at (-0.7,3.6)
{raggi gamma};
\node at (0.6,3.6)
{raggi X \phantom{gamma}};
\node at (2.1,3.6)
{UV \phantom{gamma}};
\node[align=center] at (3.4,3.6)
{infrarosso (IR) };
\node at (4.8,3.6)
{microonde \phantom{gamma}};
\node at (6.6,3.6)
{radar \phantom{gamma}};
\node at (7.6,3.6)
{radio \phantom{gamma}};
\node at (9.6,3.6)
{banda larga};
\end{scope}
`
Ciao
Claudio

Go to top