summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/pgf-spectra
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2016-04-21 20:56:02 +0000
committerKarl Berry <karl@freefriends.org>2016-04-21 20:56:02 +0000
commit60c97fceef9abdc952329cd66318bbde2cfbc6de (patch)
tree931faaf020fbe5b6542ef65d951e52a5710f2613 /Master/texmf-dist/tex/latex/pgf-spectra
parentcde7add49b05077ff24b6006f031bbdd70c91d7d (diff)
pgf-spectra (21apr16)
git-svn-id: svn://tug.org/texlive/trunk@40656 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/pgf-spectra')
-rw-r--r--Master/texmf-dist/tex/latex/pgf-spectra/pgf-spectra.sty696
1 files changed, 696 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/pgf-spectra/pgf-spectra.sty b/Master/texmf-dist/tex/latex/pgf-spectra/pgf-spectra.sty
new file mode 100644
index 00000000000..b5fab0db7e6
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pgf-spectra/pgf-spectra.sty
@@ -0,0 +1,696 @@
+% Hugo Gomes @ 15/04/2016
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\NeedsTeXFormat{LaTeX2e}%
+\ProvidesPackage{pgf-spectra}[15/04/2016 pgf-spectra v1.0]%
+\RequirePackage{tikz}%
+\RequirePackage{ifthen}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newif\ifwlabsorption%
+\newif\ifcurelemexist%
+\newif\ifwldrawaxis%
+\newif\ifwlaxislabel%
+\newif\ifwlintensity%
+% defining PGF keys
+\pgfkeys{/wl/.cd,%
+element/.get=\wlelement,%
+element/.store in=\wlelement,%
+element/.default=NONE,%
+width/.get=\wlwidth,%
+width/.store in=\wlwidth,%
+width/.default={0.9\textwidth},
+height/.get=\wlheight,%
+height/.store in=\wlheight,%
+height/.default=1cm,%
+back/.get=\wlback,%
+back/.store in=\wlback,%
+back/.default=black,%
+charge/.get=\wlcharge,%
+charge/.store in=\wlcharge,%
+charge/.default=0,%
+Imin/.get=\wlintmin,%
+Imin/.store in=\wlintmin,%
+Imin/.default=0,%
+lines/.get=\wllines,%
+lines/.store in=\wllines,%
+lines/.default={},%
+line width/.get=\wllinewidth,%
+line width/.store in=\wllinewidth,%
+line width/.default=1pt,%
+begin/.get=\wlbegin,%
+begin/.store in=\wlbegin,%
+begin/.default=380,%
+end/.get=\wlend,%
+end/.store in=\wlend,%
+end/.default=780,%
+axis step/.get=\wlaxisstep,%
+axis step/.store in=\wlaxisstep,%
+axis step/.default=20,%
+axis color/.get=\wlaxiscolor,%
+axis color/.store in=\wlaxiscolor,%
+axis color/.default=black,%
+axis font/.get=\wlaxisfont,%
+axis font/.store in=\wlaxisfont,%
+axis font/.default={\tiny},%
+axis font color/.get=\wlaxisfontcolor,%
+axis font color/.store in=\wlaxisfontcolor,%
+axis font color/.default=white,%
+label position/.get=\wllabelposition,%
+label position/.store in=\wllabelposition,%
+label position/.default={west},%
+label before text/.get=\wllabelbtext,%
+label before text/.store in=\wllabelbtext,%
+label before text/.default={},%
+label after text/.get=\wllabelatext,%
+label after text/.store in=\wllabelatext,%
+label after text/.default={},%
+label font/.get=\wllabelfont,%
+label font/.store in=\wllabelfont,%
+label font/.default={\bfseries\small},%
+label font color/.get=\wllabelfontcolor,%
+label font color/.store in=\wllabelfontcolor,%
+label font color/.default=black,%
+gamma/.get=\wlgamma,%
+gamma/.store in=\wlgamma,%
+gamma/.default=0.8,%
+brightness/.get=\wlbrightness,%
+brightness/.store in=\wlbrightness,%
+brightness/.default=1,%
+line intensity/.get=\wllineint,%
+line intensity/.store in=\wllineint,%
+line intensity/.default=100,%
+relative intensity threshold/.get=\wlrelintthresh,%
+relative intensity threshold/.store in=\wlrelintthresh,%
+relative intensity threshold/.default=0.25,%
+absorption/.is if=wlabsorption,%
+axis/.is if=wldrawaxis,%
+label/.is if=wlaxislabel,%
+relative intensity/.is if=wlintensity%
+}%
+% setting keys with default values
+\pgfkeys{/wl/.cd,element,width,height,back,charge,Imin,lines,line width,begin,end,%
+axis color,axis font,axis font color,axis step,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}%
+% strings for \ifx tests
+\def\wlN@NE{NONE}%
+\def\wl@ll{all}%
+\def\wl@visible{visible}%
+\def\wl@visible@list{visible,visible5,visible10,visible15,visible20,visible25,visible30,visible35,visible40,visible45,visible50,visible55,visible60,visible65,visible70,visible75,visible80,visible85,visible90,visible95,visible100}%
+\def\wl@label@position@list{west,north west,north,north east,east,south east,south,south west}%
+%%%% COMMANDS -------------------------------------------------------------------------------->
+% \pgfspectra[options]
+\def\pgfspectra{\@ifnextchar[\wl@pgfspectra@withoptions{\wl@pgfspectra@nooptions}}%
+\def\wl@pgfspectra@nooptions{\wl@pgfspectra@continuous(0.9\textwidth,1cm)}%
+% ##########################################################
+\def\wl@pgfspectra@continuous(#1,#2){%
+\begin{tikzpicture}%
+\foreach \x in {380,...,780}%
+ {%
+ \pgfmathparse{#1/400}\edef\xscale{\pgfmathresult}\edef\wl@linewidth{\xscale pt}
+ \wlcolor{\x}%
+ \pgfmathparse{(\x-380)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \draw[wltemp,line width=\wl@linewidth] (\wl@currentx,0) -- ++(0,#2);%
+ }%
+\end{tikzpicture}%
+}%
+% ##########################################################
+\def\wl@pgfspectra@withoptions[#1]{%
+% setting default values
+\pgfkeys{/wl/.cd,element,width,height,back,charge,Imin,lines,line width,begin,end,axis color,axis font,axis font color,axis step,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}%
+% process options (key values)
+\pgfkeys{/wl/.cd,#1}
+% axis height
+\setbox0=\hbox{\wlaxisfont\selectfont380}\edef\@wl@axis@height{\the\ht0}%
+% process visible background (visible+opacity)
+\wl@counta=0%
+\wl@countb=-1%
+\@for\@myarg:=\wl@visible@list\do{%
+ \ifx\wlback\@myarg\wl@countb=\wl@counta\fi%
+ \advance\wl@counta by1%
+ }%
+\ifnum\wl@countb=0\let\wlback\wl@visible\edef\@visible@opacity{.5}\else%
+\ifnum\wl@countb>0\let\wlback\wl@visible\pgfmathparse{.05*\wl@countb}\edef\@visible@opacity{\pgfmathresult}\fi\fi%
+% ----------------------------------------------------------------------------------------------------------
+% if no element provided draws continuous spectrum with options or user list of lines
+\ifx\wlelement\wlN@NE%no element by the user
+ \ifx\wl@elt@chemsym\undefined\else\let\wl@elt@chemsym\undefined\fi
+ \ifx\wllines\@empty%no lines by the user => continuous spectrum
+ % draws the continuous spectrum width options (default or by the user)
+ \begin{tikzpicture}%
+ \pgfmathparse{\wlwidth/(abs(\wlend-\wlbegin))}\edef\xscale{\pgfmathresult}%
+ \ifwldrawaxis%draws the axis
+ \wl@utils@draw@axis%
+ \fi%\ifwldrawaxis
+ \ifwlaxislabel%put the label
+ \wl@utils@put@label%
+ \fi%\ifwlaxislabel
+ \wl@utils@visiblespectrum{\wlbrightness}
+ \end{tikzpicture}%
+ \let\wl@list@@\@empty%
+ \else% lines by the user
+ \edef\wl@list@@{\wllines}
+ \fi%\wllines\@empty
+\else%\wlelement\wlN@NE
+ % else get element(s) data
+ \wl@countc=0%
+ \wl@countd=1%
+ \@for\@myarg:=\wlelement\do{\advance\wl@countc by 1}%count number of elements
+ \wl@addt@list{}{}%
+ \@for\@myarg:=\wlelement\do{%
+ \curelemexisttrue%
+ \def\wl@elt@chemsym{NOT FOUND!}
+ \def\@search@result@err{NOT FOUND!}%
+ \wl@elt@data{\@myarg}\relax%
+ % check if element provided exists
+ \ifx\@search@result@err\wl@elt@chemsym Element\ ``\@myarg'' with charge ``\wlcharge'' not found!\curelemexistfalse\else%
+ % if exists, set the wavelength's list
+ \wl@set@element@list{\wl@elt@elemdata}{\wl@elt@Imax}%
+ \fi%\@search@result@err\wl@elt@chemsym
+ \ifcurelemexist\ifnum\wl@countd<\wl@countc\wl@addt@list{\wl@list@@}{,}\fi\fi%
+ \advance\wl@countd by 1%
+ }%end do
+\fi%\wlelement\wlN@NE
+% check if there are lines to draw and make the spectrum
+ \ifx\wl@list@@\@empty\ifx\wlelement\wlN@NE\else Element\ ``\wlelement'' with charge ``\wlcharge'' have no lines to display.\fi\else%
+ \ifwlabsorption%absortion spectrum
+ \begin{tikzpicture}%
+ \pgfmathparse{\wlwidth/(abs(\wlend-\wlbegin))}\edef\xscale{\pgfmathresult}%
+ \ifwldrawaxis%draws the axis
+ \wl@utils@draw@axis%
+ \fi%\ifwldrawaxis
+ \ifwlaxislabel%put the label
+ \wl@utils@put@label%
+ \fi%\ifwlaxislabel
+ \wl@utils@visiblespectrum{\wlbrightness}%put visible spectrum in the background
+ % draws the lines
+ \wl@utils@drawabsorptionlines%
+ \end{tikzpicture}%
+ \else%emission spectrum
+ % draws the spectrum
+ \ifx\wlback\wl@visible%visible background
+ \begin{tikzpicture}%
+ \pgfmathparse{\wlwidth/(abs(\wlend-\wlbegin))}\edef\xscale{\pgfmathresult}%
+ \ifwldrawaxis%draws the axis
+ \wl@utils@draw@axis%
+ \fi%\ifwldrawaxis
+ \ifwlaxislabel%put the label
+ \wl@utils@put@label%
+ \fi%\ifwlaxislabel
+ \wl@utils@visiblespectrum{\@visible@opacity*\wlbrightness}%draws the visible background
+ \wl@utils@drawemissionlines% emission lines
+ \end{tikzpicture}%
+ \else%without visible background
+ \begin{tikzpicture}%
+ \pgfmathparse{\wlwidth/(abs(\wlend-\wlbegin))}\edef\xscale{\pgfmathresult}%
+ \ifwldrawaxis%draws the axis
+ \wl@utils@draw@axis%
+ \fi%\ifwldrawaxis
+ \ifwlaxislabel%put the label
+ \wl@utils@put@label%
+ \fi%\ifwlaxislabel
+ \ifnum\wlbegin>\wlend%
+ \draw[draw=none,fill=\wlback] (0,0) rectangle (-\wlwidth,\wlheight);% background
+ \else%
+ \draw[draw=none,fill=\wlback] (0,0) rectangle (\wlwidth,\wlheight);% background
+ \fi%
+ \wl@utils@drawemissionlines% emission lines
+ \end{tikzpicture}%
+ \fi%\wlback\@visible
+ \fi%\ifwlabsorption
+ \fi% \wl@list@@\@empty
+}%
+% ##########################################################
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% get individual line data from one element of the array data
+\def\wl@get@line@info[#1 #2 #3]{
+\def\@currentline@wl{#1}% return
+\def\@currentline@int{#2}% return
+\def\@currentline@charge{#3}% return
+}%
+% ######################################################################
+% ################### \wl@set@element@list ####################################
+% ######################################################################
+%
+% \wl@set@element@list{\wl@elt@elemdata}{\wl@elt@Imax}
+% RETURN: \wl@list@@ -> (wl1,wl2,...)
+% or if relative intensity true (between 0 and 1)
+% \wl@list@@ -> (wl1/int1,wl2/int2,...)
+%
+\newif\ifwl@first% for first ocurrence of Imin
+\def\wl@set@element@list#1#2{% \wl@elt@Imax
+\wl@firsttrue%
+\wl@counta=0%
+\wl@countb=1%
+\pgfmathparse{int(\wlintmin*100)}\edef\wl@intmin{\pgfmathresult}%intensity percentage
+\ifnum\wl@intmin=0% include all intensities
+\ifx\wl@ll\wlcharge%ALL lines
+\@for\@myarg:=#1\do{\advance\wl@counta by 1}%count all entries
+ \ifwlintensity%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \pgfmathparse{\wlrelintthresh+(1-\wlrelintthresh)*\@currentline@int/#2}\edef\wl@intensity@to@list{\pgfmathresult}%
+ \ifnum\wl@countb<\wl@counta\wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list,}\else%
+ \wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list}\fi%
+ \advance\wl@countb by 1%
+ }%END do
+ \else%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \ifnum\wl@countb<\wl@counta\wl@addt@list{\wl@list@@}{\@currentline@wl,}\else%
+ \wl@addt@list{\wl@list@@}{\@currentline@wl}\fi%
+ \advance\wl@countb by 1%
+ }%END do
+ \fi%
+\else% lines for one specific charge
+\@for\@myarg:=#1\do{\expandafter\wl@get@line@info\@myarg\ifx\@currentline@charge\wlcharge\advance\wl@counta by 1\fi}%count only if is the desired charge
+ \ifwlintensity%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \pgfmathparse{\wlrelintthresh+(1-\wlrelintthresh)*\@currentline@int/#2}\edef\wl@intensity@to@list{\pgfmathresult}%
+ \ifx\@currentline@charge\wlcharge%add to list if is the desired charge
+ \ifnum\wl@countb<\wl@counta\wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list,}\else%
+ \wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list}\fi%
+ \advance\wl@countb by 1%
+ \fi%
+ }%END do
+ \else%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \ifx\@currentline@charge\wlcharge%add to list if is the desired charge
+ \ifnum\wl@countb<\wl@counta\wl@addt@list{\wl@list@@}{\@currentline@wl,}\else%
+ \wl@addt@list{\wl@list@@}{\@currentline@wl}\fi%
+ \advance\wl@countb by 1%
+ \fi%
+ }%END do
+ \fi%
+\fi%
+\else%\wlintmin>0 & \wlintmin<1
+\ifnum\wl@intmin>100\else%
+\pgfmathparse{\wlintmin*#2}\edef\wl@actual@int{\pgfmathresult}%
+\ifx\wl@ll\wlcharge%ALL lines
+\@for\@myarg:=#1\do{\advance\wl@counta by 1}%count all entries
+ \ifwlintensity%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \pgfmathparse{notless(\@currentline@int,\wl@actual@int)}\relax\edef\wl@int@result{\pgfmathresult}%
+ \ifnum\wl@int@result=1%
+ \pgfmathparse{\wlrelintthresh+(1-\wlrelintthresh)*\@currentline@int/#2}\edef\wl@intensity@to@list{\pgfmathresult}%
+ \ifwl@first\wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list}\else%
+ \wl@addt@list{\wl@list@@}{,\@currentline@wl/\wl@intensity@to@list}\fi%
+ \ifwl@first\wl@firstfalse\fi%
+ \fi%
+ \advance\wl@countb by 1%
+ }%END do
+ \else%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \pgfmathparse{notless(\@currentline@int,\wl@actual@int)}\relax\edef\wl@int@result{\pgfmathresult}%
+ \ifnum\wl@int@result=1%
+ \ifwl@first\wl@addt@list{\wl@list@@}{\@currentline@wl}\else%
+ \wl@addt@list{\wl@list@@}{,\@currentline@wl}\fi%
+ \ifwl@first\wl@firstfalse\fi%
+ \fi%
+ \advance\wl@countb by 1%
+ }%END do
+ \fi%
+\else% lines for one specific charge
+\@for\@myarg:=#1\do{\expandafter\wl@get@line@info\@myarg\ifx\@currentline@charge\wlcharge\advance\wl@counta by 1\fi}%count only if is the desired charge
+ \ifwlintensity%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \ifx\@currentline@charge\wlcharge%add to list if is the desired charge
+ \pgfmathparse{notless(\@currentline@int,\wl@actual@int)}\edef\wl@int@result{\pgfmathresult}%
+ \ifnum\wl@int@result=1%
+ \pgfmathparse{\wlrelintthresh+(1-\wlrelintthresh)*\@currentline@int/#2}\edef\wl@intensity@to@list{\pgfmathresult}%
+ \ifwl@first\wl@addt@list{\wl@list@@}{\@currentline@wl/\wl@intensity@to@list}\else%
+ \wl@addt@list{\wl@list@@}{,\@currentline@wl/\wl@intensity@to@list}\fi%
+ \ifwl@first\wl@firstfalse\fi%
+ \fi%
+ \advance\wl@countb by 1%
+ \fi%
+ }%END do
+ \else%
+ \@for\@myarg:=#1%
+ \do{%
+ \expandafter\wl@get@line@info\@myarg%
+ \ifx\@currentline@charge\wlcharge%add to list if is the desired charge
+ \pgfmathparse{notless(\@currentline@int,\wl@actual@int)}\edef\wl@int@result{\pgfmathresult}%
+ \ifnum\wl@int@result=1%
+ \ifwl@first\wl@addt@list{\wl@list@@}{\@currentline@wl}\else%
+ \wl@addt@list{\wl@list@@}{,\@currentline@wl}\fi%
+ \ifwl@first\wl@firstfalse\fi%
+ \fi%
+ \advance\wl@countb by 1%
+ \fi%
+ }%END do
+ \fi%
+\fi%
+\fi%
+\fi%
+}%
+% add to list
+\def\wl@addt@list#1#2{\edef\wl@list@@{#1#2}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% internal utils --------------------------------------------------------------------------------------------------------------------------------------------------------------- %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\wl@utils@draw@axis{%
+ \ifnum\wlbegin>\wlend%
+ \draw[draw=none,fill=\wlaxiscolor] ([xshift={1.5*\@wl@axis@height}]0,\wlheight+2.5pt) rectangle ([xshift={-1.5*\@wl@axis@height}]-\wlwidth,-2.5*\@wl@axis@height);%
+ \pgfmathparse{\wlend+\wlaxisstep}\pgfmathparse{int(\pgfmathresult)}
+ \edef\@axis@list{\wlend,\pgfmathresult,...,\wlbegin}
+ \foreach \x in \@axis@list%
+ {%
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \draw[\wlaxisfontcolor,line width=.25pt] (\wl@currentx,-.75*\@wl@axis@height) -- ++(0,.75*\@wl@axis@height);
+ \node[\wlaxisfontcolor,font=\wlaxisfont,above,inner sep=0pt] at (\wl@currentx,-2.25*\@wl@axis@height) {\x};
+ }%
+ \else%
+ \draw[draw=none,fill=\wlaxiscolor] ([xshift={-1.5*\@wl@axis@height}]0,\wlheight+2.5pt) rectangle ([xshift={1.5*\@wl@axis@height}]\wlwidth,-2.5*\@wl@axis@height);%
+ \pgfmathparse{\wlbegin+\wlaxisstep}\pgfmathparse{int(\pgfmathresult)}
+ \edef\@axis@list{\wlbegin,\pgfmathresult,...,\wlend}
+ \foreach \x in \@axis@list%
+ {%
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \draw[\wlaxisfontcolor,line width=.25pt] (\wl@currentx,-.75*\@wl@axis@height) -- ++(0,.75*\@wl@axis@height);
+ \node[\wlaxisfontcolor,font=\wlaxisfont,above,inner sep=0pt] at (\wl@currentx,-2.25*\@wl@axis@height) {\x};
+ }%
+ \fi%
+}%
+\def\wl@utils@put@label{%
+ \ifx\wl@elt@chemsym\undefined\def\wl@elt@chemsym{}\fi%
+ \wl@get@label@position%
+ \ifnum\wlbegin>\wlend%
+ \ifcase\wl@label@position%
+ %west
+ \ifwldrawaxis%\ifwlaxislabel%
+ \node[\wllabelfontcolor,font=\wllabelfont,left,minimum width=2em,align=right] at (-1.5*\@wl@axis@height-\wlwidth,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,left,minimum width=2em,align=right] at (-\wlwidth,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%north west
+ \node[\wllabelfontcolor,font=\wllabelfont,above right,inner xsep=0pt] at (-\wlwidth,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%north
+ \node[\wllabelfontcolor,font=\wllabelfont,above] at (-0.5*\wlwidth,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%north east
+ \node[\wllabelfontcolor,font=\wllabelfont,above left,inner xsep=0pt] at (0,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%east
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,right] at (1.5*\@wl@axis@height,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,right] at (0,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south east
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below left,inner xsep=0pt] at (0,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below left,inner xsep=0pt] at (0,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below] at (-0.5*\wlwidth,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below] at (-0.5*\wlwidth,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south west
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below right,inner xsep=0pt] at (-1.5*\@wl@axis@height-\wlwidth,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below right,inner xsep=0pt] at (-\wlwidth,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \fi%
+ \else%
+ \ifcase\wl@label@position%
+ %west
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,left,minimum width=2em,align=right] at (-1.5*\@wl@axis@height,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,left,minimum width=2em,align=right] at (0,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%north west
+ \node[\wllabelfontcolor,font=\wllabelfont,above right,inner xsep=0pt] at (0,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%north
+ \node[\wllabelfontcolor,font=\wllabelfont,above] at (0.5*\wlwidth,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%north east
+ \node[\wllabelfontcolor,font=\wllabelfont,above left,inner xsep=0pt] at (\wlwidth,\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \or%east
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,right] at ([xshift={1.5*\@wl@axis@height}]\wlwidth,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,right] at (\wlwidth,0.5*\wlheight) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south east
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below left,inner xsep=0pt] at (\wlwidth,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below left,inner xsep=0pt] at (\wlwidth,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below] at (0.5*\wlwidth,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below] at (0.5*\wlwidth,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \or%south west
+ \ifwldrawaxis%
+ \node[\wllabelfontcolor,font=\wllabelfont,below right,inner xsep=0pt] at (-1.5*\@wl@axis@height,-2.5*\@wl@axis@height) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \else%
+ \node[\wllabelfontcolor,font=\wllabelfont,below right,inner xsep=0pt] at (0,0) {\wllabelbtext\wl@elt@chemsym\wllabelatext};%
+ \fi%
+ \fi%
+ \fi%
+}%
+\def\wl@utils@visiblespectrum#1{%
+ \pgfmathparse{int(#1*100)}\edef\wl@bright{\pgfmathresult}
+ \ifnum\wlbegin>\wlend%
+ \foreach \x in {\wlend,...,\wlbegin}%
+ {%
+ \wlcolor{\x}%
+ \colorlet{wlcolor}{wltemp!\wl@bright!black}% ??? !black
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \edef\wl@linewidth{\xscale pt}%
+ \draw[wlcolor,line width=\wl@linewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ }%
+ \else%
+ \foreach \x in {\wlbegin,...,\wlend}%
+ {%
+ \wlcolor{\x}%
+ \colorlet{wlcolor}{wltemp!\wl@bright!black}% ??? !black
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \edef\wl@linewidth{\xscale pt}%
+ \draw[wlcolor,line width=\wl@linewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ }%
+ \fi%
+}%
+\def\wl@utils@drawabsorptionlines{%
+ \ifnum\wlbegin>\wlend%
+ \ifwlintensity%
+ \foreach \x/\y in \wl@list@@%
+ {%
+ \pgfmathparse{notless(\x,\wlend)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlbegin)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \pgfmathparse{int(\y*100)}\edef\wl@black{\pgfmathresult}
+ \wlcolor{\x}
+ \colorlet{wlcolor}{black!\wl@black!wltemp}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \else%
+ \foreach \x in \wl@list@@%
+ {%
+ \pgfmathparse{notless(\x,\wlend)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlbegin)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \wlcolor{\x}
+ \colorlet{wlcolor}{black!\wllineint!wltemp}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \fi%
+ \else%
+ \ifwlintensity%
+ \foreach \x/\y in \wl@list@@%
+ {%
+ \pgfmathparse{notless(\x,\wlbegin)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlend)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \pgfmathparse{int(\y*100)}\edef\wl@black{\pgfmathresult}
+ \wlcolor{\x}
+ \colorlet{wlcolor}{black!\wl@black!wltemp}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \else%
+ \foreach \x in \wl@list@@%
+ {%
+ \pgfmathparse{notless(\x,\wlbegin)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlend)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \wlcolor{\x}
+ \colorlet{wlcolor}{black!\wllineint!wltemp}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \fi%
+ \fi%
+}%
+\def\wl@utils@drawemissionlines{%
+ \ifnum\wlbegin>\wlend%
+ \ifwlintensity%
+ \foreach \x/\y in \wl@list@@%
+ {%
+ \wlcolor{\x}%
+ \pgfmathparse{notless(\x,\wlend)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlbegin)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \pgfmathparse{int(\y*100)}\edef\wl@black{\pgfmathresult}
+ \colorlet{wlcolor}{wltemp!\wl@black!black}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \else%
+ \foreach \x in \wl@list@@%
+ {%
+ \wlcolor{\x}%
+ \pgfmathparse{notless(\x,\wlend)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlbegin)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\wlend-\x)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \colorlet{wlcolor}{wltemp!\wllineint!black}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \fi%
+ \else%
+ \ifwlintensity%
+ \foreach \x/\y in \wl@list@@%
+ {%
+ \wlcolor{\x}%
+ \pgfmathparse{notless(\x,\wlbegin)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlend)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \pgfmathparse{int(\y*100)}\edef\wl@black{\pgfmathresult}
+ \colorlet{wlcolor}{wltemp!\wl@black!black}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \else%
+ \foreach \x in \wl@list@@%
+ {%
+ \wlcolor{\x}%
+ \pgfmathparse{notless(\x,\wlbegin)}\edef\wl@x@nl{\pgfmathresult}%
+ \pgfmathparse{notgreater(\x,\wlend)}\edef\wl@x@ng{\pgfmathresult}
+ \pgfmathparse{and(\wl@x@nl,\wl@x@ng)}\edef\wl@plot@point{\pgfmathresult}%
+ \ifnum\wl@plot@point=1%
+ \pgfmathparse{(\x-\wlbegin)*\xscale}\edef\wl@currentx{\pgfmathresult pt}%
+ \colorlet{wlcolor}{wltemp!\wllineint!black}
+ \draw[wlcolor,line width=\wllinewidth] (\wl@currentx,0) -- ++(0,\wlheight);%
+ \fi%
+ }%
+ \fi%
+ \fi%
+}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% return: integer with position (e.g. '0' for west, ... )
+\def\wl@get@label@position{%
+\wl@countc=0%
+\@for\@mylabel:=\wl@label@position@list%
+ \do{%
+ \ifx\@mylabel\wllabelposition\edef\wl@label@position{\the\wl@countc}\fi%
+ \advance\wl@countc by1%
+ }%
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% nm2rgb convert nanometer 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\wl%wavlength
+\newdimen\wl@i%intensity
+\newdimen\wl@gamma%gamma
+\newdimen\wlc@lorr%red (0. - 1)
+\newdimen\wlc@lorg%green (0. - 1)
+\newdimen\wlc@lorb%blue (0. - 1) % wavelength to rgb values
+\newcount\wl@counta% tmp counter
+\newcount\wl@countb% tmp counter
+\newcount\wl@countc% tmp counter
+\newcount\wl@countd% tmp counter
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \wlcolor{wavelength}
+\def\wlcolor#1{%
+\wl=#1pt%
+\wl@gamma=\wlgamma pt%
+% compute the rgb components
+\ifdim\wl<380pt\\ Err: wavelength must be graeter or equal to 380nm\else%
+\ifdim\wl<440pt\wlc@lorr=440pt\advance\wlc@lorr by-\wl\divide\wlc@lorr by60\wlc@lorg=0pt\wlc@lorb=1pt\else%
+\ifdim\wl<490pt\wlc@lorr=0pt\wlc@lorg=\wl\advance\wlc@lorg by-440pt\divide\wlc@lorg by50\wlc@lorb=1pt\else%
+\ifdim\wl<510pt\wlc@lorr=0pt\wlc@lorg=1pt\wlc@lorb=510pt\advance\wlc@lorb by-\wl\divide\wlc@lorb by20\else%
+\ifdim\wl<580pt\wlc@lorr=\wl\advance\wlc@lorr by-510pt\divide\wlc@lorr by70\wlc@lorg=1pt\wlc@lorb=0pt\else%
+\ifdim\wl<645pt\wlc@lorr=1pt\wlc@lorg=645pt\advance\wlc@lorg by-\wl\divide\wlc@lorg by65\wlc@lorb=0pt\else%
+\ifdim\wl<780.00001pt\wlc@lorr=1pt\wlc@lorg=0pt\wlc@lorb=0pt\else%
+\\ Err: wavelength must be lesser or equal to 780nm%
+\fi\fi\fi\fi\fi\fi\fi%
+% intensity correction at vision limits
+\ifdim\wl>700pt\wl@i=780pt\advance\wl@i by-\wl\divide\wl@i by80\multiply\wl@i by7\advance\wl@i by3pt\divide\wl@i by10\else%
+\ifdim\wl<420pt\wl@i=\wl\advance\wl@i by-380pt\divide\wl@i by40\multiply\wl@i by7\advance\wl@i by3pt\divide\wl@i by10\else%
+\wl@i=1pt%
+\fi\fi%
+%apply intensity at vision limits correction and gamma
+\pgfmathparse{\wlc@lorr*\wl@i^\wl@gamma}\edef\wl@red{\pgfmathresult}%
+\pgfmathparse{\wlc@lorg*\wl@i^\wl@gamma}\edef\wl@green{\pgfmathresult}%
+\pgfmathparse{\wlc@lorb*\wl@i^\wl@gamma}\edef\wl@blue{\pgfmathresult}%
+\definecolor{wltemp}{rgb}{\wl@red,\wl@green,\wl@blue}%
+\colorlet{wlcolor}{wltemp}
+}%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\def\wl@elt@search#1#2#3#4{%
+% #1 Chemical Symbol, entered by USER
+% #2 Chemical Symbol to compare to, e.g. Na
+% #3 Emission Lines Data (or error message)
+% #4 Imax
+\ifthenelse{\equal{\expandafter\noexpand#1}{\expandafter\noexpand#2}}%
+ {% true
+ \def\wl@elt@chemsym{#2}% set chemical symbol
+ \def\wl@elt@elemdata{#3}% set element lines data
+ \def\wl@elt@Imax{#4}% set element Imax
+ }%
+ {}% false
+}%
+\input{spectra.data.tex}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\endinput \ No newline at end of file