%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Hugo Gomes @ 15/04/2016 (v1.0) % Hugo Gomes @ 15/03/2021 (v2.0.0) % Hugo Gomes @ 12/05/2021 (v2.1.0) % Hugo Gomes @ 27/06/2021 (v2.1.1) % Hugo Gomes @ 03/07/2021 (v2.1.2) % Hugo Gomes @ 21/02/2023 (v2.2.0) % Hugo Gomes @ 25/04/2023 (v3.0.0) % Hugo Gomes @ 27/04/2023 (v3.0.1) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \NeedsTeXFormat{LaTeX2e}% \ProvidesPackage{pgf-spectra}[27/04/2023 pgf-spectra v3.0.1]% \RequirePackage{tikz}% \DeclareOption{LSE}{\input{pgf-spectra.data.LSE.tex}\xdef\pgfspectra@DATASET{1}}% \DeclareOption{NIST}{\input{pgf-spectra.data.NIST.tex}\xdef\pgfspectra@DATASET{0}}% \ExecuteOptions{NIST}% \ProcessOptions\relax% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \input{pgf-spectra.input.library.tex}% Loading the input library mechanism (new v3.0.0) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \definecolor{pgfspectraIRcolor}{rgb}{.3157,.2373,.2373}% NEW v2.0.0 \definecolor{pgfspectraUVcolor}{rgb}{.3,.2568,.3}% NEW v2.0.0 % \newcount\pgfspectra@counta% tmp counter \newcount\pgfspectra@countb% tmp counter \newcount\pgfspectra@countc% tmp counter \newcount\pgfspectra@countd% tmp counter % \newif\ifpgfspectra@absorption% \newif\ifpgfspectra@cur@elem@exist% \newif\ifpgfspectra@drawaxis% \newif\ifpgfspectra@axislabel% spectra label ! \newif\ifpgfspectra@axisunitlabel% NEW v3.0.0 \newif\ifpgfspectra@intensity% \newif\ifpgfspectra@redshift% NEW v2.0.0 \newif\ifpgfspectra@RSvalue% NEW v2.0.0 \newif\ifpgfspectra@usevisibleshade% NEW v2.1.0 \newif\ifpgfspectra@visibleRangeOnly% NEW v2.2.0 \newif\ifpgfspectra@UVRangeOnly% NEW v2.2.0 \newif\ifpgfspectra@IRRangeOnly% NEW v2.2.0 \newif\ifpgfspectra@datanotfound% NEW v2.2.0 \newif\ifpgfspectra@band% NEW v3.0.0 \def\@pgfspectra@list@purge BEGIN,#1[#2]\relax{\expandafter\edef\csname#2\endcsname{#1}}% NEW v3.0.0 % defining PGF keys \pgfkeys{/pgfspectra/.cd,% element/.get=\pgfspectra@element,% element/.store in=\pgfspectra@element,% element/.default=NONE,% width/.get=\pgfspectra@width,% width/.store in=\pgfspectra@width,% width/.default={0.9\textwidth},% height/.get=\pgfspectra@height,% height/.store in=\pgfspectra@height,% height/.default=1cm,% back/.get=\pgfspectra@back,% back/.store in=\pgfspectra@back,% back/.default=black,% backIRUV/.get=\pgfspectra@backnotvisible,% NEW v2.0.0 backIRUV/.store in=\pgfspectra@backnotvisible,% NEW v2.0.0 backIRUV/.default=black,% NEW v2.0.0 backVIS/.get=\pgfspectra@backvisible,% NEW v2.1.0 backVIS/.store in=\pgfspectra@backvisible,% NEW v2.1.0 backVIS/.default=black,% NEW v2.1.0 IRcolor/.get=\pgfspectra@IRcolor,% NEW v2.0.0 IRcolor/.store in=\pgfspectra@IRcolor,% NEW v2.0.0 IRcolor/.default=pgfspectraIRcolor,% NEW v2.0.0 UVcolor/.get=\pgfspectra@UVcolor,% NEW v2.0.0 UVcolor/.store in=\pgfspectra@UVcolor,% NEW v2.0.0 UVcolor/.default=pgfspectraUVcolor,% NEW v2.0.0 charge/.get=\pgfspectra@charge,% charge/.store in=\pgfspectra@charge,% charge/.default=0,% Imin/.get=\pgfspectra@intmin,% Imin/.store in=\pgfspectra@intmin,% Imin/.default=0,% lines/.get=\pgfspectra@lines,% lines/.store in=\pgfspectra@lines,% lines/.default={},% line width/.get=\pgfspectra@linewidth,% line width/.store in=\pgfspectra@linewidth,% line width/.default=1pt,% begin/.get=\pgfspectra@begin,% begin/.store in=\pgfspectra@begin,% begin/.default=380,% end/.get=\pgfspectra@end,% end/.store in=\pgfspectra@end,% end/.default=780,% axis step/.get=\pgfspectra@axisstep,% axis step/.store in=\pgfspectra@axisstep,% axis step/.default=20,% axis unit/.get=\pgfspectra@axisunit,% NEW v2.1.0 axis unit/.store in=\pgfspectra@axisunit,% NEW v2.1.0 axis unit/.default=nm,% NEW v2.1.0 axis unit precision/.get=\pgfspectra@axisunitprecision,% NEW v2.1.0 axis unit precision/.store in=\pgfspectra@axisunitprecision,% NEW v2.1.0 axis unit precision/.default=3,% NEW v2.1.0 axis ticks/.get=\pgfspectra@axisticks,% NEW v2.0.0 axis ticks/.store in=\pgfspectra@axisticks,% NEW v2.0.0 axis ticks/.default=0,% NEW v2.0.0 axis label text/.get=\pgfspectra@axislabeltxt,% NEW v3.0.0 axis label text/.store in=\pgfspectra@axislabeltxt,% NEW v3.0.0 axis label text/.default={},% NEW v3.0.0 axis label position/.get=\pgfspectra@axislabelposition,% NEW v3.0.0 axis label position/.store in=\pgfspectra@axislabelposition,% NEW v3.0.0 axis label position/.default=center,% NEW v3.0.0 axis color/.get=\pgfspectra@axiscolor,% axis color/.store in=\pgfspectra@axiscolor,% axis color/.default=black,% axis font/.get=\pgfspectra@axisfont,% axis font/.store in=\pgfspectra@axisfont,% axis font/.default={\tiny},% axis font color/.get=\pgfspectra@axisfontcolor,% axis font color/.store in=\pgfspectra@axisfontcolor,% axis font color/.default=white,% label position/.get=\pgfspectra@labelposition,% label position/.store in=\pgfspectra@labelposition,% label position/.default={west},% label before text/.get=\pgfspectra@labelbtext,% label before text/.store in=\pgfspectra@labelbtext,% label before text/.default={},% label after text/.get=\pgfspectra@labelatext,% label after text/.store in=\pgfspectra@labelatext,% label after text/.default={},% label font/.get=\pgfspectra@labelfont,% label font/.store in=\pgfspectra@labelfont,% label font/.default={\bfseries\small},% label font color/.get=\pgfspectra@labelfontcolor,% label font color/.store in=\pgfspectra@labelfontcolor,% label font color/.default=black,% gamma/.get=\pgfspectra@gamma,% gamma/.store in=\pgfspectra@gamma,% gamma/.default=0.8,% brightness/.get=\pgfspectra@brightness,% brightness/.store in=\pgfspectra@brightness,% brightness/.default=1,% line intensity/.get=\pgfspectra@lineint,% line intensity/.store in=\pgfspectra@lineint,% line intensity/.default=100,% relative intensity threshold/.get=\pgfspectra@relintthresh,% relative intensity threshold/.store in=\pgfspectra@relintthresh,% relative intensity threshold/.default=0.25,% absorption/.is if=pgfspectra@absorption,% axis/.is if=pgfspectra@drawaxis,% axis label/.is if=pgfspectra@axisunitlabel,% NEW v2.0.0 label/.is if=pgfspectra@axislabel,% relative intensity/.is if=pgfspectra@intensity,% redshift/.get=\pgfspectra@redshift,% NEW v2.0.0 redshift/.store in=\pgfspectra@redshift,% NEW v2.0.0 redshift/.default={},% NEW v2.0.0 show redshift value/.is if=pgfspectra@RSvalue,% NEW v2.0.0 use visible shading/.is if=pgfspectra@usevisibleshade,% NEW v2.1.0 precision/.get=\pgfspectra@precision,% NEW v3.0.0 (for data library) precision/.store in=\pgfspectra@precision,% NEW v3.0.0 (for data library) precision/.default=1,% NEW v3.0.0 (for data library) unit/.get=\pgfspectra@unit,% NEW v3.0.0 (for data library) unit/.store in=\pgfspectra@unit,% NEW v3.0.0 (for data library) unit/.default={}% NEW v3.0.0 (for data library) }% % setting keys with default values \pgfkeys{/pgfspectra/.cd,element,width,height,back,backIRUV,IRcolor,UVcolor,charge,Imin,lines,line width,begin,end,% NEW v2.0.0 -> backIRUV,IRcolor,UVcolor axis color,axis font,axis font color,axis step,axis unit,axis unit precision,axis ticks,% NEW v2.1.0 -> axis unit,axis unit precision axis label=false,axis label text,axis label position,% NEW v3.0.0 ->axis label,axis label text,axis label position label position,label before text,label after text,label font,label font color,gamma,brightness,line intensity,% relative intensity threshold,absorption=false,axis=false,label=false,relative intensity=false,redshift,show redshift value=false,% NEW v2.0.0 -> redshift, show redshift value use visible shading,backVIS,% NEW v2.1.0 -> use visible shading precision,unit% NEW v3.0.0 (for data library) }% % strings for \ifx tests \def\pgfspectra@wlN@NE{NONE}% \def\pgfspectra@ll{all}% \def\pgfspectra@visible{visible}% \def\pgfspectra@visible@list{visible,visible5,visible10,visible15,visible20,visible25,visible30,visible35,visible40,visible45,visible50,visible55,visible60,visible65,visible70,visible75,visible80,visible85,visible90,visible95,visible100}% \def\pgfspectra@label@position@list{west,north west,north,north east,east,south east,south,south west}% \def\pgfspectra@redshift@D{D}% NEW v2.0.0 \def\pgfspectra@axisunit@nm{nm}% NEW v2.1.0 \def\pgfspectra@axisunit@um{micron}% NEW v2.1.0 \def\pgfspectra@axisunit@A{A}% NEW v2.1.0 %%%% COMMANDS ------------------------------------------------------------------------------> % commands ################################################## \newif\ifpgfspectra@StyleIsDef\pgfspectra@StyleIsDeffalse% NEW v2.0.0 % \pgfspectraStyle[options]% NEW v2.0.0 \def\pgfspectraStyle[#1]{\pgfspectraStyleReset\pgfspectra@StyleIsDeftrue\relax\tikzset{/pgfspectra/.cd,#1}% \def\pgfspectra@DoStyle{\tikzset{/pgfspectra/.cd,#1}}% applies storing user style for future use }% NEW v2.0.0 % \pgfspectraStyleReset% NEW v2.0.0 \def\pgfspectraStyleReset{\pgfspectra@StyleIsDeffalse\tikzset{/pgfspectra/.cd,% element=NONE,width=0.9\textwidth,height=1cm,back=black,backIRUV=black,IRcolor=pgfspectraIRcolor,UVcolor=pgfspectraUVcolor,% charge=0,Imin=0,lines={},line width=1pt,begin=380,end=780,axis color=black,axis font=\tiny,axis font color=white,axis step=20,axis unit=nm,axis unit precision=3,axis ticks=0,label position=west,% NEW v2.1.0 -> axis unit,axis unit precision axis label=false,axis label text={},axis label position=center,% NEW v3.0.0 ->axis label,axis label text,axis label position label before text={},label after text={},label font=\bfseries\small,label font color=black,gamma=0.8,brightness=1,line intensity=100,% relative intensity threshold=0.25,absorption=false,axis=false,label=false,relative intensity=false,redshift={},show redshift value=false,% NEW v2.0.0 -> redshift, show redshift value use visible shading,backVIS=black,% NEW v2.1.0 -> use visible shading precision=1,unit={}% NEW v3.0.0 (for data library) }}% % --------------- The main command to draw the spectra ---------------------------------------- % \pgfspectra[options] \def\pgfspectra{\@ifnextchar[\pgfspectra@withoptions{\pgfspectra@nooptions}}% \def\pgfspectra@nooptions{\pgfspectra@continuous(0.9\textwidth,1cm)}% % ######################################################### \def\pgfspectra@continuous(#1,#2){\ignorespaces% \ifpgfspectra@usevisibleshade% NEW v2.1.0 \pgfspectrashade(380,780){pgfspectra@visibleshade}% \tikz{\fill[shading=pgfspectra@visibleshade] (0,0) rectangle (#1,#2);}% \else% \begin{tikzpicture}% \pgfmathparse{#1/400}\edef\pgfspectra@xscale{\pgfmathresult} \pgfmathparse{1.4*\pgfspectra@xscale+.09*\linewidth/\pgfspectra@width}\edef\pgfspectra@linewidth{\pgfmathresult}% NEW v2.0.0 {\pgfspectra@xscale} -> {1.4*\pgfspectra@xscale+.09*\linewidth/\pgfspectra@width} \foreach \x in {380,...,780}% {% \wlcolor{\x}% \pgfmathparse{(\x-380)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[pgfspectra@temp,line width=\pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,#2);% }% \end{tikzpicture}% \fi% }% % ######################################################### \def\pgfspectra@withoptions[#1]{\ignorespaces% % setting default values or user style \ifpgfspectra@StyleIsDef\pgfspectraStyleReset\pgfspectra@DoStyle\pgfspectra@StyleIsDeftrue\relax\else\pgfspectraStyleReset\relax\fi% NEW v2.0.0 % process options (key values) \pgfkeys{/pgfspectra/.cd,#1}% % axis height \setbox0=\hbox{\pgfspectra@axisfont\selectfont380}\edef\@pgfspectra@axis@height{\the\ht0}% % process visible background (visible+opacity) \pgfspectra@counta=0% \pgfspectra@countb=-1% \@for\@myarg:=\pgfspectra@visible@list\do{% \ifx\pgfspectra@back\@myarg\pgfspectra@countb=\pgfspectra@counta\fi% \advance\pgfspectra@counta by1% }% \ifnum\pgfspectra@countb=-1\edef\@visible@opacity{1}\else% NEW v2.0.0 \ifnum\pgfspectra@countb=0\let\pgfspectra@back\pgfspectra@visible\edef\@visible@opacity{.5}\else% \ifnum\pgfspectra@countb>0\let\pgfspectra@back\pgfspectra@visible\pgfmathparse{.05*\pgfspectra@countb}\edef\@visible@opacity{\pgfmathresult}\fi\fi\fi% % ---------------------------------------------------------------------------------------------------- % check limits... % NEW v2.0.0 \ifnum\pgfspectra@end<10\relax\def\wldez{10}\let\pgfspectra@end\wldez\fi% \ifnum\pgfspectra@end>4000\relax\def\wlquatromil{4000}\let\pgfspectra@end\wlquatromil\fi% \ifnum\pgfspectra@begin<10\relax\def\wldez{10}\let\pgfspectra@begin\wldez\fi% \ifnum\pgfspectra@begin>4000\relax\def\wlquatromil{4000}\let\pgfspectra@begin\wlquatromil\fi% % ---------------------------------------------------------------------------------------------------- % verifying redshift key \ifx\pgfspectra@redshift\@empty\relax% \pgfspectra@redshiftfalse% \else% \pgfspectra@processredshiftkey\pgfspectra@redshift\relax% \fi% % ---------------------------------------------------------------------------------------------------- % check if is only in visible range... or in UV... or in IV % NEW v2.2.0 \pgfspectra@visibleRangeOnlyfalse% \pgfspectra@UVRangeOnlyfalse% \pgfspectra@IRRangeOnlyfalse% \ifnum\pgfspectra@end>\pgfspectra@begin\relax% \ifnum\pgfspectra@end<380\relax% UV \pgfspectra@UVRangeOnlytrue% \else% VIS or IV \ifnum\pgfspectra@end<781\relax% \ifnum\pgfspectra@begin>379\relax\pgfspectra@visibleRangeOnlytrue\fi% VIS \else% \ifnum\pgfspectra@begin>780\relax\pgfspectra@IRRangeOnlytrue\fi% IR \fi% \fi% \else% \ifnum\pgfspectra@begin<380\relax% UV \pgfspectra@UVRangeOnlytrue% \else% VIS or IV \ifnum\pgfspectra@begin<781\relax% \ifnum\pgfspectra@end>379\relax\pgfspectra@visibleRangeOnlytrue\fi% VIS \else% \ifnum\pgfspectra@end>780\relax\pgfspectra@IRRangeOnlytrue\fi% IR \fi% \fi% \fi% % --------------------------------------------------------------------------------------------------- % check if the axis are labeled and if true sets \ifpgfspectra@drawaxis to true % NEW v3.0.0 \ifpgfspectra@axisunitlabel\pgfspectra@drawaxistrue\fi% \edef\pgfspectra@testa{\pgfspectra@axislabeltxt}\edef\pgfspectra@testb{}% \ifx\pgfspectra@testa\pgfspectra@testb\relax\else\pgfspectra@drawaxistrue\pgfspectra@axisunitlabeltrue\fi% % --------------------------------------------------------------------------------------------------- % if no element provided draws continuous spectrum with options or user list of lines \ifx\pgfspectra@element\pgfspectra@wlN@NE%no element by the user \ifx\pgfspectra@elt@chemsym\undefined\else\let\pgfspectra@elt@chemsym\undefined\fi% \ifx\pgfspectra@lines\@empty%no lines by the user => continuous spectrum % draws the continuous spectrum width options (default or by the user) \begin{tikzpicture}% \pgfkeys{/pgfspectra/.cd,#1}% NEW v2.0.0 \pgfmathparse{\pgfspectra@width/(abs(\pgfspectra@end-\pgfspectra@begin))}\edef\pgfspectra@xscale{\pgfmathresult}% \ifpgfspectra@drawaxis%draws the axis \pgfspectra@utils@draw@axis% \fi%\ifpgfspectra@drawaxis \ifpgfspectra@axislabel%put the label \pgfspectra@utils@put@label% \fi%\ifpgfspectra@axislabel \let\pgfspectra@back\pgfspectra@visible% \let\pgfspectra@background@UVcolor\pgfspectra@backnotvisible\let\pgfspectra@background@IRcolor\pgfspectra@backnotvisible\relax% \pgfspectra@utils@drawbackground{\@visible@opacity*\pgfspectra@brightness}% \end{tikzpicture}% \let\pgfspectra@list@@\@empty% \else% lines by the user % NEW v3.0.0: lines={wl_1,wl_2,wl_3 to wl_4,wl_5 to wl_6,...,wl_n} \def\pgfspectrag@bblespaces##1\relax{\edef\pgfspectra@lines{\zap@space##1 \@empty}}% \def\pgfspectra@isband##1to##2\relax{\edef\pgfspectra@testa{##2}\edef\pgfspectra@testb{}% \ifx\pgfspectra@testa\pgfspectra@testb\pgfspectra@bandfalse\else\pgfspectra@bandtrue\fi}% \expandafter\pgfspectrag@bblespaces\pgfspectra@lines\relax% \expandafter\pgfspectra@isband\pgfspectra@lines to\relax% \ifpgfspectra@band% BAND \def\pgfspectra@getband##1to##2\relax{\edef\pgfspectra@band@start{##1}\edef\pgfspectra@band@end{##2}}% \edef\pgfspectra@lines@tmp{BEGIN}% \@for\pgfspectra@tmp:=\pgfspectra@lines\do{% \expandafter\pgfspectra@isband\pgfspectra@tmp to\relax% \ifpgfspectra@band% \expandafter\pgfspectra@getband\pgfspectra@tmp\relax% \pgfmathparse{\pgfspectra@band@start+.5*\pgfspectra@linewidth}\edef\pgfspectra@band@step{\pgfmathresult}% \foreach \x in {\pgfspectra@band@start,\pgfspectra@band@step,...,\pgfspectra@band@end}{\xdef\pgfspectra@lines@tmp{\pgfspectra@lines@tmp,\x}}% \else\xdef\pgfspectra@lines@tmp{\pgfspectra@lines@tmp,\pgfspectra@tmp}\fi% }% \expandafter\@pgfspectra@list@purge \pgfspectra@lines@tmp[pgfspectra@list@@]\relax% \else%NOT BAND \edef\pgfspectra@list@@{\pgfspectra@lines}% \fi% \let\pgfspectra@background@UVcolor\pgfspectra@backnotvisible\let\pgfspectra@background@IRcolor\pgfspectra@backnotvisible\relax% \fi%\pgfspectra@lines\@empty \else%\pgfspectra@element\pgfspectra@wlN@NE % else get element(s) data \pgfspectra@countc=0% \pgfspectra@countd=1% \@for\@myarg:=\pgfspectra@element\do{\advance\pgfspectra@countc by1}%count number of elements \pgfspectra@addt@list{}{}% \@for\@myarg:=\pgfspectra@element\do{% \pgfspectra@cur@elem@existtrue% \def\pgfspectra@elt@chemsym{NOT FOUND!}% \def\@search@result@err{NOT FOUND!}% \pgfspectra@elt@data{\@myarg}\relax% % check if element provided exists \ifx\@search@result@err\pgfspectra@elt@chemsym Element\ ``\@myarg'' with charge ``\pgfspectra@charge'' not found!\pgfspectra@cur@elem@existfalse\else% % if exists, set the wavelength's list % CHANGED IN v2.2.0 to better accommodate relative intensities (also considering charges...) ----> \ifpgfspectra@UVRangeOnly% \expandafter\pgfspectra@getmaxint\pgfspectra@elt@Imax@UV\relax% \pgfspectra@setmaxint{UV}% \else\ifpgfspectra@visibleRangeOnly% \expandafter\pgfspectra@getmaxint\pgfspectra@elt@Imax@VIS\relax% \pgfspectra@setmaxint{VIS}% \else\ifpgfspectra@IRRangeOnly% \expandafter\pgfspectra@getmaxint\pgfspectra@elt@Imax@IR\relax% \pgfspectra@setmaxint{IR}% \else% \expandafter\pgfspectra@getmaxint\pgfspectra@elt@Imax@ALL\relax% \pgfspectra@setmaxint{ALL}% \fi\fi\fi% % <----- v2.0.0 \pgfspectra@set@element@list{\pgfspectra@elt@elemdata}{\pgfspectra@elt@Imax}% \fi%\@search@result@err\pgfspectra@elt@chemsym \ifpgfspectra@cur@elem@exist\ifnum\pgfspectra@countd<\pgfspectra@countc\pgfspectra@addt@list{\pgfspectra@list@@}{,}\fi\fi% \advance\pgfspectra@countd by1% }%end do \fi%\pgfspectra@element\pgfspectra@wlN@NE % check if there are lines to draw and make the spectrum \ifx\pgfspectra@list@@\@empty\ifx\pgfspectra@element\pgfspectra@wlN@NE\else Element\ ``\pgfspectra@element'' with charge ``\pgfspectra@charge'' have no lines to display.\fi\else% \ifpgfspectra@absorption%absortion spectrum \begin{tikzpicture}% \pgfkeys{/pgfspectra/.cd,#1}% NEW v2.0.0 \pgfmathparse{\pgfspectra@width/(abs(\pgfspectra@end-\pgfspectra@begin))}\edef\pgfspectra@xscale{\pgfmathresult}% \ifpgfspectra@drawaxis%draws the axis \pgfspectra@utils@draw@axis% \fi%\ifpgfspectra@drawaxis \ifpgfspectra@axislabel%put the label \pgfspectra@utils@put@label% \fi%\ifpgfspectra@axislabel \let\pgfspectra@back\pgfspectra@visible% \let\pgfspectra@background@UVcolor\pgfspectra@UVcolor\let\pgfspectra@background@IRcolor\pgfspectra@IRcolor\relax% \pgfspectra@utils@drawbackground{\pgfspectra@brightness}% % draws the lines \pgfspectra@utils@drawabsorptionlines% \end{tikzpicture}% \else%emission spectrum % draws the spectrum \ifx\pgfspectra@back\pgfspectra@visible%visible background \begin{tikzpicture}% \pgfkeys{/pgfspectra/.cd,#1}% NEW v2.0.0 \pgfmathparse{\pgfspectra@width/(abs(\pgfspectra@end-\pgfspectra@begin))}\edef\pgfspectra@xscale{\pgfmathresult}% \ifpgfspectra@drawaxis%draws the axis \pgfspectra@utils@draw@axis% \fi%\ifpgfspectra@drawaxis \ifpgfspectra@axislabel%put the label \pgfspectra@utils@put@label% \fi%\ifpgfspectra@axislabel \let\pgfspectra@background@UVcolor\pgfspectra@backnotvisible\let\pgfspectra@background@IRcolor\pgfspectra@backnotvisible\relax% \pgfspectra@utils@drawbackground{\@visible@opacity*\pgfspectra@brightness}% \pgfspectra@utils@drawemissionlines% emission lines \end{tikzpicture}% \else%without visible background \begin{tikzpicture}% \pgfkeys{/pgfspectra/.cd,#1}% NEW v2.0.0 \pgfmathparse{\pgfspectra@width/(abs(\pgfspectra@end-\pgfspectra@begin))}\edef\pgfspectra@xscale{\pgfmathresult}% \ifpgfspectra@drawaxis%draws the axis \pgfspectra@utils@draw@axis% \fi%\ifpgfspectra@drawaxis \ifpgfspectra@axislabel%put the label \pgfspectra@utils@put@label% \fi%\ifpgfspectra@axislabel \let\pgfspectra@background@UVcolor\pgfspectra@backnotvisible\let\pgfspectra@background@IRcolor\pgfspectra@backnotvisible\relax% \pgfspectra@utils@drawbackground{0}% dummy argument \pgfspectra@utils@drawemissionlines% emission lines \end{tikzpicture}% \fi%\pgfspectra@back\@visible \fi%\ifpgfspectra@absorption \fi% \pgfspectra@list@@\@empty }% % ######################################################### %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % get individual line data from one element of the array data \def\pgfspectra@get@line@info[#1 #2 #3]{% \def\pgfspectra@currentline@wl{#1}% return \def\pgfspectra@currentline@int{#2}% return \def\pgfspectra@currentline@charge{#3}% return }% % ######################################################### % ################### \pgfspectra@set@element@list ################## % ######################################################### % % \pgfspectra@set@element@list{\pgfspectra@elt@elemdata}{\pgfspectra@elt@Imax} % RETURN: \pgfspectra@list@@ -> (wl1,wl2,...) % or if relative intensity true (between 0 and 1) % \pgfspectra@list@@ -> (wl1/int1,wl2/int2,...) % \newif\ifpgfspectra@first% for first ocurrence of Imin \def\pgfspectra@set@element@list#1#2{\ignorespaces% \pgfspectra@elt@Imax \pgfspectra@firsttrue% \pgfspectra@counta=0% \pgfspectra@countb=1% \pgfmathparse{int(\pgfspectra@intmin*100)}\edef\@pgfspectra@intmin{\pgfmathresult}%intensity percentage \ifnum\@pgfspectra@intmin=0% include all intensities \ifx\pgfspectra@ll\pgfspectra@charge%ALL lines \@for\@myarg:=#1\do{\advance\pgfspectra@counta by1}%count all entries \ifpgfspectra@intensity% \@for\@myarg:=#1% \do{% \expandafter\pgfspectra@get@line@info\@myarg% \pgfmathparse{\pgfspectra@relintthresh+(1-\pgfspectra@relintthresh)*\pgfspectra@currentline@int/#2}\edef\pgfspectra@intensity@to@list{\pgfmathresult}% \ifnum\pgfspectra@countb<\pgfspectra@counta\pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl/\pgfspectra@intensity@to@list,}\else% \pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl/\pgfspectra@intensity@to@list}\fi% \advance\pgfspectra@countb by1% }%END do \else% \@for\@myarg:=#1% \do{% \expandafter\pgfspectra@get@line@info\@myarg% \ifnum\pgfspectra@countb<\pgfspectra@counta\pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl,}\else% \pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl}\fi% \advance\pgfspectra@countb by1% }%END do \fi% \else% lines for one specific charge \@for\@myarg:=#1\do{\expandafter\pgfspectra@get@line@info\@myarg\ifx\pgfspectra@currentline@charge\pgfspectra@charge\advance\pgfspectra@counta by 1\fi}%count only if is the desired charge \ifpgfspectra@intensity% \@for\@myarg:=#1% \do{% \expandafter\pgfspectra@get@line@info\@myarg% \pgfmathparse{\pgfspectra@relintthresh+(1-\pgfspectra@relintthresh)*\pgfspectra@currentline@int/#2}\edef\pgfspectra@intensity@to@list{\pgfmathresult}% \ifx\pgfspectra@currentline@charge\pgfspectra@charge%add to list if is the desired charge \ifnum\pgfspectra@countb<\pgfspectra@counta\pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl/\pgfspectra@intensity@to@list,}\else% \pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl/\pgfspectra@intensity@to@list}\fi% \advance\pgfspectra@countb by 1% \fi% }%END do \else% \@for\@myarg:=#1% \do{% \expandafter\pgfspectra@get@line@info\@myarg% \ifx\pgfspectra@currentline@charge\pgfspectra@charge%add to list if is the desired charge \ifnum\pgfspectra@countb<\pgfspectra@counta\pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl,}\else% \pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl}\fi% \advance\pgfspectra@countb by 1% \fi% }%END do \fi% \fi% \else%\pgfspectra@intmin>0 & \pgfspectra@intmin<1 \ifnum\@pgfspectra@intmin>100\else% \pgfmathparse{\pgfspectra@intmin*#2}\edef\pgfspectra@actual@int{\pgfmathresult}% \ifx\pgfspectra@ll\pgfspectra@charge%ALL lines \@for\@myarg:=#1\do{\advance\pgfspectra@counta by 1}%count all entries \ifpgfspectra@intensity% \@for\@myarg:=#1% \do{% \expandafter\pgfspectra@get@line@info\@myarg% \pgfmathparse{notless(\pgfspectra@currentline@int,\pgfspectra@actual@int)}\relax\edef\pgfspectra@int@result{\pgfmathresult}% \ifnum\pgfspectra@int@result=1% \pgfmathparse{\pgfspectra@relintthresh+(1-\pgfspectra@relintthresh)*\pgfspectra@currentline@int/#2}\edef\pgfspectra@intensity@to@list{\pgfmathresult}% \ifpgfspectra@first\pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl/\pgfspectra@intensity@to@list}\else% \pgfspectra@addt@list{\pgfspectra@list@@}{,\pgfspectra@currentline@wl/\pgfspectra@intensity@to@list}\fi% \ifpgfspectra@first\pgfspectra@firstfalse\fi% \fi% \advance\pgfspectra@countb by 1% }%END do \else% \@for\@myarg:=#1% \do{% \expandafter\pgfspectra@get@line@info\@myarg% \pgfmathparse{notless(\pgfspectra@currentline@int,\pgfspectra@actual@int)}\relax\edef\pgfspectra@int@result{\pgfmathresult}% \ifnum\pgfspectra@int@result=1% \ifpgfspectra@first\pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl}\else% \pgfspectra@addt@list{\pgfspectra@list@@}{,\pgfspectra@currentline@wl}\fi% \ifpgfspectra@first\pgfspectra@firstfalse\fi% \fi% \advance\pgfspectra@countb by 1% }%END do \fi% \else% lines for one specific charge \@for\@myarg:=#1\do{\expandafter\pgfspectra@get@line@info\@myarg\ifx\pgfspectra@currentline@charge\pgfspectra@charge\advance\pgfspectra@counta by 1\fi}%count only if is the desired charge \ifpgfspectra@intensity% \@for\@myarg:=#1% \do{% \expandafter\pgfspectra@get@line@info\@myarg% \ifx\pgfspectra@currentline@charge\pgfspectra@charge%add to list if is the desired charge \pgfmathparse{notless(\pgfspectra@currentline@int,\pgfspectra@actual@int)}\edef\pgfspectra@int@result{\pgfmathresult}% \ifnum\pgfspectra@int@result=1% \pgfmathparse{\pgfspectra@relintthresh+(1-\pgfspectra@relintthresh)*\pgfspectra@currentline@int/#2}\edef\pgfspectra@intensity@to@list{\pgfmathresult}% \ifpgfspectra@first\pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl/\pgfspectra@intensity@to@list}\else% \pgfspectra@addt@list{\pgfspectra@list@@}{,\pgfspectra@currentline@wl/\pgfspectra@intensity@to@list}\fi% \ifpgfspectra@first\pgfspectra@firstfalse\fi% \fi% \advance\pgfspectra@countb by 1% \fi% }%END do \else% \@for\@myarg:=#1% \do{% \expandafter\pgfspectra@get@line@info\@myarg% \ifx\pgfspectra@currentline@charge\pgfspectra@charge%add to list if is the desired charge \pgfmathparse{notless(\pgfspectra@currentline@int,\pgfspectra@actual@int)}\edef\pgfspectra@int@result{\pgfmathresult}% \ifnum\pgfspectra@int@result=1% \ifpgfspectra@first\pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl}\else% \pgfspectra@addt@list{\pgfspectra@list@@}{,\pgfspectra@currentline@wl}\fi% \ifpgfspectra@first\pgfspectra@firstfalse\fi% \fi% \advance\pgfspectra@countb by 1% \fi% }%END do \fi% \fi% \fi% \fi% }% % add to list \def\pgfspectra@addt@list#1#2{\edef\pgfspectra@list@@{#1#2}}% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % internal utils %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\pgfspectra@utils@draw@axis{\ignorespaces% % axis unit -> NEW v2.1.0 \pgfkeys{/pgf/number format/.cd,fixed,precision=\pgfspectra@axisunitprecision,set thousands separator={},assume math mode=true}% \ifx\pgfspectra@axisunit\pgfspectra@axisunit@nm\relax% \def\pgfspectra@axisunit@scale{1}\def\pgfspectra@axisunit@addzeros{}% \ifpgfspectra@axisunitlabel\def\pgfspectra@axilabelsunit{$nm$}\fi% \else\ifx\pgfspectra@axisunit\pgfspectra@axisunit@um\relax% \def\pgfspectra@axisunit@scale{1000}\def\pgfspectra@axisunit@addzeros{}\pgfkeys{/pgf/number format/.cd,fixed zerofill}% \ifpgfspectra@axisunitlabel\def\pgfspectra@axilabelsunit{$\mu m$}\fi% \else\ifx\pgfspectra@axisunit\pgfspectra@axisunit@A\relax% \def\pgfspectra@axisunit@scale{1}\def\pgfspectra@axisunit@addzeros{0}% probably not the best solution to overcome the TeX dimension limit values (16384pt)... but works! \ifpgfspectra@axisunitlabel\edef\pgfspectra@axilabelsunit{\AA}\fi% \fi\fi\fi% \ifnum\pgfspectra@begin>\pgfspectra@end% % New xshift={-2.5*\@pgfspectra@axis@height} to hold bigger numbers, e.g. 2500 \draw[draw=none,fill=\pgfspectra@axiscolor] ([xshift={2.5*\@pgfspectra@axis@height}]0,\pgfspectra@height+2.5pt) rectangle ([xshift={-2.5*\@pgfspectra@axis@height}]-\pgfspectra@width,-2.5*\@pgfspectra@axis@height);% % minor ticks -> NEW v2.0.0 -> improved in v3.0.0 -> the width of ticks is now dependent of \pgfspectra@linewidth \ifnum\pgfspectra@axisticks>0\relax% \pgfmathparse{\pgfspectra@end+\pgfspectra@axisstep/(\pgfspectra@axisticks+1)}\pgfmathparse{int(\pgfmathresult)}% \edef\@axis@list{\pgfspectra@end,\pgfmathresult,...,\pgfspectra@begin}% \foreach \x in \@axis@list% {% \pgfmathparse{(\pgfspectra@end-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[\pgfspectra@axisfontcolor!80!transparent,line width={.25*\pgfspectra@linewidth}] (\pgfspectra@currentx,-.375*\@pgfspectra@axis@height) -- ++(0,.375*\@pgfspectra@axis@height);% }% \fi% \pgfmathparse{\pgfspectra@end+\pgfspectra@axisstep}\pgfmathparse{int(\pgfmathresult)}% \edef\@axis@list{\pgfspectra@end,\pgfmathresult,...,\pgfspectra@begin}% \foreach \x in \@axis@list% {% \pgfmathparse{(\pgfspectra@end-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[\pgfspectra@axisfontcolor,line width=\pgfspectra@linewidth] (\pgfspectra@currentx,-.75*\@pgfspectra@axis@height) -- ++(0,.75*\@pgfspectra@axis@height);% \pgfmathparse{\x/\pgfspectra@axisunit@scale}\edef\pgfspectra@xscaledvalue{\pgfmathresult}% NEW v2.1.0 \node[\pgfspectra@axisfontcolor,font=\pgfspectra@axisfont,above,inner sep=0pt] at (\pgfspectra@currentx,-2.25*\@pgfspectra@axis@height) {\pgfmathprintnumber{\pgfspectra@xscaledvalue}\pgfspectra@axisunit@addzeros};% }% \else% \draw[draw=none,fill=\pgfspectra@axiscolor] ([xshift={-2.5*\@pgfspectra@axis@height}]0,\pgfspectra@height+2.5pt) rectangle ([xshift={2.5*\@pgfspectra@axis@height}]\pgfspectra@width,-2.5*\@pgfspectra@axis@height);% % minor ticks -> NEW v2.0.0 \ifnum\pgfspectra@axisticks>0\relax% \pgfmathparse{\pgfspectra@begin+\pgfspectra@axisstep/(\pgfspectra@axisticks+1)}\pgfmathparse{int(\pgfmathresult)}% \edef\@axis@list{\pgfspectra@begin,\pgfmathresult,...,\pgfspectra@end}% \foreach \x in \@axis@list% {% \pgfmathparse{(\x-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[\pgfspectra@axisfontcolor!80!transparent,line width={.25*\pgfspectra@linewidth}] (\pgfspectra@currentx,-.375*\@pgfspectra@axis@height) -- ++(0,.375*\@pgfspectra@axis@height);% }% \fi% \pgfmathparse{\pgfspectra@begin+\pgfspectra@axisstep}\pgfmathparse{int(\pgfmathresult)}% \edef\@axis@list{\pgfspectra@begin,\pgfmathresult,...,\pgfspectra@end}% \foreach \x in \@axis@list% {% \pgfmathparse{(\x-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[\pgfspectra@axisfontcolor,line width=\pgfspectra@linewidth] (\pgfspectra@currentx,-.75*\@pgfspectra@axis@height) -- ++(0,.75*\@pgfspectra@axis@height);% \pgfmathparse{\x/\pgfspectra@axisunit@scale}\edef\pgfspectra@xscaledvalue{\pgfmathresult}% NEW v2.1.0 \node[\pgfspectra@axisfontcolor,font=\pgfspectra@axisfont,above,inner sep=0pt] at (\pgfspectra@currentx,-2.25*\@pgfspectra@axis@height) {\pgfmathprintnumber{\pgfspectra@xscaledvalue}\pgfspectra@axisunit@addzeros};% }% \fi% % axis label -> NEW v3.0.0 \ifpgfspectra@axisunitlabel% \edef\pgfspectra@testa{\pgfspectra@axislabeltxt}% \ifx\pgfspectra@testa\@empty\relax% \edef\pgfspectra@axislabeltxt{$\lambda\,($\pgfspectra@axilabelsunit$)$}% \fi% \edef\pgfspectra@testa{\pgfspectra@axislabelposition}% \edef\pgfspectra@testb{center}% \ifx\pgfspectra@testa\pgfspectra@testb\relax% \pgfmathparse{sign(\pgfspectra@end-\pgfspectra@begin)*0.5*\pgfspectra@width}\edef\pgfspectra@currentx{\pgfmathresult pt}% \edef\pgfspectra@currentpos{below}% \edef\pgfspectra@currentxshift{0pt}% \else\edef\pgfspectra@testb{right}% \ifx\pgfspectra@testa\pgfspectra@testb\relax% \pgfmathparse{sign(\pgfspectra@end-\pgfspectra@begin)*\pgfspectra@width}\edef\pgfspectra@currentx{\pgfmathresult pt}% \edef\pgfspectra@currentpos{below left} \pgfmathparse{2.5*\@pgfspectra@axis@height}\edef\pgfspectra@currentxshift{\pgfmathresult pt}% \else\edef\pgfspectra@testb{left}% \ifx\pgfspectra@testa\pgfspectra@testb\relax% \edef\pgfspectra@currentx{0pt}% \edef\pgfspectra@currentpos{below right}% \pgfmathparse{-2.5*\@pgfspectra@axis@height}\edef\pgfspectra@currentxshift{\pgfmathresult pt}% \else% \PackageError{pgf-spectra}{Unknown '\pgfspectra@testa' axis label position. Default (center) will be used...}{}% \pgfmathparse{sign(\pgfspectra@end-\pgfspectra@begin)*0.5*\pgfspectra@width}\edef\pgfspectra@currentx{\pgfmathresult pt}% \edef\pgfspectra@currentpos{below}% \edef\pgfspectra@currentxshift{0pt}% \fi\fi\fi% {\pgfspectra@axisfont\selectfont\pgfmathparse{ceil(4/3*height("()"))}\xdef\pgfspectra@axisfont@ht{\pgfmathresult pt}}% \fill[\pgfspectra@axiscolor] (-2.5*\@pgfspectra@axis@height,-2.5*\@pgfspectra@axis@height) rectangle % ++(\pgfspectra@width+5*\@pgfspectra@axis@height,-\pgfspectra@axisfont@ht-4pt);% \node[\pgfspectra@currentpos,\pgfspectra@axisfontcolor,font=\pgfspectra@axisfont,inner ysep=2pt,inner xsep=1pt] at ([xshift=\pgfspectra@currentxshift]\pgfspectra@currentx,-2.5*\@pgfspectra@axis@height) {\pgfspectra@axislabeltxt};% \fi% }% \def\pgfspectra@utils@put@label{\ignorespaces% \ifx\pgfspectra@elt@chemsym\undefined\def\pgfspectra@elt@chemsym{}\fi% \pgfspectra@get@label@position% \ifnum\pgfspectra@begin>\pgfspectra@end% \ifcase\pgfspectra@label@position% %west \ifpgfspectra@drawaxis%\ifpgfspectra@axislabel% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2em,align=right] at (-2.5*\@pgfspectra@axis@height-\pgfspectra@width,0.5*\pgfspectra@height-1.25*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2em,align=right] at (-\pgfspectra@width,0.5*\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%north west \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,above right,inner xsep=0pt] at (-2.5*\@pgfspectra@axis@height-\pgfspectra@width,\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,above right,inner xsep=0pt] at (-\pgfspectra@width,\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%north \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,above] at (-0.5*\pgfspectra@width,\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \or%north east \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,above left,inner xsep=0pt] at (2.5*\@pgfspectra@axis@height,\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,above left,inner xsep=0pt] at (0,\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi \or%east \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,right] at (2.5*\@pgfspectra@axis@height,0.5*\pgfspectra@height-1.25*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,right] at (0,0.5*\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%south east \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below left,inner xsep=0pt] at (2.5*\@pgfspectra@axis@height,-2.5*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below left,inner xsep=0pt] at (0,0) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%south \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below] at (-0.5*\pgfspectra@width,-2.5*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below] at (-0.5*\pgfspectra@width,0) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%south west \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below right,inner xsep=0pt] at (-2.5*\@pgfspectra@axis@height-\pgfspectra@width,-2.5*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below right,inner xsep=0pt] at (-\pgfspectra@width,0) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \fi% \else% \ifcase\pgfspectra@label@position% %west \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2em,align=right] at (-2.5*\@pgfspectra@axis@height,0.5*\pgfspectra@height-1.25*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,left,minimum width=2em,align=right] at (0,0.5*\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%north west \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,above right,inner xsep=0pt] at (-2.5*\@pgfspectra@axis@height,\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,above right,inner xsep=0pt] at (0,\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%north \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,above] at (0.5*\pgfspectra@width,\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \or%north east \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,above left,inner xsep=0pt] at (\pgfspectra@width+2.5*\@pgfspectra@axis@height,\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,above left,inner xsep=0pt] at (\pgfspectra@width,\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%east \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,right] at ([xshift={2.5*\@pgfspectra@axis@height}]\pgfspectra@width,0.5*\pgfspectra@height-1.25*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,right] at (\pgfspectra@width,0.5*\pgfspectra@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%south east \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below left,inner xsep=0pt] at (\pgfspectra@width+2.5*\@pgfspectra@axis@height,-2.5*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below left,inner xsep=0pt] at (\pgfspectra@width,0) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%south \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below] at (0.5*\pgfspectra@width,-2.5*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below] at (0.5*\pgfspectra@width,0) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \or%south west \ifpgfspectra@drawaxis% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below right,inner xsep=0pt] at (-2.5*\@pgfspectra@axis@height,-2.5*\@pgfspectra@axis@height) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \else% \node[\pgfspectra@labelfontcolor,font=\pgfspectra@labelfont,below right,inner xsep=0pt] at (0,0) {\pgfspectra@labelbtext\pgfspectra@elt@chemsym\pgfspectra@labelatext};% \fi% \fi% \fi% }% \def\pgfspectra@utils@drawbackground#1{\ignorespaces% NEW v2.0.0 - in this version draws from UV, VIS to IV -> replaces \pgfspectra@utils@visiblespectrum#1 % reprocess visible background (only visible) -> needed because of the override in keys \pgfspectra@counta=0% \pgfspectra@countb=-1% \@for\@myarg:=\pgfspectra@visible@list\do{% \ifx\pgfspectra@back\@myarg\pgfspectra@countb=\pgfspectra@counta\fi% \advance\pgfspectra@counta by1% }% \ifnum\pgfspectra@countb>-1\let\pgfspectra@back\pgfspectra@visible\fi% \ifpgfspectra@usevisibleshade\relax% NEW v2.1.0 \pgfmathparse{int(#1*100)}\edef\pgfspectra@bright{\pgfmathresult}% \ifnum\pgfspectra@begin>\pgfspectra@end% 0 \ifnum\pgfspectra@end<380\relax% 1 \pgfmathparse{(\pgfspectra@end-380)*\pgfspectra@xscale}\edef\pgfspectra@pointA{\pgfmathresult pt}% \ifnum\pgfspectra@begin>780\relax% 2 \pgfmathparse{(\pgfspectra@end-780)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@UVcolor] (0,0) rectangle (\pgfspectra@pointA,\pgfspectra@height);% \draw[draw=none,fill=\pgfspectra@background@IRcolor] (\pgfspectra@pointB,0) rectangle (-\pgfspectra@width,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \pgfspectrashade(380,780){pgfspectra@visibleshade}% \fill[shading=pgfspectra@visibleshade,shading angle=180] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \else% 2 \pgfmathparse{(\pgfspectra@end-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@UVcolor] (0,0) rectangle (\pgfspectra@pointA,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \pgfspectrashade(380,\pgfspectra@begin){pgfspectra@visibleshade}% \fill[shading=pgfspectra@visibleshade,shading angle=180] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \fi% 2 \else% 1 \ifnum\pgfspectra@begin>780\relax% 2 \pgfmathparse{(\pgfspectra@end-780)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@IRcolor] (\pgfspectra@pointB,0) rectangle (-\pgfspectra@width,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \pgfspectrashade(\pgfspectra@end,780){pgfspectra@visibleshade}% \fill[shading=pgfspectra@visibleshade,shading angle=180] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \else% 2 \pgfmathparse{(\pgfspectra@end-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \pgfspectrashade(\pgfspectra@end,\pgfspectra@begin){pgfspectra@visibleshade}% \fill[shading=pgfspectra@visibleshade,shading angle=180] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \fi% 2 \fi% 1 \else% 0 \ifnum\pgfspectra@begin<380\relax% 1 \pgfmathparse{(380-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointA{\pgfmathresult pt}% \ifnum\pgfspectra@end>780\relax% 2 \pgfmathparse{(780-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@UVcolor] (0,0) rectangle (\pgfspectra@pointA,\pgfspectra@height);% \draw[draw=none,fill=\pgfspectra@background@IRcolor] (\pgfspectra@pointB,0) rectangle (\pgfspectra@width,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \pgfspectrashade(380,780){pgfspectra@visibleshade}% \fill[shading=pgfspectra@visibleshade] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \else% 2 \pgfmathparse{(\pgfspectra@end-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@UVcolor] (0,0) rectangle (\pgfspectra@pointA,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \pgfspectrashade(380,\pgfspectra@end){pgfspectra@visibleshade}% \fill[shading=pgfspectra@visibleshade] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \fi% 2 \else% 1 \ifnum\pgfspectra@end>780\relax% 2 \pgfmathparse{(780-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@IRcolor] (\pgfspectra@pointB,0) rectangle (\pgfspectra@width,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \pgfspectrashade(\pgfspectra@begin,780){pgfspectra@visibleshade}% \fill[shading=pgfspectra@visibleshade] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \else% 2 \pgfmathparse{(\pgfspectra@end-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \pgfspectrashade(\pgfspectra@begin,\pgfspectra@end){pgfspectra@visibleshade}% \fill[shading=pgfspectra@visibleshade] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \fi% 2 \fi% 1 \fi%0 \else% pgfspectra@usevisibleshade (don't use shading, draw line by line...) \pgfmathparse{int(#1*100)}\edef\pgfspectra@bright{\pgfmathresult}% \pgfmathparse{1.4*\pgfspectra@xscale+.09*\linewidth/\pgfspectra@width}\edef\@pgfspectra@linewidth{\pgfmathresult}% NEW v2.0.0 {\pgfspectra@xscale} -> {1.4*\pgfspectra@xscale+.09*\linewidth/\pgfspectra@width} \ifnum\pgfspectra@begin>\pgfspectra@end% 0 \ifnum\pgfspectra@end<380\relax% 1 \pgfmathparse{(\pgfspectra@end-380)*\pgfspectra@xscale}\edef\pgfspectra@pointA{\pgfmathresult pt}% \ifnum\pgfspectra@begin>780\relax% 2 \pgfmathparse{(\pgfspectra@end-780)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@UVcolor] (0,0) rectangle (\pgfspectra@pointA,\pgfspectra@height);% \draw[draw=none,fill=\pgfspectra@background@IRcolor] (\pgfspectra@pointB,0) rectangle (-\pgfspectra@width,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \foreach \x in {780,...,380}{% \wlcolor{\x}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@bright!\pgfspectra@backvisible}% CHANGED v2.1.0 \pgfmathparse{\pgfspectra@pointB+(780-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[wlcolor,line width=\@pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);}% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \else% 2 \pgfmathparse{(\pgfspectra@end-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@UVcolor] (0,0) rectangle (\pgfspectra@pointA,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \foreach \x in {\pgfspectra@begin,...,380}{% \wlcolor{\x}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@bright!\pgfspectra@backvisible}% CHANGED v2.1.0 \pgfmathparse{\pgfspectra@pointB+(\pgfspectra@begin-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[wlcolor,line width=\@pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);}% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \fi% 2 \else% 1 \ifnum\pgfspectra@begin>780\relax% 2 \pgfmathparse{(\pgfspectra@end-780)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@IRcolor] (\pgfspectra@pointB,0) rectangle (-\pgfspectra@width,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \foreach \x in {780,...,\pgfspectra@end}{% \wlcolor{\x}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@bright!\pgfspectra@backvisible}% CHANGED v2.1.0 \pgfmathparse{\pgfspectra@pointB+(780-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[wlcolor,line width=\@pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);}% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \else% 2 \pgfmathparse{(\pgfspectra@end-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \foreach \x in {\pgfspectra@begin,...,\pgfspectra@end}{% \wlcolor{\x}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@bright!\pgfspectra@backvisible}% CHANGED v2.1.0 \pgfmathparse{\pgfspectra@pointB+(\pgfspectra@begin-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[wlcolor,line width=\@pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);}% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \fi% 2 \fi% 1 \else% 0 \ifnum\pgfspectra@begin<380\relax% 1 \pgfmathparse{(380-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointA{\pgfmathresult pt}% \ifnum\pgfspectra@end>780\relax% 2 \pgfmathparse{(780-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@UVcolor] (0,0) rectangle (\pgfspectra@pointA,\pgfspectra@height);% \draw[draw=none,fill=\pgfspectra@background@IRcolor] (\pgfspectra@pointB,0) rectangle (\pgfspectra@width,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \foreach \x in {380,...,780}{% \wlcolor{\x}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@bright!\pgfspectra@backvisible}% CHANGED v2.1.0 \pgfmathparse{\pgfspectra@pointB-(780-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[wlcolor,line width=\@pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);}% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \else% 2 \pgfmathparse{(\pgfspectra@end-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@UVcolor] (0,0) rectangle (\pgfspectra@pointA,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \foreach \x in {\pgfspectra@end,...,380}{% \wlcolor{\x}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@bright!\pgfspectra@backvisible}% CHANGED v2.1.0 \pgfmathparse{\pgfspectra@pointB-(\pgfspectra@end-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[wlcolor,line width=\@pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);}% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (\pgfspectra@pointA,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \fi% 2 \else% 1 \ifnum\pgfspectra@end>780\relax% 2 \pgfmathparse{(780-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \draw[draw=none,fill=\pgfspectra@background@IRcolor] (\pgfspectra@pointB,0) rectangle (\pgfspectra@width,\pgfspectra@height);% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \foreach \x in {\pgfspectra@begin,...,780}{% \wlcolor{\x}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@bright!\pgfspectra@backvisible}% CHANGED v2.1.0 \pgfmathparse{(\x-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[wlcolor,line width=\@pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);}% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \else% 2 \pgfmathparse{(\pgfspectra@end-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@pointB{\pgfmathresult pt}% \ifx\pgfspectra@back\pgfspectra@visible% 3 visible background \foreach \x in {\pgfspectra@begin,...,\pgfspectra@end}{% \wlcolor{\x}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@bright!\pgfspectra@backvisible}% CHANGED v2.1.0 \pgfmathparse{\x-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \draw[wlcolor,line width=\@pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);}% \else% 3 \draw[draw=none,fill=\pgfspectra@back] (0,0) rectangle (\pgfspectra@pointB,\pgfspectra@height);% \fi% 3 \fi% 2 \fi% 1 \fi%0 \fi% pgfspectra@usevisibleshade }% \def\pgfspectra@utils@drawabsorptionlines{\ignorespaces% \ifnum\pgfspectra@begin>\pgfspectra@end% \ifpgfspectra@intensity% \ifpgfspectra@redshift\pgfspectra@utils@redshift\fi% NEW v2.0.0 \foreach \x/\y in \pgfspectra@list@@% {% \pgfmathparse{notless(\x,\pgfspectra@end)}\edef\pgfspectra@x@nl{\pgfmathresult}% \pgfmathparse{notgreater(\x,\pgfspectra@begin)}\edef\pgfspectra@x@ng{\pgfmathresult}% \pgfmathparse{and(\pgfspectra@x@nl,\pgfspectra@x@ng)}\edef\pgfspectra@plot@point{\pgfmathresult}% \ifnum\pgfspectra@plot@point=1% \pgfmathparse{(\pgfspectra@end-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \pgfmathparse{int(\y*100)}\edef\pgfspectra@black{\pgfmathresult}% \wlcolor{\x}% \colorlet{wlcolor}{black!\pgfspectra@black!pgfspectra@temp}% \draw[wlcolor,line width=\pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);% \fi% }% \else% \ifpgfspectra@redshift\pgfspectra@utils@redshift\fi% NEW v2.0.0 \foreach \x in \pgfspectra@list@@% {% \pgfmathparse{notless(\x,\pgfspectra@end)}\edef\pgfspectra@x@nl{\pgfmathresult}% \pgfmathparse{notgreater(\x,\pgfspectra@begin)}\edef\pgfspectra@x@ng{\pgfmathresult}% \pgfmathparse{and(\pgfspectra@x@nl,\pgfspectra@x@ng)}\edef\pgfspectra@plot@point{\pgfmathresult}% \ifnum\pgfspectra@plot@point=1% \pgfmathparse{(\pgfspectra@end-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \wlcolor{\x}% \colorlet{wlcolor}{black!\pgfspectra@lineint!pgfspectra@temp}% \draw[wlcolor,line width=\pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);% \fi% }% \fi% \else% \ifpgfspectra@intensity% \ifpgfspectra@redshift\pgfspectra@utils@redshift\fi% NEW v2.0.0 \foreach \x/\y in \pgfspectra@list@@% {% \pgfmathparse{notless(\x,\pgfspectra@begin)}\edef\pgfspectra@x@nl{\pgfmathresult}% \pgfmathparse{notgreater(\x,\pgfspectra@end)}\edef\pgfspectra@x@ng{\pgfmathresult}% \pgfmathparse{and(\pgfspectra@x@nl,\pgfspectra@x@ng)}\edef\pgfspectra@plot@point{\pgfmathresult}% \ifnum\pgfspectra@plot@point=1% \pgfmathparse{(\x-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \pgfmathparse{int(\y*100)}\edef\pgfspectra@black{\pgfmathresult}% \wlcolor{\x}% \colorlet{wlcolor}{black!\pgfspectra@black!pgfspectra@temp}% \draw[wlcolor,line width=\pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);% \fi% }% \else% \ifpgfspectra@redshift\pgfspectra@utils@redshift\fi% NEW v2.0.0 \foreach \x in \pgfspectra@list@@% {% \pgfmathparse{notless(\x,\pgfspectra@begin)}\edef\pgfspectra@x@nl{\pgfmathresult}% \pgfmathparse{notgreater(\x,\pgfspectra@end)}\edef\pgfspectra@x@ng{\pgfmathresult}% \pgfmathparse{and(\pgfspectra@x@nl,\pgfspectra@x@ng)}\edef\pgfspectra@plot@point{\pgfmathresult}% \ifnum\pgfspectra@plot@point=1% \pgfmathparse{(\x-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \wlcolor{\x}% \colorlet{wlcolor}{black!\pgfspectra@lineint!pgfspectra@temp}% \draw[wlcolor,line width=\pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);% \fi% }% \fi% \fi% \ifpgfspectra@RSvalue% NEW v2.0.0 \ifnum\pgfspectra@begin>\pgfspectra@end% \ifpgfspectra@drawaxis\pgfmathparse{-\pgfspectra@width-2.5*\@pgfspectra@axis@height}\edef\pgfspectra@redshiftinfo@x{\pgfmathresult pt}% \else\pgfmathparse{-\pgfspectra@width}\edef\pgfspectra@redshiftinfo@x{\pgfmathresult pt}\fi% \else% \ifpgfspectra@drawaxis\pgfmathparse{-2.5*\@pgfspectra@axis@height}\edef\pgfspectra@redshiftinfo@x{\pgfmathresult pt}% \else\edef\pgfspectra@redshiftinfo@x{0pt}\fi% \fi% \ifpgfspectra@drawaxis\pgfmathparse{-.75*\@pgfspectra@axis@height-1.3*\ht0-2pt}\edef\pgfspectra@redshiftinfo@y{\pgfmathresult pt}\else\edef\pgfspectra@redshiftinfo@y{0pt}\fi% \node[below right,inner xsep=0pt,font=\pgfspectra@axisfont] at (\pgfspectra@redshiftinfo@x,\pgfspectra@redshiftinfo@y) {\pgfspectra@redshiftinfo};% \fi% NEW v2.0.0 }% \def\pgfspectra@utils@drawemissionlines{\ignorespaces% \ifnum\pgfspectra@begin>\pgfspectra@end% \ifpgfspectra@intensity% \ifpgfspectra@redshift\pgfspectra@utils@redshift\fi% NEW v2.0.0 \foreach \x/\y in \pgfspectra@list@@% {% \wlcolor{\x}% \pgfmathparse{notless(\x,\pgfspectra@end)}\edef\pgfspectra@x@nl{\pgfmathresult}% \pgfmathparse{notgreater(\x,\pgfspectra@begin)}\edef\pgfspectra@x@ng{\pgfmathresult}% \pgfmathparse{and(\pgfspectra@x@nl,\pgfspectra@x@ng)}\edef\pgfspectra@plot@point{\pgfmathresult}% \ifnum\pgfspectra@plot@point=1% \pgfmathparse{(\pgfspectra@end-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \pgfmathparse{int(\y*100)}\edef\pgfspectra@black{\pgfmathresult}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@black!black}% \draw[wlcolor,line width=\pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);% \fi% }% \else% \ifpgfspectra@redshift\pgfspectra@utils@redshift\fi% NEW v2.0.0 \foreach \x in \pgfspectra@list@@% {% \wlcolor{\x}% \pgfmathparse{notless(\x,\pgfspectra@end)}\edef\pgfspectra@x@nl{\pgfmathresult}% \pgfmathparse{notgreater(\x,\pgfspectra@begin)}\edef\pgfspectra@x@ng{\pgfmathresult}% \pgfmathparse{and(\pgfspectra@x@nl,\pgfspectra@x@ng)}\edef\pgfspectra@plot@point{\pgfmathresult}% \ifnum\pgfspectra@plot@point=1% \pgfmathparse{(\pgfspectra@end-\x)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@lineint!black}% \draw[wlcolor,line width=\pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);% \fi% }% \fi% \else% \ifpgfspectra@intensity% \ifpgfspectra@redshift\pgfspectra@utils@redshift\fi% NEW v2.0.0 \foreach \x/\y in \pgfspectra@list@@% {% \wlcolor{\x}% \pgfmathparse{notless(\x,\pgfspectra@begin)}\edef\pgfspectra@x@nl{\pgfmathresult}% \pgfmathparse{notgreater(\x,\pgfspectra@end)}\edef\pgfspectra@x@ng{\pgfmathresult}% \pgfmathparse{and(\pgfspectra@x@nl,\pgfspectra@x@ng)}\edef\pgfspectra@plot@point{\pgfmathresult}% \ifnum\pgfspectra@plot@point=1% \pgfmathparse{(\x-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \pgfmathparse{int(\y*100)}\edef\pgfspectra@black{\pgfmathresult}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@black!black}% \draw[wlcolor,line width=\pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);% \fi% }% \else% \ifpgfspectra@redshift\pgfspectra@utils@redshift\fi% NEW v2.0.0 \foreach \x in \pgfspectra@list@@% {% \wlcolor{\x}% \pgfmathparse{notless(\x,\pgfspectra@begin)}\edef\pgfspectra@x@nl{\pgfmathresult}% \pgfmathparse{notgreater(\x,\pgfspectra@end)}\edef\pgfspectra@x@ng{\pgfmathresult}% \pgfmathparse{and(\pgfspectra@x@nl,\pgfspectra@x@ng)}\edef\pgfspectra@plot@point{\pgfmathresult}% \ifnum\pgfspectra@plot@point=1% \pgfmathparse{(\x-\pgfspectra@begin)*\pgfspectra@xscale}\edef\pgfspectra@currentx{\pgfmathresult pt}% \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@lineint!black}% \draw[wlcolor,line width=\pgfspectra@linewidth] (\pgfspectra@currentx,0) -- ++(0,\pgfspectra@height);% \fi% }% \fi% \fi% \ifpgfspectra@RSvalue% NEW v2.0.0 \ifnum\pgfspectra@begin>\pgfspectra@end% \ifpgfspectra@drawaxis\pgfmathparse{-\pgfspectra@width-2.5*\@pgfspectra@axis@height}\edef\pgfspectra@redshiftinfo@x{\pgfmathresult pt}% \else\pgfmathparse{-\pgfspectra@width}\edef\pgfspectra@redshiftinfo@x{\pgfmathresult pt}\fi% \else% \ifpgfspectra@drawaxis\pgfmathparse{-2.5*\@pgfspectra@axis@height}\edef\pgfspectra@redshiftinfo@x{\pgfmathresult pt}% \else\edef\pgfspectra@redshiftinfo@x{0pt}\fi% \fi% \ifpgfspectra@drawaxis\pgfmathparse{-.75*\@pgfspectra@axis@height-1.3*\ht0-2pt}\edef\pgfspectra@redshiftinfo@y{\pgfmathresult pt}\else\edef\pgfspectra@redshiftinfo@y{0pt}\fi% \node[below right,inner xsep=0pt,font=\pgfspectra@axisfont] at (\pgfspectra@redshiftinfo@x,\pgfspectra@redshiftinfo@y) {\pgfspectra@redshiftinfo};% \fi% NEW v2.0.0 }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % return: integer with position (e.g. '0' for west, ... ) \def\pgfspectra@get@label@position{\ignorespaces% \pgfspectra@countc=0% \@for\@mylabel:=\pgfspectra@label@position@list% \do{% \ifx\@mylabel\pgfspectra@labelposition\edef\pgfspectra@label@position{\the\pgfspectra@countc}\fi% \advance\pgfspectra@countc by1% }% }% % NEW v2.0.0 ---------------------- % redshift: lambda(obs)=lambda(emit)*{(1+v/c*cos(theta))/sqrt(1-v^2/c^2)} ---> Relativistic Doppler % vbar-> v/c -> normalized velocity of the source (e.g. '0.9' for v=0.9c ) % theta ->angle between the direction of relative motion of the source and the direction of emission in the observer's frame (zero angle is directly away from the observer) \def\pgfspectra@processredshiftkey#1{\ignorespaces% \pgfspectra@redshiftfalse% \edef\pgfspectra@redshiftkey@expand{#1}% to expand a value passed by a macro (not necessary if the user provided a number...) \expandafter\pgfspectra@redshiftkey@firstchar\pgfspectra@redshiftkey@expand\relax% \ifcat1\pgfspectra@@RedShift\relax% \pgfmathparse{1+#1}\relax% \edef\pgfspectra@UMMAISZ{\pgfmathresult}\pgfspectra@redshifttrue% \edef\pgfspectra@redshiftinfo{redshift: z=#1}% \edef\pgfspectra@write@redshiftinfo{redshift: z=#1}% \else% \edef\pgfspectra@redshiftkey@expand{#1}% \expandafter\pgfspectra@process@redshift\pgfspectra@redshiftkey@expand\relax% \fi% }% \def\pgfspectra@redshiftkey@firstchar#1#2\relax{\edef\pgfspectra@@RedShift{#1}}% \def\pgfspectra@process@redshift#1=#2/#3\relax{% \edef\pgfspectra@redshifttest{#1}% \ifx\pgfspectra@redshifttest\pgfspectra@redshift@D\relax% \pgfmathparse{(1+#2*cos(#3))/sqrt(1-#2*#2)}% \edef\pgfspectra@UMMAISZ{\pgfmathresult}\pgfspectra@redshifttrue% \pgfmathparse{#2*cos(#3))/sqrt(1-#2*#2)}% \edef\pgfspectra@redshiftinfo{Relativistic Doppler redshift: z=\pgfmathresult\ (\mbox{v\hskip.1ex=\hskip.1ex#2\hskip.1exc\hskip.5ex;\hskip.5ex\ensuremath{\theta}\hskip.1ex=\hskip.1ex#3\ensuremath{^\circ}})}% \edef\pgfspectra@write@space{ }% \edef\pgfspectra@write@redshiftinfo{Relativistic Doppler redshift: z=\pgfmathresult\pgfspectra@write@space(v=#2c ; theta=#3 degrees)}% \fi% }% % \pgfspectra@utils@redshift --------------------------------------------------------------------- % returns the wllist with the shift computed \def\pgfspectra@utils@redshift{\ignorespaces% \let\wt@backlist@@\pgfspectra@list@@\relax% \let\pgfspectra@list@@\@empty\relax% \pgfspectra@firsttrue\relax% \ifpgfspectra@intensity% list (lambda/intensity) \foreach \x/\y in \wt@backlist@@{% \pgfmathparse{\x*\pgfspectra@UMMAISZ}\edef\pgfspectra@currentline@wl{\pgfmathresult}% \ifpgfspectra@first\global\pgfspectra@addt@list{\pgfspectra@list@@}{\pgfspectra@currentline@wl/\y}\else% \global\pgfspectra@addt@list{\pgfspectra@list@@}{,\pgfspectra@currentline@wl/\y}\fi% \ifpgfspectra@first\global\pgfspectra@firstfalse\fi% }% \else% list (lambda) \foreach \x in \wt@backlist@@{% \pgfmathparse{\x*\pgfspectra@UMMAISZ}\edef\pgfspectra@currentline@wl{\pgfmathresult}% \ifpgfspectra@first\global\pgfspectra@addt@list{}{\pgfspectra@currentline@wl}\else% \global\pgfspectra@addt@list{\pgfspectra@list@@}{,\pgfspectra@currentline@wl}\fi% \ifpgfspectra@first\global\pgfspectra@firstfalse\fi% }% \fi% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % NEW v2.1.0 ----------------------> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \pgfspectrashade[type=](start,end){name} ---> type: h-horizontal (default) | v-vertical \def\pgfspectrashade{\ignorespaces\@ifnextchar[\pgfspectra@pgfspectrashade{\pgfspectra@pgfspectrashade[h]}}% \def\pgfspectra@pgfspectrashade[#1](#2,#3)#4{\ignorespaces% \ifnum#2>#3\relax\PackageError{pgf-spectra}% {in \textbackslash pgfspectrashade the starting wavelength (#2) must be lesser then the finishing wavelength (#3)}% {Try typing the wavelengths in the correct order: \textbackslash pgfspectrashade(#3,#2)...}\else% \ifnum#3<381\relax\PackageError{pgf-spectra}{in \textbackslash pgfspectrashade the finishing wavelength (#3) must be at least 381...}% {Please type a finishing wavelength greater then 380...}\else% \ifnum#2<380\relax\def\pgfspectra@shade@begin{380}\else\pgfmathparse{int(#2)}\edef\pgfspectra@shade@begin{\pgfmathresult}\fi% \ifnum#3>780\relax\def\pgfspectra@shade@end{780}\else\pgfmathparse{int(#3)}\edef\pgfspectra@shade@end{\pgfmathresult}\fi% \pgfmathparse{(\pgfspectra@shade@end-\pgfspectra@shade@begin)/50}\edef\pgfspectra@shadecolor@step{\pgfmathresult}% %\foreach \n in {1,...,51}{% \@for\n:={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,% 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,% 39,40,41,42,43,44,45,46,47,48,49,50,51}\do{% \pgfmathparse{\pgfspectra@shade@begin+(\n-1)*\pgfspectra@shadecolor@step}\edef\pgfspectra@currentwl{\pgfmathresult}% \wlcolor{\pgfspectra@currentwl}% \edef\pgfspectra@colorname{wlshcol\@Roman\n}\relax\colorlet{\pgfspectra@colorname}{wlcolor}%% }% \def\pgfspectra@test{#1}\def\pgfspectra@v{v}\def\pgfspectra@h{h}% \ifx\pgfspectra@test\pgfspectra@h\relax% % the horizontal pgfshading \pgfdeclarehorizontalshading{#4}{100bp}{color(0bp)=(wlshcolI); color(25bp)=(wlshcolI); color(26bp)=(wlshcolII); color(27bp)=(wlshcolIII); color(28bp)=(wlshcolIV); color(29bp)=(wlshcolV); color(30bp)=(wlshcolVI); color(31bp)=(wlshcolVII); color(32bp)=(wlshcolVIII); color(33bp)=(wlshcolIX); color(34bp)=(wlshcolX); color(35bp)=(wlshcolXI); color(36bp)=(wlshcolXII); color(37bp)=(wlshcolXIII); color(38bp)=(wlshcolXIV); color(39bp)=(wlshcolXV); color(40bp)=(wlshcolXVI); color(41bp)=(wlshcolXVII); color(42bp)=(wlshcolXVIII); color(43bp)=(wlshcolXIX); color(44bp)=(wlshcolXX); color(45bp)=(wlshcolXXI); color(46bp)=(wlshcolXXII); color(47bp)=(wlshcolXXIII); color(48bp)=(wlshcolXXIV); color(49bp)=(wlshcolXXV); color(50bp)=(wlshcolXXVI); color(51bp)=(wlshcolXXVII); color(52bp)=(wlshcolXXVIII); color(53bp)=(wlshcolXXIX); color(54bp)=(wlshcolXXX); color(55bp)=(wlshcolXXXI); color(56bp)=(wlshcolXXXII); color(57bp)=(wlshcolXXXIII); color(58bp)=(wlshcolXXXIV); color(59bp)=(wlshcolXXXV); color(60bp)=(wlshcolXXXVI); color(61bp)=(wlshcolXXXVII); color(62bp)=(wlshcolXXXVIII); color(63bp)=(wlshcolXXXIX); color(64bp)=(wlshcolXL); color(65bp)=(wlshcolXLI); color(66bp)=(wlshcolXLII); color(67bp)=(wlshcolXLIII); color(68bp)=(wlshcolXLIV); color(69bp)=(wlshcolXLV); color(70bp)=(wlshcolXLVI); color(71bp)=(wlshcolXLVII); color(72bp)=(wlshcolXLVIII); color(73bp)=(wlshcolXLIX); color(74bp)=(wlshcolL); color(75bp)=(wlshcolLI); color(100bp)=(wlshcolLI)}% \else\ifx\pgfspectra@test\pgfspectra@v\relax% % the vertical pgfshading \pgfdeclareverticalshading{#4}{100bp}{color(0bp)=(wlshcolI); color(25bp)=(wlshcolI); color(26bp)=(wlshcolII); color(27bp)=(wlshcolIII); color(28bp)=(wlshcolIV); color(29bp)=(wlshcolV); color(30bp)=(wlshcolVI); color(31bp)=(wlshcolVII); color(32bp)=(wlshcolVIII); color(33bp)=(wlshcolIX); color(34bp)=(wlshcolX); color(35bp)=(wlshcolXI); color(36bp)=(wlshcolXII); color(37bp)=(wlshcolXIII); color(38bp)=(wlshcolXIV); color(39bp)=(wlshcolXV); color(40bp)=(wlshcolXVI); color(41bp)=(wlshcolXVII); color(42bp)=(wlshcolXVIII); color(43bp)=(wlshcolXIX); color(44bp)=(wlshcolXX); color(45bp)=(wlshcolXXI); color(46bp)=(wlshcolXXII); color(47bp)=(wlshcolXXIII); color(48bp)=(wlshcolXXIV); color(49bp)=(wlshcolXXV); color(50bp)=(wlshcolXXVI); color(51bp)=(wlshcolXXVII); color(52bp)=(wlshcolXXVIII); color(53bp)=(wlshcolXXIX); color(54bp)=(wlshcolXXX); color(55bp)=(wlshcolXXXI); color(56bp)=(wlshcolXXXII); color(57bp)=(wlshcolXXXIII); color(58bp)=(wlshcolXXXIV); color(59bp)=(wlshcolXXXV); color(60bp)=(wlshcolXXXVI); color(61bp)=(wlshcolXXXVII); color(62bp)=(wlshcolXXXVIII); color(63bp)=(wlshcolXXXIX); color(64bp)=(wlshcolXL); color(65bp)=(wlshcolXLI); color(66bp)=(wlshcolXLII); color(67bp)=(wlshcolXLIII); color(68bp)=(wlshcolXLIV); color(69bp)=(wlshcolXLV); color(70bp)=(wlshcolXLVI); color(71bp)=(wlshcolXLVII); color(72bp)=(wlshcolXLVIII); color(73bp)=(wlshcolXLIX); color(74bp)=(wlshcolL); color(75bp)=(wlshcolLI); color(100bp)=(wlshcolLI)}% \fi\fi% \fi\fi% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % nm2rgb convert nanometre wavelength to rgb % (380 <= Lambda <= 780 ) -> r,g,b on stack % % BASED on FORTRAN Code % RGB VALUES FOR VISIBLE WAVELENGTHS by Dan Bruton (astro@tamu.edu) % This program can be found at % http://www.physics.sfasu.edu/astro/color.html % and was last updated on February 20, 1996. % The spectrum is generated using approximate RGB values for visible % wavelengths between 380 nm and 780 nm. % The red, green and blue values (RGB) are % assumed to vary linearly with wavelength (for GAMMA=1). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \newdimen\pgfspectrawl%wavelength \newdimen\pgfspectra@i%intensity \newdimen\@pgfspectra@gamma%gamma \newdimen\wlc@lorr%red (0. - 1) \newdimen\wlc@lorg%green (0. - 1) \newdimen\wlc@lorb%blue (0. - 1) % wavelength to rgb values %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \wlcolor{wavelength} \def\wlcolor#1{\ignorespaces% \ifx\pgfspectra@bright\undefined\relax\def\pgfspectra@bright{100}\fi% NEW v2.1.0 \pgfspectrawl=#1pt% \@pgfspectra@gamma=\pgfspectra@gamma pt% % compute the rgb components \ifdim\pgfspectrawl<10pt\relax\PackageWarning{pgf-spectra}{(#1nm) wavelength out of range ignored. The wavelength must be greater or equal to 10nm (EUV)...}\else% NEW v2.0.0 \ifdim\pgfspectrawl<379.99999pt\relax\else%% NEW v2.0.0 \ifdim\pgfspectrawl<440pt\wlc@lorr=440pt\advance\wlc@lorr by-\pgfspectrawl\divide\wlc@lorr by60\wlc@lorg=0pt\wlc@lorb=1pt\else% \ifdim\pgfspectrawl<490pt\wlc@lorr=0pt\wlc@lorg=\pgfspectrawl\advance\wlc@lorg by-440pt\divide\wlc@lorg by50\wlc@lorb=1pt\else% \ifdim\pgfspectrawl<510pt\wlc@lorr=0pt\wlc@lorg=1pt\wlc@lorb=510pt\advance\wlc@lorb by-\pgfspectrawl\divide\wlc@lorb by20\else% \ifdim\pgfspectrawl<580pt\wlc@lorr=\pgfspectrawl\advance\wlc@lorr by-510pt\divide\wlc@lorr by70\wlc@lorg=1pt\wlc@lorb=0pt\else% \ifdim\pgfspectrawl<645pt\wlc@lorr=1pt\wlc@lorg=645pt\advance\wlc@lorg by-\pgfspectrawl\divide\wlc@lorg by65\wlc@lorb=0pt\else% \ifdim\pgfspectrawl<780.00001pt\wlc@lorr=1pt\wlc@lorg=0pt\wlc@lorb=0pt\else% \ifdim\pgfspectrawl>4000pt\relax\PackageWarning{pgf-spectra}{invalid wavelength (#1nm). The wavelength must be lesser or equal to 4000nm (NIR)...}% NEW v2.0.0 \relax% \fi\fi\fi\fi\fi\fi\fi\fi\fi% % intensity correction at vision limits \ifdim\pgfspectrawl>700pt\ifdim\pgfspectrawl<780.00001pt\pgfspectra@i=780pt\advance\pgfspectra@i by-\pgfspectrawl\divide\pgfspectra@i by80\multiply\pgfspectra@i by7\advance\pgfspectra@i by3pt\divide\pgfspectra@i by10\fi\else% NEW \ifdim\pgfspectrawl<420pt\ifdim\pgfspectrawl>379.99999pt\pgfspectra@i=\pgfspectrawl\advance\pgfspectra@i by-380pt\divide\pgfspectra@i by40\multiply\pgfspectra@i by7\advance\pgfspectra@i by3pt\divide\pgfspectra@i by10\fi\else% \pgfspectra@i=1pt% \fi\fi% %apply intensity at vision limits correction and gamma \ifdim\pgfspectrawl<380pt\colorlet{pgfspectra@temp}{\pgfspectra@UVcolor}\else\ifdim\pgfspectrawl>780pt\colorlet{pgfspectra@temp}{\pgfspectra@IRcolor}\else% NEW v2.0.0 \pgfmathparse{\wlc@lorr*\pgfspectra@i^\@pgfspectra@gamma}\edef\pgfspectra@red{\pgfmathresult}% \pgfmathparse{\wlc@lorg*\pgfspectra@i^\@pgfspectra@gamma}\edef\pgfspectra@green{\pgfmathresult}% \pgfmathparse{\wlc@lorb*\pgfspectra@i^\@pgfspectra@gamma}\edef\pgfspectra@blue{\pgfmathresult}% \definecolor{pgfspectra@temp}{rgb}{\pgfspectra@red,\pgfspectra@green,\pgfspectra@blue}% \fi\fi% NEW v2.0.0 \ifpgfspectra@usevisibleshade\relax% NEW v2.1.0 \colorlet{wlcolor}{pgfspectra@temp!\pgfspectra@bright!\pgfspectra@backvisible}% \else% \colorlet{wlcolor}{pgfspectra@temp}% \fi% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \def\pgfspectra@elt@search#1#2#3#4#5#6#7{\ignorespaces% % #1 Chemical Symbol, entered by USER % #2 Chemical Symbol to compare to, e.g. Na % #3 Emission Lines Data (or error message) % #4 Imax@ALL (changed in v2.2.0) % #5 Imax@UV (NEW v2.2.0) % #6 Imax@VIS (NEW v2.2.0) % #7 Imax@IR (NEW v2.2.0) \ifpgfspectra@datanotfound\relax% \edef\pgfspectra@CS@user{#1}\edef\pgfspectra@CS@comp{#2}\relax% \ifx\pgfspectra@CS@user\pgfspectra@CS@comp\relax% \global\pgfspectra@datanotfoundfalse\relax% \def\pgfspectra@elt@chemsym{#2}% set chemical symbol \def\pgfspectra@elt@elemdata{#3}% set element lines data \def\pgfspectra@elt@Imax@ALL{#4}% set element Imax: ALL range \def\pgfspectra@elt@Imax@UV{#5}% set element Imax: UV range \def\pgfspectra@elt@Imax@VIS{#6}% set element Imax: VIS range \def\pgfspectra@elt@Imax@IR{#7}% set element Imax: IR range \fi% \fi% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % NEW v2.2.0 % \pgfspectra@setmaxin{UV or VIS or IR or ALL} -> OUTPUT: \pgfspectra@elt@Imax \def\pgfspectra@setmaxint#1{\ignorespaces% \edef\pgfspectra@qALL{all}\edef\pgfspectra@qO{0}\edef\pgfspectra@qI{1}\edef\pgfspectra@qII{2}\edef\pgfspectra@qIII{3}\edef\pgfspectra@qIV{4}% \ifnum\pgfspectra@DATASET=0\relax% NIST \ifx\pgfspectra@charge\pgfspectra@qO\relax% \edef\pgfspectra@elt@Imax{\csname int#1qO\endcsname}% \else\ifx\pgfspectra@charge\pgfspectra@qI\relax% \edef\pgfspectra@elt@Imax{\csname int#1qI\endcsname}% \else% \edef\pgfspectra@elt@Imax{\csname int#1qALL\endcsname}% \fi\fi% \else% LSE \ifx\pgfspectra@charge\pgfspectra@qO\relax% \edef\pgfspectra@elt@Imax{\csname int#1qO\endcsname}% \else\ifx\pgfspectra@charge\pgfspectra@qI\relax% \edef\pgfspectra@elt@Imax{\csname int#1qI\endcsname}% \else\ifx\pgfspectra@charge\pgfspectra@qII\relax% \edef\pgfspectra@elt@Imax{\csname int#1qII\endcsname}% \else\ifx\pgfspectra@charge\pgfspectra@qIII\relax% \edef\pgfspectra@elt@Imax{\csname int#1qIII\endcsname}% \else\ifx\pgfspectra@charge\pgfspectra@qIV\relax% \edef\pgfspectra@elt@Imax{\csname int#1qIV\endcsname}% \else% \edef\pgfspectra@elt@Imax{\csname int#1qALL\endcsname}% \fi\fi\fi\fi\fi% \fi% }% % NEW v2.2.0 %USAGE \expandafter\pgfspectra@getmaxint#1x#2x#3x#4x#5x#6x#7x#8\relax \def\pgfspectra@getmaxint#1x#2x#3x#4x#5x#6x#7x#8\relax{% \expandafter\edef\csname int#1qALL\endcsname{#2}% all charges \expandafter\edef\csname int#1qO\endcsname{#3}% charge 0 (neutral atom) \expandafter\edef\csname int#1qI\endcsname{#4}% charge +1 \expandafter\edef\csname int#1qII\endcsname{#5}% charge +2 \expandafter\edef\csname int#1qIII\endcsname{#6}% charge +3 \expandafter\edef\csname int#1qIV\endcsname{#7}% charge +4 %\expandafter\edef\csname int#1qU\endcsname{#8}% charge Unknown }% \endinput