diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/datatool/datatool-base.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/datatool/datatool-base.sty | 126 |
1 files changed, 97 insertions, 29 deletions
diff --git a/Master/texmf-dist/tex/latex/datatool/datatool-base.sty b/Master/texmf-dist/tex/latex/datatool/datatool-base.sty index 3ac36bf6f15..34109c37115 100644 --- a/Master/texmf-dist/tex/latex/datatool/datatool-base.sty +++ b/Master/texmf-dist/tex/latex/datatool/datatool-base.sty @@ -39,7 +39,7 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{datatool-base}[2018/04/16 v2.30 (NLCT)] +\ProvidesPackage{datatool-base}[2018/12/07 v2.31 (NLCT)] \RequirePackage{etoolbox} \RequirePackage{amsmath} \RequirePackage{xkeyval} @@ -180,12 +180,62 @@ #3% \fi } -\newcommand*{\DTLnumitemsinlist}[2]{% +\newif\ifDTLlistskipempty +\DTLlistskipemptytrue +\newrobustcmd{\DTLlistelement}[2]{% + \begingroup + \@dtl@tmpcount=0\relax + \@for\@dtl@element:=#1\do{% + \ifDTLlistskipempty + \ifdefempty{\@dtl@element}% + {}% + {% + \advance\@dtl@tmpcount by 1\relax% + \ifnum\@dtl@tmpcount=#2 \@dtl@element\@endfortrue\fi + }% + \else + \advance\@dtl@tmpcount by 1\relax% + \ifnum\@dtl@tmpcount=#2 \@dtl@element\@endfortrue\fi + \fi + }% + \if@endfor \else\@dtl@listelement@outofrange{#2}\fi + \endgroup +} +\newrobustcmd{\DTLfetchlistelement}[3]{% + \begingroup + \@dtl@tmpcount=0\relax + \@for\@dtl@element:=#1\do{% + \ifDTLlistskipempty + \ifdefempty{\@dtl@element}% + {}% + {% + \advance\@dtl@tmpcount by 1\relax% + \ifnum\@dtl@tmpcount=#2 \@endfortrue\fi + }% + \else + \advance\@dtl@tmpcount by 1\relax% + \ifnum\@dtl@tmpcount=#2 \@endfortrue\fi + \fi + }% + \if@endfor \else\def\@dtl@element{\@dtl@listelement@outofrange{#2}}\fi + \edef\x{% + \endgroup + \noexpand\def\noexpand#3{\expandonce\@dtl@element}% + }\x +} +\newcommand{\@dtl@listelement@outofrange}[1]{% + \PackageWarning{datatool-base}{List index `\number#1' out of range}% +} +\newrobustcmd{\DTLnumitemsinlist}[2]{% \@dtl@tmpcount=0\relax \@for\@dtl@element:=#1\do{% - \ifdefempty{\@dtl@element}% - {}% - {\advance\@dtl@tmpcount by 1\relax}% + \ifDTLlistskipempty + \ifdefempty{\@dtl@element}% + {}% + {\advance\@dtl@tmpcount by 1\relax}% + \else + \advance\@dtl@tmpcount by 1\relax + \fi }% \edef#2{\number\@dtl@tmpcount}% } @@ -393,7 +443,13 @@ \def\@dtl@formatlist@prelastitem{}% \def\@dtl@formatlist@prelastitemsep{}% \@for\@dtl@formatlist@item:=#1\do{% - \expandafter\@dtl@formatlist@handler\expandafter{\@dtl@formatlist@item}% + \ifDTLlistskipempty + \ifdefempty{\@dtl@formatlist@item}% + {}% + {\expandafter\@dtl@formatlist@handler\expandafter{\@dtl@formatlist@item}}% + \else + \expandafter\@dtl@formatlist@handler\expandafter{\@dtl@formatlist@item}% + \fi }% \@dtl@formatlist@prelastitem\@dtl@formatlist@lastitem } @@ -1448,24 +1504,16 @@ \fi \fi } +\newcommand*{\@dtl@protect}{\protect} +\newcommand*{\@dtl@minus}{-} +\newcommand*{\@dtl@plus}{+} +\newcommand*{\@dtl@dollar}{\$} \def\@dtl@checknumericalstart#1#2\@nil\@nil{% -\ifx#1\protect\relax - \@dtl@checknumericalstart#2\@nil\@nil\relax -\else - \ifx-#1\relax - \def\@dtl@tmp{#2}% - \ifdefempty{\@dtl@tmp}% - {% - \@dtl@datatype=0\relax - }% - {% - \ifnum\@dtl@datatype=0\relax - \@dtl@datatype=1\relax - \fi - \@dtl@checknumericalstart#2\@nil\@nil\relax - }% + \def\@dtl@tmp{#1}% + \ifx\@dtl@tmp\@dtl@protect + \@dtl@checknumericalstart#2\@nil\@nil\relax \else - \ifx+#1\relax + \ifx\@dtl@tmp\@dtl@minus \def\@dtl@tmp{#2}% \ifdefempty{\@dtl@tmp}% {% @@ -1478,11 +1526,8 @@ \@dtl@checknumericalstart#2\@nil\@nil\relax }% \else - \def\@dtl@tmp{#1}% - \ifx#1\$\relax - \@dtl@datatype=3\relax - \@dtl@checknumericalstart#2\@nil\@nil\relax - \else + \ifx\@dtl@tmp\@dtl@plus + \def\@dtl@tmp{#2}% \ifdefempty{\@dtl@tmp}% {% \@dtl@datatype=0\relax @@ -1491,12 +1536,35 @@ \ifnum\@dtl@datatype=0\relax \@dtl@datatype=1\relax \fi - \@dtl@checknumericalloop#1#2\@nil\@nil\relax + \@dtl@checknumericalstart#2\@nil\@nil\relax }% + \else + \def\@dtl@tmp{#1}% + \ifx\@dtl@tmp\@dtl@dollar + \def\@dtl@tmp{#2}% + \ifdefempty{\@dtl@tmp}% + {% + \@dtl@datatype=0\relax + }% + {% + \@dtl@datatype=3\relax + \@dtl@checknumericalstart#2\@nil\@nil\relax + }% + \else + \ifdefempty{\@dtl@tmp}% + {% + \@dtl@datatype=0\relax + }% + {% + \ifnum\@dtl@datatype=0\relax + \@dtl@datatype=1\relax + \fi + \@dtl@checknumericalloop#1#2\@nil\@nil\relax + }% + \fi \fi \fi \fi -\fi } \newif\if@dtl@numgrpsep \newcommand*{\@dtl@ifDigitOrDecimalSep}[3]{% |