summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/idxcmds/idxcmds.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/idxcmds/idxcmds.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/idxcmds/idxcmds.sty')
-rw-r--r--macros/latex/contrib/idxcmds/idxcmds.sty308
1 files changed, 308 insertions, 0 deletions
diff --git a/macros/latex/contrib/idxcmds/idxcmds.sty b/macros/latex/contrib/idxcmds/idxcmds.sty
new file mode 100644
index 0000000000..0edfb9df9f
--- /dev/null
+++ b/macros/latex/contrib/idxcmds/idxcmds.sty
@@ -0,0 +1,308 @@
+% --------------------------------------------------------------------------
+% the IDXCMDS package
+%
+% create commands for adding formatted index entries
+%
+% --------------------------------------------------------------------------
+% Clemens Niederberger
+% Web: https://bitbucket.org/cgnieder/idxcmds/
+% E-Mail: contact@mychemistry.eu
+% --------------------------------------------------------------------------
+% Copyright 2012-2015 Clemens Niederberger
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (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 Clemens Niederberger.
+% --------------------------------------------------------------------------
+% The idxcmds package consists of the files
+% - idxcmds.sty
+% - idxcmds_en.tex, idxcmds_en.pdf
+% - README
+% --------------------------------------------------------------------------
+% If you have any ideas, questions, suggestions or bugs to report, please
+% feel free to contact me.
+% --------------------------------------------------------------------------
+\newcommand*\idxcmds@date{2015/08/13}
+\newcommand*\idxcmds@version{v0.2c}
+\newcommand*\idxcmds@description{create commands for adding formatted index entries}
+
+\ProvidesPackage{idxcmds}[\idxcmds@date\space \idxcmds@version\space
+ \idxcmds@description\space (CN)]
+\RequirePackage{etoolbox,pgfopts,ltxcmds}
+
+% --------------------------------------------------------------------------
+% message handling:
+\newcommand*\idxcmds@create@message[1]{%
+ \ifstrequal{#1}{Error}
+ {%
+ \lowercase{\csdef{@idxcmds@#1}}##1##2{%
+ \csuse{Package#1}{idxcmds}{##1}{##2}}%
+ }{%
+ \lowercase{\csdef{@idxcmds@#1}}##1{%
+ \csuse{Package#1}{idxcmds}{##1}}%
+ }}
+\idxcmds@create@message{Error}
+\idxcmds@create@message{Warning}
+\idxcmds@create@message{WarningNoLine}
+\idxcmds@create@message{Info}
+
+% --------------------------------------------------------------------------
+% package options:
+\newcommand*\idxcmds@sortsep{@}
+\newcommand*\idxcmds@subsep{!}
+\newcommand*\idxcmds@default@index{\index}
+
+\pgfkeys{
+ idxcmds/.cd,
+ sort-sep/.code = \def\idxcmds@sortsep{#1} ,
+ sub-sep/.code = \def\idxcmds@subsep{#1} ,
+ idx-cmd/.code = \def\idxcmds@default@index{#1}
+}
+\ProcessPgfOptions*
+
+\newrobustcmd*\setidxcmds[1]{\pgfqkeys{/idxcmds}{#1}}
+
+% --------------------------------------------------------------------------
+% a few helpers:
+\newcommand*\idxcmds@stripbs{\expandafter\@gobble\string}
+\newrobustcmd*\idxcmds@csdef[1]{\csdef{\idxcmds@stripbs#1}}
+\newcommand*\idxcmds@csuse[1]{\csuse{\idxcmds@stripbs#1}}
+\protected\def\idxcmds@appdef#1[#2]{\idxcmds@csdef{#1@idx@app}{#2}}
+\newcommand*\idxcmds@newcommand{%
+ \@ifstar
+ {\idxcmds@newcommand@star}
+ {\idxcmds@newcommand@nostar}%
+}
+\newrobustcmd*\idxcmds@newcommand@nostar[1]{%
+ \expandafter\newrobustcmd\csname\idxcmds@stripbs#1\endcsname
+}
+\newrobustcmd*\idxcmds@newcommand@star[1]{%
+ \expandafter\newrobustcmd\expandafter*\csname\idxcmds@stripbs#1\endcsname
+}
+
+% --------------------------------------------------------------------------
+% \newidxcmd[<index cmd>]{<cs>}{<formatting specs>}[<app to idx entry>]
+% new commands will have the syntax
+% \cmd*{<text>} => no index entry
+% \cmd{<text>} => index entry
+% \cmd[<sort idx>]{<text>} => alt. sort index
+%
+
+\newrobustcmd\newidxcmd[3][\idxcmds@default@index]{%
+ \idxcmds@csdef{#2@base}##1{#3}%
+ \idxcmds@csdef{#2@idx}##1##2##3{%
+ \ifblank{##1}
+ {%
+ #1{%
+ ##2\idxcmds@sortsep
+ \idxcmds@csuse{#2@base}{##2}%
+ \idxcmds@csuse{#2@idx@app}%
+ ##3%
+ }%
+ }
+ {%
+ #1{%
+ ##1\idxcmds@sortsep
+ \idxcmds@csuse{#2@base}{##2}%
+ \idxcmds@csuse{#2@idx@app}%
+ ##3%
+ }%
+ }%
+ }%
+ \idxcmds@csdef{#2@star}##1{\idxcmds@csuse{#2@base}{##1}}%
+ \idxcmds@csdef{#2@nostar}{%
+ \ltx@ifnextchar[% ]
+ {\idxcmds@csuse{#2@nostar@opt}}
+ {\idxcmds@csuse{#2@nostar@opt}[]}%
+ }%
+ \idxcmds@csdef{#2@nostar@opt}[##1]##2{%
+ \idxcmds@csuse{#2@base}{##2}%
+ \ltx@ifnextchar@nospace[% ]
+ {\idxcmds@csuse{#2@idx@optarg}{##1}{##2}}
+ {\idxcmds@csuse{#2@idx}{##1}{##2}{}}%
+ }%
+ \idxcmds@csdef{#2@idx@optarg}##1##2[##3]{%
+ \idxcmds@csuse{#2@idx}{##1}{##2}{##3}%
+ }%
+ \newrobustcmd*#2{%
+ \@ifstar
+ {\idxcmds@csuse{#2@star}}
+ {\idxcmds@csuse{#2@nostar}}%
+ }%
+ \idxcmds@newcommand*{#2idx}[2][]{%
+ \ltx@ifnextchar@nospace[% ]
+ {\idxcmds@csuse{#2@idx@optarg}{##1}{##2}}
+ {\idxcmds@csuse{#2@idx}{##1}{##2}{}}%
+ }%
+ \ltx@ifnextchar[% ]
+ {\idxcmds@appdef{#2}}
+ {\idxcmds@appdef{#2}[]}%
+}
+
+% ---------------------------------------------------------------------------
+% \newsubmainidxcmd[<index cmd>]{<cs>}{<formatting specs>}[<app to idx entry>]
+\newrobustcmd\newsubmainidxcmd[3][\idxcmds@default@index]{%
+ \idxcmds@csdef{#2@base}##1{#3}%
+ \idxcmds@csdef{#2@idx}##1##2##3##4{%
+ \ifblank{##1}
+ {%
+ #1{%
+ ##3\idxcmds@subsep##2\idxcmds@sortsep
+ \idxcmds@csuse{#2@base}{##2}%
+ \idxcmds@csuse{#2@idx@app}%
+ ##4%
+ }%
+ }{%
+ #1{%
+ ##3\idxcmds@subsep##1\idxcmds@sortsep
+ \idxcmds@csuse{#2@base}{##2}%
+ \idxcmds@csuse{#2@idx@app}%
+ ##4%
+ }%
+ }%
+ }%
+ \idxcmds@csdef{#2@star}##1{\idxcmds@csuse{#2@base}{##1}}%
+ \idxcmds@csdef{#2@nostar}{%
+ \ltx@ifnextchar[% ]
+ {\idxcmds@csuse{#2@nostar@opt}}
+ {\idxcmds@csuse{#2@nostar@opt}[]}%
+ }%
+ \idxcmds@csdef{#2@nostar@opt}[##1]##2##3{%
+ \idxcmds@csuse{#2@base}{##2}%
+ \ltx@ifnextchar@nospace[% ]
+ {\idxcmds@csuse{#2@idx@optarg}{##1}{##2}{##3}}
+ {\idxcmds@csuse{#2@idx}{##1}{##2}{##3}{}}%
+ }%
+ \idxcmds@csdef{#2@idx@optarg}##1##2##3[##4]{%
+ \idxcmds@csuse{#2@idx}{##1}{##2}{##3}{##4}%
+ }%
+ \newrobustcmd*#2{%
+ \@ifstar
+ {\idxcmds@csuse{#2@star}}
+ {\idxcmds@csuse{#2@nostar}}%
+ }%
+ \idxcmds@newcommand*{#2idx}[3][]{%
+ \idxcmds@csuse{#2@idx}{##1}{##2}{##3}%
+ }%
+ \ltx@ifnextchar[% ]
+ {\idxcmds@appdef{#2}}
+ {\idxcmds@appdef{#2}[]}%
+}
+
+% ---------------------------------------------------------------------------
+% \newsubidxcmd[<index cmd>]{<cs>}{<idx cmd>}{<formatting specs>}[<app to idx entry>]
+% \newsubidxcmd*[<index cmd>]{<cs>}{<main entry>}{<formatting specs>}[<app to idx entry>]
+\newbool{idxcmds@sub@star}
+
+% get main if starred
+\newrobustcmd*\idxcmds@extract@main[2]{%
+ \ltx@ifnextchar[% ]
+ {\idxcmds@extract@main@aux{#1}{#2}}
+ {\idxcmds@extract@main@aux{#1}{#2}[]}%
+}
+\protected\def\idxcmds@extract@main@aux#1#2[#3]#4{%
+ \idxcmds@csdef{#1@main}{\idxcmds@csuse{#2@base}{#4}}%
+ \ifstrempty{#3}
+ {\idxcmds@csdef{#1@main@sort}{#4}}
+ {\idxcmds@csdef{#1@main@sort}{#3}}%
+}
+
+\newcommand*\newsubidxcmd{%
+ \@ifstar
+ {\booltrue{idxcmds@sub@star}\idxcmds@subidx}
+ {\boolfalse{idxcmds@sub@star}\idxcmds@subidx}%
+}
+\newrobustcmd\idxcmds@subidx[4][\idxcmds@default@index]{%
+ \idxcmds@csdef{#2@base}##1{#4}%
+ \ifbool{idxcmds@sub@star}{%
+ \idxcmds@extract@main#2#3%
+ \idxcmds@csdef{#2@idx}##1##2##3{%
+ \ifblank{##1}
+ {%
+ #1{%
+ \idxcmds@csuse{#2@main@sort}\idxcmds@sortsep
+ \idxcmds@csuse{#2@main}%
+ \idxcmds@subsep##2\idxcmds@sortsep
+ \idxcmds@csuse{#2@base}{##2}%
+ \idxcmds@csuse{#2@idx@app}%
+ ##3%
+ }%
+ }{%
+ #1{%
+ \idxcmds@csuse{#2@main@sort}\idxcmds@sortsep
+ \idxcmds@csuse{#2@main}%
+ \idxcmds@subsep##1\idxcmds@sortsep
+ \idxcmds@csuse{#2@base}{##2}%
+ \idxcmds@csuse{#2@idx@app}%
+ ##3%
+ }%
+ }%
+ }%
+ }{%
+ \idxcmds@csdef{#2@idx}##1##2##3{%
+ \ifblank{##1}
+ {%
+ #1{%
+ #3%
+ \idxcmds@subsep##2\idxcmds@sortsep
+ \idxcmds@csuse{#2@base}{##2}%
+ \idxcmds@csuse{#2@idx@app}%
+ ##3%
+ }%
+ }{%
+ #1{%
+ #3%
+ \idxcmds@subsep##1\idxcmds@sortsep
+ \idxcmds@csuse{#2@base}{##2}%
+ \idxcmds@csuse{#2@idx@app}%
+ ##3%
+ }%
+ }%
+ }%
+ }%
+ \idxcmds@csdef{#2@star}##1{\idxcmds@csuse{#2@base}{##1}}%
+ \idxcmds@csdef{#2@nostar}{%
+ \ltx@ifnextchar[% ]
+ {\idxcmds@csuse{#2@nostar@opt}}
+ {\idxcmds@csuse{#2@nostar@opt}[]}%
+ }%
+ \idxcmds@csdef{#2@nostar@opt}[##1]##2{%
+ \idxcmds@csuse{#2@base}{##2}%
+ \ltx@ifnextchar@nospace[% ]
+ {\idxcmds@csuse{#2@idx@optarg}{##1}{##2}}
+ {\idxcmds@csuse{#2@idx}{##1}{##2}{}}%
+ }%
+ \idxcmds@csdef{#2@idx@optarg}##1##2[##3]{%
+ \idxcmds@csuse{#2@idx}{##1}{##2}{##3}%
+ }%
+ \newrobustcmd*#2{%
+ \@ifstar
+ {\idxcmds@csuse{#2@star}}
+ {\idxcmds@csuse{#2@nostar}}%
+ }%
+ \idxcmds@newcommand*{#2idx}[2][]{%
+ \idxcmds@csuse{#2@idx}{##1}{##2}%
+ }%
+ \ltx@ifnextchar[% ]
+ {\idxcmds@appdef{#2}}
+ {\idxcmds@appdef{#2}[]}%
+}
+
+\endinput
+% --------------------------------------------------------------------------
+% HISTORY:
+2012/11/02 v0.1 - first working version
+2013/04/11 v0.1a - made \newidxcmd, \newsubmainidxcmd and \newsubidxcmd robust
+2013/04/16 v0.2 - added trailing optional argument to defined commands
+ that allows appending stuff to the index entry at use-time
+2013/05/14 v0.2a - added \setidxcmds
+2013/08/31 v0.2b - added option `idx-cmd'
+2015/08/13 v0.2c - removed spurious space, minor code changes