summaryrefslogtreecommitdiff
path: root/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty
diff options
context:
space:
mode:
Diffstat (limited to 'graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty')
-rw-r--r--graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty114
1 files changed, 104 insertions, 10 deletions
diff --git a/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty b/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty
index 81e514be6e..54ee126333 100644
--- a/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty
+++ b/graphics/pgf/contrib/pgf-spectra/pgf-spectra.sty
@@ -3,12 +3,13 @@
% 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 @ 23/02/2023 (v2.2.0)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\NeedsTeXFormat{LaTeX2e}%
-\ProvidesPackage{pgf-spectra}[03/07/2021 pgf-spectra v2.1.2]%
+\ProvidesPackage{pgf-spectra}[21/02/2023 pgf-spectra v2.2.0]%
\RequirePackage{tikz}%
-\DeclareOption{LSE}{\input{spectra.data.LSE.tex}}%
-\DeclareOption{NIST}{\input{spectra.data.NIST.tex}}%
+\DeclareOption{LSE}{\input{spectra.data.LSE.tex}\xdef\wl@DATASET{1}}%
+\DeclareOption{NIST}{\input{spectra.data.NIST.tex}\xdef\wl@DATASET{0}}%
\ExecuteOptions{NIST}%
\ProcessOptions\relax%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -28,6 +29,10 @@
\newif\ifwl@redshift% NEW v2.0.0
\newif\ifwl@RSvalue% NEW v2.0.0
\newif\ifwl@usevisibleshade% NEW v2.1.0
+\newif\ifwl@visibleRangeOnly% NEW v2.2.0
+\newif\ifwl@UVRangeOnly% NEW v2.2.0
+\newif\ifwl@IRRangeOnly% NEW v2.2.0
+\newif\ifwl@datanotfound% NEW v2.2.0
% defining PGF keys
\pgfkeys{/wl/.cd,%
element/.get=\wl@element,%
@@ -213,6 +218,32 @@ use visible shading,backVIS=black}}% NEW v2.1.0 -> use visible shading
\wl@processredshiftkey\wl@redshift\relax%
\fi%
% ----------------------------------------------------------------------------------------------------------
+% check if is only in visible range... or in UV... or in IV % NEW v2.2.0
+\wl@visibleRangeOnlyfalse%
+\wl@UVRangeOnlyfalse%
+\wl@IRRangeOnlyfalse%
+\ifnum\wl@end>\wl@begin\relax%
+ \ifnum\wl@end<380\relax% UV
+ \wl@UVRangeOnlytrue%
+ \else% VIS or IV
+ \ifnum\wl@end<781\relax%
+ \ifnum\wl@begin>379\relax\wl@visibleRangeOnlytrue\fi% VIS
+ \else%
+ \ifnum\wl@begin>780\relax\wl@IRRangeOnlytrue\fi% IR
+ \fi%
+ \fi%
+\else%
+ \ifnum\wl@begin<380\relax% UV
+ \wl@UVRangeOnlytrue%
+ \else% VIS or IV
+ \ifnum\wl@begin<781\relax%
+ \ifnum\wl@end>379\relax\wl@visibleRangeOnlytrue\fi% VIS
+ \else%
+ \ifnum\wl@end>780\relax\wl@IRRangeOnlytrue\fi% IR
+ \fi%
+ \fi%
+\fi%
+% ----------------------------------------------------------------------------------------------------------
% if no element provided draws continuous spectrum with options or user list of lines
\ifx\wl@element\wlN@NE%no element by the user
\ifx\wl@elt@chemsym\undefined\else\let\wl@elt@chemsym\undefined\fi%
@@ -250,7 +281,22 @@ use visible shading,backVIS=black}}% NEW v2.1.0 -> use visible shading
% check if element provided exists
\ifx\@search@result@err\wl@elt@chemsym Element\ ``\@myarg'' with charge ``\wl@charge'' not found!\cur@elem@existfalse\else%
% if exists, set the wavelength's list
- \wl@set@element@list{\wl@elt@elemdata}{\wl@elt@Imax}%
+ % CHANGED IN v2.2.0 to better accommodate relative intensities (also considering charges...) ---->
+ \ifwl@UVRangeOnly%
+ \expandafter\wl@getmaxint\wl@elt@Imax@UV\relax%
+ \wl@setmaxint{UV}%
+ \else\ifwl@visibleRangeOnly%
+ \expandafter\wl@getmaxint\wl@elt@Imax@VIS\relax%
+ \wl@setmaxint{VIS}%
+ \else\ifwl@IRRangeOnly%
+ \expandafter\wl@getmaxint\wl@elt@Imax@IR\relax%
+ \wl@setmaxint{IR}%
+ \else%
+ \expandafter\wl@getmaxint\wl@elt@Imax@ALL\relax%
+ \wl@setmaxint{ALL}%
+ \fi\fi\fi%
+ % <----- v2.0.0
+ \wl@set@element@list{\wl@elt@elemdata}{\wl@elt@Imax}%
\fi%\@search@result@err\wl@elt@chemsym
\ifcur@elem@exist\ifnum\wl@countd<\wl@countc\wl@addt@list{\wl@list@@}{,}\fi\fi%
\advance\wl@countd by1%
@@ -1718,7 +1764,7 @@ color(.95cm)=(wlshcolLI)%
\wl=#1pt%
\@wl@gamma=\wl@gamma pt%
% compute the rgb components
-\ifdim\wl<10pt\relax\PackageWarning{pgf-spectra}{(#1nm) wavelength out of range ignored. The wavelength must be graeter or equal to 10nm (EUV)...}\else% NEW v2.0.0
+\ifdim\wl<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\wl<379.99999pt\relax\else%% NEW v2.0.0
\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%
@@ -1749,17 +1795,65 @@ color(.95cm)=(wlshcolLI)%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\def\wl@elt@search#1#2#3#4{\ignorespaces%
+\def\wl@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
-\edef\wl@CS@user{#1}\edef\wl@CS@comp{#2}\relax% New
-\ifx\wl@CS@user\wl@CS@comp\relax% New -> was \iftthenelse{...
+% #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)
+\ifwl@datanotfound\relax%
+\edef\wl@CS@user{#1}\edef\wl@CS@comp{#2}\relax%
+\ifx\wl@CS@user\wl@CS@comp\relax%
+\global\wl@datanotfoundfalse\relax%
\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
+\def\wl@elt@Imax@ALL{#4}% set element Imax: ALL range
+\def\wl@elt@Imax@UV{#5}% set element Imax: UV range
+\def\wl@elt@Imax@VIS{#6}% set element Imax: VIS range
+\def\wl@elt@Imax@IR{#7}% set element Imax: IR range
+\fi%
\fi%
}%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% NEW v2.2.0
+% \wl@setmaxin{UV or VIS or IR or ALL} -> OUTPUT: \wl@elt@Imax
+\def\wl@setmaxint#1{\ignorespaces%
+\edef\wl@qALL{all}\edef\wl@qO{0}\edef\wl@qI{1}\edef\wl@qII{2}\edef\wl@qIII{3}\edef\wl@qIV{4}%
+\ifnum\wl@DATASET=0\relax% NIST
+ \ifx\wl@charge\wl@qO\relax%
+ \edef\wl@elt@Imax{\csname int#1qO\endcsname}%
+ \else\ifx\wl@charge\wl@qI\relax%
+ \edef\wl@elt@Imax{\csname int#1qI\endcsname}%
+ \else%
+ \edef\wl@elt@Imax{\csname int#1qALL\endcsname}%
+ \fi\fi%
+\else% LSE
+ \ifx\wl@charge\wl@qO\relax%
+ \edef\wl@elt@Imax{\csname int#1qO\endcsname}%
+ \else\ifx\wl@charge\wl@qI\relax%
+ \edef\wl@elt@Imax{\csname int#1qI\endcsname}%
+ \else\ifx\wl@charge\wl@qII\relax%
+ \edef\wl@elt@Imax{\csname int#1qII\endcsname}%
+ \else\ifx\wl@charge\wl@qIII\relax%
+ \edef\wl@elt@Imax{\csname int#1qIII\endcsname}%
+ \else\ifx\wl@charge\wl@qIV\relax%
+ \edef\wl@elt@Imax{\csname int#1qIV\endcsname}%
+ \else%
+ \edef\wl@elt@Imax{\csname int#1qALL\endcsname}%
+ \fi\fi\fi\fi\fi%
+\fi%
+}%
+% NEW v2.2.0
+%USAGE \expandafter\wl@getmaxint#1x#2x#3x#4x#5x#6x#7x#8\relax
+\def\wl@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