summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/glosmathtools/glosmathtools.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/glosmathtools/glosmathtools.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/glosmathtools/glosmathtools.sty')
-rw-r--r--macros/latex/contrib/glosmathtools/glosmathtools.sty413
1 files changed, 413 insertions, 0 deletions
diff --git a/macros/latex/contrib/glosmathtools/glosmathtools.sty b/macros/latex/contrib/glosmathtools/glosmathtools.sty
new file mode 100644
index 0000000000..c117579d29
--- /dev/null
+++ b/macros/latex/contrib/glosmathtools/glosmathtools.sty
@@ -0,0 +1,413 @@
+% !TeX spellcheck = en_US
+% !TeX encoding = UTF-8
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{glosmathtools}%
+[%
+2019/08/02 v0.5.1 %
+Mathematical nomenclature tools based on glossaries package %
+Francis Gagnon %
+]%
+\RequirePackage{amsmath,amsfonts,etoolbox}%
+
+% ===========================================================================
+% =================== PACKAGE OPTIONS =======================================
+% ===========================================================================
+% define char <"> as shortcut for "sbu" macro in math mode
+% and define qtmark macro to show the quotation mark character
+\DeclareOption{qtmarkupright}{%
+ \begingroup\lccode`~=`"\lowercase{\endgroup\def~}#1{\sbu{#1}}%
+ \mathchardef\qtmark=\mathcode`"\AtBeginDocument{\mathcode`"=\string"8000}%
+}%
+
+% single lineskip nomenclature (memoir/setspace package required)
+\newtoggle{glosmath@singlelineskip}%
+\DeclareOption{singlelineskip}{\toggletrue{glosmath@singlelineskip}}%
+
+%% using opperators/accents without nomenclature definitions
+\newtoggle{glosmath@nodefop}%
+\DeclareOption{nodefop}{\toggletrue{glosmath@nodefop}}%
+
+%% other options are passed to glossaires package
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{glossaries}}%
+
+\ProcessOptions\relax%
+% noredefwarn to supress warnings with memoir class redifintion
+\RequirePackage[noredefwarn]{glossaries}%
+
+% checkup if memoir or setspace is loaded with singlelineskip option
+\iftoggle{glosmath@singlelineskip}{%
+ \@ifclassloaded{memoir}{\relax}{%
+ \@ifpackageloaded{setspace}{\relax}{%
+ \PackageError{glosmathtools}%
+ {memoir class ot setspace package must be %
+ loaded for singlelineskip option}{}%
+ }%
+ }%
+}%
+
+% ===========================================================================
+% =================== PUBLIC MACROS =========================================
+% ===========================================================================
+% ---------- sbu -------------------------------------------------------
+% "sbu" macro : shortcut for upright indices (ISO/NIST standard
+% operatorfont for main document math font (serif or sans)
+\newcommand*{\sbu}[1]{_{\operatorfont{#1}}}%
+
+% ---------- newglosentrymath --------------------------------------------
+% new glossary entry by adding ensuremath macro in the name field
+% 3 arguments : glossary label, math symbol and {key=value list}
+\newcommand*{\newglosentrymath}[3]%
+{%
+ \newglossaryentry{#1}{name={\ensuremath{#2}},#3}%
+}%
+
+% ---------- glscatnamefmt ------------------------------------------------
+% symbol category title format, default to glstreenamefmt
+% redefine to change the format style
+\newcommand*{\glscatnamefmt}[1]{\glstreenamefmt{#1}}
+
+% ---------- glsac --------------------------------------------------------
+% show $a$ with optionnal argument for accents
+\newcommand*{\glsac}[2][]%
+{%
+ \glosmath@getMyGlsMacro{#1}%
+ \ensuremath{\glsdisp{#2}{\glosmath@MyGlsMacro{#2}}}%
+}%
+
+% ---------- glsvi -------------------------------------------------------
+% show $a_b$ with link to "a" and variable "b"
+% 4 arguments : 2 mandatory arguments and optional 1st and 2nd argument
+% for adding accent on "a" and "b"
+\newcommand*{\glsvi}[1][]%
+{%
+ \def\glosmath@ArgI{#1}%
+ \glosmath@glsviRelay%
+}%
+
+% ---------- glsub -------------------------------------------------------
+% show $a_b$ with link to "a" and subscript "sub.b"
+% 3 arguments : 2 mandatory arguments and optional 1st argument
+% for adding accents on "a"
+\newcommand*{\glsub}[3][]%
+{%
+ \glosmath@getMyGlsMacro{#1}%
+ \ensuremath{\glsdisp{#2}{\glosmath@MyGlsMacro{#2}_{\gls{sub.#3}}}}%
+}%
+
+% ---------- glsubs -------------------------------------------------------
+% show $a_{b,c}$ with link "a", "sub.b" and "sub.c"
+% 4 arguments : 4 mandatory arguments and optional 1st argument
+% for adding accents on "a" (dot,bar,hat or tilde)
+\newcommand*{\glsubs}[4][]%
+{%
+ \glosmath@getMyGlsMacro{#1}%
+ \nottoggle{glosmath@nodefop}{\glsadd{op.comma}}{}%
+ \ensuremath{%
+ \glsdisp{#2}{%
+ \glosmath@MyGlsMacro{#2}_{\gls{sub.#3},\gls{sub.#4}}%
+ }%
+ }%
+}%
+
+% ---------- glslang -----------------------------------------------------
+% show full accronyms definition in specified languages
+\newcommand*{\glslang}[2][]%
+{%
+ \let\glosmath@oldacrlang\glosmath@acrlang%
+ \notblank{#1}{\setacronymlang{#1}}{}%
+ \gls{#2}%
+ \expandafter\setacronymlang\expandafter{\glosmath@oldacrlang}%
+}%
+
+% ---------- setacronymlang -----------------------------------------------
+% set accronym definition to specified language(s)
+\newcommand*{\setacronymlang}[1]%
+{%
+ \ifstrequal{#1}{L1}{\glosmath@setLone}%
+ {%
+ \ifstrequal{#1}{L2}{\glosmath@setLtwo}%
+ {%
+ \ifstrequal{#1}{L1L2}{\glosmath@setLoneLtwo}%
+ {%
+ \ifstrequal{#1}{L2L1}{\glosmath@setLtwoLone}%
+ {%
+ \PackageError{glosmathtools}{Unknown accronym language: #1}{}%
+ }}}}%
+}%
+
+% ===========================================================================
+% =================== PUBLIC ENVIRONMENTS ===================================
+% ===========================================================================
+
+% --------------- acronymlang -----------------------------------------------
+% environment similar to setacronymlang macro
+\newenvironment{acronymlang}[1]%
+{%
+ \let\glosmath@oldacrlang\glosmath@acrlang%
+ \setacronymlang{#1}%
+}{\expandafter\setacronymlang\expandafter{\glosmath@oldacrlang}}%
+
+% ===========================================================================
+% =================== GLOSSARIES STYLES =====================================
+% ===========================================================================
+
+% ---------- main language nomenclature style -------------------------------
+\newglossarystyle{nomencl}{\setglossarystyle{glosmath@glostyle}}%
+% ---------- main language style (synonym) ----------------------------------
+\newglossarystyle{nomencl-L1}{\setglossarystyle{glosmath@glostyle}}%
+% ---------- second language nomenclature style -----------------------------
+\newglossarystyle{nomencl-L2}{\setglossarystyle{glosmath@glostyle}%
+ \renewcommand*{\glosstyledesc}[1]{\glsentrydescsec{##1}}}%
+% ------ bilingual nomenclature style : descseclan (description) ------------
+\newglossarystyle{nomencl-L1L2}{\setglossarystyle{glosmath@glostyle}%
+ \renewcommand*{\glosstyledesc}[1]%
+ {\glsentrydesc{##1}\space(\textit{\glsentrydescsec{##1}})}}%
+% ------ bilingual nomenclature style : description (descseclan) ------------
+\newglossarystyle{nomencl-L2L1}{\setglossarystyle{glosmath@glostyle}%
+ \renewcommand*{\glosstyledesc}[1]%
+ {\glsentrydescsec{##1}\space(\textit{\glsentrydesc{##1}})}}%
+
+% ===========================================================================
+% =================== GLOSSARIES KEYS =======================================
+% ===========================================================================
+
+% ---------- second language description key -------------------------------
+\glsaddkey{descseclang}{% default value :
+ {\color{red}no second description at \texttt{descseclang}}%
+}{\glsentrydescsec}{\Glsentrydescsec}{\glsdescsec}{\Glsdescsec}{\GLSdescsec}%
+
+% ---------- dot accent key ------------------------------------------------
+\glsaddstoragekey*{dot}{% default value :
+ \nottoggle{glosmath@nodefop}{\glsadd{op.dot}}{}%
+ \ensuremath{\dot{\glsentrytext{\glslabel}}}%
+}{\glsentrydot}%
+% ---------- ddot accent key -----------------------------------------------
+\glsaddstoragekey*{ddot}{% default value :
+ \nottoggle{glosmath@nodefop}{\glsadd{op.ddot}}{}%
+ \ensuremath{\ddot{\glsentrytext{\glslabel}}}%
+}{\glsentryddot}%
+% ---------- bar accent key ------------------------------------------------
+\glsaddstoragekey*{bar}{% default value :
+ \nottoggle{glosmath@nodefop}{\glsadd{op.bar}}{}%
+ \ensuremath{\bar{\glsentrytext{\glslabel}}}%
+}{\glsentrybar}%
+% ---------- hat accent key ------------------------------------------------
+\glsaddstoragekey*{hat}{% default value :
+ \nottoggle{glosmath@nodefop}{\glsadd{op.hat}}{}%
+ \ensuremath{\widehat{\glsentrytext{\glslabel}}}%
+}{\glsentryhat}%
+% ---------- vec accent key ------------------------------------------------
+\glsaddstoragekey*{vec}{% default value :
+ \nottoggle{glosmath@nodefop}{\glsadd{op.vec}}{}%
+ \ensuremath{\vec{\glsentrytext{\glslabel}}}%
+}{\glsentryvec}%
+% ---------- tilde accent key ----------------------------------------------
+\glsaddstoragekey*{tilde}{% default value :
+ \nottoggle{glosmath@nodefop}{\glsadd{op.tilde}}{}%
+ \ensuremath{\widetilde{\glsentrytext{\glslabel}}}%
+}{\glsentrytilde}%
+
+% ===========================================================================
+% =================== PRIVATE STUFF =========================================
+% ===========================================================================
+
+% ---------- nomenclature base style ----------------------------------------
+\newcounter{glosmath@mainEntryCtr}%
+\newlength{\glosmath@curNameLen}%
+\newcommand*{\glosstyledesc}[1]{}%
+\newglossarystyle{glosmath@glostyle}%
+{%
+ \setglossarystyle{alttree}% based on alttree style
+ \renewenvironment{theglossary}%
+ {%
+ \let\glosmath@oldparskip\parskip%
+ \setlength{\parskip}{0pt}%
+ \let\glosmath@oldparindent\parindent%
+ \setlength{\parindent}{0pt}%
+ }%
+ {%
+ \setlength{\parskip}{\glosmath@oldparskip}%
+ \setlength{\parindent}{\glosmath@oldparindent}%
+ }%
+ \renewcommand*{\glossaryheader}%
+ {%
+ \iftoggle{glosmath@singlelineskip}{%
+ \ifdefined\SingleSpacing\SingleSpacing\fi% memoir class
+ \ifdefined\singlespacing\singlespacing\fi% setspace package
+ }{}%
+ }%
+ \setcounter{glosmath@mainEntryCtr}{0}%
+ \setlength{\glosmath@curNameLen}{\glstreeindent}%
+ % desc in all languages of the style (default to main language only) :
+ \renewcommand*{\glosstyledesc}[1]{\glsentrydesc{##1}}%
+ \renewcommand*{\glossentry}[2]%
+ {%
+ \ifnum\value{glosmath@mainEntryCtr}>0\leavevmode\par\fi%
+ \glstarget{##1}{\glscatnamefmt{\glosstyledesc{##1}}}%
+ \par\nopagebreak%
+ \stepcounter{glosmath@mainEntryCtr}%
+ }%
+ \renewcommand*{\subglossentry}[3]%
+ {%
+ \settowidth{\glstreeindent}{\@glswidestname\glstreepredesc}%
+ \hangindent\glstreeindent%
+ \settowidth{\glosmath@curNameLen}{\glossentryname{##2}\glstreepredesc}%
+ % larger namebox for entries longer than @glswidestname :
+ \ifdimgreater{\glosmath@curNameLen}{\glstreeindent}{%
+ \setlength{\glstreeindent}{\glosmath@curNameLen}}{}%
+ \glstreenamebox{\glstreeindent}{%
+ \glstarget{##2}{\glossentryname{##2}}%
+ }%
+ \glosstyledesc{##2}%
+ \ifglshassymbol{##2}{,\space\glossentrysymbol{##2}}{}%
+ \par%
+ }%
+}%
+
+% ---------- accronyms base style ----------------------------------------
+\newcommand*{\glosmath@acrlang}{}%
+\newcommand*{\glosmath@acrmain}[1]{}%
+\newcommand*{\glosmath@Acrmain}[1]{}%
+\newcommand*{\glosmath@acrmainpl}[1]{}%
+\newcommand*{\glosmath@Acrmainpl}[1]{}%
+\newcommand*{\glosmath@acrpar}[1]{}%
+\newcommand*{\glosmath@Acrpar}[1]{}%
+\newcommand*{\glosmath@acrparpl}[1]{}%
+\newcommand*{\glosmath@Acrparpl}[1]{}%
+\newacronymstyle{glosmath@acrstyle}%
+{\GlsUseAcrEntryDispStyle{long-short}}% based on long-short disp style
+{%
+ % --- my custom macros for styles -------
+ \glosmath@setLone% default to main language
+ % --- glossaries standard macro redefinitions ---
+ % Singular, no case change:
+ \renewcommand*{\genacrfullformat}[2]{%
+ \glosmath@acrmain{##1}##2\space(\glosmath@acrpar{##1})%
+ }%
+ % Singular, first letter upper case:
+ \renewcommand*{\Genacrfullformat}[2]{%
+ \glosmath@Acrmain{##1}##2\space(\glosmath@Acrpar{##1})%
+ }%
+ % Plural, no case change:
+ \renewcommand*{\genplacrfullformat}[2]{%
+ \glosmath@acrmainpl{##1}##2\space(\glosmath@acrparpl{##1})%
+ }%
+ % Plural, first letter upper case:
+ \renewcommand*{\Genplacrfullformat}[2]{%
+ \glosmath@Acrmainpl{##1}##2\space(\glosmath@Acrparpl{##1})%
+ }%
+}%
+
+% ---------- glosmath@getMyGlsMacro -----------------------------------------
+\newcommand*{\glosmath@getMyGlsMacro}[1]%
+{%
+ \let\glosmath@MyGlsMacro\glsentrytext%
+ \notblank{#1}%
+ {%
+ \ifstrequal{#1}{dot}{\let\glosmath@MyGlsMacro\glsentrydot}%
+ {%
+ \ifstrequal{#1}{ddot}{\let\glosmath@MyGlsMacro\glsentryddot}%
+ {%
+ \ifstrequal{#1}{bar}{\let\glosmath@MyGlsMacro\glsentrybar}%
+ {%
+ \ifstrequal{#1}{hat}{\let\glosmath@MyGlsMacro\glsentryhat}%
+ {%
+ \ifstrequal{#1}{vec}{\let\glosmath@MyGlsMacro\glsentryvec}%
+ {%
+ \ifstrequal{#1}{tilde}{\let\glosmath@MyGlsMacro\glsentrytilde}%
+ {%
+ \PackageError{glosmathtools}{Unknown accent: #1}{}%
+ }}}}}}%
+ }{}%
+}%
+
+% ---------- glosmath@glsviRelay ------------------------------------------
+% relay macro for two optional aguments in the glsvi macro
+\newcommand*{\glosmath@glsviRelay}[3][]%
+{%
+ \expandafter\glosmath@getMyGlsMacro\expandafter{\glosmath@ArgI}%
+ \let \glosmath@FirGls \glosmath@MyGlsMacro%
+ \glosmath@getMyGlsMacro{#1}%
+ \let \glosmath@SecGls \glosmath@MyGlsMacro%
+ \ensuremath{%
+ \glsdisp{#2}{%
+ \glosmath@FirGls{#2}_{\glsdisp{#3}{\glosmath@SecGls{#3}}}%
+ }%
+ }%
+}%
+
+% ---------- glosmath@setLone --------------------------------------------
+\newcommand*{\glosmath@setLone}%
+{%
+ \renewcommand*{\glosmath@acrmain}[1]{\glsentrylong{##1}}%
+ \renewcommand*{\glosmath@Acrmain}[1]{\Glsentrylong{##1}}%
+ \renewcommand*{\glosmath@acrmainpl}[1]{\glsentrylongpl{##1}}%
+ \renewcommand*{\glosmath@Acrmainpl}[1]{\Glsentrylongpl{##1}}%
+ \renewcommand*{\glosmath@acrpar}[1]%
+ {\protect\firstacronymfont{\glsentryshort{##1}}}%
+ \renewcommand*{\glosmath@Acrpar}[1]%
+ {\protect\firstacronymfont{\glsentryshort{##1}}}%
+ \renewcommand*{\glosmath@acrparpl}[1]%
+ {\protect\firstacronymfont{\glsentryshortpl{##1}}}%
+ \renewcommand*{\glosmath@Acrparpl}[1]%
+ {\protect\firstacronymfont{\glsentryshortpl{##1}}}%
+ \renewcommand*{\glosmath@acrlang}{L1}%
+}%
+
+% ---------- glosmath@setLtwo --------------------------------------------
+\newcommand*{\glosmath@setLtwo}%
+{%
+ \glosmath@setLone % base defintions
+ \renewcommand*{\glosmath@acrmain}[1]{\glsentrydescsec{##1}}%
+ \renewcommand*{\glosmath@Acrmain}[1]{\Glsentrydescsec{##1}}%
+ \renewcommand*{\glosmath@acrmainpl}[1]{\glsentrydescsec{##1}}%
+ \renewcommand*{\glosmath@Acrmainpl}[1]{\Glsentrydescsec{##1}}%
+ \renewcommand*{\glosmath@acrlang}{L2}%
+}%
+
+% ---------- glosmath@setLoneLtwo ---------------------------------------
+\newcommand*{\glosmath@setLoneLtwo}%
+{%
+ \glosmath@setLone % base defintions
+ \renewcommand*{\glosmath@acrpar}[1]%
+ {\protect\firstacronymfont{\glsentryshort{##1}}%
+ ,\space\textit{\glsentrydescsec{##1}}}%
+ \renewcommand*{\glosmath@Acrpar}[1]%
+ {\protect\firstacronymfont{\glsentryshortpl{##1}}%
+ ,\space\textit{\Glsentrydescsec{##1}}}%
+ \renewcommand*{\glosmath@acrparpl}[1]%
+ {\protect\firstacronymfont{\glsentryshort{##1}}%
+ ,\space\textit{\glsentrydescsec{##1}}}%
+ \renewcommand*{\glosmath@Acrparpl}[1]%
+ {\protect\firstacronymfont{\glsentryshortpl{##1}}%
+ ,\space\textit{\Glsentrydescsec{##1}}}%
+ \renewcommand*{\glosmath@acrlang}{L1L2}%
+}%
+
+% ---------- glosmath@setLtwoLone ----------------------------------------
+\newcommand*{\glosmath@setLtwoLone}%
+{%
+ \glosmath@setLtwo % base defintions
+ \renewcommand*{\glosmath@acrpar}[1]%
+ {\protect\firstacronymfont{\glsentryshort{##1}}%
+ ,\space\textit{\glsentrydesc{##1}}}%
+ \renewcommand*{\glosmath@Acrpar}[1]%
+ {\protect\firstacronymfont{\glsentryshortpl{##1}}%
+ ,\space\textit{\Glsentrydesc{##1}}}%
+ \renewcommand*{\glosmath@acrparpl}[1]%
+ {\protect\firstacronymfont{\glsentryshort{##1}}%
+ ,\space\textit{\glsentrydescpl{##1}}}%
+ \renewcommand*{\glosmath@Acrparpl}[1]%
+ {\protect\firstacronymfont{\glsentryshortpl{##1}}%
+ ,\space\textit{\Glsentrydescpl{##1}}}%
+ \renewcommand*{\glosmath@acrlang}{L2L1}%
+}%
+
+% ===========================================================================
+% =================== FINAL CODE EXECUTION ==================================
+% ===========================================================================
+
+\setglossarystyle{glosmath@glostyle}% default to main language only
+\setacronymstyle{glosmath@acrstyle}% default to main language only
+
+\endinput% \ No newline at end of file