From 6d3800d3b164704c4038f84408b27f759a4ea744 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 15 Jan 2013 23:01:04 +0000 Subject: datatool (15jan13) git-svn-id: svn://tug.org/texlive/trunk@28844 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/datatool/databar.sty | 6 +- Master/texmf-dist/tex/latex/datatool/databib.sty | 6 +- Master/texmf-dist/tex/latex/datatool/datagidx.sty | 3147 ++++++++++++++++++++ Master/texmf-dist/tex/latex/datatool/datapie.sty | 6 +- Master/texmf-dist/tex/latex/datatool/dataplot.sty | 6 +- .../tex/latex/datatool/datatool-base.sty | 626 +++- .../texmf-dist/tex/latex/datatool/datatool-fp.sty | 6 +- .../tex/latex/datatool/datatool-pgfmath.sty | 6 +- Master/texmf-dist/tex/latex/datatool/datatool.sty | 232 +- Master/texmf-dist/tex/latex/datatool/person.sty | 6 +- 10 files changed, 3860 insertions(+), 187 deletions(-) create mode 100644 Master/texmf-dist/tex/latex/datatool/datagidx.sty (limited to 'Master/texmf-dist/tex/latex/datatool') diff --git a/Master/texmf-dist/tex/latex/datatool/databar.sty b/Master/texmf-dist/tex/latex/datatool/databar.sty index 972aa20eceb..e0ab21dfffc 100644 --- a/Master/texmf-dist/tex/latex/datatool/databar.sty +++ b/Master/texmf-dist/tex/latex/datatool/databar.sty @@ -7,7 +7,7 @@ %% datatool.dtx (with options: `databar.sty,package') %% %% datatool.dtx -%% Copyright 2012 Nicola Talbot +%% Copyright 2013 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. +%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -39,7 +39,7 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{databar}[2012/09/25 v2.11 (NLCT)] +\ProvidesPackage{databar}[2013/01/15 v2.13 (NLCT)] \RequirePackage{xkeyval} \RequirePackage{dataplot} \newif\ifDTLcolorbarchart diff --git a/Master/texmf-dist/tex/latex/datatool/databib.sty b/Master/texmf-dist/tex/latex/datatool/databib.sty index c5c7ada4dfc..3ebe84cea78 100644 --- a/Master/texmf-dist/tex/latex/datatool/databib.sty +++ b/Master/texmf-dist/tex/latex/datatool/databib.sty @@ -7,7 +7,7 @@ %% datatool.dtx (with options: `databib.sty,package') %% %% datatool.dtx -%% Copyright 2012 Nicola Talbot +%% Copyright 2013 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. +%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -39,7 +39,7 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{databib}[2012/09/25 v2.11 (NLCT)] +\ProvidesPackage{databib}[2013/01/15 v2.13 (NLCT)] \RequirePackage{datatool} \newcommand*{\dtlbib@style}{plain} \define@choicekey{databib.sty}{style}{plain,abbrv,alpha}{% diff --git a/Master/texmf-dist/tex/latex/datatool/datagidx.sty b/Master/texmf-dist/tex/latex/datatool/datagidx.sty new file mode 100644 index 00000000000..63b778f0cff --- /dev/null +++ b/Master/texmf-dist/tex/latex/datatool/datagidx.sty @@ -0,0 +1,3147 @@ +%% +%% This is file `datagidx.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% datatool.dtx (with options: `datagidx.sty,package') +%% +%% datatool.dtx +%% Copyright 2013 Nicola Talbot +%% +%% This work may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either version 1.3 +%% of this license of (at your option) any later version. +%% The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.3 or later is part of all distributions of LaTeX +%% version 2005/12/01 or later. +%% +%% This work has the LPPL maintenance status `maintained'. +%% +%% The Current Maintainer of this work is Nicola Talbot. +%% +%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. +%% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{datagidx}[2013/01/15 v2.13 (NLCT)] +\RequirePackage{datatool} +\RequirePackage{etoolbox} +\RequirePackage{xkeyval} +\RequirePackage{mfirstuc} +\RequirePackage{xfor} +\RequirePackage{multicol} +\RequirePackage{textcase} +\newcommand*{\datagidx@columns}{2} +\newcommand*{\DTLgidxSetColumns}[1]{% + \DTLifint{#1}% + {% + \def\datagidx@columns{#1}% + }% + {% + \PackageError{datagidx}% + {Number of columns must be an integer}% + {% + You have requested `#1' columns, which can't be parsed as a + number% + }% + }% +} +\newcounter{DTLgidxChildCount} +\def\theHDTLgidxChildCount{\Label.\arabic{DTLgidxChildCount}} +\newcommand*{\DTLgidxChildCountLabel}{\theDTLgidxChildCount) } +\newcommand*{\DTLgidxChildStyle}[1]{#1} +\newcommand*{\datagidx@setchildstyle}[1]{% + \ifcase#1\relax + \renewcommand*{\DTLgidxChildStyle}[1]{##1}% + \or + \renewcommand*{\DTLgidxChildStyle}[1]{% + \DTLgidxChildCountLabel + }% + \fi +} +\newcommand{\datagidx@foreachchild}{% + \datagidx@sort@foreachchild +} +\newcommand*{\datagidx@setchildsort}[1]{% + \ifcase#1\relax + \renewcommand*{\datagidx@foreachchild}{% + \datagidx@sort@foreachchild + }% + \or + \renewcommand*{\datagidx@foreachchild}{% + \datagidx@unsort@foreachchild + }% + \fi +} +\newcommand*{\DTLgidxPostName}{ } +\newcommand*{\DTLgidxPostChildName}{\DTLgidxPostName} +\newcommand*{\DTLgidxNameCase}[1]{#1} +\newcommand*{\datagidx@setnamecase}[1]{% + \ifcase#1\relax + \renewcommand*{\DTLgidxNameCase}[1]{##1}% + \or + \let\DTLgidxNameCase\MakeTextUppercase + \or + \let\DTLgidxNameCase\MakeTextLowercase + \or + \let\DTLgidxNameCase\xmakefirstuc + \or + \let\DTLgidxNameCase\xcapitalisewords + \fi +} +\newcommand*{\DTLgidxNameFont}[1]{\textnormal{#1}} +\newcommand*{\DTLgidxPostDescription}{} +\newcommand*{\datagidx@setpostdesc}[1]{% + \ifcase#1\relax + \renewcommand*{\DTLgidxPostDescription}{}% + \or + \renewcommand*{\DTLgidxPostDescription}{.}% + \fi + } +\newcommand*{\DTLgidxPreLocation}{\enspace} +\newcommand*{\datagidx@setprelocation}[1]{% + \ifcase#1\relax + \renewcommand*{\DTLgidxPreLocation}{}% + \or + \renewcommand*{\DTLgidxPreLocation}{\enspace}% + \or + \renewcommand*{\DTLgidxPreLocation}{ }% + \or + \renewcommand*{\DTLgidxPreLocation}{\dotfill}% + \or + \renewcommand*{\DTLgidxPreLocation}{\hfill}% + \fi + } +\newcommand*{\DTLgidxLocation}{\dtldolocationlist} +\newcommand*{\datagidx@setlocation}[1]{% + \ifcase#1\relax + \renewcommand*{\DTLgidxLocation}{}% + \or + \renewcommand*{\DTLgidxLocation}{\dtldolocationlist}% + \or + \renewcommand*{\DTLgidxLocation}{\dtldofirstlocation}% + \fi +} +\newcommand*{\DTLgidxSee}{% + \DTLifnull{\See}% + {}% + {% + \DTLgidxPreLocation + \DTLgidxFormatSee{\seename}{\See}% + }% +} +\newcommand*{\DTLgidxSeeAlso}{% + \DTLifnull{\SeeAlso}% + {}% + {% + \DTLgidxFormatSeeAlso{\seealsoname}{\SeeAlso}% + }% +} +\newcommand*{\DTLgidxChildrenSeeAlso}{% + \DTLgidxChildren + \DTLgidxSeeAlso +} +\newcommand*{\datagidx@setsee}[1]{% + \ifcase#1\relax + \renewcommand*{\DTLgidxSee}{% + \DTLifnull{\See}{}% + {% + , \DTLgidxFormatSee{\seename}{\See}% + }% + }% + \or + \renewcommand*{\DTLgidxSee}{% + \DTLifnull{\See}{} + {% + \space(\DTLgidxFormatSee{\seename}{\See})% + }% + }% + \or + \renewcommand*{\DTLgidxSee}{% + \DTLifnull{\See}{}% + {% + . \DTLgidxFormatSee{\xmakefirstuc{\seename}}{\See}% + }% + }% + \or + \renewcommand*{\DTLgidxSee}{% + \DTLifnull{\See}{} + {% + \space\DTLgidxFormatSee{\seename}{\See}% + }% + }% + \or + \renewcommand*{\DTLgidxSee}{% + \DTLifnull{\See}{} + {% + \DTLgidxFormatSee{\seename}{\See}% + }% + }% + \or + \renewcommand*{\DTLgidxSee}{% + \DTLifnull{\See}{} + {% + ; \DTLgidxFormatSee{\seename}{\See}% + }% + }% + \or + \renewcommand*{\DTLgidxSee}{% + \DTLifnull{\See}{} + {% + \DTLgidxPreLocation\DTLgidxFormatSee{\seename}{\See}% + }% + }% + \fi +} +\newcommand*{\DTLgidxSymDescSep}{\space} +\newlength\datagidxsymbolwidth +\newlength\datagidxlocationwidth +\newcommand{\DTLgidxFormatDesc}[1]{#1} +\newcommand*{\DTLgidxSymbolDescription}{% + \DTLgidxSymbolDescLeft + \DTLgidxSymbolDescRight +} +\newcommand*{\DTLgidxSymbolDescLeft}{% + \ifdefempty{\Symbol}{}{(\Symbol)\DTLgidxSymDescSep}% +} +\newcommand*{\DTLgidxSymbolDescRight}{% + \ifdefempty{\Description}{}% + {% + \DTLgidxFormatDesc{\Description}\DTLgidxPostDescription + }% +} +\newif\if@datagidxsymbolleft +\@datagidxsymbollefttrue +\newcommand*{\datagidx@formatsymdesc}[1]{% + \ifcase#1\relax + \renewcommand*{\DTLgidxSymbolDescLeft}{% + \ifdefempty{\Symbol}{}{\Symbol}% + }% + \renewcommand*{\DTLgidxSymbolDescRight}{}% + \@datagidxsymbollefttrue + \or + \renewcommand*{\DTLgidxSymbolDescLeft}{% + \ifdefempty{\Description}{}% + {% + \DTLgidxFormatDesc{\Description}\DTLgidxPostDescription + }% + }% + \renewcommand*{\DTLgidxSymbolDescRight}{}% + \@datagidxsymbolleftfalse + \or + \renewcommand*{\DTLgidxSymbolDescLeft}{% + \ifdefempty{\Symbol}{}{(\Symbol)\DTLgidxSymDescSep}% + }% + \renewcommand*{\DTLgidxSymbolDescRight}{% + \ifdefempty{\Description}{}% + {% + \DTLgidxFormatDesc{\Description}\DTLgidxPostDescription + }% + }% + \@datagidxsymbollefttrue + \or + \renewcommand*{\DTLgidxSymbolDescLeft}{% + \ifdefempty{\Description}{}% + {% + \DTLgidxFormatDesc{\Description}% + \DTLgidxPostDescription\DTLgidxSymDescSep + }% + }% + \renewcommand*{\DTLgidxSymbolDescRight}{% + \ifdefempty{\Symbol}{}{(\Symbol)}% + }% + \@datagidxsymbolleftfalse + \or + \renewcommand*{\DTLgidxSymbolDescLeft}{% + \ifdefempty{\Symbol}{}{\Symbol\DTLgidxSymDescSep}% + }% + \renewcommand*{\DTLgidxSymbolDescRight}{% + \ifdefempty{\Description}{}% + {% + \DTLgidxFormatDesc{\Description}% + \DTLgidxPostDescription + }% + }% + \@datagidxsymbollefttrue + \or + \renewcommand*{\DTLgidxSymbolDescLeft}{% + \ifdefempty{\Description}{}% + {% + \DTLgidxFormatDesc{\Description}% + \DTLgidxPostDescription\DTLgidxSymDescSep + }% + }% + \renewcommand*{\DTLgidxSymbolDescRight}{% + \ifdefempty{\Symbol}{}{\Symbol}% + }% + \@datagidxsymbolleftfalse + \fi + } +\newcommand*{\DTLgidxSetCompositor}[1]{% + \undef\datagidx@docomplist + \DeclareListParser{\datagidx@docomplist}{#1}% + \def\datagidx@compositor{#1}% +} +\DTLgidxSetCompositor{.} +\newcommand*{\datagidx@do@sort}{\datagidx@sort} +\newcommand*{\datagidx@optimize@sort}{% + \ifdef\datagidx@do@optimize@sort + {% + \datagidx@sort + }% + {% + \protected@write\@auxout{}{% + \string\gdef\string\datagidx@do@optimize@sort{}% + }% + \global\let\@datagidx@dorerun@warn@sort\@data@rerun@warn@sort + }% +} +\newcommand*\@datagidx@dorerun@warn{} +\AtEndDocument{\@datagidx@dorerun@warn} +\newcommand*\@datagidx@dorerun@warn@sort{} +\AtEndDocument{\@datagidx@dorerun@warn@sort} +\newcommand*\@data@rerun@warn@sort{% + \PackageWarningNoLine{datagidx}{Rerun required to sort the + index/glossary databases}% +} +\newcommand*\@data@rerun@warn{% + \PackageWarningNoLine{datagidx}{Rerun required to ensure the + index/glossary location lists are up-to-date}% +} +\newcommand*{\datagidx@do@highopt@optimize}{% + \renewcommand*{\datagidx@do@sort}{% + \ifcsdef{datagidx@do@highopt@sort@\DTLgidxCurrentdb}% + {% + \csuse{datagidx@do@highopt@sort@\DTLgidxCurrentdb}% + }% + {% + }% + \bgroup + \def\dtl@saverawdbhook{% + \let\db@col@id@w\@datagidx@db@col@id@w + \def\DTLgidxName{\string\DTLgidxName\space}% + \def\DTLgidxMac{\string\DTLgidxMac\space}% + \def\DTLgidxRank{\string\DTLgidxRank\space}% + \def\DTLgidxParen{\string\DTLgidxParen\space}% + \def\DTLgidxParticle{\string\DTLgidxParticle\space}% + \def\DTLgidxOffice{\string\DTLgidxOffice\space}% + \def\DTLgidxSaint{\string\DTLgidxSaint\space}% + \def\DTLgidxPlace{\string\DTLgidxPlace\space}% + \def\DTLgidxIgnore{\string\DTLgidxIgnore\space}% + \def\DTLgidxNameNum{\string\DTLgidxNameNum\space}% + \def\DTLgidxSubject{\string\DTLgidxSubject\space}% + }% + \DTLsaverawdb{\DTLgidxCurrentdb}{\datagidxhighoptfilename\DTLgidxCurrentdb}% + \egroup + }% + \def\newgidx{\datagidx@highopt@newgidx}% + \def\newterm{\datagidx@highopt@newterm}% +} +\def\@datagidx@db@col@id@w#1\db@col@id@end@\db@col@elt@w#2\db@col@elt@end@\db@col@id@w#3\db@col@id@end@{% + \expandafter\@gobble\string\%^^J + \string\db@col@id@w\space #1% + \expandafter\@gobble\string\%^^J + \string\db@col@id@end@\space + \expandafter\@gobble\string\%^^J + \string\db@col@elt@w\space + \expandafter\ifnum\csname dtl@ci@\DTLgidxCurrentdb @Used\endcsname=#1\space + 0% + \else + \expandafter\ifnum\csname dtl@ci@\DTLgidxCurrentdb @Location\endcsname=#1\space + \else + \expandafter\ifnum\csname dtl@ci@\DTLgidxCurrentdb @CurrentLocation\endcsname=#1\space + \else + \expandafter\ifnum\csname dtl@ci@\DTLgidxCurrentdb @Sort\endcsname=#1\space + \protect#2% + \else + #2% + \fi + \fi + \fi + \fi + \expandafter\@gobble\string\%^^J + \string\db@col@elt@end@\space + \expandafter\@gobble\string\%^^J + \string\db@col@id@w\space #3% + \expandafter\@gobble\string\%^^J + \string\db@col@id@end@\space +} +\newcommand*{\datagidx@do@highopt@update}[1]{} +\newcommand*{\datagidxhighoptfilename}[1]{\jobname-#1.gidx} +\define@choicekey{datagidx.sty}{optimize}[\val\nr]% + {off,low,high}[high]% + {% + \ifcase\nr\relax + \renewcommand*{\datagidx@do@sort}{\datagidx@sort} + \or + \renewcommand*{\datagidx@do@sort}{\datagidx@optimize@sort} + \or + \datagidx@do@highopt@optimize + \fi + } +\define@key{datagidx.sty}{columns}% +{% + \DTLgidxSetColumns{#1}% +} +\define@choicekey{datagidx.sty}{child}[\val\nr]% + {named,noname}% + {% + \datagidx@setchildstyle\nr + } +\define@choicekey{datagidx.sty}{namecase}[\val\nr]% + {nochange,uc,lc,firstuc,capitalise}% + {% + \datagidx@setnamecase\nr + } +\define@key{datagidx.sty}{namefont}% +{% + \renewcommand*{\DTLgidxNameFont}[1]{{#1{##1}}}% +} +\define@key{datagidx.sty}{postname} +{% + \renewcommand*{\DTLgidxPostName}{#1}% +} +\define@choicekey{datagidx.sty}{postdesc}[\val\nr]% + {none,dot}% + {% + \datagidx@setpostdesc\nr + } +\define@choicekey{datagidx.sty}{prelocation}[\val\nr]% + {none,enspace,space,dotfill,hfill}% + {% + \datagidx@setprelocation\nr + } +\define@choicekey{datagidx.sty}{location}[\val\nr]% + {hide,list,first}% + {\datagidx@setlocation\nr} +\define@choicekey{datagidx.sty}{see}[\val\nr]% + {comma,brackets,dot,space,nosep,semicolon,location}% + {\datagidx@setsee\nr} +\define@choicekey{datagidx.sty}{symboldesc}[\val\nr]% + {symbol,desc,(symbol) desc,desc (symbol),symbol desc,desc symbol}% + {\datagidx@formatsymdesc\nr} +\define@key{datagidx.sty}{compositor}% +{% + \DTLgidxSetCompositor{#1}% +}% +\DeclareOptionX{final}{% + \let\datagidxshowifdraft\@gobble +} +\let\datagidxshowifdraft\@gobble +\DeclareOptionX{draft}{% + \let\datagidxshowifdraft\@firstofone +} +\define@choicekey{datagidx.sty}{verbose}[\val\nr]% + {true,false}[true]% + {% + \csuse{dtlverbose\val}% + } +\ProcessOptionsX +\DTLnewdb{datagidx} +\providecommand*{\seename}{see} +\providecommand*{\seealsoname}{see also} +\newcommand*{\DTLgidxSeeTagFont}[1]{\emph{#1}} +\newcommand*{\DTLgidxFormatSee}[2]{% + \DTLgidxSeeTagFont{#1} \DTLgidxSeeList{#2}% +} +\newcommand*{\DTLgidxFormatSeeAlso}[2]{% + \datagidxdoseealso + {% + \DTLgidxSeeTagFont{#1} \DTLgidxSeeList{#2}% + }% +} +\newcommand*{\datagidxdoseealso}[1]{% + \datagidxseealsostart + #1% + \datagidxseealsoend +} +\newcommand*{\DTLgidxSeeList}[1]{% + \def\datagidx@sep{}% + \@for\dtl@thislabel:=#1\do + {% + \ifx\@xfor@nextelement\@nnil + \ifdefempty{\datagidx@sep}% + {% + }% + {% + \DTLidxSeeLastSep + }% + \else + \datagidx@sep + \let\datagidx@sep\DTLidxSeeSep + \fi + \DTLidxFormatSeeItem{\dtl@thislabel}% + }% +} +\newcommand*{\DTLidxFormatSeeItem}[1]{% + \DTLgidxFetchEntry{\datagidx@value}{#1}{Name}% + \datagidxlink{#1}% + {% + \datagidx@value + }% +} +\newcommand*{\DTLidxSeeSep}{, } +\newcommand*{\DTLidxSeeLastSep}{ \& } +\newcommand*{\DTLgidxDoSeeOrLocation}{% + \DTLifnull\See + {% + \ifdefempty\Location + {% + }% + {% + \DTLgidxPreLocation + \DTLgidxLocation + }% + }% + {% + \DTLgidxSee + }% +} +\newcommand*{\datagidx@sortchildren}{% + \def\datagidx@sortedlist{}% + \@for\Label:=\Children\do + {% + \edef\do@getrow{% + \noexpand\dtlgetrowforvalue + {\DTLgidxCurrentdb}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Label}}% + {\Label}% + }% + \do@getrow + \ifdefempty\datagidx@sortedlist + {% + \edef\datagidx@newsortedlist{{\number\dtlrownum}{\Label}}% + }% + {% + \def\datagidx@newsortedlist{}% + \@for\@datagidx@thisval:=\datagidx@sortedlist\do + {% + \edef\datagidx@thisidx{\expandafter\@firstoftwo\@datagidx@thisval}% + \ifnum\datagidx@thisidx>\dtlrownum\relax + \ifdefempty\datagidx@newsortedlist + {% + \eappto\datagidx@newsortedlist + {% + {\number\dtlrownum}{\Label},\@datagidx@thisval + }% + }% + {% + \eappto\datagidx@newsortedlist + {% + ,{\number\dtlrownum}{\Label},\@datagidx@thisval + }% + }% + \@endfortrue + \else + \ifdefempty\datagidx@newsortedlist + {% + \edef\datagidx@newsortedlist{% + \@datagidx@thisval + }% + }% + {% + \eappto\datagidx@newsortedlist + {% + ,\@datagidx@thisval + }% + }% + \fi + }% + \if@endfor + \ifdefempty\@forremainder + {% + }% + {% + \eappto\datagidx@newsortedlist{,\@forremainder}% + }% + \else + \ifdefempty\datagidx@newsortedlist + {% + \edef\datagidx@newsortedlist{{\number\dtlrownum}{\Label}}% + }% + {% + \eappto\datagidx@newsortedlist{,{\number\dtlrownum}{\Label}}% + }% + \fi + }% + \let\datagidx@sortedlist\datagidx@newsortedlist + \@endforfalse + }% +} +\newcommand{\datagidx@sort@foreachchild}[1]{% + \datagidx@sortchildren + \@for\@datagidx@thisval:=\datagidx@sortedlist\do + {% + \edef\Label{\expandafter\@secondoftwo\@datagidx@thisval}% + #1% + }% +} +\newcommand{\datagidx@unsort@foreachchild}[1]{% + \@for\Label:=\Children\do + {% + #1% + }% +} +\newcommand*{\DTLgidxChildren}{% + \bgroup + \DTLifnull\Children + {}% + {% + \advance\datagidx@level by 1\relax + \datagidxchildstart + \let\Parent\Label + \datagidx@foreachchild + {% + \edef\do@getrow{% + \noexpand\dtlgetrowforvalue + {\DTLgidxCurrentdb}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Label}}% + {\Label}% + }% + \do@getrow + \dtlgetentryfromcurrentrow + {\Location}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Location}}% + \dtlgetentryfromcurrentrow + {\See}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{See}}% + \dtlgetentryfromcurrentrow + {\SeeAlso}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{SeeAlso}}% + \DTLifnull\Location + {% + \DTLifnull\See + {% + \DTLifnull\SeeAlso + {}% + {% + \datagidx@displaychild + }% + }% + {% + \datagidx@displaychild + }% + }% + {% + \datagidx@displaychild + }% + }% + \datagidxchildend + }% + \egroup +} +\newcommand*{\datagidxgetchildfields}{% + \dtlgetentryfromcurrentrow + {\Name}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Name}}% + \dtlgetentryfromcurrentrow + {\Description}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Description}}% + \dtlgetentryfromcurrentrow + {\Symbol}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Symbol}}% + \dtlgetentryfromcurrentrow + {\Long}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Long}}% + \dtlgetentryfromcurrentrow + {\Short}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Short}}% + \dtlgetentryfromcurrentrow + {\Text}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Text}}% + \dtlgetentryfromcurrentrow + {\Plural}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Plural}}% + \dtlgetentryfromcurrentrow + {\Short}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Used}}% + \dtlgetentryfromcurrentrow + {\Children}% + {\dtlcolumnindex{\DTLgidxCurrentdb}{Child}}% +} +\newcommand*{\datagidx@displaychild}{% + \datagidxgetchildfields + \datagidxchilditem +} +\ifdef{\chapter} +{% + \newcommand*{\datagidx@heading}{\chapter*} +}% +{% + \newcommand*{\datagidx@heading}{\section*} +} +\let\DTLgidxNoHeading\@gobble +\newcommand*{\datagidx@postheading}{} +\newcommand*{\datagidx@multicols}{multicols} +\newcommand*{\datagidx@sort}{% + \dtlsort{Sort,FirstId}{\DTLgidxCurrentdb}{\dtlwordindexcompare}% +} +\newcommand*{\datagidxstart}% +{% + \bgroup + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt plus 0.3pt}% + \let\item\@idxitem +} +\newcommand*{\datagidxend}{\egroup} +\newcommand*{\@datagidxtarget}[2]{% + \ifdef\hypertarget + {% + \bgroup + \let\glsadd\@gobble + \settoheight\dimen@{#2}% + \raisebox{\dimen@}{\hypertarget{#1}{}}% + \egroup + }% + {% + }% + #2% +} +\newcommand*{\datagidxtarget}{\@datagidxtarget} +\newcommand*{\@datagidxlink}[2]{% + \ifdef\hyperlink + {% + \hyperlink{#1}{#2}% + }% + {% + #2% + }% +} +\newcommand*{\datagidxlink}{\@datagidxlink} +\newcommand*{\DTLgidxEnableHyper}{% + \let\datagidxtarget\@datagidxtarget + \let\datagidxlink\@datagidxlink +} +\newcommand*{\DTLgidxDisableHyper}{% + \let\datagidxtarget\@secondoftwo + \let\datagidxlink\@secondoftwo +} +\newcommand*{\datagidxgroupsep}{} +\newcommand*{\datagidxgroupheader}{} +\newcommand*{\datagidxitem}{}% +\newcommand*{\datagidxchildstart}{} +\newcommand*{\datagidxchildend}{} +\newcommand*{\datagidxchilditem}{}% +\newcommand*{\datagidxseealsostart}{} +\newcommand*{\datagidxseealsoend}{} +\newcommand*{\datagidx@doifsymlocwidth}[3]{% + \setlength{\dtl@tmplength}{\linewidth}% + \addtolength{\dtl@tmplength}{-#1}% + \settowidth{\dimen@}{#2}% + \addtolength{\dtl@tmplength}{-\dimen@}% + \addtolength{\dtl@tmplength}{-\datagidxsymbolwidth}% + \addtolength{\dtl@tmplength}{-\datagidxlocationwidth}% + \settowidth{\dimen@}{\DTLgidxPreLocation}% + \addtolength{\dtl@tmplength}{-\dimen@}% + \settowidth{\dimen@}{\DTLgidxSymDescSep}% + \addtolength{\dtl@tmplength}{-\dimen@}% + \if@datagidxsymbolleft + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\dtl@tmplength}% + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescRight + \end{minipage}% + \else + \begin{minipage}[t]{\dtl@tmplength}% + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescRight + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + \end{minipage}% + \fi + \DTLgidxPreLocation + \begin{minipage}[t]{\datagidxlocationwidth}% + \datagidxlocalign + \let\DTLgidxPreLocation\@empty + #3% + \end{minipage}% +} +\newcommand*{\datagidx@doiflocwidth}[3]{% + \setlength{\dtl@tmplength}{\linewidth}% + \addtolength{\dtl@tmplength}{-#1}% + \settowidth{\dimen@}{#2}% + \addtolength{\dtl@tmplength}{-\dimen@}% + \addtolength{\dtl@tmplength}{-\datagidxlocationwidth}% + \settowidth{\dimen@}{\DTLgidxPreLocation}% + \addtolength{\dtl@tmplength}{-\dimen@}% + \begin{minipage}[t]{\dtl@tmplength}% + \DTLgidxSymbolDescription + \end{minipage}% + \DTLgidxPreLocation + \begin{minipage}[t]{\datagidxlocationwidth}% + \datagidxlocalign + \let\DTLgidxPreLocation\@empty + #3% + \end{minipage}% +} +\newcommand*{\datagidx@doifsymwidth}[3]{% + \setlength{\dtl@tmplength}{\linewidth}% + \addtolength{\dtl@tmplength}{-#1}% + \settowidth{\dimen@}{#2}% + \addtolength{\dtl@tmplength}{-\dimen@}% + \addtolength{\dtl@tmplength}{-\datagidxsymbolwidth}% + \settowidth{\dimen@}{\DTLgidxSymDescSep}% + \addtolength{\dtl@tmplength}{-\dimen@}% + \if@datagidxsymbolleft + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\dtl@tmplength}% + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescRight + #3% + \end{minipage}% + \else + \begin{minipage}[t]{\dtl@tmplength}% + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescRight + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + #3% + \end{minipage}% + \fi +} +\newcommand*{\datagidxlocalign}{\raggedleft} +\newcommand*{\datagidxsymalign}{\centering} +\newcommand*{\datagidxsetstyle}[1]{% + \ifcsdef{datagidx@style@#1}% + {% + \csuse{datagidx@style@#1}% + }% + {% + \PackageError{datagidx}{Unknown style `#1'}{}% + }% +} +\newcommand*{\datagidx@style@index}{% + \renewcommand*{\datagidxstart}% + {% + \bgroup + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt plus 0.3pt}% + \raggedright + \let\item\@idxitem + \ifdim\datagidxsymbolwidth>0pt\relax + \ifdim\datagidxlocationwidth>0pt\relax + \def\datagidx@item@body{% + \datagidx@doifsymlocwidth{0pt}% + {\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}% + {% + \DTLgidxDoSeeOrLocation + }% + }% + \else + \def\datagidx@item@body{% + \datagidx@doiflocwidth{0pt}% + {\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}% + {% + \DTLgidxDoSeeOrLocation + }% + }% + \fi + \else + \ifdim\datagidxlocationwidth>0pt\relax + \def\datagidx@item@body{% + \datagidx@doiflocwidth{0pt}% + {\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}% + {% + \DTLgidxDoSeeOrLocation + }% + }% + \else + \def\datagidx@item@body{% + \DTLgidxSymbolDescription + \DTLgidxDoSeeOrLocation + }% + \fi + \fi + }% + \renewcommand*{\datagidxend}{\egroup}% + \renewcommand*{\datagidxgroupsep}{\ifdatagidxshowgroups\indexspace\fi}% + \renewcommand{\datagidxgroupheader}{% + \ifdatagidxshowgroups + \item + \makebox[\linewidth]% + {% + \textbf{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}% + }% + \DTLpar\nobreak\@afterheading + \fi + }% + \renewcommand*{\datagidxitem}{% + \ifdefempty\datagidxprevgroup + {% + \datagidxgroupheader + }% + {% + \ifdefequal\datagidxcurrentgroup\datagidxprevgroup + {% + }% + {% + \datagidxgroupsep + \datagidxgroupheader + }% + }% + \item + \datagidxtarget{\Label}% + {% + \DTLgidxNameFont{\DTLgidxNameCase{\Name}}% + }% + \DTLgidxPostName + \datagidx@item@body + \DTLgidxChildrenSeeAlso + }% + \renewcommand*{\datagidxchildstart}% + {% + \bgroup + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt plus 0.3pt}% + \let\item\@idxitem + }% + \renewcommand*{\datagidxchildend}{\egroup}% + \renewcommand*{\datagidxchilditem}{% + \setlength{\dimen@}{\datagidxindent}% + \multiply\dimen@ by \datagidx@level\relax + \@idxitem\hspace*{\dimen@}% + \refstepcounter{DTLgidxChildCount}% + \datagidxtarget{\Label}% + {% + \DTLgidxChildStyle + {% + \DTLgidxNameFont{\DTLgidxNameCase{\Name}}% + \DTLgidxPostChildName + }% + }% + \DTLgidxSymbolDescription + \DTLgidxDoSeeOrLocation + \DTLgidxChildrenSeeAlso + }% + \renewcommand*{\datagidxseealsostart}% + {% + \bgroup + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt plus 0.3pt}% + \setlength{\dimen@}{\datagidxindent}% + \advance\datagidx@level by 1\relax + \multiply\dimen@ by \datagidx@level\relax + \@idxitem\hspace*{\dimen@}% + }% + \renewcommand{\datagidxseealsoend}{\egroup}% +} +\datagidx@style@index +\newcommand*{\datagidx@style@indexalign}{% + \renewcommand*{\datagidxstart}% + {% + \bgroup + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt plus 0.3pt}% + \setlength{\datagidxnamewidth}{0pt}% + \DTLforeach*{\DTLgidxCurrentdb}% + {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,% + \Parent=Parent}% + {% + \DTLifnull{\Parent}% + {% + \datagidx@doifdisplayed + {% + \settowidth{\dimen@}{\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}% + \ifdim\dimen@>\datagidxnamewidth\relax + \datagidxnamewidth=\dimen@\relax + \fi + }% + }% + {}% + }% + \settowidth{\dimen@}{\DTLgidxPostName}% + \addtolength{\datagidxnamewidth}{\dimen@}% + \setlength{\datagidxdescwidth}{\linewidth}% + \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}% + \ifdim\datagidxsymbolwidth>0pt\relax + \addtolength{\datagidxdescwidth}{-\datagidxsymbolwidth}% + \settowidth{\dimen@}{\DTLgidxSymDescSep}% + \addtolength{\datagidxdescwidth}{-\dimen@}% + \fi + \ifdim\datagidxlocationwidth>0pt\relax + \addtolength{\datagidxdescwidth}{-\datagidxlocationwidth}% + \settowidth{\dimen@}{\DTLgidxPreLocation}% + \addtolength{\datagidxdescwidth}{-\dimen@}% + \fi + \ifdim\datagidxsymbolwidth>0pt\relax + \ifdim\datagidxlocationwidth>0pt\relax + \if@datagidxsymbolleft + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\datagidxdescwidth}% + \let\DTLgidxSymDescSep\@empty + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescRight + \end{minipage}% + \DTLgidxPreLocation + \begin{minipage}[t]{\datagidxlocationwidth}% + \datagidxlocalign + \let\DTLgidxPreLocation\@empty + \DTLgidxDoSeeOrLocation + \end{minipage}% + }% + \else + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxdescwidth}% + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescRight + \end{minipage}% + \DTLgidxPreLocation + \begin{minipage}[t]{\datagidxlocationwidth}% + \datagidxlocalign + \let\DTLgidxPreLocation\@empty + \DTLgidxDoSeeOrLocation + \end{minipage}% + }% + \fi + \else + \if@datagidxsymbolleft + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\datagidxdescwidth}% + \let\DTLgidxSymDescSep\@empty + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescRight + \DTLgidxDoSeeOrLocation + \end{minipage}% + }% + \else + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxdescwidth}% + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescRight + \DTLgidxDoSeeOrLocation + \end{minipage}% + }% + \fi + \fi + \else + \ifdim\datagidxlocationwidth>0pt\relax + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxdescwidth}% + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescription + \end{minipage}% + \DTLgidxPreLocation + \begin{minipage}[t]{\datagidxlocationwidth}% + \datagidxlocalign + \let\DTLgidxPreLocation\@empty + \DTLgidxDoSeeOrLocation + }% + \else + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxdescwidth}% + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescription + \DTLgidxDoSeeOrLocation + \end{minipage}% + }% + \fi + \fi + }% + \renewcommand*{\datagidxend}{\egroup}% + \renewcommand*{\datagidxgroupsep}{}% + \renewcommand*{\datagidxgroupheader}{}% + \renewcommand*{\datagidxitem}{% + \ifdefempty\datagidxprevgroup + {% + \datagidxgroupheader + }% + {% + \ifdefequal\datagidxcurrentgroup\datagidxprevgroup + {% + }% + {% + \datagidxgroupsep + \datagidxgroupheader + }% + }% + \hangindent0pt\relax + \parindent0pt\relax + \makebox[\datagidxnamewidth][l]% + {% + \datagidxtarget{\Label}% + {% + \DTLgidxNameFont{\DTLgidxNameCase{\Name}}% + \DTLgidxPostName + }% + }% + \datagidx@item@body + \par + \DTLgidxChildrenSeeAlso + \par + }% + \renewcommand*{\datagidxchildstart}% + {% + \bgroup + \setlength{\dimen@}{\datagidxindent}% + \multiply\dimen@ by \datagidx@level\relax + \setlength{\dtl@tmplength}{\linewidth}% + \addtolength{\dtl@tmplength}{-\dimen@}% + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt plus 0.3pt}% + \edef\item{\noexpand\parshape=1 \the\dimen@ \the\dtl@tmplength}% + \setlength{\datagidxnamewidth}{0pt}% + \DTLforeach*{\DTLgidxCurrentdb}% + {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,% + \Parent=Parent}% + {% + \DTLifnull{\Parent}% + {% + \datagidx@doifdisplayed + {% + \settowidth{\dimen@}% + {% + \DTLgidxChildStyle + {% + \DTLgidxNameFont{\DTLgidxNameCase{\Name}}% + }% + }% + \ifdim\dimen@>\datagidxnamewidth\relax + \datagidxnamewidth=\dimen@\relax + \fi + }% + }% + {}% + }% + \settowidth{\dimen@}{\DTLgidxChildStyle\DTLgidxPostChildName}% + \addtolength{\datagidxnamewidth}{\dimen@}% + \setlength{\datagidxdescwidth}{\dtl@tmplength}% + \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}% + }% + \renewcommand{\datagidxchildend}{\egroup}% + \renewcommand*{\datagidxchilditem}{% + \item + \refstepcounter{DTLgidxChildCount}% + \makebox[\datagidxnamewidth][l]% + {% + \datagidxtarget{\Label}% + {% + \DTLgidxChildStyle + {% + \DTLgidxNameFont{\DTLgidxNameCase{\Name}}% + \DTLgidxPostChildName + }% + }% + }% + \begin{minipage}[t]{\datagidxdescwidth}% + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescription + \DTLgidxDoSeeOrLocation + \DTLgidxChildrenSeeAlso + \end{minipage}% + \par + }% +} +\newlength\datagidxindent +\setlength\datagidxindent{10\p@} +\newlength\datagidxnamewidth +\newlength\datagidxdescwidth +\newcommand*{\datagidx@style@align}{% + \renewcommand*{\datagidxstart}% + {% + \bgroup + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt plus 0.3pt}% + \setlength{\datagidxnamewidth}{0pt}% + \DTLforeach*{\DTLgidxCurrentdb}% + {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,% + \Parent=Parent}% + {% + \DTLifnull{\Parent}% + {% + \datagidx@doifdisplayed + {% + \settowidth{\dimen@}{\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}% + \ifdim\dimen@>\datagidxnamewidth\relax + \datagidxnamewidth=\dimen@\relax + \fi + }% + }% + {}% + }% + \settowidth{\dimen@}{\DTLgidxPostName}% + \addtolength{\datagidxnamewidth}{\dimen@}% + \setlength{\datagidxdescwidth}{\linewidth}% + \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}% + \ifdim\datagidxsymbolwidth>0pt\relax + \addtolength{\datagidxdescwidth}{-\datagidxsymbolwidth}% + \settowidth{\dimen@}{\DTLgidxSymDescSep}% + \addtolength{\datagidxdescwidth}{-\dimen@}% + \fi + \ifdim\datagidxlocationwidth>0pt\relax + \addtolength{\datagidxdescwidth}{-\datagidxlocationwidth}% + \settowidth{\dimen@}{\DTLgidxPreLocation}% + \addtolength{\datagidxdescwidth}{-\dimen@}% + \fi + \ifdim\datagidxsymbolwidth>0pt\relax + \ifdim\datagidxlocationwidth>0pt\relax + \if@datagidxsymbolleft + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\datagidxdescwidth}% + \let\DTLgidxSymDescSep\@empty + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescRight + \end{minipage}% + \DTLgidxPreLocation + \begin{minipage}[t]{\datagidxlocationwidth}% + \datagidxlocalign + \let\DTLgidxPreLocation\@empty + \DTLgidxDoSeeOrLocation + \DTLgidxChildrenSeeAlso + \end{minipage}% + }% + \else + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxdescwidth}% + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescRight + \end{minipage}% + \DTLgidxPreLocation + \begin{minipage}[t]{\datagidxlocationwidth}% + \datagidxlocalign + \let\DTLgidxPreLocation\@empty + \DTLgidxDoSeeOrLocation + \DTLgidxChildrenSeeAlso + \end{minipage}% + }% + \fi + \else + \if@datagidxsymbolleft + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\datagidxdescwidth}% + \let\DTLgidxSymDescSep\@empty + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescRight + \DTLgidxDoSeeOrLocation + \DTLgidxChildrenSeeAlso + \end{minipage}% + }% + \else + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxdescwidth}% + \let\DTLgidxSymDescSep\@empty + \DTLgidxSymbolDescLeft + \end{minipage}% + \DTLgidxSymDescSep + \begin{minipage}[t]{\datagidxsymbolwidth}% + \datagidxsymalign + \let\DTLgidxSymDescSep\@empty + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescRight + \DTLgidxDoSeeOrLocation + \DTLgidxChildrenSeeAlso + \end{minipage}% + }% + \fi + \fi + \else + \ifdim\datagidxlocationwidth>0pt\relax + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxdescwidth}% + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescription + \end{minipage}% + \DTLgidxPreLocation + \begin{minipage}[t]{\datagidxlocationwidth}% + \datagidxlocalign + \let\DTLgidxPreLocation\@empty + \DTLgidxDoSeeOrLocation + \DTLgidxChildrenSeeAlso + \end{minipage}% + }% + \else + \def\datagidx@item@body{% + \begin{minipage}[t]{\datagidxdescwidth}% + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescription + \DTLgidxDoSeeOrLocation + \DTLgidxChildrenSeeAlso + \end{minipage}% + }% + \fi + \fi + }% + \renewcommand*{\datagidxend}{\egroup}% + \renewcommand*{\datagidxgroupsep}{\ifdatagidxshowgroups\indexspace\fi}% + \renewcommand{\datagidxgroupheader}{% + \ifdatagidxshowgroups + \item + \makebox[\linewidth]% + {% + \textbf{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}% + }% + \DTLpar\nobreak\@afterheading + \fi + }% + \renewcommand*{\datagidxitem}{% + \ifdefempty\datagidxprevgroup + {% + \datagidxgroupheader + }% + {% + \ifdefequal\datagidxcurrentgroup\datagidxprevgroup + {% + }% + {% + \datagidxgroupsep + \datagidxgroupheader + }% + }% + \hangindent0pt\relax + \parindent0pt\relax + \makebox[\datagidxnamewidth][l]% + {% + \datagidxtarget{\Label}% + {% + \DTLgidxNameFont{\DTLgidxNameCase{\Name}}% + \DTLgidxPostName + }% + }% + \datagidx@item@body + \par + }% + \renewcommand*{\datagidxchildstart}% + {% + \bgroup + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt plus 0.3pt}% + \setlength{\datagidxnamewidth}{0pt}% + \DTLforeach*{\DTLgidxCurrentdb}% + {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,% + \Parent=Parent}% + {% + \DTLifnull{\Parent}% + {% + \datagidx@doifdisplayed + {% + \settowidth{\dimen@}% + {% + \DTLgidxChildStyle + {% + \DTLgidxNameFont{\DTLgidxNameCase{\Name}}% + }% + }% + \ifdim\dimen@>\datagidxnamewidth\relax + \datagidxnamewidth=\dimen@\relax + \fi + }% + }% + {}% + }% + \settowidth{\dimen@}{\DTLgidxChildStyle\DTLgidxPostChildName}% + \addtolength{\datagidxnamewidth}{\dimen@}% + \setlength{\datagidxdescwidth}{\linewidth}% + \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}% + }% + \renewcommand{\datagidxchildend}{\egroup}% + \renewcommand*{\datagidxchilditem}{% + \hangindent0pt\relax + \parindent0pt\relax + \refstepcounter{DTLgidxChildCount}% + \makebox[\datagidxnamewidth][l]% + {% + \datagidxtarget{\Label}% + {% + \DTLgidxChildStyle + {% + \DTLgidxNameFont{\DTLgidxNameCase{\Name}}% + \DTLgidxPostChildName + }% + }% + }% + \begin{minipage}[t]{\datagidxdescwidth}% + \setlength{\parskip}{0pt plus 0.3pt}% + \DTLgidxSymbolDescription + \DTLgidxDoSeeOrLocation + \DTLgidxChildrenSeeAlso + \end{minipage}% + \par + }% +} +\newcommand*{\datagidx@style@gloss}{% + \renewcommand*{\datagidxstart}% + {% + \bgroup + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt plus 0.3pt}% + \setlength{\datagidxnamewidth}{0pt}% + \DTLforeach*{\DTLgidxCurrentdb}% + {\Name=Name,\Location=Location,\See=See,\SeeAlso=SeeAlso,% + \Parent=Parent}% + {% + \DTLifnull{\Parent}% + {% + \datagidx@doifdisplayed + {% + \settowidth{\dimen@}{\DTLgidxNameFont{\DTLgidxNameCase{\Name}}}% + \ifdim\dimen@>\datagidxnamewidth\relax + \datagidxnamewidth=\dimen@\relax + \fi + }% + }% + {}% + }% + \settowidth{\dimen@}{\DTLgidxPostName}% + \addtolength{\datagidxnamewidth}{\dimen@}% + \setlength{\datagidxdescwidth}{\linewidth}% + \addtolength{\datagidxdescwidth}{-\datagidxnamewidth}% + }% + \renewcommand*{\datagidxend}{\egroup}% + \renewcommand*{\datagidxgroupsep}{\ifdatagidxshowgroups\indexspace\fi}% + \renewcommand{\datagidxgroupheader}{% + \ifdatagidxshowgroups + \item + \makebox[\linewidth]% + {% + \textbf{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}% + }% + \DTLpar\nobreak\@afterheading + \fi + }% + \renewcommand*{\datagidxitem}{% + \ifdefempty\datagidxprevgroup + {% + \datagidxgroupheader + }% + {% + \ifdefequal\datagidxcurrentgroup\datagidxprevgroup + {% + }% + {% + \datagidxgroupsep + \datagidxgroupheader + }% + }% + \hangindent0pt\relax + \parindent0pt\relax + \makebox[\datagidxnamewidth][l]% + {% + \datagidxtarget{\Label}% + {% + \DTLgidxNameFont{\DTLgidxNameCase{\Name}}% + \DTLgidxPostName + }% + }% + \begin{minipage}[t]{\datagidxdescwidth}% + \setlength{\parskip}{0pt plus 0.3pt}% + \@tempswatrue + \ifdefempty{\Description}% + {% + \ifdefempty{\Symbol}% + {% + \ifdefempty{\Location}{\@tempswafalse}{}% + }% + {}% + }% + {}% + \if@tempswa + \DTLgidxSymbolDescription + \DTLgidxDoSeeOrLocation + \DTLgidxSeeAlso + \else + \mbox{}% + \fi + \DTLgidxChildrenSeeAlso + \end{minipage}% + \par + }% + \renewcommand*{\datagidxchildstart}% + {% + \bgroup + \def\datagidx@childsep{}% + \setcounter{DTLgidxChildCount}{0}% + }% + \renewcommand{\datagidxchildend}{\DTLgidxPostChild\egroup}% + \renewcommand*{\datagidxchilditem}{% + \datagidx@childsep + \refstepcounter{DTLgidxChildCount}% + \datagidxtarget{\Label}% + {% + \DTLgidxChildStyle + {% + \DTLgidxNameFont{\DTLgidxNameCase{\Name}}% + \DTLgidxPostChildName + }% + }% + \DTLgidxSymbolDescription + \DTLgidxDoSeeOrLocation + \DTLgidxChildrenSeeAlso + \let\datagidx@childsep\DTLgidxChildSep + }% +} +\newcommand*{\DTLgidxChildSep}{ } +\newcommand*{\DTLgidxPostChild}{} +\ifdef\chapter +{% + \newcommand\DTLgidxDictHead{% + \chapter{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}% + }% +}% +{% + \newcommand\DTLgidxDictHead{% + \section{\DTLgidxGroupHeaderTitle{\datagidxcurrentgroup}}% + }% +} +\newcommand*{\DTLgidxCategoryNameFont}[1]{#1} +\newcommand*{\DTLgidxCategorySep}{\space} +\newcommand*{\DTLgidxSubCategorySep}{\space} +\newcommand*{\datagidxdictindent}{1em} +\newcommand{\DTLgidxDictPostItem}{\par} +\newcommand*{\datagidx@style@dict}{% + \renewcommand*{\datagidxstart}% + {% + \bgroup + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt plus 0.3pt}% + \dimen@=\linewidth + \advance\dimen@ by -\datagidxdictindent\relax + \dtl@tmplength=\datagidxdictindent\relax + \xdef\datagidxdictparshape{% + \noexpand\parshape=2 0pt \the\linewidth\space + \the\dtl@tmplength\space \the\dimen@\relax + }% + \datagidx@level=1\relax + \raggedright + }% + \renewcommand*{\datagidxend}{\egroup}% + \renewcommand*{\datagidxgroupsep}{}% + \renewcommand{\datagidxgroupheader}{% + \ifdatagidxshowgroups + \datagidxend + \datagidx@postend + \DTLgidxDictHead + \datagidx@prestart + \datagidxstart + \fi + }% + \renewcommand*{\datagidxitem}{% + \ifdefempty\datagidxprevgroup + {% + \datagidxgroupheader + }% + {% + \ifdefequal\datagidxcurrentgroup\datagidxprevgroup + {% + }% + {% + \datagidxgroupsep + \datagidxgroupheader + }% + }% + \datagidxdictparshape + \datagidxtarget{\Label}% + {% + \DTLgidxNameFont{\DTLgidxNameCase{\Name}}% + }% + \DTLgidxPostName + \let\datagidx@catsep\@empty + \let\datagidx@subcatsep\@empty + \DTLgidxSymbolDescription + \DTLgidxChildrenSeeAlso + \DTLgidxDictPostItem + }% + \renewcommand*{\datagidxchildstart}% + {% + \bgroup + }% + \renewcommand*{\datagidxchildend}{\egroup}% + \renewcommand*{\datagidxchilditem}{% + \ifnum\datagidx@level=2\relax + \datagidx@catsep + \let\datagidx@catsep\DTLgidxCategorySep + \let\datagidx@subcapsep\@empty + \datagidxtarget{\Label}% + {% + \DTLgidxChildStyle + {% + \DTLgidxCategoryNameFont{\DTLgidxNameCase{\Name}}% + \DTLgidxPostChildName + }% + }% + \setcounter{DTLgidxChildCount}{0}% + \else + \datagidx@subcatsep + \let\datagidx@subcatsep\DTLgidxSubCategorySep + \refstepcounter{DTLgidxChildCount}% + \DTLgidxChildCountLabel + \DTLgidxPostChildName + \fi + \DTLgidxSymbolDescription + \DTLgidxDoSeeOrLocation + \DTLgidxChildrenSeeAlso + }% + \renewcommand*{\datagidxseealsostart}% + {% + \bgroup + \setlength{\parindent}{0pt}% + \setlength{\parskip}{0pt plus 0.3pt}% + \setlength{\dimen@}{\datagidxindent}% + \advance\datagidx@level by 1\relax + \multiply\dimen@ by \datagidx@level\relax + \@idxitem\hspace*{\dimen@}% + }% + \renewcommand{\datagidxseealsoend}{\egroup}% +} +\newcommand*{\dtldofirstlocation}{% + \@for\dtl@thisloc:=\Location\do{% + \ifdefempty\dtl@thisloc + {}% + {% + \expandafter\datagidx@getlocation\dtl@thisloc + \datagidxlink{\datagidx@current@target}% + {% + \datagidx@formatlocation + \datagidx@current@format\datagidx@current@locationstring + }% + \@endfortrue + }% + }% +} +\newcommand*{\datagidx@formatlocation}[2]{% + \ifdefempty{#1}% + {#2}% + {% + \ifcsdef{#1}% + {% + \csuse{#1}{#2}% + }% + {% + \PackageWarning{datagidx}{Unknown format `#1'}% + #2% + }% + }% +} +\newcommand*{\dtldolocationlist}{% + \DTLifnull{\Location}% + {}% + {% + \def\datagidx@prev@location{-1}% + \def\datagidx@prev@locationstring{}% + \def\datagidx@prev@format{}% + \def\datagidx@prev@locationformat{}% + \def\datagidx@prev@prefix{}% + \def\datagidx@prev@target{}% + \def\datagidx@location@sep{}% + \def\datagidx@location@start{-1}% + \expandafter\forcsvlist\expandafter\datagidx@parse@location + \expandafter{\Location}% + \do@prevlocation % tidy up loose ends + }% +} +\newif\if@dtl@sequential +\newcommand*\datagidx@getlocdo[1]{% + \ifdefempty\datagidx@current@location + {}% + {% + \eappto\datagidx@current@prefix{% + \datagidx@current@location\datagidx@compositor + }% + }% + \def\datagidx@current@location{#1}% +} +\def\datagidx@getlocation[#1]#2#3{% + \def\datagidx@current@locationstring{#2}% + \bgroup + \datagidx@escapelocationformat + \xdef\datagidx@current@locationformat{#2}% + \datagidx@clearlocationformat + \xdef\datagidx@current@location{#2}% + \egroup + \let\datagidx@list\datagidx@current@location + \def\datagidx@current@prefix{}% + \def\datagidx@current@location{}% + \let\do\datagidx@getlocdo + \expandafter\datagidx@docomplist + \expandafter{\datagidx@list}% + \def\datagidx@current@format{#1}% + \def\datagidx@current@target{#3}% +} +\newcommand*{\datagidx@parse@location}[1]{% + \datagidx@getlocation#1\relax + \ifdefequal{\datagidx@prev@locationstring}{\datagidx@current@locationstring}% + {% + \ifstrequal{\datagidx@prev@format}{\datagidx@current@format} + {% + }% + {% + \ifdefempty{\datagidx@current@format} + {% + }% + {% + \ifdefempty{\datagidx@prev@format} + {% + \let\datagidx@prev@format\datagidx@current@format + }% + {% + \PackageWarning{datagidx}% + {% + Conflicting location formats `\datagidx@prev@format' and + `\datagidx@current@format' for location `\datagidx@current@location'% + }% + }% + }% + }% + }% + {% + \@datagidx@parse@location + }% +} +\newcommand*{\@datagidx@parse@location}{% + \@dtl@sequentialtrue + \ifdefequal{\datagidx@prev@format}{\datagidx@current@format} + {% + \ifdefequal{\datagidx@prev@locationformat}{\datagidx@current@locationformat} + {% + \ifdefequal{\datagidx@prev@prefix}{\datagidx@current@prefix} + {% + }% + {% + \@dtl@sequentialfalse + }% + }% + {% + \@dtl@sequentialfalse + }% + }% + {% + \@dtl@sequentialfalse + }% + \if@dtl@sequential + \ifnumequal{\datagidx@prev@location+1}{\datagidx@current@location}% + {% + \ifdefequal + \datagidx@current@locationformat + \datagidx@prev@locationformat + {% + \@dtl@sequentialtrue + }% + {% + \@dtl@sequentialfalse + }% + }% + {% + \@dtl@sequentialfalse + }% + \fi + \if@dtl@sequential + \ifnumequal{\datagidx@location@start}{-1}% + {% + \let\datagidx@location@start\datagidx@prev@location + \let\datagidx@location@startval\datagidx@prev@locationstring + \let\datagidx@location@format\datagidx@prev@format + \let\datagidx@location@target\datagidx@prev@target + }% + {% + }% + \else + \do@prevlocation + \fi + \let\datagidx@prev@location\datagidx@current@location + \let\datagidx@prev@format\datagidx@current@format + \let\datagidx@prev@prefix\datagidx@current@prefix + \let\datagidx@prev@locationformat\datagidx@current@locationformat + \let\datagidx@prev@locationstring\datagidx@current@locationstring + \let\datagidx@prev@target\datagidx@current@target +} +\newcommand*{\DTLgidxLocationSep}{, } +\newcommand*{\DTLgidxLocationF}[2]{% + #1\DTLgidxLocationSep#2% +} +\newcommand*{\DTLgidxLocationFF}[2]{% + #1--#2% +} +\newcommand*{\do@prevlocation}{% + \ifnumequal{\datagidx@location@start}{-1}% + {% + \ifdefempty{\datagidx@prev@locationstring}% + {}% + {% + \datagidx@location@sep + \datagidxlink{\datagidx@prev@target}% + {% + \datagidx@formatlocation + \datagidx@prev@format\datagidx@prev@locationstring + }% + \def\datagidx@location@sep{\DTLgidxLocationSep}% + }% + }% + {% + \datagidx@location@sep + \do@locrange + \def\datagidx@location@sep{\DTLgidxLocationSep}% + \def\datagidx@location@start{-1}% + }% +} +\newcommand*{\do@locrange}{% + \ifnumgreater{\datagidx@prev@location}{\datagidx@location@start+1}% + {% + \DTLgidxLocationFF + {% + \datagidxlink{\datagidx@location@target}% + {% + \datagidx@formatlocation + \datagidx@location@format\datagidx@location@startval + }% + }% + {% + \datagidxlink{\datagidx@prev@target}% + {% + \datagidx@formatlocation + \datagidx@prev@format\datagidx@prev@locationstring + }% + }% + }% + {% + \DTLgidxLocationF + { + \datagidxlink{\datagidx@location@target}% + {% + \datagidx@formatlocation + \datagidx@location@format\datagidx@location@startval + }% + }% + {% + \datagidxlink{\datagidx@prev@target}% + {% + \datagidx@formatlocation + \datagidx@prev@format\datagidx@prev@locationstring + }% + }% + }% +} +\newcommand*{\datagidx@defaultdatabase}{} +\newcommand*{\DTLgidxSetDefaultDB}[1]{% + \renewcommand*{\datagidx@defaultdatabase}{#1}% +} +\define@key{newgloss}{heading}{\renewcommand*{\datagidx@heading}{#1}} +\define@key{newgloss}{postheading}{% + \renewcommand*{\datagidx@postheading}{#1}% +} +\define@choicekey{newgloss}{balance}[\val\nr]{true,false}[true]{% + \ifcase\nr\relax + \renewcommand*{\datagidx@multicols}{multicols}% + \or + \renewcommand*{\datagidx@multicols}{multicols*}% + \fi +} +\define@key{newgloss}{sort}{\renewcommand*{\datagidx@sort}{#1}} +\newcommand*{\datagidx@style}{index} +\define@key{newgloss}{style}{\renewcommand*{\datagidx@style}{#1}} +\newif\ifdatagidxshowgroups +\newcommand*{\datagidx@showgroups}{false} +\define@choicekey{newgloss}{showgroups}{true,false}[true]% +{% + \renewcommand{\datagidx@showgroups}{#1}% +}% +\ifundef\newgidx +{% + \newcommand*{\newgidx}{\datagidx@newgidx} +}% +{} +\@onlypreamble\newgidx +\newcommand*{\datagidx@highopt@newgidx}[3][]{% + \edef\datagidx@indexfilename{\datagidxhighoptfilename{#2}}% + \IfFileExists{\datagidx@indexfilename}% + {% + \input{\datagidx@indexfilename}% + \bgroup + \setkeys{newgloss}{#1}% + \datagidx@newgidx@update{#2}{#3}% + \egroup + }% + {% + \datagidx@newgidx[#1]{#2}{#3}% + }% +} +\newcommand*{\datagidx@newgidx}[3][]{% +\bgroup + \setkeys{newgloss}{#1}% + \ifdefempty{\datagidx@defaultdatabase}% + {\xdef\datagidx@defaultdatabase{#2}}% + {}% + \DTLgnewdb{#2}% + \DTLaddcolumn{#2}{Label}% + \DTLaddcolumn{#2}{Location}% + \DTLaddcolumn{#2}{CurrentLocation}% + \DTLaddcolumn{#2}{FirstId}% + \DTLaddcolumn{#2}{Name}% + \DTLaddcolumn{#2}{Text}% + \DTLaddcolumn{#2}{Parent}% + \DTLaddcolumn{#2}{Child}% + \DTLaddcolumn{#2}{Description}% + \DTLaddcolumn{#2}{Used}% + \DTLaddcolumn{#2}{Symbol}% + \DTLaddcolumn{#2}{Long}% + \DTLaddcolumn{#2}{Short}% + \DTLaddcolumn{#2}{See}% + \DTLaddcolumn{#2}{SeeAlso}% + \datagidx@newgidx@update{#2}{#3}% +\egroup +} +\newcommand*{\datagidx@newgidx@update}[2]{% + \DTLnewrow{datagidx}% + \DTLnewdbentry{datagidx}{Glossary}{#1}% + \DTLnewdbentry{datagidx}{Title}{#2}% + {% + \dtlexpandnewvalue + \DTLnewdbentry{datagidx}{Heading}{\expandonce\datagidx@heading}% + \DTLnewdbentry{datagidx}{PostHeading}{\expandonce\datagidx@postheading}% + \DTLnewdbentry{datagidx}{MultiCols}{\expandonce\datagidx@multicols}% + \DTLnewdbentry{datagidx}{Sort}{\expandonce\datagidx@sort}% + \DTLnewdbentry{datagidx}{Style}{\expandonce\datagidx@style}% + \DTLnewdbentry{datagidx}{ShowGroups}{\expandonce\datagidx@showgroups}% + }% +} +\newcommand*{\newterm@label}{} +\define@key{newterm}{label}{\renewcommand*{\newterm@label}{#1}} +\newcommand*{\newterm@parent}{} +\define@key{newterm}{parent}{\renewcommand*{\newterm@parent}{#1}} +\newcommand*{\newterm@text}{} +\define@key{newterm}{text}{\renewcommand*{\newterm@text}{#1}} +\newcommand*{\newterm@description}{} +\define@key{newterm}{description}{% + \renewcommand*{\newterm@description}{#1}% +} +\define@key{newterm}{plural}{\def\newterm@plural{#1}} +\newcommand*{\newterm@sort}{} +\define@key{newterm}{sort}{\renewcommand*{\newterm@sort}{#1}} +\newcommand*{\newterm@symbol}{} +\define@key{newterm}{symbol}{\renewcommand*{\newterm@symbol}{#1}} +\newcommand*{\newterm@database}{} +\define@key{newterm}{database}{\renewcommand*{\newterm@database}{#1}} +\newcommand*{\newterm@long}{} +\define@key{newterm}{long}{% + \renewcommand*{\newterm@long}{#1}% + \def\newterm@longplural{#1s}% +} +\newcommand*{\newterm@short}{} +\define@key{newterm}{short}{% + \renewcommand*{\newterm@short}{#1}% + \def\newterm@shortplural{#1s}% +} +\define@key{newterm}{longplural}{% + \def\newterm@longplural{#1}% +} +\define@key{newterm}{shortplural}{% + \def\newterm@shortplural{#1}% +} +\newcommand*{\newterm@see}{} +\define@key{newterm}{see}{% + \renewcommand*{\newterm@see}{#1}% +} +\newcommand*{\newterm@seealso}{} +\define@key{newterm}{seealso}{% + \renewcommand*{\newterm@seealso}{#1}% +} +\newcommand*{\newterm@defaultshook}{} +\newcommand*{\newterm@extrafields}{} +\newcommand*{\DTLgidxAssignList}{% + \Name=Name,\Description=Description,\Used=Used,\Symbol=Symbol,% + \Long=Long,\Short=Short,\LongPlural=LongPlural,\ShortPlural=ShortPlural,% + \Location=Location,\See=See,\SeeAlso=SeeAlso,% + \Text=Text,\Plural=Plural,\CurrentLocation=CurrentLocation,% + \Label=Label,\Parent=Parent,\Children=Child,\FirstId=FirstId,\Sort=Sort% +} +\newcommand*{\datagidxtermkeys}{% + name,description,symbol,long,short,see,seealso,text,plural,% + label,parent,sort% +} +\newcommand*\@datagidx@fieldkey@Name{name}% +\newcommand*\@datagidx@fieldkey@Description{description}% +\newcommand*\@datagidx@fieldkey@Symbol{symbol}% +\newcommand*\@datagidx@fieldkey@Long{long}% +\newcommand*\@datagidx@fieldkey@Short{short}% +\newcommand*\@datagidx@fieldkey@See{see}% +\newcommand*\@datagidx@fieldkey@SeeAlso{seealso}% +\newcommand*\@datagidx@fieldkey@Text{text}% +\newcommand*\@datagidx@fieldkey@Plural{plural}% +\newcommand*\@datagidx@fieldkey@Label{label}% +\newcommand*\@datagidx@fieldkey@Parent{parent}% +\newcommand*\@datagidx@fieldkey@Sort{sort}% +\newcommand*{\newtermaddfield}[4][]{% + \ifstrempty{#1}% + {% + \dtlforcolumn{\datagidx@thisidx}{datagidx}{Glossary}% + {% + \DTLaddcolumn{\datagidx@thisidx}{#2}% + }% + }% + {% + \@for\datagidx@thisidx:=#1\do + {% + \DTLaddcolumn{\datagidx@thisidx}{#2}% + }% + }% + \expandafter\gdef\csname newterm@#3\endcsname{}% + \define@key{newterm}{#3}% + {% + \expandafter\def\csname newterm@#3\endcsname{##1}% + }% + \gappto\newterm@defaultshook + {% + \expandafter\protected@edef\csname newterm@#3\endcsname{#4}% + }% + \gappto\newterm@extrafields + {% + \protected@edef\datagidx@value{\csname newterm@#3\endcsname}% + \DTLnewdbentry{\newterm@database}{#2}{\expandonce\datagidx@value}% + }% + \xappto\DTLgidxAssignList + {% + ,\expandafter\noexpand\csname#2\endcsname=#2% + }% + \xappto\datagidxtermkeys{,#3}% + \expandafter\xdef\csname @datagidx@fieldkey@#2\endcsname{#3}% + \xappto\datagidxgetchildfields + {% + \noexpand\dtlgetentryfromcurrentrow + {\expandafter\noexpand\csname#2\endcsname}% + {\noexpand\dtlcolumnindex{\noexpand\DTLgidxCurrentdb}{#2}}% + }% +} +\newcommand*{\newtermlabelhook}{} +\newcommand*{\DTLgidxNoFormat}[1]{#1} +\newcommand*{\DTLgidxGobble}[1]{} +\newcommand*{\DTLgidxStripBackslash}[1]{% + \expandafter\@gobble\string#1% +} +\newcommand*{\DTLgidxName}[2]{% + #1\space #2% +} +\newcommand*{\DTLgidxNameNum}[1]{\@Roman{#1}} +\newcommand*{\datagidx@namenum}[1]{\two@digits{#1}} +\newcommand*{\DTLgidxPlace}[2]{% + #2% +} +\newcommand*{\DTLgidxSubject}[2]{% + #2% +} +\newcommand*{\DTLgidxOffice}[2]{% + #2 (#1)% +} +\newcommand*{\DTLgidxIgnore}[1]{#1} +\newcommand*{\DTLgidxMac}[1]{#1} +\newcommand*{\datagidx@mac}[1]{Mac} +\newcommand*{\DTLgidxSaint}[1]{#1} +\newcommand*{\datagidx@saint}[1]{Saint} +\newcommand*{\DTLgidxRank}[2]{#1~#2} +\newcommand*{\datagidx@rank}[2]{#2.} +\newcommand*{\DTLgidxParticle}[2]{#1~#2} +\newcommand*{\datagidx@particle}[2]{#2.} +\newcommand*{\datagidx@bothoftwo}[2]{#1#2} +\newcommand*{\datagidx@person}[2]{#2\noexpand\datatoolpersoncomma #1} +\newcommand*{\datagidx@place}[2]{#2\noexpand\datatoolplacecomma #1} +\newcommand*{\datagidx@subject}[2]{#2\noexpand\datatoolsubjectcomma #1} +\newcommand*{\datagidx@paren}[1]{\noexpand\datatoolparenstart #1} +\newcommand*{\datagidx@invert}[2]{#2, #1} +\newcommand*{\DTLgidxParen}[1]{\space(#1)} +\newcommand*{\datagidxwordifygreek}{% + \def\alpha{alpha}% + \def\beta{beta}% + \def\gamma{gamma}% + \def\delta{delta}% + \def\epsilon{epsilon}% + \def\varepsilon{epsilon}% + \def\zeta{zeta}% + \def\eta{eta}% + \def\theta{theta}% + \def\vartheta{theta}% + \def\iota{iota}% + \def\kappa{kappa}% + \def\lambda{lambda}% + \def\mu{mu}% + \def\nu{nu}% + \def\xi{xi}% + \def\pi{pi}% + \def\varpi{pi}% + \def\rho{rho}% + \def\varrho{rho}% + \def\sigma{sigma}% + \def\varsigma{sigma}% + \def\tau{tau}% + \def\upsilon{upsilon}% + \def\phi{phi}% + \def\varphi{phi}% + \def\chi{chi}% + \def\psi{psi}% + \def\omega{omega}% + \def\Gamma{Gamma}% + \def\Delta{Delta}% + \def\Theta{Theta}% + \def\Lambda{Lambda}% + \def\Xi{Xi}% + \def\Pi{Pi}% + \def\Sigma{Sigma}% + \def\Upsilon{Upsilon}% + \def\Phi{Phi}% + \def\Psi{Psi}% + \def\Omega{Omega}% +} +\newcommand*{\datagidxstripaccents}{% + \expandafter\def\csname \encodingdefault-cmd\endcsname##1##2##3{##3}% + \expandafter\def\csname OT1-cmd\endcsname##1##2##3{##3}% + \expandafter\def\csname T1-cmd\endcsname##1##2##3{##3}% + \expandafter\def\csname PD1-cmd\endcsname##1##2##3{##3}% + \def\IeC##1{\@gobbletwo##1}% +} +\ifdef\newterm +{% +}% +{% + \newcommand{\newterm}{\datagidx@newterm} +} +\@onlypreamble\newterm +\newcommand{\datagidx@setfieldvalues}[2]{% + \def\newterm@name{#2}% + \renewcommand*\newterm@label{#2}% + \renewcommand*\newterm@text{#2}% + \undef\newterm@plural + \renewcommand*{\newterm@description}{}% + \renewcommand*{\newterm@sort}{#2}% + \renewcommand*{\newterm@symbol}{}% + \let\newterm@database\datagidx@defaultdatabase + \renewcommand*{\newterm@short}{#2}% + \undef\newterm@shortplural + \renewcommand*{\newterm@long}{#2}% + \undef\newterm@longplural + \renewcommand*{\newterm@see}{}% + \renewcommand*{\newterm@seealso}{}% + \renewcommand*{\newterm@parent}{}% + \let\datagidx@orgfield\field + \def\field##1{\expandafter\noexpand\csname newterm@##1\endcsname}% + \newterm@defaultshook + \let\field\datagidx@orgfield + \setkeys{newterm}{#1}% + \bgroup + \let\glsadd\@gobble + \let\MakeUppercase\DTLgidxNoFormat + \let\MakeTextUppercase\DTLgidxNoFormat + \let\MakeLowercase\DTLgidxNoFormat + \let\MakeTextLowercase\DTLgidxNoFormat + \let\acronymfont\DTLgidxNoFormat + \let\textrm\DTLgidxNoFormat + \let\texttt\DTLgidxNoFormat + \let\textsf\DTLgidxNoFormat + \let\textsc\DTLgidxNoFormat + \let\textbf\DTLgidxNoFormat + \let\textmd\DTLgidxNoFormat + \let\textit\DTLgidxNoFormat + \let\textsl\DTLgidxNoFormat + \let\emph\DTLgidxNoFormat + \let\textsuperscript\DTLgidxNoFormat + \let~\space + \ifdef\andname + {% + \let\&\andname + }% + {% + \def\&{and}% + }% + \let\ensuremath\DTLgidxNoFormat + \let\DTLgidxParen\@gobble + \let\DTLgidxName\@secondoftwo + \let\DTLgidxPlace\datagidx@invert + \let\DTLgidxSubject\datagidx@invert + \let\DTLgidxOffice\@secondoftwo + \let\DTLgidxParticle\datagidx@bothoftwo + \datagidxwordifygreek + \datagidxstripaccents + \newtermlabelhook + \protected@xdef\newterm@label{\newterm@label}% + \let\DTLgidxName\datagidx@person + \let\DTLgidxPlace\datagidx@place + \let\DTLgidxSubject\datagidx@subject + \let\DTLgidxOffice\datagidx@person + \let\DTLgidxParen\datagidx@paren + \let\DTLgidxMac\datagidx@mac + \let\DTLgidxSaint\datagidx@saint + \let\DTLgidxIgnore\@gobble + \let\DTLgidxRank\datagidx@rank + \let\DTLgidxParticle\datagidx@particle + \let\DTLgidxNameNum\datagidx@namenum + \protected@xdef\newterm@sort{\newterm@sort}% + \egroup +} +\newcommand*{\datagidx@add@term}[1]{% + \global\cslet{datagidxentry@\newterm@label}{\newterm@database}% + \DTLnewrow{\newterm@database}% + \DTLnewdbentry{\newterm@database}{Name}{#1}% + \DTLnewdbentry{\newterm@database}{Used}{0}% + {% + \dtlexpandnewvalue + \DTLnewdbentry{\newterm@database}{Text}{\expandonce\newterm@text}% + \DTLnewdbentry{\newterm@database}{Description}{\expandonce\newterm@description}% + \DTLnewdbentry{\newterm@database}{Label}{\expandonce\newterm@label}% + \DTLnewdbentry{\newterm@database}{Sort}{\expandonce\newterm@sort}% + \DTLnewdbentry{\newterm@database}{Symbol}{\expandonce\newterm@symbol}% + \DTLnewdbentry{\newterm@database}{Short}{\expandonce\newterm@short}% + \DTLnewdbentry{\newterm@database}{Long}{\expandonce\newterm@long}% + \ifundef\newterm@plural + {% + \DTLnewdbentry{\newterm@database}{Plural}{\expandonce\newterm@text s}% + }% + {% + \DTLnewdbentry{\newterm@database}{Plural}{\expandonce\newterm@plural}% + }% + \ifundef\newterm@shortplural + {% + \DTLnewdbentry{\newterm@database}{ShortPlural}{\expandonce\newterm@short s}% + }% + {% + \DTLnewdbentry{\newterm@database}{ShortPlural}{\expandonce\newterm@shortplural}% + }% + \ifundef\newterm@longplural + {% + \DTLnewdbentry{\newterm@database}{LongPlural}{\expandonce\newterm@long s}% + }% + {% + \DTLnewdbentry{\newterm@database}{LongPlural}{\expandonce\newterm@longplural}% + }% + \ifdefempty{\newterm@see}% + {}% + {\DTLnewdbentry{\newterm@database}{See}{\newterm@see}}% + \ifdefempty{\newterm@seealso}% + {}% + {\DTLnewdbentry{\newterm@database}{SeeAlso}{\newterm@seealso}}% + \newterm@extrafields + \ifdefempty{\newterm@parent}% + {}% + {% + \iftermexists{\newterm@parent}% + {% + \edef\newterm@parentdatabase{\csuse{datagidxentry@\newterm@parent}}% + \ifthenelse{\equal{\newterm@parentdatabase}{\newterm@database}} + {% + \DTLnewdbentry{\newterm@database}{Parent}{\newterm@parent}% + \datagidx@addchild{\newterm@database}{\newterm@parent}{\newterm@label}% + }% + {% + \PackageError{datagidx}% + {% + Parent entry `\newterm@parent' must belong to the + same database as child entry `\newterm@label'% + }% + {% + Parent entry is in database + `\newterm@parentdatabase' and child entry is in + database `\newterm@database'% + }% + }% + }% + {% + \PackageError{datagidx}% + {% + Can't assign parent to `\newterm@label': + `\newterm@parent' doesn't exist% + }% + {}% + }% + }% + }% + \global\let\datagidxlastlabel\newterm@label +}% +\newcommand{\datagidx@newterm}[2][]{% + \datagidx@setfieldvalues{#1}{#2}% + \DTLifdbexists{\newterm@database}% + {% + \iftermexists{\newterm@label}% + {% + \PackageError{datagidx}{Term `\newterm@label' already + exists in database `\newterm@database'}{}% + }% + {% + \datagidx@add@term{#2}% + }% + }% + {% + \PackageError{datagidx}% + {Glossary/index data base `\newterm@database' doesn't exist}% + {% + You must define the glossary/index data base before you can + add any terms to it.% + }% + }% +} +\newcommand{\datagidx@highopt@newterm}[2][]{% + \datagidx@setfieldvalues{#1}{#2}% + \DTLifdbexists{\newterm@database}% + {% + \edef\dtl@dogetrow{% + \noexpand\dtlgetrowindex + {\noexpand\dtl@rowidx}% + {\newterm@database}% + {% + \dtlcolumnindex{\newterm@database}{Label}% + }% + {\newterm@label}}% + \dtl@dogetrow + \ifx\dtl@rowidx\dtlnovalue + \datagidx@add@term{#2}% + \csdef{datagidx@do@highopt@sort@\newterm@database}{\datagidx@sort}% + \else + \global\cslet{datagidxentry@\newterm@label}{\newterm@database}% + \global\let\datagidxlastlabel\newterm@label + \fi + }% + {% + \PackageError{datagidx}% + {Glossary/index data base `\newterm@database' doesn't exist}% + {% + You must define the glossary/index data base before you can + add any terms to it.% + }% + }% +} +\newcommand*{\datagidx@addchild}[3]{% + \edef\dtl@dogetrow{% + \noexpand\dtlgetrowforvalue + {#1}% + {% + \dtlcolumnindex{\newterm@database}{Label}% + }% + {#2}}% + \dtl@dogetrow + \dtlgetentryfromcurrentrow + {\datagidx@child}% + {\dtlcolumnindex{#1}{Child}}% + \ifx\datagidx@child\dtlnovalue + \edef\datagidx@child{#3}% + \else + \edef\datagidx@child{\datagidx@child,#3}% + \fi + \edef\do@update{\noexpand\dtlupdateentryincurrentrow + {Child}{\datagidx@child}}% + \do@update + \dtlrecombine +} +\newcommand{\newacro}[3][]{% + \newterm + [% + description={\capitalisewords{#3}},% + short={\acronymfont{#2}},% + long={#3},% + text={\DTLgidxAcrStyle{#3}{\acronymfont{#2}}},% + plural={\DTLgidxAcrStyle{#3s}{\acronymfont{#2s}}},% + sort={#2},% + #1% + ]% + {\MakeTextUppercase{#2}}% +} +\newcommand*{\acronymfont}[1]{#1} +\newcommand*{\DTLgidxAcrStyle}[2]{#1 (#2)} +\newcommand{\iftermexists}[3]{% + \ifcsdef{datagidxentry@#1}{#2}{#3}% +} +\newcommand*{\ifentryused}[3]{% + \letcs{\newterm@database}{datagidxentry@#1}% + \edef\dtl@dogetrow{% + \noexpand\dtlgetrowforvalue + {\newterm@database}% + {% + \dtlcolumnindex{\newterm@database}{Label}% + }% + {#1}}% + \dtl@dogetrow + \dtlgetentryfromcurrentrow + {\datagidx@value}% + {\dtlcolumnindex{\newterm@database}{Used}}% + \ifnum\datagidx@value=1\relax + #2% + \else + #3% + \fi +} +\newcommand*{\glsreset}[1]{% + \letcs{\newterm@database}{datagidxentry@#1}% + \edef\do@getrow{% + \noexpand\dtlgetrowforvalue + {\newterm@database}% + {\dtlcolumnindex{\newterm@database}{Label}}% + {#1}% + }% + \do@getrow + \dtlreplaceentryincurrentrow + {0}{\dtlcolumnindex{\newterm@database}{Used}}% + \dtlrecombine +} +\newcommand*{\glsunset}[1]{% + \letcs{\newterm@database}{datagidxentry@#1}% + \edef\do@getrow{% + \noexpand\dtlgetrowforvalue + {\newterm@database}% + {\dtlcolumnindex{\newterm@database}{Label}}% + {#1}% + }% + \do@getrow + \dtlreplaceentryincurrentrow + {1}{\dtlcolumnindex{\newterm@database}{Used}}% + \dtlrecombine +} +\newcommand*{\glsresetall}[1]{% + \def\datagidx@list{}% + \dtlforcolumn{\datagidx@label}{#1}{Label}% + {% + \ifdefempty\datagidx@list + {% + \let\datagidx@list\datagidx@label + }% + {% + \eappto\datagidx@list{,\datagidx@label}% + }% + }% + \@for\datagidx@thislabel:=\datagidx@list\do + {% + \glsreset{\datagidx@thislabel}% + }% +} +\newcommand*{\glsunsetall}[1]{% + \def\datagidx@list{}% + \dtlforcolumn{\datagidx@label}{#1}{Label}% + {% + \ifdefempty\datagidx@list + {% + \let\datagidx@list\datagidx@label + }% + {% + \eappto\datagidx@list{,\datagidx@label}% + }% + }% + \@for\datagidx@thislabel:=\datagidx@list\do + {% + \glsunset{\datagidx@thislabel}% + }% +} +\newcount\datagidx@anchorcount +\newcommand*{\datagidx@formatanchor}[1]{% + \ifnum#1<10000 + 0% + \ifnum#1<1000 + 0% + \ifnum#1<100 + 0% + \ifnum#1<10 + 0% + \fi + \fi + \fi + \fi + \number#1% +} +\newcommand*{\@datagidx@escloc}[2]{% + \expandafter\string\csname#1\endcsname{\noexpand\number#2}% +} +\newcommand*{\datagidx@escapelocation}{% + \def\@arabic{\@datagidx@escloc{@arabic}}% + \def\@roman{\@datagidx@escloc{@roman}}% + \def\@Roman{\@datagidx@escloc{@Roman}}% + \def\@alph{\@datagidx@escloc{@alph}}% + \def\@Alph{\@datagidx@escloc{@Alph}}% +} +\newcommand*{\datagidx@escapelocationformat}{% + \def\@arabic##1{arabic}% + \def\@roman##1{roman}% + \def\@Roman##1{Roman}% + \def\@alph##1{alph}% + \def\@Alph##1{Alph}% +} +\newcommand*{\datagidx@clearlocationformat}{% + \let\@arabic\@firstofone + \let\@roman\@firstofone + \let\@Roman\@firstofone + \let\@alph\@firstofone + \let\@Alph\@firstofone +} +\newcommand*{\DTLgidxAddLocationType}[1]{% + \gappto\datagidx@escapelocation{% + \expandafter\def\csname#1\endcsname{\@datagidx@escloc{#1}}% + }% + \gappto\datagidx@escapelocationformat{% + \expandafter\def\csname#1\endcsname##1{#1}% + }% + \gappto\datagidx@clearlocationformat{% + \expandafter\let\csname#1\endcsname\@firstofone + }% +} +\@onlypreamble\DTLgidxAddLocationType +\newcommand*{\datagidx@target}[4]{% + \global\advance\datagidx@anchorcount by 1\relax + \edef\@datagidx@target{datagidx.\datagidx@formatanchor\datagidx@anchorcount}% + \ifstrempty{#3} + {% + \datagidx@write@usedentry{#1}{}% + }% + {% + \bgroup + \datagidx@escapelocation + \protected@edef\@datagidx@dowriteaux{% + \noexpand\datagidx@write@usedentry{#1}% + {[#2]{#3}{\@datagidx@target}}% + }% + \@datagidx@dowriteaux + \egroup + }% + \ifdef\hypertarget + {% + \datagidxshowifdraft + {% + [\@datagidx@target]% + \discretionary{}{}{}% + }% + \bgroup + \let\glsadd\@gobble + \settoheight\dimen@{#4}% + \raisebox{\dimen@}% + {% + \datagidxtarget{\@datagidx@target}{}% + }% + \egroup + }% + {% + }% + \datagidxshowifdraft{[#1]\discretionary{}{}{}}% + #4% +} +\DeclareRobustCommand*{\glsdispentry}[2]{% + \DTLgidxFetchEntry{\datagidx@dispentryval}{#1}{#2}% + \datagidx@dispentryval +} +\DeclareRobustCommand*{\Glsdispentry}[2]{% + \DTLgidxFetchEntry{\datagidx@dispentryval}{#1}{#2}% + \xmakefirstuc\datagidx@dispentryval +} +\newcommand*{\DTLgidxFetchEntry}[3]{% + \ifcsdef{datagidxentry@#2}% + {% + \letcs{\newterm@database}{datagidxentry@#2}% + \edef\do@getrow{% + \noexpand\dtlgetrowforvalue + {\newterm@database}% + {\dtlcolumnindex{\newterm@database}{Label}}% + {#2}% + }% + \do@getrow + \dtlgetentryfromcurrentrow + {#1}% + {\dtlcolumnindex{\newterm@database}{#3}}% + }% + {% + \PackageError{datagidx}{No term `#2' defined}{}% + }% +} +\newcommand*{\datagidx@parse@formatlabel}[1]{% + \datagidx@parse@format@label@#1\@endparse@formatlabel@ +} +\newcommand*\datagidx@parse@format@label@{% + \@ifnextchar[{\datagidx@parse@formatlabel@}{\datagidx@parse@formatlabel@[]}% +} +\def\datagidx@parse@formatlabel@[#1]#2\@endparse@formatlabel@{% + \def\datagidx@format{#1}% + \def\datagidx@label{#2}% +} +\newcommand*{\datagidx@use@entry}[2]{% + \ifcsundef{datagidxentry@\datagidx@label} + {% + \PackageError{datagidx}{Entry `\datagidx@label' doesn't exist}{}% + }% + {% + \letcs{\newterm@database}{datagidxentry@\datagidx@label}% + \edef\do@getrow{% + \noexpand\dtlgetrowforvalue + {\newterm@database}% + {\dtlcolumnindex{\newterm@database}{Label}}% + {\datagidx@label}% + }% + \do@getrow + \dtlgetentryfromcurrentrow + {\datagidx@id}% + {\dtlcolumnindex{\newterm@database}{FirstId}}% + \DTLifnull\datagidx@id + {% + \count@=\datagidx@anchorcount\relax + \advance\count@ by 1\relax + \dtlappendentrytocurrentrow{FirstId}{\datagidx@formatanchor\count@}% + }% + {}% + \dtlgetentryfromcurrentrow + {\datagidx@value}% + {\dtlcolumnindex{\newterm@database}{#1}}% + \dtlreplaceentryincurrentrow + {1}{\dtlcolumnindex{\newterm@database}{Used}}% + \dtlgetentryfromcurrentrow + {\datagidx@parent}% + {\dtlcolumnindex{\newterm@database}{Parent}}% + \dtlrecombine + \datagidx@markparent{\newterm@database}{\datagidx@parent}% + \datagidx@target{\datagidx@label}{\datagidx@format}% + {\csuse{the\DTLgidxCounter}}{#2}% + }% +} +\newcommand*{\DTLgidxCounter}{page} +\newcommand*{\datagidx@markparent}[2]{% + \ifx#2\dtlnovalue + \else + \datagidx@target{#2}{}{}{}% + \edef\do@getrow{% + \noexpand\dtlgetrowforvalue + {#1}% + {\dtlcolumnindex{#1}{Label}}% + {#2}}% + \do@getrow + \dtlgetentryfromcurrentrow + {\datagidx@id}% + {\dtlcolumnindex{\newterm@database}{FirstId}}% + \DTLifnull\datagidx@id + {% + \dtlappendentrytocurrentrow{FirstId}{\datagidx@formatanchor\datagidx@anchorcount}% + }% + {}% + \dtlgetentryfromcurrentrow + {\datagidx@parent}% + {\dtlcolumnindex{#1}{Parent}}% + \dtlrecombine + \datagidx@markparent{#1}{\datagidx@parent}% + \fi +} +\newcommand*{\datagidx@write@usedentry}[2]{% + \datagidx@do@highopt@update{#1}% + \protected@write{\@auxout}{}% + {% + \string\datagidx@usedentry{#1}{#2}% + }% + \protected@edef\datagidx@do@usedentry{% + \noexpand\datagidx@usedentry[CurrentLocation]{#1}{#2}% + }% + \datagidx@do@usedentry +} +\newcommand*{\datagidx@usedentry}[3][Location]{% + \ifcsundef{datagidxentry@#2}% + {% + \PackageWarning{datagidx}{No term `#2' defined. Ignoring}% + }% + {% + \letcs{\newterm@database}{datagidxentry@#2}% + \edef\do@getrow{% + \noexpand\dtlgetrowforvalue + {\newterm@database}% + {\dtlcolumnindex{\newterm@database}{Label}}% + {#2}% + }% + \do@getrow + \dtlgetentryfromcurrentrow + {\datagidx@loc}% + {\dtlcolumnindex{\newterm@database}{#1}}% + \ifx\datagidx@loc\dtlnovalue + \def\datagidx@loc{#3}% + \dtlappendentrytocurrentrow{#1}{\expandonce\datagidx@loc}% + \else + \ifdefempty{\datagidx@loc}% + {% + \def\datagidx@loc{#3}% + }% + {% + \ifstrempty{#3}% + {}% + {% + \appto\datagidx@loc{,#3}% + }% + }% + \expandafter\dtlreplaceentryincurrentrow\expandafter + {\datagidx@loc}% + {\dtlcolumnindex{\newterm@database}{#1}}% + \fi + \dtlrecombine + }% +} +\newcommand*{\datagidx@save@loc}[2]{% + \bgroup + \datagidx@escapelocation + \xdef\datagidx@tmp{#2}% + \egroup + \expandafter\xdef\csname datagidx@prev@loc@#1\endcsname{\datagidx@tmp}% +} +\newcommand*{\glsadd}[1]{% + \NoCaseChange{\@glsadd{#1}}% +} +\DeclareRobustCommand*{\@glsadd}[1]{% + \ifcsundef{datagidxentry@\datagidx@label}% + {% + \PackageError{datagidx}{Term `\datagidx@label' doesn't exist}{}% + }% + {% + \datagidx@parse@formatlabel{#1}% + \datagidx@target{\datagidx@label}{\datagidx@format}% + {\csuse{the\DTLgidxCounter}}{}% + \letcs{\newterm@database}{datagidxentry@\datagidx@label}% + \edef\do@getrow{% + \noexpand\dtlgetrowforvalue + {\newterm@database}% + {\dtlcolumnindex{\newterm@database}{Label}}% + {\datagidx@label}% + }% + \do@getrow + \dtlreplaceentryincurrentrow + {1}{\dtlcolumnindex{\newterm@database}{Used}}% + \dtlgetentryfromcurrentrow + {\datagidx@id}% + {\dtlcolumnindex{\newterm@database}{FirstId}}% + \DTLifnull\datagidx@id + {% + \dtlappendentrytocurrentrow{FirstId}{\datagidx@formatanchor\datagidx@anchorcount}% + }% + {}% + \dtlrecombine + }% +} +\newcount\datagidx@count +\newcommand*{\glsaddall}[1]{% + \DTLifdbexists{#1}% + {% + \edef\datagidx@rowcount{\number\DTLrowcount{#1}}% + \datagidx@count=0\relax + \loop + \advance\datagidx@count by 1\relax + \dtlgetrow{#1}{\datagidx@count}% + \dtlgetentryfromcurrentrow + {\datagidx@label}% + {\dtlcolumnindex{\newterm@database}{Label}}% + \bgroup + \undef\hypertarget + \datagidx@target{\datagidx@label}{}{}{}% + \egroup + \dtlreplaceentryincurrentrow + {1}{\dtlcolumnindex{\newterm@database}{Used}}% + \dtlgetentryfromcurrentrow + {\datagidx@id}% + {\dtlcolumnindex{\newterm@database}{FirstId}}% + \DTLifnull\datagidx@id + {% + \dtlappendentrytocurrentrow{FirstId}{\datagidx@formatanchor\datagidx@anchorcount}% + }% + {}% + \dtlrecombine + \ifnum\datagidx@count<\datagidx@rowcount + \repeat + }% + {% + \PackageError{datagidx}{Database `#1' doesn't exist}{}% + }% +} +\DeclareRobustCommand*{\useentry}[2]{% + \datagidx@parse@formatlabel{#1}% + \DTLgidxFetchEntry{\datagidx@value}{\datagidx@label}{#2}% + \datagidxlink{\datagidx@label}% + {% + \datagidx@use@entry{#2}{\datagidx@value}% + }% +} +\DeclareRobustCommand*{\Useentry}[2]{% + \datagidx@parse@formatlabel{#1}% + \DTLgidxFetchEntry{\datagidx@value}{\datagidx@label}{#2}% + \datagidxlink{\datagidx@label}% + {% + \datagidx@use@entry{#2}{\xmakefirstuc{\datagidx@value}}% + }% +} +\DeclareRobustCommand*{\USEentry}[2]{% + \datagidx@parse@formatlabel{#1}% + \DTLgidxFetchEntry{\datagidx@value}{\datagidx@label}{#2}% + \datagidxlink{\datagidx@label}% + {% + \datagidx@use@entry{#2}{\MakeTextUppercase{\datagidx@value}}% + }% +} +\DeclareRobustCommand*{\useentrynl}[2]{% + \datagidx@parse@formatlabel{#1}% + \DTLgidxFetchEntry{\datagidx@value}{\datagidx@label}{#2}% + \datagidx@use@entry{#2}{\datagidx@value}% +} +\DeclareRobustCommand*{\Useentrynl}[2]{% + \datagidx@parse@formatlabel{#1}% + \DTLgidxFetchEntry{\datagidx@value}{\datagidx@label}{#2}% + \datagidx@use@entry{#2}{\xmakefirstuc{\datagidx@value}}% +} +\DeclareRobustCommand*{\USEentrynl}[2]{% + \datagidx@parse@formatlabel{#1}% + \DTLgidxFetchEntry{\datagidx@value}{\datagidx@label}{#2}% + \datagidx@use@entry{#2}{\MakeTextUppercase{\datagidx@value}}% +} +\DeclareRobustCommand*{\gls}[1]{\useentry{#1}{Text}} +\DeclareRobustCommand*{\glspl}[1]{\useentry{#1}{Plural}} +\DeclareRobustCommand*{\Gls}[1]{\Useentry{#1}{Text}} +\DeclareRobustCommand*{\Glspl}[1]{\Useentry{#1}{Plural}} +\DeclareRobustCommand*{\glsnl}[1]{\useentrynl{#1}{Text}} +\DeclareRobustCommand*{\glsplnl}[1]{\useentrynl{#1}{Plural}} +\DeclareRobustCommand*{\Glsnl}[1]{\Useentrynl{#1}{Text}} +\DeclareRobustCommand*{\Glsplnl}[1]{\Useentrynl{#1}{Plural}} +\DeclareRobustCommand*{\glssym}[1]{\useentry{#1}{Symbol}} +\DeclareRobustCommand*{\Glssym}[1]{\Useentry{#1}{Symbol}} +\newcommand*{\DTLgidxFormatAcr}[3]{% + \DTLgidxAcrStyle{\glsdispentry{#1}{#2}}{\useentry{#1}{#3}}% +} +\newcommand*{\DTLgidxFormatAcrUC}[3]{% + \DTLgidxAcrStyle{\Glsdispentry{#1}{#2}}{\useentry{#1}{#3}}% +} +\DeclareRobustCommand*{\acr}[1]{% + \ifentryused{#1}% + {\useentry{#1}{Short}}% + {\DTLgidxFormatAcr{#1}{Long}{Short}}% +} +\DeclareRobustCommand*{\acrpl}[1]{% + \ifentryused{#1}% + {\useentry{#1}{ShortPlural}}% + {\DTLgidxFormatAcr{#1}{LongPlural}{ShortPlural}}% +} +\DeclareRobustCommand*{\Acr}[1]{% + \ifentryused{#1}% + {\Useentry{#1}{Short}}% + {\DTLgidxFormatAcrUC{#1}{Long}{Short}}% +} +\DeclareRobustCommand*{\Acrpl}[1]{% + \ifentryused{#1}% + {\Useentry{#1}{ShortPlural}}% + {\DTLgidxFormatAcrUC{#1}{LongPlural}{ShortPlural}}% +} +\define@key{printterms}{database}{\renewcommand*{\newterm@database}{#1}} +\define@choicekey{printterms}{postdesc}[\val\nr]% + {none,dot}% + {% + \datagidx@setpostdesc\nr + } +\define@choicekey{printterms}{prelocation}[\val\nr]% + {none,enspace,space,dotfill,hfill}% + {% + \datagidx@setprelocation\nr + } +\define@choicekey{printterms}{location}[\val\nr]% + {hide,list,first}% + {\datagidx@setlocation\nr} +\define@choicekey{printterms}{symboldesc}[\val\nr]% + {symbol,desc,(symbol) desc,desc (symbol),symbol desc,desc symbol}% + {\datagidx@formatsymdesc\nr} +\define@key{printterms}{columns}% +{% + \DTLgidxSetColumns{#1}% +} +\define@choicekey{printterms}{namecase}[\val\nr]% + {nochange,uc,lc,firstuc,capitalise}% + {% + \datagidx@setnamecase\nr + } +\define@key{printterms}{namefont}% +{% + \renewcommand*{\DTLgidxNameFont}[1]{{#1{##1}}}% +} +\define@key{printterms}{postname} +{% + \renewcommand*{\DTLgidxPostName}{#1}% +} +\define@choicekey{printterms}{see}[\val\nr]% + {comma,brackets,dot,space,nosep,semicolon,location}% + {\datagidx@setsee\nr} +\define@choicekey{printterms}{child}[\val\nr]% + {named,noname}% + {% + \datagidx@setchildstyle\nr + } +\define@key{printterms}{symbolwidth}% +{% + \setlength{\datagidxsymbolwidth}{#1}% +} +\define@key{printterms}{locationwidth}% +{% + \setlength{\datagidxlocationwidth}{#1}% +} +\define@choicekey{printterms}{childsort}[\val\nr]% + {true,false}[true]% + {% + \datagidx@setchildsort\nr + } +\define@choicekey{printterms}{showgroups}{true,false}[true]{% + \appto\newterm@styles{showgroups={#1},}% +} +\define@key{printterms}{style}{\appto\newterm@styles{style={#1},}} +\define@key{printterms}{heading}{\appto\newterm@styles{heading={#1},}} +\define@key{printterms}{postheading}{% + \appto\newterm@styles{postheading={#1},}% +} +\define@key{printterms}{sort}{\appto\newterm@styles{sort={#1},}} +\define@choicekey{printterms}{balance}[\val\nr]{true,false}[true]{% + \ifcase\nr\relax + \appto\newterm@styles{balance=true,}% + \or + \appto\newterm@styles{balance=false,}% + \fi +} +\newcommand{\printterms}[1][]{% +\bgroup + \let\newterm@database\datagidx@defaultdatabase + \let\newterm@styles\@empty + \setkeys{printterms}{#1}% + \DTLifdbexists{\newterm@database}% + {% + \edef\DTLgidxCurrentdb{\newterm@database}% + \edef\do@getrow{\noexpand\dtlgetrowforvalue + {datagidx}% + {\dtlcolumnindex{datagidx}{Glossary}}% + {\newterm@database}% + }% + \do@getrow + \dtlgetentryfromcurrentrow + {\datagidx@title}% + {\dtlcolumnindex{datagidx}{Title}}% + \dtlgetentryfromcurrentrow + {\datagidx@heading}% + {\dtlcolumnindex{datagidx}{Heading}}% + \dtlgetentryfromcurrentrow + {\datagidx@postheading}% + {\dtlcolumnindex{datagidx}{PostHeading}}% + \dtlgetentryfromcurrentrow + {\datagidx@multicols}% + {\dtlcolumnindex{datagidx}{MultiCols}}% + \dtlgetentryfromcurrentrow + {\datagidx@sort}% + {\dtlcolumnindex{datagidx}{Sort}}% + \dtlgetentryfromcurrentrow + {\datagidx@style}% + {\dtlcolumnindex{datagidx}{Style}}% + \dtlgetentryfromcurrentrow + {\datagidx@showgroups}% + {\dtlcolumnindex{datagidx}{ShowGroups}}% + \edef\dtl@do@setkeys{\noexpand\setkeys{newgloss}{\expandonce\newterm@styles}}% + \dtl@do@setkeys + \ifnum\datagidx@columns>1\relax + \edef\datagidx@prestart{% + \noexpand\begin{\datagidx@multicols}{\datagidx@columns}% + }% + \edef\datagidx@postend{% + \noexpand\end{\datagidx@multicols}% + }% + \else + \def\datagidx@prestart{}% + \def\datagidx@postend{}% + \fi + \let\@dtl@dbname\DTLgidxCurrentdb + \csuse{datagidxshowgroups\datagidx@showgroups}% + \datagidxsetstyle{\datagidx@style}% + \def\datagidx@labellist{}% + \datagidx@heading{\datagidx@title}% + \datagidx@postheading + \datagidx@do@sort + \datagidx@prestart + \datagidxstart + \let\DTLgidxName\datagidx@invert + \let\DTLgidxPlace\datagidx@invert + \let\DTLgidxSubject\datagidx@invert + \let\DTLgidxOffice\datagidx@invert + \DTLgidxForeachEntry + {% + \datagidxitem + }% + \datagidxend + \datagidx@postend + }% + {% + \PackageError{datagidx}% + {Glossary/index data base `\newterm@database' doesn't exist}% + {% + You must define the glossary/index data base before you can + use it.% + }% + }% +\egroup +} +\def\datagidx@getgroup#1#2\datagidx@endgetgroup{% + \dtl@setcharcode{#1}{\count@}% + \dtlifintclosedbetween{\count@}{48}{57}% + {% + \gdef\datagidxcurrentgroup{Numbers}% + }% + {% + \dtlifintclosedbetween{\count@}{97}{122}% + {% + \advance\count@ by -96\relax + \xdef\datagidxcurrentgroup{\@Alph\count@}% + }% + {% + \dtlifintclosedbetween{\count@}{65}{90}% + {% + \gdef\datagidxcurrentgroup{#1}% + }% + {% + \gdef\datagidxcurrentgroup{Symbols}% + }% + }% + }% +} +\newcommand*{\DTLgidxGroupHeaderTitle}[1]{% + \ifcsdef{datagidx#1name} + {% + \csuse{datagidx#1name}% + }% + {% + #1% + }% +} +\newcommand{\DTLgidxForeachEntry}[1]{% + \def\datagidxprevgroup{}% + \edef\datagidx@doforeachentry{% + \noexpand\DTLforeach*{\DTLgidxCurrentdb}% + {\expandonce\DTLgidxAssignList} + }% + \datagidx@doforeachentry + {% + \DTLifnull{\Parent}% + {% + \DTLifnull\Location + {% + \DTLifnull\CurrentLocation + {% + }% + {% + \global\let\@datagidx@dorerun@warn\@data@rerun@warn + }% + }% + {% + \ifcsdef{datagidx@prev@loc@\Label}% + {% + \ifcsequal{datagidx@prev@loc@\Label}{CurrentLocation}% + {}% + {% + \global\let\@datagidx@dorerun@warn\@data@rerun@warn + }% + }% + {% + \global\let\@datagidx@dorerun@warn\@data@rerun@warn + }% + }% + \datagidx@doifdisplayed + {% + \edef\datagidx@dowrite{% + \noexpand\protected@write\noexpand\@auxout{}% + {% + \string\datagidx@save@loc{\Label}{\CurrentLocation}% + }% + }% + \datagidx@dowrite + \datagidx@level=1\relax + \expandafter\datagidx@getgroup\Sort{}\datagidx@endgetgroup + #1% + \global\let\datagidxprevgroup\datagidxcurrentgroup + }% + }% + {}% + }% +} +\newcommand{\datagidx@doifdisplayed}[1]{% + \DTLifnull{\Location}% + {% + \DTLifnull{\See} + {% + \DTLifnull{\SeeAlso}{}% + {% + #1% + }% + }% + {% + \@for\dtl@thislabel:=\See\do + {% + \iftermexists{\dtl@thislabel}% + {% + \ifentryused{\dtl@thislabel}% + {% + #1% + \@endfortrue + }% + {}% + }% + {% + }% + }% + }% + }% + {% + #1% + }% +}% +\newcount\datagidx@level +\endinput +%% +%% End of file `datagidx.sty'. diff --git a/Master/texmf-dist/tex/latex/datatool/datapie.sty b/Master/texmf-dist/tex/latex/datatool/datapie.sty index 21da0dc72a1..b585b5456c3 100644 --- a/Master/texmf-dist/tex/latex/datatool/datapie.sty +++ b/Master/texmf-dist/tex/latex/datatool/datapie.sty @@ -7,7 +7,7 @@ %% datatool.dtx (with options: `datapie.sty,package') %% %% datatool.dtx -%% Copyright 2012 Nicola Talbot +%% Copyright 2013 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. +%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -39,7 +39,7 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{datapie}[2012/09/25 v2.11 (NLCT)] +\ProvidesPackage{datapie}[2013/01/15 v2.13 (NLCT)] \RequirePackage{xkeyval} \newif\ifDTLcolorpiechart \DTLcolorpiecharttrue diff --git a/Master/texmf-dist/tex/latex/datatool/dataplot.sty b/Master/texmf-dist/tex/latex/datatool/dataplot.sty index 2131f0a62d5..8da1b86d9d6 100644 --- a/Master/texmf-dist/tex/latex/datatool/dataplot.sty +++ b/Master/texmf-dist/tex/latex/datatool/dataplot.sty @@ -7,7 +7,7 @@ %% datatool.dtx (with options: `dataplot.sty,package') %% %% datatool.dtx -%% Copyright 2012 Nicola Talbot +%% Copyright 2013 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. +%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -39,7 +39,7 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{dataplot}[2012/09/25 v2.11 (NLCT)] +\ProvidesPackage{dataplot}[2013/01/15 v2.13 (NLCT)] \RequirePackage{xkeyval} \RequirePackage{tikz} \RequirePackage{datatool} diff --git a/Master/texmf-dist/tex/latex/datatool/datatool-base.sty b/Master/texmf-dist/tex/latex/datatool/datatool-base.sty index 097ed15e5f1..8f617ec0e77 100644 --- a/Master/texmf-dist/tex/latex/datatool/datatool-base.sty +++ b/Master/texmf-dist/tex/latex/datatool/datatool-base.sty @@ -7,7 +7,7 @@ %% datatool.dtx (with options: `datatool-base.sty,package') %% %% datatool.dtx -%% Copyright 2012 Nicola Talbot +%% Copyright 2013 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. +%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -39,7 +39,7 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{datatool-base}[2012/10/06 v2.12 (NLCT)] +\ProvidesPackage{datatool-base}[2013/01/15 v2.13 (NLCT)] \RequirePackage{etoolbox} \RequirePackage{amsmath} \RequirePackage{xkeyval} @@ -83,6 +83,31 @@ #4% }% } +\newcommand{\dtlifintopenbetween}[5]{% + \ifnum#1>#2\relax + \ifnum#1<#3\relax + #4% + \else + #5% + \fi + \else + #5% + \fi +} +\newcommand{\dtlifintclosedbetween}[5]{% + \dtlifintopenbetween{#1}{#2}{#3}{#4}% + {% + \ifnum#1=#2\relax + #4% + \else + \ifnum#1=#3\relax + #4% + \else + #5% + \fi + \fi + }% +} \long\def\long@collect@body#1{% \@envbody{\@xp#1\@xp{\the\@envbody}}% \edef\process@envbody{\the\@envbody\@nx\end{\@currenvir}}% @@ -1547,17 +1572,13 @@ #2=-1\relax }% {% - \ifx#1\space\relax + \ifx#1\@dtl@wordbreak\relax #2=`\ \relax \else - \ifx#1~\relax - #2=`\ \relax + \ifcat\noexpand#1\relax + #2=0\relax \else - \ifcat\noexpand#1\relax - #2=-1\relax - \else - #2=`#1\relax - \fi + #2=`#1\relax \fi \fi }% @@ -1568,16 +1589,15 @@ #2=-1\relax }% {% - \ifx#1\space\relax + \ifx#1\@dtl@wordbreak\relax #2=`\ \relax \else - \ifx#1~\relax - #2=`\ \relax + \ifcat\noexpand#1\relax% + #2=0\relax \else - \ifcat\noexpand#1\relax% - #2=-1\relax - \else - #2=\lccode`#1\relax + #2=\lccode`#1\relax + \ifnum#2=0\relax + #2=`#1\relax \fi \fi \fi @@ -1602,82 +1622,413 @@ #1=1\relax }% {% - \DTLsubstituteall{\@dtl@argA}{ }{\space }% - \DTLsubstituteall{\@dtl@argB}{ }{\space }% + \dtl@setwordbreaksnohyphens{\@dtl@argA}{\@dtl@wordbreak}% + \let\@dtl@argA\dtl@string + \dtl@setwordbreaksnohyphens{\@dtl@argB}{\@dtl@wordbreak}% + \let\@dtl@argB\dtl@string \expandafter\dtl@getfirst\@dtl@argA\end \let\dtl@firstA=\dtl@first \let\dtl@restA=\dtl@rest \expandafter\dtl@getfirst\@dtl@argB\end \let\dtl@firstB=\dtl@first \let\dtl@restB=\dtl@rest - \expandafter\dtl@ifsingle\expandafter{\dtl@firstA}{% - \expandafter\dtl@ifsingle\expandafter{\dtl@firstB}{% - \expandafter\dtl@setlccharcode\expandafter{\dtl@firstA}{\dtl@codeA}% - \expandafter\dtl@setlccharcode\expandafter{\dtl@firstB}{\dtl@codeB}% - \ifnum\dtl@codeA=-1\relax - \ifnum\dtl@codeB=-1\relax - \protected@edef\dtl@donext{% - \noexpand\dtlicompare{\noexpand#1}{\dtl@restA}{\dtl@restB}}% - \dtl@donext - \else - \protected@edef\dtl@donext{% - \noexpand\dtlicompare - {\noexpand#1}{\dtl@restA}{\dtl@firstB\dtl@restB}}% - \dtl@donext - \fi + \expandafter\dtl@ifsingle\expandafter{\dtl@firstA}% + {% + \expandafter\dtl@ifsingle\expandafter{\dtl@firstB}% + {% + \expandafter\dtl@setlccharcode\expandafter{\dtl@firstA}{\dtl@codeA}% + \expandafter\dtl@setlccharcode\expandafter{\dtl@firstB}{\dtl@codeB}% + \ifnum\dtl@codeA=-1\relax + \ifnum\dtl@codeB=-1\relax + \protected@edef\dtl@donext{% + \noexpand\dtlicompare{\noexpand#1}{\dtl@restA}{\dtl@restB}}% + \dtl@donext + \else + \protected@edef\dtl@donext{% + \noexpand\dtlicompare + {\noexpand#1}{\dtl@restA}{\dtl@firstB\dtl@restB}}% + \dtl@donext + \fi + \else + \ifnum\dtl@codeB=-1\relax + \protected@edef\dtl@donext{% + \noexpand\dtlicompare + {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@restB}}% + \dtl@donext + \else + \ifnum\dtl@codeA<\dtl@codeB + #1=-1\relax + \else + \ifnum\dtl@codeA>\dtl@codeB + #1=1\relax + \else + \ifdefempty{\dtl@restA}% + {% + \ifdefempty{\dtl@restB}% + {% + #1=0\relax + }% + {% + #1=-1\relax + }% + }% + {% + \ifdefempty{\restB}% + {% + #1=1\relax + }% + {% + \protected@edef\dtl@donext{% + \noexpand\dtlicompare + {\noexpand#1}{\dtl@restA}{\dtl@restB}}% + \dtl@donext + }% + }% + \fi + \fi + \fi + \fi + }% + {% + \protected@edef\dtl@donext{% + \noexpand\dtlicompare + {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}% + \dtl@donext + }% + }% + {% + \protected@edef\dtl@donext{% + \noexpand\dtlicompare + {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}% + \dtl@donext + }% + }% + }% +} +\newcommand*{\dtlwordindexcompare}[3]{% + \@dtldictcompare{#1}{#2}{#3}{\@dtl@wordbreak}% +} +\newcommand*{\dtlletterindexcompare}[3]{% + \@dtldictcompare{#1}{#2}{#3}{}% +} +\newcommand*{\@dtldictcompare}[4]{% + \dtl@subnobrsp{#2}{\@dtl@argA}% + \dtl@subnobrsp{#3}{\@dtl@argB}% + \ifdefempty{\@dtl@argA}% + {% + \ifdefempty{\@dtl@argB}% + {% + #1=0\relax + }% + {% + #1=-1\relax + }% + }% + {% + \ifdefempty{\@dtl@argB}% + {% + #1=1\relax + }% + {% + \expandafter\DTLsplitstring\expandafter + {\@dtl@argA}{\datatoolpersoncomma}{\@dtl@beforepart}{\@dtl@afterpart}% + \ifdefempty{\@dtl@replaced}% + {% + \expandafter\DTLsplitstring\expandafter + {\@dtl@argA}{\datatoolplacecomma}{\@dtl@beforepart}{\@dtl@afterpart}% + \ifdefempty{\@dtl@replaced}% + {% + \expandafter\DTLsplitstring\expandafter + {\@dtl@argA}{\datatoolsubjectcomma}{\@dtl@beforepart}{\@dtl@afterpart}% + \ifdefempty{\@dtl@replaced}% + {% + \expandafter\DTLsplitstring\expandafter + {\@dtl@argA}{\datatoolparenstart}{\@dtl@beforepart}{\@dtl@afterpart}% + \ifdefempty{\@dtl@replaced}% + {% + \def\@dtl@A@comma{0}% + \let\@dtl@A@before\@dtl@argA + \def\@dtl@A@after{}% + }% + {% + \let\@dtl@A@comma\@dtl@replaced + \let\@dtl@A@before\@dtl@beforepart + \let\@dtl@A@after\@dtl@afterpart + }% + }% + {% + \let\@dtl@A@comma\@dtl@replaced + \let\@dtl@A@before\@dtl@beforepart + \let\@dtl@A@after\@dtl@afterpart + }% + }% + {% + \let\@dtl@A@comma\@dtl@replaced + \let\@dtl@A@before\@dtl@beforepart + \let\@dtl@A@after\@dtl@afterpart + }% + }% + {% + \let\@dtl@A@comma\@dtl@replaced + \let\@dtl@A@before\@dtl@beforepart + \let\@dtl@A@after\@dtl@afterpart + }% + \expandafter\DTLsplitstring\expandafter + {\@dtl@argB}{\datatoolpersoncomma}{\@dtl@beforepart}{\@dtl@afterpart}% + \ifdefempty{\@dtl@replaced}% + {% + \expandafter\DTLsplitstring\expandafter + {\@dtl@argB}{\datatoolplacecomma}{\@dtl@beforepart}{\@dtl@afterpart}% + \ifdefempty{\@dtl@replaced}% + {% + \expandafter\DTLsplitstring\expandafter + {\@dtl@argB}{\datatoolsubjectcomma}{\@dtl@beforepart}{\@dtl@afterpart}% + \ifdefempty{\@dtl@replaced}% + {% + \expandafter\DTLsplitstring\expandafter + {\@dtl@argB}{\datatoolparenstart}{\@dtl@beforepart}{\@dtl@afterpart}% + \ifdefempty{\@dtl@replaced}% + {% + \def\@dtl@B@comma{0}% + \let\@dtl@B@before\@dtl@argB + \def\@dtl@B@after{}% + }% + {% + \let\@dtl@B@comma\@dtl@replaced + \let\@dtl@B@before\@dtl@beforepart + \let\@dtl@B@after\@dtl@afterpart + }% + }% + {% + \let\@dtl@B@comma\@dtl@replaced + \let\@dtl@B@before\@dtl@beforepart + \let\@dtl@B@after\@dtl@afterpart + }% + }% + {% + \let\@dtl@B@comma\@dtl@replaced + \let\@dtl@B@before\@dtl@beforepart + \let\@dtl@B@after\@dtl@afterpart + }% + }% + {% + \let\@dtl@B@comma\@dtl@replaced + \let\@dtl@B@before\@dtl@beforepart + \let\@dtl@B@after\@dtl@afterpart + }% + \expandafter\dtl@ifcasechargroup\@dtl@A@before\dtl@end@ifcasechargroup + {\def\@dtl@A@chargroup{2}}% + {\def\@dtl@A@chargroup{1}}% + {\def\@dtl@A@chargroup{0}}% + \expandafter\dtl@ifcasechargroup\@dtl@B@before\dtl@end@ifcasechargroup + {\def\@dtl@B@chargroup{2}}% + {\def\@dtl@B@chargroup{1}}% + {\def\@dtl@B@chargroup{0}}% + \ifnum\@dtl@A@chargroup<\@dtl@B@chargroup + #1=-1\relax \else - \ifnum\dtl@codeB=-1\relax - \protected@edef\dtl@donext{% - \noexpand\dtlicompare - {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@restB}}% - \dtl@donext + \ifnum\@dtl@A@chargroup>\@dtl@B@chargroup + #1=1\relax \else - \ifnum\dtl@codeA<\dtl@codeB - #1=-1\relax - \else - \ifnum\dtl@codeA>\dtl@codeB - #1=1\relax + \ifcase\@dtl@A@chargroup + \protected@edef\dtl@donext{% + \noexpand\dtlcompare + {\noexpand#1}{\@dtl@A@before}{\@dtl@B@before}}% + \dtl@donext + \or + \ifnum\@dtl@A@before<\@dtl@B@before\relax + #1=-1\relax \else - \ifdefempty{\dtl@restA}% - {% - \ifdefempty{\dtl@restB}% - {% - #1=0\relax - }% - {% - #1=-1\relax - }% - }% - {% - \ifdefempty{\restB}% - {% - #1=1\relax - }% - {% - \protected@edef\dtl@donext{% - \noexpand\dtlicompare - {\noexpand#1}{\dtl@restA}{\dtl@restB}}% - \dtl@donext - }% - }% + \ifnum\@dtl@A@before>\@dtl@B@before\relax + #1=1\relax + \else + #1=0\relax + \fi + \fi + \or + \@dtlwordindexcompare{#1}{\@dtl@A@before}{\@dtl@B@before} + {\dtlicomparewords}{#4}% + \ifnum#1=0\relax + \let\@org@dtl@person@comma\datatoolpersoncomma + \let\@org@dtl@place@comma\datatoolplacecomma + \let\@org@dtl@subject@comma\datatoolsubjectcomma + \let\@org@dtl@paren@start\datatoolparenstart + \def\datatoolpersoncomma{3}% + \def\datatoolplacecomma{2}% + \def\datatoolsubjectcomma{1}% + \def\datatoolparenstart{-1}% + \ifnum\@dtl@A@comma>\@dtl@B@comma\relax + #1=-1\relax + \else + \ifnum\@dtl@A@comma<\@dtl@B@comma\relax + #1=1\relax + \else + \@dtlwordindexcompare{#1}{\@dtl@B@before}{\@dtl@A@before} + {\dtlcomparewords}{#4}% + \ifnum#1=0\relax + \@dtlwordindexcompare{#1}{\@dtl@A@after}{\@dtl@B@after} + {\dtlicomparewords}{#4}% + \fi + \fi + \fi + \let\datatoolpersoncomma\@org@dtl@person@comma + \let\datatoolplacecomma\@org@dtl@place@comma + \let\datatoolsubjectcomma\@org@dtl@subject@comma + \let\datatoolparenstart\@org@dtl@paren@start \fi \fi \fi \fi - }{% - \protected@edef\dtl@donext{% - \noexpand\dtlicompare - {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}% - \dtl@donext - }}{% - \protected@edef\dtl@donext{% - \noexpand\dtlicompare - {\noexpand#1}{\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}% - \dtl@donext + }% + }% +}% +\newcommand*{\datatoolpersoncomma}{,\space} +\newcommand*{\datatoolplacecomma}{,\space} +\newcommand*{\datatoolsubjectcomma}{,\space} +\newcommand*{\datatoolparenstart}{\space} +\newcommand*{\@dtlwordindexcompare}[5]{% + \dtl@setwordbreaks{#2}{#5}% + \let#2\dtl@string + \dtl@setwordbreaks{#3}{}% + \let#3\dtl@string + \edef\@dtl@do@compare{% + \noexpand#4{\noexpand#1}% + {\expandonce#2}{\expandonce#3}% + }% + \@dtl@do@compare +} +\newcommand*{\@dtl@dict@compare}[4]{% + \ifdefempty{#2}% + {% + \ifdefempty{#3}% + {% + #1=0\relax + }% + {% + #1=-1\relax + }% + }% + {% + \ifdefempty{#3}% + {% + #1=1\relax + }% + {% + \expandafter\dtl@grabword#2\@dtl@endgrabword\dtl@A@first\dtl@A@remain + \expandafter\dtl@grabword#3\@dtl@endgrabword\dtl@B@first\dtl@B@remain + \edef\@dtl@do@compare{% + \noexpand#4{\noexpand#1}% + {\expandonce\dtl@A@first}{\expandonce\dtl@B@first}% }% + \@dtl@do@compare + \ifnum#1=0\relax + \@dtl@dict@compare{#1}{\dtl@A@remain}{\dtl@B@remain}{#4}% + \fi }% }% } +\def\dtl@grabword#1\@dtl@wordbreak#2\@dtl@endgrabword#3#4{% + \def#3{#1}% + \def#4{#2}% +} +\newcommand{\dtlicomparewords}[3]{% + \dtlicompare{#1}{#2}{#3}% +} +\newcommand{\dtlcomparewords}[3]{% + \dtlcompare{#1}{#2}{#3}% +} +\newcommand*{\dtl@setwordbreaks}[2]{% + \expandafter\dtl@subnobrsp\expandafter{#1}{\dtl@string}% + \DTLsubstituteall{\dtl@string}{~}{#2}% + \DTLsubstituteall{\dtl@string}{\ }{#2}% + \DTLsubstituteall{\dtl@string}{\space}{#2}% + \DTLsubstituteall{\dtl@string}{-}{#2}% + \toks@{#2}% + \edef\dtl@do@setwordbreaks{% + \noexpand\@dtl@setwordbreaks{\the\toks@}\expandonce\dtl@string\space\noexpand\@nil}% + \def\dtl@string{}% + \dtl@do@setwordbreaks +} +\def\@dtl@setwordbreaks#1#2 #3{% + \def\dtl@tmp{#3}% + \ifx\@nnil\dtl@tmp + \let\@dtl@setwordbreaks@next\@gobbletwo + \appto\dtl@string{#2}% + \else + \let\@dtl@setwordbreaks@next\@dtl@setwordbreaks + \appto\dtl@string{#2#1}% + \fi + \@dtl@setwordbreaks@next{#1}#3% +} +\newcommand*{\dtl@setwordbreaksnohyphens}[2]{% + \expandafter\dtl@subnobrsp\expandafter{#1}{\dtl@string}% + \DTLsubstituteall{\dtl@string}{~}{#2}% + \DTLsubstituteall{\dtl@string}{\ }{#2}% + \DTLsubstituteall{\dtl@string}{\space}{#2}% + \toks@{#2}% + \edef\dtl@do@setwordbreaks{% + \noexpand\@dtl@setwordbreaks{\the\toks@}\expandonce\dtl@string\space\noexpand\@nil}% + \def\dtl@string{}% + \dtl@do@setwordbreaks +} +\newcommand*{\@dtl@wordbreak}{ } +\def\dtl@ifcasechargroup#1#2\dtl@end@ifcasechargroup#3#4#5{% + \dtlifcasechargroup{#1}% + {#3}% + {% + \DTLifint{#1#2} + {% + #4% + }% + {% + #3% + }% + }% + {#5}% +} +\newcommand*{\dtlifcasechargroup}[4]{% + \count@=`#1\relax + \dtlifintclosedbetween{\number\count@}{48}{57}% + {% + #3% + }% + {% + \dtlifintclosedbetween{\number\count@}{97}{122}% + {% + #2% + }% + {% + \dtlifintclosedbetween{\number\count@}{65}{90}% + {% + #2% + }% + {% + #4% + }% + }% + }% +} +\newcommand*{\dtlparsewords}[2]{% + \dtl@subnobrsp{#1}{\dtl@string}% + \DTLsubstituteall{\dtl@string}{~}{ }% + \DTLsubstituteall{\dtl@string}{\ }{ }% + \DTLsubstituteall{\dtl@string}{\space}{ }% + \DTLsubstituteall{\dtl@string}{-}{ }% + \let\dtl@parsewordshandler#2\relax + \edef\dtl@donext{% + \noexpand\@dtl@parse@words\expandonce\dtl@string\space\noexpand\@nil}% + \dtl@donext +} +\def\@dtl@parse@words#1 #2{% + \def\dtl@tmp{#2}% + \ifx\@nnil\dtl@tmp + \let\parse@wordsnext=\@gobble + \else + \let\parse@wordsnext=\@dtl@parse@words + \fi + \dlt@parsewordshandler{#1}% + \parse@wordsnext#2% +} \newcommand*{\DTLifstringlt}{\@ifstar\@sDTLifstringlt\@DTLifstringlt} \newcommand*{\@DTLifstringlt}[4]{% \protected@edef\@dtl@tmpcmp{% @@ -1815,9 +2166,9 @@ \fi } \newcommand*{\DTLifSubString}[4]{% - \protected@edef\@dtl@tmp{\noexpand\dtl@testifsubstring + \protected@edef\@dtl@dotestifsubstring{\noexpand\dtl@testifsubstring {#1}{#2}}% - \@dtl@tmp + \@dtl@dotestifsubstring \if@dtl@condition #3% \else @@ -1827,6 +2178,17 @@ \newcommand*{\dtl@testifsubstring}[2]{% \dtl@subnobrsp{#1}{\@dtl@argA}% \dtl@subnobrsp{#2}{\@dtl@argB}% + \dtl@setwordbreaksnohyphens{\@dtl@argA}{\@dtl@wordbreak}% + \let\@dtl@argA\dtl@string + \dtl@setwordbreaksnohyphens{\@dtl@argB}{\@dtl@wordbreak}% + \let\@dtl@argB\dtl@string + \edef\dtl@donext{% + \noexpand\@dtl@testifsubstring{\expandonce\@dtl@argA}{\expandonce\@dtl@argB}}% + \dtl@donext +} +\newcommand*{\@dtl@testifsubstring}[2]{% + \def\@dtl@argA{#1}% + \def\@dtl@argB{#2}% \ifdefempty{\@dtl@argB}% {% \@dtl@conditiontrue @@ -1837,16 +2199,15 @@ \@dtl@conditionfalse }% {% - \dtl@teststartswith{#1}{#2}% + \@dtl@teststartswith{#1}{#2}% \if@dtl@condition \else - \DTLsubstituteall{\@dtl@argA}{ }{\space }% \expandafter\dtl@getfirst\@dtl@argA\end \expandafter\dtl@ifsingle\expandafter{\dtl@first}{% - \expandafter\dtl@testifsubstring\expandafter{\dtl@rest}{#2}% + \expandafter\@dtl@testifsubstring\expandafter{\dtl@rest}{#2}% }{% - \protected@edef\@dtl@donext{\noexpand\dtl@testifsubstring - {\dtl@first\dtl@rest}{\@dtl@argB}}% + \protected@edef\@dtl@donext{\noexpand\@dtl@testifsubstring + {\expandonce\dtl@first\expandonce\dtl@rest}{\expandonce\@dtl@argB}}% \@dtl@donext }% \fi @@ -1866,6 +2227,18 @@ \newcommand*{\dtl@teststartswith}[2]{% \dtl@subnobrsp{#1}{\@dtl@argA}% \dtl@subnobrsp{#2}{\@dtl@argB}% + \dtl@setwordbreaksnohyphens{\@dtl@argA}{\@dtl@wordbreak}% + \let\@dtl@argA\dtl@string + \dtl@setwordbreaksnohyphens{\@dtl@argB}{\@dtl@wordbreak}% + \let\@dtl@argB\dtl@string + \edef\dtl@donext{% + \noexpand\@dtl@teststartswith{\expandonce\@dtl@argA}{\expandonce\@dtl@argB}}% + \dtl@donext +} + +\newcommand*{\@dtl@teststartswith}[2]{% + \def\@dtl@argA{#1}% + \def\@dtl@argB{#2}% \ifdefempty{\@dtl@argA}% {% \ifdefempty{\@dtl@argB}% @@ -1882,54 +2255,59 @@ \@dtl@conditiontrue }% {% - \DTLsubstituteall{\@dtl@argA}{ }{\space }% - \DTLsubstituteall{\@dtl@argB}{ }{\space }% \expandafter\dtl@getfirst\@dtl@argA\end \let\dtl@firstA=\dtl@first \let\dtl@restA=\dtl@rest \expandafter\dtl@getfirst\@dtl@argB\end \let\dtl@firstB=\dtl@first \let\dtl@restB=\dtl@rest - \expandafter\dtl@ifsingle\expandafter{\dtl@firstA}{% - \expandafter\dtl@ifsingle\expandafter{\dtl@firstB}{% - \expandafter\dtl@setcharcode\expandafter{\dtl@firstA}{\dtl@codeA}% - \expandafter\dtl@setcharcode\expandafter{\dtl@firstB}{\dtl@codeB}% - \ifnum\dtl@codeA=-1\relax - \ifnum\dtl@codeB=-1\relax - \protected@edef\dtl@donext{% - \noexpand\dtl@teststartswith{\dtl@restA}{\dtl@restB}}% - \dtl@donext - \else - \protected@edef\dtl@donext{% - \noexpand\dtl@teststartswith - {\dtl@restA}{\dtl@firstB\dtl@restB}}% - \dtl@donext - \fi - \else - \ifnum\dtl@codeB=-1\relax - \protected@edef\dtl@donext{% - \noexpand\dtl@teststartswith - {\dtl@firstA\dtl@restA}{\dtl@restB}}% - \dtl@donext - \else - \ifnum\dtl@codeA=\dtl@codeB - \protected@edef\dtl@donext{% - \noexpand\dtl@teststartswith{\dtl@restA}{\dtl@restB}}% - \dtl@donext + \expandafter\dtl@ifsingle\expandafter{\dtl@firstA}% + {% + \expandafter\dtl@ifsingle\expandafter{\dtl@firstB}% + {% + \expandafter\dtl@setcharcode\expandafter{\dtl@firstA}{\dtl@codeA}% + \expandafter\dtl@setcharcode\expandafter{\dtl@firstB}{\dtl@codeB}% + \ifnum\dtl@codeA=-1\relax + \ifnum\dtl@codeB=-1\relax + \protected@edef\dtl@donext{% + \noexpand\@dtl@teststartswith{\expandonce\dtl@restA}{\expandonce\dtl@restB}}% + \dtl@donext + \else + \protected@edef\dtl@donext{% + \noexpand\@dtl@teststartswith + {\expandonce\dtl@restA}{\expandonce\dtl@firstB\expandonce\dtl@restB}}% + \dtl@donext + \fi \else - \@dtl@conditionfalse + \ifnum\dtl@codeB=-1\relax + \protected@edef\dtl@donext{% + \noexpand\@dtl@teststartswith + {\expandonce\dtl@firstA\expandonce\dtl@restA}{\expandonce\dtl@restB}}% + \dtl@donext + \else + \ifnum\dtl@codeA=\dtl@codeB + \protected@edef\dtl@donext{% + \noexpand\@dtl@teststartswith{\expandonce\dtl@restA}{\expandonce\dtl@restB}}% + \dtl@donext + \else + \@dtl@conditionfalse + \fi + \fi \fi - \fi - \fi - }{% - \protected@edef\dtl@donext{% - \noexpand\dtl@teststartswith - {\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}% - \dtl@donext - }}{% - \protected@edef\dtl@donext{% - \noexpand\dtl@teststartswith - {\dtl@firstA\dtl@restA}{\dtl@firstB\dtl@restB}}% + }% + {% + \protected@edef\dtl@donext{% + \noexpand\@dtl@teststartswith + {\expandonce\dtl@firstA\expandonce\dtl@restA}% + {\expandonce\dtl@firstB\expandonce\dtl@restB}}% + \dtl@donext + }% + }% + {% + \protected@edef\dtl@donext{% + \noexpand\@dtl@teststartswith + {\expandonce\dtl@firstA\expandonce\dtl@restA}% + {\expandonce\dtl@firstB\expandonce\dtl@restB}}% }% }% }% diff --git a/Master/texmf-dist/tex/latex/datatool/datatool-fp.sty b/Master/texmf-dist/tex/latex/datatool/datatool-fp.sty index de6bf14aa2c..aac031ce169 100644 --- a/Master/texmf-dist/tex/latex/datatool/datatool-fp.sty +++ b/Master/texmf-dist/tex/latex/datatool/datatool-fp.sty @@ -7,7 +7,7 @@ %% datatool.dtx (with options: `datatool-fp.sty,package') %% %% datatool.dtx -%% Copyright 2012 Nicola Talbot +%% Copyright 2013 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. +%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -39,7 +39,7 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{datatool-fp}[2012/09/25 v2.11 (NLCT)] +\ProvidesPackage{datatool-fp}[2013/01/15 v2.13 (NLCT)] \RequirePackage{xkeyval} \RequirePackage{fp} \RequirePackage{datatool-base} diff --git a/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.sty b/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.sty index 39e8597e71a..3ce27652288 100644 --- a/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.sty +++ b/Master/texmf-dist/tex/latex/datatool/datatool-pgfmath.sty @@ -7,7 +7,7 @@ %% datatool.dtx (with options: `datatool-pgfmath.sty,package') %% %% datatool.dtx -%% Copyright 2012 Nicola Talbot +%% Copyright 2013 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. +%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -39,7 +39,7 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{datatool-pgfmath}[2012/10/06 v2.12 (NLCT)] +\ProvidesPackage{datatool-pgfmath}[2013/01/15 v2.13 (NLCT)] \RequirePackage{xkeyval} \RequirePackage{pgfrcs,pgfkeys,pgfmath} \ProcessOptionsX diff --git a/Master/texmf-dist/tex/latex/datatool/datatool.sty b/Master/texmf-dist/tex/latex/datatool/datatool.sty index b8d1237baf7..5101274b157 100644 --- a/Master/texmf-dist/tex/latex/datatool/datatool.sty +++ b/Master/texmf-dist/tex/latex/datatool/datatool.sty @@ -7,7 +7,7 @@ %% datatool.dtx (with options: `datatool.sty,package') %% %% datatool.dtx -%% Copyright 2012 Nicola Talbot +%% Copyright 2013 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. +%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -39,7 +39,7 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{datatool}[2012/09/25 v2.11 (NLCT)] +\ProvidesPackage{datatool}[2013/01/15 v2.13 (NLCT)] \RequirePackage{xkeyval} \RequirePackage{ifthen} \RequirePackage{xfor} @@ -112,7 +112,7 @@ \define@choicekey{datatool.sty}{math}[\val\nr]{fp,pgfmath}{% \renewcommand*\@dtl@mathprocessor{#1}% } -\newcommand*{\@dtl@mathprocessor}{fp} +\providecommand*{\@dtl@mathprocessor}{fp} \ProcessOptionsX \@dtl@construct@lopoffs \RequirePackage{datatool-base} @@ -164,6 +164,53 @@ database doesn't exist}{}{}% }% } +\newcommand*{\DTLgnewdb}[1]{% + \DTLifdbexists{#1}% + {% + \PackageError{datatool}{Database `#1' already exists}{}% + }% + {% + \dtl@message{Creating database `#1'}% + \expandafter\global\expandafter\newtoks\csname dtldb@#1\endcsname + \expandafter\global\expandafter\newtoks\csname dtlkeys@#1\endcsname{}% + \expandafter\global\expandafter\newcount\csname dtlrows@#1\endcsname + \expandafter\global\expandafter\newcount\csname dtlcols@#1\endcsname + }% +} +\newcommand*{\DTLgdeletedb}[1]{% + \DTLifdbexists{#1}% + {% + \dtlforeachkey(\@dtl@key,\@dtl@col,\@dtl@type,\@dtl@head)\in{#1}\do + {% + \expandafter\global\expandafter\let\csname dtl@ci@#1@\@dtl@key\endcsname\undefined + }% + \expandafter\global\expandafter\let\csname dtldb@#1\endcsname\undefined + \expandafter\global\expandafter\let\csname dtlkeys@#1\endcsname\undefined + \expandafter\global\expandafter\let\csname dtlrows@#1\endcsname\undefined + \expandafter\global\expandafter\let\csname dtlcols@#1\endcsname\undefined + }% + {% + \PackageError{Can't delete database `#1': + database doesn't exist}{}{}% + }% +} +\newcommand*{\DTLgcleardb}[1]{% + \DTLifdbexists{#1}% + {% + \dtlforeachkey(\@dtl@key,\@dtl@col,\@dtl@type,\@dtl@head)\in{#1}\do + {% + \expandafter\global\expandafter\let\csname dtl@ci@#1@\@dtl@key\endcsname\undefined + }% + \expandafter\global\csname dtldb@#1\endcsname{}% + \expandafter\global\csname dtlkeys@#1\endcsname{}% + \expandafter\global\csname dtlrows@#1\endcsname=0\relax + \expandafter\global\csname dtlcols@#1\endcsname=0\relax + }% + {% + \PackageError{Can't clear database `#1': + database doesn't exist}{}{}% + }% +} \newcommand*{\DTLrowcount}[1]{% \expandafter\number\csname dtlrows@#1\endcsname } @@ -189,7 +236,7 @@ \newcommand*{\@DTLnewrow}[1]{% \DTLifdbexists{#1}% {\@sDTLnewrow{#1}}% - {\PackageErrors{datatool}{Can't add new row to database `#1': + {\PackageError{datatool}{Can't add new row to database `#1': database doesn't exist}{}}% } \newcommand*{\@sDTLnewrow}[1]{% @@ -487,7 +534,7 @@ {\noexpand\@dtl@key}{\noexpand\@dtl@type}% {\noexpand\@dtl@colhead}{\noexpand\@dtl@before}% {\noexpand\@dtl@after}{\the\csname dtlkeys@#1\endcsname}% - {\number#2}} + {\number#2}}% \@dtl@dogetprops \@dtl@colhead={#3}% \edef\@dtl@colnum{\number#2}\relax @@ -537,7 +584,7 @@ }% \dtl@dogetentry \ifx\dtl@entry\dtlnovalue - \@dtl@setnewvalue{#3}% + \@dtl@setnewvalue{#3}% \toks@gconcat@middle@cx{dtldb@#1}% {\dtlbeforerow}% {% @@ -617,16 +664,22 @@ \global\let#1=\DTLnumbernull \fi } -\newcommand*{\DTLstringnull}{NULL} -\newcommand*{\DTLnumbernull}{0} +\newcommand*{\DTLstringnull}{\@dtlstringnull} +\newcommand*{\@dtlstringnull}{NULL} +\newcommand*{\DTLnumbernull}{\@dtlnumbernull} +\newcommand*{\@dtlnumbernull}{0} \newcommand*{\DTLifnull}[3]{% - \ifx\DTLstringnull#1\relax + \ifx#1\dtlnovalue #2% \else - \ifx\DTLnumbernull#1\relax + \ifx#1\DTLstringnull #2% \else - #3% + \ifx#1\DTLnumbernull + #2% + \else + #3% + \fi \fi \fi } @@ -1202,7 +1255,7 @@ \gdef\DTLiflastrow##1##2{% \expandafter\ifnum \csname c@DTLrow\romannumeral\dtlforeachlevel\endcsname - =\csname dtlcols@#2\endcsname\relax + =\csname dtlrows@#2\endcsname\relax ##1% \else ##2% @@ -1355,7 +1408,7 @@ \gdef\DTLiflastrow##1##2{% \expandafter\ifnum \csname c@DTLrow\romannumeral\dtlforeachlevel\endcsname - =\csname dtlcols@#2\endcsname\relax + =\csname dtlrows@#2\endcsname\relax ##1% \else ##2% @@ -1608,7 +1661,7 @@ } \newcommand{\DTLaddentryforrow}[5]{% \DTLifdbexists{#1}% - { + {% \def\@dtl@notdone{\PackageError{datatool}{Unable to add entry given by key `#4': condition not met for any row in database `#1'}{}}% @@ -1641,9 +1694,9 @@ \dtl@dogetentry \ifx#1\dtlnovalue \ifnum0\dtltype=0\relax - \let#1=\DTLstringnull + \let#1=\@dtlstringnull \else - \let#1=\DTLnumbernull + \let#1=\@dtlnumbernull \fi \fi \global\let#1#1% @@ -1711,8 +1764,8 @@ \newcommand*{\dtldisplaystartrow}{} \newcommand*{\DTLdisplaydb}[2][]{% - \def\@dtl@doamp{\gdef\@dtl@doamp{&}} - \def\@dtl@resetdoamp{\gdef\@dtl@doamp{\gdef\@dtl@doamp{&}}} + \def\@dtl@doamp{\gdef\@dtl@doamp{&}}% + \def\@dtl@resetdoamp{\gdef\@dtl@doamp{\gdef\@dtl@doamp{&}}}% \edef\@dtl@maxcols{\expandafter\number \csname dtlcols@#2\endcsname}% \DTLnumitemsinlist{#1}{\@dtl@tmp}% @@ -1726,7 +1779,7 @@ {}% {% \dtladdalign\@dtl@tabargs\@dtl@type\@dtl@idx\@dtl@maxcols - } + }% }% \edef\@dtl@dobegintab{\noexpand\begin{tabular}[\dtldisplayvalign]{\@dtl@tabargs}}% \@dtl@dobegintab @@ -1793,8 +1846,8 @@ \def\@dtl@lastfoot{\@nil}% \def\@dtl@omitlist{}% \setkeys{displaylong}{#1}% - \def\@dtl@doamp{\gdef\@dtl@doamp{&}} - \def\@dtl@resetdoamp{\gdef\@dtl@doamp{\gdef\@dtl@doamp{&}}} + \def\@dtl@doamp{\gdef\@dtl@doamp{&}}% + \def\@dtl@resetdoamp{\gdef\@dtl@doamp{\gdef\@dtl@doamp{&}}}% \@dtl@resetdostartrow \edef\@dtl@maxcols{\expandafter\number \csname dtlcols@#2\endcsname}% @@ -2104,6 +2157,7 @@ }% }% \ifnum\@dtl@elements=0\relax + \PackageError{datatool}{Unable to evaluate mean: no data}{}% \else \edef\@dtl@n{\number\@dtl@elements}% \DTLdiv{#4}{#4}{\@dtl@n}% @@ -2383,23 +2437,20 @@ \newtoks\@dtl@list \newcommand*{\DTLsort}{\@ifstar\@sDTLsort\@DTLsort} \newcommand{\@DTLsort}[3][]{% - \DTLifdbexists{#3}% - {% - \edef\@dtl@replacementkeys{#1}% - \edef\@dtl@sortorder{#2}% - \let\@dtl@comparecs=\dtlcompare - \dtl@sortdata{#3}% - }% - {% - \PackageError{datatool}{Database `#3' doesn't exist}{}% - }% + \dtlsort[#1]{#2}{#3}{\dtlicompare}% } -\newcommand{\@sDTLsort}[3][]{% +\newcommand*{\@sDTLsort}[3][]{% + \dtlsort[#1]{#2}{#3}{\dtlicompare}% +} +\newcommand{\dtlsort}[4][]{% \DTLifdbexists{#3}% {% + \ifnum\DTLrowcount{#3}>100\relax + \typeout{Sorting `#3' - this may take a while.}% + \fi \edef\@dtl@replacementkeys{#1}% \edef\@dtl@sortorder{#2}% - \let\@dtl@comparecs=\dtlicompare + \let\@dtl@comparecs=#4% \dtl@sortdata{#3}% }% {% @@ -2411,7 +2462,7 @@ \newcommand*{\dtl@sortdata}[1]{% \def\@dtl@sortedlist{}% \edef\@dtl@dbname{#1}% - \@dtlforeachrow(\@dtl@rowAnum,\@dtl@rowAcontents)\in{#1}\do{% + \@dtlforeachrow(\@dtl@rowAnum,\@dtl@rowAcontents)\in\@dtl@dbname\do{% \@dtl@rowa=\expandafter{\@dtl@rowAcontents}% \def\@dtl@newlist{}% \@dtl@insertdonefalse @@ -2421,7 +2472,8 @@ \db@row@id@w \@nil\db@row@id@end@% \db@row@id@w \@nil\db@row@id@end@% \db@row@elt@end@% - \@@{\@dtl@rowBnum}{\@dtl@rowBcontents}{% + \@@{\@dtl@rowBnum}{\@dtl@rowBcontents}% + {% \@dtl@rowb=\expandafter{\@dtl@rowBcontents}% \dtlrownum=\@dtl@rowBnum \if@dtl@insertdone @@ -2475,7 +2527,8 @@ {\@dtl@sortedlist}% } \newcommand{\@dtl@sortcriteria}[2]{% - \@for\@dtl@level:=\@dtl@sortorder\do{% + \@for\@dtl@level:=\@dtl@sortorder\do + {% \expandafter\@dtl@getsortdirection\@dtl@level=\relax \let\@dtl@keya=\@dtl@key \let\@dtl@keyb=\@dtl@key @@ -2554,7 +2607,7 @@ \PackageError{datatool}{Invalid sort direction `\@dtl@sortdirection'}{The sort direction can only be one of `ascending' or `descending'}% - \def\@dtl@sortdirection{-1} + \def\@dtl@sortdirection{-1}% \fi \fi }% @@ -2714,6 +2767,97 @@ database}{}% }% } +\newcommand*{\dtl@saverawdbhook}{} +\newcommand*{\DTLsaverawdb}[2]{% + \DTLifdbexists{#1}% + {% + \openout\@dtl@write=#2\relax + \protected@write{\@dtl@write}{}{% + \string\DTLifdbexists{#1}\expandafter\@gobble\string\%^^J% + {% + \string\PackageError{datatool}{Database `#1' ^^Jalready exists}{}% + \expandafter\@gobble\string\%^^J% + \string\aftergroup\string\endinput + }% + {% + }\expandafter\@gobble\string\% + }% + {% + \def\db@row@elt@w{\expandafter\@gobble\string\%^^J\string\db@row@elt@w\space}% + \def\db@row@elt@end@{\expandafter\@gobble\string\%^^J\string\db@row@elt@end@\space}% + \def\db@row@id@w{\expandafter\@gobble\string\%^^J\string\db@row@id@w\space}% + \def\db@row@id@end@{\expandafter\@gobble\string\%^^J\string\db@row@id@end@\space}% + \def\db@col@elt@w{\expandafter\@gobble\string\%^^J\string\db@col@elt@w\space}% + \def\db@col@elt@end@{\expandafter\@gobble\string\%^^J\string\db@col@elt@end@\space}% + \def\db@col@id@w{\expandafter\@gobble\string\%^^J\string\db@col@id@w\space}% + \def\db@col@id@end@{\expandafter\@gobble\string\%^^J\string\db@col@id@end@\space}% + \def\db@plist@elt@w{\expandafter\@gobble\string\%^^J\string\db@plist@elt@w\space}% + \def\db@plist@elt@end@{\expandafter\@gobble\string\%^^J\string\db@plist@elt@end@\space}% + \def\db@key@id@w{\expandafter\@gobble\string\%^^J\string\db@key@id@w\space}% + \def\db@key@id@end@{\expandafter\@gobble\string\%^^J\string\db@key@id@end@\space}% + \def\db@type@id@w{\expandafter\@gobble\string\%^^J\string\db@type@id@w\space}% + \def\db@type@id@end@{\expandafter\@gobble\string\%^^J\string\db@type@id@end@\space}% + \def\db@header@id@w{\expandafter\@gobble\string\%^^J\string\db@header@id@w\space}% + \def\db@header@id@end@{\expandafter\@gobble\string\%^^J\string\db@header@id@end@\space}% + \protected@write{\@dtl@write}{}{\string\bgroup\string\makeatletter}% + \protected@write{\@dtl@write}{}{\string\dtl@message{Reconstructing database + ^^J`#1'}\expandafter\@gobble\string\%}% + \protected@write{\@dtl@write}{}{% + \string\expandafter + \string\global\string\expandafter^^J\string\newtoks + \string\csname\space dtlkeys@#1\string\endcsname}% + \protected@write{\@dtl@write}{}{% + \string\expandafter + \string\global^^J + \string\csname\space dtlkeys@#1\string\endcsname + =\expandafter\@gobble\string\{\expandafter\@gobble\string\%}% + \expandafter\protected@xdef\csname dtl@rawwritedbkeys@#1\endcsname{% + \the\csname dtlkeys@#1\endcsname}% + \protected@write{\@dtl@write}{}{\csname dtl@rawwritedbkeys@#1\endcsname}% + \protected@write{\@dtl@write}{}{\expandafter\@gobble\string\}\expandafter\@gobble\string\%}% + \dtl@saverawdbhook + \protected@write{\@dtl@write}{}{% + \string\expandafter\string\global + \string\expandafter^^J\string\newtoks + \string\csname\space dtldb@#1\string\endcsname}% + \protected@write{\@dtl@write}{}{% + \string\expandafter + \string\global^^J\string\csname\space dtldb@#1\string\endcsname + =\expandafter\@gobble\string\{\expandafter\@gobble\string\%}% + \expandafter\protected@xdef\csname dtl@rawwritedb@#1\endcsname{\the\csname dtldb@#1\endcsname}% + \protected@write{\@dtl@write}{}{\csname dtl@rawwritedb@#1\endcsname}% + \protected@write{\@dtl@write}{}{\expandafter\@gobble\string\}\expandafter\@gobble\string\%}% + \protected@write{\@dtl@write}{}{\string\expandafter\string\global^^J + \string\expandafter\string\newcount + \string\csname\space dtlrows@#1\string\endcsname}% + \protected@write{\@dtl@write}{}{\string\expandafter\string\global^^J + \string\csname\space dtlrows@#1\string\endcsname + =\expandafter\number\csname dtlrows@#1\endcsname\string\relax}% + \protected@write{\@dtl@write}{}{\string\expandafter\string\global^^J + \string\expandafter\string\newcount + \string\csname\space dtlcols@#1\string\endcsname}% + \protected@write{\@dtl@write}{}{\string\expandafter\string\global^^J + \string\csname\space dtlcols@#1\string\endcsname + =\expandafter\number\csname dtlcols@#1\endcsname\string\relax}% + \dtlforeachkey(\@dtl@key,\@dtl@col,\@dtl@type,\@dtl@head)\in{#1}\do + {% + \edef\dtl@tmp{% + \string\expandafter^^J + \string\gdef + \string\csname\space dtl@ci@#1@\@dtl@key\string\endcsname + {\csname dtl@ci@#1@\@dtl@key\endcsname}\expandafter\@gobble\string\% + }% + \expandafter\write\expandafter\@dtl@write\expandafter{\dtl@tmp}% + }% + \protected@write{\@dtl@write}{}{\string\egroup}% + }% + \closeout\@dtl@write + }% + {% + \PackageError{datatool}{Can't save database `#1': no such + database}{}% + }% +} \newread\@dtl@read \newcount\dtl@entrycr \define@boolkey{loaddb}[dtl]{noheader}[true]{} @@ -2748,13 +2892,15 @@ }% {% \dtl@trim#2% - } + }% } \newcommand*{\@dtl@readrawline}[2]{% \@dtl@rawread#1 to #2% \dtl@trim#2% \dtl@domappings\@dtl@line } +\newif\ifDTLnewdbonload +\DTLnewdbonloadtrue \newcommand*{\DTLloaddb}{% \let\@dtl@doreadline\@dtl@readline \@dtlloaddb @@ -2772,7 +2918,9 @@ \advance\dtl@omitlines by \m@ne \read\@dtl@read to \@dtl@line \repeat - \DTLnewdb{#2}% + \ifDTLnewdbonload + \DTLnewdb{#2}% + \fi \ifeof\@dtl@read \PackageWarning{datatool}{File `#3' has no data}% \else @@ -2983,8 +3131,8 @@ \def\@dtl@rawmappings{{#1}{#2}}% }% {% - \def\@dtl@tmp{{#1}{#2}} - \protected@edef\@dtl@rawmappings{\the\@dtl@toks,\@dtl@tmp} + \def\@dtl@tmp{{#1}{#2}}% + \protected@edef\@dtl@rawmappings{\the\@dtl@toks,\@dtl@tmp}% }% } \newcommand*{\@dtl@rawmappings}{} diff --git a/Master/texmf-dist/tex/latex/datatool/person.sty b/Master/texmf-dist/tex/latex/datatool/person.sty index 84d18ad96da..6dcc72366b5 100644 --- a/Master/texmf-dist/tex/latex/datatool/person.sty +++ b/Master/texmf-dist/tex/latex/datatool/person.sty @@ -7,7 +7,7 @@ %% datatool.dtx (with options: `person.sty,package') %% %% datatool.dtx -%% Copyright 2012 Nicola Talbot +%% Copyright 2013 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 @@ -21,7 +21,7 @@ %% %% The Current Maintainer of this work is Nicola Talbot. %% -%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. +%% This work consists of the files datatool.dtx and datatool.ins and the derived files datatool-base.sty, datatool-fp.sty, datatool-pgfmath.sty, datatool.sty, datagidx.sty, databib.sty, databar.sty, datapie.sty, dataplot.sty, person.sty, databib.bst. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -39,7 +39,7 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{person}[2012/09/25 v2.11 (NLCT)] +\ProvidesPackage{person}[2013/01/15 v2.13 (NLCT)] \RequirePackage{ifthen} \RequirePackage{datatool} \newcounter{people} -- cgit v1.2.3