summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/lexref/lexref.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-12-05 00:09:12 +0000
committerKarl Berry <karl@freefriends.org>2013-12-05 00:09:12 +0000
commitff27a4afbbe5da5f18f62fc47cce84e746c8ce6c (patch)
tree97d0d3b63e4cdbf1495bdd35bf68af5988bfe657 /Master/texmf-dist/tex/latex/lexref/lexref.sty
parent1f584cd4b06d66903c0ff82dcd1a7f03066a081d (diff)
lexref (4dec13)
git-svn-id: svn://tug.org/texlive/trunk@32323 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/lexref/lexref.sty')
-rw-r--r--Master/texmf-dist/tex/latex/lexref/lexref.sty433
1 files changed, 433 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/lexref/lexref.sty b/Master/texmf-dist/tex/latex/lexref/lexref.sty
new file mode 100644
index 00000000000..3a91e00d712
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/lexref/lexref.sty
@@ -0,0 +1,433 @@
+%------------ identification --------------
+\ProvidesPackage{lexref}[2013/12/03 v1.0a]%
+\NeedsTeXFormat{LaTeX2e}%
+%------------ package loading --------------
+\RequirePackage{etoolbox}%
+\RequirePackage{xargs}%
+\RequirePackage{xstring}%
+\RequirePackage{nomencl}%
+\RequirePackage{splitidx}%
+%------------ initial code --------------
+% Toggle and counter creation
+\newtoggle{lexnoprint}
+\newtoggle{lexindexing}
+\newtoggle{lexnomencl}
+\newtoggle{lexpluralform}
+\newtoggle{lexaltoverride}
+\newtoggle{lexshortcutstolist}
+\newtoggle{lexrefCHfr}
+\newtoggle{lexrefCHde}
+\newtoggle{lexrefDE}
+\newcounter{lexcitecountinteger}
+% Error messages setting
+\newcommand{\lexcite@err@invalidthirdarg@DeclareLex}{\PackageError{lexref}{%
+Third argument of \protect\DeclareLex\space must
+be either 'alt' or nothing. Check your \protect\DeclareCite\space macros}}
+%------------ declaration of options --------------
+\DeclareOption{noprint}{\toggletrue{lexnoprint}}
+\DeclareOption{indexing}{\toggletrue{lexindexing}\makeindex}
+\DeclareOption{nomencl}{\toggletrue{lexnomencl}\robustify{\nomenclature}\makenomenclature}
+\DeclareOption{shortcutstolist}{\toggletrue{lexshortcutstolist}\makenomenclature}
+\DeclareOption{CHfr}{\toggletrue{lexrefCHfr}}
+\DeclareOption{CHde}{\toggletrue{lexrefCHde}}
+\DeclareOption{DE}{\toggletrue{lexrefDE}}
+%------------ execution of options --------------
+\ProcessOptions
+%------------ main code --------------
+% DEFINITION OF LITERAL PREFIXES AND SHORTCUTS
+\newcommandx{\NewLexShortcut}[3][3]{%
+\ifdef{#1}{% This test makes sure an already defined command is overrided, ensuring the nomenclature tests will work properly
+\renewrobustcmd{#1}{#2%
+\iftoggle{lexshortcutstolist}{% Entry in nomenclature, if option activated and #3 defined.
+ \ifstrempty{#3}%
+ {}%
+ {\ifcsdef{nomalreadydef#2}% Nomencl crashes if the same act is already passed to \nomenclature in another page, so this test ensures it won't be passed more than once
+ {}%
+ {%
+ \nomenclature{#2}{#3}%
+ \expandafter\newcommand\csname nomalreadydef#2\endcsname\relax%
+ }%
+ }%
+ }%
+ {}%
+}}%
+{%
+\newrobustcmd{#1}{#2%
+\iftoggle{lexshortcutstolist}{% Entry in nomenclature, if option activated and #3 defined.
+ \ifstrempty{#3}%
+ {}%
+ {\ifcsdef{nomalreadydef#2}% Nomencl crashes if the same act is already passed to \nomenclature in another page, so this test ensures it won't be passed more than once
+ {}%
+ {%
+ \nomenclature{#2}{#3}%
+ \expandafter\newcommand\csname nomalreadydef#2\endcsname\relax%
+ }%
+ }%
+ }%
+ {}%
+}}%
+}%
+% Following shortcuts may be redefined using \RenewLexShortcut
+\newcommandx{\RenewLexShortcut}[3][3]{%
+\renewrobustcmd{#1}{#2%
+\iftoggle{lexshortcutstolist}{% Entry in nomenclature, if option activated and #3 defined.
+ \ifstrempty{#3}%
+ {}%
+ {\ifcsdef{nomalreadydef#2}% Nomencl crashes if the same act is already passed to \nomenclature in another page, so this test ensures it won't be passed more than once
+ {}%
+ {%
+ \nomenclature{#2}{#3}%
+ \expandafter\newcommand\csname nomalreadydef#2\endcsname\relax%
+ }%
+ }%
+ }%
+ {}%
+}}
+% Default shortcuts: english
+\NewLexShortcut{\DispPrefixMain}{art.}[article(s)]%
+\NewLexShortcut{\DispsPrefixMain}{art.}%
+\NewLexShortcut{\DispPrefixAlt}{\S}%
+\NewLexShortcut{\DispsPrefixAlt}{\S\S}%
+\NewLexShortcut{\SubPrefix}{par.}[paragraph(s)]
+\NewLexShortcut{\SubSubPrefixNumber}{nr.}[number(s)]
+\NewLexShortcut{\SubSubPrefixLetter}{let.}[letter(s)]
+\NewLexShortcut{\sq}{sq.}[sequiturque]
+\NewLexShortcut{\sqq}{sqq.}[sequunturque]
+\NewLexShortcut{\analog}{by an.}[by analogy]
+% french shortcuts
+\iftoggle{lexrefCHfr}{%
+\RenewLexShortcut{\DispPrefixMain}{art.}[article(s)]%
+\RenewLexShortcut{\DispsPrefixMain}{art.}%
+\RenewLexShortcut{\DispPrefixAlt}{\S}%
+\RenewLexShortcut{\DispsPrefixAlt}{\S\S}%
+\RenewLexShortcut{\SubPrefix}{al.}[alin\'ea(s)]
+\RenewLexShortcut{\SubSubPrefixNumber}{ch.}[chiffre(s)]
+\RenewLexShortcut{\SubSubPrefixLetter}{let.}[lettre(s)]
+\RenewLexShortcut{\sq}{s.}[et suivant(e)]
+\RenewLexShortcut{\sqq}{ss}[et suivant(e)s]
+\RenewLexShortcut{\analog}{p. an.}[par analogie]
+\renewrobustcmd{\nomname}{Abr\'eviations}
+}{}
+% german CH shortcuts
+\iftoggle{lexrefCHde}{%
+\RenewLexShortcut{\DispPrefixMain}{Art.}[Artikel]%
+\RenewLexShortcut{\DispsPrefixMain}{Art.}%
+\RenewLexShortcut{\DispPrefixAlt}{\S}%
+\RenewLexShortcut{\DispsPrefixAlt}{\S\S}%
+\RenewLexShortcut{\SubPrefix}{Abs.}[Absatz, -\"{ }e]
+\RenewLexShortcut{\SubSubPrefixNumber}{Ziff.}[Ziffer(n)]
+\RenewLexShortcut{\SubSubPrefixLetter}{lit.}[litera]
+\RenewLexShortcut{\sq}{f.}[und die folgende]
+\RenewLexShortcut{\sqq}{ff.}[und die folgenden]
+\RenewLexShortcut{\analog}{analog}
+\renewrobustcmd{\nomname}{Abk\"urzungen}
+}{}
+% german DE shortcuts
+\iftoggle{lexrefDE}{%
+\RenewLexShortcut{\DispPrefixMain}{\S}%
+\RenewLexShortcut{\DispsPrefixMain}{\S\S}%
+\RenewLexShortcut{\DispPrefixAlt}{Art.}[Artikel]%
+\RenewLexShortcut{\DispsPrefixAlt}{Art.}%
+\RenewLexShortcut{\SubPrefix}{Abs.}[Absatz, -\"{ }e]
+\RenewLexShortcut{\SubSubPrefixNumber}{Ziff.}[Ziffer(n)]
+\RenewLexShortcut{\SubSubPrefixLetter}{lit.}[litera]
+\RenewLexShortcut{\sq}{f.}[und die folgende]
+\RenewLexShortcut{\sqq}{ff.}[und die folgenden]
+\RenewLexShortcut{\analog}{analog}
+\renewrobustcmd{\nomname}{Abk\"urzungen}
+}{}
+% Latin shortcuts
+\NewLexShortcut{\bis}{$^{bis}$}
+\NewLexShortcut{\ter}{$^{ter}$}
+\NewLexShortcut{\quater}{$^{quater}$}
+\NewLexShortcut{\quinquies}{$^{quinquies}$}
+\NewLexShortcut{\sexies}{$^{sexies}$}
+\NewLexShortcut{\septies}{$^{septies}$}
+\NewLexShortcut{\octies}{$^{octies}$}
+\NewLexShortcut{\nonies}{$^{nonies}$}
+
+% FRONT-END USER INTERFACE
+
+ % #1 = Act abbr.
+ % #2 = Act full name
+ % #3 = alt option
+
+\newcommandx{\DeclareLex}[3][2,3]{%
+\protecting{%
+% 1) Creation of \newindex, if needed
+\iftoggle{lexindexing}{\newindex[#2]{#1}}{}%
+% 2) Creation of \#1 command
+\expandafter\newcommandx\csname#1\endcsname[4][2,3,4]{%
+\ifstrempty{#3}{\togglefalse{lexaltoverride}}{\ifstrequal{#3}{alt}{\toggletrue{lexaltoverride}}{\lexcite@err@invalidthirdarg@DeclareLex}}%Checking whether #3 is blank or set to 'alt', else: error
+\iftoggle{lexnoprint}{}{\LexRef{#1}{##1}[##2][##3][##4]}% Printing, unless noprint option activated
+\iftoggle{lexnomencl}{% Entry in nomenclature, if option activated and #2 defined.
+ \ifstrempty{#2}%
+ {}%
+ {\ifcsdef{nomalreadydef#1}% Nomencl crashes if the same act is already passed to \nomenclature in another page, so this test ensures it won't be passed more than once
+ {}%
+ {%
+ \nomenclature{#1}{#2}%
+ \expandafter\newcommand\csname nomalreadydef#1\endcsname\relax}%
+ }%
+ }%
+ {}%
+\iftoggle{lexindexing}{\LexIndex{#1}{##1}[##2][##3][##4]}{}% Indexing, if option activated
+}%
+% 3) Creation of \#1ns command
+\expandafter\newcommandx\csname #1ns\endcsname[4][2,3,4]{%
+\ifstrempty{#3}{\togglefalse{lexaltoverride}}{\ifstrequal{#3}{alt}{\toggletrue{lexaltoverride}}{\lexcite@err@invalidthirdarg@DeclareLex}}%Checking whether #3 is blank or set to 'alt', else: error
+\iftoggle{lexnoprint}{}{\LexRefns{#1}{##1}[##2][##3][##4]}% Printing, unless noprint option activated
+\iftoggle{lexindexing}{\LexIndex{#1}{##1}[##2][##3][##4]}{}% Indexing, if option activated
+}%
+% 4) Creation of \np#1 command
+\expandafter\newcommandx\csname np#1\endcsname[4][2,3,4]{%
+\iftoggle{lexnoprint}{}{\npLexRef{#1}{##1}[##2][##3][##4]}% Printing, unless noprint option activated
+\iftoggle{lexnomencl}{% Entry in nomenclature, if option activated and #2 defined.
+ \ifstrempty{#2}%
+ {}%
+ {\ifcsdef{nomalreadydef#1}% Nomencl crashes if the same act is already passed to \nomenclature in another page, so this test ensures it won't be passed more than once
+ {}%
+ {%
+ \nomenclature{#1}{#2}%
+ \expandafter\newcommand\csname nomalreadydef#1\endcsname\relax}%
+ }%
+ }%
+ {}%
+\iftoggle{lexindexing}{\LexIndex{#1}{##1}[##2][##3][##4]}{}% Indexing, if option activated
+}%
+% 5) Creation of \np#1ns command
+\expandafter\newcommandx\csname np#1ns\endcsname[4][2,3,4]{%
+\iftoggle{lexnoprint}{}{\npLexRefns{#1}{##1}[##2][##3][##4]}% Printing, unless noprint option activated
+\iftoggle{lexindexing}{\LexIndex{#1}{##1}[##2][##3][##4]}{}% Indexing, if option activated
+}%
+% 6) Creation of \idx#1 command
+\iftoggle{lexindexing}{\expandafter\newcommandx\csname idx#1\endcsname[4][2,3,4]{%
+\LexIndex{#1}{##1}[##2][##3][##4]}}{}% Indexing, if option activated
+}}
+
+% PRINTING MACROS
+
+\newrobustcmd{\LexRefPrefixTests}[1]{%
+% Testing if singular or plural profix needed
+\IfSubStr{#1}{\sq}% First testing if string contains \sq or \sqq
+ {\toggletrue{lexpluralform}}% if yes, plural form
+ {% else
+ \IfSubStr{#1}{-}% testing if string contains a dash
+ {\toggletrue{lexpluralform}}% if yes, plural form
+ {% else
+ \IfSubStr{#1}{,}% testing if string contains a comma
+ {\toggletrue{lexpluralform}}% if yes, plural form
+ {\togglefalse{lexpluralform}}% else singular form
+ }%
+ }%
+% Printing MAIN or ALT Prefix depending on lexaltoverride, and singular/plural depending on previous test
+\iftoggle{lexpluralform}%
+ {\iftoggle{lexaltoverride}%
+ {\DispsPrefixAlt}%
+ {\DispsPrefixMain}%
+ }%
+ {\iftoggle{lexaltoverride}%
+ {\DispPrefixAlt}%
+ {\DispPrefixMain}%
+ }%
+}
+
+% Macro with prefix and suffix
+\newcommandx{\LexRef}[5][3,4,5]{%
+\LexRefPrefixTests{#2} %
+#2%
+\ifstrempty{#3}{}{ \SubPrefix{} #3}%
+\ifstrempty{#4}{}{ \SubSubPrefixNumber{} #4}%
+\ifstrempty{#5}{}{ \SubSubPrefixLetter{} #5}%
+{} #1%
+}
+
+% Macro with prefix, without suffix
+\newcommandx{\LexRefns}[5][3,4,5]{%
+\LexRefPrefixTests{} %
+#2%
+\ifstrempty{#3}{}{ \SubPrefix{} #3}%
+\ifstrempty{#4}{}{ \SubSubPrefixNumber{} #4}%
+\ifstrempty{#5}{}{ \SubSubPrefixLetter{} #5}%
+}
+
+% Macro without prefix, with suffix
+\newcommandx{\npLexRef}[5][3,4,5]{%
+#2%
+\ifstrempty{#3}{}{ \SubPrefix{} #3}%
+\ifstrempty{#4}{}{ \SubSubPrefixNumber{} #4}%
+\ifstrempty{#5}{}{ \SubSubPrefixLetter{} #5}%
+{} #1%
+}
+
+% Macro without prefix nor suffix
+\newcommandx{\npLexRefns}[5][3,4,5]{%
+#2%
+\ifstrempty{#3}{}{ \SubPrefix{} #3}%
+\ifstrempty{#4}{}{ \SubSubPrefixNumber{} #4}%
+\ifstrempty{#5}{}{ \SubSubPrefixLetter{} #5}%
+}
+
+
+% INDEXING MACRO
+
+\newcommandx{\LexIndex}[5][3,4,5]{%
+% 1) First cleaning
+\noexpandarg%
+\IfSubStr{#2}{\sq}% Test \sq
+ {\StrBefore{#2}{\sq}[\lexciteindextempone]\fullexpandarg\StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]\noexpandarg}% if true, take everything before and remove the space
+ {% else
+ \IfSubStr{#2}{\sqq}% Test \sqq
+ {\StrBefore{#2}{\sqq}[\lexciteindextempone]\fullexpandarg\StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]\noexpandarg}% if true, take everything before and remove the space
+ {%
+ \IfSubStr{#2}{-}% Test dash
+ {\StrBefore{#2}{-}[\lexciteindextempone]}% if true, take everything before
+ {\ifdef{\lexciteindextempone}{\renewcommand{\lexciteindextempone}{#2}}{\newcommand{\lexciteindextempone}{#2}}}
+ }%
+ }% else take everything
+% 2) Second cleaning
+\fullexpandarg%
+\IfInteger{\lexciteindextempone}% Test if integer
+ {}% if true do nothing
+ {% else
+ \StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]% delete last char in string
+ \IfInteger{\lexciteindextempone}
+ {}% if true do nothing
+ {% else
+ \StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]% delete last char in string
+ \IfInteger{\lexciteindextempone}
+ {}%
+ {% else
+ \StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]% delete last char in string
+ \IfInteger{\lexciteindextempone}
+ {}%
+ {% else
+ \StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]% delete last char in string
+ \IfInteger{\lexciteindextempone}
+ {}%
+ {% else
+ \StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]% delete last char in string
+ \IfInteger{\lexciteindextempone}
+ {}%
+ {% else
+ \StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]% delete last char in string
+ \IfInteger{\lexciteindextempone}
+ {}%
+ {% else
+ \StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]% delete last char in string
+ \IfInteger{\lexciteindextempone}
+ {}%
+ {% else
+ \StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]% delete last char in stringe
+ \IfInteger{\lexciteindextempone}
+ {}%
+ {% else
+ \StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]% delete last char in string
+ \IfInteger{\lexciteindextempone}
+ {}%
+ {% else
+ \StrGobbleRight{\lexciteindextempone}{1}[\lexciteindextempone]% delete last char in string
+ \IfInteger{\lexciteindextempone}
+ {}%
+ {}%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
+% 3) Counting the cleaned integer
+\StrLen{\lexciteindextempone}[\lexciteindextemptwo]%
+% 4) Proper indexation, sorting (1, 10, 100 or 1000) depending of integer length (1, 2, 3, 4) and of opt args of each entry
+\ifdefstring{\lexciteindextemptwo}{1}% integer length = 1
+ {\ifboolexpr{% if #3, #4 and #5 are defined
+ not test {\ifstrempty{#3}}%
+ and%
+ not test {\ifstrempty{#4}}%
+ and%
+ not test {\ifstrempty{#5}}%
+ }%
+ {\sindex[#1]{1@#1 #2!-- \SubPrefix{} #3}}% index only takes #3 as subentry
+ {%
+ \sindex[#1]{1@#1 #2% else: indexing everything
+ \ifstrempty{#3}{}{!-- \SubPrefix{} #3}%
+ \ifstrempty{#4}{}{!-- \SubSubPrefixNumber{} #4}%
+ \ifstrempty{#5}{}{!-- \SubSubPrefixLetter{} #5}%
+ }}%
+ }%
+ {\ifdefstring{\lexciteindextemptwo}{2}% integer length = 2
+ {\ifboolexpr{% if #3, #4 and #5 are defined
+ not test {\ifstrempty{#3}}%
+ and%
+ not test {\ifstrempty{#4}}%
+ and%
+ not test {\ifstrempty{#5}}%
+ }%
+ {\sindex[#1]{10@#1 #2!-- \SubPrefix{} #3}}% index only takes #3 as subentry
+ {%
+ \sindex[#1]{10@#1 #2% else: indexing everything
+ \ifstrempty{#3}{}{!-- \SubPrefix{} #3}%
+ \ifstrempty{#4}{}{!-- \SubSubPrefixNumber{} #4}%
+ \ifstrempty{#5}{}{!-- \SubSubPrefixLetter{} #5}%
+ }}%
+ }%
+ {\ifdefstring{\lexciteindextemptwo}{3}% integer length = 3
+ {\ifboolexpr{% if #3, #4 and #5 are defined
+ not test {\ifstrempty{#3}}%
+ and%
+ not test {\ifstrempty{#4}}%
+ and%
+ not test {\ifstrempty{#5}}%
+ }%
+ {\sindex[#1]{100@#1 #2!-- \SubPrefix{} #3}}% index only takes #3 as subentry
+ {%
+ \sindex[#1]{100@#1 #2% else: indexing everything
+ \ifstrempty{#3}{}{!-- \SubPrefix{} #3}%
+ \ifstrempty{#4}{}{!-- \SubSubPrefixNumber{} #4}%
+ \ifstrempty{#5}{}{!-- \SubSubPrefixLetter{} #5}%
+ }}%
+ }%
+ {\ifdefstring{\lexciteindextemptwo}{4}% integer length = 4
+ {\ifboolexpr{% if #3, #4 and #5 are defined
+ not test {\ifstrempty{#3}}%
+ and%
+ not test {\ifstrempty{#4}}%
+ and%
+ not test {\ifstrempty{#5}}%
+ }%
+ {\sindex[#1]{1000@#1 #2!-- \SubPrefix{} #3}}% index only takes #3 as subentry
+ {%
+ \sindex[#1]{1000@#1 #2% else: indexing everything
+ \ifstrempty{#3}{}{!-- \SubPrefix{} #3}%
+ \ifstrempty{#4}{}{!-- \SubSubPrefixNumber{} #4}%
+ \ifstrempty{#5}{}{!-- \SubSubPrefixLetter{} #5}%
+ }}%
+ }%
+ {\ifdefstring{\lexciteindextemptwo}{5}% integer length = 5
+ {\ifboolexpr{% if #3, #4 and #5 are defined
+ not test {\ifstrempty{#3}}%
+ and%
+ not test {\ifstrempty{#4}}%
+ and%
+ not test {\ifstrempty{#5}}%
+ }%
+ {\sindex[#1]{10000@#1 #2!-- \SubPrefix{} #3}}% index only takes #3 as subentry
+ {%
+ \sindex[#1]{10000@#1 #2% else: indexing everything
+ \ifstrempty{#3}{}{!-- \SubPrefix{} #3}%
+ \ifstrempty{#4}{}{!-- \SubSubPrefixNumber{} #4}%
+ \ifstrempty{#5}{}{!-- \SubSubPrefixLetter{} #5}%
+ }}%
+ }%
+ {}%
+ }%
+ }%
+ }%
+ }%
+}
+
+\endinput \ No newline at end of file