summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmRCS.sty73
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmampulex.sty217
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmbase.sty2724
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmcommand.sty2164
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmenvir.sty141
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmlogos.sty221
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmmeta.sty295
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmmw.sty368
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmnotonlypream.sty93
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmparts.sty169
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmrelsize.sty84
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmtypos.sty2027
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmurl.sty306
-rw-r--r--Master/texmf-dist/tex/latex/gmutils/gmutils.sty7203
14 files changed, 8980 insertions, 7105 deletions
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmRCS.sty b/Master/texmf-dist/tex/latex/gmutils/gmRCS.sty
new file mode 100644
index 00000000000..814896937b8
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmRCS.sty
@@ -0,0 +1,73 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmRCS.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `RCS')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmRCS}
+ [2010/10/24 v0.993 (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+
+
+\def\ParseRCSVersion$Id%
+: #1.#2,v #3 #4 #5 #6 #7${%
+ \def\RCSFileName{#1}%
+ \def\RCSFileExt{#2}%
+ \def\RCSFile{#1.#2}%
+ \def\RCSVersion{#3}%
+ \def\RCSDate{#4}%
+ \def\RCSTime{#5}%
+ \def\RCSAuthor{#6}%
+}
+
+
+\def\defRCSeDatum
+#1% datum name
+#2% datum definition (basically |#|number)
+{%
+ \@namedef{eRCS#1}$Id%
+ : ##1.##2,v ##3 ##4 ##5 ##6 ##7${#2}%
+}
+
+\defRCSeDatum{File}{#1.#2} % |\eRCSFile|
+\defRCSeDatum{Version}{#3}% |\eRCSVersion|
+\defRCSeDatum{Date}{#4}% |\eRCSVDate|
+\defRCSeDatum{Time}{#5}% |\eRCSVTime|
+\defRCSeDatum{Author}{#6}% |\eRCSVAuthor|
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmRCS.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmampulex.sty b/Master/texmf-dist/tex/latex/gmutils/gmampulex.sty
new file mode 100644
index 00000000000..432b2ee2201
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmampulex.sty
@@ -0,0 +1,217 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmampulex.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `ampulex')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmampulex}
+ [2010/10/24 v0.993 Ampulex Compressa-like modifier of macros (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+
+\RequirePackage{gmcommand}
+
+\DeclareCommand\ampulexlet\long
+{Q{\outer\long\global\protected}{} % (1) (optional) prefix\:(es);
+ % allowed is any sequence of them in any order, just like for the
+ % original \TeX's \incmd\def.
+ T{\def\edef\gdef\xdef\pdef}{\def} % (2) (optional) kind of definition; if
+ % not specified, \incmd\def\ will be used.
+ m % (3) macro to be let to,
+ m % (4) macro to provide the definition,
+ O{} % (5) \cs{def}'s parameters string; empty by default,
+ O{} % (6) definition body's parameters to be taken in a~one-step
+ % expansion of the redefined macro; empty by default; the
+ % undelimited parameters should be double-braced here.
+ m % (7) start token(s),
+ m % (8) end token(s)
+ m % (9) the replacement of |#7|, |#8| and whatever between them.
+}{%^^B
+ % \changes{v0.93}{2008/08/29}{added}
+ % \changes{v0.94}{2008/09/07}{made \pk{xparse}-ish and
+ % \cs{ampulexset} removed}
+ % \chgs{2008/12/7 v0.98 first argument (the prefix) made of the
+ % \env{Q} type}
+ % For the example of usage see \ref{ampulexset}. \HideDef
+ %
+ \long\def\gmu@ampulexlet@resa
+ ##1#7% we put |#7| as a delimiter
+ ##2#8% we put |#8| as a delimiter
+ ##3\gmu@AmpulexDelimiter{%
+ % We use a special (undefined) \CS |\gmu@AmpulexDelimiter| as
+ % the final delimiter because standard \LaTeX's |\@nil| isn't
+ % probably a good idea since we
+ % want to ampulex deep \LaTeX's macros and other |\gmu@›…|
+ % macros too.
+ \gmu@ifempty{##3}%
+ }%
+ % Now |\gmu@ampulexlet@resa| is redefined to produce an open |\gmu@ifempty|
+ % depending on whether the start and end token(s) are found in the
+ % meaning of \inverb|#4|.
+ %
+ % Before we proceed, we deal with a difficulty with a special case
+ % when |#6| is “|#1|”, which occurs because of stripping braces of a
+ % single-brace argument.
+ \gmu@ifutokens{#6}{##1}%
+ {\def\ampulex@Args{{%
+ ####1}}%
+ }%
+ {\edef\ampulex@Args{\@nx\unexpanded{%
+ \unexpanded{#6}}}}%
+ \long \def\gmu@ampulexlet@resc##1{%
+ \@xa\@xa\@xa\@xa \@xa\@xa\@xa\gmu@ampulexlet@resa
+ \@xa\@xa\@xa#4%
+ \ampulex@Args
+ ##1% this parameter will be substituted with |#7#8| in
+ % line~\ref{resc1} and with emptiness in line~\ref{resc2}.
+ \gmu@AmpulexDelimiter
+ }%
+ %
+ \gmu@ampulexlet@resc{#7#8}%\label{resc1} % ^^V \gmu@ampulexlet@resb
+ % We've just applied the checker and it produces an open
+ % |\gmu@ifempty{⁄<some tokens>}|
+ % if the delimiters are found in the meaning of |#4|
+ % so, if \<some tokens> are none, we issue a warning
+ {%
+ \PackageWarning{gmampulex}{%
+ \@nx#4 doesn't contain tokens
+ \detokenize{#7} nor \detokenize{#8}. You better check if this is
+ what you want to redefine.^^J%
+ \@nx#4 is^^J%
+ \meaning#4^^J%
+ }}%
+ % and we proceed if they are really some
+ {%
+ % We define a~temporary
+ % macro with the parameters delimited with the `start' and `end' parameters
+ % of \incs{ampulexdef}. It has to stand a double |\edef|.
+ \edef\gmu@ampulexlet@resa{%
+ \long\def\@nx\gmu@ampulexlet@resa
+ ####1\unexpanded{#7}%
+ ####2\unexpanded{#8}%
+ ####3\@nx\gmu@AmpulexDelimiter{%
+ \@nx\unexpanded{####1}%
+ % we drop the part between the |#7| and |#8| delimiters
+ % (including delimiters)
+ \unexpanded{\unexpanded{#9}}% we replace the part of the
+ % redefined macro's meaning with the replacement text.
+ \@nx\unexpanded{####3}%
+ }% of inner |\gmu@ampulexlet@resa|
+ }% of outer |\gmu@ampulexlet@resa|
+ \gmu@ampulexlet@resa
+ % Now |\gmu@ampulexlet@resa| carries the modifier of |#4|'s
+ % definition.
+ %
+ %
+\unless\ifx\czat#4%
+ \edef\gmu@ampulexlet@resb{% double definition for double hashes of expanded
+ % |\unexpanded{#1›…}|
+ #1#2%
+ \@nx#3\unexpanded{#5}{%
+ \gmu@ampulexlet@resc{}%\label{resc2}
+ % Here we are sure the tokens sequences
+ % |#7| and |#8| are in the one-level expansion of |#4| so we don't pass them
+ % as sentinels (which \ac{BTW} would totally spoil the redefinition, what it
+ % did indeed 2010/6/23).
+ }% of |#3|'s definition body
+ }% of inner |\gmu@ampulexlet@resb|
+ \gmu@ampulexlet@resb
+\else
+ \gmu@ifxany#2{\gdef\xdef}{\global}{}%
+ #1\edef#3#5{\gmu@ampulexlet@resc{}}%\label{resc2}
+\fi
+ }% of if the delimiters were found in the meaning.
+}% of |\ampulexlet|
+
+\DeclareCommand\ampulexdef\long{%
+ % \chgs{2010/04/22 v0.994 rewritten not to use the arguments 7–9
+ % explicitly not to wrap them in a temporary macros, and to accept
+ % single hashes (instead of quadruple) in arguments 5 and 6. The
+ % temporary macros renamed
+ % to \cmd\gmu@reserveda and \cmd\gmu@reservedb. The body moved to
+ % \cmd\ampulexlet with adding another \CS argument to let let a
+ % macro not necessarily redefine it itself and this command made a
+ % particular case of that new one}
+#1 Q{\outer\long\global\protected}{} % (1) as |\ampulexlet|
+#2 T{\def\edef\gdef\xdef\pdef}{\def} % (2) ad |\ampulexlet|
+#3 m % (3) macro to be redefined,
+#4 O{} % (4) as |\ampulexlet|'s |#5|,
+#5 O{} % (5) as |\ampulexlet|'s |#6|,
+#6 m % (6) start token(s),
+#7 m % (7) end token(s),
+#8 m % (8) the replacement
+}{%
+ \DCUse\ampulexlet{#1}{#2}{#3}{#3}{#4}{#5}{#6}{#7}{#8}%
+}
+
+
+
+\def\gmu@ENumLoop#1#2{% this is a~fully expandable loop generating |#2|${}-{}$|#1|
+ % space tokens (cf. The % \eTeX\ Manual p.~9).
+ \ifnum#1<#2 %
+ \gmu@tempa
+ \@xa\gmu@ENumLoop
+ \@xa{\number\numexpr#1+1\@xa}%
+ \@xa{\number#2\@xa}%
+ \fi}% of |\gmu@hashes|.
+
+\long\def\defENumLoop
+#1% the loop macro's name
+#2% the replacement of |\gmu@tempa|
+{%
+ \ampulexlet#1\gmu@ENumLoop
+ [##1##2][{##1}{##2}]%
+ \gmu@tempa\@xa{#2\@xa}%
+ %
+ \ampulexdef#1%
+ [##1##2][{##1}{##2}]%
+ \gmu@ENumLoop\@xa{#1\@xa}%
+}
+
+\edef\GenericInfoToTerminal{%
+ \unexpanded{%
+ \@XA{\ampulexlet\protected\long\GenericInfo}\csname
+ GenericInfo \endcsname[#1#2][{#1}{#2}]%
+ \write\m@ne % we replace the token between these with:
+ {\write\ifnum\tracingonline>\z@ \@unused\else\m@ne\fi}%
+ }%
+}
+
+\ampulexdef\@starttoc[#1][#1]\makeatletter\@input{\makeatletter\NamedInput}
+
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmampulex.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmbase.sty b/Master/texmf-dist/tex/latex/gmutils/gmbase.sty
new file mode 100644
index 00000000000..9e0bba08753
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmbase.sty
@@ -0,0 +1,2724 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmbase.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `base')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmbase}
+ [2010/10/24 v0.993 some tricky low-level macros (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+
+\ifx\XeTeXversion\relax
+ \let\XeTeXversion\@undefined% If someone earlier used
+\fi
+
+\ifdefined\XeTeXversion
+\XeTeXinputencoding utf-8 % we use Unicode dashes later in this file.
+\fi% and if we are not in \XeTeX, we skip them thanks to \XeTeX-test.
+
+\let\@xa\expandafter
+\let\@nx\noexpand
+
+\def\@xanx{\@xa\@nx}
+
+\long\def\@xadef#1{\@xa\def\@xa#1\@xa}
+
+\long\def\@csn#1{\csname #1\endcsname}
+
+\long\def\Name#1#2{\@xa#1\csname #2\endcsname}
+
+\long\def\@xau#1{\unexpanded\@xa{#1}}
+
+\def\gmu@firstandspace#1{#1 }
+
+\long\def\strip@bslash#1{%
+ \gmu@ifempty{#1}{}{%
+ \gmu@if {cat}{\@nx~\@nx#1}% this is specially for an active
+ % backslash (have you ever met it?). Thanks to this special case
+ % the inner macro declared for an active |\| by |\DeclareCommand|
+ % is |\\\| not |\\csname\endcsname\|.
+ {\string#1}% if |#1| is active
+ {%
+ \@xa\@xa\@xa\ifnum\@xa\@xa\@xa\escapechar
+ \@xa\@xa\@xa=\@xa\@xa\@xa`\@xa\gmu@firstandspace
+ \string#1\else\string#1\fi
+ }% if |#1| is not active
+ }% of if |#1| not empty
+}
+
+
+
+\long\def\bslash@or@ac#1{%
+ \ifcat\@nx~\@nx#1%
+ \else
+ \bslash
+ \fi
+ \strip@bslash{#1}%
+}
+
+\long\def\@xanxcs#1{%
+ \ifcat\@nx~\@nx#1%
+ \@nx#1%
+ \else
+ \@xa\@nx\csname #1\endcsname
+ \fi
+}
+
+\long\def\@xaucs#1{%
+ \unexpanded\@xa\@xa\@xa{\csname #1\endcsname}%
+}
+
+\long\def\@xanxtri#1{%
+ \ifcat\@nx~\@nx#1%
+ \@nx#1%
+ \else
+ \@xa\@nx\csname \strip@bslash{#1}\endcsname
+ \fi
+}
+
+\def\pdef{\protected\def}
+
+\def\lpdef{\long\protected\def}
+\let\pldef\lpdef
+
+\def\pedef{\protected\edef}
+
+\def\pxdef{\protected\xdef}
+
+\long\def\gobble#1{}
+\let\@gobble\gobble
+\let\gobbletwo\@gobbletwo % it's a \LaTeX's |\long| macro (in File d:
+
+\long\def\@gobbleeight#1#2#3#4#5#6#7#8{}
+
+\long\pdef\provide#1{%\changes{v0.93}{2008/08/30}{added}
+ \ifdefined#1% \UnDef
+ \ifx\relax#1\afterfifi{\def#1}%
+ \else\afterfifi{\gmu@gobdef}% \UnDef
+ \fi
+ \else\afterfi{\def#1}%
+ \fi}
+
+\long\def\gmu@gobdef#1#{% \UnDef
+ \def\gmu@tempa{}% it's a~junk |\def|-assignment
+ % to absorb possible prefixes.
+ \@gobble}
+
+\def\pprovide{\protected\provide}
+
+\long\def\@nameedef#1#2{% \changes{v0.93}{2008/08/30}{added}
+ \@xa\edef\csname#1\endcsname{#2}}
+
+
+\pdef\gmu@DefSymbol#1{%
+ \unless\ifdefined#1%
+ \def#1{#1}%
+ \fi
+}
+
+\long\def\gmu@if#1#2{%
+ \ifnum\strcmp{incsname}{\detokenize{#1}}=\z@
+ \@xa\@xa\@xa\ifincsname
+ \@gobble\fi % this |\fi| balances the conditional when false
+ \else
+ \csname if#1\@xa\endcsname
+ \fi
+ #2\@xa\@firstoftwo\else\@xa\@secondoftwo\fi
+}
+
+\long\def\gmu@notif#1#2{%
+ \gmu@if {#1}{#2}%
+ \@secondoftwo\@firstoftwo
+}
+
+\def\gmu@ifsw #1{\gmu@if {#1}{}}
+\def\gmu@notsw #1{\gmu@notif {#1}{}}
+
+\long\def\gmu@unless #1#2{%
+ \ifnum\strcmp{incsname}{\detokenize{#1}}=\z@
+ \@xa\@xa\@xa\unless \@xa\@xa\@xa\ifincsname
+ \@gobble\fi % this |\fi| balances the conditional when it's not
+ % |\ifincsname|
+ \else
+ \@xa\unless \csname if#1\@xa\endcsname
+ \fi
+ #2\@xa\@firstoftwo\else\@xa\@secondoftwo\fi
+}
+
+
+\lpdef\@iwru@EC#1#2#3{%
+ \@iwrum{#1»{#2}« »#3«}%
+ \gmu@passbraced{#1{#2}}{#3}%
+}
+
+\long\def\gmu@generalCASE
+#1% Testing macro (|\gmu@if| etc.
+#2% |#1| of the testing macro
+#3% |#2| of the testing macro
+#4% |#3| of the testing macro (what if test satisfied)\\
+{%
+ #1{#2}{#3}%
+ {%
+ \gmu@EatCases{#4}}{}%
+}
+
+\long\def\gmu@EatCases
+#1%
+#2\gmu@ESAC
+{#1}
+
+\let\gmu@lastCASE\gmu@EatCases
+
+\def\gmu@CASE {\gmu@generalCASE \gmu@if }
+\def\gmu@CASEnot {\gmu@generalCASE \gmu@notif }
+\def\gmu@CASExany {\gmu@generalCASE \gmu@ifxany }
+\def\gmu@CASExnone {\gmu@generalCASE \gmu@ifxnone }
+
+\long\def\gmu@reserved@firstofmany#1#2\gmu&nil{#1}
+
+\long\def\ifsingletoken#1{% ^^V \gmu &nil % such a strange delimiter to
+ % make it work both in letter and
+ % other |@| scopes etc.\ (|&| seems to
+ % me recatcoded rather seldom)
+ \ifnum \strcmp{\unexpanded{#1}}%
+ {\@xau{\gmu@reserved@firstofmany #1\blekotnizza@ \di \broccoli
+ \gmu&nil}%
+ }% of right text of |\strcmp|
+ =\z@
+}
+
+\long\def\gmu@predetokstring #1{%
+ \gmu@if {num}
+ {%
+ % After a couple of hours of debug I reached the proper test which
+ % is given below. The goal is to (expandably!) check whether |#1|
+ % is braced and/or begins with a blank space. In any of those
+ % cases we don't hit it('s first token) with |\string|.
+ %
+ % |\@firstofone| strips outermost pair of braces if any and
+ % gobbles the lading blank(s) if any so the detokenised strings
+ % will differ.
+ \strcmp
+ {\detokenize{#1x}}%
+ {\detokenize\@xa{\@firstofone #1x}}=\z@
+ }% of test
+ {\@xa{\string#1}}
+ {{#1}}%
+}
+
+
+\long\def\ifstrings#1#2{%
+ \ifnum\strcmp
+ {\detokenize\gmu@predetokstring{#1x}}%
+ {\detokenize\gmu@predetokstring{#2x}}=\z@
+}
+
+
+\long\def\ifstribs#1#2{%
+ \ifnum\strcmp{\strip@bslash{#1}}{\strip@bslash{#2}}=\z@
+}
+
+
+\long\def\ifStrX#1#2{%
+ \gmu@CASEnot {x}{#1#2}%
+ {\iffalse}% if tokens are x-unequal, all is clear.
+ %
+ \gmu@CASEnot x {\@undefined#1}
+ {\iftrue}%
+ %
+ % some (i.e.\ \emph{both}) tokens are-x |\@undefined| or |\relax|,
+ % then
+ \gmu@CASE {strings}{#1#2}%
+ {\iftrue}%
+ %
+ \gmu@lastCASE
+ {\iffalse}%
+ \gmu@ESAC
+}
+
+\long\def\firstofone#1{#1}
+
+\long\def\bracefirstofone#1{{#1}}
+
+\long\pdef\scantwo#1#2{
+ \begingroup\endlinechar\m@ne
+ \@xa\endgroup\scantokens{#1#2}%
+}
+
+\long\def\@firstofthree#1#2#3{#1}
+\long\def\@secondofthree#1#2#3{#2}
+\long\def\@thirdofthree#1#2#3{#3}
+\long\def\@twoofthree#1#2#3{#1#2}
+\long\def\@secondoffive#1#2#3#4#5{#2}
+
+\long\def\@firstofmany#1#2\@nil{#1}
+
+\long\def\@secondofmany#1#2#3\@nil{#2}
+
+\long\def\@allbutfirstof#1#2\@nil{#2}
+
+
+
+
+\def\longafterfi{%
+ \long\def\afterfi##1##2\fi{\fi##1}}
+\longafterfi
+\long\def\afterfifi#1#2\fi#3\fi{\fi\fi#1}
+\long\def\afteriffifi#1#2\fi#3\fi{\fi#1}
+
+\long\def\afterififfififi#1#2\fi#3\fi#4\fi{\fi#1}
+\long\def\afteriffififi#1#2\fi#3\fi#4\fi{\fi\fi#1}
+\long\def\afterfififi#1#2\fi#3\fi#4\fi{\fi\fi\fi#1}
+
+
+\long\def\foone#1{\begingroup#1\relax\egfirstofone}
+\long\def\egfirstofone#1{\endgroup#1}
+
+\def\fooatletter{\foone\makeatletter}
+
+\newcommand*\@emptify[1]{\let#1=\@empty}
+\@ifdefinable\emptify{\let\emptify\@emptify}
+
+\newcommand*\g@emptify{\global\@emptify}
+\@ifdefinable\gemptify{\let\gemptify\g@emptify}
+
+\newcommand\@relaxen[1]{\let#1=\relax}
+\@ifdefinable\relaxen{\let\relaxen\@relaxen}
+
+\newcommand*\g@relaxen{\global\@relaxen}
+\@ifdefinable\grelaxen{\let\grelaxen\g@relaxen}
+
+\long\def\gmu@ifempty#1{%\
+ \ifnum\strcmp{\detokenize{#1}}{}=\z@
+ \@xa\@firstoftwo
+ \else\@xa\@secondoftwo
+ \fi
+}
+
+\long\pdef\@ifnonempty#1#2#3{\gmu@ifempty{#1}{#3}{#2}}
+
+
+
+\long\def\gmu@ifexempty #1{%
+ \ifnum \strcmp{#1}{}=\z@
+ \@xa\@firstoftwo
+ \else\@xa\@secondoftwo
+ \fi
+}
+
+\long\pdef\IfAmong#1\among#2{%\label{IfAmong}\
+ % \begin{enumargs}
+ % \item the token(s) whose presence we check,
+ % \item the list of tokens in which we search |#1|,
+ % \item the ‘if found’ stuff,
+ % \item the ‘if not found’ stuff.
+ % \end{enumargs}
+ % \chgs{2008/12/05 v0.98 split from \cs{IfAmong}}
+ %
+ \long\def\gmu@among@##1#1##2\gmu@among@{%
+ \gmu@ifempty{##2}\@secondoftwo\@firstoftwo}%
+ \gmu@among@#2#1\gmu@among@}
+
+\newif\ifgmu@ifxquant
+\newtoks\gmu@ifxa@toks
+
+\long\pdef\gmu@ifxany
+#1% a single token to be |\ifx| ed with each of |#2|
+#2% counterpart to the above—a sequence of tokens to check |#1|
+{%
+ \gmu@ifempty{#2}{\@secondoftwo}{%
+ % we wrap the iteration over |#2|'s tokens in |\gmu@ifempty| because
+ % we expect many empty |#2|'s in |\DeclareCommand|'s |\loop|
+ % arguments (such as |Q| and |U|)
+ \gmu@ifxquantfalse
+ \let\gmu@ifxa@aasiter\@@gmu@ifxa@aasiter
+ %
+ \edef\gmu@ifxa@aas{% edef and unexpanded to protect agains
+ % |#|\cat6 token(s) in |#1|.
+ \unexpanded{%
+ \ifx #1\gmu@ifxa@token
+ \gmu@ifxquanttrue
+ \let\gmu@ifxa@aas\gmu@ifxa@drainer
+ \else
+ \ifx \gmu@ifxa@Limit\gmu@ifxa@token
+ \emptify \gmu@ifxa@aasiter
+ \fi
+ \fi
+ \gmu@ifxa@aasiter
+ }%of |\unexpanded|
+ }% of |\gmu@ifxa@aas|
+ %
+ \gmu@ifxa@aasiter #2\gmu@ifxa@Limit
+ \gmu@if {gmu@ifxquant}{}%
+ }% of if |#2| nonempty
+}
+
+\def\gmu@ifxa@drainer{%
+ \ifx\gmu@ifxa@Limit\gmu@ifxa@token
+ \emptify\gmu@ifxa@aasiter
+ \fi
+ \gmu@ifxa@aasiter
+}
+
+\gmu@DefSymbol\gmu@ifxa@Limit
+
+\def\@@gmu@ifxa@aasiter{%
+ \afterassignment\gmu@ifxa@aas
+ \let\gmu@ifxa@token= }% thanks to this space it'll look also at
+
+\long\pdef\gmu@ifxnone
+#1% token to be checked against
+#2% list of tokens to \emph{not} find |#1| at
+{%
+ \gmu@ifxany{#1}{#2}\@secondoftwo\@firstoftwo
+}
+
+\long\def\gmu@foreach#1\gmu@foreach@delim#2{%
+ %
+ \long\def\gmu@forer##1{%
+ \gmu@if {strings} {\gmu@foreach@delim {##1}}%
+ {}% if we've met the delimiter, we stop.
+ {% otherwise we wrap |#1| in a macro to make it available to |#2|
+ \edefU\gmu@forarg{##1}%
+ #2% we execute |#2| and probably continue iteration (unless the
+ % loop isn't broken with the next macro).
+ \gmu@forer
+ }%
+ }% of forer.
+ \gmu@forer#1\gmu@foreach@delim
+}
+
+\long\def\gmu@foreach@break
+#1\gmu@foreach@delim{}
+
+\long\def\gmu@ifsXXany
+#1% kind of test (|strings| or |stribs| so far)
+#2% token to be checked against |#3|
+#3% the list of tokens to be iterated over\\
+{%
+ \gmu@ifsXXany@{#1}{#2}#3\gmu@ifsXXany@end
+ \@firstoftwo\@secondoftwo
+}
+
+\long\def\gmu@ifsXXany@
+#1% kind of test
+#2% left side of comparison
+#3% right side of comparison
+{%
+ \gmu@if {#1}{#2#3}%
+ \gmu@ifsXXany@found
+ {% else
+ \gmu@if {#1}{#3\gmu@ifsXXany@end}%
+ \@secondoftwo
+ {\gmu@ifsXXany@{#1}{#2}}% if we didn't meet the sentinel, we iterate
+ }%
+}
+
+\long\def\gmu@ifsXXany@found
+#1\gmu@ifsXXany@end
+{\@firstoftwo}
+
+\def\gmu@ifstrany{\gmu@ifsXXany {strings}}
+
+\def\gmu@ifsbany{\gmu@ifsXXany {stribs}}
+
+\def\gmu@ifStrXany{\gmu@ifsXXany {StrX}}
+
+\long\def\gmu@ifstrnone#1#2#3#4{%
+ \gmu@ifstrany{#1}{#2}{#4}{#3}%
+}
+
+\long\def\gmu@ifsbnone#1#2#3#4{%
+ \gmu@ifsbany{#1}{#2}{#4}{#3}%
+}
+
+\long\def\gmu@ifStrXnone#1#2#3#4{%
+ \gmu@ifStrXany{#1}{#2}{#4}{#3}%
+}
+
+\lpdef\gmu@CASEstrany {\gmu@generalCASE \gmu@ifstrany }
+
+\lpdef\gmu@CASEstrnone {\gmu@generalCASE \gmu@ifstrnone }
+
+\lpdef\gmu@CASEsbany {\gmu@generalCASE \gmu@ifsbany }
+
+\lpdef\gmu@CASEsbnone {\gmu@generalCASE \gmu@ifsbnone }
+
+
+\newtoks\degroup@toks
+
+\long\pdef\gmu@degroup
+#1% text to be degrouped
+{\degroup@toks={}%
+ \gmu@degroup@iter#1\gmu@degroup@end
+}
+
+\long\def\gmu@degroup@afterlet{%
+ \gmu@if x{\degroup@lettoken\bgroup}%
+ {\degroup@drainanditer}%
+ {\gmu@if x{\degroup@lettoken\egroup}%
+ {\degroup@drainanditer}%
+ {\degroup@addanditer}%
+ }%
+}
+
+\def\gmu@degroup@iter{%
+ \futurelet\degroup@lettoken\gmu@degroup@afterlet}
+
+\def\degroup@drainanditer{%
+ \afterassignment\gmu@degroup@iter
+ \let\gmu@drain=
+}
+
+\def\degroup@addanditer{%
+ \gmu@if x{\degroup@lettoken\gmu@letspace}%
+ {\addtotoks\degroup@toks{ }%
+ \degroup@drainanditer
+ }{%
+ \degroup@addanditer@i
+ }%
+}
+
+\long\def\degroup@addanditer@i
+#1{%
+ \gmu@if {strings}{#1\gmu@degroup@end}%
+ {}% we've reached the end of iteration
+ {% it's sth.\ to add
+ \addtotoks\degroup@toks{#1}%
+ \gmu@degroup@iter
+ }%
+}
+
+\pdef\IfIntersect
+{\gmu@ifintersect \gmu@ifxany}
+
+\lpdef\gmu@ifintersect
+#1% an iterating test (|\gmu@ifxany|, |\gmu@ifstrany| or
+#2% one list to match
+#3% another list to match
+{%
+ \let\IfIntersect@next\@secondoftwo
+ \gmu@foreach #2\gmu@foreach@delim{%
+ \@xa #1\gmu@forarg{#3}%
+ {\let\IfIntersect@next\@firstoftwo
+ \gmu@foreach@break
+ }{}%
+ }% of |\gmu@foreach|'s |#2|.
+ \IfIntersect@next
+}
+
+\pdef\gmu@ifstrintersect
+{\gmu@ifintersect\gmu@ifstrany}
+
+\pdef\gmu@ifsbintersect
+{\gmu@ifintersect\gmu@ifsbany}
+
+
+\newtoks\@XAtoks
+
+\long\pdef\@XA#1{%
+ \@XAtoks={#1}%
+ \@xa\the\@xa\@XAtoks}
+
+\long\pdef\@ifinmeaning#1\of#2{% \
+ % \begin{enumargs}
+ % \item the token(s) whose presence we check,
+ % \item the macro in whose meaning we search |#1| (the first token of
+ % this argument is expanded one level with |\expandafter|),
+ % \item the `if found' stuff,
+ % \item the `if not found' stuff.
+ % \end{enumargs}
+ %
+ % \chgs{2007/11/06 v0.98 (in \pk{gmdoc}) made more elegant:
+ % \cs{if} changed to \cs{ifx} made four parameters and not expanding
+ % to an open \cs{if›(true⁄|false›)}. % ^^A |
+ % Also renamed from \cs{@ifismember}}
+ % \chgs{2008/12/05 v0.98 moved here from \pk{gmdoc} and rewritten,
+ % including split to \cs{IfAmong} because the latter is needed in
+ % \cs{DeclareCommand}}
+ %
+ \@XA{\IfAmong#1\among}\@xa{#2}}
+
+\gmu@DefSymbol\defNoHash
+\gmu@DefSymbol\defHashy
+\gmu@DefSymbol\boolean
+\gmu@DefSymbol\edim
+
+\def\gmu@geteschar{%
+ % A macro that edefines detokenised char of the charcode |\escapechar|
+ \edef\gmu@xiieschar{%
+ \gmu@CASE {num} {\escapechar <\z@}
+ {}%
+ %
+ \gmu@CASE {num}{\escapechar <32 }
+ {\@xa \@firstofmany \string \blekotnizza\@nil}% not firstthreeofmany!!!!
+ %
+ \gmu@CASE {num} {\escapechar=32 }
+ { }% space cannot be “first of…”.
+ \gmu@lastCASE
+ {\@xa \@firstofmany \string \blekotnizza \@nil}%
+ \gmu@ESAC
+ }%
+}
+
+\long\def\gmu@IfBooleanMacro#1{%
+ \gmu@ifedetokens{\meaning#1}{macro:->true}%
+ {\@firstoftwo}%
+ {\gmu@ifedetokens{\meaning#1}{macro:->false}%
+ {\@firstoftwo}%
+ {\@secondoftwo}%
+ }%
+}
+
+\pdef\IfIs
+#1% a \CS
+#2% |\dimen|, |\long|, |\toks|, |\skip|, |\count|, |\dimexpr|,
+ % |\numexpr|, |\glueexpr|, |\newif| for |\iffalse| and |\iftrue|,
+ % |\if| or |\conditional| for any Boolean test/switch, |\def| for a
+ % macro.
+ %
+ % This test tells us in particular what kind of assignment may be
+ % applied to |#1|. Therefore it turns true for |#1| being e.g.\ primitive
+ % \TeX's skip registers and |#2|==|\skip|.
+{%
+ \PackageInfo{gmbase}{^^J%
+ Checking whether ***\string#1*** is a ***\string #2***^^J
+ If the next message you get is an error^^J%
+ ***missing number treated as 0***,^^J
+ then it's probably not^^J}%
+ \@tempswafalse
+ %
+ \gmu@CASE x{\defNoHash#2}%
+ {% case “def no hash” (hashless macro)
+ \@tempswatrue
+ \edef\gmu@IfIs@resa{%
+ \pdef\@nx\gmu@IfIs@resa
+ ####1\detokenize{macro:->}%
+ ####2\@nx\@nil{\@ifnonempty{####2}}%
+ % And we prepare applying thus defined macro to |#1|:
+ \unexpanded{\@xa\gmu@IfIs@resa\meaning#1}%
+ \detokenize{macro:->}\@nx\@nil
+ }% of |\edef|
+ }% of case hasless macro (“def no hash”)
+ %
+ % if not hashless
+ \gmu@CASE x {\defHashy#2}%
+ {%
+ % case hashy macro
+ \@tempswatrue
+ \edef\gmu@IfIs@resa{%
+ \pdef\@nx\gmu@IfIs@resa
+ ####1\detokenize{macro:}####2\xiihash1####3->%
+ ####4\@nx\@nil{\@ifnonempty{####4}}%
+ % And we prepare applying thus defined macro to |#1|:
+ \unexpanded{\@xa\gmu@IfIs@resa\meaning#1}%
+ \detokenize{macro:}\xiihash1->\@nx\@nil
+ }% of |\edef|
+ }% of case hashy macro
+ %
+ \gmu@CASE x {#2\boolean}
+ {% case Boolean
+ \@tempswatrue
+ \def\gmu@IfIs@resa{\gmu@IfBooleanMacro#1}%
+ %
+ }% of case Boolean
+ %
+ \gmu@CASEstrany #2{\dimexpr \numexpr \glueexpr \edim}%
+ {% case \eTeX\ expression
+ \@tempswatrue
+ \def\gmu@IfIs@resa{% if should be a macro expanding to
+ % expression contents
+ \IfIsExpression #1#2}%
+ }% of case expression
+ %
+ % The subsequent part of this huge test refers to |\meaning|s. We
+ % want to make it robust to possible (although rather seldom)
+ % changes of |\escapechar|. Therefore define an aux macro that
+ % expands to detokenised escape char.
+ %
+ % Assume that letters, icluding »e«, will not be used as the escape
+ % char:
+ \gmu@geteschar
+ %
+ % Now |\gmu@xiieschar| carries the detokenised escape char (is empty
+ % if |\escapechar|${}<0$).
+ %
+ %
+ \gmu@CASE x {\dimen#2}%
+ {% Case dimen. Let's check if it's special (inner \TeX's)
+ % or normal.
+ \gmu@ifxany#1{\prevdepth \pagegoal \pagetotal \pagestretch
+ \pagefilstretch \pagefillstretch \pagefilllstretch
+ \pageshrink \pagedepth
+ \hfuzz \vfuzz \overfullrule \emergencystretch \hsize \vsize
+ \maxdepth \splitmaxdepth \boxmaxdepth \lineskiplimit
+ \delimitershortfall \nulldelimiterspace \scriptspace
+ \mathsurround \predisplaysize \displaywidth
+ \displayindent \parindent \hangindent \hoffset \voffset
+ }%
+ {\@tempswatrue\let\gmu@IfIs@resa\@firstoftwo}%
+ {% subcase normal dimen
+ \def\gmu@IfIs@resa{%
+ \gmu@ifexempty {\gmu@xiieschar}%
+ {%
+ \pdef\gmu@IfIs@resa####1####2####3####4####5####6\@nil{%
+ \gmu@if {}
+ {1%
+ \if d####1\else0\fi
+ \if i####2\else0\fi
+ \if m####3\else0\fi
+ \if e####4\else0\fi
+ \if n####5\else0\fi
+ 1}%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …if eschar negative
+ {%
+ \pdef\gmu@IfIs@resa####1####2####3####4####5####6####7\@nil{%
+ \gmu@if {} {1%
+ \if \gmu@xiieschar ####1\else0\fi
+ \if d####2\else0\fi
+ \if i####3\else0\fi
+ \if m####4\else0\fi
+ \if e####5\else0\fi
+ \if n####6\else0\fi
+ 1%
+ }%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …when eschar nonnegative
+ }% of outer |\gmu@IfIs@resa|
+ }% of if special dimen or not
+ }% of case dimen
+ %
+ \gmu@CASE x {\count#2}%
+ {% case count
+ \gmu@ifxany#1{\spacefactor \prevgraf \deadcycles
+ \insertpenalties
+ \pretolerance \tolerance \hbadness \vbadness \linepenalty
+ \hyphenpenalty \exhyphenpenalty \binoppenalty \relpenalty
+ \clubpenalty \widowpenalty \displaywidowpenalty
+ \brokenpenalty \predisplaypenalty \postdisplaypenalty
+ \interlinepenalty \floatingpenalty \outputpenalty
+ \doublehyphendemerits \finalhyphendemerits \adjdemerits
+ \looseness \pausing \holdinginserts \tracingonline
+ \tracingmacros \tracingstats \tracingparagraphs
+ \tracingpages \tracingoutput \tracinglostchars
+ \tracingcommands \tracingrestores \language \uchyph
+ \lefthyphenmin \righthyphenmin \globaldefs
+ \defaulthyphenchar \defaultskewchar \escapechar \endlinechar
+ \newlinechar \maxdeadcycles \hangafter \fam \mag
+ \delimiterfactor \time \day \month \year \showboxbreadth
+ \showboxdepth \errorcontextlines
+ \lastlinefit
+ }%
+ {% if special count register then:
+ \@tempswatrue\let\gmu@IfIs@resa\@firstoftwo}%
+ {%
+ % if normal count register then
+ \def\gmu@IfIs@resa{%
+ \gmu@ifexempty \gmu@xiieschar
+ {\pdef\gmu@IfIs@resa####1####2####3####4####5####6\@nil{%
+ \gmu@if {} {1%
+ \if c####1\else0\fi
+ \if o####2\else0\fi
+ \if u####3\else0\fi
+ \if n####4\else0\fi
+ \if t####5\else0\fi
+ 1%
+ }% of test
+ }% of inner |\gmu@IfIs@resa|…
+ }% … when eschar is negative
+ %
+ {% eschar not empty (nonnegative)
+ \pdef\gmu@IfIs@resa####1####2####3####4####5####6####7\@nil{%
+ \gmu@if {} {1%
+ \if \gmu@xiieschar####1\else0\fi
+ \if c####2\else0\fi
+ \if o####3\else0\fi
+ \if u####4\else0\fi
+ \if n####5\else0\fi
+ \if t####6\else0\fi
+ 1%
+ }% of test
+ }% of inner |\gmu@IfIs@resa|…
+ }% … when eschar nonnegative
+ }% of outer |\gmu@IfIs@resa|
+ }% of if normal count register
+ }% of case count
+ %
+ \gmu@CASE x {\skip#2}%
+ {% case skip
+ \gmu@ifxany#1{%
+ \baselineskip \lineskip \parskip \abovedisplayskip
+ \abovedisplayshortskip \belowdisplayskip
+ \belowdisplayshortskip \leftskip \rightskip \topskip
+ \splittopskip \tabskip \spaceskip \xspaceskip \parfillskip
+ }%
+ {% if special skip
+ \@tempswatrue\let\gmu@IfIs@resa\@firstoftwo}%
+ {% not special skip
+ \def\gmu@IfIs@resa{%
+ \gmu@ifexempty \gmu@xiieschar
+ {\pdef\gmu@IfIs@resa####1####2####3####4####5\@nil{%
+ \gmu@if {} {1%
+ \if s####1\else0\fi
+ \if k####2\else0\fi
+ \if i####3\else0\fi
+ \if p####4\else0\fi
+ 1%
+ }%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …when eschar nonnegative
+ %
+ {\pdef\gmu@IfIs@resa####1####2####3####4####5####6\@nil{%
+ \gmu@if {} {1%
+ \if \gmu@xiieschar ####1\else0\fi
+ \if s####2\else0\fi
+ \if k####3\else0\fi
+ \if i####4\else0\fi
+ \if p####5\else0\fi
+ 1%
+ }%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …when eschar nonnegative
+ }% of outer |\gmu@IfIs@resa|
+ }% of if skip but not special
+ }% of case skip
+ %
+ \gmu@CASE x {\toks#2}
+ {% case toks
+ \gmu@ifxany#1{%
+ \output \everypar \everymath \everydisplay \everyhbox
+ \everyvbox \everyjob \everycr \errhelp \everyeof}%
+ {% subcase special toks
+ \@tempswatrue\let\gmu@IfIs@resa\@firstoftwo}%
+ {% subcase normal toks
+ \def\gmu@IfIs@resa{%
+ \gmu@ifexempty \gmu@xiieschar
+ {\pdef\gmu@IfIs@resa####1####2####3####4####5\@nil{%
+ \gmu@if {} {1%
+ \if t####1\else0\fi
+ \if o####2\else0\fi
+ \if k####3\else0\fi
+ \if s####4\else0\fi
+ 1%
+ }%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …when eschar negative
+ {\pdef\gmu@IfIs@resa####1####2####3####4####5####6\@nil{%
+ \gmu@if {} {1%
+ \if \gmu@xiieschar ####1\else0\fi
+ \if t####2\else0\fi
+ \if o####3\else0\fi
+ \if k####4\else0\fi
+ \if s####5\else0\fi
+ 1%
+ }%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …when eschar nonnegative
+ }% of outer |\gmu@IfIs@resa|
+ }% of if toks but not special
+ }% of case toks
+ %
+ \gmu@CASE x {\long#2}%
+ % if a macro is |\long|, then these detokens open its meaning
+ % despite of possible |\outer|.
+ {% case long macro
+ \def\gmu@IfIs@resa{%
+ \gmu@ifexempty \gmu@xiieschar
+ {\pdef\gmu@IfIs@resa####1####2####3####4####5\@nil{%
+ \gmu@if {} {1%
+ \if l####1\else0\fi
+ \if o####2\else0\fi
+ \if n####3\else0\fi
+ \if g####4\else0\fi
+ 1%
+ }%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …when eschar negative
+ {\pdef\gmu@IfIs@resa####1####2####3####4####5####6\@nil{%
+ \gmu@if {} {1%
+ \ifnum \gmu@xiieschar ####1\else0\fi
+ \if l####2\else0\fi
+ \if o####3\else0\fi
+ \if n####4\else0\fi
+ \if g####5\else0\fi
+ 1%
+ }%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …when eschar nonnegative
+ }% of outer |\gmu@IfIs@resa|
+ }% of case |\long|
+ % Note that we also can put here a test whether the meaning
+ % begins with |macro| which would mean that a macro is
+ % short.
+ \gmu@CASE x {\newif#2}%
+ {% case |\newif| (Boolean switch)
+ \def\gmu@IfIs@resa{%
+ \gmu@ifexempty \gmu@xiieschar
+ {\pdef\gmu@IfIs@resa####1####2####3%
+ ####4####5####6####7####8\@nil{%
+ \gmu@unless {} {0% lazy disjunction
+ \gmu@if {} {1% lazy conjunction
+ \if i####1\else0\fi
+ \if f####2\else0\fi
+ \if f####3\else0\fi
+ \if a####4\else0\fi
+ \if l####5\else0\fi
+ \if s####6\else0\fi
+ \if e####7\else0\fi
+ 1%
+ }%
+ {}{0}%
+ \gmu@if {} {1% lazy conjunction
+ \if i####1\else0\fi
+ \if f####2\else0\fi
+ \if t####3\else0\fi
+ \if r####4\else0\fi
+ \if u####5\else0\fi
+ \if e####6\else0\fi
+ \if \relax####7\else0\fi
+ 1%
+ }%
+ {}{0}%
+ 0%
+ }%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …when eschar nonnegative
+ %
+ {\pdef\gmu@IfIs@resa####1####2####3%
+ ####4####5####6####7####8####9\@nil{%
+ \gmu@unless {} {0%
+ \gmu@if {} {1%
+ \if \gmu@xiieschar ####1\else0\fi
+ \if i####2\else0\fi
+ \if f####3\else0\fi
+ \if f####4\else0\fi
+ \if a####5\else0\fi
+ \if l####6\else0\fi
+ \if s####7\else0\fi
+ \if e####8\else0\fi
+ 1%
+ }%
+ {}{0}%
+ \gmu@if {} {1%
+ \if \gmu@xiieschar ####1\else0\fi
+ \if i####2\else0\fi
+ \if f####3\else0\fi
+ \if t####4\else0\fi
+ \if r####5\else0\fi
+ \if u####6\else0\fi
+ \if e####7\else0\fi
+ \if \relax####8\else0\fi
+ 1%
+ }%
+ {}{0}%
+ 0%
+ }%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …when eschar nonnegative
+ }% of outer |\gmu@IfIs@resa|
+ }% of case |\newif| (Boolean switch)
+ %
+ \gmu@CASE {x\@xa\@xa} {\csname if\endcsname#2}%
+ {% case |\if| test
+ \def\gmu@IfIs@resa{%
+ \gmu@ifexempty \gmu@xiieschar
+ {\pdef\gmu@IfIs@resa####1####2####3\@nil{%
+ \gmu@if {} {1%
+ \if i####1\else0\fi
+ \if f####2\else0\fi
+ 1%
+ }%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …when eschar negative
+ %
+ {\pdef\gmu@IfIs@resa####1####2####3####4\@nil{%
+ \gmu@if {} {1%
+ \if \gmu@xiieschar ####1\else0\fi
+ \if i####2\else0\fi
+ \if f####3\else0\fi
+ 1%
+ }%
+ }% of inner |\gmu@IfIs@resa|…
+ }% …when eschar nonnegative
+ }% of outer |\gmu@IfIs@resa|
+ }% of case |\if|
+ %
+ \gmu@lastCASE %^^A >>>>> ??????
+ {false}{}{}%
+ \gmu@ESAC
+ % For the cases 1–$n$ we just launch their auxiliary macro:
+ \if@tempswa
+ \@xa\gmu@IfIs@resa
+ \else
+ %
+ % For the other cases their auxiliary macro defines “inner |@resa|”
+ % (protected) which perform the test on the meaning of |#1|.
+ \gmu@IfIs@resa
+ %
+ % now (new) |\gmu@IfIs@resa| it's defined as delimited
+ % with |#2| and |\@nil| (if |#1| may be one of kinds checked letter
+ % by letter).
+ %
+ \edef\gmu@IfIs@resb{%
+ \gmu@IfIs@resa\meaning#1%
+ \relax\relax\relax\relax\relax\relax\relax\relax %to provide
+ % something for gobbling tests.
+ \@xa\detokenize\@xa{\string#2}\@nx\@nil}%
+ \@xa\gmu@IfIs@resb
+ \fi
+}% of |\IfIs|
+
+\unless\ifdefined\@tempskipa\newskip\@tempskipa\fi
+\unless\ifdefined\@tempmuskipa\newmuskip\@tempmuskipa\fi
+
+\long\def\IfIsExpression
+#1% the stuff to be examined
+#2% |\dimexpr|, |\glueexpr|, |\numexpr| or |\muexpr| or |\edim| (added
+{%
+ \ifx#2\numexpr\let\next\@tempcnta\fi
+ \ifx#2\glueexpr\let\next\@tempskipa\fi
+ \ifx#2\dimexpr\let\next\@tempdima\fi
+ \ifx#2\muexpr\let\next\@tempmuskipa\fi
+ \gmu@if {strings} {#2\edim} % in case of special (not necessarily
+ % defined) \CS\ |\edim| we gobble the
+ % |=\edim| tokens and put |\dimexpr|
+ % before the tested token.
+ {\def\next##1##2{\@tempdima=\dimexpr}}{}%
+ \afterassignment\gmu@testtopenalty
+ \next=#2#1\penalty
+}
+
+\def\gmu@testtopenalty#1\penalty{%
+ \gmu@ifempty{#1}}
+
+\pdef\newgif#1{%
+ {\escapechar\m@ne
+ \global\let#1\iffalse
+ \@gif#1\iftrue
+ \@gif#1\iffalse
+ }}
+\def\@gif#1#2{%
+ \protected\@xa\gdef\csname\@xa\@gobbletwo\string#1%
+ g% the letter $g$ for `|\global|'.
+ \@xa\@gobbletwo\string#2\endcsname
+ {\global\let#1#2}}
+
+\pdef\newif#1{% We not only make \incs{newif}
+ % \incs{protected} but also make it to define \cs{protected}
+ % assignments so that premature expansion doesn't affect
+ % \inverb|\if…\fi| nesting.
+ % \changes{v0.92}{2008/08/09}{added redefinition so that now
+ % switches defined with it are \cs{protected} so they won't expand to
+ % a~further expanding or unbalanced \cs{iftrue/false} in an \cs{edef}}
+ \count@\escapechar \escapechar\m@ne
+ \let#1\iffalse
+ \@if#1\iftrue
+ \@if#1\iffalse
+ \escapechar\count@}
+
+\def\@if#1#2{%
+ \protected \@xa\def\csname\@xa\@gobbletwo\string#1%
+ \@xa\@gobbletwo\string#2\endcsname
+ {\let#1#2}}
+
+\pdef\hidden@iffalse{\iffalse}
+\pdef\hidden@iftrue{\iftrue}
+
+
+\pdef\grefstepcounter#1{%
+ {\let\protected@edef=\protected@xdef\refstepcounter{#1}}}
+
+\pdef\hgrefstepcounter#1{%
+ \ifhmode\leavevmode\fi\grefstepcounter{#1}}
+
+
+\pdef\hunskip{\ifhmode\unskip\fi}
+
+
+\def\glet{\global\let}
+
+
+\lpdef\addtomacro
+#1% macro (has to be parameterless)
+#2% stuff to be added
+{\edef #1{\@xau #1\unexpanded{#2}}}
+
+\pdef\gaddtomacro{\global\addtomacro}
+
+\long\def\prependtomacro#1#2{% \changes{v0.94}{2008/09/15}{order of
+ % arguments reversed}
+ \edef#1{\unexpanded{#2}\@xa\unexpanded\@xa{#1}}}
+
+\lpdef\addtotoks#1#2{%
+ #1=\@xa{\the#1#2}}
+
+\lpdef\prependtotoks#1#2{%
+ \iffalse {\fi % hack to balance braces in definition
+ \@XA{%
+ #1=\bgroup#2%
+ }\the#1}% actually this brace closes the text opened by |\bgroup|.
+}
+
+\long\def\addto@forlist
+#1% a comma-separated list
+#2% the element(s) added
+{\ifx#1\@empty
+ \@xa\@gobble
+ \else\@xa\@firstofone
+ \fi
+ {\addtomacro#1{,}}%
+ \addtomacro#1{#2}%
+}
+
+\lpdef\eaddtomacro
+#1% a macro
+#2% stuff to be added (will be fully expanded)
+{\edef#1{\@xau#1#2}}
+
+\long\def\gmu@ifundefined #1{% not |\protected| because expandable.
+ % \changes{v0.94}{2008/9/12}{added. All \cs{@ifundefined}s used by
+ % me changed to this}
+ % \changes{v0.94}{2008/10/03}{made robust to unbalanced \cs{if}s and
+ % \cs{fi}s the same way as \LaTeX's \cs{@ifundefined} (after a~heavy
+ % debug :-)}
+ %
+ \gmu@CASEnot {csname} {#1\endcsname}% defined…
+ {\@firstoftwo}%
+ %
+ \gmu@CASE {x\@xa\@xa} {\csname #1\endcsname\relax}% but only as |\relax|---then
+ % 2nd argument.
+ {\@firstoftwo}%
+ \gmu@lastCASE
+ {\@secondoftwo}%
+ \gmu@ESAC
+}
+
+\long\def\gmu@ifdefined #1#2#3{%
+ \gmu@ifundefined {#1}{#3}{#2}}
+
+
+\long\def \gmu@ifCSdefined#1{%
+ \gmu@CASEnot {defined} {#1}
+ {\@secondoftwo}%
+ %
+ \gmu@CASE x {\relax #1}
+ {\@secondoftwo}%
+ %
+ \gmu@EatCases
+ {\@firstoftwo}%
+ \gmu@ESAC
+}
+
+\long\def\CSNameIf
+#1% the name to check and probably execute
+{%
+ \ifcsname #1\endcsname
+ \@xa\@twoofthree
+ \else\@xa\@thirdofthree
+ \fi
+ {\csname #1\endcsname}%
+}
+
+\foone{\catcode`\_=8 }
+{\let\subs=_}
+
+\foone{\catcode`\^=7 }
+{\let\sups=^}
+
+\foone{\@makeother\_}
+{\def\xiiunder{_}}
+
+\let\all@unders\xiiunder
+\foone{\catcode`\_=8 }
+{\addtomacro\all@unders{_}}
+\foone{\catcode`\_=11 }
+{\addtomacro\all@unders{_}}
+\foone{\catcode`\_=13 }
+{\addtomacro\all@unders{_}}
+
+\foone{\@makeother\^^M}{\def\xiiM{
+ }}% \chgs{2010/03/16 v0.992 added}
+
+\def\all@stars{*}
+\foone{\catcode`\*=11 }
+{\addtomacro\all@stars{*}}
+\foone{\catcode`\*=13 }
+{\addtomacro\all@stars{*}}
+
+\def\all@spaces{ }
+\foone{\@makeother\ }{%
+\addtomacro\all@spaces{ }%
+}
+\foone{\obeyspaces}{%
+\addtomacro\all@spaces{ }%
+}
+
+\foone\obeylines{%
+ \def\two@Ms{
+ }}
+\foone{\@makeother\^^M}{%
+ \addtomacro\two@Ms{
+ }}
+
+\edef\spaces@and@Ms{\@xau{\all@spaces}\@xau{\two@Ms}}
+
+\ifdefined\XeTeXversion
+ \chardef\_="005F
+\fi
+
+\foone{\@makeother\`}%
+{\def\backquote{`}}
+
+\foone{\catcode`\[=1 \@makeother\{
+ \catcode`\]=2 \@makeother\}}%
+[%
+ \def\xiilbrace[{]%
+ \def\xiirbrace[}]%
+]% of |\firstofone|
+
+
+\foone{\catcode`\_=\active}
+{%
+ \pdef\smartunder{%
+ \catcode`\_=\active
+ \def_{%
+ \ifincsname\xiiunder
+ \else
+ \ifmmode\subs
+ \else\_%
+ \fi
+ \fi}}}% We define it as \inverb|\_| not just as
+\foone{\catcode`\!=0
+ \@makeother\\}
+{!newcommand*!xiibackslash{\}}
+
+\let\bslash=\xiibackslash
+
+\foone{\@makeother\%}
+{\def\xiipercent{%}}
+
+\foone{\@makeother\&}%
+{\def\xiiand{&}}
+
+\foone{\@makeother\ }%
+{\def\xiispace{ }}
+
+\foone{\@makeother\#}%
+{\def\xiihash{#}}
+
+
+\AtBeginDocument{%
+ \ifdefined\xxt@visiblespace
+ \let\visiblespace\xxt@visiblespace
+ \def\xxt@visiblespace@fallback{{%
+ \fontspec{Latin Modern Mono}\textvisiblespace}}%
+ \else
+ \let\visiblespace\xiispace
+ \fi}
+
+\foone\obeyspaces{\def\gmu@activespace{ }}
+
+\foone\obeylines{\def\activeM{^^M}}
+
+\pdef\makeblanksignored{%
+ \catcode`\^^M=9\relax
+ \catcode`\^^I=9\relax
+ \catcode`\ =9\relax}
+
+\pdef\fooblanksignored{%
+ \foone{\makeblanksignored}%
+}
+
+
+\long\pdef\edefU#1#2{%
+ \edef#1{\unexpanded{#2}}%
+}
+
+\long\pdef\@ifnextcat#1#2#3{%
+ \edefU\reserved@d{#1}%
+ \edefU\reserved@a{#2}%
+ \edefU\reserved@b{#3}%
+ \futurelet\@let@token\@ifncat}
+
+\def\@ifncat{%
+ \ifx\@let@token\@sptoken
+ \let\reserved@c\@xifncat
+ \else
+ \ifcat\reserved@d\@nx\@let@token
+ \let\reserved@c\reserved@a
+ \else
+ \let\reserved@c\reserved@b
+ \fi
+ \fi
+ \reserved@c}
+
+{\def\:{\let\@sptoken= } \global\: % this makes |\@sptoken| a space token.
+
+ % \DefIndex\@xifncat
+\def\:{\@xifncat} \@xa\gdef\: {\futurelet\@let@token\@ifncat}}
+\pdef\spifletter{\@ifnextcat a{\space}{}}
+
+\long\pdef\@ifnextif#1#2#3{%
+ \def\reserved@d{#1}%
+ \def\reserved@a{#2}%
+ \def\reserved@b{#3}%
+ \futurelet\@let@token\@ifnif}
+
+\def\@ifnif{%
+ \ifx\@let@token\@sptoken
+ \let\reserved@c\@xifnif
+ \else
+ \if\reserved@d\@nx\@let@token
+ \let\reserved@c\reserved@a
+ \else % |#1| of |\@ifnextif| is not |\if|-equivalent the future
+ % token. But this may be because the future token is active
+ % so it \emph{would} be |\if|-equivalent if not passed
+ % through |\futurelet|. Let's manage this case.
+ \begingroup
+ \edef\gmu@tempa{%
+ \lccode`\@nx~=`\reserved@d
+ }\gmu@tempa
+ \lowercase{\endgroup
+ \ifx~}\@let@token
+ \let\reserved@c\reserved@a
+ \else
+ \let\reserved@c\reserved@b
+ \fi
+ \fi
+ \fi
+ \reserved@c}
+
+{\def\:{\let\@sptoken= } \: % this makes |\@sptoken| a space token.
+\def\:{\@xifnif} \@xa\gdef\: {\futurelet\@let@token\@ifnif}}
+
+\long\pdef\@ifnextac#1#2{%
+ \@ifnextnotgroup
+ {\gmu@ifnac{#1}{#2}}%
+ {#2}}
+
+\long\def\gmu@ifnac#1#2#3{%
+ \ifcat\@nx~\@nx#3%
+ \@xa\@firstoftwo
+ \else\@xa\@secondoftwo
+ \fi{#1#3}{#2#3}}
+
+
+
+\pdef\gmu@lowstar{%
+ \iffontchar\font"22C6 \char"22C6 \else\gmu@lowstarfake\fi
+}% we could define it to
+
+
+\def\gmu@tempa{*}
+\foone{\catcode`\*=\active}
+{\def\gmu@tempb{*}% it's defined in line \ref{active star}
+ % to make |*| defined (when it was undefined,
+ % \incmd\newcommand's \incs{gm@ifstar} test turned
+ % true, the next undefined token was gobbled and raised an error).
+ \let*=\gmu@lowstar}
+
+\edef\gmu@tempa{%
+ \long\pdef\@nx\gmu@ifstar##1##2{% \chgs{2008/12/16 v0.98 renamed from
+ % \cs{@ifstar} since something
+ % redefines \cs{@ifstar}}
+ \@nx\@ifnextif\gmu@tempa%
+ {\@nx\@firstoftwo{##1}}% it's a bit hacky but O.K.: if the
+ % condition is not satisfied, the following brace is taken
+ {%
+ \@nx\@ifnextchar\@xa\@nx\gmu@tempb
+ {\@nx\@firstoftwo{##1}}% and again, if the condition is not
+ % satisfied, the second brace is taken.
+ {##2}%
+ }% of if not |*|\cat 12
+ }% of |\gmu@ifstar|.
+}\gmu@tempa
+
+
+\long\pdef\@ifnextnotgroup#1#2{% \chgs{2008/12/11 v0.98 extracted from
+ % \cs{@ifnextac}} This macro checks whether the next token is able
+ % to be picked or is it a~braced list of tokens or is it a~group
+ % closer so there's no token to be picked.
+ \@ifnextcat\bgroup{#2}{%
+ \@ifnextcat\egroup{#2}% \chgs{2008/12/11 v0.98 added test for
+ % \cmd\egroup}
+ {#1}}}
+
+\long\pdef\@ifnextgroup#1#2{% Note this macro turns true both before
+ % a~group opener and before a~group closer.
+ \@ifnextnotgroup{#2}{#1}}
+
+\pdef\ignoreactiveM{%
+ \@ifnextgroup{}{\gmu@checkM}}
+
+\foone\obeylines{% we know it's a~single token since we use this macro
+ % only in \incmd\@ifnextgroup's ‘else’.
+ \long\pdef\gmu@checkM#1{%
+ \ifx
+ #1\@xa\ignoreactiveM%
+ \else\@xa#1\fi}}
+
+\let\gmu@reserveda\*%
+\def\*{%
+ \let\*\gmu@reserveda
+ \let\gmu@letspace= }%
+\* %
+
+
+\lpdef\gmu@peep@next #1{%
+ \let\@def@token\@undefined
+ \edefU\gmu@peepnext@inner {%
+ \gmu@CASE x {\@let@token\gmu@letspace}%
+ {\@ifnextchar\par
+ {#1}
+ {\let\@let@token= \gmu@letspace % note |=| and blank space
+ \@XA{#1}\space
+ }%
+ }% of if |\futurelet| detected a blank space
+ %
+ \gmu@CASE {condsalt} % if any of the conditions below:
+ {{ x {\@let@token\@undefined}
+ x {\@let@token\relax}}} % it's arg of disjunction
+ {\gmu@peep@hash{#1}}%
+ %
+ \gmu@lastCASE
+ {#1}%
+ \gmu@ESAC
+ }%
+ \futurelet\@let@token\gmu@peepnext@inner
+}
+
+\lpdef\gmu@peep@hash
+#1% stuff that probably tests |#2| somehow
+#2% a single token, which we are sure is undefined or |\relax| (and
+{%
+ \def\@def@token{#2}%
+ #1%
+ #2%
+}
+
+\lpdef\gmu@ifpeeped
+#1% kind of comparison
+#2% stuff to compare
+{%
+ \gmu@if {defined} {\@def@token}
+ {\@XA{\gmu@if {#1}}\@xa{\@def@token #2}}
+ {\gmu@if {#1} {\@let@token #2}}%
+}
+
+\long\pdef\@ifnextspace
+#1% if yes
+#2% if not
+{%
+ \gmu@peep@next
+ {\gmu@if x {\@let@token\gmu@letspace}{#1}{#2}}%
+}
+
+\long\pdef\@ifnextcharRS
+#1% a single token (will be |\ifx|ed)
+#2% what if yes
+#3% what if not
+{%
+ \gmu@peep@next
+ {\gmu@if {defined} {\@def@token}
+ {\@XA{\gmu@if {StrX}}\@xa {\@def@token #1}}% of the special “null”
+ % case
+ %
+ {\gmu@if x {\@let@token #1}}%
+ {#2}{#3}%
+ }% of |\gmu@peep@next|
+}
+
+\long\pdef\@ifnextanyRS
+#1% list of tokens (any balanced text, will be |\let| token after token
+#2% what if next is one of listed |#1|
+#3% what if not
+{\gmu@peep@next
+ {\gmu@if {defined} {\@def@token}
+ {\@xa \gmu@ifStrXany \@def@token }
+ % otherwise we are next to a defined and not |\relax| token so
+ {\gmu@ifxany {\@let@token}}%
+ {#1}{#2}{#3}%
+ }% of peep
+}
+
+
+\long\def\gmu@ifnextStrXany
+#1% outer macro's tested list of tokens
+#2% “if found” branch
+#3% “if not found” branch
+{\gmu@notif {condsalt}
+ {{ x {\@let@token\@undefined} x {\@let@token\relax}}}%
+ {#2}%
+ %
+ % Some (i.e.\ \emph{both}) |\@undefined| or |\relax|, then we
+ % compare strings
+ {\gmu@futureifany {#2}{#3}{#1}}%
+}
+
+\long\def\gmu@futureifany
+#1% what if \OK
+#2% what if not \OK
+#3% list of tokens
+#4% token ot be checked against |#3| (and put back on the input) Note
+{\gmu@ifstrany #4 {#3}{#1}{#2}#4}
+
+\long\pdef\@ifnextanyIS
+#1% list of tokens (any balanced text, will be |\let| token after token
+#2% what if next is one of listed in |#1|
+#3% what if not
+{%
+ \edefU\gmu@ifna@afterlet{%
+ \gmu@if x{\@let@token\gmu@letspace}%
+ {% if next is blank space, we drop it and retry:
+ \edefU\gmu@ifna@resa{\@ifnextanyIS{#1}{#2}{#3}}%
+ \afterassignment\gmu@ifna@resa
+ \let\gmu@drain=
+ }%
+ {% else we perform |\gmu@ifnextany|
+ \gmu@ifxany{\@let@token}{#1}{%
+ \gmu@ifnextStrXany {#1}{#2}{#3}%
+ }%
+ {#3}%
+ }%
+ }% of the after-let macro
+ \futurelet\@let@token\gmu@ifna@afterlet
+}% of |\@ifnextanyIS|
+
+\long\pdef\@ifnextnoneRS
+#1% list of tokens (any balanced text, will be |\let| token after token
+#2% what if next is one of listed |#1|
+#3% what if not
+{%
+ \@ifnextanyRS{#1}{#3}{#2}%
+}
+
+\long\pdef\@ifnextgroupRS #1#2{%
+ \gmu@peep@next
+ {\gmu@if x{\@let@token\bgroup}{#1}%
+ {\gmu@if x{\@let@token\egroup}{#1}{#2}}%
+ }%
+}
+
+\long\pdef\@ifnextnotgroupRS#1#2{%
+ \@ifnextgroupRS{#2}{#1}}
+
+
+
+\foone\obeylines{%
+ \long\pdef\@ifnextMac#1#2{%
+ \@ifnextchar^^M{#1}{#2}}}
+
+\long\def\xiistring#1{%
+ \if\@nx#1\xiispace
+ \xiispace
+ \else
+ \afterfi{\string#1}% to make the same error as bare |\string|
+ % would cause in case of empty \inhash1.
+ \fi}
+
+\def\@xiispaces#1 #2\@nil{%
+ #1%
+ \ifx\@xiispaces#2\@xiispaces
+ \else
+ \xiispace
+ \afterfi{\@xiispaces#2\@nil}%
+ \fi}
+
+\long\pdef\xiiEdetoke
+#1% a scratch \CS
+#2% stuff to be fully expanded and turned to catcode 12 including
+ % spaces.
+{%
+ \edef#1{#2}%
+ \edef#1{%
+ \@xa\@xa\@xa\@xiispaces
+ \@xa\detokenize\@xa{#1} \@nil}%
+}
+
+\long\def\@ifEUnextchar#1#2#3{%
+ % ‘if Edefed Unexpanded next char’
+ \let\reserved@d=#1%
+ \edefU\reserved@a{#2}%
+ \edefU\reserved@b{#3}%
+ \futurelet\@let@token\@ifnch}
+
+\newcommand\gmu@storespecials[1][]{% we provide a~possibility of
+ % adding stuff. For usage see line \ref{@storespecials}.
+ \def\do##1{\catcode`\@nx##1=\the\catcode`##1\relax}%
+ \edef\gmu@restorespecials{%
+ \dospecials\do\^^M}#1}
+
+\pdef\gmu@septify{% restoring the standard catcodes of specials. The
+ % name is the opposite of `sanitize' ^^A(
+ % :-)\,. It restores also the original catcode of \inverb|^^M|.
+ \def\do{\relax\catcode`}%
+ \do\ 10\do\\0\do\{1\do\}2\do\$3\do\&4%
+ \do\#6\do\^7\do\_8\do\%14\do\~13\do\^^M5\relax
+ %\nostanza |%% \let\do\@makeother|\\
+ % |%% \do0\do1\do2\do3\do4\do5\do6\do7\do8\do9\relax|\nostanza
+}
+
+\newif\ifgmu@SMglobal
+
+\pdef\SMglobal{\gmu@SMglobaltrue}
+
+\def\MakePrivateLetters{\makeatletter}
+
+\pdef\StoreMacro{%
+ \begingroup\MakePrivateLetters
+ \gmu@ifstar\egStore@MacroSt\egStore@Macro}
+
+\lpdef\egStore@Macro#1{\endgroup\Store@Macro{#1}}
+\lpdef\egStore@MacroSt#1{\endgroup\Store@MacroSt{#1}}
+
+\pdef\StoreMacro@nocat
+{%
+ \gmu@ifstar \Store@MacroSt \Store@Macro
+}
+
+\def\gmu@storeprefix{/gmu/store}
+
+\lpdef\Store@Macro#1{%
+ \escapechar92
+ \ifgmu@SMglobal\afterfi\global\fi
+ \@xa\let\csname \gmu@storeprefix/\bslash@or@ac{#1}\endcsname#1%
+ \global\gmu@SMglobalfalse
+}
+
+\lpdef\Store@MacroSt#1{%
+ \edef\gmu@smtempa{%
+ \ifgmu@SMglobal\@xa\global\fi
+ \let\@xa\@nx\csname\gmu@storeprefix/\bslash@or@ac{#1}\@xa\endcsname%\label{SMbslash}
+ % we add backslash because to ensure compatibility between
+ % \incs{(Re)StoreMacro} and \incs{(Re)StoreMacro*}, that is. to allow
+ % writing e.g. \inverb|\StoreMacro\kitten| and then
+ % \inverb|\RestoreMacro*{kitten}| to restore the meaning of
+ % \incs{kitten}.\ilrr
+ \ifcsname #1\endcsname % \chgs[\StoreMacro]{2010/04/16 v0.993
+ % fixed asymmetry with the unstarred version: till today the
+ % unstarred version for an undefined \CS undefine the storage \CS
+ % and the starred version made it \cmd\relax. Now both undefine}
+ % If the argument \CS is undefined, we undefine the storage macro too.
+ \@xa\@nx\csname#1\endcsname
+ \else\@nx\@undefined
+ \fi
+ \global\gmu@SMglobalfalse}%% we wish the globality to be just
+ % once.\par
+ \gmu@smtempa
+}
+
+
+\lpdef\StoreMacros{\begingroup\MakePrivateLetters\egStore@Macros}
+
+\lpdef\egStore@Macros#1{\endgroup
+ \Store@Macros{#1}%
+}
+
+\lpdef\Store@Macros #1{%
+ \gmu@setsetSMglobal
+ \let\gml@StoreCS\Store@Macro
+ \gml@storemacros#1.}
+
+\def\gmu@setsetSMglobal{%
+ \ifgmu@SMglobal
+ \let\gmu@setSMglobal\gmu@SMglobaltrue
+ \else
+ \let\gmu@setSMglobal\gmu@SMglobalfalse
+ \fi}
+
+\lpdef\gml@storemacros#1{%
+ \def\gmu@storemacros@resa{\@nx#1}% My \TeX\ Guru's trick to deal with |\fi|
+ % and such, i.e., to hide |#1| from \TeX\ when it is processing a~test's
+ % branch without expanding.
+ \if\gmu@storemacros@resa.% a~dot finishes storing.
+ \global\gmu@SMglobalfalse
+ \else
+ \if\gmu@storemacros@resa,% The list this macro is put before may
+ % contain commas and that's O.K., we just continue the work.
+ \afterfifi\gml@storemacros
+ \else% what is else this shall be stored.
+ \gml@StoreCS{#1}% we use a~particular \CS to may |\let| it both to
+ % the storing macro as above and to the restoring one as
+ % \gmiflink[letRestore]{below}.
+ \afterfifi{\gmu@setSMglobal\gml@storemacros}%
+ \fi
+ \fi
+}
+
+\lpdef\RestoreMacro{%
+ \begingroup\MakePrivateLetters\gmu@ifstar\egRestore@MacroSt\egRestore@Macro}
+
+\lpdef\egRestore@Macro#1{\endgroup\Restore@Macro{#1}}
+\lpdef\egRestore@MacroSt#1{\endgroup\Restore@MacroSt{#1}}
+
+\lpdef\Restore@Macro#1{%
+ \escapechar92
+ \gmu@ifstored#1{%
+ \ifgmu@SMglobal\afterfi\global\fi
+ \@xa\let\@xa#1\csname \gmu@storeprefix/\bslash@or@ac{#1}\endcsname
+ \global\gmu@SMglobalfalse}%
+ {\unless\ifgmu@quiet
+ \PackageWarning{gmutils}{\@nx#1 is not stored, I do nothing with
+ it}%
+ \fi
+ }%
+}
+
+\long\def\gmu@ifstored#1#2#3{%
+ \gmu@ifundefined{\gmu@storeprefix/%
+ \bslash@or@ac{#1}}{#3}{#2}%
+}
+
+\lpdef\gmu@storeifnotyet#1{%
+ \gmu@if {} {\relax\@nx#1}% we check if it's a~\CS
+ {\gmu@ifstored{#1}{}{\StoreMacro@nocat#1}}%
+ {}%
+}
+
+\lpdef\Restore@MacroSt#1{%
+ \gmu@ifundefined{\gmu@storeprefix/\bslash@or@ac{#1}}%
+ {\unless\ifgmu@quiet
+ \PackageWarning{gmutils}{\bslash#1 is not stored. I~do nothing}%
+ \fi}%
+ {\edef\gmu@smtempa{%
+ \ifgmu@SMglobal\global\fi
+ \@nx\let\@xa\@nx\csname#1\endcsname
+ \@xa\@nx\csname\gmu@storeprefix/\bslash@or@ac{#1}\endcsname}% cf. the commentary
+ % in line \ref{SMbslash}.
+ \gmu@smtempa}%
+ \global\gmu@SMglobalfalse
+}
+
+\lpdef\RestoreMacros{%
+ \begingroup\MakePrivateLetters
+ \egRestore@Macros}
+
+\lpdef\egRestore@Macros#1{\endgroup
+ \Restore@Macros{#1}%
+}
+
+\lpdef\Restore@Macros #1{%
+ \gmu@setsetSMglobal
+ \let\gml@StoreCS\Restore@Macro% \gmhypertarget[letRestore]{we}
+ % direct the core \CS towards restoring and call the same iterating
+ % macro as in line \ref{InnerStore}.
+ \gml@storemacros#1.}
+
+\pdef\ResetMacro{% restore possibly to |\@undefined|
+ % \chgs{2010/04/16 v0.993 added}
+ \begingroup\MakePrivateLetters\gmu@ifstar\egReset@MacroSt\egReset@Macro}
+
+\lpdef\egReset@Macro#1{\endgroup\Reset@Macro{#1}}
+\lpdef\egReset@MacroSt#1{\endgroup\Reset@MacroSt{#1}}
+
+\lpdef\Reset@Macro#1{%
+ \escapechar92
+ \ifgmu@SMglobal\@xa\global\fi
+ \ifcsname \gmu@storeprefix/\bslash@or@ac{#1}\endcsname
+ \@xa\let\@xa#1\csname \gmu@storeprefix/\bslash@or@ac{#1}\endcsname
+ \else
+ \let#1\@undefined
+ \fi
+ \global\gmu@SMglobalfalse
+}%
+
+\lpdef\Reset@MacroSt#1{%
+ \ifcsname \gmu@storeprefix/\bslash@or@ac{#1}\endcsname
+ \ifgmu@SMglobal\@xa\global\fi
+ \@xa\let\csname#1\@xa\endcsname
+ \csname\gmu@storeprefix/\bslash@or@ac{#1}\endcsname % cf. the commentary
+ % in line \ref{SMbslash}.
+ \else
+ \@xa\let\csname#1\endcsname\@undefined
+ \fi
+ \global\gmu@SMglobalfalse
+}
+
+\lpdef\ResetMacros{\begingroup\MakePrivateLetters\Reset@Macros}
+
+\lpdef\Reset@Macros#1{\endgroup
+ \gmu@setsetSMglobal
+ \let\gml@StoreCS\Reset@Macro% \gmhypertarget[letReset]{we}
+ % direct the core \CS towards restoring and call the same iterating
+ % macro as in line \ref{InnerStore}.
+ \gml@storemacros#1.}
+
+\pdef\StoredMacro{\begingroup\MakePrivateLetters\Stored@Macro}
+\lpdef\Stored@Macro#1{\endgroup\Restore@Macro#1#1}
+
+\long\def\storedcsname#1{%% \changes{v0.88}{2008/08/03}{added}
+ \ifcsname \gmu@storeprefix/\bslash@or@ac{#1}\endcsname
+ \afterfi{%
+ \csname \gmu@storeprefix/\bslash@or@ac{#1}\endcsname}%
+ \else \@xa \@undefined
+ \fi
+}
+
+\pdef\StoreEnvironment#1{% \label{StoreEnvironment}
+ \Store@MacroSt{#1}\Store@MacroSt{end#1}}
+
+\pdef\RestoreEnvironment#1{%
+ \Restore@MacroSt{#1}\Restore@MacroSt{end#1}}
+
+\pdef\StoringAndRelaxingDo{%
+ \gmu@SMdo@setscope
+ \long\def\do##1{%
+ \gmu@SMdo@scope
+ \@xa\let\csname \gmu@storeprefix/\bslash@or@ac{##1}\endcsname##1%
+ \gmu@SMdo@scope\let##1\relax}}
+
+\pdef\gmu@SMdo@setscope{%
+ \ifgmu@SMglobal\let\gmu@SMdo@scope\global
+ \else\let\gmu@SMdo@scope\relax
+ \fi
+ \global\gmu@SMglobalfalse
+}
+
+\lpdef\RestoringDo{%
+ \gmu@SMdo@setscope
+ \long\def\do##1{%
+ \gmu@SMdo@scope
+ \@xa\let\@xa##1\csname
+ \gmu@storeprefix/\bslash@or@ac{##1}\endcsname}%
+}
+
+\pdef\gmu@MakeScopePrefix
+#1% \CS to be let |\global| or |\relax|
+#2% a sequence of tokens
+{%
+ \let#1\relax
+ \gmu@ifxany{\global}{#2}%
+ {\let#1\global}{}%
+}
+
+\lpdef\gmu@namelet
+#1% scope prefix (to be honest, \emph{any} sequence of tokens that may
+ % be passed as an argument: |\gmu@ifxany| will parse it)
+#2% left side of the assignment
+#3% right side of the assignment
+{%
+ \gmu@MakeScopePrefix\gmu@namelet@scpref{#1}%
+ \gmu@if {csname} {#3\endcsname}%
+ {%
+ \@xa\gmu@namelet@scpref\@xa\let\csname#2\@xa\endcsname
+ \csname#3\endcsname}%
+ {%
+ \@xa\gmu@namelet@scpref
+ \@xa\let\csname#2\endcsname\@undefined}%
+}
+
+\pdef\n@melet{\gmu@namelet\relax}
+
+\pdef\gn@melet{\gmu@namelet\global}
+
+\long\pdef\tri@let
+#1% scope prefix(es)
+#2% left side
+#3% right side of the assignment
+{%
+ \gmu@MakeScopePrefix\gmu@tri@let@scpref{#1}%
+ \ifcat\@nx~\@nx#2%
+ \def\next{\gmu@tri@let@scpref\let#2}%
+ \else \edef\next{\gmu@tri@let@scpref\let\@xanxtri{#2}}%
+ \fi
+ \ifcat\@nx~\@nx#3%
+ \next#3%
+ \else
+ \edef\next{%
+ \@xau\next
+ \ifcsname \strip@bslash{#3}\endcsname
+ \@xanxtri{#3}%
+ \else\@nx\@undefined
+ \fi
+ }% of next's edef
+ \next
+ \fi
+}%
+
+\long\pdef\envirlet#1#2{% for |\let|ting environments.
+ \n@melet{#1}{#2}%
+ \n@melet{end#1}{end#2}%
+}
+
+\long\pdef\glenvirlet#1#2{% for |\let|ting environments.
+ \gn@melet{#1}{#2}%
+ \gn@melet{end#1}{end#2}%
+}
+
+
+
+\def\@ifXeTeX{% two-argument command
+ \ifdefined\XeTeXversion
+ \unless\ifx\XeTeXversion\relax\afterfifi\@firstoftwo\else\afterfifi\@secondoftwo\fi
+ \else\afterfi\@secondoftwo\fi}
+
+\def\XeTeXifprefix{% to be used as prefix to an |\if›…| test.
+ \@ifXeTeX{}{\unless}}
+
+
+\@ifXeTeX{%
+ \pdef\textbullet{% \changes{v0.94}{2008/10/3}{the \XeTeX\
+ % version enriched with \cs{iffontchar} due to lack of bullets
+ % with the default settings reported by Morten H\o{}gholm and Edd Barrett}
+ \iffontchar\font"2022 \char"2022 \else\ensuremath{\bullet}\fi}%
+ %
+ \pprovide\glyphname#1{% \changes{v0.96}{2008/11/12}{moved here from
+ % my private document class}
+ \XeTeXglyph \numexpr\XeTeXglyphindex "#1"\relax\relax}% since
+ % \XeTeX\ … \incs{numexpr} is redundant.
+}
+{\def\textbullet{\ensuremath{\bullet}}}
+
+
+\long\def\detoken@xa#1{\detokenize\@xa{#1}}
+
+ \long\def\all@other#1{\@xa\gmu@gobmacro\meaning#1}
+
+ % The |\gmu@gobmacro| macro above is applied to gobble the |\meaning|'s
+ % beginning, |long macro:->| all `other' that is.
+ % \Define\gmu@gobmacro
+ \edef\gmu@tempa{%
+ \def\@nx\gmu@gobmacro##1\@xa\@gobble\string\macro:##2->{}}
+ \gmu@tempa
+
+
+\def\gmshowlists{%
+ \tracingonline=1
+ \showboxdepth=1000 \showboxbreadth=1000 \showlists}
+
+\def\gmshowbox{%
+ \tracingonline=1
+ \showboxdepth=10000 \showboxbreadth=10000 \showbox}
+
+\def\gmtracingoutput{%
+ \tracingoutput\@ne
+ \tracingonline=\@ne
+ \showboxdepth=10000 \showboxbreadth=10000 }
+
+\newif\ifgmu@debug@msgs
+
+\def\gmtron{%
+ \tracingonline=\@M
+ \tracingmacros=\@M
+ \tracingassigns=\@M
+ \tracingcommands=\@m
+ \gmu@debug@msgstrue
+ \let\let\let
+}
+
+\def\gmtroff{%
+ \tracingonline=\m@ne
+ \tracingmacros\m@ne
+ \tracingassigns=\m@ne
+ \tracingcommands=\m@ne
+ \gmu@debug@msgsfalse
+ \let\let\let
+}
+
+\newcommand\nameshow[1]{%
+ \ifcsname #1\endcsname
+ \@xa\show\csname#1\endcsname
+ \else \show\@undefined
+ \fi}
+
+\newcommand\nameshowthe[1]{%
+ \ifcsname #1\endcsname
+ \@xa\showthe\csname#1\endcsname
+ \else \showthe\@undefined
+ \fi}
+
+\newcommand\namemeaning[1]{%
+ \ifcsname #1\endcsname
+ \@xa\typeout{\@xa\meaning\csname#1\endcsname}%
+ \show\relax
+ \else \typeout{\meaning\@undefined}\show\relax
+ \fi}
+
+\def\secondclass{%
+ \newif\ifSecondClass
+ \SecondClasstrue
+ \@fileswithoptions\@clsextension}%|[outeroff,gmeometric]{gmdocc}|%
+
+\AtBeginDocument{%
+ \unless\ifdefined\@parindent
+ \newskip\@parindent
+ \@parindent=\parindent
+ \fi
+}
+
+\def\balsmiley#1 {}% to balance parentheses and brackets in
+ % smileys. \balsmiley( ;-) \inverb|\balsmiley( ;-)|
+
+\long\def\scantnoline#1{% ‘rescan tokens without adding line at the end’
+ {\endlinechar\m@ne\scantokens{#1}}}
+
+\pdef\getprevdepth{% to pass last depth through a group (e.g. |\end{envir.}|)
+ \endgraf
+ \xdef\setprevdepth{\prevdepth=\the\prevdepth\relax}%
+}
+
+\pdef\getprevdepthlocal{%
+ \endgraf
+ \edef\setprevdepth{\prevdepth=\the\prevdepth\relax}%
+}
+
+\def\StoreCatM{%
+ \protected\edef\RestoreCatM{%
+ \catcode`\@nx\^^M=\the\catcode`\^^M\relax}%
+}
+
+\pdef\RestoreCatM{\PackageE{gmutils}{first store the catcode of
+ ^\empty^\empty M with \string\StoreCatM.}%
+}
+
+
+\RequirePackage{graphicx}
+
+\pdef\resizegraphics#1#2#3{% % \changes{v0.94}{2008/10/4}{\cs{includegraphics}
+ % works well in \XeTeX\ so I~remove the complicated version
+ % with \cs{XeTeXpicfile}}
+ % 2009/11/17 works bad with a file whose name contains spaces so I
+ % return \cmd\XeTeXpicfile
+ \resizebox{#1}{#2}{%
+ \edef\gmu@tempa{\@nx\csname XeTeX\@nx\@ifendswithpdf{%
+ \@xa\string\csname#3\endcsname}{pdf}{pic}file\@nx\endcsname}%
+ \gmu@tempa "#3"\relax}}
+
+\edef\gmu@tempa{%
+ \def\@nx\@ifendswithpdf##1{%
+ \unexpanded{%
+ \ifnum
+ \if\relax\gmu@pdfdetector}##1%
+ \detokenize{pdf}\unexpanded{\relax0\else1\fi}% we expand to 1 if
+ % \inhash1 ends with lowercase ‘pdf’ of cat. 12
+ \unexpanded{\if\relax\gmu@PDFdetector}##1%
+ \detokenize{PDF}\unexpanded{\relax0\else1\fi}% we expand to 1 if
+ % \inhash1 ends with uppercase ‘PDF’ of cat. 12
+ >0
+ \unexpanded{\@xa\@firstoftwo\else\@xa\@secondoftwo\fi}%
+ }% of |\@ifendswithpdf|
+ %
+ % \stanza
+ %
+ \def\@nx\gmu@pdfdetector##1\detokenize{pdf}{}%
+ \def\@nx\gmu@PDFdetector##1\detokenize{PDF}{}%
+}\gmu@tempa
+
+
+\def\lastcentered{%
+ \lastlinefit\z@
+ \parindent0sp\relax
+ \leftskip\dimexpr1\leftskip\relax plus 1fil\relax
+ \rightskip\dimexpr1\rightskip\relax plus -1fil\relax
+ \parfillskip0sp plus 2fil\relax
+}
+
+\def\endlastcentered{\par\@endpetrue}
+
+\def\firstcentered{%
+ \lastlinefit\z@
+ \parfillskip 0sp\relax
+ \rightskip0sp plus 1fil\relax
+ \leftskip0sp plus -1fil\relax
+ \parindent 0sp
+ \addtotoks\everypar{\hskip0sp plus 2fil\relax}%
+}
+
+\let\endfirstcentered\endlastcentered
+
+\def\gmu@measurewd#1{% \label{@measurewd}
+ \edef\gmu@tempa{\the\fontcharwd\font`#1}%
+ \settowidth{\@tempdimb}{% to preserve kerning
+ \char`#1\char`#1\char`#1\char`#1\char`#1\char`#1%
+ \char`#1\char`#1\char`#1\char`#1\char`#1\char`#1%
+ \char`#1\char`#1\char`#1\char`#1\char`#1\char`#1%
+ \char`#1\char`#1\char`#1}%
+ \edef\gmu@tempb{\the\dimexpr(\@tempdimb-\gmu@tempa)/20}%
+}
+
+\def\@xa@three#1#2{% reverses expansion of three tokens, two given as
+ % arguments. (third may be |{|^^A }
+ % )
+ \@xa\@xa\@xa \@xa\@xa\@xa \@xa #1%
+ \@xa\@xa\@xa #2%
+ \@xa }
+
+\def\@xa@four#1#2#3{% reverses expansion of four tokens, three given as
+ % arguments. (fourth may be |{|^^A }
+ % )
+ \@xa\@xa\@xa\@xa \@xa\@xa \@xa
+ \@xa\@xa\@xa\@xa \@xa\@xa\@xa\@xa #1%
+ \@xa\@xa\@xa\@xa \@xa\@xa \@xa #2
+ \@xa\@xa\@xa #3%
+ \@xa }
+
+
+\long\pdef\@ifenvir#1{%\label{@ifenvir}\
+ % \begin{enumargs}
+ % \mand enquired environment name which will be confronted with
+ % \incs{@currenvir}
+ % \mand what if true (if the names are
+ % equivalent\qfootnote{The names are checked whether they produce
+ % the same \cmd\csname. They don't have to have the same
+ % catcodes.})
+ % \mand what if false
+ % \end{enumargs}
+ %
+ % \changes{v0.92}{2008/08/07}{added}
+ % \chgs{2010/06/02 v0.993 made \cmd\protected after an error at work}
+ \gmu@ifedetokens{\@currenvir}{#1}%
+}
+
+\pdef\@ifjobname#1{\gmu@ifedetokens{\jobname}{#1}}
+
+\long\def\gmu@ifstrcmp
+#1% wrapper for left side of comparison
+#2% wrapper for right side of comparison
+#3% left side of comparison (list of tokens)
+#4% right —”—
+{%
+ \ifnum\strcmp{#1{#3}}{#2{#4}}=\z@
+ \@xa\@firstoftwo
+ \else
+ \@xa\@secondoftwo
+ \fi
+}
+
+\def\gmu@ifdetokens
+{%
+ \gmu@ifstrcmp\detokenize\detokenize
+}% of |\gmu@ifdetokens|
+
+\def\gmu@ifutokens
+{%
+ \gmu@ifstrcmp\unexpanded\unexpanded
+}
+
+\def\gmu@ifedetokens{%
+ \gmu@ifstrcmp \@firstofone \@firstofone
+}
+
+\@XA{\pdef\gmu@pifdetokens}\@xa{\gmu@ifdetokens}
+
+\@XA{\pdef\gmu@pifutokens}\@xa{\gmu@ifutokens}
+
+\@XA{\pdef\gmu@pifedetokens}\@xa{\gmu@ifedetokens}
+
+ % \chgs{2009/04/21 v0.99 moved to a~separate macro from
+ % \cmd\@ifenvir\ and made symmetric to both arguments}
+ % \chgs{2008/12/01 v0.98 rewritten not to make entries in the hash
+ % table, thanks to \cmd\detokenize\ and made robust to open \cs{if}s
+ % in the arguments thanks to substitution of explicit parameters
+ % with \cmd\@firstoftwo\ and \cmd\@secondoftwo}
+
+
+
+\def\gmu@HHashes#1#2{% this is a~fully expandable loop analogous to
+ % that of The % \eTeX\ Manual p.~9.
+ \ifnum#1<#2 %
+ ################\number#1
+ \expandafter\gmu@HHashes
+ \expandafter{\number\numexpr#1+1\expandafter}%
+ \expandafter{\number#2\expandafter}%
+ \fi}% of |\gmu@HHashes|.
+
+\def\gmu@Hashes#1#2{% this is a~fully expandable loop analogous to
+ % that of The % \eTeX\ Manual p.~9.
+ % expanding in an |\edef| to |####›1›…####⁄<h.$2-1$>| (quadruple hashes' sequence)
+ \ifnum#1<#2 %
+ ########\number#1
+ \expandafter\gmu@HHashes
+ \expandafter{\number\numexpr#1+1\expandafter}%
+ \expandafter{\number#2\expandafter}%
+ \fi}% of |\gmu@hashes|.
+
+\def\gmu@hashes#1#2{% this is a loop analogous to
+ \ifnum#1<#2%
+ ####\number#1
+ \expandafter\gmu@hashes
+ \expandafter{\number\numexpr#1+1\expandafter}%
+ \expandafter{\number#2\expandafter}%
+ \fi
+}% of |\gmu@hashes|.
+
+\def\gmu@HHashesbraced#1#2{%
+ \ifnum#1<#2%
+ {################\number#1}%
+ \expandafter\gmu@HHashesbraced
+ \expandafter{\number\numexpr#1+1\expandafter}%
+ \expandafter{\number#2\expandafter}%
+ \fi}% of |\gmu@hashesbraced|.
+
+\def\gmu@Hashesbraced#1#2{%
+ \ifnum#1<#2%
+ {########\number#1}%
+ \expandafter\gmu@HHashesbraced
+ \expandafter{\number\numexpr#1+1\expandafter}%
+ \expandafter{\number#2\expandafter}%
+ \fi}% of |\gmu@hashesbraced|.
+
+\def\gmu@hashesbraced#1#2{%
+ \ifnum#1<#2%
+ {####\number#1}%
+ \expandafter\gmu@hashesbraced
+ \expandafter{\number\numexpr#1+1\expandafter}%
+ \expandafter{\number#2\expandafter}%
+ \fi
+}% of |\gmu@hashesbraced|.
+
+\def\gmu@hashesOut#1#2{%
+ \ifnum#1<#2%
+ \space\space\space\space
+ »\@nx\unexpanded{####\number#1}«%
+ \expandafter\gmu@hashesOut
+ \expandafter{\number\numexpr#1+1\expandafter}%
+ \expandafter{\number#2\expandafter}%
+ \fi
+}% of |\gmu@hashesbraced|.
+
+\def\gmu@hashesOutU#1#2{%
+ \ifnum#1<#2%
+ \space\space\space\space
+ »\@nx\unexpanded{####\number#1}«%
+ \expandafter\gmu@hashesOut
+ \expandafter{\number\numexpr#1+1\expandafter}%
+ \expandafter{\number#2\expandafter}%
+ \fi
+}% of |\gmu@hashesbraced|.
+
+\@tempcnta=1
+\@whilenum\@tempcnta<11\do{% 2010/4/15
+ \@nameedef{gmu@hashes@\the\numexpr\@tempcnta-1\relax}%
+ {\gmu@hashes1\@tempcnta}%
+ %
+ \@nameedef{gmu@Hashes@\the\numexpr\@tempcnta-1\relax}%
+ {\gmu@Hashes1\@tempcnta}%
+ %
+ \@nameedef{gmu@HHashes@\the\numexpr\@tempcnta-1\relax}%
+ {\gmu@HHashes1\@tempcnta}%
+ %
+ \@nameedef{gmu@hashesbraced@\the\numexpr\@tempcnta-1\relax}%
+ {\gmu@hashesbraced1\@tempcnta}%
+ %
+ \@nameedef{gmu@Hashesbraced@\the\numexpr\@tempcnta-1\relax}%
+ {\gmu@Hashesbraced1\@tempcnta}%
+ % %
+ \@nameedef{gmu@HHashesbraced@\the\numexpr\@tempcnta-1\relax}%
+ {\gmu@HHashesbraced1\@tempcnta}%
+ %
+ \edef\gmu@eloops@resa{%
+ \long\def\@xanxcs{% ^^A >>>>>> printhashes
+ gmu@TOhashes@\romannumeral\numexpr\@tempcnta-1\relax}%
+ \gmu@hashes1\@tempcnta{%
+ \@nx\TypeOut{%
+ \gmu@hashesOut % ^^A2
+ 1 \@tempcnta}%
+ }% of |\gmu@TOhashes@viii| etc.
+ %
+ }% of temporary macro
+ %
+ \gmu@eloops@resa
+ % Generates nine pairs of macros |\gmu@TOhashes@i|,
+ % |\gmu@TOUhashes@i|, |\gmu@TOhashes@ii|, |\gmu@TOUhashes@ii|
+ % etc. that print (type out) their arguments on the terminal,
+ % ^^A expanded or \textbf Unexpanded.
+ % unexpanded
+ %
+ \advance\@tempcnta\@ne
+}% of |\@whilenum|
+
+\foone{\catcode`\ \active}%
+{\newcommand*\gmobeyspaces{\let \ \catcode`\ \active}}
+
+\newcommand*\nohy{\leavevmode\kern0sp\relax}
+\newcommand*\yeshy{\leavevmode\penalty\@M\hskip\z@skip}
+
+\long\pdef\gmu@EdefCurrnames#1{%
+ \xiiEdetoke\gmu@EdefCurrnames@resa{#1}%
+ \@xa \gmu@EdefCurrnames@ \gmu@EdefCurrnames@resa.tex.\@nil
+ % if no extension is present, |tex| is assumed. This couple of
+ % macros won't work well for files with dots in their names.
+}
+
+\pdef\gmu@EdefCurrnames@ #1.#2.#3\@nil{%
+ \def\@currname{#1}%
+ \def\@currext{#2}%
+}
+
+\def\NamedInput@prepare#1{% we wrap in a macro to use also in |\DocInput|
+ \@pushfilename
+ \gmu@EdefCurrnames {#1}%
+}
+
+\let\NamedInput@finish=\@popfilename
+
+\pdef\NamedInput#1{% useful e.g.~in error handling
+ \NamedInput@prepare {#1}%
+ \@@input #1\relax
+ \NamedInput@finish
+}
+
+\def\gmu@ifdim
+#1% dimen specification
+#2% comparison
+#3% dimen specification
+{%
+ \ifnum0\ifx#2≤1\fi\ifx#2≥1\fi\ifx#2≠1\fi=\@ne
+ \afterfi\unless
+ \fi
+ \ifdim#1\ifx#2≤>\fi\ifx#2≥<\fi\ifx#2≠=\fi
+ \ifx#2>>\fi\ifx#2<<\fi\ifx#2==\fi
+ \dimexpr(#3)*1\relax% parentheses are for closing all possible
+ % \eTeX pressions not to gobble that |\relax|
+ % by them but only by the outermost |\dimexpr|
+ % to avoid premature expansion of the
+ % following |\expandafter|. (2010/6/14)
+ \@xa\@firstoftwo
+ \else\@xa\@secondoftwo
+ \fi
+}
+
+\def\gmu@ifskip
+#1% glue specification
+#2% comparison for natural part
+#3% comparison for stretch part
+#4% comparison for shrink part
+#5% glue specification
+{\ifnum
+ 0\gmu@ifdim{1\glueexpr#1}#2{1\glueexpr#5}10%
+ \gmu@ifdim{\gluestretch\glueexpr#1}#3{\gluestretch\glueexpr#5}10%
+ \gmu@ifdim{\glueshrink\glueexpr#1}#4{\glueshrink\glueexpr#5}10=111
+ \@xa\@firstoftwo
+ \else\@xa\@secondoftwo
+ \fi
+}
+
+\def\gmu@ifbox
+#1% a box register number (e.g.~|\copy\z@|)
+#2% comparison for heights
+#3% comparison for depths
+#4% comparison for widths
+#5% a box register number
+{%
+ \gmu@ifskip
+ {\glueexpr (\ht#1 plus \dp#1 minus\wd#1 )*1\relax}%
+ #2#3#4%
+ {\glueexpr (\ht#5 plus \dp#5 minus\wd#5 )*1\relax}%
+}
+
+\def\greater@dim#1#2{%
+ \ifdim\dimexpr#1>\dimexpr(#2)*1\relax
+ #1%
+ \else #2%
+ \fi
+}
+
+\long\pdef\gmu@removeelement
+#1% element to be removed
+#2% macro carrying a comma-separated list
+#3% \CS to carry removed element.
+{%
+ \let#3\@undefined%
+ \def\gmu@removeelement@resa##1,#1,##2\@nil{%
+ \gmu@ifempty{##2}%
+ {\edefU#2{##1}}%
+ {\edefU#2{##1,##2}%
+ \def#3{#1}%
+ \@xa\gmu@removeelement@resa#2\@nil
+ }%
+ % If |##2| is not empty, then we know |#1| was in the list so we
+ % have to remove its copy from the end of the list.
+ }% of |\gmu@removeelement@resa|
+ \@xa\gmu@removeelement@resa\@xa,#2,#1,\@nil
+ % We gobble the beginning comma
+ \@xa\@xa\@xa\ifx\@xa\@firstofmany#2\relax\@nil,%
+ \edef#2{\unexpanded
+ \@xa\@xa\@xa{\@xa\@gobble#2}}%
+ \fi
+}
+
+\long\def\@nxcsn#1{%
+ \@xa\@nx\csname #1\endcsname}
+
+
+\def\@listbegvskipping{%
+ \@topsepadd=\topsep
+ \ifvmode
+ \advance\@topsepadd by\partopsep
+ \fi
+ \par
+ \addvspace\@topsepadd
+}
+
+
+\def\foolc#1#2{%
+ \begingroup\lccode`#1=`#2\relax
+ \lcfirstofone
+}
+
+\long\def\lcfirstofone#1{%
+ \lowercase{\endgroup#1}%
+}
+
+\long\def\PackageWarning#1#2{%
+ \GenericWarning{%
+ (#1)\@spaces\@spaces\@spaces\@spaces
+ }{%
+ Package #1 Warning: #2%
+ }%
+}
+
+\long\def\TypeOut#1{%
+ \edef\TO@resa{#1}%
+ \edef\TO@resa{\@xa\detokenize\@xa{\TO@resa}}%
+ \typeout{\TO@resa}}
+
+\long\def\ShowOut#1{%
+ \TypeOut{#1}%
+ \show\TO@resa
+}
+
+\long\pdef\incsdef
+#1% a CS or active char
+#2% parameters string
+#3% definition's body
+{%
+ \def#1#2{%
+ \gmu@if {incsname}{}%
+ {\string#1}{#3}%
+ }%
+}
+
+
+\gmu@DefSymbol\gmu@CountTokens@end
+\newcount\c@gmu@TokensCount
+
+\lpdef\gmu@CountTokens
+#1% the tokens to be counted.
+{%
+ \c@gmu@TokensCount=\m@ne
+ \let\gmu@CountToken@token\@undefined
+ \gmu@CountToken@iter
+ #1\gmu@CountTokens@end
+}
+
+\def\gmu@CountToken@iter{%
+ \gmu@if x{\gmu@CountToken@token\gmu@CountTokens@end}%
+ {}% we've reached the end of iteration
+ {%
+ % We increase the counter and throw the iterator after next assignment
+ \advance\c@gmu@TokensCount\@ne
+ \afterassignment\gmu@CountToken@iter
+ \let\gmu@CountToken@token=
+ }%
+}%
+
+
+\long\def\gmu@passbraced
+#1% the stuff to be put before |#2|
+#2% the stuff we check and pass unbraced if single or braced otherwise
+{%
+ \gmu@CountTokens{#2}%
+ \gmu@if {num}{\c@gmu@TokensCount=\@ne}%
+ {\gmu@if x{#2 }%
+ \@secondoftwo\@firstoftwo}%
+ \@secondoftwo
+ {#1#2}{#1{{#2}}}%
+}% of |\gmu@passbraced|
+
+\long\def\MeaningOrUnex#1{%
+ \gmu@if {singletoken}{{#1}}%
+ {\meaning#1}{\unexpanded{#1}}%
+}
+
+\pldef\@iwru#1{%
+ %
+ % as simple as possible not to put much output on the terminal if
+ % tracing is on.
+ %
+ \immediate \write \@unused {l.\the\inputlineno:\space #1}%
+}
+
+\pldef\@iwruJ{\@iwru{^^J}}
+
+\pldef\@iwrum#1{%
+ \@iwru{»\unexpanded{#1}« is »\MeaningOrUnex{#1}«}%
+}
+
+\pldef\@iwruif#1{%
+ \gmu@if {gmu@debug@msgs}{}
+ {\@iwru{#1}}{}%
+}
+
+\long\pdef\IgnInfo
+#1% package name
+#2% description
+#3% stuff we announce as ignored
+{%
+ \PackageInfo{#1}{Item »\unexpanded{#3}« (\MeaningOrUnex{#3}) ignored^^J%
+ #2}%
+}
+
+\pldef\@iwma{%
+ % (Added 2010/10/19)
+ %
+ % Note it takes a \emph{text} not an argument.
+ \immediate \write \@mainaux
+}
+
+\def\stepnummacro
+#1% a macro that expands to some numerical stuff
+#2%
+{\edef#1{\the\numexpr #1+#2}}
+
+\def\boolstobin
+#1% a sequence of Boolean switches' names without »if«
+{%
+ \numexpr \boolstobin@iter 0 #1 {}\gmu@delim %
+}
+
+\def\boolstobin@iter
+#1% expression so far
+#2% the name of current switch (without »if«)
+#3% tail of switches
+\gmu@delim
+{%
+ \gmu@ifempty{#3}%
+ {#1\relax}% |\relax| to close the num expression
+ {\boolstobin@iter
+ {(#1)*2+\csname if#2\endcsname 1\else 0\fi}%
+ #3\gmu@delim
+ }%
+}
+
+\long\def\condstobin
+#1% a sequence of conditionals' names without »if« followed by the condition
+{%
+ \numexpr \condstobin@iter 0 #1 {}{}\gmu@delim %
+}
+
+\long\def\condstobin@iter
+#1% expression so far
+#2% the name of current conditional (without »if«)
+#3% the condition for |#2|
+#4% tail of switches
+\gmu@delim
+{%
+ \gmu@ifempty{#3}%
+ {#1\relax}% |\relax| to close the num expression
+ {\condstobin@iter
+ {(#1)*2+\csname if#2\endcsname #31\else 0\fi}%
+ #4\gmu@delim
+ }%
+}
+
+\long\def\condsalt
+#1% a sequence of conditionals' names without »if« followed by the condition
+{%
+ \numexpr \condsalt@iter 0 #1 {}{}\gmu@delim %
+}
+
+\long\def\condsalt@iter
+#1% expression so far
+#2% the name of current conditional (without »if«)
+#3% the condition for |#2|
+#4% tail of switches
+\gmu@delim
+{%
+ \gmu@ifempty{#4}%
+ {#1\relax}% |\relax| to close the num expression
+ {\condsalt@iter
+ {#1+\csname if#2\endcsname #3 1\else 0\fi}%
+ #4\gmu@delim
+ }%
+}
+
+\long\def\ifcondsalt #1{%
+ \ifnum \condsalt{#1}>\z@
+}
+
+\long\def\condsconj
+#1% a sequence of conditionals' names without »if« followed by the condition
+{%
+ \numexpr \condsconj@iter 1 #1 {}{}\gmu@delim %
+}
+
+\long\def\condsconj@iter
+#1% expression so far
+#2% the name of current conditional (without »if«)
+#3% the condition for |#2|
+#4% tail of condition(al)s
+\gmu@delim
+{%
+ \gmu@ifempty{#4}%
+ {#1\relax}% |\relax| to close the num expression
+ {\condsconj@iter
+ {#1*\csname if#2\endcsname #3 1\else 0\fi}%
+ #4\gmu@delim
+ }%
+}
+
+\long\def\ifcondsconj #1{%
+ \ifnum \condsconj {#1}>\z@
+}
+
+\long\def\sName #1#2 {\@xa#1\csname #2\endcsname}
+
+\long\def\sdName #1#2 {\@xa#1\csname \detokenize{#2}\endcsname}
+
+\long\def\dName #1#2{\@xa #1\csname \detokenize{#2}\endcsname}
+
+\long\def\@sN #1 {\csname #1\endcsname}
+\long\def\@sdN #1 {\csname \detokenize{#1}\endcsname}
+
+\long\def\gmu@extreme
+#1% kind of test (|num| or |dim|)
+#2% inequality sign: |<| for minimum, |>| for maximum.
+#3% left side of comparison
+#4% right side of comparison
+{%
+ \gmu@if {x\@xa\@xa}{\@firstofmany#4\@nil\relax} % this complicated test is to
+ % allow arguments beginning with some \incs{if⁄<…>} as in
+ % \incs{possvfil} e.g.
+ {#3}%
+ {%
+ \gmu@if {#1} {\csname #1expr\endcsname#3\relax
+ #2\csname #1expr\endcsname #4\relax }
+ {\gmu@extreme {#1}#2{#3}}%
+ {\gmu@extreme {#1}#2{#4}}%
+ }%
+}% of |\gmu@extreme|
+
+\def\gmu@maxnum{\gmu@extreme {num}>}
+\def\gmu@minnum{\gmu@extreme {num}<}
+
+\def\gmu@maxdim{\gmu@extreme {dim}>}
+\def\gmu@mindim{\gmu@extreme {dim}<}
+
+\pdef\gmu@fitto
+#1% scope (nothing, |\relax| or |\global|.
+#2% left side of the assignment (must be a dimen able to be ”passive”)
+#3% the comparison (if |#2#3#4| then reassign |#2|)
+#4% right side of the assignment---any correct text for |\dimexpr|.
+{%
+ \gmu@if {dim}{#2#3\dimexpr (#4)+\z@\relax\relax}%
+ {#1#2=\dimexpr (#4)+\z@\relax}%
+ {}%
+}
+
+\pdef\gmu@g@enlargeto
+#1% |#2| of the above
+#2% |#4| of the above
+{\gmu@fitto\global{#1}<{#2}}
+
+\pdef\discre#1#2#3{\leavevmode\kern\z@
+ \discretionary{#1}{#2}{#3}\penalty\@M\hskip\z@skip}
+
+\pdef\discret#1{\discre{#1}{#1}{#1}}
+
+\pdef\gmu@flexhyphen{%
+ \discre{% before break
+ \ifnum\hyphenchar\font>\z@
+ \char\hyphenchar\font
+ \fi
+ }% end of before break
+ {}%after break
+ {}% without break
+}
+
+\def\:{%
+ \ifmmode\afterfi{\mskip\medmuskip}%
+ \else\afterfi{\discre{\null}{}{}}% \incs{null} to get
+ % \incs{hyphenpenalty} not \incs{exhyphenpenalty}.
+ \fi
+}
+
+\lpdef\hboxreflected#1{%
+ \hbox{%
+ \reflectbox{#1}%
+ }%
+}
+
+\pdef\gmu@ifSystemX{% the ‘If file exists” test is \emph{NOT}
+ % expandable since it involves opening some
+ % streams. Therefore we define this macro as protected.
+ \IfFileExists{/etc/passwd}%
+}
+
+\def\hrule@zero{\hrule height\z@ width\z@ depth\z@}
+\def\vrule@zero{\vrule height\z@ width\z@ depth\z@}
+
+\def\do#1#2{% (2010/10/11)
+ \Name \def{gmu@iflast#1}{%
+ \ifnum #2=\lastnodetype
+ \@xa\@firstoftwo
+ \else
+ \@xa\@secondoftwo
+ \fi
+ }%
+}
+
+\do {glue}{11}
+\do{kern}{12}
+\do {penalty}{13}
+
+\def\gmu@dimratio
+#1% numerator dim(en/expr)
+#2% denominator dim(en/expr)
+{\strip@pt
+ \dimexpr 1pt *
+ \numexpr\dimexpr (#1)*1\relax\relax /
+ \numexpr \dimexpr (#2)*1\relax \relax
+ \relax
+}
+
+\def\falseifdefined #1{%
+ \ifcsname if#1\endcsname
+ \csn{#1false}%
+ \fi
+}
+
+\def\trueifdefined #1{%
+ \ifcsname if#1\endcsname
+ \csn{#1true}%
+ \fi
+}
+
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmbase.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmcommand.sty b/Master/texmf-dist/tex/latex/gmutils/gmcommand.sty
new file mode 100644
index 00000000000..77ea0839d87
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmcommand.sty
@@ -0,0 +1,2164 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmcommand.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `command')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmcommand}
+ [2010/10/24 v0.993 definition of powerful \string \DeclareCommand \string &al. (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+
+\RequirePackage{gmbase} % we require the tricky low-level macros.
+
+\unless\ifcsname ifgmu@quiet\endcsname
+\Name\newif {ifgmu@quiet}% % it has to be at least (at highest) in
+ % \CH{2010/09/06 v0.993 moved here from
+ % % \pk{gmutils.sty} (a bug fix)}
+\fi
+
+ %
+
+\unless\ifdefined\@temptokenb
+\newtoks\@temptokenb
+\fi
+
+\newif\if@dc@alllong@ % for an option of all arguments long (it's
+ % stronger than |GroteLang| defined later (the
+ % latter is |\let| it).
+\newif\if@dc@quiet@ % for suppressing the message of using of
+
+\newif\ifDCMessages % a~global switch to suppress the message about
+
+\newtoks\@dc@arguments % the register for storing parsed
+ % |\\command {#1}›…{⁄<n>}|.
+
+\newcount\c@dc@catchernum
+\newcount\c@dc@argnum
+
+\newif\if@dc@ignore@
+\newif\if@dc@GroteNegere@ % for “gross” ignoring
+\newif\if@dc@GroteLang@ % for “gross” longness
+
+\newif\if@dc@long@
+
+\def\@dc@long@letter{%
+\if@dc@long@ P\fi
+}
+
+\newif\if@dc@xadefault
+
+\def\@nx@xa{\@nx\@xa}
+\def\@xa@nx{\@xa\@nx}
+\def\@xa@xa{\@xa\@xa}
+
+\newif\if@dc@xadefault@i@
+\newif\if@dc@xadefault@ii@
+\newif\if@dc@xaeacher@
+
+\def\@dc@falsify@xadefaults{%
+ \@dc@xadefaultfalse
+ \@dc@xadefault@i@false
+ \@dc@xadefault@ii@false
+}
+
+\lpdef\DeclareCommand#1#2#3{% ^^B It's the draft version just
+ % ^^B~to declare the true one, which is defined in line
+ % \ref{DC:final}.
+ %
+ % \begin{enumargs}
+ % \item command to be defined,
+ % \item arguments specification,
+ % \item definition body.
+ % \end{enumargs}
+ % \chgs[\DeclareCommand]{2008/12/05 v0.98 added the \env{S}/\env{T}
+ % spec parsing, the
+ % \env{s} spec parsing rewritten to be a~shorthand for
+ % \env{S\{*\}}, unused code removed}
+ % \chgs{2010/04/15 v0.993 implemented the \cmd\SameAs feature}
+ %
+ %
+ %
+\@dc@alllong@true
+ \@dc@ResetParseAuxilia
+ %
+ \@dc@ParseNextSpecifier #2%
+ \@dc@buckstopshere% it's the sentinel of parsing. Doesn't have to be
+ % defined since the test performs a strings comparison.
+ \protected\edef#1{%
+ \@nx\@dc@ {\the\toks@}%
+ \@xanxcs{\@dc@InnerName{#1}}%
+ \@nx #1%
+ }%
+ \edef\gmu@DeclareCommand@resa{%
+ \long\def\@xanxcs{\@dc@InnerName{#1}}%
+ \@xau\@dc@innerhashes{%
+ \unexpanded{#3}}%
+ }% of resa
+ \gmu@DeclareCommand@resa
+}% of the ‘draft’ |\DeclareCommand|.
+
+\long\def\@dc@
+ #1% the argument catchers in a~pair of braces (their arguments
+ % may contain \incmd\par\ so the macro is long).
+ #2% |\\thecommand\|
+ #3% |\thecommand|
+ {%
+ \ifx\protect\@typeset@protect
+ \@xa\@firstofone
+ \else
+ \protect#3\@xa\@gobble
+ \fi
+ {\@dc@arguments{#2}#1\the\@dc@arguments}%
+}
+
+\def\@dc@ResetParseAuxilia{%
+ %
+ \emptify\@dc@ParsedSpecs{}%
+ %
+ \c@dc@catchernum\z@ % the count of catchers
+ \c@dc@argnum\z@ % the count of arguments (inner arity) (it may be
+ % smaller than the above if we ignore some arguments)
+ %
+ \toks@{}% in this register we will store the created sequence of
+ % argument catchers.
+ %
+ % And for the |M⁄m| specifiers:
+ \@dc@Mmode@false
+ %
+ \emptify\@dc@innerhashes % in this macro we will store the sequence of
+ % \inverb|#1#2…|.
+ %
+ \@dc@GroteNegere@false
+ \let\if@dc@GroteLang@\if@dc@alllong@
+}
+
+\newif \if@dc@Mmode@
+\def\@dc@Ms@num {\z@}%
+
+\def\@dc@Ms@init{%
+ \@dc@Mmode@true
+ \def\@dc@Ms@num {\z@}%
+ \edef\@dc@Ms@initial@listate{%
+ \@dc@Ms@listate
+ }% of edef
+}
+
+\def\@dc@Ms@listate{%
+ \boolstobin{{@dc@long@}{@dc@ignore@}}%
+}
+
+\def\@dc@Ms@shipout {%
+ \gmu@if {num} {\@dc@Ms@num>\z@}%
+ {\@xa\dc@addtoParsed@\@xa{\@dc@Ms@num}%
+ \def\@dc@Ms@num{\z@}%
+ \@dc@Mmode@false
+ }%
+ {}%
+}
+
+\def\@dc@ResetStepAuxilia {%
+ % We set the local ignorance switch to its “gross” value
+ \let\if@dc@ignore@ =\if@dc@GroteNegere@
+ \let\if@dc@long@ = \if@dc@GroteLang@
+ % and reset the expandaftering switches
+ \@dc@falsify@xadefaults
+}
+
+\def\@dc@argtypes{%
+ =\gobblespace \loop \lostwax \SameAs \Scope
+ AaBbCcDdGgKkMmOoQqSs*TtUuWw%
+ \drs
+}
+
+\def\@dc@drses{\drs}
+
+\@ifXeTeX
+{\addtomacro\@dc@argtypes{ďĎ}%
+ \addtomacro\@dc@drses{ďĎ}%
+}
+{}
+
+\def\@dc@ParseSpecifier #1{% The main inner macro parsing argument
+ \gmu@CASE {stribs}{{#1}\@dc@buckstopshere}%
+ {%
+ \@dc@Ms@shipout
+ \edef\@dc@innerhashes {%
+ \gmu@hashes 1{\numexpr\c@dc@argnum +\@ne}%
+ }%
+ }%
+ \gmu@CASE {stribs}{{#1}>}%
+ {%
+ \grab@prefix }%
+ \@XA{%
+ \gmu@CASEsbnone{#1}}\@xa{%
+ \@dc@argtypes
+ }%
+ {\IgnInfo{gmcommand}{while parsing arg specifiers}{#1}%
+ \@dc@ParseNextSpecifier }%
+ \gmu@CASE {stribs}{{#1}\SameAs}%
+ {\@dc@SameAs}%
+ \gmu@ifsbnone {#1}{Mm}%
+ {\@dc@Ms@shipout }%
+ {}%
+ \gmu@if {@dc@Mmode@}{}%
+ {}%
+ {%
+ \gmu@ifsbany{#1}{=\gobblespace}{\@dc@ignore@true}{}%
+ \gmu@if {@dc@long@} {}
+ {\@dc@addtospecs@bare{>P}}
+ {}%
+ %
+ \gmu@if {@dc@ignore@}{}%
+ {\@dc@addtoparsed@Ignore }%
+ {}%
+ %
+ \@dc@addtospecs@bare {#1}%
+ %
+ \@xa\addtotoks\@xa\toks@\@xa{%
+ \csname ArgumentCatcher@\@dc@long@letter
+ \strip@bslash{#1}%
+ \endcsname
+ }% of toks' text.
+ \advance\c@dc@catchernum\@ne
+ }% of if not |M|-mode
+ \gmu@notif {@dc@ignore@}{}%
+ {\@dc@addinnerhash }% \label{@dc@addinnerhash}
+ {}% (empty “not-else” branch of ignoring)
+ \gmu@CASEsbany {#1}{Mm}%
+ {\@dc@process@ms}%
+ \gmu@CASEsbany {#1}{Kk}%
+ {\@dc@define@K}%
+ \gmu@CASEsbany {#1}{\gobblespace}%
+ {\@dc@ParseNextSpecifier}%
+ \gmu@CASEsbany{#1}{=\Scope AaBbCcDdOoSs*}%
+ {\grab@optparam{#1}}%
+ \@XA{\gmu@CASEsbany{#1}}\@xa{\@dc@drses}%
+ {\grab@optparam{#1}}%
+ \gmu@CASEsbany{#1}{UuWw\lostwax}%
+ {\@dc@grab@Loop #1}% putting the specifier's letter as |#1| for the
+ % grabber suppresses adding it to the parsed specifiers' list.
+ \gmu@lastCASE
+ {%
+ \grab@twoparams{#1}}%
+ \gmu@ESAC
+ %
+}% of |\@dc@ParseSpecifier|
+
+\def\@dc@addtoparsed@Ignore{%
+ \addtotoks\toks@{\@dc@ignorearg}%
+ \@dc@addtospecs@bare{>i}%
+}
+
+\def\@dc@addinnerhash{%
+ \advance\c@dc@argnum\@ne
+}
+
+\def\@dc@process@ms{%
+ \gmu@if {@dc@Mmode@}{}%
+ {\gmu@if {num}{\@dc@Ms@initial@listate=\@dc@Ms@listate}%
+ {\@dc@process@ms@grabnum }% of if the state has'nt been changed
+ {\@dc@Ms@shipout
+ % Remember however that we've increased number of arguments so now we
+ % set it back:
+ \advance\c@dc@argnum\m@ne
+ \@dc@ParseSpecifier m%
+ }% of if the state has been changed
+ }% of if |M|-mode
+ {\@dc@Ms@init
+ \@dc@process@ms@grabnum
+ }% of not if |M|-mode.
+}% of \@dc@process@ms
+
+\def \@dc@process@ms@grabnum {%
+ \@ifnextanyIS {\bgroup \@ne \tw@ \thr@@ 123456789}%
+ {%
+ \@dc@process@ms@fin}%
+ {%
+ \@dc@process@ms@fin \@ne}%
+}
+
+\def \@dc@process@ms@fin #1{%
+ \edef\@dc@processms@hash {\the\numexpr#1}%
+ \edef\@dc@processms@left {\the\numexpr 9-\c@dc@argnum+\@ne}%
+ %
+ \gmu@if {condsconj} {%
+ {%
+ {num} {\@dc@processms@hash >\z@}
+ {num} {\@dc@processms@hash <\numexpr
+ \@dc@processms@left+1 \relax }%
+ }%
+ }%
+ {\stepnummacro \@dc@Ms@num \@dc@processms@hash
+ \edef\@dc@hashgoal {%
+ \the\numexpr\c@dc@argnum +%
+ \@dc@processms@hash-1}% minus 1 because one
+ \@whilenum \c@dc@argnum<\@dc@hashgoal \do{%
+ \@dc@addinnerhash
+ }%
+ %
+ \@dc@ParseNextSpecifier }%
+ {\PackageError{gmcommand}{%
+ The argument to the M or m specifier, if any, has to be ^^J%
+ a number between 1 and \@dc@processms@left ^^J%
+ (there is/are \the\c@dc@argnum\space arg(s) declared
+ already).^^J%
+ I ignore this m/M.}%
+ {}%
+ \gmu@passbraced \@dc@ParseNextSpecifier {#1}%
+ }%
+}% of |\@dc@process@ms|
+
+\def\@dc@ParseNextSpecifier{%
+ \@dc@ResetStepAuxilia
+ \@dc@ParseSpecifier
+}
+
+\lpdef\@dc@AddAndParse#1{%
+ \dc@addtoParsed@{#1}%
+ \@dc@falsify@xadefaults
+ \@dc@ParseNextSpecifier
+}
+
+
+\def\grab@optparam #1{% arg specifier
+ \@ifnextchar\bgroup{\@dc@AddAndParse}%
+ {%
+ \edef\@dc@tempa{%
+ \gmu@if {csname}%
+ {@dc@optparam@deft@\strip@bslash{#1}\endcsname}%
+ {\@xaucs {@dc@optparam@deft@\strip@bslash{#1}}}%
+ {\@nx \NoValue}%
+ }%
+ \@xa\@dc@AddAndParse\@xa{\@dc@tempa}%
+ }%
+}
+
+
+\long\def\@dc@DeclareDefault #1#2{%
+ \uppercase{%
+ \Name\edefU{\strip@bslash{\@dc@optparam@deft@}\strip@bslash{#1}}{#2}}%
+ %
+ \lowercase{%
+ \Name\edefU{@dc@optparam@deft@\strip@bslash{#1}}{#2}}%
+}
+
+\@dc@DeclareDefault D{0}
+
+\@dc@DeclareDefault Ď{0}
+
+\@xa\@dc@DeclareDefault \@xa\Scope\@xa{\all@stars}
+
+\@dc@DeclareDefault = {\@tempcnta}
+
+
+\@dc@DeclareDefault Q {\NoValue}
+
+\@dc@DeclareDefault U {\NoValue}
+
+\long\def\@dc@maybe@expandafter #1{%
+ \gmu@if {@dc@xadefault}{}%
+ {\gmu@ifutokens{#1}{\NoValue}%
+ {\@secondoftwo}{\@firstoftwo}%
+ }% if we are to expandafter |#1|.
+ {\@secondoftwo}% if we don't expandafter |#1|
+}
+
+\long\def\dc@addtotoks@ #1{%
+ \@dc@maybe@expandafter {#1}%
+ %
+ {\toks@\@xa\@xa\@xa{\@xa\the\@xa\toks@\@xa{#1}}}%
+ {\toks@\@xa{\the\toks@{#1}}}%
+}
+
+\long\def\@dc@addtospecs #1{%
+ \@dc@maybe@expandafter {#1}%
+ {\@xa \addtomacro \@xa\@dc@ParsedSpecs\@xa{\@xa{#1}}%
+ }%
+ {\addtomacro\@dc@ParsedSpecs{{#1}}}%
+}
+
+\long\def\dc@addtoParsed@ #1{%
+ \dc@addtotoks@{#1}%
+ \@dc@addtospecs{#1}%
+}
+
+\long\def\@dc@addtospecs@bare #1{%
+ \addtomacro\@dc@ParsedSpecs{#1}%
+}
+
+\long\def\@dc@addtotoks@bare #1{%
+ \addtotoks\toks@ {#1}%
+}
+
+\long\def\@dc@addtoParsed@bare #1{%
+ \@dc@addtotoks@bare {#1}%
+ \@dc@addtospecs@bare {#1}%
+}
+
+\long\def\grab@twoparams
+#1% the specifier
+#2% first parameter, which is mandatory
+{% default default (when default is absent)
+ \if@dc@xadefault@i@\@dc@xadefaulttrue\fi
+ \dc@addtoParsed@{#2}%
+ \if@dc@xadefault@ii@
+ \@dc@falsify@xadefaults\@dc@xadefaulttrue
+ \fi
+ \grab@optparam{#1}%
+}
+
+\long\def\@dc@addargum#1{%
+ \addtotoks\@dc@arguments{#1}%
+\@iwruif {@@@@@@ @dc@arguments: »\the\@dc@arguments«}%
+}
+
+\Store@Macro\@dc@addargum
+
+\pdef\@dc@ignorearg{%
+ \long\def\@dc@addargum##1{%
+ \Restore@Macro\@dc@addargum}%
+}
+
+
+\def\grab@prefix@CASE{% jus a shorthand
+ \@xa\gmu@CASEsbany\gmu@forarg
+}
+
+\long\def\grab@prefix #1{%
+ %% \CH{2010/07/26 v0.993 made for-eaching to make it behave as
+ %% expected, i.e.\ that latter settings prævalent over the former}
+ %
+ \gmu@foreach#1\gmu@foreach@delim{%
+ %
+ \grab@prefix@CASE
+ {\long!lL\par Pp}%
+ {\@dc@long@true}%
+ %
+ \grab@prefix@CASE
+ {Ii}%
+ {\@dc@ignore@true}%
+ %
+ \grab@prefix@CASE
+ {\@xa\expandafter}%
+ {\@dc@xadefaulttrue}%
+ %
+ \grab@prefix@CASE
+ {\@xa \@xa@nx \@xa@xa \expandafter \@xanx \xanx \xaxa}%
+ {\@dc@xadefault@i@true}%
+ %
+ \grab@prefix@CASE
+ {\@xa \@nx@xa \@xa@xa \expandafter \@nxxa \nxxa}%
+ {\@dc@xadefault@ii@true}%
+ %
+ \grab@prefix@CASE
+ {\@xaeacher \xaeacher \xaEacher \xaE }%
+ {\@dc@xadefault@ii@true}%
+ %
+ \grab@prefix@CASE
+ {\GroteNegere \GrossIgnore \GroteN \GrossI}
+ {\@dc@GroteNegere@true
+ \@dc@ignore@true}%
+ %
+ \grab@prefix@CASE
+ {\GroteNegereStop\GrossIgnoreStop
+ \GroteNStop\GrossIStop}
+ {\@dc@GroteNegere@false
+ \@dc@ignore@false}%
+ %
+ \grab@prefix@CASE
+ {\GroteLang\GrossLong\GroteL\GrossL}
+ {\@dc@GroteLang@true
+ \@dc@long@true}%
+ %
+ \grab@prefix@CASE
+ {\GroteLangStop\GrossLangStop
+ \GroteLStop\GrossLStop}%
+ {%
+ \let\if@dc@GroteLang@=\if@dc@alllong@
+ \let\if@dc@long@=\if@dc@alllong@}%
+ %
+ \gmu@EatCases
+ {\IgnInfo{gmcommand}{while parsing arg specifiers}{#1}}%
+ \gmu@ESAC
+ %
+ }% of for each
+ \@dc@ParseSpecifier %
+}% of |\grab@prefix|
+
+\long\def\dc@DefParseNext#1{%
+ % This is to allow hashes in the defaults.
+ \edefU\@dc@parse@next{#1}%
+}
+
+\def\@dc@Alias
+#1% |\lowercase| or |\firstofone|
+#2% left side of the assignment
+#3% right side of the assignment
+#4% |Lower| or empty
+{%
+ \gmu@if {csname}%
+ {ArgumentCatcher@\strip@bslash #3\endcsname}%
+ {#1{%
+ \@xa\let\csname\strip@bslash\ArgumentCatcher@
+ \strip@bslash #2\@xa\endcsname}%
+ \csname ArgumentCatcher@\strip@bslash #3\endcsname
+ }{\PackageError{gmutils/gmcommand}{%
+ You're trying to #4Alias the »\unexpanded{#3}« catcher^^J%
+ but it is not defined!}{}%
+ }%
+}
+
+\def\@dc@LowerAliases #1{%
+ % To provide lowercase aliases of the catchers:
+ \@dc@Alias \lowercase {#1}{#1}{Lower}%
+ \@dc@Alias \lowercase {\P#1}{\P#1}{Lower}% we provide »P« as a \CS
+ % to avoid lowercase'ing it.
+}
+
+\def\@dc@AliasCatcher
+#1% left side of the assignment
+#2% right side of the assignment
+{%
+ \@dc@Alias \firstofone {#1}{#2}{}%
+}
+
+\def\@dc@AliasPLower
+#1% specifier to alias
+{\@dc@AliasCatcher {P#1}{#1}%
+ \@dc@LowerAliases{#1}%
+}
+
+\long\def\ArgumentCatcher@B
+#1% default value
+#2% tail of args catchers.
+\@dc@arguments % delimiter
+{%
+ \@ifnextcat\bgroup
+ {\dc@DefParseNext{#2}\ArgumentCatcher@m@i }%
+ {\@dc@addargum {{#1}}#2\@dc@arguments }%
+}
+
+\long\def\ArgumentCatcher@PB
+#1% default value
+#2% tail of args catchers.
+\@dc@arguments % delimiter
+{\@ifnextcat\bgroup
+ {\dc@DefParseNext{#2}\ArgumentCatcher@Pm@i }%
+ {\@dc@addargum {{#1}}#2\@dc@arguments }%
+}
+
+\@dc@LowerAliases B
+
+\long\def\ArgumentCatcher@T@ % parsing of a~single \textbf Token continued:
+#1% the list to search |#4| on,
+#2% the default value,
+#3% the tail of args parsers,
+#4% the token we search in |#1| (it's an unbraced
+{%
+ \gmu@ifStrXany #4{#1}%
+ {\@dc@addargum {{#4}}#3\@dc@arguments}%
+ {\@dc@addargum {{#2}}#3\@dc@arguments#4}%
+}
+
+\long\def\ArgumentCatcher@T % parsing of a~ single \textbf Token. It's
+#1% the list we search optional token on,
+#2% the default value,
+#3% the tail of args parser.
+\@dc@arguments{%
+ \@ifnextnotgroup
+ % \label{dc@S:bgroup}
+ {\ArgumentCatcher@T@{#1}{#2}{#3}}%
+ {\@dc@addargum {{#2}}#3\@dc@arguments}% if we parse an
+ % opening or closing brace, then we are sure it's not any expected
+ % Single.
+}
+
+\@dc@AliasPLower T
+
+
+\edef\ArgumentCatcher@S
+#1% default value
+{%
+ \@nx\ArgumentCatcher@T {\@xa\@nx\all@stars}{#1}}% the |s| arg spec is
+
+\@dc@AliasPLower S
+\@dc@AliasCatcher * S
+
+\newif\if@debugacro@
+
+\long\def\ArgumentCatcher@Loop %^^A >>>>>>>loop
+#1% “sign” of match for iteration: |\any| or |\none|
+#2% list of tokens |\@let@token| will be matched against with |#1|
+#3% test for “drainers” (allowed values as for |#1|)
+#4% list of “drainers”: if |\@let@token| satisfies the |#3| test,
+#5% upper bound of number of items (may be empty or negative to turn
+#6% default value (if empty sequence is parsed), |\NoValue| by default.
+#7% an “eacher”—stuff to be put before each token/text added to the
+#8% the tail of args parser
+\@dc@arguments % delimiter
+{%
+ \dc@DefParseNext{#8}%
+ \emptify\@dc@seQuence
+ \c@dc@Loop@bound=\numexpr(\gmu@ifempty{#5}{-1}{#5})*1\relax
+ \gmu@if {num}{\c@dc@Loop@bound<\z@}%
+ {\c@dc@Loop@bound=-\c@dc@Loop@bound
+ \let\@dc@Loop@countby\z@
+ }%
+ {\let\@dc@Loop@countby\m@ne}%
+ %
+ \gmu@ifempty{#2}%
+ {\gmu@if {strings}{\none #1}%
+ {\@dc@Loop@iteralltrue}% it's an additional switch for better
+ % performance in a special case: when we wish
+ % only count the items and iterate over anything
+ {%
+ \Store@Macro\ArgumentCatcher@Loop@defcheck
+ \def\ArgumentCatcher@Loop@defcheck{%
+ \Restore@Macro\ArgumentCatcher@Loop@defcheck
+ \ArgumentCatcher@Loop@shipout}%
+ }% of if |#1| str-is |\any|
+ }% of if |#2| empty
+ {\@dc@Loop@iterallfalse}% when |#2| nonempty, we \emph{have} to
+ % perform matching. \rrthis
+ %
+ \gmu@ifempty{#4}%
+ {\gmu@if {strings} {\any #3}%
+ {\@dc@Loop@addallfalse\@dc@Loop@drainalltrue}%
+ {\@dc@Loop@addalltrue\@dc@Loop@drainallfalse}%
+ }% of if |#4| empty
+ {\@dc@Loop@addallfalse\@dc@Loop@drainallfalse}% when |#4| nonempty,
+ % we \emph{have} to perform matching. \rrthis
+ %
+ \edef\ArgumentCatcher@Loop@afterpeep{%
+ \gmu@if {@dc@Loop@iterall}{}%
+ {\firstoftwo}%
+ {\unexpanded{%
+ \@dc@Loop@test
+ #1{#2}% if the next token StrX-is/is not on |#2|,
+ % then… \label{h1.@let@token.h2}
+ }% of |\unexpanded|
+ }% of if we don't iterate over all (of preparation of iteration test)
+ {\gmu@if {@dc@Loop@addall}{}%
+ {\@nx \ArgumentCatcher@Loop@add}%
+ {\gmu@if {@dc@Loop@drainall}{}%
+ {\@nx \ArgumentCatcher@Loop@drain}%
+ {\unexpanded{%
+ \@dc@Loop@test
+ #3{#4}% if the next token satisfies |#3|-direction StrX
+ % match against |#4|, then we discard it,
+ % otherwise we add it.
+ \ArgumentCatcher@Loop@drain
+ \ArgumentCatcher@Loop@add
+ }% of |\unexpanded|
+ }% of not drain all
+ }% of if not add all
+ }%
+ {\gmu@if {@dc@Loop@iterall}{}%
+ {}%
+ {\@nx \ArgumentCatcher@Loop@shipout}%
+ }%
+ \unexpanded{{#6}{#7}}%
+ }% of |\ArgumentCatcher@Loop@afterpeep|
+ %
+ \ArgumentCatcher@Loop@defcheck {#6}{#7}%
+ \ArgumentCatcher@Loop@check
+}% of |\ArgumentCatcher@Loop|
+
+\newcount\c@dc@Loop@bound
+
+\newif\if@dc@Loop@iterall
+\newif\if@dc@Loop@addall
+\newif\if@dc@Loop@drainall
+
+\long\def\@dc@Loop@test
+#1% |\any| or |\none|
+#2% list of tokens to match against
+#3% what if \OK
+#4% what if not \OK.
+{% remember we are in the argument of |\gmu@peep@next| so we are after
+ % peep.
+ \gmu@if {defined}{\@def@token}
+ {\csname gmu@ifStrX\strip@bslash #1\@xa\endcsname
+ \@def@token }%
+ {\csname gmu@ifx\strip@bslash #1\endcsname
+ \@let@token }%
+ {#2}{#3}{#4}%
+}
+
+\@dc@AliasCatcher {PLoop} {Loop}
+
+\long\def\ArgumentCatcher@Loop@defcheck
+#1% default,
+#2% “eacher”
+{%
+ \edefU\ArgumentCatcher@Loop@check{%
+ \gmu@if {num}{\c@dc@Loop@bound>\z@}
+ {\advance \c@dc@Loop@bound \@dc@Loop@countby
+ \gmu@peep@next
+ \ArgumentCatcher@Loop@afterpeep }
+ {\ArgumentCatcher@Loop@shipout {#1}{#2}}% of if num bound reached
+ }% of |\ArgumentCatcher@Loop@check|
+}% of |\ArgumentCatcher@Loop@defcheck|
+
+\lpdef\@dc@Loop@CareOfSpace
+#1% a macro with all the arguments except last
+{\gmu@ifpeeped x \gmu@letspace
+ {\edef\@dc@Loop@careofspace@aas{%
+ \unexpanded{#1{ }}%
+ }% edef unexpanded to allow |#| tokens in |#1|
+ \afterassignment\@dc@Loop@careofspace@aas
+ \let\gmu@drain= }% after |=| is a space.
+ {#1}% next not space, so just |#1| and let it process the next token
+ % its way.
+}
+
+
+\lpdef\@dc@Loop@CareOfSpaceAndGroup
+#1% as in the previous macro
+{\@iwruif {Care of both: @let@token: »\meaning\@let@token«}%
+ \@dc@Loop@CareOfSpace{%
+ \gmu@passbraced{#1}%
+ }%
+}% of “take care of both”
+
+\long\def\ArgumentCatcher@Loop@add
+#1% default
+#2% eacher
+{\@dc@Loop@CareOfSpaceAndGroup
+ {\ArgumentCatcher@Loop@add@{#2}}%
+}
+
+\long\def\ArgumentCatcher@Loop@add@
+#1% eacher
+#2% token/text to be added
+{\addtomacro\@dc@seQuence{#1#2}%
+ \@iwruif {@@@@@@ Q-add: »\the\@dc@arguments«}%
+ \ArgumentCatcher@Loop@check
+}% of |\ArgumentCatcher@Loop@add@|
+
+\long\def\ArgumentCatcher@Loop@drain
+#1% default
+#2% eacher
+{%
+ \@iwruif{@@@@@@ Q-drain: »\the\@dc@arguments«}%
+ \@dc@Loop@CareOfSpaceAndGroup
+ {\@xa\ArgumentCatcher@Loop@check\@gobble}%
+}
+
+\long\def\ArgumentCatcher@Loop@shipout
+#1% default
+#2% eacher
+{%
+ \gmu@if x{\@dc@seQuence\@empty}%
+ {\def\@dc@seQuence{#1}%
+ \gmu@if x{\@dc@seQuence\@empty}%
+ {}{\prependtomacro\@dc@seQuence{#2}}%
+ }%
+ {}% if |\@dc@seQuence| is nonempty, we don't modify it.
+ \@xa\@dc@addargum\@xa{\@xa{\@dc@seQuence}}%
+ \@iwruif {@@@@@@ Q-finish: »\the\@dc@arguments«}%
+ \@dc@parse@next\@dc@arguments
+}% of |\ArgumentCatcher@Loop@shipout|
+
+\long\def\ArgumentCatcher@Q
+#1% list
+#2% default (|\NoValue| by default, as in previous versions.
+{%
+ \ArgumentCatcher@Loop
+ \any
+ { #1}% note the space before |#1|—settheory sum of |#1| and drainers.
+ \any
+ { }% we ignore spaces—it's a legacy setting, maybe we'll optionise
+ % it in the future
+ \m@ne % we allow any number of tokens
+ {#2}% default, by default |\NoValue|, as defined in line \ref{Q-arg deft.}
+ {}% empty eacher
+}%
+
+\@dc@AliasPLower Q
+
+\def\ArgumentCatcher@D{% decimal argument (useful for dates e.g.)
+ \ArgumentCatcher@Q
+ {-+0123456789}%
+ % the default value will be delivered by the defaults' catcher
+}
+
+\@dc@AliasPLower D
+
+\@ifXeTeX
+{%
+ \def\ArgumentCatcher@Ď
+ #1% default value, 0 by default
+ {% decimal argument
+ \ArgumentCatcher@Loop
+ \any
+ {-+0123456789}%
+ \none
+ {}%
+ \m@ne
+ {#1}%
+ {}%
+ }%
+}
+{}%
+
+\@dc@AliasPLower Ď
+
+\@dc@AliasCatcher U {Loop}
+
+\@dc@AliasPLower U
+
+\@dc@AliasCatcher W {Loop}
+
+\@dc@AliasPLower W
+
+\@dc@AliasCatcher {lostwax} U
+
+\long\def\ArgumentCatcher@item
+#1% “sign” of matching
+#2% list to match against
+#3% default value
+#4% eacher (which in this case will be applied to \emph{the} (one)
+{%
+ \ArgumentCatcher@Loop
+ #1%
+ {#2}%
+ \none {}% we add all that matches
+ 1 % at most one item
+ {#3}%
+ {#4}%
+}
+
+
+\long\def\ArgumentCatcher@genM
+#1% the letter »P« (for long catcher) or nothing (for the short version)
+#2% number of undelimited parametrs to catch (arabic)
+#3% tail of parsers
+\@dc@arguments{%
+ \dc@DefParseNext{#3}%
+ \csname ArgumentCatcher@#1m@%
+ \romannumeral#2%
+ \endcsname
+}
+
+
+\def\ArgumentCatcher@M{\ArgumentCatcher@genM {}}
+\def\ArgumentCatcher@PM{\ArgumentCatcher@genM P}
+
+\@dc@AliasCatcher {m} {M}
+\@dc@AliasCatcher {Pm} {PM}
+
+\@dc@AliasCatcher {ms} {M}
+\@dc@AliasCatcher {Pms} {PM}
+
+\@tempcnta=\@ne
+\@whilenum\@tempcnta<9\do{%
+ %
+ \edef\gmu@tempa{%
+ %
+ % The short catchers of mandatories:
+ \def\@xanxcs{%
+ ArgumentCatcher@m@\romannumeral\@tempcnta}%
+ \gmu@hashes1{\numexpr\@tempcnta+1}%
+ {\@nx\@dc@addargum{%
+ \gmu@hashesbraced 1{\numexpr\@tempcnta+1}}%
+ \@nx\@dc@parse@next\@nx\@dc@arguments
+ }% of \incs{ArgumentCatcher@m@\<rom.num>}.
+ %
+ % And the long ones:
+ \long \def\@xanxcs{%
+ ArgumentCatcher@Pm@\romannumeral\@tempcnta}%
+ \gmu@hashes1{\numexpr\@tempcnta+1}%
+ {\@nx\@dc@addargum{%
+ \gmu@hashesbraced 1{\numexpr\@tempcnta+1}}%
+ \@nx\@dc@parse@next\@nx\@dc@arguments
+ }% of \incs{ArgumentCatcher@Pm@\<rom.num>}.
+ %
+ }% of |\edef|.
+ \gmu@tempa
+ \advance\@tempcnta1\relax
+}% of the loop.
+
+\if 1 1
+\@tempcnta\@ne
+\@whilenum\@tempcnta<9\do{%
+ \typeout{\bslash ArgumentCatcher@m@\romannumeral\@tempcnta: ^^J%
+ \Name\meaning{ArgumentCatcher@m@\romannumeral\@tempcnta}^^J}%
+ \typeout{\bslash ArgumentCatcher@Pm@\romannumeral\@tempcnta : ^^J%
+ \Name\meaning
+ {ArgumentCatcher@Pm@\romannumeral\@tempcnta}^^J^^J^^J%
+ }%
+ \advance\@tempcnta\@ne
+}
+
+\fi
+
+\def\ArgumentCatcher@m@ix
+#1#2#3#4#5#6#7#8#9{%
+ \@dc@addargum{%
+ {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}%
+ \the \@dc@arguments
+}
+
+\long\def\ArgumentCatcher@Pm@ix
+#1#2#3#4#5#6#7#8#9{%
+ \@dc@addargum{%
+ {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}%
+ \the \@dc@arguments
+}
+
+\long\def\ArgumentCatcher@K % a~Knuthian delimited or undelimited
+#1% the particular Knuthian macro
+#2% the tail of args parser.
+\@dc@arguments % tail delimiter
+{\dc@DefParseNext{#2}#1}
+
+\@dc@AliasPLower K
+
+\long\def\gmu@twostring#1#2{\string#1\string#2}
+
+\long\def\ArgumentCatcher@G@longorshort
+#1% longness prefix (|\long| or nothing)
+#2% left and right delimiters
+#3% default value
+#4% the tail of args parser.
+\@dc@arguments % tail delimiter
+{%
+ \edef\@dc@Gname{ArgumentCatcher@G\gmu@twostring#2}%
+ \gmu@if {csname}{\@dc@Gname \endcsname}%
+ {}%
+ {#1\Name\def{\@dc@Gname \@xa}%
+ \@dc@Gparams#2{\@dc@addargum{{##2}}##1\@dc@arguments}%
+ }%
+ \@xa\@ifEUnextchar\@firstoftwo#2%
+ {\def\dc@parse@next{#4}% we hide possible |\par|s.
+ \csname \@dc@Gname \endcsname\dc@parse@next}%
+ {\@dc@addargum{{#3}}#4\@dc@arguments}%
+}
+
+\long\def\@dc@Gparams#1#2{##1#1##2#2}
+
+\lpdef\ArgumentCatcher@G % short general catcher
+#1% left and right delimiters
+#2% default value
+{\ArgumentCatcher@G@longorshort{}{#1}{#2}}
+
+\lpdef\ArgumentCatcher@PG % long general catcher
+#1% left and right delimiter
+#2% default value
+{\ArgumentCatcher@G@longorshort{\long}{#1}{#2}}
+
+\def\@dc@DefAsGeneral
+#1% specifier
+#2% delimiters
+{\Name\lpdef{ArgumentCatcher@\strip@bslash{#1}}%
+ ##1% default value
+ {\ArgumentCatcher@G{#2}{##1}}%
+ \Name\lpdef{ArgumentCatcher@P\strip@bslash{#1}}%
+ ##1% default value
+ {\ArgumentCatcher@G{#2}{##1}}%
+ %
+ \gmu@if {cat}{a\@nx#1}%
+ {\@dc@LowerAliases #1}{}%
+}
+
+\@dc@DefAsGeneral A{<>}
+
+\@dc@DefAsGeneral O{[]}
+
+
+\def\DCnocoordinate{\@dc@DefAsGeneral C{()}}
+\DCnocoordinate
+
+\edefU\DCcoordinate{%
+ %
+ \long\def\ArgumentCatcher@C
+ #1% default value
+ #2% tail of parsers
+ \@dc@arguments % tail's delimiter
+ {%
+ \@ifEUnextchar(%^^A)
+ {\dc@DefParseNext{#2}\ArgumentCatcher@c@}%
+ {\@dc@addargum{{#1}}#2\@dc@arguments}%
+ }%
+ %
+ \let\ArgumentCatcher@c\ArgumentCatcher@C
+ \let\ArgumentCatcher@Pc\ArgumentCatcher@PC
+ %
+ \long\def\ArgumentCatcher@PC#1#2\@dc@arguments{%
+ \@ifEUnextchar(%^^A)
+ {\dc@DefParseNext{#2}\ArgumentCatcher@Pc@}%
+ {\@dc@addargum{{#1}}#2\@dc@arguments}%
+ }%
+ %
+ \def\ArgumentCatcher@c@(#1){%
+ \gmu@ifxany,{#1}%
+ {\@xa\@dc@addargum\@dc@commasep#1\@dc@commasep}%
+ {\@dc@addargum{{#1}}}\@dc@parse@next\@dc@arguments
+ }%
+ % \stanza
+ \def\@dc@commasep#1,#2\@dc@commasep{{{{#1}{#2}}}}%
+ % \stanza
+ \long\def\ArgumentCatcher@Pc@(#1){%
+ \gmu@ifxany,{#1}%
+ {\@xa\@dc@addargum\@dc@commasep#1\@dc@commasep}%
+ {\@dc@addargum{{#1}}}\@dc@parse@next\@dc@arguments
+ }%
+}
+
+
+\def\@dc@Scope@shipout#1{%
+ \ifx\@dc@seQuence\@empty\def\@dc@seQuence{#1}\fi
+ \@xa \gmu@ifxany\@xa \global\@xa{\@dc@seQuence}%
+ {\@dc@addargum{{\global}}}%
+ {\@dc@addargum{{\relax}}}%
+ \@dc@parse@next\@dc@arguments
+}
+
+\def\ArgumentCatcher@Scope
+#1% the separator(s)
+{\let\@dc@seQuence@shipout@@\@dc@seQuence@shipout
+ \let\@dc@seQuence@shipout\@dc@Scope@shipout
+ \ArgumentCatcher@Q{\global\relax}{\relax}%
+ \let\@dc@seQuence@shipout\@dc@seQuence@shipout@@
+ \@dc@ignorearg
+ \ArgumentCatcher@T{#1}{\NoValue}%
+}
+
+\@dc@AliasCatcher {PScope} \Scope
+
+
+\def\NoValue{-NoValue-}
+
+\long\def\IfNoValueTF#1{% % \chgs{2008/12/1 v0.98 the \pk{xparse} tests for
+ % the presence of value redefined and much simplified (43 \CS'es
+ % less). Moreover, they are now fully expandable: \cmd\IfNoValueTF,
+ % \cmd\IfNoValueT, \cmd\IfNoValueF, \cmd\IfValueTF, \cmd\IfValueT,
+ % \cmd\IfValueF}
+ %
+ % \chgs{2010/05/27 v0.993 bug fix: order of \cmd\NoValue and
+ % \cs{@firstofmany} reversed after a catastrophal |{11}{11}| argument}
+ \@xa\ifx\@xa\NoValue\@firstofmany#1\@empty\@nil \afterfi\@firstoftwo
+ \else\afterfi\@secondoftwo
+ \fi}
+
+\long\def\IfNoValueT#1#2{\IfNoValueTF{#1}{#2}\@empty}
+
+\long\def\IfNoValueF#1#2{\IfNoValueTF{#1}\@empty{#2}}
+
+\long\def\IfValueTF#1#2#3{\IfNoValueTF{#1}{#3}{#2}}
+
+\long\def\PutIfValue#1{\IfValueT{#1}{#1}}
+
+\let\IfValueT\IfNoValueF
+
+\let\IfValueF\IfNoValueT
+
+\long\pdef\IfLong#1{%\
+ % \begin{enumargs}
+ % \item the argument to check for |\par|,
+ % \item what if |\par| found,
+ % \item what if |\par| not found.
+ % \end{enumargs}
+ %
+ \edef\gmu@IfLong@resa{\detokenize{#1}}%
+ \edef\gmu@IfLong@resa{%
+ \IfAmong\string\par\@nx\among{\gmu@IfLong@resa}}%
+ \gmu@IfLong@resa}
+
+
+\long\@namedef{ArgumentCatcher@=}%
+#1% register used in the assignment
+#2% the tail of args parser.
+\@dc@arguments{%
+ \dc@DefParseNext{%
+ \@dc@addargum\NoValue % to make ignoring mechanism work
+ #2\@dc@arguments}%
+ \afterassignment\@dc@parse@next
+ #1}% optional space and |=| is left at user's discretion. In fact,
+
+\n@melet{ArgumentCatcher@P=}{ArgumentCatcher@=}
+
+
+\long\def\ArgumentCatcher@gobblespace
+{\ArgumentCatcher@T {\dc@gobblespace@dummy}{\NoValue}}
+
+\let\ArgumentCatcher@Pgobblespace\ArgumentCatcher@gobblespace
+
+\def\dc@gobblespace@dummy{\dc@gobblespace@dummy}
+
+\let\gobblespace\dc@gobblespace@dummy
+
+
+\errorcontextlines=100
+
+\long\def\@dc@InnerName#1{%
+ \bslash@or@ac{#1}%
+ \bslash
+}%
+
+%% \CH{2010/07/26 v0.993 This strikingly simple idea of storing the
+%% specifiers' sequence in a macro came to my head only after some
+%% three years of developing \cmd\DeclareCommand}
+\long\edef\@dc@SpecsArName#1{%
+ Specs \string& arity of
+ \@nx\bslash@or@ac{#1}%
+}%
+
+\pdef\@dc@messages {%
+ \gmu@notif {@dc@quiet@}{}%
+ {%
+ \gmu@if {DCMessages}{}%
+ {\PackageInfo{gmcommand}{^^J%
+ Parsing arguments for \dc@innername^^J%
+ [specified as:
+ \unexpanded
+ \@xa\@xa\@xa \@xa\@xa\@xa \@xa{%
+ \@xa\@xa\@xa\@secondofmany
+ %
+ % not |\@secondofthree| because first use of this definition is for
+ % |\DeclareCommand| not having its specifiers' carrier.
+ %
+ \csname \@dc@specsname\endcsname {}{}\@nil }%
+ \space ]^^J%
+ [in file: \@currname.\@currext\space ]}% of info message
+ }% of if \ac DC messages
+ {}% of if not |DCMessages|
+ }% of if not |@dc@quiet@|
+ {}% of if not not |@dc@quiet@|
+}% of |\@dc@messages|
+
+
+\edefU\@dc@DCbody {%
+{% \label{DC:final} %
+ % \chgs{2008/12/05 v0.98 added the \cs{@bsphack}---\cs{@esphack} option}
+ % \chgs{2008/12/07 v0.98 added the \env{Q\arg{tokens}} argument type
+ % (a~word over the alphabet \<tokens>)}
+ \edef\dc@innername {\@dc@InnerName #1}% we'll use it in |K|-type arg.\ catcher and
+ \edef\@dc@specsname {\@dc@SpecsArName{#1}}%
+ \gmu@ifCSdefined {#1}%
+ {\gmu@if{DCMessages}{}%
+ {\PackageWarning{gmcommand}{%
+ ^^J%
+ Redefining command \dc@innername\space
+ with \string\DeclareCommand}%
+ }%
+ {}%
+ }%
+ {\gmu@if {DCMessages}{}%
+ {\PackageInfo{gmcommand}{^^J%
+ \string\DeclareCommand-ing \dc@innername\space (new)^^J}%
+ }%
+ {}%
+ }%
+ \@dc@alllong@false
+ \@dc@quiet@false
+ %
+ \emptify\@dc@Specs@tempa
+ %
+ \gmu@ifsbintersect{#2}{\long!lL}{%
+ \addtomacro\@dc@Specs@tempa{\long}%
+ \@dc@alllong@true}%
+ {}%
+ %
+ \gmu@ifsbintersect{#2}{.qQ\quiet}{%
+ \addtomacro\@dc@Specs@tempa{\quiet}%
+ \@dc@quiet@true}%
+ {}%
+ %
+ \gmu@ifsbintersect{#2}{iIwW\sphack}%
+ {% if `invisibility' is specified: \UnDef
+ \addtomacro\@dc@Specs@tempa{\sphack}%
+ \def\@dc@bsphack@{\@nx\@bsphack}% \UnDef
+ \def\@dc@esphack@{\@nx\@esphack}%
+ }%
+ {\emptify\@dc@bsphack@
+ \emptify\@dc@esphack@}% if `invisibility' is not specified.
+ %
+ \gmu@ifsbany\envhack{#2}%
+ {% but if we define an environment:
+ \addtomacro\@dc@Specs@tempa{\envhack}%
+ \emptify\@dc@bsphack@
+ \emptify\@dc@esphack@
+ \edef\@dc@setThrowArgs{%
+ \dc@ThrowArgs{\string#1}}% if our command is used
+ }%
+ {% and if we don't define an environment:
+ \emptify\@dc@setThrowArgs
+ }%
+ %
+ \relaxen\@dc@global@
+ \relaxen\@dc@outer@
+ %
+ \gmu@ifsbany\outer{#2}%
+ {\addtomacro\@dc@Specs@tempa{\outer}%
+ \let\@dc@outer@\outer}%
+ {}%
+ %
+ \gmu@ifsbany\global{#2}{%
+ \addtomacro\@dc@Specs@tempa {\IAmDeclaredGlobally}%
+ \let\@dc@global@\global}%
+ {}%
+ %
+ \@xa\Name \@xa\edefU
+ \@xa\@dc@specsname
+ \@xa{\@xa{\@dc@Specs@tempa}}%
+ \@dc@ResetParseAuxilia
+ %
+ \@dc@ParseNextSpecifier #3%
+ \@dc@buckstopshere % it's the sentinel of parsing. Since the test
+ %
+ \@xa \Name \@xa \addtomacro \@xa \@dc@specsname
+ \@xa {\@xa{\@dc@ParsedSpecs}}%
+ %
+ \@xa\Name\@xa\addtomacro\@xa\@dc@specsname
+ \@xa{\@xa{\the \c@dc@argnum}}%
+ %
+ \@dc@outer@\@dc@global@ % possibly the prefixes,
+%%%%%
+%%%%%% Here comes the definition of the coating macro, named the
+%%%%%% same as the command:
+ \protected\edef#1{% always |\protected| \balsmiley( ;-)
+ \@dc@bsphack@ % perhaps |\@bsphack|
+ %
+ \@dc@messages
+ %
+ \@nx\@dc@{\the\toks@}% in the braces appear the argument catchers.
+ \@xanxcs{\dc@innername}%
+ \ifx\@dc@outer@\outer
+ \@xanxcs{\@xa\gobble\string#1 }% note the blank
+ \else \@nx #1%
+ \fi
+ }% of main coating macro's |\edef|. \UnDef
+ %
+ \edef\gmu@DeclareCommand@resa{%
+ \@dc@global@ % perhaps |\global|
+ \long\def\@xanxcs{\@dc@InnerName{#1}}% for a~command
+ \@xau\@dc@innerhashes % it's |#1#2#3…|
+ {% the body of the inner ‘|\\⁄<name>\|’ macro:
+ \@dc@setThrowArgs
+ \unexpanded{#4}%
+ \@dc@esphack@}%
+ }% of |\edef|.
+ \gmu@DeclareCommand@resa
+}% of |\DeclareCommand|'s body.
+}
+
+\def\@dc@DCprefixQlist{\global\protected\outer\long
+ \relax % for the very tricky case when |\@dc@global| may be
+ !lL.qQiIwW\sphack\envhack}
+
+\long\def\ShowCommand #1{%
+ \@iwruJ
+ \@iwru{»\string#1« is »\meaning#1«}%
+ \@iwruJ
+ \@iwru{»\Name\string{\@dc@InnerName{#1}}« is
+ »\Name\meaning{\@dc@InnerName{#1}}«}%
+ \@iwruJ
+ \@iwru{»\Name\string{\@dc@SpecsArName{#1}}« is
+ »\Name\meaning{\@dc@SpecsArName{#1}}«}%
+ \@iwruJ
+ \show\show
+}
+
+\@XA{\DeclareCommand\DeclareCommand % This is the final version by now.\
+{
+ #1 >Pm % command to be defined (may be \incs{par} if you
+ #2 >\@xa Q{\@dc@DCprefixQlist}{} %\
+ #3 >Pm % arguments specification (may contain \incmd\par),
+ #4 >Pm % the definition body; may contain nearly anything including
+}}\@dc@DCbody
+
+
+\@XA{\DeclareCommand \DeclareCommand \long
+ {m >\@xa Q{\@dc@DCprefixQlist}{} mm}}%
+\@dc@DCbody
+
+
+\long\def\dc@EAName#1{% Env.\ arguments' toks' name
+ \if\bslash#1\else#1\fi's_args}
+
+\pdef\dc@ThrowArgs#1{%
+ \gmu@if{csname}{\dc@EAName{#1}\endcsname}
+ {}% if it's defined, we do nothing (we assume it's defined by us and
+ % is toks register.)
+ {% else we define it as a new toks
+ % \label{'s args}
+ \@xa\newtoks\csname\dc@EAName{#1}\endcsname
+ }%
+ \csname\dc@EAName{#1}\endcsname=%
+ \@xa\@xa\@xa{\@xa\@gobble\the\@dc@arguments}%
+}%
+
+
+\def\@dc@K@defaultrepl{##1}
+
+\DeclareCommand\@dc@define@K \long {mb}{% \label{K@parse}
+ % First we add the particular \CS to the toks register:\nostanza
+ \edef\gmu@tempa{%
+ \unexpanded{\toks@\@xa}%
+ {\@nx\the\toks@{%
+ \@xanxcs{\dc@innername @K\the\c@dc@catchernum}%
+ }%
+ }%
+ % here we add to the parsers toks list a \CS\ named
+ % |\⁄<our command>@K⁄<num. of catcher>| (the particular Knuthian catcher)
+ }\gmu@tempa
+ % and define this macro: \nostanza
+ \edef\gmu@tempa{%
+ % And now we define that particular Knuthian catcher.
+ \def\@xanxcs{\dc@innername @K\the\c@dc@catchernum}%
+ \gmu@if {@dc@xadefault@i@}{}%
+ {\@xau{#1}}%
+ {\unexpanded{#1}}%
+ {%
+ \@nx\@dc@addargum{{%
+ \IfValueTF{#2}{%
+ \gmu@if{@dc@xadefault@ii@}{}%
+ {\@xau{#2}}%
+ {\unexpanded{#2}}%
+ }{\@xau{\@dc@K@defaultrepl}}%
+ }}% we add the Knuthian
+ % replacement to the toks register as \inhash n.
+ \@nx \@dc@parse@next \@dc@arguments
+ }% and continue parsing.
+ }% of |\edef|. Now we execute this temporary macro, which means we \incmd\def|\⁄<command>@K⁄<n>|
+ \@dc@global@ % set properly before |\@dc@ParseNextSpecifier #3⁄<buck>|.
+ \if P\@dc@long@letter\relax\long\fi
+ \gmu@tempa
+ % Now we clean up and continue construction of arguments parser. \nostanza
+ \@dc@ParseNextSpecifier
+}% of |\@dc@define@K|
+
+\DeclareCommand\@dc@grab@Loop \long {%
+ #1 T{\any \none Uu\U \u Ww\W \w \lostwax} % the “sign” of matching for adding; use of
+ % the letters suppresses adding them to the
+ % parsed specifiers' list, which is crucial for
+ % |\SameAs| copying of specifiers: the “until” and “while” loops
+ % don't shift their arguments.
+ %
+ #2 >Pm % list of tokens to match for/against iteration
+ %
+ >i T{\drain \drop \Drain \Drop}
+ #3 T{\any \none }{\none} % the “sign” of matching for draining
+ %
+ #4 b{} % list of drainers, empty by default
+ %
+ >i T{\count \ubound}
+ #5 D{\m@ne} % upper bound of iterations
+ %
+ >i T{\default \Default}
+ #6 b % default value (|\NoValue| by default)
+ %
+ #7 T{\eacher \Eacher \defEacher} % default is |\NoValue| and that's no
+ % harm since we test if |#7| == |\defEacher|.
+ #8 B{} % eacher, empty by default
+}{%
+ %
+ \@dc@process@matchsign {#1} {##1}%
+ %
+ \dc@addtoParsed@{#2}%
+ %
+ \gmu@if {strings}{\lostwax#1}%
+ {\gmu@if {@dc@xadefault}{}%
+ {\@xa\edefU\@xa\@dc@LostWaxList\@xa{#2}}%
+ {\edefU\@dc@LostWaxList{#2}}%
+ }%
+ {}%
+ %
+ \@dc@process@matchsign {#3} {##3}%
+ %
+ \dc@addtoParsed@{#4}%
+ %
+ \@xa \@dc@addtospecs@bare \@xa{\the\numexpr #5}%
+ \@dc@addtotoks@bare{{#5}}% to ignore possible expandafter.
+ %
+ \dc@addtoParsed@ {#6}%
+ %
+ \gmu@if {strings}{\defEacher#7}
+ {%
+ \Name\def{\dc@innername/defdEacher/\the\c@dc@argnum}%
+ ##1{#8}%
+ %
+ \Name \dc@addtoParsed@
+ {\dc@innername/defdEacher/\the\c@dc@argnum}%
+ }
+ {\gmu@if {@dc@xaeacher@}{}
+ {\@dc@xadefaulttrue}{\@dc@xadefaultfalse}%
+ \dc@addtoParsed@ {#8}%
+ }%
+ %
+ \gmu@if {strings}{\lostwax#1}
+ {\grab@LostWax}
+ {\@dc@ParseNextSpecifier}%
+}
+
+\DeclareCommand\grab@LostWax {
+ >iT{\lost \Lost}
+ #1 b{\lostwax@NoValue}
+ >iT {\count \ubound}
+ #2 D{1}
+ >iT{\endlost \EndLost}
+}{%
+ % We build an ignored “while” catcher.
+ %
+ \def\@dc@LostWaxA{>iw}%
+ %
+ \gmu@ifdetokens {\lostwax@NoValue}{#1}
+ {%
+ % if no particular value of the “lost wax” is provided, we assume
+ % the same as the “until” delimiter(s).
+ %
+ \prependtomacro\@dc@LostWaxA{>\@xa}%
+ \addtomacro\@dc@LostWaxA{\@dc@LostWaxList}%
+ }%
+ %
+ % Otherwise first we check whether “lost wax” provided has nonempty
+ % intersection with the “until” delimiters.
+ {%
+ \@xa\gmu@ifstrintersect
+ \@xa{\@dc@LostWaxList}{#1}
+ {\addtomacro\@dc@LostWaxA{{#1}}}%
+ {\PackageError{gmutils/gmcommand}{^^J%
+ You try to declare a "Lost Wax" catcher^^J%
+ with the "Lost" list disjoint with the "Until" list.^^J%
+ I assume sum of them}%
+ {}%
+ %
+ \@xa \addtomacro\@xa\@dc@LostWaxA
+ \@xa{\@xa{\@dc@LostWaxList #1}}%
+ }%
+ }%
+ %
+ \addtomacro\@dc@LostWaxA{ \count #2 \relax}%
+ %
+ \@xa\@dc@ParseNextSpecifier \@dc@LostWaxA
+}% of |\grab@LostWax|.
+
+\def\@dc@process@matchsign
+#1% the argument
+#2% its numeral in human language (for the error message)
+{%
+ \gmu@CASE {strings} {{#1}\any }
+ {\@dc@addtoParsed@bare {\any }}%
+ %
+ \gmu@CASEsbany {#1} {Ww}
+ {\@dc@addtotoks@bare {\any}}%
+ %
+ \gmu@CASE {strings} {{#1}\none}
+ {\@dc@addtoParsed@bare {\none }}%
+ %
+ \gmu@CASEsbany {#1} {Uu\lostwax }
+ {\@dc@addtotoks@bare {\none }}%
+ %
+ \gmu@lastCASE
+ {\PackageError{gmcommand}{%
+ You *have* to declare »\string\any« or »\string\none« ^^J%
+ as the #2 argument for the »\string\loop« catcher}{}%
+ }%
+ \gmu@ESAC
+}
+
+\long\pdef\UnDeclareCommand#1{%
+ \let#1\@undefined
+ \ifcsname\@dc@InnerName{#1}\endcsname
+ \n@melet{\@dc@InnerName{#1}}{@undefined}%
+ \fi
+ \ifcsname\@dc@SpecsArName{#1}\endcsname
+ \n@melet{\@dc@SpecsArName{#1}}{@undefined}%
+ \fi
+}
+
+
+\edef\gmu@tempa{%
+ \def\@nx\gmu@ifHashless@##1%
+ \detokenize{macro:}##2->##3\@nx\@nil}%
+\gmu@tempa
+{\gmu@if {}{\gmu@ifempty{#2}{1}{0}\gmu@ifempty{#3}{2}{1}}}
+
+\long\edef\gmu@ifHashlessMacro
+#1% a \CS, name or active char
+{%
+ \edef\@nx\gmu@WHL@arg{\@nx\@xanxtri{#1}}%
+ \unexpanded{\@xa\@xa\@xa\gmu@ifHashless@
+ \@xa\meaning\gmu@WHL@arg}%
+ \relax % to ensure that |#3| of |\gmu@ifHashless@| is nonempty
+ % if match for the delimiters is found earlier
+ \detokenize{macro:***->}\@nx\@nil % the sentinels
+}
+
+\long\def\gmu@ifDeclared#1{%
+ % \begin{enumargs}
+ % \item a \CS or csname or an active char,
+ % \item true branch,
+ % \item false branch %
+ % \end{enumargs}
+ \let\gmu@ifDe@next\@secondoftwo
+ %
+ %
+ \gmu@CASEnot {csname} {\@dc@SpecsArName{#1}\endcsname}%
+ {}%
+ %
+ \gmu@CASEnot {csname}{\@dc@InnerName{#1}\endcsname}%
+ {}%
+ %
+ \gmu@EatCases
+ {\gmu@ifHashlessMacro{#1}%
+ {\edef\gmu@ifDe@resa{%
+ \@nx\gmu@ifxany\@xanxcs{\@dc@InnerName{#1}}%
+ {\unexpanded\@xa\@xa\@xa{\gmu@WHL@arg}}%
+ % Above: to get the contents of the outer macro we use the macro
+ % carrying conversion of possible name into a \CS and expand
+ % it twice. Then we freeze it with |\unexpanded|.
+ {\let\@nx\gmu@ifDe@next\@nx\@firstoftwo}% if the inner macro
+ % is present in the
+ % contents of |#1|, we take the first implicit argument
+ {}% otherwise we do nothing (taking the second implicit is
+ % already set)
+ }% of edef
+ \gmu@ifDe@resa
+ }% of if a hashless macro
+ {}% of if not a hasless macro
+ }%
+ %
+ \gmu@ESAC
+ \gmu@ifDe@next
+}% of |\gmu@ifDeclared|
+
+\long\def\@dc@SameAs#1{%
+ \gmu@ifDeclared {#1}%
+ {%
+ \@xa\@xa\@xa \@xa\@xa\@xa \@xa
+ \@dc@ParseNextSpecifier
+ \@xa\@xa\@xa \@secondofthree
+ \csname \@dc@SpecsArName{#1}\endcsname
+ }%
+ {%
+ \PackageError{gmcommand}{%
+ Command \@nx#1 ^^J%
+ is not declared with \DeclareCommand. ^^J%
+ I can't repeat its parameters in current command declaration}%
+ {}%
+ }%
+}% of |\@dc@SameAs|
+
+\DeclareCommand\DCUse{>Pm}{% ^^A with star we automatically pass the
+ \gmu@ifDeclared{#1}%
+ {%
+ \@dc@arguments\@xa{\@xa
+ \csname \@dc@InnerName{#1}\endcsname
+ }%
+ %
+ \csname ArgumentCatcher@Pm@\romannumeral
+ \@xa \@xa \@xa \@thirdofthree
+ \csname \@dc@SpecsArName{#1}\endcsname % of arity carrier
+ \endcsname % of the catcher
+ }%
+ {\PackageError{gmcommand}{%
+ Command \@nx#1 ^^J%
+ is not declared with \DeclareCommand. ^^J%
+ Therefore I can't use its inner macro (because of its nonexistence).^^J}%
+ {}%
+ }%
+}%
+
+
+\DeclareCommand\DeclareEnvironment \long
+{
+ #1--#4 \SameAs \DeclareCommand
+ % We repeat the specifiers, but the role of |#4| is slightly
+ % different here: here it's the |\begin| part definition.
+ %
+ m % (5) the end definition; it \emph{can} contain any
+ % \inverb|#|\<n>---the arguments of the environment are passed
+ % to it, too.
+}{%
+ \def\gmu@DeclareEnvironment@resa{\envhack}% we add the information we define an
+ % environment.
+ \IfValueT{#2}%
+ {\addtomacro\gmu@DeclareEnvironment@resa{#2}}% we pass all the ‘prefixes’ to
+ % \incs{Decl\+are\+Comm\+and}
+ % \stanza
+ \@xa\DeclareCommand\csname#1\@xa\endcsname
+ \gmu@DeclareEnvironment@resa{#3}{#4}%
+ %
+ %\nostanza Now the begin definition is done. Let's get down to the
+ %end definition. \nostanza
+ %
+ \let\@dc@env@endglobal=\@dc@global@ % note this \CS was for sure redefined by the last
+ % \incs{Decl\+are\+Com\+m\+and} (and by nothing else) and that's
+ % exactly what we want.
+ \edef\gmu@DeclareEnvironment@resb{%
+ \@nx\@xa
+ \@xanxcs{\bslash end#1}%
+ \@nx\the
+ \@xanxcs{\dc@EAName{#1}}%
+ }% of |\edef|. It reuslts in
+ % \[|\@xa \\end⁄<name> \the\\⁄<name>'s_args|\]
+ % which does not collide with the inner macro of the |\end›…|
+ % command, since the latter is |\\end›…\|.
+\gmu@if{csname}{\dc@EAName{#1}\endcsname}{\gmu@namelet\global{\dc@EAName{#1}}{@undefined}}{}%
+ \edef\gmu@DeclareEnvironment@resa{% \UnDef
+ \@dc@global@\long\def % the inner end macro is always \incmd\long\
+ % and perhaps defined \incmd\global ly.
+ \@xanxcs{\bslash end#1}%
+ \@xau\@dc@innerhashes % it's |#1#2#3›…|---the inner end macro takes the
+ % same number of parameters as the begin macro.
+ {% the definition body
+ \unexpanded{#5}}%
+ }% of |\edef›…@resa|.
+ \gmu@DeclareEnvironment@resa
+ \edef\gmu@DeclareEnvironment@resc{%
+ \DeclareCommand\@xanxcs{end#1}%
+ \@dc@env@endglobal
+ {}% no parameters
+ {\@xau {\gmu@DeclareEnvironment@resb
+ \@ignoretrue}%
+ }%
+ }%
+ \gmu@DeclareEnvironment@resc
+ %
+ %
+}% of |\DeclareEnvironment|
+
+\DeclareCommand\NewCommand
+{\SameAs\DeclareCommand}
+{%
+ \gmu@ifCSdefined {#1}
+ {\DCUse\DeclareCommand#1{#2}{#3}{#4}}%
+ {\PackageError{gmcommand}%
+ {Command \@nx#1 already defined \on@line!}%
+ {}%
+ }%
+}
+
+\DeclareCommand\RenewCommand
+{\SameAs\DeclareCommand}
+{%
+ \gmu@ifCSdefined {#1}
+ {\DCUse\DeclareCommand#1{#2}{#3}{#4}}%
+ {\PackageError{gmcommand}%
+ {Command \@nx#1 not yet defined \on@line!}%
+ {}%
+ }%
+}
+
+\DeclareCommand\ProvideCommand
+{\SameAs\DeclareCommand}
+{%
+ \gmu@ifCSdefined {#1}
+ {}
+ {\DCUse\DeclareCommand#1{#2}{#3}{#4}}%
+}
+
+\DeclareCommand\NewEnvironment
+{\SameAs\DeclareEnvironment}
+{%
+ \gmu@ifdefined{#1}
+ {\DCUse\DeclareEnvironment{#1}{#2}{#3}{#4}{#5}}%
+ {\PackageError{gmcommand}
+ {Environment #1 already defined \on@line!}{}%
+ }%
+}
+
+\DeclareCommand\RenewEnvironment
+{\SameAs\DeclareEnvironment}
+{%
+ \gmu@ifdefined {#1}
+ {\DCUse\DeclareEnvironment{#1}{#2}{#3}{#4}{#5}}%
+ {\PackageError{gmcommand}
+ {Environment #1 not yet defined \on@line!}{}%
+ }%
+}
+
+
+\DeclareCommand\XeTeXthree{o}{% \
+ % \changes{v0.90}{2008/8/4}{adjusted
+ % to the redefinition of
+ % \cs{verb} in \pk{xlxtra} 2008/07/29}
+ \@ifXeTeX{%
+ \IfValueT{#1}{\PassOptionsToPackage{#1}{fontspec}}%
+ \@ifpackageloaded{gmverb}%
+ {%
+ \Store@Macro\verb
+ \StoreEnvironment{verbatim}%
+ \StoreEnvironment{verbatim*}%
+ }{}%
+ \RequirePackage{xltxtra}% since v 0.4 (2008/07/29) this package
+ % redefines |\verb| and \env{verbatim*},
+ % and quite elegantly provides an option
+ % to suppress the redefinitions, but
+ % unfortunately that option excludes also
+ % a~nice definition of |\xxt@visiblespace|
+ % which I~fancy.
+ \@ifpackageloaded{gmverb}%
+ {%
+ \Restore@Macro\verb
+ \RestoreEnvironment{verbatim}%
+ \RestoreEnvironment{verbatim*}%
+ }{}%
+ %
+ \AtBeginDocument{%
+ \@ifpackageloaded{gmlogos}{%
+ \Restore@Macro\LaTeX\Restore@MacroSt{LaTeX }% my version of the
+ % \LaTeX\ logo has been stored just
+ % after defining, in line \ref{SMLaTeX}. \ilrr
+ \Restore@Macro\eTeX}%
+ {}%
+ }%
+ % \stanza
+ \pdef\adddefaultfontfeatures##1{%
+ \addtomacro\zf@default@options{#1,}}
+ }% of |\@ifXeTeX|'s first argument,
+ {}% |\@ifXeTeX|'s second argument,
+}% of |\XeTeXthree|'s body.
+
+\DeclareCommand\setspaceskip{%
+ A{1}% optional factor for all three components
+ O{\fontdimen2\font}%
+ >is
+ O{\fontdimen3\font}%
+ >is
+ O{\fontdimen4\font}}
+{\spaceskip=\glueexpr\dimexpr#2*#1\relax plus\dimexpr #3*#1\relax
+ minus\dimexpr#4*#1\relax\relax}
+
+\def\makestarlow{%
+ \begingroup\lccode`\~=`\*\lowercase{%% \Define**
+ \endgroup\def~{\gmu@lowstar}}% 2009/10/19 |\let| changed to
+ % \inverb|\def| to allow redefinitions of \incmd\gmu@lowstar.
+ \catcode`\*=\active
+ \defLowStarFake
+}
+
+\DeclareCommand\defLowStarFake{%
+ Q{+-0123456789,.}{0,5}% fraction of fontchar depth of the star glyph
+}%
+{%
+ \def\gmu@lowstarfake{%
+ \leavevmode\vbox{\hbox{*}\kern#1\fontchardp\font`*}%
+ }%
+}
+
+\def\gmu@lowstarfake{*} % useful for next command where normal star is
+
+\DeclareCommand\enoughpage{%
+ #1 D{\NoValue} % (optional short version (number of
+ % |\baselineskip|s)) Before 2010/9/10 the default
+ % value was the |D|-default, i.e., 0, which lead to
+ % improper working of this command.
+ #2 B{2\baselineskip}% (2) optional (formerly mandatory) long version of
+ % required room on a page
+ >is
+ #3 B{} % (3) what if the room is enough
+ >is
+ #4 B{\newpage} % (4) what if there's to little room on a page
+}{%
+ % \chgs{2009/03/18 v0.98 made \eTeX-ish}
+ % \chgs{2009/05/25 v0.98 made ifthenelse-like with ‘then’ and ‘else’
+ % optional default \<nothing> and \cmd\newpage resp.}
+ % \chgs{2009/10/21 v0.98 \cmd\par\ removed since to let it be used
+ % for \cmd\pagebreak\ inside a paragraph}
+ \gmu@if {num} {%
+ \gmu@if {dim}{%
+ \dimexpr\pagegoal-\pagetotal<\dimexpr
+ (\IfValueTF{#1}{#1\baselineskip}{#2})*1\relax
+ }
+ 10%
+ \gmu@if {dim} {\pagegoal<\pagetotal}
+ 10%
+ >\z@
+ }
+ {\typeout{@@@@@ not enough page \on@line}%
+ #4%
+ }%
+ {#3}%
+}
+
+\long\def\gmu@LC@LetInners
+#1% scope prefix (|\global| or |\relax|
+#2% left side
+#3% right side of the assignment
+{%
+ \edef\gmu@LC@InnerLeft{\@dc@InnerName{#2}}%
+ \edef\gmu@LC@InnerRight{\@dc@InnerName{#3}}%
+ %
+ \gmu@namelet{#1}{\gmu@LC@InnerLeft}{\gmu@LC@InnerRight}%
+ \edef\gmu@LC@InnerLeft{\@dc@SpecsArName{#2}}%
+ \edef\gmu@LC@InnerRight{\@dc@SpecsArName{#3}}%
+ %
+ \gmu@namelet{#1}{\gmu@LC@InnerLeft}{\gmu@LC@InnerRight}%
+}
+
+\long\def\gmu@CL@PrepareArg
+#1% left/right
+#2% |\@xa| or |\edef|, maybe sth.\ more in the future
+#3% a \CS, text of a name or an active char
+{%
+ \Name\let{gmu@CL@#1}\@undefined
+ \ifx\@xa#2\Name\edef{gmu@CL@#1}{\@xau{#3}}\fi
+ \ifx\edef#2\Name\edef{gmu@CL@#1}{#3}\fi
+ \unless\ifcsname gmu@CL@#1\endcsname
+ \Name\edef{gmu@CL@#1}{%
+ \gmu@if{cat}{\@nx~\@nx#3}%
+ {\@nx#3}{\strip@bslash{#3}}%
+ }%
+ \fi
+}
+
+\DeclareCommand\CommandLet \long {%
+ \Scope % (1)
+ T{\@xa\edef} % (2) whether left side should be |\expandaftered|
+ m % (3) left side of assignment
+ >iT{=} % pro forma
+ T{\@xa\edef} % (4) whether right side should be |\expandaftered|
+ m % (5) right side of the asssignment
+}{%
+ %
+ \gmu@CL@PrepareArg{left}#2{#3}%
+ \gmu@CL@PrepareArg{right}#4{#5}%
+ %
+ \@xa\gmu@ifDeclared\@xa{\gmu@CL@right}{%
+ \edef\gmu@LC@resa{%
+ \DeclareCommand %
+ \@xa\@xanxtri\@xa{\gmu@CL@left}%
+ #1% scope prefix
+ {\@nx\SameAs\@xa\@xanxtri\@xa{\gmu@CL@right}}% args. spec
+ {}% the body of the command will be |\let| via letting inners.
+ }%
+ %
+ \gmu@LC@resa
+ \@XA{\@xa\gmu@LC@LetInners\@xa#1%
+ \@xa{\gmu@CL@left}}\@xa{\gmu@CL@right}%
+ }% of if Declared
+ {% if not Declared, we just |\let|:
+\if\@nx#3ѥ\typeout{@@@@@ »\@xa\@dc@InnerName\@xa{\gmu@CL@right}« is not
+ Declared?: \Name\meaning{\@xa\@dc@InnerName\@xa{\gmu@CL@right}}%
+}%
+\show\NotDeclared
+\fi
+ \@XA{\@xa\tri@let\@xa#1%
+ \@xa{\gmu@CL@left}}\@xa{\gmu@CL@right}%
+ }%
+}
+
+\DeclareCommand\envirlet \long{\Scope mm}{% for |\let|ting environments.
+ \CommandLet #1{#2}{#3}%
+ \CommandLet #1{end#2}{end#3}%
+}
+
+\DeclareCommand\@fornum{%
+ m% (1) initial (least) num. value
+ m% (2) limit (last iterated over) num. value
+ O{1}% (3) step of iteration
+ m% (4) body of the loop
+}%
+{\edef\gmu@fornum@min{\the\numexpr #1}%
+ \edef\gmu@fornum@lim{\the\numexpr #2}%
+ \let\gmu@fornum@curr\gmu@fornum@min
+ \@whilenum\gmu@fornum@curr<\gmu@fornum@lim
+ \do{#4%
+ \edef\gmu@fornum@curr{%
+ \the\numexpr\gmu@fornum@curr+#3}%
+ }% of |\@whilenum|'s body.
+}% of |\@fornum|.
+
+\pdef\StoreCommand{%
+ \begingroup
+ %\label{SC begr}
+ \MakePrivateLetters
+ \@StoreCommand
+}
+
+\long\def\gmu@SC@StorageName
+#1% a \CS, name or active char
+#2% group level
+{%
+ \gmu@storeprefix/%
+ \ifnum\numexpr#2>-1 \the\numexpr(#2)*1\relax\fi
+ \bslash@or@ac {#1}%
+}%
+
+\def\gmu@SC@setgrouplevel
+#1% |+›⁄|-⁄|\NoValue|
+#2% a decimal number
+{\edef\gmu@SC@grouplevel{%
+ \the\numexpr
+ \IfValueTF{#1}%
+ {\currentgrouplevel#1#2+1}{#2}%
+ }% of the grouplevel-carrying macro
+}
+
+\DeclareCommand\@StoreCommand
+{T{+-}% grouplevel shift indicator
+ d % group level or shift
+ >Pm% name or \CS
+}{%
+ \endgroup %we close the group opened in line \ref{SC begr}.
+ \gmu@SC@setgrouplevel{#1}{#2}%
+ %
+ \edef\gmu@SC@resa{%
+ \gmu@SC@StorageName{#3}{\gmu@SC@grouplevel}}%
+ %
+ \let\gmu@SC@scope\relax
+ \ifnum\gmu@SC@grouplevel>\currentgrouplevel
+ \let\gmu@SC@scope\global
+ \fi
+ \@xa\CommandLet\@xa\gmu@SC@scope\@xa{\gmu@SC@resa}{#3}%
+}
+
+\pdef\StoreEnvironment{%
+ \begingroup
+ \MakePrivateLetters
+ \@StoreEnvironment
+}
+
+\def\@StoreEnvironment#1{%
+ \@StoreCommand{#1}%
+ \begingroup
+ \@StoreCommand{end#1}%
+}
+
+\pdef\RestoreEnvironment{%
+ \begingroup
+ \MakePrivateLetters
+ \@RestoreEnvironment
+}
+
+\def\@RestoreEnvironment#1{%
+ \endgroup
+ \RestoreCommand{#1}%
+ \RestoreCommand{end#1}%
+}
+
+\pdef\UseStored{%
+ \begingroup
+ \MakePrivateLetters
+ \@UseStored}
+
+
+\DeclareCommand\@UseStored \long{%
+ T{+-}% (1) indicator of grouplevel shift (in distiction from an absolute
+ % group level)
+ d % (2) optional grouplevel/shift (0 by default)
+ O{\@gobble}% (3) stuff to be put before the pair of \CS es, an
+ % assignment e.g.
+ m % (4) a \CS or csname
+}{% \chgs{2010/06/23 v0.993 added}
+ \endgroup
+ \gmu@SC@setgrouplevel{#1}{#2}%
+ \edef\gmu@SC@grouplevel{%
+ \the\numexpr\gmu@SC@grouplevel+1}% for the first turn of loop
+ %
+ \loop
+ \edef\gmu@SC@grouplevel{%
+ % we decrease the group level number
+ \the\numexpr\gmu@SC@grouplevel-1}%
+ %
+ \edef\gmu@SC@currname{%
+ % define the cs' storage name for that level
+ \gmu@SC@StorageName{#4}{\gmu@SC@grouplevel}}%
+ \ifnum
+ % and check the conjunction of conditions: the group level is >=-1…
+ \unless\ifnum\gmu@SC@grouplevel<-1 1\else 0\fi
+ % and the csname remains not defined.
+ \unless\ifcsname \gmu@SC@currname \endcsname 1\else 0\fi
+ =11
+ \repeat
+ \gmu@if{csname}{\gmu@SC@currname\endcsname}%
+ {%
+ % ^^A \s how\ExecutingTrueBranch
+ \@XA{#3{#4}}\csname \gmu@SC@currname\endcsname}% first
+ {%
+ % ^^A \s how\ExecutingFalseBranch
+ #3{#4}\@undefined}% second
+}% of |\@UseStored|
+
+\DeclareCommand\RestoreCommand{\Scope d}{%
+ \UseStored #2[\CommandLet #1*]%
+}
+
+\newbox\gmu@smashbox
+
+\DeclareCommand\set@smashbox{%
+ \Scope
+ T{hv}{h}
+}{#1\setbox\gmu@smashbox =\csname #2box\endcsname }%
+
+\def\smash@box{\smash{\box\gmu@smashbox}}
+
+
+\newbox\gmu@boxa
+\newdimen\gmu@dima
+\newdimen\gmu@dimb
+
+\DeclareCommand\gmu@extremebox {
+ #1 m % a dimen register (will be assigned the extr.\ value) or a
+ % \CS (will be defined as |\the| extreme value)
+ #2 T {\min\max}{\max} % kind of extreme
+ #3 T {\wd\ht\dp\totalheight}{\wd} % dimension to compare, the last two for total |\ht|+|\dp|.
+ #4 \lostwax {\global\relax} \eacher{\gmu@dimextreme@step} \lost{\relax}
+ #5 T{\global}{} % scope of assignment
+}{%
+ \gmu@if x {\max#2}
+ {\gmu@dimb=-\maxdimen
+ \def\gmu@dimextreme@comp{<}%
+ }
+ {\gmu@dimb=\maxdimen
+ \def\gmu@dimextreme@comp{>}%
+ }%
+ %
+ \long \def\gmu@dimextreme@step ##1{%
+ \setbox\gmu@boxa=\hbox{##1}%
+ %
+ \gmu@dima= \gmu@if x {\totalheight#3}
+ {\dimexpr \ht\gmu@boxa +\dp\gmu@boxa\relax}
+ {#3\gmu@boxa}%
+ \relax
+ %
+ \gmu@if {dim}
+ {\gmu@dimb\gmu@dimextreme@comp \gmu@dima }
+ {\gmu@if {dim} {\gmu@dima>\z@}
+ {\gmu@dimb=\gmu@dima }
+ {}%
+ }
+ {}%
+ %
+ }%
+ %
+ #4%
+ \IfIs #1\dimen
+ {#5#1=\gmu@dimb}
+ {#5\edef #1{\the\gmu@dimb }}%
+}%
+
+
+\DeclareCommand\enlargefsize{
+ #1 m % enlargement (dim(expr)) for font size
+ #2 b % enlargement (dim(expr)) for baselineskip (if absent, |#1| is used)
+}{\edef\gmu@tempa{%
+ \@nx\fontsize{\the\dimexpr\f@size pt+#1}%
+ {\the\dimexpr 1\baselineskip+ \IfValueTF{#2}{#2}{#1}}%
+ }\gmu@tempa\selectfont
+}
+
+\DeclareCommand\scalefsize {
+ #1 m % scale for font size
+ #2 b % scale for baselineskip (if absent, |#1| is used)
+ \gobblespace
+}{\edef\gmu@tempa{%
+ \@nx\fontsize{\the\dimexpr #1\dimexpr\f@size pt\relax}%
+ {\the\dimexpr \IfValueTF{#2}{#2}{#1}\baselineskip}%
+ }\gmu@tempa\selectfont
+}
+
+\let\gmu@discretionaryhyphen\- % for the cases when we don't redefine
+ % \incs\- but use \incs\UrlFix
+
+\DeclareCommand\bihyphen{
+ O{*} % token that'll make the discretionary hyphen |\-| allow other break-points
+}{%
+ \DeclareCommand\gmu@discretionaryhyphen{T{#1}ca}{%
+ \IfValueT{##2}{%
+ \gmu@ifempty{##2}{}{%
+ \def\gmu@bihyphen@char{##2}}%
+ }%
+ \IfValueT{##3}{%
+ \gmu@ifempty{##3}{}{%
+ \def\gmu@bihyphen@corr{##3}}%
+ }%
+ %
+ % Depending on |#1| we allow (if present, then we take |\discre|)
+ % hyphenation of the word's before- and
+ % after-parts or forbid it (if absent, then we take
+ % |\discretionary|).
+ \IfValueTF{##1}\discre\discretionary
+ {% before break
+ \IfValueTF{##2}
+ {%
+ \gmu@ifempty{##2}{\gmu@bihyphen@char}{##2}%
+ }%
+ {%
+ \ifnum\hyphenchar\font>\z@
+ \char\hyphenchar\font
+ \fi}%
+ }% end of before break
+ {%after break
+ \IfValueT{##3}{%
+ \gmu@ifempty{##3}{\gmu@bihyphen@corr}{##3}%
+ }%
+ }%
+ {% without break
+ }% almost as in \TB: unlike \TB, we allow hyphenchars
+ % $\ge255$ as we are \XeTeX.
+ }% of |\DeclareCommand\-|
+ \gmu@storeifnotyet\-% original |\-| is a~\TeX's
+ % primitive, therefore we should store it.
+ \CommandLet\-\gmu@discretionaryhyphen
+ \CommandLet\@dischyph\gmu@discretionaryhyphen % to override
+ % \pk{framed.sty}
+ \pdef\gmu@flexhyphen{\gmu@discretionaryhyphen#1\relax}%
+}% of |\bihyphen|
+
+\relaxen\gmu@bihyphen@corr
+
+\DeclareCommand\gmshowlists {
+ >iT{\depth}
+ Ď{1}%
+ >iT{\breadth}
+ Ď{10000000}
+}
+{\tracingonline=\@ne
+ \showboxdepth=#1\relax % how many levels of
+ % box nesting should be shown
+ \showboxbreadth=#2\relax % after how many elements »etc.« will be put
+ \showlists
+}
+
+\DeclareCommand\gmtracingoutput {
+ \SameAs\gmshowlists
+}
+{\tracingonline=\@ne
+ \showboxdepth=#1\relax % how many levels of
+ % box nesting should be shown
+ \showboxbreadth=#2\relax % after how many elements »etc.« will be put
+ \tracingoutput=\@ne
+}
+
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmcommand.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmenvir.sty b/Master/texmf-dist/tex/latex/gmutils/gmenvir.sty
new file mode 100644
index 00000000000..3348e8b0005
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmenvir.sty
@@ -0,0 +1,141 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmenvir.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `envir')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmenvir}
+ [2010/10/24 v0.993 redefinition of \string \begin \space and \string \end (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+
+\RequirePackage{gmbase, gmampulex} % the low-level macros
+
+
+
+\emptify\@envirstack
+
+\def\@pushenvir{%
+ %^^V\edef\@currenvir{\@currenvir}% is already expanded.
+ \xdef\@envirstack{%
+ {\@xa\detokenize\@xa{\@currenvir}}%
+ {\the\currentgrouplevel}%
+ {\@currenvline}%
+ \@envirstack
+ }%
+}
+
+\def\@popenvir#1#2#3{%
+ \@XA{\@popenvir@#1#2#3}\@envirstack\@nil
+}
+
+\def\@popenvir@#1#2#3#4#5#6#7\@nil{%
+ \gdef#1{#4}% |#1| carries last envir name
+ \gdef#2{#5}% |#2| carries last envir level
+ \gdef#3{#6}% |#3| carries last envir beginnig line
+ \gdef\@envirstack{#7}% and we update the stack
+}
+
+\long\def\@begnamedgroup#1{%
+ \edef\@prevgrouplevel{\the\currentgrouplevel}% added 2009/03/24 to
+ % handle special pseudo-environments that don't increase
+ % \incmd\currentgrouplevel (such as \inenv{document}). Note it's
+ % |\edef|ed \emph{outside} the environment's group.
+ \@ignorefalse% not to ignore blanks after group
+ \begingroup\@endpefalse
+ \edef\@prevenvir{\@currenvir}% Note we |\edef| it inside the group
+ % (for obvious reason), unlike the ‘previous’ grouplevel.
+ \edef\@currenvir{#1}% We could do recatcoding
+ % through\inverb|\string| or \nlperc\cmd\detokenize\ but all the name
+ % `other' and 10 could affect
+ % a~thousand packages so we don't do that and we'll recatcode in
+ % a~testing macro, see line \ref{@ifenvir}.
+ \edef\@currenvline{\on@line}%
+ \@pushenvir % we put current envir to |\@envirstack|.
+ \csname #1\endcsname}% if the argument is a~command's name (an
+
+\def\begin{\gmu@ifstar{\@begnamedgroup}{%
+ \@begnamedgroup@ifcs}}
+
+\def\@begnamedgroup@ifcs#1{%
+ \ifcsname#1\endcsname\afterfi{\@begnamedgroup{#1}}%
+ \else\afterfi{\@latex@error{Environment #1 undefined}\@eha}%
+ \fi}%
+
+
+\long\def\@fourthofmany#1#2#3#4#5\@nil{#4}%
+
+\lpdef\@ifprevenvir#1{%\label{@ifenvir}\
+ % \begin{enumargs}
+ % \mand enquired environment name which will be confronted with
+ % \incs{@prevenvir}
+ % \mand what if true (if the names are
+ % equivalent\qfootnote{The names are checked whether they produce
+ % the same \cmd\csname. They don't have to have the same
+ % catcodes.})
+ % \mand what if false
+ % \end{enumargs}
+ %
+ % \changes{v0.92}{2009/09/04}{added}
+ % \chgs{2010/06/09 v0.993 made use \cmd\@envirstack}
+ %
+ % % \CH{2010/09/23 v0.993 to be precise, it's not a change but
+ % % rather a staus quo action: \cmd\gmu@ifedetokens suddenly turned
+ % % to be expandable and un\cmd\protected so we make \emph{this}
+ % % macro \cmd\protected}
+ \gmu@ifedetokens
+ {\@xa\@fourthofmany\@envirstack\relax\relax\relax\relax\@nil}%
+ {#1}}
+
+
+\def\@checkend#1{%
+ \@ifenvir{#1}%
+ {}%
+ {\@badend{#1}}%
+}
+
+\ampulexdef\end[#1][#1]\endcsname\@checkend{%
+\endcsname
+\@popenvir\gmu@drain\gmu@drain\gmu@drain
+\@checkend}
+
+\pdef\@endif#1{\@ifenvir{#1}{\end{#1}}{}}
+
+\pdef\@endifprev#1{\@ifprevenvir{#1}{\end{#1}}{}}
+
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmenvir.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmlogos.sty b/Master/texmf-dist/tex/latex/gmutils/gmlogos.sty
new file mode 100644
index 00000000000..f27a97c8150
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmlogos.sty
@@ -0,0 +1,221 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmlogos.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `logos')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmlogos}
+ [2010/04/09 v0.993 TeX-related logos (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+
+\RequirePackage{gmbase}
+
+
+\let\oldLaTeX\LaTeX
+\let\oldLaTeXe\LaTeXe
+
+\pdef\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@}
+\Store@Macro\TeX
+\AtBeginDocument{\Restore@Macro\TeX}
+
+\newcommand*\DeclareLogo[3][\relax]{% \begin{enumargs*}
+ % \opt is for non-\LaTeX\ spelling and will be used in the
+ % \acro{PD1} encoding (to make pdf bookmarks);
+ % \item is the command, its name will be the PD1 spelling by
+ % default,
+ % \item is the definition for all the font encodings except PD1.
+ % \end{enumargs*}
+ %
+ \ifx\relax#1\def\gmu@DeclareLogo@resa{\@xa\@gobble\string#2}%
+ \else
+ \def\gmu@DeclareLogo@resa{#1}%
+ \fi
+ \edef\gmu@DeclareLogo@resa{%
+ \@nx\DeclareTextCommand\@nx#2{PD1}{\gmu@DeclareLogo@resa}}
+ \gmu@DeclareLogo@resa
+ \DeclareTextCommandDefault#2{#3}%
+ \pdef#2{#3}% added for \XeTeX.
+}
+
+\DeclareLogo\LaTeX{%
+ {%
+ L%
+ \setbox\z@\hbox{\check@mathfonts
+ \fontsize\sf@size\z@
+ \math@fontsfalse\selectfont
+ A}%
+ \kern-.57\wd\z@
+ \sbox\tw@ T%
+ \vbox to\ht\tw@{\copy\z@ \vss}%
+ \kern-.2\wd\z@% originally $-,15$\,em for T.
+ }%
+ {%
+ \ifdim\fontdimen1\font=\z@
+ \else
+ \count\z@=\fontdimen5\font
+ \multiply\count\z@ by 64\relax
+ \divide\count\z@ by\p@
+ \count\tw@=\fontdimen1\font
+ \multiply\count\tw@ by\count\z@
+ \divide\count\tw@ by 64\relax
+ \divide\count\tw@ by\tw@
+ \kern-\the\count\tw@ sp\relax
+ \fi}%
+ \gmlogos@hyphen
+ \TeX}
+
+\DeclareLogo\LaTeXe{\mbox{\m@th \if
+ b\expandafter\@car\f@series\@nil\boldmath\fi
+ \LaTeX\kern.15em2$_{\textstyle\varepsilon}$}}
+
+\Store@Macro\LaTeX
+\Store@MacroSt{LaTeX }
+
+\DeclareLogo[(La)TeX]{\LaTeXpar}{%
+ {%
+ \setbox\z@\hbox{(}%)
+ \leavevmode % \chgs{2010/04/09 v0.993 added \cmd\leavevmode\ (a
+ % bug fix)}
+ \copy\z@
+ \kern-.2\wd\z@ L%
+ \setbox\z@\hbox{\check@mathfonts
+ \fontsize\sf@size\z@
+ \math@fontsfalse\selectfont
+ A}%
+ \kern-.57\wd\z@
+ \sbox\tw@ T%
+ \vbox to\ht\tw@{\box\z@%
+ \vss}%
+ }%
+ \kern-.07em% originally $-,15$\,em for T.
+ {%(
+ \sbox\z@)%
+ \kern-.2\wd\z@\copy\z@
+ \kern-.2\wd\z@}\gmlogos@hyphen\TeX
+}
+
+\gmu@ifundefined{AmSTeX}
+ {\def\AmSTeX{\leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex%
+ \hbox{$\mathcal M$}\kern-.2em\mathcal S$-\TeX}}}{}
+
+\DeclareLogo\BibTeX{{\rmfamily B\kern-.05em%
+ \textsc{i{\kern-.025em}b}\kern-.08em% the kern is wrapped in
+ % braces for my |\fakescaps|' sake.
+ \TeX}}
+
+\DeclareLogo\SliTeX{{\rmfamily S\kern-.06emL\kern-.18em\raise.32ex\hbox
+ {\scshape i}\kern -.03em\TeX}}
+
+\DeclareLogo\PlainTeX{\textsc{Plain}\kern2pt\TeX}
+
+\DeclareLogo\Web{\textsc{Web}}
+\DeclareLogo[The TeX book]\TeXbook{\textsl{The \TeX\space book}}
+\let\TB\TeXbook% \textit{TUG Boat} uses this.
+
+\DeclareLogo[e-TeX]\eTeX{%
+ \iffontchar\font"03B5{\itshape ε}\else
+ \ensuremath{\varepsilon}\fi-\kern-.125em\TeX}% definition sent by Karl
+
+\Store@Macro\eTeX
+
+\DeclareLogo[pdfe-TeX]\pdfeTeX{pdf\gmlogos@hyphen\eTeX}
+
+\DeclareLogo\pdfTeX{pdf\gmlogos@hyphen\TeX}
+\DeclareLogo\pdfLaTeX{pdf\gmlogos@hyphen\LaTeX}
+
+\gmu@ifundefined{XeTeX}{%
+ \DeclareLogo\XeTeX{X\kern-.125em\relax
+ \gmu@ifundefined{reflectbox}{%
+ \lower.5ex\hbox{E}\kern-.1667em\relax}{%
+ \lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\relax}%
+ \TeX}}{}
+
+\gmu@ifundefined{XeLaTeX}{%
+ \DeclareLogo\XeLaTeX{X\kern-.125em\relax
+ \gmu@ifundefined{reflectbox}{%
+ \lower.5ex\hbox{E}\kern-.1667em\relax}{%
+ \lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\relax}%
+ \LaTeX}}{}
+
+\DeclareLogo\XeTeXpar{% \chgs{2010/04/09 v0.993 added}
+ \setbox\z@\hbox{(}%)
+ \leavevmode
+ \copy\z@
+ \kern-.2\wd\z@
+ \smash{% the “Xe” part is copied from \pk{xltxtra}
+ X\lower0.5ex
+ \hbox{\kern-0.15em
+ \gmu@ifundefined{XeTeXversion}%
+ {\setbox0=\hbox{E}\dimen0=\ht0\advance\dimen0by\dp0%
+ \raise\dimen0\hbox{\rotatebox{180}{\box0}}%
+ }% of if not in \XeTeX, then in \XeTeX:
+ {\ifnum\XeTeXfonttype\font>0
+ \ifnum\XeTeXcharglyph"018E>0
+ \char"018E\relax
+ \else
+ \ifdim\fontdimen1\font=0pt
+ \reflectbox{E}%
+ \else
+ \XeTeXuseglyphmetrics=1%
+ \setbox0=\hbox{E}\dimen0=\ht0\advance\dimen0by\dp0%
+ \raise\dimen0\hbox{\rotatebox{180}{\box0}}%
+ \fi
+ \fi
+ \else
+ \setbox0=\hbox{E}\dimen0=\ht0\advance\dimen0by\dp0%
+ \raise\dimen0\hbox{\rotatebox{180}{\box0}}%
+ \fi}% of reversed E when in \XeTeX
+ }% of hbox
+ }% of smash ^^A(
+ \setbox\z@\hbox{)}%
+ \kern-.2\wd\z@
+ \copy\z@
+ \kern-0.15em
+ \TeX}%
+
+\DeclareLogo[LuaTeX]\LuaTeX{\textsc{Lua}\gmlogos@hyphen\TeX}
+
+\emptify\gmlogos@hyphen
+
+\def\HyphenateLogo#1{%
+ {\let\gmlogos@hyphen\-%
+ #1}%
+}
+
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmlogos.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmmeta.sty b/Master/texmf-dist/tex/latex/gmutils/gmmeta.sty
new file mode 100644
index 00000000000..b6bc0b2207b
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmmeta.sty
@@ -0,0 +1,295 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmmeta.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `meta')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmmeta}
+ [2010/10/24 v0.993 meta-symbols for typesetting macros and arguments (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+\RequirePackage{gmcommand}
+\pdef\meta#1{%
+ % \begin{quotation}
+ % Since the old implementation of |\meta| could be used in math we better ensure
+ % that this is possible with the new one as well. So we use |\ensuremath| around
+ % |\langle| and |\rangle|. However this is not enough: if |\meta@font@select| below
+ % expands to |\itshape| it will fail if used in math mode. For this reason we hide
+ % the whole thing inside an |\nfss@text| box in that case.
+ % \end{quotation}
+ {\meta@fontsetting\ensuremath\langle}%
+ \ifmmode\@xa\nfss@text\fi
+ {% this has to be a~begin-group because \incmd{\nfss@text} becomes
+ % \incmd\hbox\ in math mode.
+ \gmu@activespaceblank
+ \meta@font@select
+ % Need to keep track of what we changed just in case the user changes font inside
+ % the argument so we store the font explicitly.
+ #1\/%
+ }%
+ {\meta@fontsetting\ensuremath\rangle}%
+}% of |\meta|.
+
+\pdef\gmu@activespaceblank{%
+ \@xa\def\gmu@activespace{\space\ignorespaces}% note the
+ % subtle perversity of this definition: if we meet more than one
+ % subsequent active spaces, then the first of them will
+ % typeset \incmd\space and its \incmd\ignorespaces\ will
+ % gobble \incmd\space\ of the second and will stop at
+ % \incs{ignorespaces} and this \incs{ignorespaces} will gobble
+ % the next \incs{space} and so on.
+}
+
+\def\meta@fontsetting{\color{red!85!black}}
+
+\def\meta@font@select{\meta@fontsetting\it}
+
+\def\<#1>{\meta{#1}}
+
+\pdef\metachar#1{\begingroup\metacharfont #1\endgroup}
+\def\metacharfont{\meta@fontsetting\rm}
+
+\pdef\vs{\discre{\visiblespace}{}{\visiblespace}}
+
+\def\printspaces#1{{\let~=\vs \let\ =\vs \gmu@pswords#1 \@nil}}
+\def\gmu@pswords#1 #2\@nil{%
+ \ifx\relax#1\relax\else#1\fi
+ \ifx\relax#2\relax\else\vs\penalty\hyphenpenalty\gmu@pswords#2\@nil\fi}% note
+
+\pdef\sfname#1{\textsf{\printspaces{#1}}}
+
+\def\gmu@discretionaryslash{\discre{/}{\hbox{}}{/}}% the second
+
+\pdef\file#1{\gmu@printslashes#1/\gmu@printslashes}
+
+\def\gmu@printslashes#1/#2\gmu@printslashes{%
+ \sfname{#1}%
+ \ifx\gmu@printslashes#2\gmu@printslashes
+ \else
+ \textsf{\gmu@discretionaryslash}%
+ \afterfi{\gmu@printslashes#2\gmu@printslashes}\fi}
+
+
+\pdef\pk#1{\textsf{#1}}
+
+\DeclareCommand\cs{O{\type@bslash\penalty\@M\hskip\z@skip}}{%\
+ % \begin{enumargs}
+ % \dc O{\bslash} the control sequence's prefix, by default it's
+ % \inverb|\| allowing hyphenation of subsequent word,
+ % \dc m the control sequence or anything to be typeset in
+ % typewriter font.
+ % \end{enumargs}
+ % \chgs{2008/12/12 v0.98 added \cs{verbatim@specials}}
+ % \chgs{2008/12/12 v0.98 made \cmd\- switch to \cmd\normalfont\
+ % because \IMHO\ this underlines the fact that a~\CS\ belongs to the
+ % narrative. \cmd\hyphenchar\ set to 45 as in usual texts}
+ \begingroup
+ \ifdefined\verbatim@specials\verbatim@specials\fi
+ \edef\-{\discretionary{%
+ \ifdefined\gmv@hyphen\gmv@hyphen
+ \else\unexpanded{{\normalfont-}}%
+ \fi}{}{}}%
+ \def\{{\type@lbrace\yeshy}\def\}{\char`\}}%
+ \narrativett
+ \edef\narrativett@storedhyphenchar{\the\hyphenchar\font}%
+ \hyphenchar\font=%
+ \ifdefined\gmv@hyphenchar\gmv@hyphenchar
+ \else "A6
+ \fi
+ \cs@inner{#1}%
+}% of |\cs|
+
+\pdef\cs@inner#1#2{%
+ #1#2%
+ \endgroup}
+
+\def\narrativett{\ttfamily}% such name because I~introduce it to
+
+\long\pdef\env{\cs[]}
+
+\foone{\@makeother\^}
+ {\pdef\hathat{\cs[^^]}}
+
+\AtBeginDocument{%
+ \@ifpackageloaded{gmdoc}{\def\hash{\cs[\#]}}{}}
+
+\def\possfil{\hfil\penalty1000\hfilneg}
+
+\def\possvfil{\vfil
+ \penalty\numexpr
+ \gmu@minnum{\clubpenalty+\widowpenalty}{9999}%
+ \relax % eaten by |\gmu@maxnum|
+ \relax % eaten by |\numexpr|
+ \vfilneg}
+
+
+\long\def\cmd#1{\@xa\cs\@xa{\@xa\cmd@to@cs\string#1}\spifletter}% it has to be
+
+\def\cmd@to@cs#1#2{\char\number`#2\relax}
+
+\pdef\marg#1{{\narrativett\type@lbrace}\arg@wrap{#1}{\narrativett\char`\}}}
+
+\pdef\oarg{\@ifnextchar[\@oargsq\@oarg}
+\pdef\@oarg#1{{\narrativett[}\arg@wrap{#1}{\narrativett]}}
+\pdef\@oargsq[#1]{\@oarg{#1}}
+
+\pdef\parg{\@ifnextchar(\@pargp\@parg}
+\def\@parg#1{{\narrativett(}\arg@wrap{#1}{\narrativett)}}
+\def\@pargp(#1){\@parg{#1}}
+
+\pdef\aarg{\@ifnextchar<\@aarga\@aarg}
+\def\@aarg#1{{\narrativett<}\arg@wrap{#1}{\narrativett>}}
+\def\@aarga<#1>{\@aarg{#1}}
+
+\def\@verbaarga#1#2>{\@aarg{#2}\arg@dc}
+
+\foone{\catcode`>\active}{%
+ \def\@verbaargact#1#2>{\@aarg{#2}\arg@dc}%
+}
+
+\foone{\@makeother\{\@makeother\}%
+ \catcode`[=\@ne\catcode`]=\tw@}
+[% ^^A{
+ \def\@verbmargm#1#2}[% for an argument in curly braces in a verbatim, where
+ % the braces are not groupers and not necessary ‘other’. We'll know
+ % by \incmd{\@ifnextif} that the future token is an opening
+ % brace. Note this macro has 2nd parameter delimited with ‘other’
+ % closing brace (so may not act correctly when braces are nested
+ % (then hide them with special verbatim groupers)).
+ \marg[#2]%
+ \arg@dc
+ ]%
+]% of |\foone|
+
+\def\arg@wrap{\meta}
+
+\DeclareCommand\arg@dc!{%
+ % \chgs{200/03/04 v0.991 added rcognising of verbatim braces and
+ % angles}
+ s % (1)
+ o % (2)
+ c % (3)
+ b % (4)
+ a % (5)
+ T{\arg} % (6) just gobbled (for backwards compatibility)
+}{% This command iterates while it
+ % has arguments and typesets them in brackets, parentheses or curly
+ % braces. Note it gobbles subsequent |\arg|s and just iterates.
+ \def\next{0}%
+ \IfValueT{#1}%
+ {\metachar[\scanverb{*}\metachar]\def\next{1}}%
+ \IfValueT{#2}{\@oarg{#2}\def\next{1}}%
+ \IfValueT{#3}{\@parg{#3}\def\next{1}}%
+ \IfValueT{#4}{\marg{#4}\def\next{1}}%
+ \IfValueT{#5}{\aarg{#5}\def\next{1}}%
+ \@ifnextchar\egroup{\endgroup}{%
+ \if1\next\@xa\arg@dc
+ \else % it's crucial that we look for verbatim braces \emph{after}
+ % we checked there were no \inhash4, otherwise there would
+ % be an error.
+ \def\next{%
+ \@ifnextif\xiilbrace{\@verbmargm}%
+ {% not active or other lbrace
+ \@ifnextif<{% then we look for angles
+ \ifnum\catcode`>=\active
+ \@xa\@verbaargact
+ \else\@xa\@verbaarga
+ \fi}%
+ {% and if not angles neither verbatim braces, then
+ \endgroup % if we have no more arguments to typeset, we
+ % close the group opened in lines \ref{queer.group} and \ref{queer.group2}.
+ \spifletter
+ }%
+ }%
+ }%
+ \@xa \next
+ \fi
+ }% of not egroup
+}% of |\arg@dc|
+
+\foone{\obeylines\@makeother\^^C}{%
+ \AtBeginDocument{%
+ \let\math@arg\arg %
+ \pdef\arg{% This is |\arg| for meta-arguments.
+ \ifmmode\math@arg %
+ % \chgs{200/03/04 v0.991 added rcognising of verbatim braces and angles}
+ \else\afterfi{%
+ \begingroup %
+ % \label{queer.group}
+ \ifdefined\@ifQueerEOL\@ifQueerEOL{%
+ \def^^M{\unskip\space}% in the ‘queer’ \ac{EOL}s scope we
+ % keep line end active in case we have
+ % \incmd\arg\nlpercent\arg{arg.} ending a~line: the next
+ % char peeper touches line end or, if the line end was $_5$,
+ % gobbles the space it turns into so the comment layer would
+ % ‘leak’ to the code layer.
+ }{}\fi %
+ \arg@dc}%
+ \fi}% of |\arg|,
+ }% of |\AtBeginDocument|,
+ %
+ % \stanza
+ % And this is arg-typesetting command for verbatim arguments.
+ \pdef\argv{%
+ \begingroup %
+ % \label{queer.group2}
+ \@makeother\^^C%
+ \pdef\arg@wrap##1{%
+ \narrativett{##1}%
+ }%
+ \ifdefined\@ifQueerEOL\@ifQueerEOL{%
+ \def^^M{\unskip\space}% in the ‘queer’ \ac{EOL}s scope we
+ % keep line end active… as above
+ }{}%
+ \fi % of |\ifdefined|
+ \arg@dc}%
+}% of |\foone|.
+
+
+\DeclareCommand\cat{Q{'"0123456789ABCDEF}{0}}{%
+ ${}_{\the\numexpr#1}\m@th$\spifletter
+}
+
+\pdef\CS{% \changes{v0.99n}{2008/08/30}{added}
+ \acro{CS}%
+ \@ifnextcat a{ }{}}% we put a~space if the next token is
+
+\pdef\CSs{\CS{}es\@ifnextcat a{ }{}}% for pluralis.
+\pdef\CSes{\CS{}es\@ifnextcat a{ }{}}% for pluralis.
+
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmmeta.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmmw.sty b/Master/texmf-dist/tex/latex/gmutils/gmmw.sty
new file mode 100644
index 00000000000..78adfffac76
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmmw.sty
@@ -0,0 +1,368 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmmw.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `mw')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmmw}
+ [2010/10/24 v0.993 improvements to the MWCLS classes (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+\RequirePackage{gmcommand}
+
+
+\AtBeginDocument{% because we don't know when exactly \pk{hyperref} is
+ % loaded and maybe after this package.
+ \@ifpackageloaded{hyperref}{\newcounter{NoNumSecs}%
+ \setcounter{NoNumSecs}{617}% to make |\ref|ing to an unnumbered section
+ % visible (and funny?).
+ \def\gmu@hyperrefstepcounter{\refstepcounter{NoNumSecs}}%
+ \pdef\gmu@targetheading#1{%
+ \hypertarget{#1}{#1}}}% end of then
+ {\def\gmu@hyperrefstepcounter{}%
+ \def\gmu@targetheading#1{#1}}% end of else
+}% of |\AtBeginDocument|
+
+\def\gmu@dontnumbersectionsoutofmainmatter{%
+ \if@mainmatter\else \HeadingNumberedfalse \fi}
+\def\gmu@clearpagesduetoopenright{%
+ \if@openright\cleardoublepage\else \clearpage\fi}
+
+\long\def\@ifnotmw#1#2{\gmu@ifundefined{mw@sectionxx}{#1}{#2}}
+
+\@ifnotmw{}{%
+\def\mw@sectionxx#1#2[#3]#4{%
+ \edef\mw@HeadingLevel{\csname #1@level\endcsname
+ \space}% space delimits level number!
+ \ifHeadingNumbered
+ \ifnum \mw@HeadingLevel>\c@secnumdepth \HeadingNumberedfalse \fi
+ % \nostanza line below is in |\gmu@ifundefined| to make it work in classes
+ % other than \pk{mwbk}\nostanza
+ \gmu@ifundefined{if@mainmatter}{}{\gmu@dontnumbersectionsoutofmainmatter}
+ \fi
+%% \ifHeadingNumbered
+%% \refstepcounter{#1}%
+%% \protected@edef\HeadingNumber{\csname the#1\endcsname\relax}%
+%% \else
+%% \let\HeadingNumber\@empty
+%% \fi
+ \def\HeadingRHeadText{#2}%
+ \def\HeadingTOCText{#3}%
+ \def\HeadingText{#4}%
+ \def\mw@HeadingType{#1}%
+ \if\mw@HeadingBreakBefore
+ \if@specialpage\else\thispagestyle{closing}\fi
+ \gmu@ifundefined{if@openright}{}{\gmu@clearpagesduetoopenright}%
+ \if\mw@HeadingBreakAfter
+ \thispagestyle{blank}\else
+ \thispagestyle{opening}\fi
+ \global\@topnum\z@
+ \fi% of |\if\mw@HeadingBreakBefore|
+%%
+ \ifHeadingNumbered
+ \refstepcounter{#1}%
+ \protected@edef\HeadingNumber{\csname the#1\endcsname\relax}%
+ \else
+ \let\HeadingNumber\@empty
+ \gmu@hyperrefstepcounter % we step an auxiliary counter to make a
+ % hyperref's label/target.
+ \fi% of |\ifHeadingNumbered|
+%%
+ \if\mw@HeadingRunIn
+ \mw@runinheading
+ \else
+ \if\mw@HeadingWholeWidth
+ \if@twocolumn
+ \if\mw@HeadingBreakAfter
+ \onecolumn
+ \mw@normalheading
+ \pagebreak\relax
+ \if@twoside
+ \null
+ \thispagestyle{blank}%
+ \newpage
+ \fi% of |\if@twoside|
+ \twocolumn
+ \else
+ \@topnewpage[\mw@normalheading]%
+ \fi% of |\if\mw@HeadingBreakAfter|
+ \else
+ \mw@normalheading
+ \if\mw@HeadingBreakAfter\pagebreak\relax\fi
+ \fi% of |\if@twocolumn|
+ \else
+ \mw@normalheading
+ \if\mw@HeadingBreakAfter\pagebreak\relax\fi
+ \fi% of |\if\mw@HeadingWholeWidth|
+ \fi% of |\if\mw@HeadingRunIn|
+ }
+
+
+\relaxen\SetSectionFormatting
+\newcommand*\SetSectionFormatting[5][\empty]{%
+ \ifx\empty#1\relax\else% empty (not |\empty|!) |#1| also launches |\else|.\HideDef
+ \def\mw@HeadingRunIn{10}\def\mw@HeadingBreakBefore{10}%
+ \def\mw@HeadingBreakAfter{10}\def\mw@HeadingWholeWidth{10}%
+ \gmu@ifempty{#1}{}{\mw@processflags#1,\relax}% If |#1| is omitted,
+ % the flags are left unchanged. If |#1| is given, even as [], the
+ % flags are first cleared and then processed again.
+ \fi
+ \gmu@ifundefined{#2}{\@namedef{#2}{\mw@section{#2}}}{}%
+ \mw@secdef{#2}{@preskip} {#3}{2 oblig.}%
+ \mw@secdef{#2}{@head} {#4}{3 oblig.}%
+ \mw@secdef{#2}{@postskip}{#5}{4 oblig.}%
+ \ifx\empty#1\relax
+ \mw@secundef{#2@flags}{1 (optional)}%
+ \else\mw@setflags{#2}% \ResumeDef
+ \fi}
+
+\def\mw@secdef#1#2#3#4{% ^^B
+ \gmu@ifempty{#3}
+ {\mw@secundef{#1#2}{#4}}
+ {\@namedef{#1#2}{#3}}}
+
+\def\mw@secundef#1#2{%
+ \gmu@ifundefined{#1}{%
+ \ClassError{mwcls/gm}{%
+ command \bslash#1 undefined \MessageBreak
+ after \bslash SetSectionFormatting!!!\MessageBreak}{%
+ Provide the #2 argument of \bslash SetSectionFormatting.}}{}}
+
+\def\addtoheading#1#2{%
+ \n@melet{gmu@addtoheading@resa}{#1@head}%
+ \edef\gmu@addtoheading@resa{\unexpanded{#2}\@xa\unexpanded{\gmu@addtoheading@resa}}%
+ \n@melet{#1@head}{gmu@addtoheading@resa}%
+}
+
+}% of |\@ifnotmw|'s else.
+
+
+\@ifnotmw{}{% We proceed only in \acro{MWCLS}.
+
+\def\@afterheading{%
+ \@nobreaktrue
+ \xdef\gmu@prevsec{\mw@HeadingType}% added now
+ \everypar{%
+ \grelaxen\gmu@prevsec% added now. All the rest is original \LaTeX.
+ \if@nobreak
+ \@nobreakfalse
+ \clubpenalty \@M
+ \if@afterindent \else
+ {\setbox\z@\lastbox}%
+ \fi
+ \else
+ \clubpenalty \@clubpenalty
+ \everypar{}%
+ \fi}}
+
+\def\gmu@checkaftersec{%
+ \gmu@ifundefined{gmu@prevsec}{}{%
+ \ifgmu@postsec% an additional switch that is true by default but
+ % may be turned into an \cs{ifdim} in special
+ % cases, see line \ref{gmu@postsec}.
+ {\@xa\mw@getflags\@xa{\gmu@prevsec}%
+ \glet\gmu@checkaftersec@resa\mw@HeadingBreakAfter}% \UnDef
+ \if\mw@HeadingBreakBefore\def\gmu@checkaftersec@resa{11}\fi% if the
+ % current heading inserts page break before itself, all the play
+ % with vskips is irrelevant.
+ \if\gmu@checkaftersec@resa\else
+ \penalty10000\relax
+ \skip\z@=\csname\gmu@prevsec @postskip\endcsname\relax
+ \skip\tw@=\csname\mw@HeadingType @preskip\endcsname\relax
+ \gmu@ifundefined{\mw@HeadingType @twoheadskip}{%
+ \ifdim\skip\z@>\skip\tw@
+ \vskip-\skip\z@% we strip off the post-skip of previous
+ % header if it's bigger than current pre-skip
+ \else
+ \vskip-\skip\tw@% we strip off the current pre-skip otherwise
+ \fi}{% But if the two-header-skip is defined, we put
+ % \emph{it}
+ \penalty10000
+ \vskip-\skip\z@
+ \penalty10000
+ \vskip-\skip\tw@
+ \penalty10000
+ \vskip\csname\mw@HeadingType @twoheadskip\endcsname
+ \relax}%
+ \penalty10000
+ \hrule height\z@\relax% to hide the last (un)skip before subsequent
+ % \incs{addvspace}s. \ilrr
+ \penalty10000
+ \fi
+ \fi
+ }% of |\gmu@ifundefined{gmu@prevsec}| `else'.
+}% of |\def\gmu@checkaftersec|.
+
+\def\ParanoidPostsec{% \label{gmu@postsec} this version of
+ % \inverb|\ifgmu@postsec| is intended for the special case of
+ % sections may contain no normal text, as while \pk{gmdoc}ing.
+ \def\ifgmu@postsec{% note this macro expands to an open \cs{if}.
+ \skip\z@=\csname\gmu@prevsec @postskip\endcsname\relax
+ \ifdim\lastskip=\skip\z@\relax% we play
+ % with the vskips only if the last skip is the previous
+ % heading's postskip (a~counter-example I~met while
+ % \pk{gmdoc}ing).
+ }}
+
+\let\ifgmu@postsec\iftrue
+
+\def\gmu@getaddvs#1\addvspace#2\gmu@getaddvs{%
+ \toks\z@={#1}%
+ \toks\tw@={#2}}
+
+\def\gmu@setheading#1{%
+ \@xa\gmu@getaddvs#1\gmu@getaddvs
+ \edef#1{%
+ \the\toks\z@\@nx\gmu@checkaftersec
+ \@nx\addvspace\the\toks\tw@}}
+
+\gmu@setheading\mw@normalheading
+\gmu@setheading\mw@runinheading
+
+\def\SetTwoheadSkip#1#2{\@namedef{#1@twoheadskip}{#2}}
+
+}% of |\@ifnotmw|'s else.
+
+
+\@ifnotmw{}{% We define this declaration only when in \pk{mwcls}.
+\DeclareCommand\WPheadings{T{\chapter}}{%
+ \SetSectionFormatting[breakbefore,wholewidth]
+ {part}{\z@\@plus1fill}{}{\z@\@plus3fill}%
+ %
+ \IfValueF{#1}{%
+ \gmu@ifundefined{chapter}{}{%
+ \SetSectionFormatting[breakbefore,wholewidth]
+ {chapter}
+ {66\p@}% |{67\p@}|% for Adventor/Schola 0,95.
+ {\FormatHangHeading{\LARGE}}
+ {27\p@\@plus0,2\p@\@minus1\p@}%
+ }%
+ }% of unless |#1|
+ %
+ \SetTwoheadSkip{section}{27\p@\@plus0,5\p@}%
+ \SetSectionFormatting{section}
+ {24\p@\@plus0,5\p@\@minus5\p@}% ^^A {24\p@\@plus5\p@\@minus2\p@}
+ {\FormatHangHeading {\Large}}
+ {10\p@\@plus0,5\p@}% ed.\ Krajewska of ``Wiedza Powszechna'', as
+ % we understand her, wants the skip between a~heading and text
+ % to be rigid.
+ %
+ \SetTwoheadSkip{subsection}{11\p@\@plus0,5\p@\@minus1\p@}%
+ \SetSectionFormatting{subsection}
+ {19\p@\@plus0,4\p@\@minus6\p@}
+ {\FormatHangHeading {\large}}% 12/14 pt
+ {6\p@\@plus0,3\p@}% after-skip 6\,pt due to p.12, not to squeeze
+ % the before-skip too much.
+ %
+ \SetTwoheadSkip{subsubsection}{10\p@\@plus1,75\p@\@minus1\p@}%
+ \SetSectionFormatting{subsubsection}
+ {10\p@\@plus0,2\p@\@minus1\p@}
+ {\FormatHangHeading {\normalsize}}
+ {3\p@\@plus0,1\p@}% those little skips should be smaller than
+ % you calculate out of a~geometric progression, because the
+ % interline skip enlarges them.
+ %
+ \SetSectionFormatting[runin]{paragraph}
+ {7\p@\@plus0,15\p@\@minus1\p@}
+ {\FormatRunInHeading{\normalsize}}
+ {2\p@}%
+ %
+ \SetSectionFormatting[runin]{subparagraph}
+ {4\p@\@plus1\p@\@minus0,5\p@}
+ {\FormatRunInHeading{\normalsize}}
+ {\z@}%
+}% of |\WPheadings|
+}% of |\@ifnotmw|
+
+\@ifnotmw{% we are not in \pk{mwcls} and want to
+ % handle \pk{mwcls}-like sectionings i.e., those written with two
+ % optionals.
+ \def\gmu@secini{gm@la}%
+ \Store@Macros{%
+ \partmark \chaptermark \sectionmark \subsectionmark
+ \subsubsectionmark \paragraphmark}%
+ % \Define\gmu@secxx
+ \def\gmu@secxx#1#2[#3]#4{%
+ \ifx\gmu@secstar\@empty
+ % \nostanza a~little trick to allow
+ % a~special version of the heading just to the running head.
+ \@namedef{#1mark}##1{% we redefine \cs{\<sec>mark} to gobble its
+ % argument and to launch the stored true marking command on the
+ % appropriate argument.
+ \storedcsname{#1mark}{#2}%
+ \Restore@MacroSt{#1mark}% after we've done what we
+ % wanted we restore original |\#1mark|.\ilrr
+ }%
+ \def\gmu@secstar{[#3]}% if |\gmu@secstar|
+ % is empty, which means the sectioning command was written
+ % starless, we pass the `true' sectioning command |#3| as the
+ % optional argument. Otherwise the sectioning command was written
+ % with star so the `true' s.c.\ takes no optional.
+ \fi
+ \@xa\@xa\csname\gmu@secini#1\endcsname
+ \gmu@secstar{#4}}%
+}{% we are in \pk{mwcls} and want to reverse MW's optionals order
+ % i.e., if there's just one optional, it should go both to toc and to
+ % running head.
+ \def\gmu@secini{gm@mw}%
+ %
+ \let\gmu@secmarkh\@gobble% in \pk{mwcls} there's no need to make
+ % tricks for special version to running headings.
+ % \Define\gmu@secxx
+ \def\gmu@secxx#1#2[#3]#4{%
+ \@xa\@xa\csname\gmu@secini#1\endcsname
+ \gmu@secstar[#2][#3]{#4}}%
+}
+
+\def\gmu@sec#1{\@dblarg{\gmu@secx{#1}}}
+\def\gmu@secx#1[#2]{%
+ \@ifnextchar[{\gmu@secxx{#1}{#2}}{\gmu@secxx{#1}{#2}[#2]}}% if
+
+\def\gmu@straightensec#1{% the parameter is for the command's name.
+ \gmu@ifundefined{#1}{}{% we don't change the ontological status of the
+ % command because someone may test it.
+ \n@melet{\gmu@secini#1}{#1}%
+ \@namedef{#1}{%
+ \gmu@ifstar{\def\gmu@secstar{*}\gmu@sec{#1}}{%
+ \def\gmu@secstar{}\gmu@sec{#1}}}}%
+}%
+
+\let\do\gmu@straightensec
+\do{part}\do{chapter}\do{section}\do{subsection}\do{subsubsection}
+\@ifnotmw{}{\do{paragraph}}% this `straightening' of
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmmw.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmnotonlypream.sty b/Master/texmf-dist/tex/latex/gmutils/gmnotonlypream.sty
new file mode 100644
index 00000000000..bb17a9e0eb3
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmnotonlypream.sty
@@ -0,0 +1,93 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmnotonlypream.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `notonlypream')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmnotonlypream}
+ [2010/10/24 v0.993 modification of the 'only preamble' clause (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+
+\RequirePackage{gmampulex}
+
+
+\newcommand\not@onlypreamble[1]{{%
+ \def\do##1{\ifx#1##1\else\@nx\do\@nx##1\fi}%
+ \xdef\@preamblecmds{\@preamblecmds}}}
+
+\not@onlypreamble\@preamblecmds
+\not@onlypreamble\@ifpackageloaded
+\not@onlypreamble\@ifclassloaded
+\not@onlypreamble\@ifl@aded
+\not@onlypreamble\@pkgextension
+
+\not@onlypreamble\@pushfilename
+\not@onlypreamble\@popfilename
+
+\not@onlypreamble\@currnamestack
+
+
+\def\gmu@notprerr{ can be used only in preamble (\on@line)}
+
+\AtBeginDocument{%
+ \def\do#1{\@nx\do\@nx#1}%
+ \edef\@preamblecmds{%
+ \def\@nx\do##1{%
+ \def##1{\@nx\gmno@NotprerrMessage##1}\@nx\@eha}}%
+ \@preamblecmds}
+
+\def\gmno@NotprerrMessage#1{%
+ \PackageError{gmutils/LaTeX}%
+ {\@nx\string#1 \@nx\gmu@notprerr}{}%
+}
+
+
+\def\gmu@nocite@ampulex{% we wrap the stuff in a~macro to hide an open
+ % \incs{if}. And not to make the begin-input hook too large.
+ % \label{ampulexset} the first optional argument is the
+ % parameters string and the second the argument for one-level
+ % expansion of \incs{nocite}. Both hash strings are doubled to pass
+ % the % first \incs{def}.
+ \ampulexdef\nocite[##1][##1]
+ \ifx
+ {\@onlypreamble\document}%
+ \iftrue}
+
+\AtBeginDocument{\gmu@nocite@ampulex}%
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmnotonlypream.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmparts.sty b/Master/texmf-dist/tex/latex/gmutils/gmparts.sty
new file mode 100644
index 00000000000..1133a9a23d5
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmparts.sty
@@ -0,0 +1,169 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmparts.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `parts')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmparts}
+ [2010/10/24 v0.993 modification of \string \include \space \string & in/excluding parts of main file (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+
+
+\RequirePackage{gmcommand}
+
+\def\gmu@getext#1.#2\@nil{%\UnDef
+ \def\gmu@filename{#1}%\UnDef
+ \def\gmu@fileext{#2}}
+
+\def\include#1{\relax
+ \ifnum\@auxout=\@partaux
+ \@latex@error{\string\include\space cannot be nested}\@eha
+ \else \@include#1 \fi}
+
+\def\@include#1 {%
+ \gmu@getext#1.\@nil
+ % \UnDef
+ \ifx\gmu@fileext\empty\def\gmu@fileext{tex}\fi
+ \clearpage
+ \if@filesw
+ \immediate\write\@mainaux{\string\@input{\gmu@filename.aux}}%
+ \fi
+ \@tempswatrue
+ \if@partsw
+ \@tempswafalse
+ \edef\reserved@b{#1}%
+ \@for\reserved@a:=\@partlist\do{%
+ \ifx\reserved@a\reserved@b\@tempswatrue\fi}%
+ \fi
+ \if@tempswa
+ \let\@auxout\@partaux
+ \if@filesw
+ \immediate\openout\@partaux \gmu@filename.aux
+ \immediate\write\@partaux{\relax}%
+ \fi
+ \@input@{\gmu@filename.\gmu@fileext}%
+ \inclasthook
+ \clearpage
+ \@writeckpt{\gmu@filename}%
+ \if@filesw
+ \immediate\closeout\@partaux
+ \fi
+ \else
+ \deadcycles\z@
+ \@nameuse{cp@\gmu@filename}%
+ \fi
+ \let\@auxout\@mainaux}
+
+\newcommand\whenonly[3]{%
+ \def\gmu@whonly{#1,}%
+ \ifx\gmu@whonly\@partlist\afterfi{#2}\else\afterfi{#3}\fi}
+
+\def\inclasthook{\thispagestyle{closing}}
+
+\def\filepart#1{\relax
+ \ifnum\@auxout=\@partaux
+ \@latex@error{\string\filepart\space cannot be nested}\@eha
+ \else\afterfi{\@filepart#1 }\fi}
+
+\def\@filepart#1 {%
+ \clearpage
+ \edef\gmu@filepartname{#1}% we'll use it later
+ \if@filesw
+ \immediate\write\@mainaux{\string\@input{#1.aux}}%
+ \fi
+ \@tempswatrue
+ \if@partsw
+ \@tempswafalse
+ \@for\gmu@filepart@resa:=\@partlist\do{%
+ \ifx\gmu@filepart@resa\gmu@filepartname\@tempswatrue\fi}%
+ \fi
+ \if@tempswa
+ \let\@auxout\@partaux
+ \if@filesw
+ \immediate\openout\@partaux #1.aux
+ \immediate\write\@partaux{\relax}%
+ \fi
+ \@xa\@firstoftwo
+ % \label{spart:iftrue}
+ \else
+ \deadcycles\z@
+ \@nameuse{cp@\gmu@filepartname}%
+ \let\@auxout\@mainaux
+ \@xa\@secondoftwo
+ \fi
+ {\iftrue}%
+ {\let\endfilepart\fi
+ \csname gm@skipped@#1\endcsname
+ \def\next{\Restore@MacroSt {endfilepart}%
+ \@ifnextchar\bgroup{\show\NextBgroup\@gobble}{}}%
+ \@xa\next\iffalse}%
+}
+
+\DeclareCommand\endfilepart{b}{% Note the argument is not used really. Maybe later we'll
+ % use it for checking of proper matching. Or maybe not.
+ \inclasthook
+ \clearpage
+ \@writeckpt{\gmu@filepartname}%
+ \if@filesw
+ \immediate\closeout\@partaux
+ \fi
+ \fi% this |\fi| closes |\Iftrue| put by line \ref{spart:iftrue}.
+ \let\@auxout\@mainaux
+}
+
+\Store@Macro\endfilepart
+
+\def\nofileparts{%
+ \let\filepart\@gobble
+ \DeclareCommand\endfilepart{b}{}%
+}
+
+
+\def\includecountfix{%
+ \def\@wckptelt##1{%
+ \immediate\write\@partaux{%
+ \providecounter{##1}% to
+ % provide the font counters defined
+ % in parts of the document.
+ \string\setcounter{##1}{\the\@nameuse{c@##1}}}}%
+}
+
+\pdef\providecounter#1{%
+ \unless\ifcsname c@#1\endcsname\newcounter{#1}\fi}
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmparts.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmrelsize.sty b/Master/texmf-dist/tex/latex/gmutils/gmrelsize.sty
new file mode 100644
index 00000000000..b32a63c38f4
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmrelsize.sty
@@ -0,0 +1,84 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmrelsize.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `relsize')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmrelsize}
+ [2010/04/09 v0.993 chosen macros from the relsize package and mine (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+\protected\def\relsize#1{%
+ \ifmmode \@nomath\relsize\else
+ \begingroup
+ \@tempcnta % assign number representing current font size
+ \ifx\@currsize\normalsize 4\else % funny order is to have most …
+ \ifx\@currsize\small 3\else % …likely sizes checked first
+ \ifx\@currsize\footnotesize 2\else
+ \ifx\@currsize\large 5\else
+ \ifx\@currsize\Large 6\else
+ \ifx\@currsize\LARGE 7\else
+ \ifx\@currsize\scriptsize 1\else
+ \ifx\@currsize\tiny 0\else
+ \ifx\@currsize\huge 8\else
+ \ifx\@currsize\Huge 9\else
+ 4\rs@unknown@warning % unknown state: |\normalsize| as starting point
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \advance\@tempcnta#1\relax
+ \ifnum\@tempcnta<\z@ \rs@size@warning{small}{\string\tiny}\@tempcnta\z@ \fi
+ \@xa\endgroup
+ \ifcase\@tempcnta % set new size based on altered number
+ \tiny \or \scriptsize \or \footnotesize \or \small \or \normalsize \or
+ \large \or \Large \or \LARGE \or \huge \or \Huge \else
+ \rs@size@warning{large}{\string\Huge}\Huge
+\fi\fi}% end of |\relsize|.
+
+\providecommand*\rs@size@warning[2]{\PackageWarning{gmutils (relsize)}{%
+ Size requested is too #1.\MessageBreak Using #2 instead}}
+
+\providecommand*\rs@unknown@warning{\PackageWarning{gmutils (relsize)}{Current font size
+ is unknown! (Why?!?)\MessageBreak Assuming \string\normalsize}}
+
+\DeclareRobustCommand*\larger[1][\@ne]{\relsize{+#1}}
+\DeclareRobustCommand*\smaller[1][\@ne]{\relsize{-#1}}
+\DeclareRobustCommand*\textlarger[2][\@ne]{{\relsize{+#1}#2}}
+\DeclareRobustCommand*\textsmaller[2][\@ne]{{\relsize{-#1}#2}}
+\protected\def\largerr{\relsize{+2}}
+\protected\def\smallerr{\relsize{-2}}
+
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmrelsize.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmtypos.sty b/Master/texmf-dist/tex/latex/gmutils/gmtypos.sty
new file mode 100644
index 00000000000..3992e1af62b
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmtypos.sty
@@ -0,0 +1,2027 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmtypos.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `typos')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmtypos}
+ [2010/10/24 v0.993 a collection of macros, mosltly typographical (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+
+\RequirePackage{gmcommand, gmnotonlypream}
+
+\unless\ifcsname ifgmu@quiet\endcsname
+ \@xa\newif\csname ifgmu@quiet\endcsname
+\fi
+
+\DeclareOption{quiet}{\gmu@quiettrue}
+
+\ProcessOptions
+
+
+
+\AtBeginDocument{%
+ \@ifpackageloaded{fontspec}{%
+ \pdef\udigits{%
+ \addfontfeature{Numbers=Uppercase}}%
+ }{%
+ \emptify\udigits}}
+
+
+\def\Xedekfracc{\gmu@ifstar\gmu@xedekfraccstar\gmu@xedekfraccplain}
+ % (plain) The starless version turns the font feature |frac| on.
+ %
+ % (\*) But nor my modification of Minion Pro neither \TeX\ Gyre
+ % Pagella doesn't feature the
+ % |frac| font feature properly so, with the starred version of the
+ % declaration we use the characters from the font where available
+ % (see the |\@namedef|s below) and the |numr| and |dnom| features
+ % with the fractional slash otherwise (via |\gmu@dekfracc|).
+ %
+ % (\*\*) But Latin Modern Sans Serif Quotation doesn't support the
+ % numerator and denominator positions so we provide the double
+ % star version for it, which takes the char from font if it exist
+ % and typesets with lowers and kerns otherwise.
+
+\def\gmu@xedekfraccstar{%
+ \def\gmu@xefraccdef##1##2{%
+ \iffontchar\font ##2
+ \@namedef{gmu@xefracc##1}{\char##2 }%
+ \else
+ \n@melet{gmu@xefracc##1}{relax}%
+ \fi}%
+ %
+ \def\gmu@dekfracc##1/##2{%
+ {\addfontfeature{VerticalPosition=Numerator}##1}\gmu@numeratorkern
+ \char"2044 \gmu@denominatorkern
+ {\addfontfeature{VerticalPosition=Denominator}##2}}%
+ %
+ % We define the fractional macros. Since Adobe Minion Pro doesn't
+ % contain $\frac n5$ nor $\frac n6$, we don't provide them here.
+ \gmu@xefraccdef{1/4}{"BC}%
+ \gmu@xefraccdef{1/2}{"BD}%
+ \gmu@xefraccdef{3/4}{"BE}%
+ \gmu@xefraccdef{1/3}{"2153}%
+ \gmu@xefraccdef{2/3}{"2154}%
+ \gmu@xefraccdef{1/5}{"2155}%
+ \gmu@xefraccdef{2/5}{"2156}%
+ \gmu@xefraccdef{3/5}{"2157}%
+ \gmu@xefraccdef{4/5}{"2158}%
+ \gmu@xefraccdef{1/6}{"2159}%
+ \gmu@xefraccdef{5/6}{"215A}%
+ \gmu@xefraccdef{1/8}{"215B}%
+ \gmu@xefraccdef{3/8}{"215C}%
+ \gmu@xefraccdef{5/8}{"215D}%
+ \gmu@xefraccdef{7/8}{"215E}%
+ \pdef\dekfracc@args##1/##2{%
+ \gmu@ifundefined{gmu@xefracc\detokenize{##1/##2}}{%
+ \gmu@dekfracc{##1}/{##2}}{%
+ \csname gmu@xefracc\detokenize{##1/##2}\endcsname}%
+ \if@gmu@mmhbox\egroup\fi
+ }% of |\dekfracc@args|.
+ \gmu@ifstar{\let\gmu@dekfracc\gmu@dekfraccsimple}{}%
+ }
+
+\def\gmu@xedekfraccplain{% `else' of the main |\gmu@ifstar|
+ \pdef\dekfracc@args##1/##2{%
+ \ifmmode\hbox\fi{%
+ \addfontfeature{Fractions=On}%
+ ##1/##2}%
+ \if@gmu@mmhbox\egroup\fi
+ }% of |\dekfracc@args|
+ }
+
+\newif\if@gmu@mmhbox% we'll use this switch for |\dekfracc| and also
+
+\pdef\dekfracc{% \changes{v0.94}{2008/09/14}{made to work also in math
+ % mode, even with math-active digits}
+ \ifmmode\hbox\bgroup\@gmu@mmhboxtrue\fi
+ \dekfracc@args}
+
+\def\gmu@numeratorkern{\kern-.055em\relax}
+\def\gmu@denominatorkern{\kern-.05em\relax}
+
+
+
+\pdef\textsuperscript@@#1{%
+ \@textsuperscript{\selectfont#1}}%
+\def\@textsuperscript#1{%
+ {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
+
+\let\textsuperscript@@\textsuperscript
+
+\def\GMtextsuperscript{%
+ \@ifXeTeX{%
+ \DeclareCommand\textsuperscript{sm}{%
+ \IfValueTF{##1}{\textsuperscript@@{##2}}%
+ {%
+ \begingroup
+ \addfontfeature{VerticalPosition=Numerator}##2%
+ \endgroup}}%
+ }{\truetextsuperscript}}
+
+\def\truetextsuperscript{%
+ \let\textsuperscript\textsuperscript@@
+}
+
+
+
+\def\gmu@getfontstring{%
+ \xdef\gmu@fontstring{%
+ \gmu@fontstring@}}
+
+\def\gmu@fontstring@{%
+ \@xa\@xa\@xa\gmu@fontstring@@\@xa\meaning\the\font\@nil}
+
+\def\gmu@fontstring@@#1"#2"#3\@nil{"#2"}
+
+\def\gmu@getfontscale#1Scale#2=#3,{%
+ \ifx\gmu@getfontscale#3\else
+ \def\gmu@tempa{MatchLowercase}%
+ \def\gmu@tempb{#3}%
+ \ifx\gmu@tempa\gmu@tempb
+ \gmu@calc@scale{5}%
+ \@xa\@firstoftwo
+ \else
+ \def\gmu@tempa{MatchUppercase}%
+ \ifx\gmu@tempa\gmu@tempb
+ \gmu@calc@scale{8}%
+ \afterfifi\@firstoftwo
+ \else\afterfifi\@secondoftwo
+ \fi
+ \fi
+ {\xdef\gmu@fontscalebr{[\gmu@fontscale] }}%
+ {\xdef\gmu@fontscalebr{[#3] }}%
+ \afterfi\gmu@getfontscale
+ \fi
+}
+
+\def\gmu@getfontdata#1{%
+ \global\emptify\gmu@fontscalebr
+ \begingroup
+ #1%
+ \@xa\@xa\@xa\gmu@getfontscale
+ \csname zf@family@options\f@family\endcsname
+ ,Scale=\gmu@getfontscale,%
+ \gmu@getfontstring
+ \xdef\gmu@theskewchar{\the\skewchar\font}%
+ \endgroup}
+
+\def\gmu@stripchar#1"{"}
+
+\DeclareCommand\gmath@getfamnum{C{\gmath@fam}}{%
+ \edef\gmath@famnum{\@xa\gmu@stripchar\meaning#1}%
+}
+
+
+\DeclareCommand\gmathFams{o % the name of math version
+ C{\NoValue} % ‘rescue’ font. Will be accessible via
+ % \inverb|\symgmathRoman⁄<version>| (math family) and
+ % \inverb|\gmath@fontt⁄<version>| (font).
+}{%
+ \IfValueT{#1}{%
+ \DeclareMathVersion{#1}% this sets the defaults so no need to
+ % define them explicitly
+ }% of if |#1| given
+ %
+ \gmu@getfontdata{\rmfamily\itshape}%
+ %
+ \edef\gmu@tempa{%
+ \IfValueTF{#1}{\@nx\SetSymbolFont{letters}{#1}}%
+ {\@nx\DeclareSymbolFont{letters}}%
+ {\encodingdefault}{gmathit\PutIfValue{#1}}{m}{it}%
+ \IfValueT{#1}{%
+ \@nx\DeclareSymbolFont{letters#1}%
+ {\encodingdefault}{gmathit\PutIfValue{#1}}{m}{it}%
+ }%
+ \@nx\DeclareFontFamily{\encodingdefault}{gmathit\PutIfValue{#1}}{%
+ \skewchar\font\gmu@theskewchar\space}%
+ \@nx\DeclareFontShape{\encodingdefault}{gmathit\PutIfValue{#1}}{m}{it}{%
+ <-> \gmu@fontscalebr \gmu@fontstring}{}%
+ \IfValueT{#1}{%
+ \@nx\SetMathAlphabet\@nx\mathit{#1}{\encodingdefault}{gmathit#1}{m}{it}}%
+ }\gmu@tempa
+ %
+ \IfValueT{#2}{%
+ \gmu@getfontdata{#2\gmu@ifstored{\upshape}{\storedcsname{upshape}}{\upshape}}%
+ \edef\gmu@tempa{%
+ \@nx\DeclareSymbolFont{gmathRoman\PutIfValue{#1}}%
+ {\encodingdefault}{gmathRm\PutIfValue{#1}}{m}{n}%
+ \@nx\DeclareFontFamily{\encodingdefault}{gmathRm\PutIfValue{#1}}{%
+ \skewchar\font\gmu@theskewchar\space}%
+ \@nx\DeclareFontShape{\encodingdefault}{gmathRm\PutIfValue{#1}}{m}{n}{%
+ <-> \gmu@fontscalebr \gmu@fontstring}{}%
+ }\gmu@tempa
+ \@xa\font\csname gmath@fontt\PutIfValue{#1}\endcsname
+ =\gmu@fontstring\relax
+ % \stanza
+ \gmu@getfontdata{#2\gmu@ifstored{\itshape}{\storedcsname{itshape}}{\itshape}}%
+ \edef\gmu@tempa{%
+ \@nx\DeclareSymbolFont{gmathItalic\PutIfValue{#1}}%
+ {\encodingdefault}{gmathIt\PutIfValue{#1}}{m}{n}%
+ \@nx\DeclareFontFamily{\encodingdefault}{gmathIt\PutIfValue{#1}}{%
+ \skewchar\font\gmu@theskewchar\space}%
+ \@nx\DeclareFontShape{\encodingdefault}{gmathIt\PutIfValue{#1}}{m}{n}{%
+ <-> \gmu@fontscalebr \gmu@fontstring}{}%
+ }\gmu@tempa
+ }% of if |#2| given
+ % \stanza
+ \gmu@getfontdata{\rmfamily\upshape}%
+ \edef\gmu@tempa{%
+ \IfValueTF{#1}{\@nx\SetSymbolFont{gmathroman}{#1}}%
+ {\@nx\DeclareSymbolFont{gmathroman}}%
+ {\encodingdefault}{gmathrm\PutIfValue{#1}}{m}{n}%
+ \@nx\DeclareFontFamily{\encodingdefault}{gmathrm\PutIfValue{#1}}{%
+ \skewchar\font\gmu@theskewchar\space}%
+ \@nx\DeclareFontShape{\encodingdefault}{gmathrm\PutIfValue{#1}}{m}{n}{%
+ <-> \gmu@fontscalebr \gmu@fontstring}{}%
+ \IfValueT{#1}{%
+ \@nx\SetMathAlphabet\@nx\mathrm{#1}{\encodingdefault}{gmathrm#1}{m}{n}}%
+ }\gmu@tempa
+ \@xa\font\csname gmath@font\PutIfValue{#1}\endcsname
+ =\gmu@fontstring\relax
+ \gmathfamshook
+}
+
+\emptify\gmathfamshook
+
+\DeclareCommand\gmathbase{oC{\NoValue}}{%
+ \gmathFams[#1](#2)%
+ \DeclareCommand\gmath@do{%
+ m % (1) the character or \CS\ to be declared,
+ o % (2) the Unicode to be assigned,
+ m % (3) math type (\CS like \cs{mathord} etc.)
+ C{\gmath@fam} % font family
+ }{%\
+ %
+ \gmath@getfamnum(##4)%
+ \IfValueTF{##2}{%
+ \edef\gmu@tempa{%
+ = \mathchar@type##3\space
+ \gmath@famnum\space
+ "##2\relax}%
+ \if\relax\@nx##1%
+ \gmu@ifstored{##1}{}{\Store@Macro##1}%
+ \edef\gmu@tempa{%
+ \XeTeXmathchardef \@nx##1\gmu@tempa}%
+ \else
+ \edef\gmu@tempa{%
+ \XeTeXmathcode `##1 \gmu@tempa}
+ \fi%
+ }%
+ {% no value of |##2|
+ \edef\gmu@tempa{%
+ \XeTeXmathcode `##1 =
+ \mathchar@type##3\space
+ \gmath@famnum\space
+ `##1\relax}%
+ }%
+ \gmu@tempa
+ }% of \incs{gmath@do}
+ %
+ \DeclareCommand\gmath@doif{%
+ m % (1) the Unicode hex of char enquired,
+ m % (2) the char or \CS\ to be declared,
+ m % (3) math type \CS (\cs{mathord} etc.),
+ o % (4) second-choice Unicode (taken if first-choice is absent),
+ o % (5) third-choice Unicode (as above if second-choice is absent from font).
+ B{\gmath@fam} % (6) never used in this package. Why?
+ C{\NoValue}
+ }{%
+ \gmu@storeifnotyet{##2}%
+ \@xa\let\@xa\gmath@ft\csname
+ gmath@font%
+ \ifx\gmath@fam##6\else t\fi
+ \gmath@version
+ \endcsname
+ \iffontchar\gmath@ft"##1 \gmath@do##2[##1]##3(##6)%
+ \else
+ \IfValueTF{##4}{%
+ \iffontchar\gmath@ft"##4 \gmath@do##2[##4]##3(##6)%
+ \else
+ \IfValueTF{##5}{%
+ \iffontchar\gmath@ft"##5 \gmath@do##2[##5]##3(##6)%
+ \else
+ \gmath@restore{##1}{##2}{##3}{##4}{##5}{##7}%
+ \fi}%
+ {\gmath@restore{##1}{##2}{##3}{##4}{##5}{##7}}%
+ \fi}%
+ {\gmath@restore{##1}{##2}{##3}{##4}{##5}{##7}}%
+ \fi
+ }% of |\gmath@doif|
+ % In the command above we try to define math char or a~\CS in the
+ % family given as |##6|. If there're no respective chars, we try
+ % the same with the family given (as a~word) in |##7|.
+ \def\gmath@restore##1##2##3##4##5##6{%
+ \IfValueT{##6}%
+ {\ifcsname ##6\endcsname
+ \edef\gmu@tempa{%
+ \unexpanded{\gmath@doif{##1}{##2}{##3}[##4][##5]}%
+ {\@xanxcs{##6}}\relax
+ }\gmu@tempa
+ \@xa\@gobbletwo % if family |##6| is defined, we gobble the
+ % other branch
+ \fi
+ }%
+ \firstofone
+ {\if\relax\@nx##2%
+ \Restore@Macro##2%
+ \fi
+ }%
+ }%
+ %
+\iffalse % doesn't work in a~non-math font.
+ \DeclareCommand\gmath@delc{mo}{%\
+ % \begin{enumargs*}
+ % \mand the char or \CS\ to be declared,
+ % \opt the Unicode (if not the same as the char).
+ % \end{enumargs*}
+ %
+ \gmath@getfamnum
+ \IfValueTF{##2}{%
+ \edef\gmu@tempa{%
+ = \gmath@famnum\space "##2\relax}%
+ \edef\gmu@tempa{%
+ \XeTeXdelcode `##1 \gmu@tempa}
+ }%
+ {%
+ \edef\gmu@tempa{%
+ \XeTeXdelcode `##1 =
+ \gmath@famnum\space
+ `##1\relax}%
+ }%
+ \gmu@tempa
+ }% of \incs{gmath@delc}
+ %
+ \def\gmath@delcif##1##2{%\
+ % \begin{enumargs*}
+ % \mand the Unicode enquired,
+ % \item the char to be delcode-declared
+ % \end{enumargs*}
+ %
+ \iffontchar\gmath@font"##1 \gmath@delc##2[##1]\fi}
+\fi% of iffalse
+ %
+ \def\gmath@delimif##1##2##3{%\
+ % \begin{enumargs*}
+ % \item the Unicode enquired,
+ % \item the \CS\ defined as \cs{XeTeXdelimiter},
+ % \item the math type \CS\ (probably \incs{mathopen} or
+ % \incs{mathclose}).
+ % \end{enumargs*}
+ \iffontchar\gmath@font"##1
+ \gmath@getfamnum
+ \protected\edef##2{\@nx\ensuremath{%
+ \XeTeXdelimiter \mathchar@type##3\space
+ \gmath@famnum\space "##1\relax}}%
+ \fi}% of \cs{gmath@delimif}.
+ %
+ \pdef\rmopname##1##2##3{%
+ \mathop {##1\kern \z@ \mathrm{##3}}\csname n##2limits@\endcsname
+ }%
+ %
+ \DeclareCommand\gmu@dogmathbase{oC{\NoValue}}{%
+ \Restore@Macro\mathchar@type%
+ %
+ \IfValueT{##1}{\mathversion{##1}}%
+ %
+ \edef\gmath@version{\PutIfValue{##1}}%
+ %
+ \@xa\let\@xa\gmath@fam\csname symgmathroman%
+ \endcsname
+ \edef\gmath@famm{symgmathRoman\gmath@version}% as you see, this is
+ % not a~font family (number) but a~macro containing the name: of
+ % the secondary (‘rescue’) family.
+ %
+ \typeout{@@@ gmutils.sty: taking some math chars from the font^^J \gmu@fontstring@}%
+ \gmath@do+\mathbin
+ \gmath@doif{2212}-\mathbin[2013](\gmath@famm)% minus sign if present or else en dash
+ \gmath@do=\mathrel
+ \gmath@do0\mathord
+ \gmath@do1\mathord
+ \gmath@do2\mathord
+ \gmath@do3\mathord
+ \gmath@do4\mathord
+ \gmath@do5\mathord
+ \gmath@do6\mathord
+ \gmath@do7\mathord
+ \gmath@do8\mathord
+ \gmath@do9\mathord
+ %%
+ \gmath@doif{2264}\le\mathrel(\gmath@famm)%
+ \let\leq\le
+ \let\leeng\le
+ \gmath@doif{2265}\ge\mathrel(\gmath@famm)%
+ \let\geq\ge
+ \let\geeng\ge
+ \gmath@doif{2A7D}\xleq\mathrel(\gmath@famm)%
+ \gmath@doif{2A7E}\xgeq\mathrel(\gmath@famm)%
+ \@ifpackageloaded{polski}{%
+ \ifdefined\xleq
+ \gmu@storeifnotyet\leq
+ \let\leq=\xleq
+ \let\le=\leq
+ \fi
+ \ifdefined\xgeq
+ \gmu@storeifnotyet\geq
+ \let\geq=\xgeq
+ \let\ge=\geq
+ \fi}{}%
+ %
+ \gmath@do.\mathpunct
+ \gmath@do,\mathpunct
+ \gmath@do;\mathpunct
+ \gmath@do…\mathpunct
+ \gmath@do(\mathopen
+ \gmath@do)\mathclose
+ \gmath@do[\mathopen
+ \gmath@do]\mathclose
+ %
+ \gmath@doif{00D7}×\mathbin (\gmath@famm)%
+ \gmath@do:\mathrel
+ \gmath@doif{00B7}·\mathbin(\gmath@famm)%
+ \gmath@doif{22C6}*\mathbin(\gmath@famm)% % low star
+ \gmath@doif{2300}\varnothing\mathord(\gmath@famm)%
+ \gmath@doif{221E}\infty\mathord(\gmath@famm)%
+ \gmath@doif{2248}\approx\mathrel(\gmath@famm)%
+ \gmath@doif{2260}\neq\mathrel(\gmath@famm)%
+ \let\ne\neq
+ \gmath@doif{00AC}\neg\mathbin(\gmath@famm)%
+ \gmath@doif{00AC}\nego\mathord(\gmath@famm)%
+ \gmath@do/\mathop
+ \gmath@do<\mathrel
+ \gmath@do>\mathrel
+ \gmath@doif{2329}\langle\mathopen(\gmath@famm)%
+ \gmath@doif{232A}\rangle\mathclose(\gmath@famm)%
+ \gmath@doif{2202}\partial\mathord(\gmath@famm)%
+ \gmath@doif{00B1}\pm\mathbin(\gmath@famm)%
+ \gmath@doif{007E}\sim\mathrel(\gmath@famm)%
+ \gmath@doif{2190}\leftarrow\mathrel(\gmath@famm)%
+ \gmath@doif{2192}\rightarrow\mathrel(\gmath@famm)%
+ \gmath@doif{2194}\leftrightarrow\mathrel(\gmath@famm)%% if not present,
+ % \incs{gmathfurther} will take care
+ % of it if left and right arrows are present.
+ \gmath@doif{2191}\uparrow\mathrel(\gmath@famm)%% it should be a~delimiter
+ % (declared with \incs{gmath@delimif}) % but in a~non-math
+ % font the delimiters don't work (2008/11/19) and I~don't think
+ % I'll ever need up- and down- arrows as delimiters.
+ \gmath@doif{2193}\downarrow\mathrel(\gmath@famm)%
+ %
+ \gmath@doif{2208}\in\mathrel[03F5][0454](\gmath@famm)%%
+ % As a~fan of modal logics I~allow redefinition of \incs{lozenge}
+ % and \incs{square} iff both are in the font. I~don't accept
+ % the ‘ballot box’ U+2610.
+ \if\iffontchar\gmath@font"25CA 0\else 1\fi
+ \iffontchar\gmath@font"25FB 0\else\iffontchar\gmath@font"25A1 0\else 2\fi\fi
+ \gmath@do\lozenge[25CA]\mathord
+ \gmath@doif{25FB}\square\mathord[25A1](\gmath@famm)%% ‘medium white square (modal
+ % operator)’ of just ‘white square’.
+ \fi
+ \gmath@doif{EB08}\bigcircle\mathbin(\gmath@famm)%
+ \gmath@doif{2227}\wedge\mathbin(\gmath@famm)%
+ \gmath@doif{2228}\vee\mathbin(\gmath@famm)%
+ %
+ \gmath@doif{0393}\Gamma\mathalpha(\gmath@famm)%
+ \gmath@doif{0394}\Delta\mathalpha(\gmath@famm)%
+ \gmath@doif{0398}\Theta\mathalpha(\gmath@famm)%
+ \gmath@doif{039B}\Lambda\mathalpha(\gmath@famm)%
+ \gmath@doif{039E}\Xi\mathalpha(\gmath@famm)%
+ \gmath@doif{03A3}\Sigma\mathalpha(\gmath@famm)%
+ \gmath@doif{03A5}\Upsilon\mathalpha(\gmath@famm)%
+ \gmath@doif{03А6}\Phi\mathalpha(\gmath@famm)%
+ \gmath@doif{03A8}\Psi\mathalpha(\gmath@famm)%
+ \gmath@doif{03A9}\Omega\mathalpha(\gmath@famm)%
+ %
+ \@xa\let\@xa\gmath@fam\csname symletters\gmath@version%
+ \endcsname
+ \edef\gmath@famm{symgmathItalic\gmath@version}%
+ %
+ \gmath@doif{03B1}\alpha\mathalpha(\gmath@famm)%
+ \gmath@doif{03B2}\beta\mathalpha(\gmath@famm)%
+ \gmath@doif{03B3}\gamma\mathalpha(\gmath@famm)%
+ \gmath@doif{03B4}\delta\mathalpha(\gmath@famm)%
+ \gmath@doif{03F5}\epsilon\mathalpha(\gmath@famm)%
+ \gmath@doif{03B5}\varepsilon\mathalpha(\gmath@famm)%
+ \gmath@doif{03B6}\zeta\mathalpha(\gmath@famm)%
+ \gmath@doif{03B7}\eta\mathalpha(\gmath@famm)%
+ \gmath@doif{03B8}\theta\mathalpha(\gmath@famm)%
+ \gmath@doif{03D1}\vartheta\mathalpha(\gmath@famm)%
+ \gmath@doif{03B9}\iota\mathalpha(\gmath@famm)%
+ \gmath@doif{03BA}\kappa\mathalpha(\gmath@famm)%
+ \gmath@doif{03BB}\lambda\mathalpha(\gmath@famm)%
+ \gmath@doif{03BC}\mu\mathalpha(\gmath@famm)%
+ \gmath@doif{03BD}\nu\mathalpha(\gmath@famm)%
+ \gmath@doif{03BE}\xi\mathalpha(\gmath@famm)%
+ \gmath@doif{03C0}\pi\mathalpha(\gmath@famm)%
+ \gmath@doif{03A0}\Pi\mathalpha(\gmath@famm)%
+ \gmath@doif{03C1}\rho\mathalpha(\gmath@famm)%
+ \gmath@doif{03C3}\sigma\mathalpha(\gmath@famm)%
+ \gmath@doif{03DA}\varsigma\mathalpha(\gmath@famm)%% 03C2?
+ \gmath@doif{03C4}\tau\mathalpha(\gmath@famm)%
+ \gmath@doif{03C5}\upsilon\mathalpha(\gmath@famm)%
+ \gmath@doif{03D5}\phi\mathalpha(\gmath@famm)%
+ \gmath@doif{03C7}\chi\mathalpha(\gmath@famm)%
+ \gmath@doif{03C8}\psi\mathalpha(\gmath@famm)%
+ \gmath@doif{03C9}\omega\mathalpha(\gmath@famm)%
+ %
+ \if 1 1%
+ \iffontchar\gmath@font"221A
+ \fontdimen61\gmath@font=1pt
+ \edef\sqrtsign{%
+ \XeTeXradical \@xa\gmu@stripchar\meaning\symgmathroman\space "221A\relax}%
+ \fi
+ \fi% of if 1 1.
+ \def\max{\rmopname \relax m{max}}%
+ \def\min{\rmopname \relax m{min}}%
+ \def\lim{\rmopname \relax m{lim}}%
+ \def\sin{\rmopname \relax o{sin}}%
+ \def\cos{\rmopname \relax o{cos}}%
+ \def\tg{\rmopname \relax o{tg}}%
+ \def\ctg{\rmopname \relax o{ctg}}%
+ \def\tan{\rmopname \relax o{tan}}%
+ \def\ctan{\rmopname \relax o{ctan}}%
+ }% of |\gmu@dogmathbase|
+ \AtBeginDocument{\gmu@dogmathbase[#1](#2)%
+ \let\gmathbase\gmu@dogmathbase
+ }% of atbd
+ \not@onlypreamble\gmathbase
+}% of \cs{gmathbase}
+
+
+\@onlypreamble\gmathbase
+
+\pdef\gmathfurther{% \HideDef
+ % \changes{v0.94}{2008/10/4}{removed definition of
+ % \cs{}\<letter>s and \cs{}\<digit>s}
+ % \changes{v0.96}{2008/11/7}{Greek letters completed. Wrapped with
+ % \cs{addtotoks} to allow using in any order with \cs{garamath}
+ % and others}
+ %
+ \def\do##1##2##3{\gmu@storeifnotyet##1%
+ \def##1{%
+ \mathop{\mathchoice{\hbox{%
+ \rm
+ \edef\gma@tempa{\the\fontdimen8\font}%
+ \larger[3]%
+ \lower\dimexpr(\fontdimen8\font-\gma@tempa)/2 %
+ \hbox{##2}}}{\hbox{%
+ \rm
+ \edef\gma@tempa{\the\fontdimen8\font}%
+ \larger[2]%
+ \lower\dimexpr(\fontdimen8\font-\gma@tempa)/2 %
+ \hbox{##2}}}%
+ {\mathrm{##2}}{\mathrm{##2}}}##3}}%
+ \iffontchar\gmath@font"2211 \do\sum{\char"2211}{}\fi%
+ \do\forall{\gma@quantifierhook \rotatebox[origin=c]{180}{A}%
+ \gmu@forallkerning
+ }{\nolimits}%
+ \def\gmu@forallkerning{\setbox0=\hbox{A}\setbox2=\hbox{\scriptsize x}%
+ \kern\dimexpr\ht2/3*2 -\wd0/2\relax}% to be able to redefine it
+ % when the big quantifier is Bauhaus-like.
+ \do\exists{\rotatebox[origin=c]{180}{\gma@quantifierhook E}}\nolimits%
+ %
+ \def\do##1##2##3{\gmu@storeifnotyet##1%
+ \def##1{##3{%
+ \mathchoice{\hbox{\rm##2}}{\hbox{\rm##2}}%
+ {\hbox{\rm\scriptsize##2}}{\hbox{\rm\tiny##2}}}}}%
+ %
+ \unless\iffontchar\gmath@font"2227
+ \do\vee{\rotatebox[origin=c]{90}{<}}\mathbin%
+ \fi
+ \unless\iffontchar\gmath@font"2228
+ \do\wedge{\rotatebox[origin=c]{-90}{<}}\mathbin
+ \fi
+ %
+ \unless\iffontchar\gmath@font"2194
+ \if\iffontchar\gmath@font"2190 0\else1\fi
+ \iffontchar\gmath@font"2192 0\else2\fi
+ \do\leftrightarrow{\char"2190\kern-0,1em \char"2192}\mathrel
+ \fi\fi
+ %
+ \def\do##1##2##3{\gmu@storeifnotyet##1%
+ \def##1####1{##2{\hbox{%
+ \rm
+ \setbox0=\hbox{####1}%
+ \edef\gma@tempa{\the\ht0}%
+ \edef\gma@tempb{\the\dp0}%
+ ##3%
+ \setbox0=\hbox{####1}%
+ \lower\dimexpr(\ht0 + \dp0)/2-\dp0 -((\gma@tempa+\gma@tempb)/2-\gma@tempb) %
+ \box0}}}}%
+ \do\bigl\mathopen\larger
+ \do\bigr\mathclose\larger
+ \do\Bigl\mathopen\largerr
+ \do\Bigr\mathclose\largerr
+ \do\biggl\mathopen{\larger[3]}%
+ \do\biggr\mathclose{\larger[3]}%
+ \do\Biggl\mathopen{\larger[4]}%
+ \do\Biggr\mathclose{\larger[4]}%
+ %
+ %
+ \addtotoks\everymath{% \changes{v0.96}{2008/11/20}{the
+ % \cs{everymath}'s left brace moved here:
+ % earlier all the stuff was put into \cs{everymath}}
+ \def\do##1##2{\gmu@storeifnotyet##1%
+ \def##1{\ifmmode##2{\mathchoice
+ {\hbox{\rm\char`##1}}{\hbox{\rm\char`##1}}%
+ {\hbox{\rm\scriptsize\char`##1}}{\hbox{\rm\tiny\char`##1}}}%
+ \else\char`##1\fi}}%
+ \do\{\mathopen
+ \do\}\mathclose
+ %
+ \def\={\mathbin{=}}%
+ \def\neqb{\mathbin{\neq}}%
+ \let\neb\neqb
+ \def\do##1{\gmu@storeifnotyet##1%
+ \edef\gma@tempa{%
+ \def\@xanxcs{\@xa\gobble\string##1r}{%
+ \@nx\mathrel{\@nx##1}}}%
+ \gma@tempa}%
+ \do\vee \do\wedge \do\neg
+ \def\fakern{\mkern-3mu}%
+ \thickmuskip=8mu plus 4mu\relax
+ %
+ \gma@gmathhook
+ }% of |\everymath|.
+ \everydisplay\everymath
+ \ifdefined\Url
+ \ampulexdef\Url{\let\do}\@makeother
+ {\everymath{}\let\do\@makeother}% I~don't know why but the
+ % \pk{url} package's \incs{url} typesets the argument inside
+ % a~math which caused digits not to be typewriter but Roman and
+ % lowercase.
+ \fi% of |\ifdefined\Url|.
+}% of |\def\gmathfurther|. \ResumeDef
+
+\Store@Macro\mathchar@type
+
+\DeclareCommand\gmath{oC{\NoValue}}{%
+ \gmathbase[#1](#2)%
+ \gmathfurther
+ \IfValueT{#1}{\csname gmathhook#1\endcsname}% this allows adding
+ % version-specific stuff (I~first used this for Fell fonts rescued
+ % with Garamond Premier)
+}
+
+\pdef\gmathscripts{% \changes{v0.96}{2008/11/11}{added}
+ \addtotoks\everymath{\catcode`\^=7\relax \catcode`\_=8\relax }%
+ \everydisplay\everymath}
+
+\pdef\gmathcats{%
+ \addtotoks\everymath{\gmu@septify}%
+ \everydisplay\everymath}
+
+\emptify\gma@quantifierhook
+\def\quantifierhook#1{%
+ \def\gma@quantifierhook{#1}}
+
+\emptify\gma@gmathhook
+\def\gmathhook#1{\addtomacro\gma@gmathhook{#1}}
+
+\def\gma@dollar$#1${{\gmath$#1$}}%
+\def\gma@bare#1{\gma@dollar$#1$}%
+\def\gma@checkbracket{\@ifnextchar\[%^^A\]
+ \gma@bracket\gma@bare}
+\def\gma@bracket\[#1\]{{\gmath\[#1\]}\@ifnextchar\par{}{\noindent}}
+\def\gma{\@ifnextchar$%^^A $
+ \gma@dollar\gma@checkbracket}
+
+ %^^B trial composition
+\def\bgcolor{\color{white}}
+
+\DeclareCommand\garamath{%
+ O{\rm}% the font command
+}{%
+ % Before 2009/10/19 all the stuff was added to |\everymath| which
+ % didn't work.
+ \quantifierhook{\addfontfeature{OpticalSize=800}}%
+ %
+ \def\gma@arrowdash{{%
+ \setbox0=\hbox{\char"2192}\copy0\kern-0,6\wd0
+ \bgcolor\rule[-\dp0]{0,6\wd0}{\dimexpr1,07\ht0+\dp0}\kern-0,6\wd0}}%
+ %
+ \def\gma@gmathhook{%
+ \def\do####1####2####3{\gmu@storeifnotyet####1%
+ \def####1{####3{%
+ \mathchoice{\hbox{#1####2}}{\hbox{#1####2}}%
+ {\hbox{#1\scriptsize####2}}{\hbox{#1\tiny####2}}}}}%
+ \do\mapsto{\rule[0,4ex]{0,1ex}{0,4ex}\kern-0,05em%
+ \gma@arrowdash\kern-0,05em\char"2192}\mathrel
+ \do\cup{\scshape u}\mathbin
+ \do\varnothing{\setbox0=\hbox{\gma@quantifierhook\addfontfeature{Scale=1.272727}0}%
+ \setbox2=\hbox{\char"2044}%
+ \copy0 \kern-0,5\wd0 \kern-0,5\wd2 \lower0,125\wd0 \copy2
+ \kern0,5\wd0\kern-0,5\wd2}{}% of |\varnothing|
+ \do\leftarrow{\char"2190\kern-0,05em\gma@arrowdash}\mathrel
+ \do\shortleftarrow{\char"2190}\mathrel
+ \do\rightarrow{\gma@arrowdash\kern-0,05em\char"2192}\mathrel
+ \do\shortrightarrow{\char"2192\relax}\mathrel
+ \do\in{\gma@quantifierhook\char"0454}\mathbin
+ \do\prec{\gma@quantifierhook
+ \rotatebox[origin=c]{-90}{%
+ \glyphname{u03A5.a}}}\mathrel % added 2009/9/11
+ }% of |\gma@gmathhook|
+}% of |\garamath|.
+
+
+
+\def\gmu@tempa{\kern-0,08em\penalty10000\hskip0sp\relax
+ s\penalty10000\hskip0sp\relax}
+
+\protected\edef\Vs{V\gmu@tempa}
+
+\protected\edef\Ws{W\gmu@tempa}
+
+\pdef\Wz{W\kern-0,05em\penalty10000\hskip0sp\relax z}
+
+
+\pdef\leftslanting@{%
+ \def\litdimen{\strip@pt\fontdimen1\font ex}%
+ \def\litcorrection{%
+ \ifhmode\null\nobreak\hskip\litdimen\relax\fi}%
+ \def\litkern{% note it's to be used inside the left slanted font,
+ % unlike \incmd\litcorrection, intended to be used \emph{before}
+ % switching to left slant/italic.
+ \leavevmode\null
+ \kern-\litdimen\relax}%
+ \def\dilitkern{\kern\litdimen\litkern}%
+ % \stanza
+ \pdef\litshape{% \changes{v0.93}{2008/08/22}{copied here from
+ % E.~Szarzyński's \ty{The Letters}}
+ \litcorrection
+ \itshape
+ \@tempdima=-2\fontdimen1\font
+ \advance\leftskip by\strip@pt\fontdimen1\font ex % to assure at
+ % least the lowercase letters not to overshoot to the (left)
+ % margin. Note this has any effect only if there is a~\incs{par} in
+ % the scope.
+ \litcorrection
+ \edef\gmu@tempa{%
+ \@nx\addfontfeature{FakeSlant=\strip@pt\@tempdima}}%^^B
+ % \ilrr when not \incs{edef}ed, it caused an error, which is
+ % perfectly understandable.
+ \gmu@tempa}%
+ %
+ %
+ \pdef\textlit##1{% \changes{v0.93}{2008/08/22}{added}
+ {\litshape##1}}%
+ %
+ \pdef\lit{\rm\litshape}%
+ %
+ %
+ \pdef\lsl{{%
+ \litcorrection
+ \it
+ % \changes{v0.93}{2008/08/22}{copied here from E.~Szarzyński's \ty{The
+ % Letters}}
+ \@tempdima=-\fontdimen1\font
+ \litcorrection
+ \xdef\gmu@tempa{%
+ \@nx\addfontfeature{RawFeature={slant=\strip@pt\@tempdima}}}}%
+ \rm % Note in this declaration we left-slant the basic Roman font
+ % not the itshape of the current family.
+ \gmu@tempa}%
+ %
+ % Now we can redefine \cs{em} and \cs{emph} to use left Italic for
+ % nested emphasis. In Polish typesetting there is bold in nested
+ % emphasis as I~have heard but we don't like bold since it perturbs
+ % homogeneous greyness of a~page. So we introduce a~three-cycle
+ % instead of two-: Italic, left Italic, upright.
+ %
+ \pdef\em{%\changes{v0.93}{2008/08/22}{added}
+ \ifdim\fontdimen1\font=\z@ \itshape
+ \else
+ \ifdim\fontdimen1\font>\z@ \litshape
+ \else \upshape
+ \fi
+ \fi}%
+ %
+ %
+ \pdef\emph##1{% \changes{v0.93}{2008/08/22}{added}
+ {\em##1}}%
+}% of \cs{leftslanting@}.
+
+\pdef\leftslanting{\AtBeginDocument\leftslanting@}
+
+\AtBeginDocument{\let\leftslanting\leftslanting@}
+
+
+\def\romorzero#1{%
+ \ifnum#1=0 zero\else\romannumeral#1 \fi}
+
+\DeclareCommand\fakeonum{%
+ o % fake bold for the digit »2« (for which emboldening improves
+ % look),
+ >Pm % the text to fake old-style numbers in.
+}{%\
+ % I~tried to use this command as a~declaration but active digits are
+ % very uncomfortable, e.g.\ you can't define macros with arguments.
+ % \chgs{2008/12/04 v0.98 added}
+ \gmu@if@onum{#2}{%
+ \begingroup
+ \edef\gmu@tempa{#2}%
+ \makeatletter%
+ \IfValueT{#1}{%
+ \prependtomacro\fake@onum@ii{%
+ \begingroup\addfontfeature{FakeBold=#1}}%
+ \addtomacro\fake@onum@ii\endgroup
+ }%
+ \endlinechar\m@ne % to suppress the line end added by
+ % |\scantokens|, especially in active |^^M|'s scopes.
+ \gmu@dofakeonum
+ \@xa\scantokens\@xa{\gmu@tempa}%
+ \endgroup
+ }% of |\gmu@ifonum| ‘else’.
+}% of |\fakeonum|.
+
+\def\gmu@dofakeonum{%
+ \def\do##1{%
+ \catcode`##1\active
+ \scantokens{%
+ \@xa\let\@xa##1%
+ \csname fake@onum@\@xa\romorzero\string##1\endcsname\empty}}%
+ \do0\do1\do2\do3\do4\do5\do6\do7\do8\do9%
+}
+
+\def\do#1#2{%
+ \@namedef{fake@onum@\romorzero#1}{#2}}
+
+\def\gmu@tempa#1{%
+ \do#1{\leavevmode
+ \gmu@calculateslant{#1}% uses \incs{gmu@tempa} and
+ % \incs{gmu@tempb}, therefore goes first. And defines \incs{gmu@tempd}.
+ \gmu@measurewd{#1}% the width of char |#1| is in \incs{gmu@tempa}
+ % without kerning and in \incs{gmu@tempb} with kerning.
+ %
+ \edef\gmu@tempc{\the\fontcharht\font`#1}%
+ \hbox to \gmu@tempb {%
+ \hss\resizebox{\gmu@tempa}%
+ {\dimexpr\fontdimen5\font+\gmu@tempc-\fontdimen8\font}%
+ {\gmu@tempd#1}\hss}}}
+
+\gmu@tempa0 % |\fake@onum@zero|
+\gmu@tempa1 % |\fake@onum@i|
+\gmu@tempa2 % |\fake@onum@ii|
+
+\def\gmu@tempa#1{%
+ \do#1{\leavevmode
+ \gmu@measurewd{#1}%
+ \lower
+ \dimexpr\fontdimen8\font-\fontdimen5\font\relax
+ \hbox to \gmu@tempb {\hss#1\hss}}%
+}
+
+\gmu@tempa3 % |\fake@onum@iii|
+\gmu@tempa4 % |\fake@onum@iv|
+\gmu@tempa5 % |\fake@onum@v|
+\gmu@tempa7 % |\fake@onum@vii|
+\gmu@tempa9 % |\fake@onum@ix|
+
+\def\gmu@tempa#1{% to preserve pseudo-kerning in digits sequences.
+ \do#1{\leavevmode
+ \gmu@measurewd#1%
+ \hbox to \gmu@tempb {\hss#1\hss}}}
+
+\gmu@tempa6 % |\fake@onum@vi|
+\gmu@tempa8 % |\fake@onum@viii|
+
+\protected\def\gmu@if@onum{%
+ \edef\gmu@tempa{\@xa\meaning\the\font}%
+ \@xa\@ifinmeaning\detokenize{+onum}\of\gmu@tempa
+}
+
+\pdef\gmu@getslant{% we define |\gmu@tempa| to the (fake) slant of current font.
+ \edef\gmu@tempa{\@xa\meaning\the\font\detokenize{slant=0,}}%
+ \edef\gmu@tempb{%
+ \def\@nx\gmu@tempb####1%
+ \detokenize{slant=}%
+ ####2,####3}%
+ \gmu@tempb\@nil{##2}%
+ \edef\gmu@tempa{\@xa\gmu@tempb\gmu@tempa\@nil pt}%
+}
+
+\def\gmu@calculateslant#1{%
+ \gmu@getslant
+ \edef\gmu@tempa{\the\numexpr\dimexpr\fontdimen1\font + \gmu@tempa}%\
+ % \incs{gmu@tempa} bears the number of scaled points of total slant
+ % (\inverb|\fontdimen1\font|${}+$\inverb|slant=…| if present) per 1pt
+ % of \inhash1.\ilrr
+ \edef\gmu@tempa{\the\numexpr \gmu@tempa *
+ \numexpr\fontdimen5\font\relax/\numexpr\fontcharht\font`#1
+ \relax}%\
+ % we scale the total slant of \inverb|#1| by the ratio of original
+ % and scaled height of \inverb|#1|.
+ \edef\gmu@tempd{%
+ \the\dimexpr \gmu@tempa sp - \fontdimen1\font}%\
+ % and we subtract slant-fontdimen from the scaled total slant.
+ \ifdim\gmu@tempd=\z@ \emptify\gmu@tempd
+ \else\edef\gmu@tempd{%
+ \@nx\addfontfeature{FakeSlant=\strip@pt\dimexpr\gmu@tempd}}%
+ \fi}
+
+\DeclareCommand\gmu@cepstnof{O{\gmu@tempa}% a~cs to be |\xdef|ed the
+ % font specification,
+ s% not used really,
+ m% |\fontspec| token or name of feature font (\inverb|Italic|, \inverb|Bold|,
+ % \inverb|SmallCaps|, \inverb|BoldItalic| ),
+ O{, Scale=MatchLowercase}% \pk{fontspec} font features (key=val)
+}
+{% |\gmu@cepstnof|'s body
+ \def\gmu@cepstnof@resc##1:##2:\@nil{%
+ \ifx:##2:\else RawFeature={\gmu@maybestripcomma##2,,\@nil} \fi}%
+ % \stanza
+ \def\gmu@cepstnof@resd##1/##2/\@nil{% to check whether font name
+ % contains |/| (which may not be true!)
+ \ifx&##2&\@xa\@firstoftwo\else\@xa\@secondoftwo\fi}%
+ % \stanza
+ \def\gmu@cepstnof@rese##1:##2:\@nil{% to check whether the font name
+ % contains |:| when it doesn't contain |/|.
+ \ifx&##2&\@xa\@firstoftwo\else\@xa\@secondoftwo\fi}%
+ % \stanza
+ \edef\gmu@cepstnof@resa{%
+ % now, reserved B parses the font name and features. It uses an
+ % auxiliary reserved C because after |/| may be or may not be
+ % features specification.
+ \@xa\@xa\@xa\gmu@cepstnof@resd\@xa\meaning\the\font//\@nil
+ {% font name doesn't contain a~slash
+ \@xa\@xa\@xa\gmu@cepstnof@rese\@xa\meaning\the\font::\@nil
+ {% nor does it contain a~colon
+ \def\@nx\gmu@cepstnof@resb\detokenize{select font
+ "}####1\detokenize{"}####2\@nx\@nil{%
+ \ifx\fontspec#3%
+ \@nx\@nx\@nx\fontspec[\@gobble#4\@empty]{####1}% gobble a~comma
+ \else
+ #3Font={####1}, #3Features={\@gobble #4\@empty}%
+ \fi
+ }%
+ }%
+ {% no slash but there is a~colon
+ \def\@nx\gmu@cepstnof@resb\detokenize{select font
+ "}####1:####2\detokenize{"}####3\@nx\@nil{%
+ \ifx\fontspec#3%
+ \@nx\@nx\@nx\fontspec[\@nx\gmu@cepstnof@resc####2::\@nx\@nil#4]{####1}%
+ \else
+ #3Font={####1}, #3Features={\@nx\gmu@cepstnof@resc####2::\@nx\@nil#4}%
+ \fi
+ }%
+ }%
+ }% of ‘no slash’ case
+ {% font name contains a~slash
+ \def\@nx\gmu@cepstnof@resb\detokenize{select font
+ "}####1/####2\detokenize{"}####3\@nx\@nil{%
+ \ifx\fontspec#3%
+ \@nx\@nx\@nx\fontspec[\@nx\gmu@cepstnof@resc####2::\@nx\@nil#4]{####1}%
+ \else
+ #3Font={####1}, #3Features={\@nx\gmu@cepstnof@resc####2::\@nx\@nil#4}%
+ \fi
+ }% of |\gmu@cepstnof@resb|
+ }% of ‘slash present’ case
+ }\gmu@cepstnof@resa
+ \xdef#1{\@xa\@xa\@xa\gmu@cepstnof@resb\@xa\meaning\the\font\@nil}%
+}%
+
+\def\gmu@stripcomma#1,{#1}
+
+\def\gmu@maybestripcomma#1,,#2\@nil{#1}
+
+\pdef\gmu@setbasefont{\@xa\let\@xa\gmu@basefont\the\font}
+
+\let\setbasefont\gmu@setbasefont
+
+\DeclareCommand\gmu@calc@scale{%
+ O{1}% a~factor,
+ m% number of the fontdimen
+ }
+{\begingroup
+ % We ‘descale’ the current font:\nostanza
+ \gmu@cepstnof\fontspec[, Scale=1]\gmu@tempa
+ \@xa\let\@xa\gmu@currfont@descaled\the\font
+ \gmu@basefont
+ \gmu@cepstnof\fontspec[, Scale=1]\gmu@tempa
+ % \nostanza now also the base font is descaled.
+ \xdef\gmu@fontscale{%
+ \strip@pt
+ \dimexpr 1pt *
+ \numexpr\dimexpr#1\fontdimen#2\font\relax\relax /
+ \numexpr\fontdimen#2\gmu@currfont@descaled\relax
+ \relax}%
+ \endgroup}
+
+
+\def\gmu@tilde{%
+ \leavevmode\lower.8ex\hbox{$\,\widetilde{\mbox{ }}\,$}}
+\AtBeginDocument{% to bypass redefinition of |\~| as a~text command
+ % with various encodings
+ \pdef\texttilde{%
+ % \changes{v0.83}{2007/08/22}{postponed to
+ % \cs{begin\{document\}} to avoid overwriting by a~text command
+ % and
+ % made sensible to a~subsequent
+ % /} % \changes{v0.86}{2007/12/11}{renamed from \cmd\~
+ % since the latter is one of \LaTeX's\ accents}
+ \@ifnextchar/{\gmu@tilde\kern-0,1667em\relax}\gmu@tilde}}
+
+\foone{\catcode`\^^M\active}% the comment signs here are crucial.
+{\def\defobeylines{\catcode`\^^M=13 \def^^M{\par}}}
+
+
+\def\deksmallskip{\vskip\smallskipamount}
+\def\undeksmallskip{\vskip-\smallskipamount}
+\def\dekmedbigskip{\vskip\glueexpr \medskipamount+\smallskipamount}
+\def\dekmedskip{\vskip\medskipamount}
+\def\dekbigskip{\vskip\bigskipamount}
+
+\def\hfillneg{\hskip 0pt plus -1fill\relax}
+
+\newcommand*{\TODO}[1][]{{%
+ \sffamily\bfseries\huge TO-DO!\if\relax#1\relax\else\space\fi#1}}
+
+
+\newcommand*\twocoltoc{%
+ \RequirePackage{multicol}%
+ \def\@starttoc##1{%
+ \begin{multicols}{2}\makeatletter
+ \NamedInput % changed from |\@input| 2010/8/13.
+ {\jobname .##1}%
+ \if@filesw \@xa \newwrite \csname tf@##1\endcsname
+ \immediate \openout \csname tf@##1\endcsname \jobname .##1\relax
+ \fi
+ \@nobreakfalse\end{multicols}%
+ }% of |\starttoc|
+}
+
+\@onlypreamble\twocoltoc
+
+
+\pdef\equals{\hunskip${}={}$\ignorespaces}
+\pdef\eequals{\hunskip${}=={}$\ignorespaces}
+
+\pdef\·{\hunskip${}·{}$\ignorespaces}
+
+
+\def\freeze@actives{%
+ \count\z@\z@
+ %
+ \@whilenum\count\z@<\@cclvi\do{%
+ \ifnum\catcode\count\z@=\active
+ \uccode`\~=\count\z@
+ \uppercase{\let~\relax}%
+ \fi
+ \advance\count\z@\@ne}}
+
+
+\newcommand*\ShowFont[1][6]{%
+ \begin{multicols}{#1}[The current font (the \f@encoding\ encoding):]
+ \parindent\z@
+ \count\z@\m@ne
+ \@whilenum\count\z@<\@cclv\do{
+ \advance\count\z@\@ne
+ \ \the\count\z@:~\char\count\z@\par}
+ \end{multicols}}
+
+\newcommand*\liturgiques[1][red]{% Requires the \pk{color} package.
+ \gmu@RPfor{xcolor}\color%
+ \newcommand*\czerwo{\small\color{#1}}% environment
+ \newcommand{\czer}[1]{\leavevmode{\czerwo##1}}% we leave
+ % vmode because if we don't, then \env{verse}'s |\everypar| would be
+ % executed in a~group and thus its effect lost.
+ \Store@Macro\*%
+ \def\*{\czer{\storedcsname{*}}}%
+ \def\+{\czer{†}}%
+ \newcommand*\nieczer[1]{\textcolor{black}{##1}}%
+}
+
+\newcommand*\gmu@RPfor[3][]{% \changes{v0.93}{2008/08/30}{renamed from
+ % \cs{gmu@RPif} and \#3 changed from a~csname to \CS}
+ \ifx\relax#1\relax\emptify\gmu@resa
+ \else \def\gmu@resa{[#1]}%
+ \fi
+ \@xa\RequirePackage\gmu@resa{#2}}
+
+\AtBeginDocument{%
+ \renewcommand*\gmu@RPfor[3][]{%
+ \unless\ifdefined#3%
+ \@ifpackageloaded{#2}{}{%
+ \typeout{^^J! Package `#2' not loaded!!! (\on@line)^^J}}%
+ \fi}}
+
+\pprovide\continuum{%
+ \gmu@RPfor{eufrak}\mathfrak\ensuremath{\mathfrak{c}}}
+
+\def\iteracro{%
+ \pdef\acro##1{%
+ \begingroup
+ \acropresetting
+ \gmu@acrospaces##1 \gmu@acrospaces
+ \endgroup
+ }%
+}
+
+\emptify\acropresetting
+
+\iteracro
+
+\def\gmu@acrospaces#1 #2\gmu@acrospaces{%
+ \gmu@acroiter#1\gmu@acroiter
+ \ifx\relax#2\relax\else
+ \space
+ \afterfi{\gmu@acrospaces#2\gmu@acrospaces}% when |#2| is nonempty,
+ % it is ended with a~space. Adding one
+ % more space in this line resulted in
+ % an infinite loop, of course.
+ \fi}
+
+\def\gmu@acroiter#1{%
+ \gmu@notif {x\@xa\@xa} {\@firstofmany#1\@undefined\@nil \gmu@acroiter}
+ {\gmu@acrokernel{#1}%
+ % and iterate
+ \gmu@acroiter
+ }% of if sentinel or not
+ {}%
+}
+
+\def\gmu@acrokernel#1{%
+ \gmu@if {cat} {a\@xanx\@firstofmany#1\@undefined\@nil}
+ {\gmu@if {num} {`#1=\uccode`#1\space }% a space to delimit numer
+ % (without it further macros were
+ % expanded which in this case are
+ % |\expandafter\@firstoftwo\else\@secondoftwo| and this made the test didn't work.)
+ {{\acrocore{#1}}}%
+ {{#1}}% tu było |\smallerr|
+ }%
+ {#1}%
+}
+
+\pdef\acrocore{\smaller % was: |\scshape\lowercase|
+}
+
+
+\def\IMHO{\acro{IMHO}}
+\def\AKA{\acro{AKA}}
+
+\pdef\usc#1{{\addfontfeature{Letters=UppercaseSmallCaps}#1}}
+
+\def\uscacro{\let\acrocore\usc}
+
+
+
+\def\gmu@dekfraccsimple#1/#2{\leavevmode\kern.1em
+ \raise.7ex\hbox{%^^A \udigits
+ \gmu@fracfontsetup#1}\gmu@numeratorkern
+ \dekfraccslash\gmu@denominatorkern
+ {%^^A\udigits
+ \gmu@fracfontsetup#2}%
+ \if@gmu@mmhbox\egroup\fi}
+
+\def\gmu@fracfontsetup{%
+ \smaller[3]\addfontfeature{FakeBold=1}}
+
+\def\dekfraccsimple{% \label{2292}
+ \let\dekfracc@args\gmu@dekfraccsimple
+}
+\@ifXeTeX{\def\dekfraccslash{\char"2044 }}
+{\def\dekfraccslash{/}} % You can define it as the fraction slash,
+\dekfraccsimple
+
+
+
+\newcommand*\ikern{\,\penalty\@M\hskip\z@skip\relax}
+
+
+\def\gmu@scapLetters#1{%
+ \ifx#1\relax\relax\else% two |\relax|es to cover the case of empty |#1|.
+ \ifcat a\@nx#1\relax
+ \ifnum\the\lccode`#1=`#1\relax
+ {\fakescapscore\MakeUppercase{#1}}% not Plain |\uppercase|
+ % because that works bad with \pk{inputenc}.
+ \else#1%
+ \fi
+ \else#1%
+ \fi%
+ \@xa\gmu@scapLetters
+ \fi}%
+\def\gmu@scapSpaces#1 #2\@nil{%
+ \ifx#1\relax\relax
+ \else\gmu@scapLetters#1\relax
+ \fi
+ \ifx#2\relax\relax
+ \else\afterfi{\ \gmu@scapSpaces#2\@nil}%
+ \fi}
+\def\gmu@scapss#1\@nil{{\def~{{\nobreakspace}}%
+ \gmu@scapSpaces#1 \@nil}}%|% \def\\{{\newline}}\relax|
+
+\pdef\fakescaps#1{{\gmu@scapss#1\@nil}}
+
+\let\fakescapscore\gmu@scalematchX
+
+\def\tinycae{{\tiny\AE}}% to use in |\fakescaps[\tiny]{…}|
+
+\RequirePackage{calc}
+
+
+\@ifpackageloaded{fontspec}{%
+ \def\gmu@scalar{1.0}%
+ \def\zf@scale{}%
+ \def\gmu@scalematchX{%
+ \begingroup
+ \ifx\zf@scale\empty\def\gmu@scalar{1.0}%
+ \else\let\gmu@scalar\zf@scale\fi
+ \setlength\@tempdima{\fontdimen5\font}% 5---ex height
+ \setlength\@tempdimb{\fontdimen8\font}% 8---\XeTeX\ synthesised
+ % uppercase height.
+ \divide\@tempdimb by1000\relax
+ \divide\@tempdima by\@tempdimb
+ \setlength{\@tempdima}{\@tempdima*\real{\gmu@scalar}}%
+ \gmu@ifundefined{fakesc@extrascale}{}{%
+ \setlength{\@tempdima}{\@tempdima*\real{\fakesc@extrascale}}}%
+ \@tempcnta=\@tempdima
+ \divide\@tempcnta by 1000\relax
+ \@tempcntb=-1000\relax
+ \multiply\@tempcntb by\@tempcnta
+ \advance\@tempcntb by\@tempdima
+ \xdef\gmu@scscale{\the\@tempcnta.%
+ \ifnum\@tempcntb<100 0\fi
+ \ifnum\@tempcntb<10 0\fi
+ \the\@tempcntb}%^^A{\strip@pt\@tempdimc}%
+ \endgroup
+ \addfontfeature{Scale=\gmu@scscale}%
+ }}{\let\gmu@scalematchX\smallerr}
+
+\def\fakescextrascale#1{\def\fakesc@extrascale{#1}}
+
+\newcommand*\wyzejnizej[1]{%
+ \edef\gmu@tempa{\gmu@ifundefined{r@#1}{\arabic{page}}{%
+ \@xa\@xa\@xa\@secondoftwo\csname r@#1\endcsname}}%
+ \ifnum\gmu@tempa<\arabic{page}\relax wy\.zej\fi
+ \ifnum\gmu@tempa>\arabic{page}\relax ni\.zej\fi
+ \ifnum\gmu@tempa=\arabic{page}\relax \@xa\ignorespaces\fi
+}
+
+
+\def\napapierkistretch{0,3pt}% It's quite much for 11/13pt leading.
+
+\def\napapierkicore{\advance\baselineskip%
+ by 0ptplus\napapierkistretch\relax}
+
+\DeclareEnvironment{napapierki}{s}{%
+ % \chgs{2009/01/05 v0.98 added optional star controlling globalness}
+ \par\IfValueT{#1}{\global}%
+ %
+ \napapierkicore}
+{%
+ \par
+ \IfValueT{#1}{\global\baselineskip=1\baselineskip\relax
+ }%
+}% so that you can use \inverb|\napapierki*›…\endnapapierki*|
+
+\newcount\gmu@luzniej
+
+\newcommand*\luzniejcore[1][1]{%
+ \advance\gmu@luzniej\@ne% We use this count to check whether we open
+ % the environment or just set |\looseness| inside it again.
+ \ifnum\gmu@luzniej=\@ne \multiply\tolerance by 2 \fi
+ \looseness=#1\relax}
+
+\newenvironment*{luzniej}{\par\luzniejcore}{\par}
+
+\newenvironment*{luzniej*}[1][1]{%
+ \multiply\tolerance by 2\relax
+ \everypar{\looseness=#1\relax}}{\par}
+
+\newcommand*\nawj{\kern0,1em\relax}% a~kern to be put between
+
+\def\pauza@skipcore{\hskip0.2em plus0.1em\relax
+ \pauzacore
+ \@ifnextchar,{% 2009/11/22 added a special case of a comma following pauza
+ }{\hskip.2em plus0.1em\relax\ignorespaces}}%
+\def\ppauza@skipcore{\unskip\penalty10000\hskip0.2em plus0.1em\relax
+ \ppauza@dash\hskip.2em plus0.1em\ignorespaces}
+
+\AtBeginDocument{%
+ \pdef\pauza{%
+ \ifhmode
+ \unskip\penalty10000
+ \hskip0.2em plus0.1em\relax
+ \pauzacore\hskip.2em plus0.1em\relax\ignorespaces%
+ \else
+ \pauzadial
+ \fi
+ }%
+ %
+ % According to \tytul{Instrukcja technologiczna.\ Skład ręczny ^^B
+ % i~maszynowy} the dialogue dash (in Polish) should be followed by
+ % a~rigid hskip of \dekfracc1/2\,em.
+ \pdef\pauzadial{%
+ \leavevmode\pauzacore\penalty10000\hskip0,5em\ignorespaces}
+ %
+ % And a~version with no space at the left, to begin a~|\noindent|ed
+ % paragraph explaining e.g.\ a~quotation:
+ \pdef\lpauza{%
+ \leavevmode
+ \pauzacore\hskip.2em plus0.1em\ignorespaces}%
+ %
+ % We define |\ppauza| as an en dash surrounded with thin stretchable
+ % spaces and sticking to the upper line or bare but discretionary
+ % depending on the next token being space${}_10$. Of course you'll
+ % never get such a~space after a~literal \CS so an explicit |\ppauza|
+ % will always result with a~bare discretionary en dash, but if we
+ % |\let–\ppauza|…
+ % \stanza
+ \pdef\ppauza{%
+ \ifvmode \PackageError{gmutils}{%
+ command \bslash ppauza (en dash) not intended for vmode.}{%
+ Use \bslash ppauza (en dash) only in number and numeral ranges.}%
+ \else
+ \unskip\discretionary
+ {\ppauza@dash}{\ppauza@dash}{\ppauza@dash}%
+ \fi}%
+}% of at begin document
+
+\ifdefined\XeTeXversion
+\AtBeginDocument{% to be independent of moment of loading of \pk{polski}.
+ \pdef\—{%
+ \ifhmode
+ \unskip\penalty10000
+ \afterfi{%
+ \@ifnextspace{\pauza@skipcore}%
+ {\@ifnextchar,{\pauza@skipcore}% a special case of comma added 2009/11/22
+ {\@ifnextMac{\pauza@skipcore}%
+ {\pauzacore\penalty\hyphenpenalty\hskip\z@skip}}}%
+ }% of |\afterfi|'s argument
+ \else
+ % \nostanza According to \tytul{Instrukcja technologiczna.\ Skład ręczny ^^B
+ % i~maszynowy} the dialogue dash should be followed by a~rigid
+ % hskip of \dekfracc1/2\,em.\nostanza
+ \leavevmode\pauzacore\penalty10000\hskip0,5em\ignorespaces
+ \fi
+ }%
+ % The next command's name consists of letters and therefore it eats
+ % any spaces following it, so |\@ifnextspace| would always be
+ % false, therefore we don't use it.\nostanza
+ \pdef\–{%
+ \ifvmode \PackageError{gmutils}{%
+ command \bslash ppauza (en dash) not intended for vmode.}{%
+ Use \bslash ppauza (en dash) only in number and numeral ranges.}%
+ \else
+ \afterfi{%
+ \@ifnextspace{\ppauza@skipcore}{%
+ \@ifnextMac\ppauza@skipcore
+ {\unskip\discretionary
+ {\ppauza@dash}{\ppauza@dash}{\ppauza@dash}}}%
+ }%
+ \fi
+ }%
+ %
+ \def\emdash{\char`\—}
+}% of at begin document
+
+\def\longpauza{\def\pauzacore{—}}
+\longpauza
+\def\shortpauza{%
+ \def\pauzacore{\hbox{–\kern,23em\relax\llap{–}}}}%
+\def\ppauza@dash{–}%
+
+\else % not \XeTeX
+\def\longpauza{\def\pauzacore{---}}
+\longpauza
+\def\shortpauza{%
+ \def\pauzacore{--\kern,23em\relax\llap{--}}}%
+\def\ppauza@dash{--}%
+
+\fi% of if \XeTeX\ or not.
+
+\ifdefined\XeTeXversion
+
+\foone{\catcode`—\active \catcode`–\active \catcode`-\active}{%\label{not@ifundef}
+ \def\adashes{\AtBeginDocument\adashes}% because |\pauza|
+ % is defined at begin document.
+ \AtBeginDocument{\def\adashes{%
+ \catcode`—\active \def—{\—}%
+ \catcode`–\active \def–{\–}%
+ \addtomacro\dospecials{\do\–\do\—}%
+ \addtomacro\@sanitize{\@makeother\–\@makeother\—}%
+ \addtomacro\gmu@septify{\do\–13\do\—13\relax}%
+}}}
+\else
+\relaxen\adashes
+\fi
+
+
+\def\gmu@dywiz{\ifmmode-\else
+ \ifvmode-\else\afterfifi\dywiz\fi\fi}%
+
+\foone{\catcode`-\active}{% aktivnyj diefis aktywny dywiz active hyphen
+ \def\ahyphen{\let-\gmu@dywiz\catcode`\-\active}}
+
+\newcommand*\czas[1][.]{%
+ \the\numexpr(\time-30)/60\relax#1%
+ \@tempcnta=\numexpr\time-(\time-30)/60*60\relax
+ \ifnum\@tempcnta<10 0\fi\the\@tempcnta}
+
+\newenvironment*{tytulowa}{\newpage}{\par\thispagestyle{empty}\newpage}
+
+\def\nazwired{\quad\textsc}
+
+
+\pdef\polskadata{%
+ \DeclareCommand\gmu@datefsl{%
+ ##1 Q{0123456789\bgroup}>iT{/-} % year
+ ##2 Q{0123456789\bgroup}>iT{/-} % month
+ ##3 Q{0123456789\bgroup} % day
+ ##4 T{,}
+ ##5 K{##1\gmu@datefsl} % additional stuff after comma
+ }{%
+ \IfValueF{##2}{\PutIfValue{##3}}%
+ \IfValueT{##2}{%
+ \@tempcnta=0##3\relax\the\@tempcnta
+ \ifcase##2\relax\or\ stycznia\or\ lutego%
+ \or\ marca\or\ kwietnia\or\ maja\or\ czerwca\or\ lipca\or\ sierpnia%
+ \or\ września\or\ października\or\ listopada\or\ grudnia\else
+ {}%
+ \fi}%
+ \IfValueT{##1}{\space ##1}%
+ \PutIfValue{##4}\IfValueT{##5}{ ##5}%
+ }% of \incs{gmu@datefsl}.
+ }% of |\polskadata|
+
+\polskadata
+
+\pdef\englishdate{%
+ \DeclareCommand\gmu@datefsl{%
+ Q{0123456789\bgroup}>iT{/-} % (1) year
+ Q{0123456789\bgroup}>iT{/-} % (2) month
+ Q{0123456789\bgroup} % (3) day
+ T{,} K{##1\gmu@datefsl} % (4, 5) additional stuff after comma
+ }{%
+ \IfValueF{##2}{\PutIfValue{##3}}%
+ \IfValueT{##2}{%
+ \ifcase##2\relax\or January\or February%
+ \or March\or April\or May\or June\or July\or August%
+ \or September\or October\or November\or December\else
+ {}%
+ \fi}%
+ \space
+ \@tempcnta=##3\relax\the\@tempcnta,
+ \IfValueT{##1}{ ##1}%
+ \PutIfValue{##4}\IfValueT{##5}{ ##5}%
+ }% of \incs{gmu@datefsl}.
+}%
+
+\newif\ifdate
+\pdef\bidate#1{%
+ \gmu@datefsl#1\gmu@datefsl
+}
+
+\pdef\linedate{\gmu@ifstar\linedate@@\linedate@}
+\pdef\linedate@@#1{\linedate@{--{}{}#1}}
+\pdef\linedate@#1{\par
+ \linedate@hook{#1}%
+ \ifdate\addvspace{\dateskipamount}%
+ \possvfil% if we put it before |\addvspace|, the v-space is always added.
+ \date@line{\DateFont \bidate{#1}}%
+ \nopagebreak
+ \else%|%\ifnum\arabic{dateinsection}>0\dekbigskip\fi|
+ \addvspace{\bigskipamount}\possvfil
+ \fi}% end of |\linedate|.
+
+\newcommand*\DateFont{\footnotesize\itshape}
+
+\let\linedate@hook\@gobble
+
+\let\dateskipamount\medskipamount
+
+\pdef\rdate{\let\date@line\rightline \linedate}
+
+\def\date@left#1{\par{%
+ \raggedright#1%
+ \leftskip\z@skip
+ \@@par}}%
+
+\pdef\ldate{%\changes{v0.94}{2008/09/06}{\cs{leftline}
+ % replaced with \cs{par}…\cs{par} to work well with \pk{floatflt}}
+ \let\date@line\date@left
+ \linedate}
+
+\newcommand*\runindate[1]{%
+ \paragraph{\footnotesize\itshape \gmu@datef#1\gmu@datef}%
+ \stepcounter{dateinsection}}
+\let\thedate\ldate
+
+\pdef\zwrobcy#1{\emph{#1}} %ostinato, allegro con moto,
+ %garden party etc., także kompliment
+
+\pdef\tytul#1{\emph{#1}}
+
+\newenvironment{maszynopis}[1][]{#1\ttfamily
+ \hyphenchar\font=45\relax% this assignment is global for the font.
+ \@tempskipa=\glueexpr\rightskip+\leftskip\relax
+ \ifdim\gluestretch\@tempskipa=\z@
+ \tolerance900
+ % \nostanza it worked well with tolerance \equals 900.\nostanza
+ \advance\rightskip by\z@ plus0,5em\relax\fi
+ \fontdimen3\font=\z@% we forbid stretching spaces…\par\nostanza\gmdnoindent
+ %|% \fontdimen4\font=\z@| but allow shrinking them.\nostanza
+ \hyphenpenalty0 % not to make \TeX\ nervous: in a~typewriting this
+ % marvellous algorithm of hyphenation should be turned off and every
+ % line broken at the last allowable point.
+ \Store@Macro\pauzacore
+ \def\pauzacore{-\rlap{\kern-0,3em-}-}%
+}{\par}
+
+\pdef\justified{%
+ \leftskip=1\leftskip% to preserve the natural length and discard
+ % stretch and shrink.
+ \rightskip=1\rightskip
+ \parfillskip=1\parfillskip
+ \advance\parfillskip by 0sp plus 1fil\relax
+ \let\\\@normalcr}
+
+\DeclareCommand\fullpar{%
+ T{+-}%
+ Q{+-0123456789} % optional looseness (most probably negative)
+}{%
+ \begingroup
+ \IfValueT{#1}{\looseness=#1\IfValueTF{#2}{#2}{1}\relax
+ \multiply\tolerance by \tw@
+ }%
+ \fullparcore
+ \par
+ \endgroup}
+
+\pdef\fullparcore{%
+ \hunskip
+ \parfillskip\z@skip}
+
+\newcommand*\twoparinit{% the name stands for `\emph{last} paragraph
+ % line's length \emph{min}imum \emph{two} \incs{parindent}.
+ \def\twopar@defts{%
+ \hsize-\leftskip-\rightskip-\fontcharwd\font`…}%
+ \def\twopar@atleast{2\@parindent}%
+ \DeclareCommand\twopar{%
+ T{+-}% (1) you can specify loosening the paragraph by one only by
+ % typing single |+| and tightening by one by typing single |-|.
+ Q{+-0123456789}% (2)
+ A{\twopar@atleast}% (3)
+ >iT{\cipolagwa}}{%
+ \begingroup
+ \IfValueT{##1}{%
+ \looseness=##1\IfValueTF{##2}{##2}{1}\relax
+ \multiply\tolerance by2
+ }%
+ \twoparcore<##3>%
+ \par
+ \endgroup
+ }% of \incmd\twopar.
+ % \stanza
+ \ifdefined\XeTeXversion
+ \DeclareCommand\twoparcore{%
+ A{\twopar@atleast}
+ \gobblespace
+ }{%
+ \hunskip % it's \ac{O.K.} it's in a~group, it'll work anyway.
+ \edef\gmu@tempa{\the\dimexpr\twopar@defts-##1\relax}%
+ \parfillskip=\glueexpr\gmu@tempa minus \gmu@tempa
+ \relax% to delimit |\glueexpr|.
+ \relax% to delimit the assignment.
+ }%
+ \else % not \XeTeX---doesn't use |\fontcharwd|.
+ \DeclareCommand\twoparcore{%
+ A{\twopar@default}
+ \gobblespace
+ }{%
+ \hunskip % it's \ac{O.K.} it's in a~group, it'll work anyway.
+ {\setbox0=\hbox{\dots}%
+ \xdef\gmu@tempa{\the\wd0}}%
+ \edef\gmu@tempa{%
+ \the\dimexpr\hsize-\leftskip-\rightskip
+ -\gmu@tempa-2\@parindent\relax}%
+ \parfillskip=\glueexpr\gmu@tempa minus \gmu@tempa
+ \relax% to delimit |\glueexpr|.
+ \relax% to delimit the assignment.
+ }%
+ \fi
+ % \stanza
+ \AtBeginDocument{%
+ \def\restoreparindent{\parindent\@parindent}%
+ }% of \cmd\AtBeginDocument.
+}% of \cs{twoparinit}.
+
+
+\def\gmu@leftskipcorr{%
+ \kern1\leftskip
+ \ifcsname \@currenvir leftskip\endcsname
+ \kern-1\csname \@currenvir leftskip\endcsname
+ \fi
+}
+
+\DeclareCommand\wherncore{om}{%\
+ % \begin{enumargs}
+ % \dc optional value of \incs{hskip} of (left) indent of the parbox. If
+ % absent, parbox is aligned right;
+ % \dc text for the datum parbox.
+ % \end{enumargs}
+ \IfValueTF{#1}{\leftline{%
+ \kern1\leftskip
+ \whernfont
+ \hskip#1\relax\parbox
+ {\dimexpr\textwidth-\leftskip-\rightskip-#1}%
+ {#2}% of |\parbox|,
+ }% of |\leftline|,
+ }% of |ValueT{#1}|.
+ {% |ValueF{#1}|:
+ \rightline
+ {\whernfont
+ \whern@parbox{#2}%
+ \kern1\rightskip
+ }% of |\rightline|,
+ \setprevdepth
+ }% of |ValueF{#1}|,
+}% of |\wherncore|.
+
+\DeclareCommand\whern@parbox{%
+ T {\leftskip\rightskip}% horizontal alignment of resulting box (the
+ % side to be ragged)
+ O{t} % vertical alignment of parbox
+ >is % separator
+ O{0,7666\textwidth} % (3) width of parbox
+ m % (4) parbox contents
+}{%
+ % \begin{enumargs}
+ % \dc S the skip of the ragged side,
+ % \dc the |\parbox|'s contents.
+ % \end{enumargs}
+ \parbox[#2]{#3}{%
+ \IfValueTF{#1}{#1}{\leftskip}=0sp plus \textwidth
+ \parfillskip0sp\relax
+ \let\\\linebreak
+ \disobeylines
+ \whernfont #4\unskip\strut\endgraf
+ \getprevdepth
+ }% of |\parbox|,
+}% of |\whern@parbox|.
+
+\def\whern{%
+ \endgraf\nopagebreak
+ \gmu@ifstar{\wherncore}%
+ {\vskip\whernskip\wherncore}}
+
+\let\whernfont\footnotesize
+
+\newskip\whernskip
+\whernskip2\baselineskip minus 2\baselineskip\relax
+
+\DeclareCommand\whernup{%
+ o % a~vskip before
+ >is % separating star (ignored)
+ o % (2) custom width of parbox
+ >Pm}{\par
+ \IfValueT{#1}{\vskip#1\relax}%
+ \leftline{%
+ \gmu@leftskipcorr
+ \IfValueTF{#2}{\whern@parbox\rightskip[b][#2]}%
+ {\whern@parbox\rightskip[b]}%
+ {#3}%
+ }%
+ \setprevdepth
+ \nopagebreak\relax
+ \@ifenvir{quote}{\noindent\ignorespaces}{}}
+
+
+\pdef\thousep#1{% a~macro that'll put the thousand separator between
+ % every two three-digit groups.\par\nostanza
+ % First we check whether we have at least five digits.
+ %\changes{v0.93}{2008/08/23}{added}
+ \gmu@thou@fiver#1\relax\relax\relax\relax\relax% we put five
+ % \incs{relax}es after the parameter to ensure the string will meet
+ % \incs{gmu\+@\+thou\+@\+fi\+ver}'s definition.\ilrr
+ \gmu@thou@fiver{#1}{% if more than five digits:
+ \emptify\gmu@thou@put
+ \relaxen\gmu@thou@o\relaxen\gmu@thou@i\relaxen\gmu@thou@ii
+ \@tempcnta\z@
+ \gmu@thou@putter#1\gmu@thou@putter
+ \gmu@thou@put
+ }}
+
+\def\gmu@thou@fiver#1#2#3#4#5\gmu@thou@fiver#6#7{% this macro only
+ % checks if the text delimited with itself consists of at least five tokens/braces
+ \ifx\relax#5\relax\@xa\@firstoftwo
+ \else\@xa\@secondoftwo
+ \fi{#6}{#7}}
+
+\def\gmu@thou@putter #1#2{% we are sure to have at least five tokens
+ % before the sentinel \incs{gmu@thou@putter}.
+ \advance\@tempcnta\@ne
+ \@tempcntb\@tempcnta
+ \divide\@tempcntb3\relax
+ \@tempcnta=\numexpr\@tempcnta-\@tempcntb*3
+ \edef\gmu@thou@put{\@xau{\gmu@thou@put}\unexpanded{#1}%
+ \ifx\gmu@thou@putter#2\else
+ \ifcase\@tempcnta
+ \gmu@thou@o\or\gmu@thou@i\or\gmu@thou@ii% all three
+ % \CSes are yet \incs{relax} so we may put them in
+ % an \incs{edef} safely.\ilrr
+ \fi
+ \fi}% of \cs{edef}
+ \ifx\gmu@thou@putter #2% if we are at end of the digits…
+ \edef\gmu@tempa{%
+ \ifcase\@tempcnta
+ \gmu@thou@o\or\gmu@thou@i\or\gmu@thou@ii
+ \fi}%
+ \@xa\let\gmu@tempa\gmu@thousep% … we set the proper \CS…
+ \else% or …
+ \afterfi{% iterate.
+ \gmu@thou@putter#2}% of \cs{afterfi}
+ \fi% of if end of digits.
+}% of \cs{gmu@thou@putter}.
+
+\def\gmu@thousep{\,}% in Polish the recommended thousand separator is
+
+\pdef\xathousep#1{\@xa\thousep\@xa{\the#1}}
+
+\def\shortthousep{%
+ \DeclareCommand\thous{
+ D {\NoValue} % decimal argument
+ }{%
+ % we declare it as a command with Q-type argument to allow spaces
+ % between digits.
+ \ifmmode\hbox\bgroup\@gmu@mmhboxtrue\fi
+ \IfValueTF{##1}{% we are given a sequence of digits
+ \@tempcnta=##1\relax
+ \ifnum\@tempcnta<0 $-$%
+ \@tempcnta=-\@tempcnta
+ \fi
+ \xathousep\@tempcnta
+ \if@gmu@mmhbox\egroup
+ \else\@xa\spifletter
+ \fi
+ }%
+ {% no bare digits given, then we assume the argument is braced.
+ \thousep
+ }%
+ }% of |\thous|.
+}% of |\shortthousep|.
+
+
+\DeclareCommand\ATfootnotes{s}{% \chgs{2008/11/29 v0.98 moved here
+ % from my own private macro package to allow the beauty of these
+ % footnotes for the general audience}
+ % \stanza
+ % We make the footnote mark in the footnote |\scriptsize| not
+ % |\scriptscriptsize|.\nostanza
+ \IfValueT{#1}% the following setting is suitable for old style
+ % numbers in footnote marks, therefore I~place it in the starred
+ % version of the command.
+ {\prependtomacro\gmu@ATfootnotes{%
+ \pdef\@makefnmark{%
+ \mbox {\normalfont \textsuperscript {\smaller[3]\@thefnmark }}}%
+ }% of prepend,
+ }% of |\IfValueT|.
+ %
+ \gmu@ATfootnotes
+ \gmu@AT@ampulex\maketitle% without \pk{hyperref}
+ \ifdefined\HyOrg@maketitle
+ \afterfi{\gmu@AT@ampulex\HyOrg@maketitle}% with \pk{hyperref}
+ \fi
+}
+
+\pdef\gmu@AT@ampulex#1{%
+ \typeout{@@@@@^^J^^J\@nx#1^^J^^J%
+ @@@@ meaning:^^J\meaning#1%
+ }%
+ \ampulexdef#1{\def\@makefnmark}%
+ \if@twocolumn
+ {\gmu@ATfootnotes\if@twocolumn}% Ampulex redefinition of
+ % \incs{maketitle} for the standard classes.
+ \ampulexdef#1{\long\def\@makefntext}%
+ \if@twocolumn{\gmu@ATfootnotes\if@twocolumn}% Ampulex redefinition
+ % of \incs{maketitle} for \pk{mwcls}.
+}
+
+\pdef\gmu@ATfootnotes{%
+ % And we make the footnote number not be in superscript but on the
+ % base line, according to Andrzej Tomaszewski's suggestion on
+ % Bacho\TeX\ 2008, and the same size as in the footnote mark.\nostanza
+ \long\pdef\@makefntext##1{%
+ \ifdefined\@parindent \parindent\@parindent
+ \else \parindent 1em\relax
+ \fi
+ \indent{\ATf@font\scriptsize% ^^A \hphantom{19}\llap
+ {\@thefnmark}}%
+ \gmu@fnhook
+ \enspace\ignorespaces##1}%
+}
+
+\let\ATf@font\normalfont
+
+\emptify\gmu@fnhook
+
+
+\pdef\rrthis{% ‘rag right this’: make only the current paragraph
+ % ragged right (e.g.\ if the paragraph consists of a~long \ac{URL}).
+ % \chgs{2008/12/01 v0.98 added}
+ \begingroup\rightskip=0sp plus \hsize \endgraf\endgroup}
+
+\pdef\centerthis{% 2009/12/15
+ \begingroup
+ \rightskip=1\rightskip plus \hsize
+ \leftskip=1\leftskip plus\hsize
+ \parfillskip=\z@skip
+ \endgraf\endgroup}
+
+
+\def\TrzaskaTilde{%
+ \@xa\DeclareCommand\@xa\gmu@smarttilde
+ \@xa{\@xa T\@xa{\all@stars~}}{%
+ \IfValueTF{##1}{\nobreakspace{}}%
+ {\ifdim\dimexpr\hsize-\leftskip-\rightskip
+ -\ifdim\hangindent<\z@-\fi\hangindent % the last
+ % parameter is used with respect to the \pk{floatflt} package.
+ >%
+ \ifdim\f@size pt>\dimexpr10pt-1sp\relax
+ 168dd
+ \else
+ 144dd
+ \fi
+ \nobreakspace {}%
+ \else
+ \ %
+ \fi
+ }% of |\gmu@ifstar|'s else,
+ }% of |\gmu@smarttilde|,
+ \let~\gmu@smarttilde
+}% of |\TrzaskaTilde|.
+
+
+\newcommand{\clearemptydoublepage}{%
+ \newpage{\pagestyle{empty}\cleardoublepage}}
+
+\foone\obeylines{%
+ \def\disobeylines{% for arguments in which line end is active to
+ % simulate normal behaviour
+ \ifnum\catcode`\^^M=\active%
+ \pdef^^M{\@ifnextgroup{\ifhmode\unskip\space\fi}{\gmu@disMinner}}%
+ \def\gmu@disMinner##1{%
+ \ifx^^M##1\endgraf%
+ \else\afterfi{\ifhmode\unskip\space\fi}\fi##1}%
+ \fi}%
+}
+
+
+\DeclareCommand\*{Q{0123456789}{1}}
+{\gmu@flexhyphen
+ \gmu@star@loop0{#1}\relax
+}%
+
+\def\gmu@star@loop#1#2{% this is an expandable loop as in The
+ % \eTeX\ Manual p.~9.
+ \ifnum#1<\numexpr#2\relax%
+ \gmu@lowstar
+ \gmu@flexhyphen
+ \@xa\gmu@star@loop
+ \@xa{\number\numexpr#1+1\@xa}%
+ \@xa{\number#2\@xa}%
+ \fi}
+
+\ifdefined\XeTeXversion
+
+\foone{%
+ \catcode`„\active
+ \catcode`”\active
+ \catcode`’\active
+ \catcode`—\active
+ \catcode`–\active
+}{%
+ \def\activequotes{%
+ \incsdef„{}{\@ifnextchar—%
+ {\lv\llap{\string„}\pauzadial}{\string„}}%
+ \incsdef”{}{\string”\@ifnextanyRS{.,}{\quotkern}{}}%
+ \incsdef’{}{\string’\@ifnextanyRS{.,}{\quotkern}{}}%
+ \catcode`„\active
+ \catcode`”\active
+ }%
+ \def\activepunctsQ {„”’—–}%
+}
+
+\catcode`ѥ\active
+
+\DeclareCommand\ac {b} {%
+ \IfValueTF{#1}
+ {%
+ \acro{#1}%
+ }
+ {\ac@u}%
+}
+
+\def\ac@kernel#1{{\gmu@acrokernel {#1}}}% |#1| in braces because |\acrocore|
+ % valid in \ty{Dzienniczek} uses
+ % |\lowercase| (that requires braced text).
+
+
+\@xa\def\@xa\@dc@basicdelims\@xa{%
+ \two@Ms \par \relax
+ \bgroup
+ \egroup \begingroup \endgroup
+ \begin \end
+ $% ^^A$
+ \(\)\[\]% other math delims
+ &\\% tabular delims
+}
+
+\let\@dc@basicdelimsp\@dc@basicdelims
+
+\@xa\addtomacro\@xa\@dc@basicdelimsp
+\@xa{\all@spaces}
+
+\@xa\def\@xa\@dc@punctanddelims
+\@xa{\@dc@basicdelims :,.;?!„”«»‹›"'`‘’}%
+
+\let \@dc@acpunctanddelims \@dc@punctanddelims
+
+\@xa\addtomacro\@xa\@dc@acpunctanddelims
+\@xa{\activepunctsQ}
+
+\let \@dc@acpunctanddelimsp \@dc@punctanddelims
+
+\@xa\addtomacro\@xa\@dc@acpunctanddelimsp
+\@xa{\all@spaces}
+
+\addtomacro\@dc@acpunctanddelimsp{~}
+
+\DeclareCommand\ac@u{
+ >\@xa U{\@dc@acpunctanddelimsp ()[]<>ѥ} \default{}
+ \eacher {\ac@kernel}
+ >iW{ѥ}
+}
+{\text{#1}}
+
+\fi % of if \XeTeX\ of l.~\ref{12322}.
+
+\@namedef{enumerate*}{%
+ \ifnum\@enumdepth>\thr@@
+ \@toodeep
+ \else
+ \advance\@enumdepth\@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \@xa\list\csname label\@enumctr\endcsname{%
+ \partopsep\topsep \topsep\z@ \leftmargin\z@
+ \itemindent\@parindent %|%\advance\itemindent\labelsep|
+ \labelwidth\@parindent
+ \advance\labelwidth-\labelsep
+ \listparindent\@parindent
+ \usecounter \@enumctr
+ \def\makelabel##1{##1\hfil}}%
+ \fi}
+\@namedef{endenumerate*}{\endlist}
+
+\@namedef{itemize*}{%
+ \ifnum\@itemdepth>\thr@@
+ \@toodeep
+ \else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \@xa\list\csname\@itemitem\endcsname{%
+ \partopsep\topsep \topsep\z@ \leftmargin\z@
+ \itemindent\@parindent
+ \labelwidth\@parindent
+ \advance\labelwidth-\labelsep
+ \listparindent\@parindent
+ \def\makelabel##1{##1\hfil }}%
+ \fi}
+\@namedef{enditemize*}{\endlist}
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmtypos.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmurl.sty b/Master/texmf-dist/tex/latex/gmutils/gmurl.sty
new file mode 100644
index 00000000000..fa5dd76af8a
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/gmutils/gmurl.sty
@@ -0,0 +1,306 @@
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmurl.sty” generated with the DocStrip utility.
+%%
+%%
+%% The original source files were:
+%%
+%% gmutils/gmutils.gmd (with options: `url')
+%%
+%%
+%% Copyright ©
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
+%%
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{gmurl}
+ [2010/10/24 v0.993 modifications to the url package (GM)]
+
+
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
+
+
+\RequirePackage{gmcommand}
+
+
+\def\urladdstar{%
+ \AtBeginDocument{%
+ \@ifpackageloaded{hyperref}{%
+ \Store@Macro\url
+ \pdef\url{\gmu@ifstar{\nolinkurl}{\storedcsname{url}}}%
+ }{}}}
+
+\@onlypreamble\urladdstar
+
+\@ifXeTeX{%
+ \pdef\UrlFix{\AtBeginDocument{%
+ \@ifpackageloaded{url}{\gmu@UrlFix}{}}%
+ \relaxen\UrlFix}%
+ %
+ \AtBeginDocument{%
+ \pdef\UrlFix{%
+ \@ifpackageloaded{url}{\gmu@UrlFix}{}%
+ \relaxen\UrlFix}}%
+}
+{%
+ \pdef\UrlFix{\PackageWarning{gmutils}{!!! The \string\UrlFix\space
+ declaration works only with XeTeX}}%
+}
+
+\@ifXeTeX{}{%
+ \edef\gmu@restoreUpUpUp{\catcode`\@nx\^^^=\the\catcode`\^^^}%
+ \AtEndOfPackage\gmu@restoreUpUpUp
+ \catcode`\^^^=9 }
+
+\def\gmu@UrlFix{%
+ % \stanza
+ % default style assignments
+ \def\UrlBreaks{\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\;\do\]%
+ \do\)\do\,\do\?\do\'\do\"\do\+\do\=\do\#\do\%\do\~\do\_\do\|%
+ \do\{\do\}\do\$}%
+ \def\UrlBigBreaks{\do\:}%
+ \def\UrlNoBreaks{\do\(\do\[\do\{}%
+ \def\UrlSpecials{%
+ \do\ {\hbox{\visiblespace}}\do\^^M{\hbox{\visiblespace}}}%
+ % \stanza
+ %
+ % \stanza
+ \def\Url@Format##1{%
+ \UrlFont
+ \ifdefined\verbatim@specials
+ \catcode`\>\active
+ \verbatim@specials
+ \verbatim@mathhack
+ \fi % setting of
+ % the escape char, begin and end group and optionally math shift,
+ % defined in \pk{gmverb}.
+ \gmu@UrlSetup
+ \UrlLeft
+ \edef\gmu@theendlinechar{\the\endlinechar}%
+ \endlinechar\m@ne
+ \kern\z@% to forbid hyphenating the first word if the \ac{URL}
+ % begins with a~word
+ \hyphenchar\font=\UrlHyphenchar\relax
+ \let\-\gmu@discretionaryhyphen
+ \scantokens{##1}%
+ \endlinechar\gmu@theendlinechar\relax
+ \UrlRight
+ }% of |\Url@Format|.
+ % \stanza
+ \edef\UrlHyphenchar{%
+ \ifdefined\gmv@hyphenchar\gmv@hyphenchar
+ \else"A6 \fi}% \label{UrlHyphenchar} broken bar, |¦| or the same as
+ % provided in \pk{gmverb} for verbatims. You
+ % can redefine it as you please. This char is used as the
+ % hyphenation char in \ac{URL}s and therefore should be different
+ % from |-| (hyphen), which is often a part of an \ac{URL}. The
+ % broken bar seems to be quite unlikely in \ac{URL}s and/or file
+ % names.
+ % \stanza
+ \def\verbatim@mathhack{%
+ \ifdefined\verbatim@specials@list
+ \@xa\verbatim@mathhack@\verbatim@specials@list
+ \fi
+ }%
+ % \stanza
+ \def\verbatim@mathhack@##1##2##3##4##5##6{%
+ \IfValueT{##4}{%
+ \edef\gmu@thinmuskip{\the\thinmuskip}%
+ \edef\gmu@medmuskip{\the\medmuskip}%
+ \edef\gmu@thickmuskip{\the\thickmuskip}%
+ \begingroup
+ \lccode`\~=`##4\lowercase{%
+ \endgroup\def~####1~}%
+ {$\thinmuskip\gmu@thinmuskip\relax
+ \medmuskip\gmu@medmuskip\relax
+ \thickmuskip\gmu@thickmuskip\relax
+ ####1%
+ $}%
+ \catcode`##4\active
+ }%
+ }%
+ %\stanza
+ \def\gmu@UrlSetup{%
+ \medmuskip\Urlmuskip \thickmuskip\medmuskip \thinmuskip0mu%
+ \relpenalty\UrlBigBreakPenalty \binoppenalty\UrlBreakPenalty
+ \def\do{\gmu@doUrlMath\UrlBreakPenalty}\UrlBreaks % bin
+ % (\incs{hyphenpenalty} anyway)
+ \def\do{\gmu@doUrlMath\UrlBigBreakPenalty}\UrlBigBreaks % rel
+ % (\incs{hyphenpenalty} anyway)
+ \def\do{\gmu@doUrlMath\@M}\UrlNoBreaks % open (no break)
+ \def\do{\gmu@doUrlMathAc\UrlBreakPenalty}% (\incs{hyphenpenalty})
+ \UrlSpecials
+ \if \iffontchar\font"2329 1\else0\fi\iffontchar\font"232A 1\else2\fi
+ % \nostanza we check whether the font provides both left and right
+ % angle brackets. \nostanza
+ \gmu@measurewd{^^^^2329}%
+ \edef\gmu@tempa{%
+ \@nx\gmu@doUrlMathAc\@M\@nx\<{%
+ \hbox to\gmu@tempb{\unexpanded{\hss\char"2329 \hss}}}%
+ }\gmu@tempa
+ \gmu@measurewd{^^^^232a}%
+ \edef\gmu@tempa{%
+ \@nx\do\@nx\>{%
+ \hbox to\gmu@tempb{\unexpanded{\hss\char"232A \hss}}}%
+ }\gmu@tempa
+ \else
+ \gmu@doUrlMathAc\@M\<{\langle}\do\>{\rangle}%
+ \fi
+ \iffontchar\font"22C6 % low star
+ \do\*{\hbox{\char"22C6 }}%
+ \else \do\**%
+ \fi
+ \ifx\do@url@hyp\@empty
+ \gmu@measurewd{-}% this macro is defined in line \ref{@measurewd}.
+ \edef\gmu@tempa{%
+ \unexpanded{\gmu@doUrlMathAc\@M\-}%
+ {\hbox to \gmu@tempb{\unexpanded{\hss-\hss}}%
+ \@nx\-}% hyphen is a
+ % good point for hyphenation, but the hyphenation char should
+ % be sth. else, and it is indeed: |¦| (broken bar,
+ % |\char"A6|). See also line \ref{UrlHyphenchar}
+ }\gmu@tempa
+ \fi
+ \addfontfeature{Ligatures=NoCommon, Mapping=none}% instead of
+ % ‘doing’ \incs{ver\+bat\+im\+@\+no\+lig\+@\+list}.
+ }% of |\gmu@UrlSetup|.
+ % \stanza
+ %
+ % \stanza
+ \def\gmu@doUrlMath##1##2{%\
+ % \begin{enumargs}
+ % \item value of the penalty (used as a~Boolean: if $<$
+ % \thous 10000, \nlperc\cs{hyphenpenalty} will be used anyway, if $\ge$
+ % \thous10000, there will be no \incs{discretionary}),
+ % \item the char, given as |\⁄<char>|.
+ % \end{enumargs}
+ \begingroup
+ \lccode`\~=`##2\lowercase{%
+ \endgroup\def~{\@ifnextchar~}%
+ \@xa\addtomacro\@xa~}% of |\lowercase|.
+ \ifnum##1<\@M
+ {%
+ {\char`##2\csname gmu@dbl\string##2kern\endcsname}% if next is the same char
+ {\ifmmode\char`##2% else
+ \else\gmu@urlbreakable{##1}{##2}%
+ \fi}%
+ }% of |\addtomacro|'s argument |\ifnum| true.
+ \else
+ {%
+ {\char`##2\csname gmu@dbl\string##2kern\endcsname}{\char`##2}%
+ }% of |\addtomacro|'s argument |\ifnum| false.
+ \fi
+ \catcode`##2=\active
+ }% of |\gmu@doUrlMath|.
+ % \stanza
+ \def\gmu@doUrlMathAc##1##2##3{%\
+ % \begin{enumargs}
+ % \item (value of) a~penalty (see the remark to \inverb|##1| of
+ % the previous macro),
+ % \item the char (as |\⁄<char>|),
+ % \item the definition.
+ % \end{enumargs}
+ \begingroup
+ \lccode`\~=`##2\lowercase{%
+ \endgroup\def~{\@ifnextchar~}%
+ \@xa\addtomacro\@xa~}% of |\lowercase|.
+ \ifnum ##1<\@M
+ {%
+ {\ifmmode\char`##2\else$##3\m@th$\fi}%
+ {\ifmmode\char`##2%
+ \else\discretionary{\hbox{$##3\m@th$}}{}{\hbox{$##3\m@th$}}%
+ \fi}%
+ }% of |\addtomacro|'s argument if num true.
+ \else
+ {%
+ {\ifmmode\char`##2\else$##3\m@th$\fi}{\ifmmode\char`##2\else$##3\m@th$\fi}%
+ }% of |\addtomacro|'s argument if num false.
+ \fi
+ \catcode`##2=\active
+ }% of |\gmu@doUrlMathAc|.
+ % \stanza
+ \pdef\gmu@url@rigidbreak##1##2{\discretionary{\char`##2}{}{\char`##2}}%
+ % \stanza
+ \pdef\gmu@url@flexbreak##1##2{\penalty\@M \hskip\z@ plus0,03em
+ \char`##2\penalty##1\hskip\z@ plus0,03em\relax}%
+ % \stanza
+ \let\gmu@urlbreakable\gmu@url@flexbreak
+ % \stanza
+ \def\Url@z##1{%
+ % Do any hyper referencing due to hyperref (or perform a url-def)
+ \Url@HyperHook
+ % Now do the formatting in a group (can also have \incs{Url@HyperHook} take
+ % this as an argument). \nostanza
+ {\Url@Format{##1}}%
+ \endgroup}%
+ % \stanza
+ \DeclareUrlCommand\file{\urlstyle{sf}}%
+ % \stanza
+ \emptify\Url@moving% with our settings |\url| is pretty allowed in
+ % moving arguments, I~hope.
+}% of |\gmu@UrlFix|.
+
+\DeclareCommand\UrlSlashKern{O{tt}m}%
+{\AtBeginDocument{%
+ \@nameedef{url@#1style}{\def\@nx\UrlFont{%
+ \@xanxcs{#1family}%
+ \def\@xanxcs{gmu@dbl\string\/kern}%
+ {\kern#2\relax}%
+ }% of |\UrlFont|
+ }% of |\url#1style|
+ \urlstyle{#1}%
+ }% of |\AtBeginDocument|
+}% of |\UrlSlashKern|
+
+\def\DeclareUrlCommand#1#2{\pdef#1{\leavevmode\begingroup #2\Url}}
+
+\foolc ~ : {%
+ \@ifXeTeX{%
+ \def\metaat~{%
+ \penalty\@M \hskip\z@skip
+ \meta{аt}% it's a Cyrillic »a«!
+ \penalty\exhyphenpenalty
+ \hskip\z@skip
+ }%
+ %
+ \def\metadot~{%
+ \penalty\@M \hskip\z@skip
+ \meta{dоt}% it's a Cyrillic »o«!
+ \penalty\exhyphenpenalty
+ \hskip\z@skip
+ }%
+ }% of if \XeTeX
+ {%
+ \def\metaat~{\PackageError{gmurl}{Command \bslash metaat
+ works only in XeTeX}@}%
+ %
+ \def\metadot~{\PackageError{gmurl}{Command \bslash metaat
+ works only in XeTeX}.}%
+ }% of if not XeTeX
+}% of |\foolc|
+
+%%% (For my GNU Emacs:)
+%%% Local Variables:
+%%% mode: doctex
+%%% coding: utf-8
+%%% End:
+\endinput
+%%
+%% End of file `gmurl.sty'.
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmutils.sty b/Master/texmf-dist/tex/latex/gmutils/gmutils.sty
index 745e0f86f03..52afda5be49 100644
--- a/Master/texmf-dist/tex/latex/gmutils/gmutils.sty
+++ b/Master/texmf-dist/tex/latex/gmutils/gmutils.sty
@@ -1,3430 +1,126 @@
-%
-% \GetFileInfo{gmutils.sty}
-% \title{The \pk{gmutils} Package\thfileinfo}
-% \author{Grzegorz Murzynowski}
-% \maketitle
-%
-% \let\ty\emph
-%
-% \begin{copyrnote}
-%
-%%Written by Grzegorz Murzynowski,
-%% natror at o2 dot pl
-%%
-%% \copyright\,2005, 2006, 2007, 2008, 2009, 2010 by Grzegorz Murzynowski.
+%%
+%% \iffalse ^^A we skip the debug setting
+\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
+%% \fi
+%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
+%% This is file “gmutils.sty” generated with the DocStrip utility.
+%%
%%
-%% This program is subject to the \LaTeX\ Project Public License.
-%% See ^^A
-%% \url{http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html} ^^A
-%% for the details of that license.\rrthis
+%% The original source files were:
%%
-%% LPPL status: "author-maintained".\par
+%% gmutils/gmutils.gmd (with options: `utils')
%%
-%% Many thanks to my \TeX\ Guru Marcin Woliński for his \TeX nical ^^A
-%% support.
-%
-%\end{copyrnote}
%%
+%% Copyright © 2005, 2006, 2007, 2008, 2009, 2010
+%% by Grzegorz ‘Natror’ Murzynowski
+%% natror (at) o2 (dot) pl
+%%
+%% This program is subject to the LaTeX Project Public License.
+%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
+%% for the details of that license.
%%
-% \RecordChanges
-% \ChangesStart{}{1000/00/0}
-%
-% \chschange{v0.59}{06/09/04}{396}
-% \chschange{v0.61}{06/09/06}{432}
-% \chschange{v0.62}{06/9/7}{444}
-% \chschange{v0.65}{06/9/28}{700}
-% \chschange{v0.66}{06/10/5}{698}
-% \chschange{v0.67}{06/10/11}{739}
-% \chschange{v0.68}{06/10/12}{812}
-% \chschange{v0.69}{06/10/17}{844}
-% \chschange{v0.70}{06/10/20}{852}
-% \chschange{v0.71}{06/10/27}{876}
-% \chschange{v0.72}{06/11/14}{906}
-% \chschange{v0.74}{06/12/1}{1185}
-% \chschange{v0.76}{07/4/9}{1538}
-% \chschange{v0.77}{07/4/14}{1547}
-% \chschange{v0.78}{07/4/26}{1685}
-% \chschange{v0.80}{2007/4/29}{1689}
-% \chschange{v0.84}{2007/11/13}{2684}
-% \chschange{v0.85}{2007/11/16}{2795}
-% \chschange{v0.87}{2008/8/3}{4027}
-% \chschange{v0.88}{2008/8/3}{4040}
-% \chschange{v0.90}{2008/8/4}{4035}
-% \chschange{v0.91}{2008/8/6}{4055}
-% \chschange{v0.92}{2008/8/11}{4133}
-% \chschange{v0.93}{2008/8/21}{4140}
-% \chschange{v0.93}{2008/8/30}{4501}
-% \chschange{v0.94}{2008/10/4}{4880}
-% \chschange{v0.95}{2008/10/8}{4908}
-% \chschange{v0.96}{2008/11/21}{5363}
-% \toCTAN{2008/11/21 v0.96}
-% \chschange{v0.97}{2008/11/22}{5375}
-% \toCTAN{2008/11/22 v0.97}
-% \chschange{v0.98}{2008/11/30}{5429}
-% \chschange{v0.98}{2008/12/5}{5577}[\cs{DeclareCommand}]
-% \chschange{v0.98}{2008/12/5}{5627}[\cs{fakeonum}]
-% \chschange{v0.98}{2008/12/9}{6035}[\cs{DeclareCommand}, \cmd\arg]
-% \chschange{v0.98}{2008/12/10}{6129}
-% [\cmd\DeclareEnvironment]
-% \chschange{v0.98}{2008/12/10}{6147}
-% [\cmd\arg\ in verbatims]
-% \chschange{v0.98}{2008/12/12}{6535}
-% [\cmd\UrlFix]
-% \chschange{v0.98}{2008/12/14}{6656}
-% [type settings for \pk{gmdoc} (\cmd\narrativett) and for
-% \cmd\verbatimspecials]
-% \chschange{v0.991}{2010/3/4}{8257}
-% [some shorthands and major development of \cmd\DeclareCommand,
-% including ‘Knuthian’ and general optional arguments and
-% ‘\cmd\afterassignment’ pseudo-argument]
-% \toCTAN{2010/03/04 v0.991}
-%
-% \skiplines we skip the driver
-\ifnum\catcode`\@=12
-
-\documentclass[debug, countalllines, codespacesgrey, outeroff,
-pagella, trebuchet, cursor, fontspec=quiet]{gmdocc}
-\usepackage{eufrak}% for |\continuum| in the commentary.
-\twocoltoc
-\begin{document}
-
-\DocInput{\jobname.sty}
-\PrintChanges
-\thispagestyle{empty}
-\typeout{%
- Produce change log with^^J%
- makeindex -r -s gmglo.ist -o \jobname.gls \jobname.glo^^J
- (gmglo.ist should be put into some texmf/makeindex directory.)^^J}
-\typeout{%
- Produce index with^^J%
- makeindex -r \jobname^^J}
-\afterfi{\end{document}}
-
-\fi% of driver pass
-%\endskiplines
-
+%% LPPL status: "author-maintained".
+%%
+%%
+%%
+%% For the documentation please refer to the file(s)
+%% gmutils.{gmd,pdf}.
+%%
+%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{gmutils}
- [2010/03/04 v0.991 some rather TeXnical macros, some of them tricky (GM)]
-
-%
-% \tableofcontents
-%
-% \division{Intro}
-%
-% The \pk{gmutils.sty} package provides some macros that are
-% analogous to the standard \LaTeX\ ones but extend their
-% functionality, such as |\@ifnextcat|, |\addtomacro| or |\begin(*)|.
-% The others are just conveniences I~like to use in all my TeX
-% works, such as |\afterfi|, |\pk| or |\cs|.
-%
-% I wouldn't say they are only for the package writers but I~assume
-% some nonzero \LaTeXpar-awareness of the user.
-%
-% For details just read the code part.
-%
-% \begin{gmlonely}
-% \subdivision{Installation} Unpack the \file{gmutils-tds.zip}
-% archive (this is an archive that conforms the \acro{TDS} standard,
-% see \file{CTAN/tds/tds.pdf}) in some texmf directory or just put
-% the \pk{gmutils.sty} somewhere in the \file{texmf/\:tex/\:latex}
-% branch. Creating a~\file{texmf/\:tex/\:latex/\:gm} directory may
-% be advisable if you consider using other packages written by me.
-%
-% Then you should refresh your \TeX\ distribution's files' database
-% most probably.
-% \end{gmlonely}
-%
-% \subdivision{Contents of the \pk{gmutils.zip} archive}
-%
-% The distribution of the \pk{gmutils} package consists of the
-% following three files and a~\acro{TDS}-compliant archive.
-% \begin{verse}
-% \pk{gmutils.sty}\\
-% \pk{README}\\
-% \pk{gmutils.pdf}\\
-% \pk{gmutils.tds.zip}
-% \end{verse}
-%
-% \begin{gmlonely}
-% \subdivision{Compiling of the documentation}
-%
-% The last of the above files (the \pk{.pdf}, i.e., \emph{this
-% file}) is a~documentation compiled from the \pk{.sty} file by
-% running \LaTeX\ on the \pk{gmutils.sty} file twice
-% (|xelatex gmutils.sty| in the directory you wish the
-% documentation to be in, you don't have copy the \file{.sty} file
-% there, \TeX\ will find it),
-% then MakeIndex on the \file{gmutils.idx} file, and then \LaTeX\
-% on \file{gmutils.sty} once more.
-%
-% MakeIndex shell command:
-% \[\hbox{|makeindex -r gmutilsDoc|}\]
-% The |-r| switch is to forbid MakeIndex to make implicit ranges since
-% the (code line) numbers will be hyperlinks.
-%
-% Compiling the documentation requires the packages:
-% \pk{gmdoc} (\pk{gmdoc.sty} and \pk{gmdocc.cls}), \pk{gmverb.sty},
-% \pk{gmutils.sty}, \pk{gmiflink.sty} and also some standard packages:
-% \pk{hyperref.sty}, \pk{color.sty}, \pk{geometry.sty},
-% \pk{multicol.sty}, \pk{lmodern.sty}, \pk{fontenc.sty} that should
-% be installed on your computer by default.
-%
-% If you had not installed the \pk{mwcls} classes (available on
-% CTAN and present in \TeX\ Live e.g.), the result of your
-% compilation might differ a~bit from the \pk{.pdf} provided in this
-% \pk{.zip} archive in formatting: If you had not installed
-% \pk{mwcls}, the standard \pk{article.cls} class would be used.
-% \end{gmlonely}
-%
-\ifx\XeTeXversion\relax
- \let\XeTeXversion\@undefined% If someone earlier used
-% \nlperc|\@ifundefined{XeTeXversion}| to test
-% whether the engine is \XeTeX, then \incs{XeTeXversion} \emph{is} defined
-% in the sense of \eTeX\ tests. In that case we |\let| it to something
-% really undefined. Well, we might keep sticking to \incs{@ifundefined},
-% but it's a~macro and it eats its arguments, freezing their catcodes,
-% which is not what we want in line \ref{not@ifundef}.
-\fi
-
-\ifdefined\XeTeXversion
-\XeTeXinputencoding utf-8 % we use Unicode dashes later in this file.
-\fi% and if we are not in \XeTeX, we skip them thanks to \XeTeX-test.
-
-
- %^^A % \division{Ignoring spaces and line ends in packages and classes}
- %^^A %
- %^^A % Spurious spaces and line ends that convert to spaces are a~plague
- %^^A % for the package writers including me. On the other hand, changing
- %^^A % catcodes is dangerous and should be done with care. Therefore
- %^^A % I~provide a~declaration that reverts its effect at most at the end
- %^^A % of a~package or class.
- %^^A
- %^^A \def\package@ignorespaces{%
- %^^A \catcode`\ =9
- %^^A \endlinechar-1
- %^^A \AtEndOfPackage{\package@restorespace}}
- %^^A
- %^^A \def\package@restorespace{\catcode`\ =10 \endlinechar13 }
- %^^A
-
-% \division{Options}
-
-\newif\ifgmu@quiet
-
-\DeclareOption{quiet}{\gmu@quiettrue}
-
-\ProcessOptions
-
-%
-% \division{A~couple of abbreviations}
-% {\DoIndex{\@nx \@xa} \Define\@xa \Define\@nx
-\let\@xa\expandafter
-\let\@nx\noexpand
-
-\def\@xau#1{\unexpanded\@xa{#1}}
-%\changes{v0.94}{2008/10/4}{added}
-% \nostanza Note that there's only one |\expandafter|, after
-% |\unexpanded|. It's because |\unexpanded| expands expandable tokens
-% and gobbles |\relax|es while looking for an opening brace or |\bgroup|.
-% Note also that it \emph{requires} a text in braces.
-%
-% \chgs{2010/03/04 v0.991 made 1-parameter}
-% Note also that (since v0.991) this is a 1-parameter macro so doesn't
-% expand subsequent tokens until meets a \<balanced text> but just
-% takes first single token or \<text>.
-
-
-
-%} \HideDefining*\pdef
-\def\pdef{\protected\def}
-%\changes{v0.93}{2008/08/20}{added}
-
-% And this one is defined, I~know, but it's not |\long| with the
-% standard definition and I~want to be able to |\gobble| a~|\par|
-% sometimes.
-% \Define\gobbletwo
-\long\def\gobble#1{}
-% \Define\@gobble
-\let\@gobble\gobble
-\let\gobbletwo\@gobbletwo
-
-
-% \HideDefining*\provide
-\long\pdef\provide#1{%\changes{v0.93}{2008/08/30}{added}
- \ifdefined#1% \UnDef
- \ifx\relax#1\afterfifi{\def#1}%
- \else\afterfifi{\gmu@gobdef}% \UnDef
- \fi
- \else\afterfi{\def#1}%
- \fi}
-
-
-\long\def\gmu@gobdef#1#{% \UnDef
- \def\gmu@tempa{}% it's a~junk macro assignment
- % to absorb possible prefixes.
- \@gobble}
-
-% \HideDefining*\pprovide
-\def\pprovide{\protected\provide}
-% \changes[\pprovide]{v0.93}{2008/08/30}{added} Note that both
-% |\provide| and |\pprovide| may be prefixed with |\global|, |\outer|,
-% |\long| and |\protected| because the prefixes stick to |\def|
-% because all before it is expandable. If the condition(s) is false
-% (|#1| is defined) then the prefixes are absorbed by a~junk
-% assignment.
-%
-% Note moreover that unlike \LaTeX's |\providecommand|, our
-% \cs{(p)provide} allow any parameters string just like |\def|
-% (because they just \emph{expand} to |\def|).
-%
-
-\long\def\@nameedef#1#2{% \changes{v0.93}{2008/08/30}{added}
- \@xa\edef\csname#1\endcsname{#2}}
-
-% \division{\cs{if}s as a~four-argument \LaTeX\ command robust to unbalanced \cs{if}s and \cs{fi}s}
-
-\long\def\gmu@if#1#2{%
- \csname if#1\endcsname#2\@xa\@firstoftwo\else\@xa\@secondoftwo\fi
-}
-
-% \division{\cs{firstofone} and the queer \cs{catcode}s}
-%
-% Remember that once a~macro's argument has been read, its
-% |\catcode|s are assigned forever and ever. That's what is
-% |\firstofone| for. It allows you to change the |\catcode|s locally
-% for a~definition \emph{outside} the changed |\catcode|s' group.
-% Just see the below usage of this macro `with \TeX's eyes', as my
-% \TeX\ Guru taught me.
-%
-\long\def\firstofone#1{#1}
-
-% ^^A \long\def\bracethis#1{{#1}}
-% ^^A \long\def\fooscant{\@xa\scantokens\bracethis}
-\long\pdef\scantwo#1#2{
- \begingroup\endlinechar\m@ne
- \@xa\endgroup\scantokens{#1#2}%
-}
-
-\long\def\@firstofthree#1#2#3{#1}
-\long\def\@secondofthree#1#2#3{#2}
-\long\def\@thirdofthree#1#2#3{#3}
-\long\def\@secondoffive#1#2#3#4#5{#2}
-
-% In some |\if›[cat›?›]|\ test I~needed to look only at the first token of
-% a~tokens' string (first letter of a~word usually) and to
-% drop the rest of it. So I~define a~macro that expands
-% to the first token (or \arg{text}) of its argument.
-%
-\long\def\@firstofmany#1#2\@@nil{#1}
-% \changes{v0.63}{06/9/9}{added}
-
-\long\def\@allbutfirstof#1#2\@@nil{#2}
-% \changes{v0.97}{2008/11/22}{added}
-% \changes{v0.98}{2008/11/22}{renamed from \cs{@secondofmany}}
-
-
-% \division{\cs{afterfi} and pals}
-
-% It happens from time to time that you have some sequence of macros
-% in an |\if…| and you would like to expand |\fi| before expanding
-% them (e.g., when the macros should take some tokens next to |\fi…|
-% as their arguments. If you know how many macros are there, you may
-% type a~couple of |\expandafter|s and not to care how terrible it
-% looks. But if you don't know how many tokens will there be, you
-% seem to be in a~real trouble. There's the Knuthian trick with
-% |\next|. And here another, revealed to me by my \TeX\ Guru.
-%
-% I~think the situations when the Knuthian (the former) trick is not
-% available are rather seldom, but they are imaginable at least: the
-% |\next| trick involves an assignment so it won't work e.g.\ in
-% |\edef|.
-%
-% But |\afterfi| and pals are sensitive to |\fi|s that may occur in
-% macros' arguments so probably the safest and expandable way is the
-% |\expandafter\@›(first⁄|second›)oftwo| trick. %^^A|
-%^^A % One warning: those macros peel the braces off, i.e.,
-%^^A % \[|\if..\afterfi{\@makeother\^^M}\fi|\]
-%^^A % causes a~leakage of
-%^^A % |^^M|\catother. To avoid pollution write
-%^^A % \[|\if..\afterfi{\bgroup\@makeother\^^M\egroup}\fi|\,.\]
-%
-
-\def\longafterfi{%
- \long\def\afterfi##1##2\fi{\fi##1}}
-\longafterfi
-% And two more of that family:
-\long\def\afterfifi#1#2\fi#3\fi{\fi\fi#1}
-% \changes{v0.94}{2008/09/09}{\cs{if} removed from parameters' string}
-\long\def\afteriffifi#1#2\fi#3\fi{\fi#1}
-% Notice the refined elegance of those macros, that cover both `then'
-% and `else' cases thanks to |#2| that is discarded.
-
-\long\def\afterififfififi#1#2\fi#3\fi#4\fi{\fi#1}
-\long\def\afteriffififi#1#2\fi#3\fi#4\fi{\fi\fi#1}
-\long\def\afterfififi#1#2\fi#3\fi#4\fi{\fi\fi\fi#1}
-
-% \division{\cs{foone}}
-
-% The next command, |\foone|, is intended as two-argument for
-% shortening of the |\begingroup…\firstofone{\endgroup…}| hack.
-%
-\long\def\foone#1{\begingroup#1\relax\egfirstofone}
-% \UnDef
-\long\def\egfirstofone#1{\endgroup#1}
-
-\def\fooatletter{\foone\makeatletter}
-
-
-
-% \division{\cs{@ifempty}, \cs{IfAmong}, \cmd\IfIntersect\ \cs{@ifinmeaning}}
-% After a~short deliberation I~make the \cmd\IfAmong…\cmd\among\ and
-% \cmd\IfIntersect\ macros' names apeless since they are intended for
-% the macro and class writers, at the same level of abstraction as
-% \cmd\DeclareCommand.
-%
-\long\pdef\@ifempty#1{%\
- % \begin{enumargs}
- % \item the token(s) we test, it may be just |{}|,
- % \item the stuff executed if |#1| is empty (is |{}|),
- % \item the stuff executed if |#1| consists of at least one token.
- % \end{enumargs}
- \def\gmu@reserveda{#1}%
- \ifx\gmu@reserveda\@empty\@xa\@firstoftwo
- \else\@xa\@secondoftwo
- \fi}
-
-\long\def\@ifnonempty#1#2#3{\@ifempty{#1}{#3}{#2}}
-
-\long\pdef\IfAmong#1\among#2{%\label{IfAmong}\
- % \begin{enumargs}
- % \item the token(s) whose presence we check,
- % \item the list of tokens in which we search |#1|,
- % \item the ‘if found’ stuff,
- % \item the ‘if not found’ stuff.
- % \end{enumargs}
- % \chgs{2008/12/05 v0.98 split from \cs{IfAmong}}
- %
- \long\def\gmu@among@##1#1##2\gmu@among@{%
- \@ifempty{##2}\@secondoftwo\@firstoftwo}%
- \gmu@among@#2#1\gmu@among@}
-
-\long\def\IfIntersect#1#2{% this (not expandable) macro checks\
- % whether the list of tokens \inverb|#1| and \inverb|#2| have\
- % nonempty intersection and if so executes \incs{@firstoftwo} or\
- % else \incs{@secondoftwo}, so it's a~4-argument command:\
- % \begin{enumargs}
- % \item first list to match,
- % \item second list to match,
- % \item if match (nonempty intersection),
- % \item if not match (empty intersection).
- % \end{enumargs}
- \let\IfIntersect@next\@secondoftwo
- \gmu@foreach#1\gmu@foreach{%
- \@xa\IfAmong\gmu@forarg\among{#2}
- {\let\IfIntersect@next\@firstoftwo}{}}%
- \IfIntersect@next}
-
-% We need a~macro that iterates over every token on a~list. \LaTeX's
-% |\@for| iterates over a~list separated with commas so it's not the
-% case. Our macro is much simpler.
-\long\def\gmu@foreach#1\gmu@foreach#2{%
- \long\def\gmu@forer##1{%
- \ifx\gmu@foreach##1\else
- \long\def\gmu@forarg{##1}%
- #2%
- \@xa\gmu@forer
- \fi}%
- \gmu@forer#1\gmu@foreach}
-
-
-
-\long\pdef\@ifinmeaning#1\of#2{% \
- % \begin{enumargs}
- % \item the token(s) whose presence we check,
- % \item the macro in whose meaning we search |#1| (the first token of
- % this argument is expanded one level with |\expandafter|),
- % \item the `if found' stuff,
- % \item the `if not found' stuff.
- % \end{enumargs}
- %
- % \chgs{2007/11/06 v0.98 (in \pk{gmdoc}) made more elegant:
- % \cs{if} changed to \cs{ifx} made four parameters and not expanding
- % to an open \cs{if›(true⁄|false›)}. Also renamed from \cs{@ifismember}}
- % \chgs{2008/12/05 v0.98 moved here from \pk{gmdoc} and rewritten,
- % including split to \cs{IfAmong} because the latter is needed in
- % \cs{DeclareCommand}}
- %
- \def\gmu@reserveda{\IfAmong#1\among}%
- \@xa\gmu@reserveda\@xa{#2}}
-
-
-% \division{Global Boolean switches}
-%
-% The |\newgif| declaration's effect is used even in the \LaTeXe\
-% source by redefining some particular user defined ifs (UD-ifs
-% henceforth) step by step. The goal is to make the UD-if's
-% assignment global. I~needed it at least twice during \pk{gmdoc}
-% writing so I~make it a~macro. It's an almost verbatim copy of
-% \LaTeX's |\newif| modulo the letter $g$ and the |\global| prefix.
-% (File d: \file{ltdefns.dtx} Date: 2004/02/20 Version v1.3g, lines
-% 139--150) \Define\newgif
-\pdef\newgif#1{%
- {\escapechar\m@ne
- \global\let#1\iffalse
- \@gif#1\iftrue
- \@gif#1\iffalse
- }}
-% `Almost' is also in the detail that in this case, which deals with
-% |\global| assignments, we don't have to bother with storing and
-% restoring the value of |\escapechar|: we can do all the work inside
-% a~group.
-% \DefIndex\@gif
-\def\@gif#1#2{%
- \protected\@xa\gdef\csname\@xa\@gobbletwo\string#1%
- g% the letter $g$ for `|\global|'.
- \@xa\@gobbletwo\string#2\endcsname
- {\global\let#1#2}}
-
-\pdef\newif#1{% We not only make \incs{newif}
- % \incs{protected} but also make it to define \cs{protected}
- % assignments so that premature expansion doesn't affect
- % \inverb|\if…\fi| nesting.
- % \changes{v0.92}{2008/08/09}{added redefinition so that now
- % switches defined with it are \cs{protected} so they won't expand to
- % a~further expanding or unbalanced \cs{iftrue/false} in an \cs{edef}}
- \count@\escapechar \escapechar\m@ne
- \let#1\iffalse
- \@if#1\iftrue
- \@if#1\iffalse
- \escapechar\count@}
-
-\def\@if#1#2{%
- \protected \@xa\def\csname\@xa\@gobbletwo\string#1%
- \@xa\@gobbletwo\string#2\endcsname
- {\let#1#2}}
-
-
-\pdef\hidden@iffalse{\iffalse}
-\pdef\hidden@iftrue{\iftrue}
-
-% After |\newgif\iffoo| you may type |{\foogtrue}| and the |\iffoo|
-% switch becomes globally equal |\iftrue|. Simili modo |\foogfalse|.
-% Note the letter $g$ added to underline globalness of the assignment.
-%
-% If for any reason, no matter how queer ;-) may it be, you need
-% \emph{both} global and local switchers of your |\if…|, declare
-% it both with |\newif| and |\newgif|.
-%
-% Note that it's just a~shorthand. |\global\if⁄<switch>›(true⁄|false›)|
-% \emph{does} work as expected.
-
-% \Define\grefstepcounter
-% \changes{v0.59}{06/09/04}{moved here from \pk{gmdoc}.}
-% There's a~trouble with |\refstepcounter|: defining |\@currentlabel|
-% is local. So let's |\def| a~|\global| version of |\refstepcounter|.
-%
-% Warning. I~use it because of very special reasons in \pk{gmdoc} and
-% in general it is probably not a~good idea to make |\refstepcounter|
-% global since it is contrary to the original \LaTeX\ approach.
-\pdef\grefstepcounter#1{%
- {\let\protected@edef=\protected@xdef\refstepcounter{#1}}}
-% Na\"\i{}ve first try |\globaldefs=\tw@| raised an error
-% |unknown command \reserved@e|. The matter was to globalize
-% |\protected@edef| of |\@currentlabel|.\rrthis
-%
-% Thanks to using the true |\refstepcounter| inside, it observes the
-% change made to |\refstepcounter| by \pk{hyperref}.
-% \dekmedskip
-%
-% 2008/08/10 I~spent all the night debugging \cs{penalty 10000} that
-% was added after a~hypertarget in vertical mode. I~didn't dare to
-% touch \pk{hyperref}'s guts, so I~worked it around with ensuring
-% every \cs{grefstepcounter} to be in hmode:
-
-\pdef\hgrefstepcounter#1{%
- \ifhmode\leavevmode\fi\grefstepcounter{#1}}
-
-% By the way I~read some lines from \TB\ and was reminded that
-% \cs{unskip} strips any last skip, whether horizontal or
-% vertical. And I~use \cs{unskip} mostly to replace a~blank space with
-% some fixed skip. Therefore define
-
-\pdef\hunskip{\ifhmode\unskip\fi}
-
-% Note the two macros defined above are \cs{protected}. I~think it's
-% a~good idea to make \cs{protected} all the macros that contain
-% assignments. There is one more thing with \cs{ifhmode}: it can be different
-% at the point of \cs{edef} and at the point of execution.
-
-
-% Another shorthand. It may decrease a~number of |\expandafter|s e.g.
-% \Define\glet
-\def\glet{\global\let}
-
-
-% \LaTeX\ provides a~very useful |\g@addto@macro| macro that adds its
-% second argument to the current definition of its first argument
-% (works iff the first argument is a~no argument macro). But I~needed
-% it some times in a~document, where |@| is not a~letter. So:
-% \Define\gaddtomacro
-\let\gaddtomacro=\g@addto@macro
-
-% The redefining of the first argument of the above macro(s) is
-% |\global|. What if we want it local? Here we are:
-%
-\long\def\addto@macro#1#2{%
- % \chgs{2008/12/7 v0.98 \cs{toks@} replaced with some
- % \cmd\expandafter s because use of \cs{toks@} here caused
- % a~disaster in \cs{DeclareCommand}}
- \edef#1{\@xa\unexpanded\@xa{#1}\unexpanded{#2}}% \incmd\edef\ and
- % \incmd\unexpanded\ to double the hashes.
-}
-
-% And for use in the very document,
-% \Define\addtomacro
-\let\addtomacro=\addto@macro
-
-% 2008/08/09 I~need to prepend something not add at the end---so
-\long\def\prependtomacro#1#2{% \changes{v0.94}{2008/09/15}{order of
- % arguments reversed}
- \edef#1{\unexpanded{#2}\@xa\unexpanded\@xa{#1}}}
-% Note that \cs{prependtomacro} can be prefixed.
-
-% \Define\addtotoks
-\long\def\addtotoks#1#2{%
- #1=\@xa{\the#1#2}}
-
-% \Define\emptify
-\newcommand*\@emptify[1]{\let#1=\@empty}
-\@ifdefinable\emptify{\let\emptify\@emptify}
-
-% Note the two following commands are in fact one-argument.
-%\Define\g@emptify \Define\gemptify
-\newcommand*\g@emptify{\global\@emptify}
-\@ifdefinable\gemptify{\let\gemptify\g@emptify}
-
-% \Define\relaxen
-\newcommand\@relaxen[1]{\let#1=\relax}
-\@ifdefinable\relaxen{\let\relaxen\@relaxen}
-
-% Note the two following commands are in fact one-argument.
-% \Define\g@relaxen \Define\grelaxen
-\newcommand*\g@relaxen{\global\@relaxen}
-\@ifdefinable\grelaxen{\let\grelaxen\g@relaxen}
-
-% \division{\cs{gm@ifundefined}---a~test that doesn't create any\
-% hash entry unlike \cs{@ifundefined}}
-
-% I~define it under another name not redefine |\@ifundefined| because
-% I~can imagine an odd case when something works thanks to
-% |\@ifundefined|'s `relaxation’ effect.
-
-\long\def\gm@ifundefined#1{% not |\protected| because expandable.
- % \changes{v0.94}{2008/9/12}{added. All \cs{@ifundefined}s used by
- % me changed to this}
- % \changes{v0.94}{2008/10/03}{made robust to unbalanced \cs{if}s and
- % \cs{fi}s the same way as \LaTeX's \cs{@ifundefined} (after a~heavy
- % debug :-)}
- \ifcsname#1\endcsname% defined…
- \@xa\ifx\csname #1\endcsname\relax% but only as |\relax|---then
- % 2nd argument.
- \afterfifi\@firstoftwo%
- \else% defined and not |\relax|---then 3rd argument.
- \afterfifi\@secondoftwo%
- \fi
- \else% not defined---then 3rd.
- \afterfi\@firstoftwo%
- \fi}
-
-
-\long\def\gm@testdefined#1\iftrue{% This is a~macro that expands to
- % \incs{iftrue} or \incs{iffalse} depending on whether its argument
- % is defined in the \LaTeX\ sense. Its syntax requires an
- % \incs{iftrue} to force balancing \incs{if}s with \incs{fi}s.
- % \changes{v0.95}{2008/10/8}{added}
- \csname
- \ifdefined#1%
- \ifx#1\relax
- iffalse%
- \else iftrue%
- \fi
- \else iffalse%
- \fi\endcsname
-}
-
-\long\def\gm@testundefined#1\iftrue{% we expand the last macro two
- % levels. We repeat the parameter string to force the proper syntax.
- % \changes{v0.95}{2008/10/8}{added}
- \@xa\@xa\@xa\unless\gm@testdefined#1\iftrue}
-
-
-
-% \division{Some `other' and active stuff}
-% Here I~define a~couple of macros expanding to special chars made
-% `other'. It's important the \CS are expandable and therefore
-% they can occur e.g. inside |\csname›…\endcsname| unlike e.g.\
-% \CS'es |\chardef|ed.
-%
-% \Define\subs
-\foone{\catcode`\_=8 }
-{\let\subs=_}
-
-% \Define\sups
-\foone{\catcode`\^=7 }
-{\let\sups=^}
-
-\foone{\@makeother\_}
-{\def\xiiunder{_}}
-
-\let\all@unders\xiiunder
-\foone{\catcode`\_=8 }
-{\addtomacro\all@unders{_}}
-\foone{\catcode`\_=11 }
-{\addtomacro\all@unders{_}}
-\foone{\catcode`\_=13 }
-{\addtomacro\all@unders{_}}
-% \nostanza Now |\all@unders| bears underscores of categories 8, 11,
-% 12 and 13.
-
-\def\all@stars{*}
-\foone{\catcode`\*=11 }
-{\addtomacro\all@stars{*}}
-\foone{\catcode`\*=13 }
-{\addtomacro\all@stars{*}}
-%\nostanza And |\all@stars| bears stars of categories 11, 12 and 13.
-
-
-\ifdefined\XeTeXversion
- \chardef\_="005F
-\fi
-
-\foone{\@makeother\`}%
-{\def\backquote{`}}
-
-
-\foone{\catcode`\[=1 \@makeother\{
- \catcode`\]=2 \@makeother\}}%
-[%
- \def\xiilbrace[{]%
- \def\xiirbrace[}]%
-]% of |\firstofone|
-
-% Note that \LaTeX's |\@charlb| and |\@charrb| are of catcode 11
-% (`letter'), cf. The \LaTeXe\ Source file k, lines 129--130.
+ [2010/10/24 v0.993 some rather TeXnical macros, some of them tricky (GM)]
-
-% Now, let's define such a~smart |_| (underscore) which will be usual
-% |_|${}_8$ in the math mode and |_|\catother\ (`other') outside math.
-% \Define\smartunder
-% \changes{v0.60}{06/09/05}{\cs{\_} instead of \cs{xiiunder}}
-\foone{\catcode`\_=\active}
-{%
- \newcommand*\smartunder{%
- \catcode`\_=\active
- \def_{\ifmmode\subs\else\_\fi}}}% We define it as \inverb|\_| not just as
-% \inverb|\xiiunder| because some font encodings don't have \inverb|_| at the
-% \inverb|\char`\_| position.
-%
-% \CodeEscapeChar\!
-% \Define\bslash \Define\xiibackslash
-\foone{\catcode`\!=0
- \@makeother\\}
-{!newcommand*!xiibackslash{\}}
-%^^A] balancing braces for Emacs
-% \CodeEscapeChar\\
-
-\let\bslash=\xiibackslash
-
-
-% \begin{oldmc}
-\foone{\@makeother\%}
-{\def\xiipercent{%}}
-% \end{oldmc}
-
-\foone{\@makeother\&}%
-{\def\xiiand{&}}
-
-\foone{\@makeother\ }%
-{\def\xiispace{ }}
-
-\foone{\@makeother\#}%
-{\def\xiihash{#}}
-
-% We introduce \cs{visiblespace} from Will Robertson's \pk{xltxtra} if
-% available. It's not sufficient |\@ifpackageloaded{xltxtra}| since
-% \cs{xxt@visiblespace} is defined only unless |no-verb| option is
-% set. 2008/08/06 I~recognised the difference between \cs{xiispace}
-% which has to be plain `other' char (used in \cs{xiistring}) and
-% something visible to be printed in any font.
-
-\AtBeginDocument{%
- \ifdefined\xxt@visiblespace
- \let\visiblespace\xxt@visiblespace
- \def\xxt@visiblespace@fallback{{%
- \fontspec{Latin Modern Mono}\textvisiblespace}}%
- \else
- \let\visiblespace\xiispace
- \fi}
-
-
-\foone\obeyspaces{\def\gmu@activespace{ }}
-
-\foone\obeylines{\def\activeM{^^M}}
-
-
-% \division{\cs{@ifnextcat}, \cs{@ifnextac}, catcode-independent\
-% \cs{gm@ifstar}, \cs{@ifnextsingle}, \cs{@ifnextgroup}}
-%
-% As you guess, we |\def| |\@ifnextcat| \agrave~la |\@ifnextchar|, see
-% \LaTeXe\ source dated 2003/12/01, file d, lines 253--271. The
-% difference is in the kind of test used: while |\@ifnextchar| does
-% |\ifx|, |\@ifnextcat| does |\ifcat| which means it looks not at the
-% meaning of a~token(s) but at their |\catcode|(s). As you (should)
-% remember from \TeXbook, the former test doesn't expand macros while
-% the latter does. But in |\@ifnextcat| the peeked token is protected
-% against expanding by |\noexpand|. Note that the first parameter is
-% not protected and therefore it shall be expanded if it's
-% expandable. Because an assignment is involved, you can't test
-% whether the next token is an active char. But you can test if the
-% next token is |{|$_1$ or |}|$_2$: |\@ifnextcat\bgroup›…|,
-% |\@ifnextcat\egroup›…|.
-
-\long\pdef\@ifnextcat#1#2#3{%
-% \changes{v0.75}{2007/01/01}{\cs{let} for \cs[\#]1 changed to
-% \cs{def} to allow things like \cs{noexpand\texttilde}}
-% \HideDef
- \def\reserved@d{#1}%
- \def\reserved@a{#2}%
- \def\reserved@b{#3}%
- \futurelet\@let@token\@ifncat}
-
-% \ResumeDef
-\def\@ifncat{%
- \ifx\@let@token\@sptoken
- \let\reserved@c\@xifncat
- \else
- \ifcat\reserved@d\@nx\@let@token
- \let\reserved@c\reserved@a
- \else
- \let\reserved@c\reserved@b
- \fi
- \fi
- \reserved@c}
-
-{\def\:{\let\@sptoken= } \global\: % this makes |\@sptoken| a space token.
-
- % \DefIndex\@xifncat
-\def\:{\@xifncat} \@xa\gdef\: {\futurelet\@let@token\@ifncat}}
-% Note the trick to get a~macro with no parameter and requiring
-% a~space after it. We do it inside a~group not to spoil the general
-% meaning of |\:| (which we extend later).
-% \dekmedskip
-%
-% \stanza The next command provides the real \cs{if} test for the next
-% token. \emph{It} should be called |\@ifnextchar| but that name is
-% assigned for the future \cs{ifx} text, as we know. Therefore we call
-% it \cs{@ifnextif}.
-%
-% \stanza
-% Having |\@ifnextcat| defined, let's apply it immediately. Similar
-% thing does probably the \pk{xspace} package.
-\def\spifletter{\@ifnextcat a{\space}{}}
-
-
-\long\pdef\@ifnextif#1#2#3{%
-% \changes{v0.75}{2007/01/01}{\cs{let} for \cs[\#]1 changed to
-% \cs{def} to allow things like \cs{noexpand\texttilde}}
-% \chgs{2010/3/4 v0.991 inner macro fixed to handle active chars more
-% properly (more as \cmd\if\ would do it)}
-% \HideDef
-% (the future token in |\noexpand|ed, unlike \inhash1)
- \def\reserved@d{#1}%
- \def\reserved@a{#2}%
- \def\reserved@b{#3}%
- \futurelet\@let@token\@ifnif}
-% \ResumeDef
-
-\def\@ifnif{%
- \ifx\@let@token\@sptoken
- \let\reserved@c\@xifnif
- \else
- \if\reserved@d\@nx\@let@token
- \let\reserved@c\reserved@a
- \else % |#1| of |\@ifnextif| is not |\if|-equivalent the future
- % token. But this may be because the future token is active
- % so it \emph{would} be |\if|-equivalent if not passed
- % through |\futurelet|. Let's manage this case.
- \begingroup
- \edef\gmu@tempa{%
- \lccode`\@nx~=`\reserved@d
- }\gmu@tempa
- \lowercase{\endgroup
- \ifx~}\@let@token
- \let\reserved@c\reserved@a
- \else
- \let\reserved@c\reserved@b
- \fi
- \fi
- \fi
- \reserved@c}
-
-% \UnDef
-{\def\:{\let\@sptoken= } \: % this makes |\@sptoken| a space token.
-% \UnDef
-\def\:{\@xifnif} \@xa\gdef\: {\futurelet\@let@token\@ifnif}}
-
-% \dekmedskip
-%
-% But how to peek at the next token to check whether it's an active
-% char? First, we look with |\@ifnextcat| whether there stands a~group
-% opener. We do that to avoid taking a~whole |{…}| as the argument
-% of the next macro, that doesn't use |\futurelet| but takes the next
-% token as an argument, tests it and puts back intact.
-% \changes{v0.75}{2007/01/11}{added}
-%
-\long\pdef\@ifnextac#1#2{%
- \@ifnextsingle
- {\gm@ifnac{#1}{#2}}%
- {#2}}
-
-\long\def\gm@ifnac#1#2#3{%
- \ifcat\@nx~\@nx#3%
- \@xa\@firstoftwo
- \else\@xa\@secondoftwo
- \fi{#1#3}{#2#3}}
-
-% Yes, it won't work for an active char |\let| to |{|${}_1$, but it ^^A~}
-% \emph{will} work for an active char |\let| to a~char of
-% catcode${}\neq1$. (Is there anybody on Earth who'd make an active
-% char working as |\bgroup| not just recatcode it to $_1$?)
-%
-
-% Having defined such tools, let's redefine |\gm@ifstar| to make it work
-% with whatever catcode |*| may be.
-% make a~version of |\gm@ifstar| that would work with
-% |*|\catletter.
-
-
-\pdef\gmu@lowstar{%
- \iffontchar\font"22C6 \char"22C6 \else\gmu@lowstarfake\fi}% we could define it to
-% be expandable (with \inverb|^^^^22c6|) but the only goal of it would
-% be allowing this low star in |\csname›…\endcsname|. But it would be
-% misleading (not everyone can easily distinguish |⁄string*| from |*|)
-% so \IMHO\ it's better to raise an error should such an active occur
-% in a~|\csname|.
-% This macro is intended to be |\let| to an active star only in
-% verbatims. For usual text there's
-
-% Commands around making star low (via |\active|ation) are defined in
-% line \ref{def:gmu@star} because they use |\DeclareCommand|.
-
-
-\def\gmu@tempa{*}
-\foone{\catcode`\*=\active}
-{\def\gmu@tempb{*}% it's defined in line \ref{active star}
- % to make |*| defined (when it was undefined,
- % \incmd\newcommand's \incs{gm@ifstar} test turned
- % true, the next undefined token was gobbled and raised an error).
- \let*=\gmu@lowstar}
-
-
-
-\edef\gmu@tempa{%
- \long\pdef\@nx\gm@ifstar##1##2{% \chgs{2008/12/16 v0.98 renamed from
- % \cs{@ifstar} since something
- % redefines \cs{@ifstar}}]
- \@nx\@ifnextif\gmu@tempa%
- {\@nx\@firstoftwo{##1}}%
- {%
- \@nx\@ifnextchar\@xa\@nx\gmu@tempb
- {\@nx\@firstoftwo{##1}}{##2}}%
- }% of |\gm@ifstar|.
-}\gmu@tempa
-
-
-%\stanza
-% A~test whether we can pick a~single token. We have to check whether
-% we are not next to |{| and whether we are not next to |}|.
-
-\long\pdef\@ifnextsingle#1#2{% \chgs{2008/12/11 v0.98 extracted from
- % \cs{@ifnextac}} This macro checks whether the next token is able
- % to be picked or is it a~braced list of tokens or is it a~group
- % closer so there's no token to be picked.
- \@ifnextcat\bgroup{#2}{%
- \@ifnextcat\egroup{#2}% \chgs{2008/12/11 v0.98 added test for
- % \cmd\egroup}
- {#1}}}
-
-\long\pdef\@ifnextgroup#1#2{% Note this macro turns true both before
- % a~group opener and before a~group closer.
- \@ifnextsingle{#2}{#1}}
-
-
-% now let's apply this to sth. useful (used in \pk{gmverse} and in
-% some typesetting, e.g.\ for prof.\ JSB.
-\pdef\ignoreactiveM{%
- \@ifnextgroup{}{\gmu@checkM}}
-
-\foone\obeylines{% we know it's a~single token since we use this macro
- % only in \incmd\@ifnextgroup's ‘else’.
- \long\pdef\gmu@checkM#1{%
- \ifx
- #1\@xa\ignoreactiveM%
- \else\@xa#1\fi}}
-
-
-%
-% \stanza Now, define a~test that checks whether the next token is
-% a~genuine space, | |${}_{10}$ that is. First define
-% a~\CS let such
-% a~space. The assignment needs a~little trick (\TeXbook\ appendix D)
-% since |\let|'s syntax includes one optional space after |=|.
-%
-\let\gmu@reserveda\*%
-\def\*{%
- \let\*\gmu@reserveda
- \let\gm@letspace= }%
-\* %
-
-% \Define\@ifnextspace
-\def\@ifnextspace#1#2{%
- \let\gmu@reserveda\*%
- \def\*{%
- \let\*\gmu@reserveda
- \ifx\@let@token\gm@letspace\afterfi{#1}%
- \else\afterfi{#2}%
- \fi}%
- \futurelet\@let@token\*}
-% First use of this macro is for an active |-| that expands to |---|
-% if followed by a~space. Another to make dot checking whether is
-% followed by |~| without gobbling the space if it occurs instead.
-%
-% \stanza
-% Now a~test if the next token is an active line end. I~use it in
-% \pk{gmdoc} and later in this package for active long dashes.
-
-\foone\obeylines{%
- \long\pdef\@ifnextMac#1#2{%
- \@ifnextchar^^M{#1}{#2}}}
-
-
-% \division{Storing and restoring the meanings of \CSs}
-%
-% First a~Boolean switch of globalness of assignments and
-% its verifier.
-\newif\ifgmu@SMglobal
-
-\pdef\SMglobal{\gmu@SMglobaltrue}
-% The subsequent commands are defined in such a~way that you can
-% `prefix' them with |\SMglobal| to get global (re)storing.
-% \stanza
-% A~command to store the current meaning of a~\CS in another macro to
-% temporarily redefine the \CS and be able to set its original meaning
-% back (when grouping is not recommended):
-%
-%\Define\StoreMacro
-%\changes{v0.61}{06/09/05}{added.}
-%\changes{v0.67}{06/10/11}{enriched with \cs{makeatletter}}
-\pdef\StoreMacro{%
- \begingroup\makeatletter\gm@ifstar\egStore@MacroSt\egStore@Macro}
-% The unstarred version takes a~\CS and the starred version
-% a~text, which is intended for special control sequences. For storing
-% environments there is a~special command in line \ref{StoreEnvironment}.
-
-\long\def\egStore@Macro#1{\endgroup\Store@Macro{#1}}
-\long\def\egStore@MacroSt#1{\endgroup\Store@MacroSt{#1}}
-
-\long\def\Store@Macro#1{%
- \escapechar92
- \ifgmu@SMglobal\afterfi\global\fi
- \@xa\let\csname /gmu/store\string#1\endcsname#1%
- \global\gmu@SMglobalfalse}
-
-
-\long\def\Store@MacroSt#1{%
- \edef\gmu@smtempa{%
- \ifgmu@SMglobal\global\fi
- \@nx\let\@xa\@nx\csname/gmu/store\bslash#1\endcsname%\label{SMbslash}
- % we add backslash because to ensure compatibility between
- % \incs{(Re)StoreMacro} and \incs{(Re)StoreMacro*}, that is. to allow
- % writing e.g. \inverb|\StoreMacro\kitten| and then
- % \inverb|\RestoreMacro*{kitten}| to restore the meaning of
- % \incs{kitten}.\ilrr
- \@xa\@nx\csname#1\endcsname}
- \gmu@smtempa
- \global\gmu@SMglobalfalse}% we wish the globality to be just
- % once.\par
-
-% We make the |\StoreMacro| command a~three-step to allow usage of the
-% most inner macro also in the next command.
-%
-% The starred version, |\StoreMacro*| works with csnames (without the
-% backslash). It's first used to store the meanings of robust
-% commands, when you may need to store not only |\foo|, but also
-% |\csname foo \endcsname|.
-%
-%
-% The next command iterates over a~list of \CSs and stores each of
-% them. The \CS'es may be separated with commas but they don't have to.
-% \Define\StoreMacros
-
-\long\pdef\StoreMacros{\begingroup\makeatletter\Store@Macros}
-\long\def\Store@Macros#1{\endgroup
- \gmu@setsetSMglobal
- \let\gml@StoreCS\Store@Macro
- \gml@storemacros#1.}
-% \label{InnerStore}
-
-\def\gmu@setsetSMglobal{%
- \ifgmu@SMglobal
- \let\gmu@setSMglobal\gmu@SMglobaltrue
- \else
- \let\gmu@setSMglobal\gmu@SMglobalfalse
- \fi}
-
-% And the inner iterating macro:
-\long\def\gml@storemacros#1{%
- \def\gmu@reserveda{\@nx#1}% My \TeX\ Guru's trick to deal with |\fi|
- % and such, i.e., to hide |#1| from \TeX\ when it is processing a~test's
- % branch without expanding.
- \if\gmu@reserveda.% a~dot finishes storing.
- \global\gmu@SMglobalfalse
- \else
- \if\gmu@reserveda,% The list this macro is put before may
- % contain commas and that's O.K., we just continue the work.
- \afterfifi\gml@storemacros
- \else% what is else this shall be stored.
- \gml@StoreCS{#1}% we use a~particular \CS to may |\let| it both to
- % the storing macro as above and to the restoring one as
- % \gmiflink[letRestore]{below}.
- \afterfifi{\gmu@setSMglobal\gml@storemacros}%
- \fi
- \fi}
-
-% And for the restoring
-%\Define\RestoreMacro
-%\changes{v0.61}{06/09/05}{added.}
-%\changes{v0.67}{06/10/11}{enriched with \cs{makeatletter}}
-\pdef\RestoreMacro{%
- \begingroup\makeatletter\gm@ifstar\egRestore@MacroSt\egRestore@Macro}
-
-\long\def\egRestore@Macro#1{\endgroup\Restore@Macro{#1}}
-\long\def\egRestore@MacroSt#1{\endgroup\Restore@MacroSt{#1}}
-
-\long\def\Restore@Macro#1{%
- \escapechar92
- \gmu@ifstored#1{%
- \ifgmu@SMglobal\afterfi\global\fi
- \@xa\let\@xa#1\csname /gmu/store\string#1\endcsname
- \global\gmu@SMglobalfalse}%
- {\unless\ifgmu@quiet
- \PackageWarning{gmutils}{\@nx#1 is not stored, I do nothing with
- it}%
- \fi
- }%
-}
-
-\long\def\gmu@ifstored#1#2#3{%
- \gm@ifundefined{/gmu/store%
- \if\relax\@nx#1\else\bslash\fi
- \string#1}{#3}{#2}%
-}
-
-\long\pdef\gmu@storeifnotyet#1{%
- \if\relax\@nx#1% we check if it's a~\CS
- \gmu@ifstored{#1}{}{\StoreMacro#1}%
- \fi}
-
-
-\long\def\Restore@MacroSt#1{%
- \gm@ifundefined{/gmu/store\bslash#1}%
- {\unless\ifgmu@quiet
- \PackageWarning{gmutils}{\bslash#1 is not stored. I~do nothing}%
- \fi}%
- {\edef\gmu@smtempa{%
- \ifgmu@SMglobal\global\fi
- \@nx\let\@xa\@nx\csname#1\endcsname
- \@xa\@nx\csname/gmu/store\bslash#1\endcsname}% cf. the commentary
- % in line \ref{SMbslash}.
- \gmu@smtempa}%
- \global\gmu@SMglobalfalse}
-
-% \Define\RestoreMacros
-\long\pdef\RestoreMacros{\begingroup\makeatletter\Restore@Macros}
-
-\long\def\Restore@Macros#1{\endgroup
- \gmu@setsetSMglobal
- \let\gml@StoreCS\Restore@Macro% \gmhypertarget[letRestore]{we}
- % direct the core \CS towards restoring and call the same iterating
- % macro as in line \ref{InnerStore}.
- \gml@storemacros#1.}
-% As you see, the |\RestoreMacros| command uses the same iterating
-% macro inside, it only changes the meaning of the core macro.
-
-% And to restore \emph{and} use immediately:
-%\changes{v0.67}{06/10/11}{enriched with \cs{makeatletter}}
-\def\StoredMacro{\begingroup\makeatletter\Stored@Macro}
-\long\def\Stored@Macro#1{\endgroup\Restore@Macro#1#1}
-
-% To be able to call a~stored \CS without restoring it.
-\def\storedcsname#1{%% \changes{v0.88}{2008/08/03}{added}
- \csname /gmu/store\bslash#1\endcsname}
-
-
-% 2008/08/03 we need to store also an environment.
-\pdef\StoreEnvironment#1{% \label{StoreEnvironment}
-% \changes{v0.88}{2008/08/03}{added}
- \StoreMacro*{#1}\StoreMacro*{end#1}}
-
-\pdef\RestoreEnvironment#1{%
-% \changes{v0.88}{2008/08/03}{added}
- \RestoreMacro*{#1}\RestoreMacro*{end#1}}
-
-
-% It happened (see the definition of |\@docinclude| in \pk{gmdoc.sty})
-% that I~needed to |\relax| a~bunch of macros and restore them after
-% some time. Because the macros were rather numerous and I~wanted the
-% code more readable, I~wanted to |\do| them. After a~proper defining
-% of |\do| of course. So here is this proper definition of |\do|,
-% provided as a~macro (a~declaration).
-%
-% \Define\StoringAndRelaxingDo
-% \changes{v0.59}{06/09/04}{added for storing index-related macros in
-% \pk{gmdoc}'s \cs{DocInclude}.}
-% \changes{v0.61}{06/09/05}{renamed from \cs{MacroStoringDo} and the
-% storing cs's prefix changed from \cs[]{@gml@srs}.}
-\def\StoringAndRelaxingDo{%
- \gmu@SMdo@setscope
- \long\def\do##1{%
- \gmu@SMdo@scope
- \@xa\let\csname /gmu/store\string##1\endcsname##1%
- \gmu@SMdo@scope\let##1\relax}}
-
-\def\gmu@SMdo@setscope{%
- \ifgmu@SMglobal\let\gmu@SMdo@scope\global
- \else\let\gmu@SMdo@scope\relax
- \fi
- \global\gmu@SMglobalfalse}
-
-% And here is the counter-definition for restore.
-%
-% \Define\RestoringDo
-% \changes{v0.59}{06/09/04}{added for restoring index-related macros in
-% \pk{gmdoc}'s \cs{DocInclude}.}
-% \changes{v0.61}{06/09/05}{renamed from \cs{MacroRestoringDo} and
-% relaxing of the storing cs removed.}
-\long\def\RestoringDo{%
- \gmu@SMdo@setscope
- \long\def\do##1{%
- \gmu@SMdo@scope
- \@xa\let\@xa##1\csname /gmu/store\string##1\endcsname}}
-% Note that both |\StoringAndRelaxingDo| and |\RestoringDo| are
-% sensitive to the |\SMglobal| `prefix'.
-
-% And to store a~cs as explicitly named cs, i.e. to |\let| one csname
-% another (|\n@melet| not |\@namelet| because the latter is defined
-% in Till Tantau's \pk{beamer} class another way) (both arguments
-% should be text):
-\long\def\n@melet#1#2{%
- \edef\gmu@nl@reserveda{%
- \let\@xa\@nx\csname#1\endcsname
- \@xa\@nx\csname#2\endcsname}%
- \gmu@nl@reserveda}
-
-% The |\global| prefix doesn't work with |\n@melet| so we define the
-% alternative.
-\long\def\gn@melet#1#2{%
- \edef\gmu@nl@reserveda{%
- \global\let\@xa\@nx\csname#1\endcsname
- \@xa\@nx\csname#2\endcsname}%
- \gmu@nl@reserveda}
-
-\long\pdef\envirlet#1#2{%
- \n@melet{#1}{#2}%
- \n@melet{end#1}{end#2}%
-}
-
-
-% ^^A \StoreMacro\ch@ck
-% ^^A % \label{store:ch@ck}
+%%
+%%
+%% ^^A\typeout{\unexpanded{#4}}%%
- %\division{\cs{DeclareCommand} and \cmd\DeclareEnvironment}
- % The code of this section is based on the \pk{xparse}
- % package version 0.17 dated 1999/09/10, the version available in \TeX
- % Live 2007-13, in Ubuntu packages at least. Originally considered a~stub `im Erwartung'
- % (Schönberg) for the \LaTeX 3 bundle, it evolved to quite a~nice
- % tool I~think.
- %
- % I~rewrote the ancient \pk{xparse}'s code to use the usual
- % catcodes (only with |@| a~letter) and not to use the \pk{ldcsetup}
- % package (which caused an error of
- % undefined \CS\ |\KV@def|).
- % Then I~added the |\protected| prefix to the first macro. And I~added
- % my concept of |S|/|T| arg.\ spec. And of |b| and |B| spec. And the
- % |Q| argument type. And made \cmd\DeclareEnvironment\ makes the
- % arguments passed also to the end macro.
-%
-% After a~short deliberation I~rename the command to
-% \cs{DeclareCommand} which is much shorter than original
-% \cs{DeclareDocumentCommand} and more adequate at least
-% in my case: I~don't only use this powerful declaration for
-% ‘document’ commands.
-%
-% ^^A % After exchange of some mails with Morten H\o{}gholm and trying
-% ^^A % \pk{xparse} of 2008/08/03 svn 748 (which beautifully spoils the
-% ^^A % catcodes) I~wrap the
-% ^^A % ancient code in a~conditional to avoid name collision if someone
-% ^^A % loads \pk{xparse} before \pk{gmutils}
-%
-% In the args specification you can use:
-% \begin{itemize}
-% \item [\texttt{m}] for mandatory argument (braced or not),
-% \item [\env{O\arg{default}}] for optional argument (in square
-% brackets) with default value \<default> (which is passed as |#|\<n>
-% if the argument is missing),
-% \item [\texttt{o}] equivalent of |O{\NoValue}|: optional argument
-% (in square brackets) lack of which makes the \cs{NoValue} macro
-% passed as |#|\<n>. You can check it with
-% \possfil |\If›[No›]Value›(T⁄|F⁄|TF›){\#⁄<n>}|,
-% \item [\texttt{s}] for optional star (if star is present, it becomes
-% respective |#|\<n>, or else |\NoValue| is at the |#|\<n> (unlike in \pk{xparse}!).
-% \item [\texttt{S}\arg{list}{default}] for a~Single token, checks whether on the
-% respective position there's an unbraced token one of \<list> and
-% returns it on |#|\<n> if present or \arg{default} if absent. The
-% \arg{default} is a braced optional. If absent, |\NoValue| is the default.
-% ^^A Then that
-% ^^A % token can become |#|\<$n+1$>.
-% \item [\texttt{T}] as ‘Token’, just an alias for |S|.
-%
-% Like in \pk{xparse}, |s| is a~shorthand for |S{*}|, but
-% \emph{unlike} in \pk{xparse}, in the parsed arguments you get |*| or
-% |\NoValue| as |#|\<n>. You can now declare
-%\begin{verbatim}
-%\DeclareCommand\mimbla{S{+-}m}{%
-% \leavevmode
-% \ifx#1+\raise\fi
-% \ifx#1-\lower\fi
-% \ifx#1\NoValue\@tempdima=\fi
-% 7pt \hbox{#2}%
-% }
-%\end{verbatim}
-% and after |\mimbla+{raised} \mimbla-{lowered} \mimbla {untouched}|
-% get:\par
-% \fooatletter{\DeclareCommand\mimbla{S{+-}m}{\leavevmode\ifx#1+\raise\fi\ifx#1-\lower\fi\ifx#1\NoValue\@tempdima=\fi7pt\hbox{#2}}\mimbla+{raised}}
-%\mimbla-{lowered} \mimbla {untouched}
-%
-% This example is rather silly but shows that you spend only one |#|
-% for two symbols while in \pk{xparse} you would spend two. What if
-% you wanted 10 options for the optional symbol? Here it's no
-% problem. And with any number $k$ of tokens on the list the next |#| is
-% always $n+1$ not $n+k+1$.
-%
-% \item [\texttt{Q}\arg{list}] as ‘se\textbf Quence’, a~sequence of
-% symbols from \<list>; for the fundamental usage see line
-% \ref{Q-type}. More clearly, an argument specified with
-% |Q|\arg{tokens} is a~word over the alphabet
-% \<tokens>${}\cup{\tt\visiblespace}$ where {\tt\visiblespace}
-% is ignored and shall not be passed in the respective \hash{\<n>}.
-%
-% \item [\texttt{c}] for an optional argument in
-% parentheses. Historically it comes from a ‘coordinate’ argument and
-% may serve as such: if you declare \TextUsage\DCcoordinate, then
-% its catcher will be redefined to check for presence of a comma and pass
-% the argument as |{|\arg{before comma}{after comma}|}| if comma
-% present. |\NoValue| is passed if absent. By default
-% \TextUsage\DCnocoordinate\ is executed that defines the |c| type
-% argument as just an optional in parentheses.
-%
-% \item [\texttt C\arg{default}] as |c|, with default value.
-%
-% \item [\texttt b] for for an \emph{optional} argument in curly
-% braces. That's strange for anyone acquainted with \LaTeX\ and
-% contrary to its basic convention, but practised by Til Tantau in the
-% \pk{beamer} class. If missing, |\NoValue| is passed as |#|\<n> and
-% therefore all the tests |If›[No›]Value›(T⁄|F⁄|TF›)| apply.
-%
-% \item [\texttt B\arg{default}] for a~braced \emph{optional} argument with
-% the default value \<default>.
-%
-% \item [\texttt K\arg{\#-string}\metachar{[}\arg{replacement}\metachar{]}]
-% for a~\emph{mandatory} \textbf Knuthian delimited or undelimited macro
-% parameters. This concept comes from Stephen Hicks' suggestion at
-% Bacho\TeX\ 2009 of implementing arguments delimited with
-% |#{|. ^^A}
-% So, in the mandatory first argument to |K| you give
-% an arbitrary parameters string as described in Chapter 20 of
-% \TB. If you don't provide the replacement, only |#1| of those
-% parameters will be passed to the core macro of your command as
-% |#|\<n>. In both arguments you use single |#| char.
-%
-% \item [\texttt G\arg{pair of tokens}\metachar{[}{default value}\metachar{]}] a \textbf General
-% catcher of an optional. For instance, to declare an optional in
-% angles (used e.g.\ in Till Tantau's \pk{beamer}), declare
-% |G{<>}|. Again, if second argument is absent, |\NoValue| is assumed.
-% \item[\texttt{A}] (for ‘angles’) a~shorthand for |G{<>}| (accepts
-% the second braced as the default value).
-%
-% \item [\texttt{\string\afterassignment}\arg{register}] a
-% pseudo-argument that in fact \emph{interrupts} parsing arguments to
-% let an assignment to \<register>. The default \<register> is |\@tempcnta|. For
-% example,
-%\begin{verbatim}
-% \DeclareCommand\llf{\afterassignment}
-% {{\lastlinefit\@tempcnta\par}}
-%\end{verbatim}
-% defines |\llf| to be a command that expects a value for a numerical
-% assignment, assigns it to (|\@tempcnta| and then to) the |\lastlinefit|
-% special register and executes |\par| with that setting inside a
-% group.
-%
-% Actually, \<register> may be empty |{}| and then each
-% time our command is used the left side of the assignment has to
-% be given explicitly and may even be different each time.
-%
-% Doesn't add anything to the arguments' list.
-%
-% \emph{This pseudo-argument type should be considered experimental.}
-%
-% \end{itemize}
-%
-%
-% \stanza
-%
-% Note that you could limit acceptable values of a~mandatory or an
-% optional-in-brackets argument
-% to a~list inside definition of the command, using |\IfAmong›…\among…|
-% defined in line \ref{IfAmong}.
-%
-% The |S|/|T|, |s| and |Q| arguments are always `long', they allow
-% |\par| as their value that is. They have to be unbraced to be parsed so
-% there's no danger of “runaway argument”.
-%
-% By default, \TextMarginize*{\long!lL} all the |c|, |C|, |o|, |O|, |m|, |b| and
-% |B| are ‘short’, they don't allow |\par| in them that
-% is. Note however that |\par| is allowed in the default values. If
-% you wish to allow |\par| for all the arguments, you can say
-% |\DeclareCommand\mycommand!|… — the optional |!| makes all
-% the arguments ‘long’. Instead of |!| you can use |L| or |l| for
-% ‘long’ or just |\long| itself.
-%
-% In the arguments specification string you can write |>›[{›]⁄<prefix>›[}›]|
-% to make subsequent argument ‘long’ or ignored:
-%
-% Any of \TextUsage*{Pp!lL\long\par} to make a particular argument ‘long’,
-% allowing |\par| in it that is, and/or any of \TextUsage*{iI} to make the
-% argument ignored (just gobbled).
-%
-% (Note that also the |c| and |C| arguments may be made ‘long’. That's
-% because I use them not as coordinates but as just another kind of
-% optional argument.
-%
-% The concept of ignored arguments came to my head when I was
-% declaring a command with three braced optionals and put optional
-% stars only to distinguish the braced optionals.
-%
-% For example, after
-% \begin{verbatim}
-% \DeclareCommand\GLBTQKi{%
-% G{&&}{\#1 default}
-% >LB{\#2 default}
-% >iT{*\ht}
-% Q{0123456789}{0}
-% K{#1\par#2\par}{{\text{#1}\over\text{#2}}}
-% \end{verbatim}
-% and you get |\GLBTQKi| 4-argument with:
-% \begin{enumargs}
-% \dc G{&&} optional short in a pair of |&| with |\NoValue| as the default,
-% \dc >LB optional long in curly braces,
-% \dc >iT{*\ht} star or |\ht| control sequence,
-% \dc Q{0123456789}{0} optional sequence of decimal digits with
-% default 0,
-% \dc K{#1\par#2\par}{{\text{#1}\over\text{#2}}} mandatory sequence
-% of two arguments both delimited with |\par|, that will be passed
-% the inner macro as |{\text{#1}\over\text{#2}}|.
-% \end{enumargs}
-%
-% \stanza The arguments may be tested inside the command with
-% \TextUsage\IfLong|{#⁄<n>}|\arg{what if long}{what if short}. The
-% test looks for |\par| at any level of nesting (|{\par}|---|\par| in
-% braces will not hide) since it |\detokenize|s
-% its argument.
-%
-% ^^A % \stanza
-% ^^A %
-% ^^A % There's an idea that came to my mind but I~did not
-% ^^A % implement it:
-% ^^A % \begin{itemize}
-% ^^A % \item [\texttt{>B}] spec prefix for
-% ^^A % mandatory argument to check whether that argument is braced.
-% ^^A % \end{itemize}
-% ^^A % The |B| and |b| argument types partially fulfil it.
-%
-% \stanza If you wish \TextMarginize*{\global\outer} to define your
-% command |\global|ly, you can specify
-% |\DeclareCommand\mycommand\global|. If you wish to forbid usage of
-% your command in arguments of macros, add the |\outer| prefix. As
-% with original \TeX's |\def| and like, the prefixes are allowed in
-% any order and in any number only here they come between the
-% command's name and the arguments specification. You can also add
-% |\long|, as we mentioned above, and, for the symmetry, also
-% |\protected|, although the latter is \emph{always} added since the
-% command is not expandable.
-%
-% \stanza Handling of white spaces with optionals seems to me too
-% complicated compared to the estimated weight of the problem and
-% I~haven't faced it so far so I~don't provide anything. But!---but
-% there are some commands that should be invisible in the typeset
-% text, such as indexing commands and font declarations. For those
-% there is a~working \LaTeX\ mechanism of |\@bsphack|---|\@esphack|
-% and to use it I~provide yet another ‘prefix’:
-% if you type \TextMarginize*{iIwW\sphack} |W| or
-% |w| (for ‘white’) or |I| or |i| (for ‘invisible’) or, if you prefer
-% a~prefix-like, |\sphack|\qfootnote{I~don't define the \cmd\sphack\
-% control sequence and don't assume it's defined. I~use it only
-% as a~marker and my use of it doesn't create an entry in the
-% hash table.}
-% between the \CS to be defined and arguments
-% spec, |\@bsphack| and |\@esphack| will be
-% added in proper places.
-%
-% \stanza The original inner macros of the ancient \pk{xparse} had
-% names like |\@dc@o| etc. According to my \TeX\ Guru's advice
-% I~changed them to |\ArgumentCatcher@|\<letter(s)> to make the error
-% messages less confusing. Well, I~don't know if they are but
-% \possfil|\ArgumentCatcher@PO| looks better than |\@dc@PO| doesn't it?
-%
-% Talking of messages, there's a~Boolean switch
-% \TextUsage\IfDCMessages. Its default setting is
-% \TextUsage\DCMessagesfalse\ but if you set
-% \TextUsage\DCMessagestrue, every |\command| created with my
-% |\DeclareCommand| will issue a~message “Parsing arguments
-% for |\command|” at the beginning of its execution.
-%
-% If you are positive \TextMarginize{.qQ} that no such message will
-% ever be useful, you can suppress the very placing of it in the
-% command's definition with an optional argument to
-% \cs{Dec\-la\-re\-comm\-and} with all other ‘prefixes’, |.| or |q|
-% or |Q| for ‘quiet’.
-%
-% \stanza
-% To sum up, |\DeclareCommand| takes the following arguments:
-% \begin{enumargs}
-% \dc >Pm the command to be defined (can be even |\par| if you
-% really wish),
-%
-% \dc Q{\long\global\outer\protected!lL.qQiIwW\sphack} optional
-% \eTeX's prefix\:(es) and/or symbols for making all the arguments
-% long (|!|, |l| or |L|) and/or to suppress placing of the diagnostic
-% message in the definition (|.|, |q|, |Q|) and/or for placing
-% |\@sphack|---|\@esphack| (|i|, |I|, |w|, |W|, |\sphack|),
-%
-% \dc >Pm the arguments
-% specification (can contain |\par| as you see),
-%
-% \dc >Pm the definition body. You refer to the arguments with
-% |#|\<n> and can test their presence and absence with
-% |\If›[No›]Value›(T⁄|F⁄|TF›){#⁄<n>}| and if the argument was specified
-% with the |>P| prefix (allows |\par| in itself), you can test it
-% with |\IfLong{#⁄<n>}|\arg{if long}{if short}. You are also
-% provided the |\IfAmong›…\among| and |\IfIntersect| tests defined
-% earlier in this package to process the arguments, especially of
-% the |S|/|T| and |Q| type.
-%
-% \end{enumargs}
-%
-%\stanza
-% There is also the \TextUsage\DeclareEnvironment\ command to
-% define environments with sophisticated optionals. It takes the
-% arguments analogous to those of |\DeclareCommand|.
-%
-% The |iIwW\sphack| specifier however acts different: it doesn't add
-% |\@bsphack| nor |\@esphack| but only |\@ignoretrue| to the
-% end macro so the spaces following |\end{myenvir}| will be
-% ignored. (I~tried the space hack but it's problematic (“bad space
-% factor” error) if an environment begins in the vertical mode and
-% ends in horizontal.
-%
-% \stanza
-% So the arguments to
-% \cs{Decl\-are\-Env\-iron\-ment} are:
-% \begin{enumargs}
-%
-% \dc Pm the environment's name; you may wonder why it allows
-% \cmd\par; it's to allow environments like
-% \inverb|\string\par|---I~met such an environment once.
-%
-% \dc Q{\long\outer\global\protected!lL.qQiIwW\sphack} to prefix
-% \possfil the
-% command (note that |\outer| prefix will actually not work since
-% the command is called with |\csname|), make all the
-% arguments ‘long’ (|\long|, |!|, |l| or |L|), not to place the message
-% issuer in the command (|.|, |q|, |Q|) or to make the
-% environment ignores spaces following its end (|iIwW\sphack|).
-%
-% \dc Pm the arguments specification (both for the begin and for the
-% end macros)
-%
-% \dc Pm the begin definition,
-%
-% \dc Pm the end definition; it can use the same parameters
-% (\hash{\<n>}'s) as the begin definition. Note however that there
-% is only one
-% specification of the arguments and both begin and end have to have 9
-% parameters in total at most.
-%
-% \end{enumargs}
-%
-%
-
-\unless\ifdefined\@temptokenb
-\newtoks\@temptokenb
+\unless\ifdefined\Name
+ \def\Name#1#2{\expandafter#1\csname#2\endcsname}
\fi
-\newif\if@dc@alllong@ % for an option of all arguments long.
-\newif\if@dc@quiet@ % for suppressing the message of using of
-% declared command.
-
-\newif\IfDCMessages % a~global switch to suppress the message about
-% parsing.
-
-
-\def\@dc@long@yes{P}
-
-\newtoks\@dc@arguments
-
-\newcount\@dc@catchernum
-\newcount\@dc@argnum
-
-\newif\if@dc@ignore
-
-
-% \UnPdef
-\long\pdef\DeclareCommand#1#2#3{% ^^B It's the draft version just
- % ^^B~to declare the true one, which is defined in line \ref{DC:final}.
- % \begin{enumargs}
- % \item command to be defined,
- % \item arguments specification,
- % \item definition body.
- % \end{enumargs}
- % \chgs[\DeclareCommand]{2008/12/05 v0.98 added the \env{S}/\env{T} spec parsing, the
- % \env{s} spec parsing rewritten to be a~shorthand for
- % \env{S\{*\}}, unused code removed}
- %
- \@dc@catchernum\z@
- \@dc@argnum\z@
- \toks@{}% in this register we will store the created sequence of
- % argument catchers.
- % ^^A Later, in the working declared command,
- % ^^A % \incs{toks@} bears \inverb|{#1}{#2}{#3}…|.
- \@temptokena\toks@ % in this register we will store the sequence of \inverb|#1#2…|.
- \@temptokenb\toks@ % in this register we will store the sequences of
- % \inverb|m|'s.
- % ^^A \@temptokenc\toks@ % this register will bear the sequence of tests
- % ^^A % for `longness' of arguments.
- \emptify\@dc@long@
- \@dc@ignorefalse
- \@dc#2X% |X| is the sentinel of parsing.
- \protected\edef#1{%
- \@nx\@dc@ {\the\toks@}%
- \@xa\@nx\csname\string#1\endcsname
- \@nx #1%
- }%
- \edef\gmu@reserveda{%
- \long\def\@xa\@nx\csname\string#1\endcsname
- \the\@temptokena{%
- % ^^A \the\@temptokenc
- \unexpanded{#3}}}%
- \gmu@reserveda}% of the ‘draft’ |\DeclareCommand|.
-
-
-\long\def\@dc@
- #1% the argument catchers in a~pair of braces (their arguments
- % may contain \incmd\par\ so the macro is long).
- #2% |\\thecommand|
- #3% |\thecommand|
- {%
- \ifx\protect\@typeset@protect
- \@xa\@firstofone
- \else
- \protect#3\@xa\@gobble
- \fi
- {\@dc@arguments{#2}#1\the\@dc@arguments}}
-
-
-\def\@dc#1{% The main parsing macro.
- \ifx#1X% if we meet the sentinel we stop. Note there may be some
- % \inverb|m|'s in \incs{@temptokenb} and we might not to care about
- % them since
- % they denote mandatory arguments and as such they will
- % be grabbed by \nlperc|\\⁄<declared command>|. However, if any of them
- % contains \incs{par} (while it shouldn't), then it wouldn't be
- % noticed since \inverb|\\⁄<declared command>| is always
- % long. Therefore:
- \@dc@add@ms
- \else
- \ifx#1>%
- \let\next@dc\grab@prefix
- \else % not |X| neither |>|
- \if@dc@alllong@\let\@dc@long@\@dc@long@yes\fi
- \ifx#1\afterassignment\@dc@ignoretrue\fi % if we parse the
- % assigned pseudo-argument, we don't want to add anything to the
- % % arguments' toks register so we apply general mechanism of
- % % ignoring an argument.
- \ifx#1\gobblespace\@dc@ignoretrue\fi % again, as above for
- % ignoring spaces.
- \ifnum \ifx#1m0\else1\fi \ifx\@dc@long@\@empty 0\else 2\fi
- \if@dc@ignore 1\else0\fi = 0 % we check
- % whether \inverb|#1| is \inverb|m| and not prefixed.
- \addto@hook\@temptokenb m% as you see, \incs{@temptokenb} serves as
- % a~storage of |m|'s.
- \else % (not |m|) or prefixed
- \@dc@add@ms
- \if@dc@ignore\addtotoks\toks@{\@dc@ignorearg}\fi
- \@xa\addtotoks\@xa\toks@\@xa{%
- \csname ArgumentCatcher@\@dc@long@\detokenize{#1}\endcsname}% the argument catcher's name
- % is \inverb|\ArgumentCatcher@›[P›]⁄<arg. type>|.
- \@temptokenb{}%
- \fi% of |\if| short |m| or not
- \advance\@dc@catchernum\@ne
- \unless\if@dc@ignore
- \advance\@dc@argnum\@ne
- \@temptokena\@xa{%
- \the\@xa\@temptokena\@xa##\the\@dc@argnum}%
- \else
- \@dc@ignorefalse
- \fi
- \IfAmong#1\among{ABCO}%
- {\let\next@dc\grab@default}%
- {\IfAmong#1\among{GQST}%
- {\let\next@dc\grab@defaults}% G, Q, S and T have second argument,
- % braced optional, which is the default value (|\NoValue| by default).
- {\gmu@if x {K#1}%
- {\let\next@dc\@dc@define@K}%
- {\gmu@if x {\afterassignment#1}%
- {\let\next@dc\dc@grab@afterass}%
- {\let\next@dc\@dc}%
- }%
- }%
- }%
- \unless\ifx\next@dc\@dc@define@K
- \emptify\@dc@long@
- \fi
- \fi % of |\if#1>|.
- \@xa\next@dc
- \fi
-}%
-
-\def\@dc@add@ms{%
- \@xa\@ifempty\@xa{\the\@temptokenb}%
- {}%
- {\toks@\@xa{%
- \the\@xa\toks@
- \csname ArgumentCatcher@\the\@temptokenb\endcsname}}}
-
-
-\long\def\grab@default#1{% the default value or the list of tokens for
- % \inenv{S} may contain \incs{par} (why not?), that's why we make
- % this macro \incs{long}.
- \toks@\@xa{\the\toks@{#1}}%
- \let\next@dc\@dc
- \@dc
-}
-
-\long\def\grab@defaults#1{% default (when default is absent)
- \toks@\@xa{\the\toks@{#1}}%
- \@ifnextchar\bgroup
- {\grab@default}%
- {\grab@default{\NoValue}}%
-}
-
-\def\dc@grab@afterass{%
- \@ifnextchar\bgroup
- {\grab@default}%
- {\grab@default{\@tempcnta}}%
-}
-
-
-\long\def\@dc@addargum{%
- \addtotoks\@dc@arguments}
-
-\StoreMacro\@dc@addargum
-
-\pdef\@dc@ignorearg{%
- \long\def\@dc@addargum##1{%
- \RestoreMacro\@dc@addargum}}
-
-% Parsing of Knuthian parameters string is easier to implement with
-% full-feature |\DeclareCommand| so we postpone it till line \ref{K@parse}
-
-
-\def\grab@prefix#1{%
- \IfIntersect{#1}{\long!lL\par Pp}%
- {\def\@dc@long@{P}}{}%
- \IfIntersect{#1}{Ii}%
- {\@dc@ignoretrue}{}%
- \@dc
-}
-
-\long\def\ArgumentCatcher@o#1\@dc@arguments{% parsing of an optional with no default
- \@ifnextchar[%^^A]
- {\def\@dc@parse@next{#1}\ArgumentCatcher@o@}%\
- % the last macro has to be short so
- % we can't give it all the arguments' catchers since some default may
- % contain \incs{par}. Therefore we hide all the argument catchers in
- % \incs{@dc@parse@next}.
- {\@dc@addargum\NoValue#1\@dc@arguments}}
-
-\def\ArgumentCatcher@o@[#1]{%
- \@dc@addargum{{#1}}\@dc@parse@next\@dc@arguments}
-
-\long\def\ArgumentCatcher@Po#1\@dc@arguments{% parsing of an optional with no default.
- \@ifnextchar[%^^A]
- {\ArgumentCatcher@Po@{#1}}%
- {\@dc@addargum\NoValue#1\@dc@arguments}}
-
-\long\def\ArgumentCatcher@Po@#1[#2]{%
- \@dc@addargum{{#2}}#1\@dc@arguments}
-
-\long\def\ArgumentCatcher@O#1#2\@dc@arguments{% parsing of optional with default value.\
- % \begin{enumargs}
- % \mand the default value,
- % \mand the tail of args parser.
- % \end{enumargs}
- %
- \@ifnextchar[%^^A]
- {\def\@dc@parse@next{#2}\ArgumentCatcher@o@}% note that even when an
- % optional is short, its default may contain \incs{par}.
- {\@dc@addargum{{#1}}#2\@dc@arguments}}
-
-
-\long\def\ArgumentCatcher@PO#1#2\@dc@arguments{% parsing of optional with default value.\
- % \begin{enumargs}
- % \mand the default value,
- % \mand the tail of args parser.
- % \end{enumargs}
- %
- \@ifnextchar[%^^A]
- {\ArgumentCatcher@Po@#2}% note that even when an
- % optional is short, its default may contain \incs{par}.
- {\@dc@addargum{{#1}}#2\@dc@arguments}}
-
-
-\long\def\ArgumentCatcher@b#1\@dc@arguments{% parsing of an optional braced short argument.
- \@ifnextcat\bgroup
- {\def\@dc@parse@next{#1}\ArgumentCatcher@m@}%\
- % the last macro has to be short so
- % we can't give it all the arguments' parsers since some default may
- % contain \incs{par}. Therefore we hide all the argument catchers in \incs{@dc@parse@next}.
- {\@dc@addargum\NoValue#1\@dc@arguments}}
-
-
-\long\def\ArgumentCatcher@Pb#1\@dc@arguments{% parsing of a~braced and
- % long optional with \incmd\NoValue\ default.
- \@ifnextcat\bgroup
- {\ArgumentCatcher@Pm#1\@dc@arguments}%
- {\@dc@addargum\NoValue#1\@dc@arguments}%
-}
-
-\long\def\ArgumentCatcher@B#1#2\@dc@arguments{% parsing of a~braced optional with default value.\
- % \begin{enumargs}
- % \mand the default value,
- % \mand the tail of args catchers.
- % \end{enumargs}
- %
- \@ifnextcat\bgroup
- {\def\@dc@parse@next{#2}\ArgumentCatcher@m@}% note that even when an
- % optional is short, its default may contain \incs{par}.
- {\@dc@addargum{{#1}}#2\@dc@arguments}}
-
-\long\def\ArgumentCatcher@PB#1#2\@dc@arguments{% parsing of a~braced
- % and long optional with default value.\
- % \begin{enumargs}
- % \mand the default value,
- % \mand the tail of args catchers.
- % \end{enumargs}
- %
- \@ifnextcat\bgroup
- {\ArgumentCatcher@Pm#2\@dc@arguments}%
- {\@dc@addargum{{#1}}#2\@dc@arguments}}
-
-
-\long\def\ArgumentCatcher@S@% parsing of a~Single continued:
-#1% the list to search |#4| on,
-#2% the default value,
-#3% the tail of args parsers,
-#4% the token we search in |#1| (it's an unbraced
-% single token as we checked in line \ref{dc@S:bgroup}).
-{%
- \IfAmong#4\among{#1}%
- {\@dc@addargum{{#4}}#3\@dc@arguments}%
- {\@dc@addargum{{#2}}#3\@dc@arguments#4}%
-}
-
-\long\def\ArgumentCatcher@S % parsing of a~\textbf Single\
- % token. It's always long since we look for a~single unbraced token\
- % so there is no danger of “runaway argument”.
-#1% the list we search optional token on,
-#2% the default value,
-#3% the tail of args parser.
-\@dc@arguments{%
- \@ifnextsingle
- % \label{dc@S:bgroup}
- {\ArgumentCatcher@S@{#1}{#2}{#3}}%
- {\@dc@addargum{{#2}}#3\@dc@arguments}% if we parse an
- % opening or closing brace, then we are sure it's not any expected
- % Single.
-}
-
-
-\let\ArgumentCatcher@PS\ArgumentCatcher@S % as above: we always act `long' with single tokens.
-\let\ArgumentCatcher@T\ArgumentCatcher@S % we allow |T| (for Token) as
-% an alias of |S|.
-
-
-\edef\ArgumentCatcher@s{%
- \@nx\ArgumentCatcher@S{\@xa\@nx\all@stars}{\@nx\NoValue}}% the |s| arg spec is
-% a~shorthand for \inverb|S{*}|. Except the star may be of any
-% category from $\{11,12,13\}$.
-\let\ArgumentCatcher@Ps\ArgumentCatcher@s
-
-\long\def\ArgumentCatcher@Q% parsing of a~se\textbf Quence\
- % of tokens from the list. It's always long since we look for unbraced tokens\
- % so there is no danger of “runaway argument”.
-#1% the list we search optional tokens on,
-#2% the default value,
-#3% the tail of args parser.
-\@dc@arguments % delimiter
-{%
- \def\@dc@parse@next{#3}%
- \emptify\@dc@seQuence
- \ArgumentCatcher@Q@{#1}{#2}}
-
-% \Define\ArgumentCatcher@PQ
-\let\ArgumentCatcher@PQ\ArgumentCatcher@Q
-
-\long\def\ArgumentCatcher@Q@#1#2{% list, default
- % ^^A \typeout{@@@@ AC@Q@, toks@: \the\@dc@arguments}%
- \@ifnextsingle
- {\ArgumentCatcher@Q@@{#1}{#2}}%
- {\@dc@seQuence@finish{#2}}%
-}
-
-\long\def\ArgumentCatcher@Q@@#1#2#3{% list, default, token to be checked\\
- % we only launch this macro when not
- % before opening curly brace. \inverb|#1| is the list of acceptable
- % values, \inverb|#2| the default value, \inverb|#3| is the token to
- % be sought on the list.
- \IfAmong #3\among{#1}%
- {\addtomacro\@dc@seQuence#3%
- \ArgumentCatcher@Q@{#1}{#2}}%
- {\@dc@seQuence@finish{#2}#3}%
-}
-
-\long\def\@dc@seQuence@finish#1{%
- % ^^A \typeout{@@@@ l.\the\inputlineno\space \@xa\unexpanded\@xa{\@dc@seQuence}}%
- \ifx\@dc@seQuence\@empty\def\@dc@seQuence{#1}\fi
- \@xa\@dc@addargum\@xa{\@xa{\@dc@seQuence}}%
- % ^^A \typeout{@@@@ finish, toks@: \the\@dc@arguments}%
- \@dc@parse@next\@dc@arguments }
-
-
-\long\def\ArgumentCatcher@c#1\@dc@arguments{%
- \@ifnextchar(%^^A)
- {\def\@dc@parse@next{#1}\ArgumentCatcher@c@}%
- {%
- % ^^A \PackageError{gmutils/gmparse}{Missing coordinate argument}%
- % ^^A {A value of (0,0) is assumed}%
- \@dc@addargum{{\NoValue}}#1\@dc@arguments}%
-}
-
-\def\DCcoordinate{%
- \def\ArgumentCatcher@c@(##1){%
- \IfAmong,\among{##1}%
- {\@xa\@dc@addargum\@dc@commasep##1\@dc@commasep}%
- {\@dc@addargum{{##1}}}\@dc@parse@next\@dc@arguments}%
- % \stanza
- \def\@dc@commasep##1,##2\@dc@commasep{{{{##1}{##2}}}}%
- % \stanza
- \long\def\ArgumentCatcher@Pc@(##1){%
- \IfAmong,\among{##1}%
- {\@xa\@dc@addargum\@dc@commasep##1\@dc@commasep}%
- {\@dc@addargum{{##1}}}\@dc@parse@next\@dc@arguments}%
-}
-
-\def\DCnocoordinate{%
- \def\ArgumentCatcher@c@(##1){%
- \@dc@addargum{{##1}}\@dc@parse@next\@dc@arguments}%
- % \stanza
- \long\def\ArgumentCatcher@Pc@(##1){%
- \@dc@addargum{{##1}}\@dc@parse@next\@dc@arguments}%
-}
-
-\DCnocoordinate
-
-\long\def\ArgumentCatcher@C#1#2\@dc@arguments{%
- \@ifnextchar(%^^A)
- {\def\@dc@parse@next{#2}\ArgumentCatcher@c@}%
- {\@dc@addargum{{#1}}#2\@dc@arguments}}
-
-
-\long\def\ArgumentCatcher@Pc#1\@dc@arguments{%
- \@ifnextchar(%^^A)
- {\def\@dc@parse@next{#1}\ArgumentCatcher@Pc@}%
- {\@dc@addargum{{\NoValue}}#1\@dc@arguments}%
-}
-
-\long\def\ArgumentCatcher@PC#1#2\@dc@arguments{%
- \@ifnextchar(%^^A)
- {\def\@dc@parse@next{#2}\ArgumentCatcher@Pc@}%
- {\@dc@addargum{{#1}}#2\@dc@arguments}}
-
-
-\long\def\ArgumentCatcher@Pm#1\@dc@arguments#2{%
- \@dc@addargum{{#2}}#1\@dc@arguments}
-
-\def\gmu@hashes#1#2{% this is a~fully expandable loop analogous to
- % that of The % \eTeX\ Manual p.~9.
- \ifnum#1<#2%
- ####\number#1
- \expandafter\gmu@hashes
- \expandafter{\number\numexpr#1+1\expandafter}%
- \expandafter{\number#2\expandafter}%
- \fi}% of |\gmu@hashes|.
-
-\def\gmu@hashesbraced#1#2{%
- \ifnum#1<#2%
- {####\number#1}%
- \expandafter\gmu@hashesbraced
- \expandafter{\number\numexpr#1+1\expandafter}%
- \expandafter{\number#2\expandafter}%
- \fi}% of |\gmu@hashesbraced|.
-
-\@tempcnta=1
-\@whilenum\@tempcnta<9\do{%
- \edef\gmu@ms{\romannumeral\numexpr\@tempcnta*1000 }%
- %
- % ^^A \typeout{@@@@ gmutils.sty: defining \bslash
- % ^^A ArgumentCatcher@\gmu@ms}%
- \edef\gmu@tempa{%
- \long\def\@xa\@nx\csname
- ArgumentCatcher@\gmu@ms
- \endcsname
- ##1\@nx\@dc@arguments{\def\@nx\@dc@parse@next{##1}%
- \@xa\@nx\csname
- ArgumentCatcher@\gmu@ms @%
- \endcsname}%
- %
- \def\@xa\@nx\csname
- ArgumentCatcher@\gmu@ms @%
- \endcsname
- \gmu@hashes1{\numexpr\@tempcnta+1}%
- {\@nx\@dc@addargum{%
- \gmu@hashesbraced1{\numexpr\@tempcnta+1}}%
- \@nx\@dc@parse@next\@nx\@dc@arguments
- }% of \incs{ArgumentCatcher@\<m's>@}.
- }% of |\edef|.
- \gmu@tempa
- \advance\@tempcnta1\relax
-}% of the loop.
-
-% The loop above defines 8 pairs of macros as we see thanks to the
-% code below:
-\if 1 1
-\@tempcnta\@ne
-\@whilenum\@tempcnta<9\do{%
- \edef\gmu@ms{\romannumeral\numexpr\@tempcnta*1000}%
- \typeout{\bslash ArgumentCatcher@\gmu@ms:%
- ^^J\@xa\meaning\csname ArgumentCatcher@\gmu@ms\endcsname}%
- \typeout{\bslash ArgumentCatcher@\gmu@ms @:%
- ^^J\@xa\meaning\csname ArgumentCatcher@\gmu@ms @\endcsname}%
- \advance\@tempcnta\@ne
-}
+\unless\ifcsname ifgmu@quiet\endcsname
+\Name\newif {ifgmu@quiet}% % it has to be at least (at highest) in
\fi
-% The code above produces on the terminal:
-%\begin{verbatim}
-% \ArgumentCatcher@m:
-% macro:#1\@dc@arguments ->\def \@dc@parse@next {#1}\ArgumentCatcher@m@
-% \ArgumentCatcher@m@:
-% macro:#1->\addto@hook \@dc@arguments {{#1}}\@dc@parse@next \@dc@arguments
-% \ArgumentCatcher@mm:
-% macro:#1\@dc@arguments ->\def \@dc@parse@next {#1}\ArgumentCatcher@mm@
-% \ArgumentCatcher@mm@:
-% macro:#1#2->\addto@hook \@dc@arguments {{#1}{#2}}\@dc@parse@next \@dc@arguments
-% \ArgumentCatcher@mmm:
-% macro:#1\@dc@arguments ->\def \@dc@parse@next {#1}\ArgumentCatcher@mmm@
-% \ArgumentCatcher@mmm@:
-% macro:#1#2#3->\addto@hook \@dc@arguments {{#1}{#2}{#3}}\@dc@parse@next \@dc@arguments
-% \ArgumentCatcher@mmmm:
-% macro:#1\@dc@arguments ->\def \@dc@parse@next {#1}\ArgumentCatcher@mmmm@
-% \ArgumentCatcher@mmmm@:
-% macro:#1#2#3#4->\addto@hook \@dc@arguments {{#1}{#2}{#3}{#4}}\@dc@parse@next \@dc@arguments
-% \ArgumentCatcher@mmmmm:
-% macro:#1\@dc@arguments ->\def \@dc@parse@next {#1}\ArgumentCatcher@mmmmm@
-% \ArgumentCatcher@mmmmm@:
-% macro:#1#2#3#4#5->\addto@hook \@dc@arguments {{#1}{#2}{#3}{#4}{#5}}\@dc@parse@next \to
-% ks@
-% \ArgumentCatcher@mmmmmm:
-% macro:#1\@dc@arguments ->\def \@dc@parse@next {#1}\ArgumentCatcher@mmmmmm@
-% \ArgumentCatcher@mmmmmm@:
-% macro:#1#2#3#4#5#6->\addto@hook \@dc@arguments {{#1}{#2}{#3}{#4}{#5}{#6}}\@dc@parse@ne
-% xt \@dc@arguments
-% \ArgumentCatcher@mmmmmmm:
-% macro:#1\@dc@arguments ->\def \@dc@parse@next {#1}\ArgumentCatcher@mmmmmmm@
-% \ArgumentCatcher@mmmmmmm@:
-% macro:#1#2#3#4#5#6#7->\addto@hook \@dc@arguments {{#1}{#2}{#3}{#4}{#5}{#6}{#7}}\@dc@pa
-% rse@next \@dc@arguments
-% \ArgumentCatcher@mmmmmmmm:
-% macro:#1\@dc@arguments ->\def \@dc@parse@next {#1}\ArgumentCatcher@mmmmmmmm@
-% \ArgumentCatcher@mmmmmmmm@:
-% macro:#1#2#3#4#5#6#7#8->\addto@hook \@dc@arguments {{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}}\@
-% dc@parse@next \@dc@arguments
-%\end{verbatim}
-
-
-\def\ArgumentCatcher@mmmmmmmmm\the\@dc@arguments
-#1#2#3#4#5#6#7#8#9{% yes, it has to be
- % delimited (well, actually: started) by \inverb|\the\@dc@arguments| not
- % only \incs{@dc@arguments}. And it doesn't need to be long and launch inner
- % short macro because there's nothing more to catch.
- \@dc@addargum{%
- {#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}\the\@dc@arguments}
+\RequirePackage{xkeyval}
-\long\def\ArgumentCatcher@Pm#1\@dc@arguments#2{% catcher of a~long mandatory.
- \@dc@addargum{{#2}}#1\@dc@arguments}
+\RequirePackage{gmbase}
-\long\def\ArgumentCatcher@K % a~Knuthian delimited or undelimited
-% arguments parsed and passed to the command's body in a~digest
-% (Knuthian replacement)
-#1% the particular Knuthian macro
-#2% the tail of args parser.
-\@dc@arguments % tail delimiter
-{\def\@dc@parse@next{#2}#1}
-
-\let\ArgumentCatcher@PK\ArgumentCatcher@K
-
-\long\def\gmu@twostring#1#2{\string#1\string#2}
-
-\long\def\ArgumentCatcher@G % general catcher
-#1% left and right delimiter
-#2% default value
-#3% the tail of args parser.
-\@dc@arguments % tail delimiter
-{%
- \edef\@dc@Gname{ArgumentCatcher@G\gmu@twostring#1}%
- \unless\ifcsname \@dc@Gname \endcsname
- \@xa\def\csname \@dc@Gname\@xa\endcsname
- \@dc@Gparams#1{\@dc@addargum{{##2}}##1\@dc@arguments}%
- \fi
- \@xa\@ifnextchar\@firstoftwo#1%
- {\def\dc@parse@next{#3}% we hide possible |\par|s.
- \csname\@dc@Gname\endcsname\dc@parse@next}%
- {\@dc@addargum{{#2}}#3\@dc@arguments}%
+\DeclareOptionX{quiet}{\gmu@quiettrue
+ \PassOptionsToPackage{quiet}{gmtypos}%
}
-
-\long\def\ArgumentCatcher@PG % general catcher
-#1% left and right delimiter
-#2% default value
-#3% the tail of args parser.
-\@dc@arguments % tail delimiter
+\def\gmu@PackOptionX
+#1% name of a package with or without leading “gm”.
{%
- \edef\@dc@Gname{ArgumentCatcher@PG\gmu@twostring#1}%
- \unless\ifcsname \@dc@Gname \endcsname
- \long\@xa\def\csname \@dc@Gname\@xa\endcsname
- \@dc@Gparams#1{\@dc@addargum{{##2}}##1\@dc@arguments}%
- \fi
- \@xa\@ifnextchar\@firstoftwo#1%
- {\csname\@dc@Gname\endcsname{#3}}%
- {\@dc@addargum{{#2}}#3\@dc@arguments}%
-}
-
-
-\long\def\@dc@Gparams#1#2{##1#1##2#2}% expands to parameters string
-% with \inhash1 delimited with first argument and \inhash2 delimited
-% with second. In fact it's intended to pass \inhash1 further (it will
-% always be braced) and to catch an argument put in a~pair of tokens
-% given \incmd\@dc@Gparams\ as the arguments.
-
-\long\def\ArgumentCatcher@A{\ArgumentCatcher@G{<>}}
-\long\def\ArgumentCatcher@PA{\ArgumentCatcher@PG{<>}}
-
-\long\def\ArgumentCatcher@a{\ArgumentCatcher@G{<>}{\NoValue}}
-\long\def\ArgumentCatcher@Pa{\ArgumentCatcher@PG{<>}{\NoValue}}
-
-
-\def\NoValue{-NoValue-}
-
-\long\def\IfNoValueTF#1{% % \chgs{2008/12/1 v0.98 the \pk{xparse} tests for
- % the presence of value redefined and much simplified (43 \CS'es
- % less). Moreover, they are now fully expandable: \cmd\IfNoValueTF,
- % \cmd\IfNoValueT, \cmd\IfNoValueF, \cmd\IfValueTF, \cmd\IfValueT,
- % \cmd\IfValueF}
- %
- \@xa\ifx\@firstofmany#1\@empty\@@nil\NoValue \afterfi\@firstoftwo
- \else\afterfi\@secondoftwo
- \fi}
-
-\long\def\IfNoValueT#1#2{\IfNoValueTF{#1}{#2}\@empty}
-
-\long\def\IfNoValueF#1#2{\IfNoValueTF{#1}\@empty{#2}}
-
-\long\def\IfValueTF#1#2#3{\IfNoValueTF{#1}{#3}{#2}}
-
-\long\def\PutIfValue#1{\IfValueT{#1}{#1}}
-
-% \Define\IfValueT
-\let\IfValueT\IfNoValueF
-
-% \Define\IfValueF
-\let\IfValueF\IfNoValueT
-
-\long\pdef\IfLong#1{%\
- % \begin{enumargs}
- % \item the argument to check for |\par|,
- % \item what if |\par| found,
- % \item what if |\par| not found.
- % \end{enumargs}
- %
- \edef\gmu@reserveda{\detokenize{#1}}%
- \edef\gmu@reserveda{%
- \IfAmong\string\par\@nx\among{\gmu@reserveda}}%
- \gmu@reserveda}
-
-
-% |\afterassignment| pseudo-argument
-
-\long\@namedef{ArgumentCatcher@\detokenize{\afterassignment}}%
-#1% register used in the assignment
-#2% the tail of args parser.
-\@dc@arguments{%
- \def\@dc@parse@next{%
- \@dc@addargum\NoValue % to make ignoring mechanism work
- #2\@dc@arguments}%
- \afterassignment\@dc@parse@next
- #1}% optional space and |=| is left at user's discretion. In fact,
-% \inhash1 may be empty and then each
-% time our command is used the left side of the assignment has to
-% be given explicitly and may even be different each time.
-
-\n@melet{ArgumentCatcher@P\detokenize{\afterassignment}}
-{ArgumentCatcher@\detokenize{\afterassignment}}
-
-% |\gobblespace| pseudo-argument: useful between optional and
-% Knuthian-type arguments and after all parsing. Equivalent
-% |>iT{\somedummymacro}|. At first I wanted mark it |\ignorespaces|
-% but the gobbling doesn't expand macros: it doesnt't use
-% |\ignorespaces| but |\@ifnextchar|'s space trick.
-
-\long\@namedef{ArgumentCatcher@\detokenize{\gobblespace}}%
-{\ArgumentCatcher@S{\dc@gobblespace@dummy}{\NoValue}}
-
-\n@melet{ArgumentCatcher@P\detokenize{\gobblespace}}
-{ArgumentCatcher@\detokenize{\gobblespace}}
-
-\def\dc@gobblespace@dummy{\dc@gobblespace@dummy}
-
-\let\gobblespace\dc@gobblespace@dummy
-
-
-% end of catchers' definitions
-
-
-\DeclareCommand\DeclareCommand % This is the final version by now.\
- % Note we introduce the ‘prefixes’ at the \inhash2 position only at \
- % this point so we have yet to prefix every argument specifier\
- % separately. Note also we only here ‘teach’ |\DeclareCommand| to
- % pass the name of its main argument in the |\dc@bsname| macro.
-{>Pm % (1) command to be defined (may be \incs{par} if you
- % really wish),
- Q{\global\protected\outer\long!lL.qQiIwW\sphack\envhack}%\
- % \label{Q-type} % (2) an optional
- % se\textbf Quence of \eTeX's prefixes and/or |!| or |l| or |L|
- % for ‘all
- % long’ and/or |.| or |q| or
- % |Q| for `quiet' (message about calling the command is
- % suppressed) and/or % |i| or |I| as ‘invisible’ or |W| or |w| as
- % ‘white’ or |\sphack| to make the command ‘invisible’ in
- % the leading with the \incs{@bsphack}…\incs{@esphack}\qfootnote{To
- % deal with an ‘invisible’ environment, there is one more
- % acceptable value of this argument: \cmd\envhack, which
- % suppresses placing \cs{@bsphack}---\cs{@esphack} and places
- % \cs{@ignoretrue} instead in the end macro.},
- >Pm % (3) arguments specification (may contain \incmd\par),
- >Pm % (4) the definition body; may contain nearly anything including
- % \incmd\par\ and tests for presence/absence of arguments
- % \nlperc|\If›[No›]Value›(T⁄|F⁄|TF›)| and for their longness \incmd\IfLong;
- % you refer to the arguments with \inverb|#|\<n>.
-}{% \label{DC:final} %
- % \chgs{2008/12/05 v0.98 added the \cs{@bsphack}---\cs{@esphack} option}
- % \chgs{2008/12/07 v0.98 added the \env{Q\arg{tokens}} argument type
- % (a~word over the alphabet \<tokens>)}
- %
- % ^^A \edef\@detokena{\detokenize{{#1} {#2} {#3} {#4} {#5} {#6}}}%
- % ^^A \typeout{\@detokena}%
- %
- \edef\dc@bsname{\string#1}% we'll use it in K-type arg.\ catcher and
- % to allow \inhash1${}=={}$\incs{par}
- % (\incs{Pack\+age\+Warn\+ing} is short and \incs{typeout} too!).
- \gm@testdefined#1\iftrue
- \IfDCMessages
- \PackageWarning{gmutils (gmparse)}{Redefining command \dc@bsname\space
- with \string\DeclareCommand}%
- \fi
- \else
- \IfDCMessages
- \typeout{^^J\string\DeclareCommand\dc@bsname\space (new)^^J}%
- \fi
- \fi
- %
- % First we parse the declaration options to know whether all the
- % arguments are to be long and whether we should suppress the
- % message ``Parsing arguments for…''.\nostanza
- \@dc@alllong@false
- \@dc@quiet@false
- % ^^A \typeout{@@@@ \the\inputlineno\space DC \xiihash1: \@nx#1}%
- \IfIntersect{#2}{\long!lL}{%
- % ^^A \typeout{@@@ \@nx #1 \space intersect with !lL }%
- \@dc@alllong@true}{}%
- \IfIntersect{#2}{.qQ}{\@dc@quiet@true}{}%
- \IfIntersect{#2}{iIwW\sphack}%
- {% if `invisibility' is specified: \UnDef
- \def\@dc@bsphack@{\@nx\@bsphack}% \UnDef
- \def\@dc@esphack@{\@nx\@esphack}%
- }%
- {\emptify\@dc@bsphack@\emptify\@dc@esphack@}% if `invisibility' is not specified.
- \IfAmong\envhack\among{#2}%
- {% but if we define an environment:
- \emptify\@dc@bsphack@\emptify\@dc@esphack@}%
- {% and if we don't define an environment:
- \emptify\@dc@env@argstoend}%
- \relaxen\@dc@global@ \relaxen\@dc@outer@
- \IfAmong\outer\among{#2}{\let\@dc@outer@\outer}{}%
- \IfAmong\global\among{#2}{\let\@dc@global@\global}{}%
- % We initialise the scratch count and toks registers before parsing
- % of the arguments specifiers.\nostanza
- \@dc@catchernum\z@
- \@dc@argnum\z@
- \toks@{}%
- \@temptokena\toks@
- \@temptokenb\toks@
- % We parse the arguments specifiers:\nostanza
- \@dc#3X% |X| is the sentinel of parsing.\par
- % Now we define the basic macro:\nostanza
- \@dc@outer@\@dc@global@ % possibly the prefixes,
- \protected\edef#1{% always |\protected| \balsmiley( ;-)
- \@dc@bsphack@ % perhaps |\@bsphack|
- \unless\if@dc@quiet@
- \unexpanded{%
- \IfDCMessages
- \typeout}{Parsing arguments for \dc@bsname.}%
- \@nx\fi
- \fi
- \@nx\@dc@{\the\toks@}% in the braces appear the argument catchers.
- \@xa\@nx\csname\dc@bsname\endcsname
- \ifx\@dc@outer@\outer
- \@xa\@nx\csname \@xa\gobble\string#1 \endcsname % note the blank
- % space after \inhash1! If the command is to be \incmd\outer, we
- % can't put it itself, so we put another, whose name is the same
- % plus a~space. Anyway, since \inhash1 becomes \incmd\protected,
- % this case will never be executed.
- \else \@nx #1%
- \fi
- }% \UnDef
- \edef\gmu@reserveda{%
- \@dc@global@ % perhaps |\global|
- \long\def\@xa\@nx\csname\string#1\endcsname% for a~command
- % \incmd\command, define \incs{\bslash command}\ilrr
- \the\@temptokena% it's |#1#2#3…|
- {% the definition body:
- \@dc@env@argstoend % if we define an environment, this macro
- % will provide passing the arguments to the end macro (see
- % line \ref{@dc@env@argstoend}).
- % ^^A \IfNoValueTF{#1}%
- % ^^A {\@dc@test@long\@nx#2{\the\@temptokena}}{}%
- \unexpanded{#4}%
- \@dc@esphack@}%
- }% of |\edef|.
- \gmu@reserveda
-}% of |\DeclareCommand|.
-
-% Now we have a~convenient tool to implement parsing of a~Knuthian
-% argument(s).
-
-% Knuthian argument's default replacement
-\def\@dc@K@defaultrepl{##1}
-% 2009/11/22 inner pair of braces removed (as leading to additional
-% group causing errors).
-
-\DeclareCommand\@dc@define@K\long{mb}{% \label{K@parse}
- % first we add the particular \CS to the toks register:\nostanza
- \edef\gmu@tempa{%
- \unexpanded{\toks@\@xa}%
- {\@nx\the\toks@{%
- \@xa\@nx\csname\dc@bsname @K\the\@dc@catchernum\endcsname}}%
- }\gmu@tempa
- % and define this macro: \nostanza
- \edef\gmu@tempa{%
- \def\@xa\@nx\csname\dc@bsname @K\the\@dc@catchernum\endcsname
- \unexpanded{#1}{%
- \@nx\@dc@addargum{{%
- \IfValueTF{#2}{\unexpanded{#2}}{\@xau{\@dc@K@defaultrepl}}%
- }}% we add the Knuthian
- % replacement to the toks register as \inhash n.
- \@nx\@dc@parse@next\@dc@arguments}% and continue parsing.
- }% of |\edef|. Now we execute this temporary macro, which means we \incmd\def|\⁄<command>@K⁄<n>|
- \@dc@global@ % set properly before |\@dc#3X|.
- \if P\@dc@long@\relax\long\fi
- \gmu@tempa
- % ^^A \nameshow{\dc@bsname @K\the\@dc@catchernum}%
- % Now we clean up and continue construction of arguments parser. \nostanza
- \emptify\@dc@long@
- \@dc
-}
-
-
-\DeclareCommand\DeclareEnvironment\long
-{m% Pm the environment's name; you may wonder why it allows
- % \incmd\par. Once I~met an environment with a~name containing
- % \nlperc|\string\par|.
- Q{\outer\global\protected\long!lL.qQiIwW\sphack\envhack}% \
- % a~sequence of \eTeX's prefixes and/or specifiers to make all the
- % arguments ‘long’ (\incmd\long, |!|,
- % |l| or |L|)
- % and/or not to place the message issuer in the command
- % (\inverb|.|, \inverb|q|, \inverb|Q|) and/or to make the
- % environment ignore spaces following its end (|i|, |I|, |w|, |W|
- % or \incmd\sphack),
- m % the arguments specification (both for the begin and the
- % end definitions),
- m % the begin definition,
- m % the end definition; it \emph{can} contain any
- % \inverb|#|\<n>---the arguments of the environment are passed
- % to it, too.
-}{%
- \def\@dc@env@argstoend{% \label{@dc@env@argstoend} \UnDef
- \edef
- \@xa\@nx\csname \bslash#1(arguments)\endcsname
- {\unexpanded{%
- \@xa\@xa\@xa\unexpanded\@xa\@xa\@xa{\@xa\@gobble\the\@dc@arguments}%
- }% of outer |\unexpanded|,
- }% of |\edef|'s body.
- % \nostanza Note that |\@dc@env@argstoend| will be put in an
- % |\edef| and the arguments bearer it sets will be defined as custom for
- % this particular environment (its name contains the name of the
- % environment) and inside the environment's group
- % and will bear a~list of tokens \arg{arg.1}{arg.2}\mch… not
- % the \CS\ |\@dc@arguments| so it's robust to nested environments
- % and even to \cs{DeclareEnvironment}'s occurrences inside the
- % environment.\fullpar \nostanza
- }% of |\@dc@env@argstoend|.
- %
- \def\gmu@reserveda{\envhack}% we add the information we define an
- % environment.
- \IfValueT{#2}%
- {\addtomacro\gmu@reserveda{#2}}% we pass all the ‘prefixes’ to
- % \incs{Decl\+are\+Comm\+and}
- % \stanza
- \@xa\DeclareCommand\csname#1\@xa\endcsname
- \gmu@reserveda{#3}{#4}%
- %
- %\nostanza Now the begin definition is done. Let's get down to the
- %end definition. \nostanza
- %
- \@dc@global@ % note this \CS was for sure redefined by the last
- % \incs{Decl\+are\+Com\+m\+and} (and by nothing else) and that's
- % exactly what we want.
- \@nameedef{end#1}% It's |\edef| inside.
- {\@nx\@xa\@xa\@nx\csname\bslash end#1\endcsname
- \@xa\@nx\csname \bslash#1(arguments)\endcsname}%
- % \nostanza We |\edef| the |\end|\<env. name> macro to be
- % \[|\expandafter\\end⁄<env. name>\\⁄<env. name>(arguments)|\]
- % (it's |\expandafter| and two control sequences, the latter with
- % |(arguments)| in its name).
- %
- \IfIntersect{#2}{iIwW\sphack}%
- {\@dc@global@\@xa\addtomacro
- \csname end#1\endcsname{\@ignoretrue}}{}%
- \edef\gmu@reserveda{% \UnDef
- \@dc@global@\long\def % the inner end macro is always \incmd\long\
- % and perhaps defined \incmd\global ly.
- \@xa\@nx\csname\bslash end#1\endcsname
- \the\@temptokena% it's |#1#2#3›…|---the inner end macro takes the
- % same number of parameters as the begin macro.
- {% the definition body
- % ^^A \IfNoValueTF{#1}%
- % ^^A {\@dc@test@long\@nx#2{\the\@temptokena}}{}%
- \unexpanded{#5}}%
- }% of |\edef|.
- \gmu@reserveda
-}
-
-
-% ^^A \unless\ifdefined\DeclareDocumentCommand
-% ^^A \let\DeclareDocumentCommand\DeclareCommand
-% ^^A \fi
-% ^^A
-% ^^A \unless\ifdefined\DeclareDocumentEnvironment
-% ^^A \let\DeclareDocumentEnvironment\DeclareEnvironment
-% ^^A \fi
-
-
-
-% \division{Ampulex Compressa-like modifications of macros}
-% Ampulex Compressa is a~wasp that performs brain surgery on its
-% victim cockroach to lead it to its lair and keep alive for its
-% larva. Well, all we do here with the internal \LaTeX\ macros
-% resembles Ampulex's actions but here is a~tool for a~replacement of
-% part of macro's definition.
-%
-% The \cs{ampulexdef} command takes its |#2| which has to be a~macro
-% and replaces part of its definition delimited with |#5| and |#6|
-% with the replacement |#7|. The redefinition may be prefixed with
-% |#1|. |#2| may have parameters and for such a~macro you have to set
-% the parameters string and arguments string (the stuff to be taken by
-% the one-step expansion of the macro) as the optional |[#3]| and
-% |[#4]|. . If \cs{ampulexdef} doesn't find the start and end tokens
-% in the meaning of the macro, it does nothing to it. You have to
-% write |####| instead of |#| or you can use |\ampulexhash| as
-% well. For an example use see line \ref{ampulexset}.
-
-%^^A \showthe\catcode`:
-%^^A \showthe\catcode`_
-%^^A
-%^^A \gmu@storespecials
-%^^A
-%^^A \RequirePackage{xparse}[2008/08/03]
-%^^A
-%^^A % This should not happen but well, it did: the catcodes changed the
-%^^A % \pk{expl3} way leaked so I~fix them here.
-%^^A \gmu@septify
-%^^A \@makeother\:
-%^^A \catcode`_=8
-%^^A \catcode`\ =10
-
-
-\DeclareCommand\ampulexdef\long
-{Q{\outer\long\global\protected} % (1) (optional) prefix\:(es);
- % allowed is any sequence of them in any order, just like for the
- % original \TeX's \incmd\def.
- S{\def\edef\gdef\xdef\pdef} % (2) (optional) kind of definition; if
- % not specified, \incmd\def\ will be used.
- m % (3) macro to be redefined,
- O{} % (4) \cs{def}'s parameters string; empty by default,
- O{} % (5) definition body's parameters to be taken in a~one-step
- % expansion of the redefined macro; empty by default,
- m % (6) start token(s),
- m % (7) end token(s)
- m % (8) the replacement
-}{%^^B
- % \changes{v0.93}{2008/08/29}{added}
- % \changes{v0.94}{2008/09/07}{made \pk{xparse}-ish and
- % \cs{ampulexset} removed}
- % \chgs{2008/12/7 v0.98 first argument (the prefix) made of the
- % \env{Q} type}
- % For the example of usage see \ref{ampulexset}. \HideDef
- \def\gmu@tempa{#6}%
- \def\gmu@tempb{#7}%
- \def\gmu@tempc{#8}% we wrap the start, end and replacement tokens in
- % macros to avoid unbalanced \incs{if}s. \ResumeDef
- \edef\gmu@tempd{%
- \long\def\@nx\gmu@tempd
- ####1\detoken@xa\gmu@tempa
- ####2\detoken@xa\gmu@tempb
- ####3\@nx\gmu@tempd{%
- \unexpanded{% \chgs[\ampulexdef]{2008/11/30 v0.98 a~bug fixed:
- % added \cs{unexpanded}}
- \@ifempty{##3}{\hidden@iffalse}{\hidden@iftrue}}}}%
- %
- \gmu@tempd% it defines \incs{gmu@tempc} to produce an open \incs{if}
- % depending on whether the start and end token(s) are found in the
- % meaning of \inverb|#3|.
- %
- \edef\gmu@tempe{%
- \@nx\gmu@tempd\all@other#3% note that |#3| may have parameters so
- % we have to look at its meaning not at its one-level expansion,
- % which could produce an ‘extra \cmd\}’ error.
- \detoken@xa\gmu@tempa
- \detoken@xa\gmu@tempb\@nx\gmu@tempd
- }%
- %
- \gmu@tempe% we apply the checker and it
- % produces an open \incs{if}.
- \edef\gmu@tempd{%
- \long\def\@nx\gmu@tempd
- ####1\@xa\unexpanded\@xa{\gmu@tempa}%
- ####2\@xa\unexpanded\@xa{\gmu@tempb}%
- ####3\@nx\ampulexdef{% we define a~temporary
- % macro with the parameters delimited with the `start' and `end' parameters
- % of \incs{ampulexdef}.\fullpar
- \@nx\unexpanded{####1}%
- \@nx\@xa\@nx\unexpanded
- \@nx\@xa{\@nx\gmu@tempc}%we replace the part of the redefined
- % macro's meaning with the replacement text.
- \@nx\unexpanded{####3}}}%
-%^^A\show\gmu@tempd
- \gmu@tempd
-%^^A\show\gmu@tempd
- %
- \edef\gmu@tempf{#5}%
- \edef\gmu@tempe{%
- \IfValueT{#1}{#1}\IfValueTF{#2}{#2}{\def}%
- \@nx#3#4{%
- \@xa\@xa\@xa\gmu@tempd\@xa#3\gmu@tempf\ampulexdef}}%
- \gmu@tempe
- \fi}
-
-\def\ampulexhash{####}% for your convenience (not to count the hashes).
-
-% For the heavy debugs I~was doing while preparing \pk{gmdoc}, as
-% a~last resort I~used |\showlists|. But this command alone was
-% usually too little: usually it needed setting |\showboxdepth| and
-% |\showboxbreadth| to some positive values. So,
-%
-\def\gmshowlists{\showboxdepth=1000 \showboxbreadth=1000 \showlists}
-% \changes{v0.59}{06/09/04}{moved here from \pk{gmdoc}}
-
-
-
-\newcommand\nameshow[1]{\@xa\show\csname#1\endcsname}
-\newcommand\nameshowthe[1]{\@xa\showthe\csname#1\endcsname}
-% Note that to get proper |\showthe\my@dimen14| in the `other' |@|'s
-% scope you write |\nameshowthe{my@dimen}14|\,.
-
-% Standard |\string| command returns a~string of `other' chars except
-% for the space, for which it returns | |$_{10}$. In \pk{gmdoc}
-% I~needed the spaces in macros' and environments' names to be always
-% \catother, so I~define
-% \Define\xiistring
-% \changes{v0.59}{06/09/04}{moved here from \pk{gmdoc}}
-\long\def\xiistring#1{%
- \if\@nx#1\xiispace
- \xiispace
- \else
- \afterfi{\string#1}% to make the same error as bare |\string|
- % would cause in case of empty \inhash1.
- \fi}
-
-%The next macro is applied to a~|\detokenized| nonempty string to convert the spaces into
-% ‘other’. \nostanza
-\def\@xiispaces#1 #2\@@nil{%
- #1%
- \ifx\@xiispaces#2\@xiispaces
- \else
- \xiispace
- \afterfi{\@xiispaces#2\@@nil}%
- \fi}
-
-
-% \division{Environments redefined}
-% \subdivision{Almost an environment or redefinition of \cs{begin}}
-%
-% We'll extend the functionality of |\begin|: the non-starred
-% instances shall act as usual and we'll add the starred version. The
-% difference of the latter will be that it won't check whether the
-% `environment' has been defined so any name will be allowed.
-%
-% This is intended to structure the source with named groups that
-% don't have to be especially defined and probably don't take any
-% particular action except the scoping.
-%
-% (If the |\begin*|'s argument is a~(defined) environment's name,
-% |\begin*| will act just like |\begin|.)
-% \dekmedskip
-%
-% Original \LaTeX's |\begin|:
-% \begin{verbatim}
-%\def\begin#1{%
-% \@ifundefined{#1}%
-% {\def\reserved@a{\@latex@error{Environment #1 undefined}\@eha}}%
-% {\def\reserved@a{\def\@currenvir{#1}%
-% \edef\@currenvline{\on@line}%
-% \csname #1\endcsname}}%
-% \@ignorefalse
-% \begingroup\@endpefalse\reserved@a}
-%\end{verbatim}
-%
-% \Define\@begnamedgroup
-\long\def\@begnamedgroup#1{%
- \edef\@prevgrouplevel{\the\currentgrouplevel}% added 2009/03/24 to
- % handle special pseudo-environments that don't increase
- % \incmd\currentgrouplevel (such as \inenv{document}). Note it's
- % |\edef|ed \emph{outside} the environment's group.
- \@ignorefalse% not to ignore blanks after group
- \begingroup\@endpefalse
- \edef\@prevenvir{\@currenvir}% Note we |\edef| it inside the group
- % (for obvious reason), unlike the ‘previous’ grouplevel.
- \edef\@currenvir{#1}% We could do recatcoding
- % through\inverb|\string| or \nlperc\cmd\detokenize\ but all the name
- % `other' and 10 could affect
- % a~thousand packages so we don't do that and we'll recatcode in
- % a~testing macro, see line \ref{@ifenvir}.
- \edef\@currenvline{\on@line}%
- \csname #1\endcsname}% if the argument is a~command's name (an
-% environment's e.g.), this command will now be executed. (If the
-% corresponding control sequence hasn't been known to \TeX, this line
-% will act as |\relax|.)
-
-% Let us make it the starred version of |\begin|.
-% \begin{DoIndex}{\begin}
-% \Define\begin
-% \Define*{\begin*}
-\def\begin{\gm@ifstar{\@begnamedgroup}{%
- \@begnamedgroup@ifcs}}
-% \end{DoIndex}
-
-\def\@begnamedgroup@ifcs#1{%
- \ifcsname#1\endcsname\afterfi{\@begnamedgroup{#1}}%
- \else\afterfi{\@latex@error{Environment #1 undefined}\@eha}%
- \fi}%
-
-
-%\subdivision{\cs{@ifenvir} and improvement of \cs{end}}
-%
-% \changes{v0.74}{2006/11/27}{The catcodes of \cs{begin} and \cs{end}
-% argument(s) don't have to agree strictly anymore: an environment is properly
-% closed if the \cs{begin}'s and \cs{end}'s arguments result in the
-% same \cs{csname}}
-%
-% It's very clever and useful that |\end| checks whether its argument
-% is |\ifx|-equivalent |\@currenvir|. However, in standard \LaTeX\ it
-% works not quite as I~would expect: Since the idea of environment is
-% to open a~group and launch the \CS named in the |\begin|'s
-% argument. That last thing is done with |\csname…\endcsname| so
-% the catcodes of chars are irrelevant (until they are |\active|,
-% ${}_1$, ${}_2$ etc.). Thus should be also in the |\end|'s test and
-% therefore we ensure the compared texts are both expanded and made
-% all `other'.
-%
-% First a~(not expandable) macro that checks whether current
-% environment is as given in |#1|. Why is this macro |\long|?---you
-% may ask. It's |\long| to allow environments such as |\string\par|.
-%
-\long\def\@ifenvir#1{%\label{@ifenvir}\
- % \begin{enumargs}
- % \mand enquired environment name which will be confronted with
- % \incs{@currenvir}
- % \mand what if true (if the names are
- % equivalent\qfootnote{The names are checked whether they produce
- % the same \cmd\csname. They don't have to have the same
- % catcodes.})
- % \mand what if false
- % \end{enumargs}
- %
- % \changes{v0.92}{2008/08/07}{added}
-\@ifedetokens{\@currenvir}{#1}}
-
-
-\long\pdef\@ifedetokens#1#2{%
- % \begin{enumargs}
- % \item first list of tokens to be expanded and detokenized
- % \item second list
- % \item if agree
- % \item else
- % \end{enumargs}
- %
- % \chgs{2009/04/21 v0.99 moved to a~separate macro from
- % \cmd\@ifenvir\ and made symmetric to both arguments}
- % \chgs{2008/12/01 v0.98 rewritten not to make entries in the hash
- % table, thanks to \cmd\detokenize\ and made robust to open \cs{if}s
- % in the arguments thanks to substitution of explicit parameters
- % with \cmd\@firstoftwo\ and \cmd\@secondoftwo}
- \edef\gmu@tempa{#1}% to get |#1| fully expanded.
- \edef\gmu@reserveda{\@xa\detokenize\@xa{\gmu@tempa}}% with our
- % brave new \incs{begin}, \incs{@currenvir} is fully expanded,
- % remember?
- \edef\gmu@tempa{#2}% to get |#2| fully expanded.
- \edef\gmu@reservedb{\@xa\detokenize\@xa{\gmu@tempa}}%
- \ifx\gmu@reserveda\gmu@reservedb\@xa\@firstoftwo
- \else\@xa\@secondoftwo
- \fi}
-
-\def\@ifjobname#1{\@ifedetokens{\jobname}{#1}}
-
-\long\def\@ifprevenvir#1{%\label{@ifenvir}\
- % \begin{enumargs}
- % \mand enquired environment name which will be confronted with
- % \incs{@prevenvir}
- % \mand what if true (if the names are
- % equivalent\qfootnote{The names are checked whether they produce
- % the same \cmd\csname. They don't have to have the same
- % catcodes.})
- % \mand what if false
- % \end{enumargs}
- %
- % \changes{v0.92}{2009/09/04}{added}
-\@ifedetokens{\@prevenvir}{#1}}
-
-
-
-% Note that |\@ifjobname| and |\@ifenvir| are expandable and in an
-% |\edef| they expand to
-% \[|\@ifedetokens{⁄<current jobname>}{⁄<arg.1>}|\] and
-% \[|\@ifedetokens{⁄<current envir>}{⁄<arg.1>}|\] resp. which may be
-% useful for some \TeX vert.
-
-
-\def\@checkend#1{\@ifenvir{#1}{}{\@badend{#1}}}
-% \changes{v0.92}{2008/08/07}{shortened thanks to \cs{@ifenvir}}
-% Thanks to it you may write |\begin{macrocode*}| with |*|\catother
-% and end it with |\end{macrocode*}| with |*|\catletter\ (that was the
-% problem that led me to this solution). The error messages looked
-% really funny:
-%\begin{verbatim}
-%! LaTeX Error: \begin{macrocode*} on input line 1844 ended by \end{macrocode*}.
-%\end{verbatim}
-% You might also write
-% also |\end{macrocode\star}| where |\star| is defined as `other' star
-% or letter star.
-
-% \division{Storing and restoring the catcodes of specials}
-%
-% \Define\gmu@restorespecials
-\DeclareCommand\gmu@storespecials{o}{% we provide a~possibility of
- % adding stuff. For usage see line \ref{@storespecials}.
- \def\do##1{\catcode`\@nx##1=\the\catcode`##1\relax}%
- \edef\gmu@restorespecials{%
- \dospecials\do\^^M}\IfValueT{#1}{#1}}
-
-\pdef\gmu@septify{% restoring the standard catcodes of specials. The
- % name is the opposite of `sanitize' ^^A(
- % :-)\,. It restores also the original catcode of \inverb|^^M|.
- \def\do{\relax\catcode`}%
- \do\ 10\do\\0\do\{1\do\}2\do\$3\do\&4%
- \do\#6\do\^7\do\_8\do\%14\do\~13\do\^^M5\relax
- %\nostanza |%% \let\do\@makeother|\\
- % |%% \do0\do1\do2\do3\do4\do5\do6\do7\do8\do9\relax|\nostanza
-}
-
-
-
-
-%\division{From \pk{relsize}}
-%
-%\changes{v0.58}{06/09/02}{Relative font size change macros added}
-%
-% As file \pk{relsize.sty}, v3.1 dated July 4, 2003 states, \LaTeXe\
-% version of these macros was written by Donald Arseneau
-% \url{asnd@triumf.ca} and Matt Swift \url{swift@bu.edu} after the
-% \LaTeX\,2.09 \pk{smaller.sty} style file written by Bernie Cosell
-% \url{cosell@WILMA.BBN.COM}\,.
-%
-% I~take only the basic, non-math mode commands with the assumption
-% that there are the predefined font sizes.
-%
-% You declare the font size with \TextUsage\relsize\arg{n} where
-% \<n> gives the number of steps ("mag-step" = factor of 1.2) to
-% change the size by. E.g., $n = 3$ changes from |\normalsize| to
-% |\LARGE| size. Negative $n$ selects smaller fonts.
-% \TextUsage\smaller${}=={}$|\relsize{-1}|;
-% \TextUsage\larger${}=={}$|\relsize{1}|. \TextUsage\smallerr (my
-% addition)${}=={}$|\relsize{-2}|; \TextUsage\largerr\ guess yourself.
-%
-% (Since |\DeclareRobustCommand|
-% doesn't issue an error if its argument has been defined and it only
-% informs about redefining, loading \pk{relsize} remains allowed.)
-% \Define\relsize
-\pdef\relsize#1{%
- \ifmmode \@nomath\relsize\else
- \begingroup
- \@tempcnta % assign number representing current font size
- \ifx\@currsize\normalsize 4\else % funny order is to have most …
- \ifx\@currsize\small 3\else % …likely sizes checked first
- \ifx\@currsize\footnotesize 2\else
- \ifx\@currsize\large 5\else
- \ifx\@currsize\Large 6\else
- \ifx\@currsize\LARGE 7\else
- \ifx\@currsize\scriptsize 1\else
- \ifx\@currsize\tiny 0\else
- \ifx\@currsize\huge 8\else
- \ifx\@currsize\Huge 9\else
- 4\rs@unknown@warning % unknown state: |\normalsize| as starting point
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-% Change the number by the given increment:
- \advance\@tempcnta#1\relax
-% watch out for size underflow:
- \ifnum\@tempcnta<\z@ \rs@size@warning{small}{\string\tiny}\@tempcnta\z@ \fi
- \@xa\endgroup
- \ifcase\@tempcnta % set new size based on altered number
- \tiny \or \scriptsize \or \footnotesize \or \small \or \normalsize \or
- \large \or \Large \or \LARGE \or \huge \or \Huge \else
- \rs@size@warning{large}{\string\Huge}\Huge
-\fi\fi}% end of |\relsize|.
-
-\providecommand*\rs@size@warning[2]{\PackageWarning{gmutils (relsize)}{%
- Size requested is too #1.\MessageBreak Using #2 instead}}
-
-
-\providecommand*\rs@unknown@warning{\PackageWarning{gmutils (relsize)}{Current font size
- is unknown! (Why?!?)\MessageBreak Assuming \string\normalsize}}
-
-% And a~handful of shorthands:
-%
-\DeclareRobustCommand*\larger[1][\@ne]{\relsize{+#1}}
-\DeclareRobustCommand*\smaller[1][\@ne]{\relsize{-#1}}
-\DeclareRobustCommand*\textlarger[2][\@ne]{{\relsize{+#1}#2}}
-\DeclareRobustCommand*\textsmaller[2][\@ne]{{\relsize{-#1}#2}}
-\pdef\largerr{\relsize{+2}}
-\pdef\smallerr{\relsize{-2}}
-
-
-
-%\division{Meta-symbols}
-% I~fancy also another Knuthian trick for typesetting \<meta-symbols>
-% in \TeXbook. So I~repeat it here. The inner |\meta| macro is
-% copied verbatim from \pk{doc}'s v2.1b documentation dated 2004/02/09
-% because it's so beautifully crafted I~couldn't resist. I~only don't
-% make it |\long|.
-% \dekmedskip
-%
-% \begin{quotation}
-% The new implementation fixes this problem by defining
-% |\meta| in a radically different way: we prevent hyphenation by defining a |\language|
-% which has no patterns associated with it and use this to typeset the words within
-% the angle brackets.
-% \end{quotation}
-%^^A~\DefIndex\l@nohyphenation
-%^^A~\ifx\l@nohyphenation\undefined
-%^^A~ \newlanguage\l@nohyphenation
-%^^A~\fi
-\pdef\meta#1{%
- % \begin{quotation}
- % Since the old implementation of |\meta| could be used in math we better ensure
- % that this is possible with the new one as well. So we use |\ensuremath| around
- % |\langle| and |\rangle|. However this is not enough: if |\meta@font@select| below
- % expands to |\itshape| it will fail if used in math mode. For this reason we hide
- % the whole thing inside an |\nfss@text| box in that case.
- % \end{quotation}
- {\meta@fontsetting\ensuremath\langle}%
- \ifmmode\@xa\nfss@text\fi
- {% this has to be a~begin-group because \incmd{\nfss@text} becomes
- % \incmd\hbox\ in math mode.
- \gmu@activespaceblank
- \meta@font@select
- % Need to keep track of what we changed just in case the user changes font inside
- % the argument so we store the font explicitly.
- % ^^A~% \DefIndex\meta@hyphen@restore
- % ^^A \edef\meta@hyphen@restore{%
- % ^^A \hyphenchar\the\font\the\hyphenchar\font}%
- % ^^A \hyphenchar\font\m@ne
- % ^^A \language\l@nohyphenation
- #1\/%
- % ^^A~ \meta@hyphen@restore
- }%
- {\meta@fontsetting\ensuremath\rangle}%
-}% of |\meta|.
-
-\pdef\gmu@activespaceblank{%
- \@xa\def\gmu@activespace{\space\ignorespaces}% note the
- % subtle perversity of this definition: if we meet more than one
- % subsequent active spaces, then the first of them will
- % typeset \incmd\space and its \incmd\ignorespaces\ will
- % gobble \incmd\space\ of the second and will stop at
- % \incs{ignorespaces} and this \incs{ignorespaces} will gobble
- % the next \incs{space} and so on.
-}
-
-\def\meta@fontsetting{\color{red!50!black}}
-
-\def\meta@font@select{\meta@fontsetting\it}
-% \changes {v0.76}{06/9/21}{\cs{itshape} changed to an explicit and
-% violent \cs{it} to work as expected in \cs{cs}'s argument}
-% But I~define |\meta@font@select| as the brutal and explicit |\it|
-% instead of the original |\itshape| to make it usable e.g.\ in the
-% \pk{gmdoc}'s |\cs| macro's argument.
-
-
-% The below |\meta|'s drag\qfootnote{Think of the drags that transform
-% a~very nice but rather standard `auntie' (`Tante' in Deutsch) into
-% \balsmiley( a~most adorable Queen ;-)\,.} is a~version of
-% \TeXbook's one. \Define*[\<⁄kern⁄string-3pt›…>]{\<›…>}
-\def\<#1>{\meta{#1}}
-
-\pdef\metachar#1{\begingroup\metacharfont #1\endgroup}
-\def\metacharfont{\meta@fontsetting\rm}
-
-% ^^A\gmshowlists
-
-% \division{Macros for printing macros and filenames}
-%
-% First let's define three auxiliary macros analogous to |\dywiz| from
-% \pk{polski.sty}: a~shorthands for |\discretionary| that'll stick to
-% the word not spoiling its hyphenability and that'll won't allow
-% a~line break just before nor just after themselves. The
-% |\discretionary| \TeX\ primitive has three arguments: |#1| `before
-% break', |#2| `after break', |#3| `without break', remember?
-% \Define\discre \Define\discret
-\pdef\discre#1#2#3{\leavevmode\kern0sp%
- \discretionary{#1}{#2}{#3}\penalty10000\hskip0sp\relax}
-
-\pdef\discret#1{\discre{#1}{#1}{#1}}
-
-% A~tiny little macro that acts like |\-| outside the math mode and
-% has its original meaning inside math.
-\def\:{%
- \ifmmode\afterfi{\mskip\medmuskip}%
- \else\afterfi{\discre{\null}{}{}}% \incs{null} to get
- % \incs{hyphenpenalty} not \incs{exhyphenpenalty}.
- \fi}
-
-
-
-\let\gmu@discretionaryhyphen\- % for the cases when we don't redefine
- % \incs\- but use \incs\UrlFix
-
-
-\DeclareCommand\bihyphen{O{*}}{% a~redefinition of |\-| that makes it
- % optional-argument to allow further hyphenation
- \DeclareCommand\gmu@discretionaryhyphen{T{#1}ca}{%
- \IfValueT{##2}{%
- \@ifempty{##2}{}{%
- \def\gmu@bihyphen@char{##2}}%
- }%
- \IfValueT{##3}{%
- \@ifempty{##3}{}{%
- \def\gmu@bihyphen@corr{##3}}%
+ % So we declare an OptionX that by default loads this package thanks
+ % to a special \CS having been defined to load it or do nothing.
+ \DeclareOptionX{#1}[on]{%
+ % ^^V \ifcsname gmu@Require@#1\endcsname
+ % ^^V \PackageError{gmutils}{Value clash for the ***#1*** package option}{}%
+ % ^^V \fi
+ \lowercase{\@xa\if\@gobble ##1\relax}% “off” given as the value
+ \@namedef{gmu@Require@#1}{}%
+ \else % “on”
+ \afterfi{%
+ \@namedef{gmu@Require@#1}{%
+ \IfFileExists{gm#1.sty}%
+ {\RequirePackage{gm#1}}% if there's a \pk{gm} package, we load
+ % it, else we load
+ {\RequirePackage{#1}}%
+ }% of namedef
+ }% of afterfi
+ \fi
+ }% of |\DeclareOptionX|
+ \IfFileExists{gm#1.sty}%
+ {\DeclareOptionX{gm#1}[on]{%
+ \ExecuteOptionsX{#1=####1}%
}%
- \IfValueTF{##1}\discre\discretionary
- {% before break
- \IfValueTF{##2}{%
- \@ifempty{##2}{\gmu@bihyphen@char}{##2}%
- }{%
- \ifnum\hyphenchar\font>\z@
- \char\hyphenchar\font
- \fi}}% end of before break
- {%after break
- \IfValueT{##3}{%
- \@ifempty{##3}{\gmu@bihyphen@corr}{##3}%
- }%
- }%
- {% without break
- }% almost as in \TB: unlike \TB, we allow hyphenchars
- % $\ge255$ as we are \XeTeX.
- }% of |\DeclareCommand\-|
- \gmu@storeifnotyet\-% original |\-| is a~\TeX's
- % primitive, therefore we should store it.
- \let\-\gmu@discretionaryhyphen
- \let\@dischyph\gmu@discretionaryhyphen % to override \pk{framed.sty}
-}% of |\bihyphen|
-
-
-\relaxen\gmu@bihyphen@corr
-
-\pdef\vs{\discre{\visiblespace}{}{\visiblespace}}
-
-% Then we define a~macro that makes the spaces visible even if used in
-% an argument (i.e., in a~situation where re|\catcode|ing has no
-% effect).
-%
-\def\printspaces#1{{\let~=\vs \let\ =\vs \gm@pswords#1 \@@nil}}
-% \DefIndex\gm@pswords
-\def\gm@pswords#1 #2\@@nil{%
- \ifx\relax#1\relax\else#1\fi
- \ifx\relax#2\relax\else\vs\penalty\hyphenpenalty\gm@pswords#2\@@nil\fi}% note
-% that in the recursive call of \incs{gm@pswords} the argument string is
-% not extended with a~sentinel space: it has been already by
-% \incs{printspaces}.\ilrr
-
-\pdef\sfname#1{\textsf{\printspaces{#1}}}
-
-\def\gmu@discretionaryslash{\discre{/}{\hbox{}}{/}}% the second
-% pseudo-argument nonempty to get
-% \incs{hyphenpenalty} not \incs{exhyphenpenalty}.\ilrr
-
-
-\pdef\file#1{\gmu@printslashes#1/\gmu@printslashes}
-
-\def\gmu@printslashes#1/#2\gmu@printslashes{%
- \sfname{#1}%
- \ifx\gmu@printslashes#2\gmu@printslashes
- \else
- \textsf{\gmu@discretionaryslash}%
- \afterfi{\gmu@printslashes#2\gmu@printslashes}\fi}
-
-
-% it allows the spaces in the filenames (and prints
-% them as \vs).
-
-% The macro defined below I~use to format the packages' names.
-\pdef\pk#1{\textsf{#1}}
-% \changes{v0.96}{2008/11/13}{\cs{textup} removed to allow slanting
-% the name in titles (that are usually typeset in Italic font)}
-
-
-% Some (if not all) of the below macros are copied from \pk{doc}
-% and/or \pk{ltxdoc}.
-%
-% A~macro for printing control sequences in arguments of
-% a~macro. Robust to avoid writing an explicit |\| into a~file. It
-% calls |\ttfamily| not |\tt| to be usable in headings which are
-% boldface sometimes.
-%
-%
-\DeclareCommand\cs{O{\type@bslash\penalty\@M\hskip\z@skip}}{%\
- % \begin{enumargs}
- % \dc O{\bslash} the control sequence's prefix, by default it's
- % \inverb|\| allowing hyphenation of subsequent word,
- % \dc m the control sequence or anything to be typeset in
- % typewriter font.
- % ^^A this argument is long to allow \inverb|\cmd\par|
- % ^^A % that expands to |\cs{\string\par}| or so.
- % \end{enumargs}
- % \chgs{2008/12/12 v0.98 added \cs{verbatim@specials}}
- % \chgs{2008/12/12 v0.98 made \cmd\- switch to \cmd\normalfont\
- % because \IMHO\ this underlines the fact that a~\CS\ belongs to the
- % narrative. \cmd\hyphenchar\ set to 45 as in usual texts}
- \begingroup
- \ifdefined\verbatim@specials\verbatim@specials\fi
- \edef\-{\discretionary{%
- \ifdefined\gmv@hyphen\gmv@hyphen
- \else\unexpanded{{\normalfont-}}%
- \fi}{}{}}%
- \def\{{\type@lbrace\yeshy}\def\}{\char`\}}%
- \narrativett
- \edef\narrativett@storedhyphenchar{\the\hyphenchar\font}%
- \hyphenchar\font=\ifdefined\gmv@hyphenchar\gmv@hyphenchar
- \else "A6 \fi
- \cs@inner{#1}}
-
-\pdef\cs@inner#1#2{%
- #1#2%
- \hyphenchar\font=\narrativett@storedhyphenchar\relax
- \endgroup}
-
-\def\narrativett{\ttfamily}% such name because I~introduce it to
-% distinguish the narrative verbatims from the code in \pk{gmdoc}.
-
-\long\pdef\env{\cs[]}
-% \changes{v0.66}{06/09/29}{the braces removed}
-
-% And for the special sequences like |^^A|:\nostanza
-\foone{\@makeother\^}
- {\pdef\hathat{\cs[^^]}}
-
-\AtBeginDocument{%
- \@ifpackageloaded{gmdoc}{\def\hash{\cs[\#]}}{}}
-
-% And one for encouraging line breaks e.g., before long verbatim words.
-\def\possfil{\hfil\penalty1000\hfilneg}
-
-\def\possvfil{\vfil
- \penalty\numexpr
- \gmu@minnum{\clubpenalty+\widowpenalty}{9999}%
- %^^A\gmu@maxnum
- %^^A {\ifnum\widowpenalty<\@M
- %^^A \gmu@minnum{\widowpenalty+1}{9999}\relax
- %^^A \else1000%
- %^^A \fi}%
- %^^A {\ifnum\clubpenalty<\@M
- %^^A \gmu@minnum{\clubpenalty+1}{9999}\relax
- %^^A \else1000%
- %^^A \fi}%
- \relax % eaten by |\gmu@maxnum|
- \relax % eaten by |\numexpr|
- \vfilneg}
-
-\long\def\gmu@extremnum#1#2#3{%\
- % \begin{enumargs}
- % \item inequality sign
- % \item left side of comparison
- % \item right side of comparison
- % \end{enumargs}
- \@xa\ifx\@firstofmany#3\@@nil\relax % this complicated test is to
- % allow arguments beginning with some \incs{if⁄<…>} as in
- % \incs{possvfil} e.g.
- \@xa\@firstoftwo
- \else\@xa\@secondoftwo
- \fi
- {#2}%
- {%
- \ifnum\numexpr#2\relax#1\numexpr#3\relax
- \@xa\@firstoftwo
- \else\@xa\@secondoftwo
- \fi
- {\gmu@extremnum#1{#2}}%
- {\gmu@extremnum#1{#3}}%
- }%
-}
-
-\def\gmu@maxnum{\gmu@extremnum>}
-\def\gmu@minnum{\gmu@extremnum<}
-
-
-% \division{Typesetting arguments and commands}
-%
-% We define a~conditional and iterating command \TextUsage\arg\ that
-% in math mode does what it used to do was in math and outside math it
-% typesets mandatory, optional and picture (parenthesed) and angled
-% arguments and optional stars. You can
-% write \[|\arg[gefilte]*<fisch>(mit){baigele}|\] to get
-% \[\hbox{\arg[gefilte]*{fisz}(mit){bajgele}}\]
-% or even
-% \[|\verb+\MoltoAdagio⁄⁄arg*{Dankgesang}<an>[die Gottheit]+|\]
-% (where |⁄⁄| is the escape char in verbatims) to
-% get \[|\MoltoAdagio⁄arg*{Dankgesang}<an>[die Gottheit]|\] (in
-% der lydischen Tonart).
-%
-% For more complicated arguments configurations consider using
-% \pk{gmdoc}'s environment \env{enumargs}.
-% \stanza
-% The five macros below are taken from the \pk{ltxdoc.dtx}.
-%
-% \begin{quotation}|\cmd{\foo}| Prints |\foo| verbatim. It may be used inside moving
-% arguments. |\cs{foo}| also prints |\foo|, for those who prefer that
-% syntax. (This second form may even be used when |\foo| is
-% |\outer|).\end{quotation}
-%
-
-\long\def\cmd#1{\@xa\cs\@xa{\@xa\cmd@to@cs\string#1}}% it has to be
-% un\incs{protected}! It has so many \incmd\expandafter s to allow
-% \inverb|\cmd\par| and still keep the \incmd\cs\ command ‘short’.
-
-\def\cmd@to@cs#1#2{\char\number`#2\relax}
-% \nostanza It can be short since it never gets actual control
-% sequence as an argument only a~string of ‘other’ tokens (and maybe spaces).
-
-% |\marg{text}| prints \marg{text}, `mandatory argument'.
-% \Define\marg
-\pdef\marg#1{{\narrativett\type@lbrace}\meta{#1}{\narrativett\char`\}}}
-
-% |\oarg{text}| prints \oarg{text}, `optional argument'.
-% Also |\oarg[text]| does that.
-% \HideAllDefining
-% \Define\oarg
-\pdef\oarg{\@ifnextchar[\@oargsq\@oarg}
-%^^A]
-\pdef\@oarg#1{{\narrativett[}\meta{#1}{\narrativett]}}
-\pdef\@oargsq[#1]{\@oarg{#1}}
-
-% |\parg{te,xt}| prints \parg{te,xt}, `picture mode argument'.
-% \Define\parg
-\pdef\parg{\@ifnextchar(\@pargp\@parg}
-%^^A)
-\def\@parg#1{{\narrativett(}\meta{#1}{\narrativett)}}
-\def\@pargp(#1){\@parg{#1}}
-
-\pdef\aarg{\@ifnextchar<\@aarga\@aarg}
-\def\@aarg#1{{\narrativett<}\meta{#1}{\narrativett>}}
-\def\@aarga<#1>{\@aarg{#1}}
-
-\def\@verbaarga#1#2>{\@aarg{#2}\arg@dc}
-
-\foone{\catcode`>\active}{%
- \def\@verbaargact#1#2>{\@aarg{#2}\arg@dc}%
+ }% of if yes. Else:
+ {}%
+ %
}
-\foone{\@makeother\{\@makeother\}%
- \catcode`[=\@ne\catcode`]=\tw@}
-[% ^^A{
- \def\@verbmargm#1#2}[% for an argument in curly braces in a verbatim, where
- % the braces are not groupers and not necessary ‘other’. We'll know
- % by \incmd{\@ifnextif} that the future token is an opening
- % brace. Note this macro has 2nd parameter delimited with ‘other’
- % closing brace (so may not act correctly when braces are nested
- % (then hide them with special verbatim groupers)).
- \marg[#2]%
- \arg@dc
- ]%
-]% of |\foone|
-
-% \ResumeAllDefining
-\DeclareCommand\arg@dc!{%
- % \chgs{200/03/04 v0.991 added rcognising of verbatim braces and
- % angles}
- s % (1)
- o % (2)
- c % (3)
- b % (4)
- a % (5)
- S{\arg} % (6) just gobbled (for backwards compatibility)
-}{% This command iterates while it
- % has arguments and typesets them in brackets, parentheses or curly
- % braces. Note it gobbles subsequent |\arg|s and just iterates.
- \def\next{0}%
- \IfValueT{#1}%
- {\metachar[\scanverb{*}\metachar]\def\next{1}}%
- \IfValueT{#2}{\@oarg{#2}\def\next{1}}%
- \IfValueT{#3}{\@parg{#3}\def\next{1}}%
- \IfValueT{#4}{\marg{#4}\def\next{1}}%
- \IfValueT{#5}{\aarg{#5}\def\next{1}}%
- \@ifnextchar\egroup{\endgroup}{%
- \if1\next\@xa\arg@dc
- \else % it's crucial that we look for verbatim braces \emph{after}
- % we checked there were no \inhash4, otherwise there would
- % be an error.
- \def\next{%
- \@ifnextif\xiilbrace{\@verbmargm}%
- {% not active or other lbrace
- \@ifnextif<{% then we look for angles
- \ifnum\catcode`>=\active
- \@xa\@verbaargact
- \else\@xa\@verbaarga
- \fi}%
- {% and if not angles neither verbatim braces, then
- \endgroup % if we have no more arguments to typeset, we
- % close the group opened in line \ref{queer.group}
- }%
- }%
- }%
- \@xa \next
- \fi
- }% of not egroup
-}% of |\arg@dc|
-
-
-% Now define the front-end macro of the |\arg| command:\nostanza
-\foone{\obeylines}{%
- \AtBeginDocument{%
- \let\math@arg\arg %
- \pdef\arg{\ifmmode\math@arg %
- % \chgs{200/03/04 v0.991 added rcognising of verbatim braces and angles}
- \else\afterfi{%
- \begingroup %
- % \label{queer.group}
- \ifdefined\@ifQueerEOL\@ifQueerEOL{%
- \def^^M{\unskip\space}% in the ‘queer’ \ac{EOL}s scope we
- % keep line end active in case we have
- % \incmd\arg\nlpercent\arg{arg.} ending a~line: the next
- % char peeper touches line end or, if the line end was $_5$,
- % gobbles the space it turns into so the comment layer would
- % ‘leak’ to the code layer.
- }{}\fi %
- \arg@dc}%
- \fi}% of |\arg|,
- }% of |\AtBeginDocument|,
-}% of |\foone|.
-% \chgs{2008/12/07 v0.98 made iterating thanks to \cmd\DeclareCommand\cs{arg@dc}}
-
-
-% Now you can write
-%\begin{verse}
-% |\arg{mand.\ arg} [opt.\ arg] (pict.\ arg)| \\
-% to get \arg{mand.\ arg} [opt.\ arg] (pict.\ arg). (Yes, with only one |\arg|!)\\
-% And |$\arg(1+i) = \pi/4$| for $\arg(1+i) = \pi/4$.
-% \end{verse}
-%
-
-\DeclareCommand\cat{Q{'"0123456789ABCDEF}}{%
- ${}_{\the\numexpr#1}\m@th$\@ifnextcat a\space{}}
-
+ \gmu@PackOptionX{command}
+ \gmu@PackOptionX{ampulex}
+ \gmu@PackOptionX{envir}
+ \gmu@PackOptionX{relsize}
+ \gmu@PackOptionX{meta} % provides |\bihyphen|, |\discre|, |\discret|
+ \gmu@PackOptionX{logos}
+ \gmu@PackOptionX{notonlypream}
+ \gmu@PackOptionX{mw}
-% \division{Not only preamble!}
-% Let's remove some commands from the list to erase at begin document!
-% Primarily that list was intended to save memory not to forbid
-% anything. Nowadays, when memory is cheap, the list of only-preamble
-% commands should be rethought \IMHO.
+ \gmu@PackOptionX{typos}
+ \gmu@PackOptionX{parts}
+ \gmu@PackOptionX{url}
+ \gmu@PackOptionX{RCS}
+\ExecuteOptionsX{command, envir, ampulex, relsize, meta, logos,
+ notonlypream, % ^^V mw=off,
+ typos, parts, url}
-% \Define\not@onlypreamble
-% \changes{v0.79}{2007/04/28}{All the actions are done in a~group and
-% therefore \cs{xdef} used instead of \cs{edef} because this command
-% has to use \cs{do} (which is contained in the \cs{@preamblecmds}
-% list) and \cs{not@onlypreamble} itself should be able to be let to
-% \cs{do}}
-\newcommand\not@onlypreamble[1]{{%
- \def\do##1{\ifx#1##1\else\@nx\do\@nx##1\fi}%
- \xdef\@preamblecmds{\@preamblecmds}}}
+\ProcessOptionsX
-\not@onlypreamble\@preamblecmds
-\not@onlypreamble\@ifpackageloaded
-\not@onlypreamble\@ifclassloaded
-\not@onlypreamble\@ifl@aded
-\not@onlypreamble\@pkgextension
+\def\doifdefined#1{\ifdefined#1\@xa#1\fi}
-% And let's make the message of only preamble command's forbidden use
-% informative a~bit:
+\doifdefined\gmu@Require@command
+\doifdefined\gmu@Require@envir
+\doifdefined\gmu@Require@ampulex
+\doifdefined\gmu@Require@relsize
+\doifdefined\gmu@Require@meta
+\doifdefined\gmu@Require@logos
+\doifdefined\gmu@Require@notonlypream
+\doifdefined\gmu@Require@mw
+\doifdefined\gmu@Require@typos
+\doifdefined\gmu@Require@parts
+\doifdefined\gmu@Require@url
+\doifdefined\gmu@Require@RCS
-\def\gm@notprerr{ can be used only in preamble (\on@line)}
-\AtBeginDocument{%
- \def\do#1{\@nx\do\@nx#1}%
- \edef\@preamblecmds{%
- \def\@nx\do##1{%
- \def##1{\@nx\PackageError{gmutils/LaTeX}%
- {\@nx\string##1 \@nx\gm@notprerr}\@nx\@eha}}%
- \@preamblecmds}}
-
-% A~subtle error raises: the \LaTeX\ standard |\@onlypreamble| and
-% what |\document| does with |\@preamblecmds| makes any two of `only
-% preamble' \CS's |\ifx|-identical inside \env{document}. And my
-% change makes any two \CS's |\ifx|-different. The first it
-% causes a~problem with is standard \LaTeX's |\nocite| that checks
-% |\ifx\@onlypreamble\document|. So hoping this is a~rare problem, we
-% circumvent it. 2008/08/29 a~bug is reported by Edd Barrett that
-% with \pk{natbib} an `extra \}' error occurs so we wrap the fix in
-% a~conditional.
-%
-% \changes[\nocite]{v0.93}{2008/08/29}{a~bug fixed: with \pk{natbib}
-% an `extra \}' error. Now it fixes only the standard version of
-% \cs{nocite}}
-
-
-\def\gmu@nocite@ampulex{% we wrap the stuff in a~macro to hide an open
- % \incs{if}. And not to make the begin-input hook too large.
- % \label{ampulexset} the first optional argument is the
- % parameters string and the second the argument for one-level
- % expansion of \incs{nocite}. Both hash strings are doubled to pass
- % the % first \incs{def}.
- \ampulexdef\nocite[####1][{{####1}}]% note the double brace
- % around \inhash3.
- \ifx
- {\@onlypreamble\document}%
- \iftrue}
-
-
-\AtBeginDocument{\gmu@nocite@ampulex}%
-
-
-% \division{Third person pronouns}
-%
-% Is a~reader of my documentations `she' or 'he' and does it make
-% a~difference?
-%
-% Previous versions of this documentation were consequently
-% alternating ’he’ and ’she’ and provided specific macros for that
-% purpose. Now I'm not that queer and gender so I take what is
-% normally used, ’they’ that is.
-%
-% (The issue of human sexes and genders (certainly much more numerous
-% than 2) is complex and delicate and a \TeX\ macro package is
-% probably not the best place to discuss it.)
-% ^^A % Not to favour any gender in the personal pronouns, define
-% ^^A % commands that'll print alternately masculine and feminine
-% ^^A % pronoun of third person. By `any' I~mean not only typically
-% ^^A % masculine and typically feminine but the entire amazingly rich
-% ^^A % variety of people's genders, \emph{including} those who do not
-% ^^A % describe themselves as `man' or `woman'.
-% ^^A %
-% ^^A % One may say two pronouns
-% ^^A % is far too little to cover this variety but I~could point Ursula's
-% ^^A % K.\ LeGuin's \textit{The Left Hand Of Darkness} as another acceptable
-% ^^A % answer. In that moody and moderate \acro{SF} novel the androgynous
-% ^^A % persons are usually referred to as `mister', `sir' or `he': the
-% ^^A % meaning of reference is extended. Such an extension also my
-% ^^A % automatic pronouns do suggest. It's \emph{not} political
-% ^^A % correctness, it's just respect to people's diversity.
-% ^^A % \DefIndex*{gm@PronounGender}
-% ^^A % \let\do\Define
-% ^^A % \do\gm@atppron \do\heshe \do\hisher \do\himher \do\hishers
-% ^^A % \do\HeShe \do\HisHer \do\HimHer \do\HisHers
-% ^^A \newcounter{gm@PronounGender} ^^A ^^A
-% ^^A \newcommand*\gm@atppron[2]{%
-% ^^A
-% ^^A \stepcounter{gm@PronounGender}% remember |\stepcounter| is global.
-% ^^A \ifodd\value{gm@PronounGender}#1\else#2\fi}
-% ^^A \newcommand*\heshe{\gm@atppron{he}{she}}
-% ^^A \newcommand*\hisher{\gm@atppron{his}{her}}
-% ^^A \newcommand*\himher{\gm@atppron{him}{her}}
-% ^^A \newcommand*\hishers{\gm@atppron{his}{hers}}
-% ^^A \newcommand*\HeShe{\gm@atppron{He}{She}}
-% ^^A \newcommand*\HisHer{\gm@atppron{His}{Her}}
-% ^^A \newcommand*\HimHer{\gm@atppron{Him}{Her}}
-% ^^A \newcommand*\HisHers{\gm@atppron{His}{Hers}}
-
\def\heshe{they}
\def\hisher{their}
\def\himher{them}
@@ -3435,3714 +131,11 @@ pagella, trebuchet, cursor, fontspec=quiet]{gmdocc}
\def\HimHer{Them}
\def\HisHers{Theirs}
-% \division{Improvements to \pk{mwcls} sectioning commands}
-%
-% That is, `Expe-ri-mente'\footnote{A.\ Berg, \textit{Wozzeck}.} mit MW
-% sectioning \& \cs{refstepcounter} to improve \pk{mwcls}'s cooperation
-% with \pk{hyperref}. They shouldn't make any harm if another class
-% (non-\pk{mwcls}) is loaded.
-%
-% We |\refstep| sectioning counters even if the sectionings are not
-% numbered, because otherwise
-% \begin{enumerate}
-% \item \pdfTeX\ cried of multiply defined |\label|s,
-% \item e.g.\ in a~table of contents the hyperlink
-% |<rozdzia\l\ Kwiaty polskie>| linked not to the chapter's heading but
-% to the last-before-it change of |\ref|.
-% \end{enumerate}
-
-\AtBeginDocument{% because we don't know when exactly \pk{hyperref} is
- % loaded and maybe after this package.
- \@ifpackageloaded{hyperref}{\newcounter{NoNumSecs}%
- \setcounter{NoNumSecs}{617}% to make |\ref|ing to an unnumbered section
- % visible (and funny?).
- \def\gm@hyperrefstepcounter{\refstepcounter{NoNumSecs}}%
- \pdef\gm@targetheading#1{%
- \hypertarget{#1}{#1}}}% end of then
- {\def\gm@hyperrefstepcounter{}%
- \def\gm@targetheading#1{#1}}% end of else
-}% of |\AtBeginDocument|
-
-% Auxiliary macros for the kernel sectioning macro:
-\def\gm@dontnumbersectionsoutofmainmatter{%
- \if@mainmatter\else \HeadingNumberedfalse \fi}
-\def\gm@clearpagesduetoopenright{%
- \if@openright\cleardoublepage\else \clearpage\fi}
-
-% To avoid |\def|ing of |\mw@sectionxx| if it's undefined, we redefine
-% |\def| to gobble the definition and restore the original meaning of
-% itself.
-%
-% Why shouldn't we change the ontological status of |\mw@sectionxx|
-% (not define if undefined)? Because some macros (in \pk{gmdocc} e.g.)
-% check it to learn whether they are in an \pk{mwcls} or not.
-%
-% But let's make a~shorthand for this test since we'll use it three
-% times in this package and maybe also somewhere else.
-% \Define\@ifnotmw
-\long\def\@ifnotmw#1#2{\gm@ifundefined{mw@sectionxx}{#1}{#2}}
-
-
-
-%^^A \let\gmu@def\def
-%^^A \@ifnotmw{%
-%^^A \StoreMacro\gmu@def \def\gmu@def#14#2{\RestoreMacro\gmu@def}}{}
-%^^A % I~know it may be of bad taste (to write such a~way \emph{here}) but
-%^^A % I~feel so lonely and am in an alien state of mind after 3 hour sleep
-%^^A % last night and, worst of all, listening to sir Edward Elgar's flamboyant
-%^^A % Symphonies d'Art Nouveau.
-%^^A %
-%^^A % A~\emph{decent} person would just wrap the following
-%^^A % definition in |\gm@ifundefined|'s Else. But look, the definition is so
-%^^A % long and I~feel so lonely etc. So,
-%^^A % I~define |\def| (for some people there's nothing sacred) to be
-%^^A % a~macro with two parameters, first of which is
-%^^A % delimited by digit 4 (the last token of |\mw@sectionxx|'s parameter
-%^^A % string) and the latter is undelimited which means it'll be the body
-%^^A % of the definition. Such defined |\def| does nothing else but
-%^^A % restores its primitive meaning by the way sending its arguments to
-%^^A % the Gobbled Tokens' Paradise. Luckily, |\RestoreMacro| contains
-%^^A % |\let| not |\def|.
-
-% The kernel of MW's sectioning commands:
-\@ifnotmw{}{%
-\def\mw@sectionxx#1#2[#3]#4{%
- \edef\mw@HeadingLevel{\csname #1@level\endcsname
- \space}% space delimits level number!
- \ifHeadingNumbered
- \ifnum \mw@HeadingLevel>\c@secnumdepth \HeadingNumberedfalse \fi
- % \nostanza line below is in |\gm@ifundefined| to make it work in classes
- % other than \pk{mwbk}\nostanza
- \gm@ifundefined{if@mainmatter}{}{\gm@dontnumbersectionsoutofmainmatter}
- \fi
-%\begin{verbatim}
-%% \ifHeadingNumbered
-%% \refstepcounter{#1}%
-%% \protected@edef\HeadingNumber{\csname the#1\endcsname\relax}%
-%% \else
-%% \let\HeadingNumber\@empty
-%% \fi
-%\end{verbatim}
- \def\HeadingRHeadText{#2}%
- \def\HeadingTOCText{#3}%
- \def\HeadingText{#4}%
- \def\mw@HeadingType{#1}%
- \if\mw@HeadingBreakBefore
- \if@specialpage\else\thispagestyle{closing}\fi
- \gm@ifundefined{if@openright}{}{\gm@clearpagesduetoopenright}%
- \if\mw@HeadingBreakAfter
- \thispagestyle{blank}\else
- \thispagestyle{opening}\fi
- \global\@topnum\z@
- \fi% of |\if\mw@HeadingBreakBefore|
-%%
-% placement of |\refstep| suggested by me (GM):\nostanza
- \ifHeadingNumbered
- \refstepcounter{#1}%
- \protected@edef\HeadingNumber{\csname the#1\endcsname\relax}%
- \else
- \let\HeadingNumber\@empty
- % ^^A \gm@hyperrefstepcounter it's nonsense
- \fi% of |\ifHeadingNumbered|
-%%
- \if\mw@HeadingRunIn
- \mw@runinheading
- \else
- \if\mw@HeadingWholeWidth
- \if@twocolumn
- \if\mw@HeadingBreakAfter
- \onecolumn
- \mw@normalheading
- \pagebreak\relax
- \if@twoside
- \null
- \thispagestyle{blank}%
- \newpage
- \fi% of |\if@twoside|
- \twocolumn
- \else
- \@topnewpage[\mw@normalheading]%
- \fi% of |\if\mw@HeadingBreakAfter|
- \else
- \mw@normalheading
- \if\mw@HeadingBreakAfter\pagebreak\relax\fi
- \fi% of |\if@twocolumn|
- \else
- \mw@normalheading
- \if\mw@HeadingBreakAfter\pagebreak\relax\fi
- \fi% of |\if\mw@HeadingWholeWidth|
- \fi% of |\if\mw@HeadingRunIn|
- }
-%^^A%%% (End of Experimente with MW sectioning.)
-
-
-%
-% \subdivision{An improvement of MW's \cs{SetSectionFormatting}}
-%
-% A~version of MW's |\SetSectionFormatting| that lets to leave some
-% settings unchanged by leaving the respective argument empty (|{}| or
-% |[]|).
-%
-% Notice: If we adjust this command for new version of \acro{MWCLS},
-% we should name it |\SetSectionFormatting| and add issuing errors if
-% the inner macros are undefined.
-%
-%\begin{enumargs*}^^B
-%\opt the flags, e.g. |breakbefore|, |breakafter|;
-%\item the sectioning name, e.g. |chapter|, |part|;
-%\item preskip;
-%\item heading type;
-%\item postskip
-%\end{enumargs*}
-%
-
-\relaxen\SetSectionFormatting
-\newcommand*\SetSectionFormatting[5][\empty]{%
- \ifx\empty#1\relax\else% empty (not |\empty|!) |#1| also launches |\else|.\HideDef
- \def\mw@HeadingRunIn{10}\def\mw@HeadingBreakBefore{10}%
- \def\mw@HeadingBreakAfter{10}\def\mw@HeadingWholeWidth{10}%
- \@ifempty{#1}{}{\mw@processflags#1,\relax}% If |#1| is omitted,
- % the flags are left unchanged. If |#1| is given, even as [], the
- % flags are first cleared and then processed again.
- \fi
- \gm@ifundefined{#2}{\@namedef{#2}{\mw@section{#2}}}{}%
- \mw@secdef{#2}{@preskip} {#3}{2 oblig.}%
- \mw@secdef{#2}{@head} {#4}{3 oblig.}%
- \mw@secdef{#2}{@postskip}{#5}{4 oblig.}%
- \ifx\empty#1\relax
- \mw@secundef{#2@flags}{1 (optional)}%
- \else\mw@setflags{#2}% \ResumeDef
- \fi}
-
-\def\mw@secdef#1#2#3#4{% ^^B
-% \begin{enumargs}
-% \item the heading name,
-% \item the command distincter,
-% \item the meaning,
-% \item the number of argument to error message.
-% \end{enumargs}
- \@ifempty{#3}
- {\mw@secundef{#1#2}{#4}}
- {\@namedef{#1#2}{#3}}}
-
-\def\mw@secundef#1#2{%
- \gm@ifundefined{#1}{%
- \ClassError{mwcls/gm}{%
- command \bslash#1 undefined \MessageBreak
- after \bslash SetSectionFormatting!!!\MessageBreak}{%
- Provide the #2 argument of \bslash SetSectionFormatting.}}{}}
-
-
-% First argument is a~sectioning command (wo.\ the backslash) and second the
-% stuff to be added at the beginning of the heading declarations.
-\def\addtoheading#1#2{%
- \n@melet{gmu@reserveda}{#1@head}%
- \edef\gmu@reserveda{\unexpanded{#2}\@xa\unexpanded{\gmu@reserveda}}%
- \n@melet{#1@head}{gmu@reserveda}%
-%^^A \@xa\show\csname#1@head\endcsname
-}
-
-}% of |\@ifnotmw|'s else.
-
-% \subdivision{Negative \cs{addvspace}} When two sectioning commands
-% appear one after another (we may assume that this occurs only when
-% a~lower section appears immediately after higher), we prefer to put
-% the \emph{smaller} vertical space not the larger, that is, the
-% preskip of the lower sectioning not the postskip of the higher.
-%
-% For that purpose we modify the very inner macros of \acro{MWCLS}
-% to introduce a~check whether the previous vertical space equals the
-% postskip of the section one level higher.
-
-\@ifnotmw{}{% We proceed only in \acro{MWCLS}.
-
-% The information that we are just after a~heading will be stored in
-% the |\gmu@prevsec| macro: any heading will define it as the section
-% name and |\everypar| (any normal text) will clear it.
-\def\@afterheading{%
- \@nobreaktrue
- \xdef\gmu@prevsec{\mw@HeadingType}% added now
- \everypar{%
- \grelaxen\gmu@prevsec% added now. All the rest is original \LaTeX.
- \if@nobreak
- \@nobreakfalse
- \clubpenalty \@M
- \if@afterindent \else
- {\setbox\z@\lastbox}%
- \fi
- \else
- \clubpenalty \@clubpenalty
- \everypar{}%
- \fi}}
-
-% If we are (with the current heading) just after another heading (one
-% level lower I~suppose), then we add the less of the higher header's
-% post-skip and the lower header pre-skip or, if defined, the
-% two-header-skip. (We put the macro defined below just before
-% |\addvspace| in \pk{mwcls} inner macros.)
-\def\gmu@checkaftersec{%
- \gm@ifundefined{gmu@prevsec}{}{%
- \ifgmu@postsec% an additional switch that is true by default but
- % may be turned into an \cs{ifdim} in special
- % cases, see line \ref{gmu@postsec}.
- {\@xa\mw@getflags\@xa{\gmu@prevsec}%
- \glet\gmu@reserveda\mw@HeadingBreakAfter}% \UnDef
- \if\mw@HeadingBreakBefore\def\gmu@reserveda{11}\fi% if the
- % current heading inserts page break before itself, all the play
- % with vskips is irrelevant.
- \if\gmu@reserveda\else
- \penalty10000\relax
- \skip\z@=\csname\gmu@prevsec @postskip\endcsname\relax
- \skip\tw@=\csname\mw@HeadingType @preskip\endcsname\relax
- \gm@ifundefined{\mw@HeadingType @twoheadskip}{%
- \ifdim\skip\z@>\skip\tw@
- \vskip-\skip\z@% we strip off the post-skip of previous
- % header if it's bigger than current pre-skip
- \else
- \vskip-\skip\tw@% we strip off the current pre-skip otherwise
- \fi}{% But if the two-header-skip is defined, we put
- % \emph{it}
- \penalty10000
- \vskip-\skip\z@
- \penalty10000
- \vskip-\skip\tw@
- \penalty10000
- \vskip\csname\mw@HeadingType @twoheadskip\endcsname
- \relax}%
- \penalty10000
- \hrule height\z@\relax% to hide the last (un)skip before subsequent
- % \incs{addvspace}s. \ilrr
- \penalty10000
- \fi
- \fi
- }% of |\gm@ifundefined{gmu@prevsec}| `else'.
-}% of |\def\gmu@checkaftersec|.
-
-\def\ParanoidPostsec{% \label{gmu@postsec} this version of
- % \inverb|\ifgmu@postsec| is intended for the special case of
- % sections may contain no normal text, as while \pk{gmdoc}ing.
- \def\ifgmu@postsec{% note this macro expands to an open \cs{if}.
- \skip\z@=\csname\gmu@prevsec @postskip\endcsname\relax
- \ifdim\lastskip=\skip\z@\relax% we play
- % with the vskips only if the last skip is the previous
- % heading's postskip (a~counter-example I~met while
- % \pk{gmdoc}ing).
- }}
-
-\let\ifgmu@postsec\iftrue
-
-\def\gmu@getaddvs#1\addvspace#2\gmu@getaddvs{%
- \toks\z@={#1}%
- \toks\tw@={#2}}
-
-% And the modification of the inner macros at last:
-\def\gmu@setheading#1{%
- \@xa\gmu@getaddvs#1\gmu@getaddvs
- \edef#1{%
- \the\toks\z@\@nx\gmu@checkaftersec
- \@nx\addvspace\the\toks\tw@}}
-
-\gmu@setheading\mw@normalheading
-\gmu@setheading\mw@runinheading
-
-\def\SetTwoheadSkip#1#2{\@namedef{#1@twoheadskip}{#2}}
-
-}% of |\@ifnotmw|'s else.
-
-
-% \subdivision{My heading setup for \pk{mwcls}}
-%
-% The setup of heading skips was tested in `real' typesetting, for
-% money that is. The skips are designed for 11/13\,pt leading and
-% together with my version of \pk{mw11.clo} option file for \pk{mwcls}
-% make the headings (except paragraph and subparagraph) consist of
-% an integer number of lines. The name of the declaration comes from
-% my employer, ``Wiedza Powszechna'' Editions.
-
-\@ifnotmw{}{% We define this declaration only when in \pk{mwcls}.
-\DeclareCommand\WPheadings{T{\chapter}}{%
- \SetSectionFormatting[breakbefore,wholewidth]
- {part}{\z@\@plus1fill}{}{\z@\@plus3fill}%
- %
- \IfValueF{#1}{%
- \gm@ifundefined{chapter}{}{%
- \SetSectionFormatting[breakbefore,wholewidth]
- {chapter}
- {66\p@}% |{67\p@}|% for Adventor/Schola 0,95.
- {\FormatHangHeading{\LARGE}}
- {27\p@\@plus0,2\p@\@minus1\p@}%
- }%
- }% of unless |#1|
- %
- \SetTwoheadSkip{section}{27\p@\@plus0,5\p@}%
- \SetSectionFormatting{section}
- {24\p@\@plus0,5\p@\@minus5\p@}% ^^A {24\p@\@plus5\p@\@minus2\p@}
- {\FormatHangHeading {\Large}}
- {10\p@\@plus0,5\p@}% ed.\ Krajewska of ``Wiedza Powszechna'', as
- % we understand her, wants the skip between a~heading and text
- % to be rigid.
- %
- \SetTwoheadSkip{subsection}{11\p@\@plus0,5\p@\@minus1\p@}%
- \SetSectionFormatting{subsection}
- {19\p@\@plus0,4\p@\@minus6\p@}
- {\FormatHangHeading {\large}}% 12/14 pt
- {6\p@\@plus0,3\p@}% after-skip 6\,pt due to p.12, not to squeeze
- % the before-skip too much.
- %
- \SetTwoheadSkip{subsubsection}{10\p@\@plus1,75\p@\@minus1\p@}%
- \SetSectionFormatting{subsubsection}
- {10\p@\@plus0,2\p@\@minus1\p@}
- {\FormatHangHeading {\normalsize}}
- {3\p@\@plus0,1\p@}% those little skips should be smaller than
- % you calculate out of a~geometric progression, because the
- % interline skip enlarges them.
- %
- \SetSectionFormatting[runin]{paragraph}
- {7\p@\@plus0,15\p@\@minus1\p@}
- {\FormatRunInHeading{\normalsize}}
- {2\p@}%
- %
- \SetSectionFormatting[runin]{subparagraph}
- {4\p@\@plus1\p@\@minus0,5\p@}
- {\FormatRunInHeading{\normalsize}}
- {\z@}%
-}% of |\WPheadings|
-}% of |\@ifnotmw|
-
-
-% \subdivision{Compatibilising standard and \pk{mwcls} sectionings}
-%
-% If you use Marcin Woli\nacute ski's document classes (\pk{mwcls}), you
-% might have met their little queerness: the sectioning commands take
-% two optional arguments instead of standard one. It's reasonable
-% since one may wish one text to be put into the running head,
-% another to the toc and yet else to the page. But the order of
-% optionalities causes an incompatibility with the standard classes:
-% MW section's first optional argument goes to the running head not to
-% toc and if you've got a~source file written with the standard
-% classes in mind and use the first (and only) optional argument, the
-% effect with \pk{mwcls} would be different if not error.
-%
-% Therefore I~counter-assign the commands and arguments to reverse the
-% order of optional arguments for sectioning commands when \pk{mwcls}
-% are in use and reverse, to make \pk{mwcls}-like sectioning optionals usable
-% in the standard classes.
-%
-% \stanza
-% With the following in force, you may both in the standard classes
-% and in \pk{mwcls} give a~sectioning command one or two optional
-% arguments (and mandatory the last, of course). If you give just one
-% optional, it goes to the running head and to toc as in scls (which
-% is unlike in \pk{mwcls}).
-% If you give two optionals, the first goes to the running head and
-% the other to toc (like in \pk{mwcls} and unlike in scls).
-%
-% (In both cases the mandatory last argument goes only to the page.)
-%
-% What more is unlike in scls, it's that even with them the starred
-% versions of sectioning commands allow optionals (but they still send
-% them to the Gobbled Tokens' Paradise).
-%
-% (In \pk{mwcls}, the only difference between starred and non-starred
-% sec commands is (not) numbering the titles, both versions make a~contents
-% line and a~mark and that's not changed with my redefinitions.)
-%
-%
-\@ifnotmw{% we are not in \pk{mwcls} and want to
- % handle \pk{mwcls}-like sectionings i.e., those written with two
- % optionals.
- \def\gm@secini{gm@la}%
- \StoreMacros{\partmark\chaptermark\sectionmark\subsectionmark\subsubsectionmark\paragraphmark}%
- % \Define\gm@secxx
- \def\gm@secxx#1#2[#3]#4{%
- \ifx\gm@secstar\@empty
- % \nostanza a~little trick to allow
- % a~special version of the heading just to the running head.
- \@namedef{#1mark}##1{% we redefine \cs{\<sec>mark} to gobble its
- % argument and to launch the stored true marking command on the
- % appropriate argument.
- \storedcsname{#1mark}{#2}%
- \RestoreMacro*{#1mark}% after we've done what we
- % wanted we restore original |\#1mark|.\ilrr
- }%
- \def\gm@secstar{[#3]}% if |\gm@secstar|
- % is empty, which means the sectioning command was written
- % starless, we pass the `true' sectioning command |#3| as the
- % optional argument. Otherwise the sectioning command was written
- % with star so the `true' s.c.\ takes no optional.
- \fi
- \@xa\@xa\csname\gm@secini#1\endcsname
- \gm@secstar{#4}}%
-% \stanza
-}{% we are in \pk{mwcls} and want to reverse MW's optionals order
- % i.e., if there's just one optional, it should go both to toc and to
- % running head.
- \def\gm@secini{gm@mw}%
- %
- \let\gm@secmarkh\@gobble% in \pk{mwcls} there's no need to make
- % tricks for special version to running headings.
- % \Define\gm@secxx
- \def\gm@secxx#1#2[#3]#4{%
- \@xa\@xa\csname\gm@secini#1\endcsname
- \gm@secstar[#2][#3]{#4}}%
-}
-
-\def\gm@sec#1{\@dblarg{\gm@secx{#1}}}
-\def\gm@secx#1[#2]{%
- \@ifnextchar[{\gm@secxx{#1}{#2}}{\gm@secxx{#1}{#2}[#2]}}% if
-% there's only one optional, we double \emph{it} not the mandatory
-% argument. ^^A}
-
-\def\gm@straightensec#1{% the parameter is for the command's name.
- \gm@ifundefined{#1}{}{% we don't change the ontological status of the
- % command because someone may test it.
- \n@melet{\gm@secini#1}{#1}%
- \@namedef{#1}{%
- \gm@ifstar{\def\gm@secstar{*}\gm@sec{#1}}{%
- \def\gm@secstar{}\gm@sec{#1}}}}%
-}%
-
-\let\do\gm@straightensec
-\do{part}\do{chapter}\do{section}\do{subsection}\do{subsubsection}
-\@ifnotmw{}{\do{paragraph}}% this `straightening' of
-% |\paragraph| with the standard \pk{article} caused the `\TeX\
-% capacity exceeded' error. Anyway, who on Earth wants paragraph
-% titles in toc or running head?
-%
-%
-% \division{\env{enumerate*} and \env{itemize*}}
-% We wish the starred version of \env{enumerate} to be just numbered
-% paragraphs. But \pk{hyperref} redefines |\item| so we should do it
-% a~smart way, to set the \LaTeX's \env{list} parameters that is.
-%
-% (Marcin Woli\nacute ski in \pk{mwcls} defines those environments slightly
-% different: his item labels are indented, mine are not; his
-% subsequent paragraphs of an item are not indented, mine are.)
-%
-% \Define*{enumerate*}
-\@namedef{enumerate*}{%
- \ifnum\@enumdepth>\thr@@
- \@toodeep
- \else
- \advance\@enumdepth\@ne
- \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
- \@xa\list\csname label\@enumctr\endcsname{%
- \partopsep\topsep \topsep\z@ \leftmargin\z@
- \itemindent\@parindent %|%\advance\itemindent\labelsep|
- \labelwidth\@parindent
- \advance\labelwidth-\labelsep
- \listparindent\@parindent
- \usecounter \@enumctr
- \def\makelabel##1{##1\hfil}}%
- \fi}
-\@namedef{endenumerate*}{\endlist}
-
-% \Define*{itemize*}
-\@namedef{itemize*}{%
- \ifnum\@itemdepth>\thr@@
- \@toodeep
- \else
- \advance\@itemdepth\@ne
- \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
- \@xa\list\csname\@itemitem\endcsname{%
- \partopsep\topsep \topsep\z@ \leftmargin\z@
- \itemindent\@parindent
- \labelwidth\@parindent
- \advance\labelwidth-\labelsep
- \listparindent\@parindent
- \def\makelabel##1{##1\hfil }}%
- \fi}
-\@namedef{enditemize*}{\endlist}
-
-
-
-% \division{The logos}
-%
-% We'll modify The \LaTeX\ logo now to make it fit better to various
-% fonts.
-
-\let\oldLaTeX\LaTeX
-\let\oldLaTeXe\LaTeXe
-
-\pdef\TeX{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125emX\@}
-\StoreMacro\TeX
-\AtBeginDocument{\RestoreMacro\TeX}
-
-\newcommand*\DeclareLogo[3][\relax]{% \begin{enumargs*}
- % \opt is for non-\LaTeX\ spelling and will be used in the
- % \acro{PD1} encoding (to make pdf bookmarks);
- % \item is the command, its name will be the PD1 spelling by
- % default,
- % \item is the definition for all the font encodings except PD1.
- % \end{enumargs*}
- %
- \ifx\relax#1\def\gmu@reserveda{\@xa\@gobble\string#2}%
- \else
- \def\gmu@reserveda{#1}%
- \fi
- \edef\gmu@reserveda{%
- \@nx\DeclareTextCommand\@nx#2{PD1}{\gmu@reserveda}}
- \gmu@reserveda
- \DeclareTextCommandDefault#2{#3}%
- \pdef#2{#3}% added for \XeTeX.
-}
-
-% \DeclareDefining\DeclareLogo
-\DeclareLogo\LaTeX{%
- {%
- % ^^A\typeout{***** LaTeX logo of GM ^^J}\show\relax
- L%
- \setbox\z@\hbox{\check@mathfonts
- \fontsize\sf@size\z@
- \math@fontsfalse\selectfont
- A}%
- \kern-.57\wd\z@
- \sbox\tw@ T%
- \vbox to\ht\tw@{\copy\z@ \vss}%
- \kern-.2\wd\z@% originally $-,15$\,em for T.
- }%
- {%
- \ifdim\fontdimen1\font=\z@
- \else
- \count\z@=\fontdimen5\font
- \multiply\count\z@ by 64\relax
- \divide\count\z@ by\p@
- \count\tw@=\fontdimen1\font
- \multiply\count\tw@ by\count\z@
- \divide\count\tw@ by 64\relax
- \divide\count\tw@ by\tw@
- \kern-\the\count\tw@ sp\relax
- \fi}%
- \TeX}
-
-\DeclareLogo\LaTeXe{\mbox{\m@th \if
- b\expandafter\@car\f@series\@nil\boldmath\fi
- \LaTeX\kern.15em2$_{\textstyle\varepsilon}$}}
-
-\StoreMacro\LaTeX
-\StoreMacro*{LaTeX }
-% \label{SMLaTeX}
-
-% `\LaTeXpar' in my opinion better describes what I~work with/in than
-% just `\LaTeX'.
-% \Define\LaTeXpar
-\DeclareLogo[(La)TeX]{\LaTeXpar}{%
- {%
- \setbox\z@\hbox{(}%)
- \copy\z@
- \kern-.2\wd\z@ L%
- \setbox\z@\hbox{\check@mathfonts
- \fontsize\sf@size\z@
- \math@fontsfalse\selectfont
- A}%
- \kern-.57\wd\z@
- \sbox\tw@ T%
- \vbox to\ht\tw@{\box\z@%
- \vss}%
- }%
- \kern-.07em% originally $-,15$\,em for T.
- {%(
- \sbox\z@)%
- \kern-.2\wd\z@\copy\z@
- \kern-.2\wd\z@}\TeX
-}
-
-% \begin{quotation} Here are a few definitions which can usefully be
-% employed when documenting
-% package files: now we can readily refer to \AmSTeX, \BibTeX\ and \SliTeX, as well
-% as the usual \TeX\ and \LaTeX. There's even a \PlainTeX\ and
-% a~\Web.\end{quotation}
-\gm@ifundefined{AmSTeX}
- {\def\AmSTeX{\leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex%
- \hbox{$\mathcal M$}\kern-.2em\mathcal S$-\TeX}}}{}
-
-\DeclareLogo\BibTeX{{\rmfamily B\kern-.05em%
- \textsc{i{\kern-.025em}b}\kern-.08em% the kern is wrapped in
- % braces for my |\fakescaps|' sake.
- \TeX}}
-
-
-\DeclareLogo\SliTeX{{\rmfamily S\kern-.06emL\kern-.18em\raise.32ex\hbox
- {\scshape i}\kern -.03em\TeX}}
-
-\DeclareLogo\PlainTeX{\textsc{Plain}\kern2pt\TeX}
-
-\DeclareLogo\Web{\textsc{Web}}
-% There's also the \LaTeXpar\ logo got with the |\LaTeXpar| macro
-% provided by \pk{gmutils}. And here \TeXbook's logo:
-\DeclareLogo[The TeX book]\TeXbook{\textsl{The \TeX book}}
-\let\TB\TeXbook% \textit{TUG Boat} uses this.
-
-\DeclareLogo[e-TeX]\eTeX{%
- \iffontchar\font"03B5{\itshape ε}\else
- \ensuremath{\varepsilon}\fi-\kern-.125em\TeX}% definition sent by Karl
-% Berry from \textit{TUG Boat} itself.
-
-\StoreMacro\eTeX
-
-\DeclareLogo[pdfe-TeX]\pdfeTeX{pdf\eTeX}
-
-\DeclareLogo\pdfTeX{pdf\TeX}
-\DeclareLogo\pdfLaTeX{pdf\LaTeX}
-% \changes{v0.97}{2008/11/22}{added}
-
-\gm@ifundefined{XeTeX}{%
- \DeclareLogo\XeTeX{X\kern-.125em\relax
- \gm@ifundefined{reflectbox}{%
- \lower.5ex\hbox{E}\kern-.1667em\relax}{%
- \lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\relax}%
- \TeX}}{}
-
-\gm@ifundefined{XeLaTeX}{%
- \DeclareLogo\XeLaTeX{X\kern-.125em\relax
- \gm@ifundefined{reflectbox}{%
- \lower.5ex\hbox{E}\kern-.1667em\relax}{%
- \lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\relax}%
- \LaTeX}}
-% As you see, if \TeX\ doesn't recognise \cs{reflectbox}
-% (\pk{graphics} isn't loaded), the first |E| will not be reversed.
-% This version of the command is intended for non-\XeTeX\ usage. With
-% \XeTeX, you can load the \pk{xltxtra} package (e.g.\ with the
-% \pk{gmutils} |\XeTeXthree| declaration) and then the reversed |E|
-% you get as the Unicode Latin Letter Reversed E.
-
-\DeclareLogo[LuaTeX]\LuaTeX{\textsc{Lua}\TeX}
-% \changes{v0.96}{2008/10/10}{added}
-
-% \division{Expandable turning stuff all into `other'}
-% ^^A
-% ^^A % While typesetting a~Unicode file contents with \pk{inputenc} package
-% ^^A % I~got a~trouble with some Unicode sequences that expanded to
-% ^^A % unexpandable \CSs: they couldn't be used within
-% ^^A % |\csname…\endcsname|. My \TeX Guru advised to use |\meaning| to
-% ^^A % make all the name `other'. So---here we are.
-% ^^A %
-% ^^A % Don't use them in |\edef|s, they would expand not quite.
-% ^^A % \Define\unex@namedef \Define\unex@nameuse
-% ^^A
-% ^^A
-
-% A shorthand. Note that it takes an undelimited argument not
-% requires \<balanced text>.
-
-\long\def\detoken@xa#1{\detokenize\@xa{#1}}
-
-% The next macro originates from the ancient era when I didn't know
-% about \eTeX's |\detokenize|. A try to redefine it to
-% |\detokenize\@xa{#1}| resulted in error so (v0.991) I leave it and
-% use as is.
-%
-% Note however it acts different than |\detoken@xa| for a macro with
-% parameters: while |\detoken@xa| produces and ‘extra |}|’ error,
-% |\all@other| expands to the detokenised meaning. \Define\all@other
- \long\def\all@other#1{\@xa\gm@gobmacro\meaning#1}
-
- % The |\gm@gobmacro| macro above is applied to gobble the |\meaning|'s
- % beginning, |long macro:->| all `other' that is.
- % \Define\gm@gobmacro
- \edef\gmu@tempa{%
- \def\@nx\gm@gobmacro##1\@xa\@gobble\string\macro:##2->{}}
- \gmu@tempa
-
-
-% \division{Brave New World of \XeTeX}
-
-\def\@ifXeTeX{% two-argument command
- \ifdefined\XeTeXversion
- \unless\ifx\XeTeXversion\relax\afterfifi\@firstoftwo\else\afterfifi\@secondoftwo\fi
- \else\afterfi\@secondoftwo\fi}
-
-\def\XeTeXifprefix{% to be used as prefix to an |\if›…| test.
- \@ifXeTeX{}{\unless}}
-
-\DeclareCommand\XeTeXthree{o}{% \
- % \changes{v0.90}{2008/8/4}{adjusted
- % to the redefinition of
- % \cs{verb} in \pk{xlxtra} 2008/07/29}
- \@ifXeTeX{%
- \IfValueT{#1}{\PassOptionsToPackage{#1}{fontspec}}%
- \@ifpackageloaded{gmverb}{\StoreMacro\verb}{}%
- \RequirePackage{xltxtra}% since v 0.4 (2008/07/29) this package
- % redefines |\verb| and \env{verbatim*},
- % and quite elegantly provides an option
- % to suppress the redefinitions, but
- % unfortunately that option excludes also
- % a~nice definition of |\xxt@visiblespace|
- % which I~fancy.
- \@ifpackageloaded{gmverb}{\RestoreMacro\verb}{}%
- \AtBeginDocument{%
- \RestoreMacro\LaTeX\RestoreMacro*{LaTeX }% my version of the
- % \LaTeX\ logo has been stored just
- % after defining, in line \ref{SMLaTeX}. \ilrr
- \RestoreMacro\eTeX}%
- % \stanza
- \pdef\adddefaultfontfeatures##1{%
- \addtomacro\zf@default@options{#1,}}
- }% of |\@ifXeTeX|'s first argument,
- {}% |\@ifXeTeX|'s second argument,
-}% of |\XeTeXthree|'s body.
-
-
-% \indent The |\udigits| declaration causes the digits to be typeset
-% uppercase. I~provide it since by default I~prefer the lowercase
-% (nautical) digits.
-\AtBeginDocument{%
- \@ifpackageloaded{fontspec}{%
- \pdef\udigits{%
- \addfontfeature{Numbers=Uppercase}}%
- }{%
- \emptify\udigits}}
-
-
-% \subdivision{Fractions}
-
-\def\Xedekfracc{\gm@ifstar\gmu@xedekfraccstar\gmu@xedekfraccplain}
- % (plain) The starless version turns the font feature |frac| on.
- %
- % (\*) But nor my modification of Minion Pro neither \TeX\ Gyre
- % Pagella doesn't feature the
- % |frac| font feature properly so, with the starred version of the
- % declaration we use the characters from the font where available
- % (see the |\@namedef|s below) and the |numr| and |dnom| features
- % with the fractional slash otherwise (via |\gmu@dekfracc|).
- %
- % (\*\*) But Latin Modern Sans Serif Quotation doesn't support the
- % numerator and denominator positions so we provide the double
- % star version for it, which takes the char from font if it exist
- % and typesets with lowers and kerns otherwise.
-
-\def\gmu@xedekfraccstar{%
- \def\gmu@xefraccdef##1##2{%
- \iffontchar\font ##2
- \@namedef{gmu@xefracc##1}{\char##2 }%
- \else
- \n@melet{gmu@xefracc##1}{relax}%
- \fi}%
- %
- \def\gmu@dekfracc##1/##2{%
- {\addfontfeature{VerticalPosition=Numerator}##1}\gmu@numeratorkern
- \char"2044 \gmu@denominatorkern
- {\addfontfeature{VerticalPosition=Denominator}##2}}%
- %
- % We define the fractional macros. Since Adobe Minion Pro doesn't
- % contain $\frac n5$ nor $\frac n6$, we don't provide them here.
- \gmu@xefraccdef{1/4}{"BC}%
- \gmu@xefraccdef{1/2}{"BD}%
- \gmu@xefraccdef{3/4}{"BE}%
- \gmu@xefraccdef{1/3}{"2153}%
- \gmu@xefraccdef{2/3}{"2154}%
- \gmu@xefraccdef{1/5}{"2155}%
- \gmu@xefraccdef{2/5}{"2156}%
- \gmu@xefraccdef{3/5}{"2157}%
- \gmu@xefraccdef{4/5}{"2158}%
- \gmu@xefraccdef{1/6}{"2159}%
- \gmu@xefraccdef{5/6}{"215A}%
- \gmu@xefraccdef{1/8}{"215B}%
- \gmu@xefraccdef{3/8}{"215C}%
- \gmu@xefraccdef{5/8}{"215D}%
- \gmu@xefraccdef{7/8}{"215E}%
- \pdef\dekfracc@args##1/##2{%
- \gm@ifundefined{gmu@xefracc\detokenize{##1/##2}}{%
- \gmu@dekfracc{##1}/{##2}}{%
- \csname gmu@xefracc\detokenize{##1/##2}\endcsname}%
- \if@gmu@mmhbox\egroup\fi
- }% of |\dekfracc@args|.
- \gm@ifstar{\let\gmu@dekfracc\gmu@dekfraccsimple}{}%
- }
-
-\def\gmu@xedekfraccplain{% `else' of the main |\gm@ifstar|
- \pdef\dekfracc@args##1/##2{%
- \ifmmode\hbox\fi{%
- \addfontfeature{Fractions=On}%
- ##1/##2}%
- \if@gmu@mmhbox\egroup\fi
- }% of |\dekfracc@args|
- }
-
-\newif\if@gmu@mmhbox% we'll use this switch for |\dekfracc| and also
-% for |\thous| (hacky thousand separator).
-
-\pdef\dekfracc{% \changes{v0.94}{2008/09/14}{made to work also in math
- % mode, even with math-active digits}
- \ifmmode\hbox\bgroup\@gmu@mmhboxtrue\fi
- \dekfracc@args}
-
-
-\def\gmu@numeratorkern{\kern-.055em\relax}
-\def\gmu@denominatorkern{\kern-.05em\relax}
-
-
-% What have we just done? We defined two versions of the
-% |\Xefractions| declaration. The starred version is intended to make
-% use only of the built-in fractions such as \dekfracc1/2 or
-% \dekfracc7/8. To achieve that, a~handful of macros is defined that
-% expand to the Unicodes of built-in fractions and |\dekfracc| command
-% is defined to use them.
-%
-% The unstarred version makes use of the Fraction font feature and
-% therefore is much simpler.
-%
-% Note that in the first argument of |\gm@ifstar| we wrote 8 (eight)
-% |#|s to get the correct definition and in the second argument `only'
-% 4. (The \LaTeXe\ Source claims that that is changed in the `new
-% implementation' of |\gm@ifstar| so maybe it's subject to change.)
-
-% A~simpler version of |\dekfracc| is provided in line \ref{2292}.
-
-% \subdivision{\cs{resizegraphics}}
-
-\pdef\resizegraphics#1#2#3{% % \changes{v0.94}{2008/10/4}{\cs{includegraphics}
- % works well in \XeTeX\ so I~remove the complicated version
- % with \cs{XeTeXpicfile}}
- % 2009/11/17 works bad with a file whose name contains spaces so I
- % return \cmd\XeTeXpicfile
- \resizebox{#1}{#2}{%
- \edef\gmu@tempa{\@nx\csname XeTeX\@nx\@ifendswithpdf{%
- \@xa\string\csname#3\endcsname}{pdf}{pic}file\@nx\endcsname}%
- \gmu@tempa "#3"\relax}}
-
-\edef\gmu@tempa{%
- \def\@nx\@ifendswithpdf##1{%
- \unexpanded{%
- \ifnum
- \if\relax\gmu@pdfdetector}##1%
- \detokenize{pdf}\unexpanded{\relax0\else1\fi}% we expand to 1 if
- % \inhash1 ends with lowercase ‘pdf’ of cat. 12
- \unexpanded{\if\relax\gmu@PDFdetector}##1%
- \detokenize{PDF}\unexpanded{\relax0\else1\fi}% we expand to 1 if
- % \inhash1 ends with uppercase ‘PDF’ of cat. 12
- >0
- \unexpanded{\@xa\@firstoftwo\else\@xa\@secondoftwo\fi}%
- }% of |\@ifendswithpdf|
- %
- % \stanza
- %
- \def\@nx\gmu@pdfdetector##1\detokenize{pdf}{}%
- \def\@nx\gmu@PDFdetector##1\detokenize{PDF}{}%
-}\gmu@tempa
-
-
-\pdef\textsuperscript@@#1{%
- \@textsuperscript{\selectfont#1}}%
-\def\@textsuperscript#1{%
- {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@#1}}}}}
-
-\let\textsuperscript@@\textsuperscript
-
-\def\GMtextsuperscript{%
- \@ifXeTeX{%
- \DeclareCommand\textsuperscript{sm}{%
- \IfValueTF{##1}{\textsuperscript@@{##2}}%
- {%
- \begingroup
- \addfontfeature{VerticalPosition=Numerator}##2%
- \endgroup}}%
- }{\truetextsuperscript}}
-
-\def\truetextsuperscript{%
- \let\textsuperscript\textsuperscript@@
-}
-
-%^^A %\subdivision{Proper loading of \pk{tikz}}
-%^^A \def\xetikz{\def\pgfsysdriver{pgfsys-dvipdfm.def}%
-%^^A \usepackage{tikz}}
-
-% \subdivision{Settings for mathematics in main font} I~used these
-% terrible macros while typesetting E.~Szarzyński's \textit{Letters}
-% in 2008. The \TextUsage\gmath\ declaration introduces math-active
-% digits and binary operators and redefines Greek letters and parentheses, the
-% \TextUsage\garamath\ declaration redefines the quantifiers and is
-% more Garamond Premier Pro-specific.
-
-% So, when you set default fonts (in the preamble), put
-% \TextUsage\gmath\ to set what possible from them to math. This sets
-% the |normal| math version. If you want to use another set of fonts
-% elsewhere in your document and have according math for them, set
-% them ‘for a~while’ in the preamble and in their scope declare
-% |\gmath⁄arg[version]|. Then put |\mathversion{normal}| right after
-% |\begin{document}| and |\gmath[⁄<version>]| where you want those
-% other fonts.
-%
-% |\gmath| takes second optional argument, in parentheses,
-% which should be (sth.\ that expands to) a |\fontspec| font selecting
-% command. A font selected by this command will be declared and used
-% when some char in basic font is missing and only else the default
-% math font will be left for such a char.
-%
-% So, \[|\gmath⁄arg[version](rescue font«(spec-ification)»)|\]
-%
-% Note that |\gmath| without first optional argument has always to
-% come first because otherwise it overwrite settings of your math
-% version.
-
-\def\gmu@getfontstring{%
- \xdef\gmu@fontstring{%
- \gmu@fontstring@}}
-
-\def\gmu@fontstring@{%
- \@xa\@xa\@xa\gmu@fontstring@@\@xa\meaning\the\font\@@nil}
-
- %^^A \edef\gmu@tempa{%
- %^^A \def\@nx\gmu@fontstring@@
- %^^A \detokenize{select font }##1\@nx\@@nil
- %^^A {##1}%
- %^^A }\gmu@tempa
-
-\def\gmu@fontstring@@#1"#2"#3\@@nil{"#2"}
-
-\def\gmu@getfontscale#1Scale#2=#3,{%
- \ifx\gmu@getfontscale#3\else
- \def\gmu@tempa{MatchLowercase}%
- \def\gmu@tempb{#3}%
- \ifx\gmu@tempa\gmu@tempb
- \gmu@calc@scale{5}%
- \@xa\@firstoftwo
- \else
- \def\gmu@tempa{MatchUppercase}%
- \ifx\gmu@tempa\gmu@tempb
- \gmu@calc@scale{8}%
- \afterfifi\@firstoftwo
- \else\afterfifi\@secondoftwo
- \fi
- \fi
- {\xdef\gmu@fontscalebr{[\gmu@fontscale] }}%
- {\xdef\gmu@fontscalebr{[#3] }}%
- \afterfi\gmu@getfontscale
- \fi
-}
-
-
-\def\gmu@getfontdata#1{%
- \global\emptify\gmu@fontscalebr
- \begingroup
- #1%
- %^^A\typeout{@@@@ \@xa\meaning\the\font}%
- \@xa\@xa\@xa\gmu@getfontscale
- \csname zf@family@options\f@family\endcsname
- ,Scale=\gmu@getfontscale,%
- \gmu@getfontstring
- \xdef\gmu@theskewchar{\the\skewchar\font}%
- \endgroup}
-
-
-\def\gmu@stripchar#1"{"}
-
-\DeclareCommand\gmath@getfamnum{C{\gmath@fam}}{%
- \edef\gmath@famnum{\@xa\gmu@stripchar\meaning#1}%
-}
-
-%\incs{XeTeXmathcode}\<char slot> \arg[=] \<type> \<family> \<char slot>
-
-\DeclareCommand\gmathFams{o % the name of math version
- C{\NoValue} % ‘rescue’ font. Will be accessible via
- % \inverb|\symgmathRoman⁄<version>| (math family) and
- % \inverb|\gmath@fontt⁄<version>| (font).
-}{%
- %^^A\AtBeginDocument{\setbox0=\hbox{$\showthe\textfont0 $}}%
- \IfValueT{#1}{%
- \DeclareMathVersion{#1}% this sets the defaults so no need to
- % define them explicitly
- % ^^A \SetSymbolFont{operators}{#1}{OT1}{qpl}{m}{n}%
- % ^^A %^^A\SetSymbolFont{letters} {#1}{OML}{qpxmi} {m}{it}%
- % ^^A \SetSymbolFont{symbols}{#1}{OMS}{pxsy}{m}{n}%
- % ^^A \SetSymbolFont{largesymbols}{#1}{OMX}{pxex}{m}{n}%
- }% of if |#1| given
- %
- \gmu@getfontdata{\rmfamily\itshape}%
- %
- \edef\gmu@tempa{%
- \IfValueTF{#1}{\@nx\SetSymbolFont{letters}{#1}}%
- {\@nx\DeclareSymbolFont{letters}}%
- {\encodingdefault}{gmathit\PutIfValue{#1}}{m}{it}%
- \IfValueT{#1}{%
- \@nx\DeclareSymbolFont{letters#1}%
- {\encodingdefault}{gmathit\PutIfValue{#1}}{m}{it}%
- }%
- \@nx\DeclareFontFamily{\encodingdefault}{gmathit\PutIfValue{#1}}{%
- \skewchar\font\gmu@theskewchar\space}%
- \@nx\DeclareFontShape{\encodingdefault}{gmathit\PutIfValue{#1}}{m}{it}{%
- <-> \gmu@fontscalebr \gmu@fontstring}{}%
- \IfValueT{#1}{%
- \@nx\SetMathAlphabet\@nx\mathit{#1}{\encodingdefault}{gmathit#1}{m}{it}}%
- }\gmu@tempa
- %
- \IfValueT{#2}{%
- \gmu@getfontdata{#2\gmu@ifstored{\upshape}{\storedcsname{upshape}}{\upshape}}%
- \edef\gmu@tempa{%
- \@nx\DeclareSymbolFont{gmathRoman\PutIfValue{#1}}%
- {\encodingdefault}{gmathRm\PutIfValue{#1}}{m}{n}%
- \@nx\DeclareFontFamily{\encodingdefault}{gmathRm\PutIfValue{#1}}{%
- \skewchar\font\gmu@theskewchar\space}%
- \@nx\DeclareFontShape{\encodingdefault}{gmathRm\PutIfValue{#1}}{m}{n}{%
- <-> \gmu@fontscalebr \gmu@fontstring}{}%
- }\gmu@tempa
- \@xa\font\csname gmath@fontt\PutIfValue{#1}\endcsname
- =\gmu@fontstring\relax
- % \stanza
- \gmu@getfontdata{#2\gmu@ifstored{\itshape}{\storedcsname{itshape}}{\itshape}}%
- \edef\gmu@tempa{%
- \@nx\DeclareSymbolFont{gmathItalic\PutIfValue{#1}}%
- {\encodingdefault}{gmathIt\PutIfValue{#1}}{m}{n}%
- \@nx\DeclareFontFamily{\encodingdefault}{gmathIt\PutIfValue{#1}}{%
- \skewchar\font\gmu@theskewchar\space}%
- \@nx\DeclareFontShape{\encodingdefault}{gmathIt\PutIfValue{#1}}{m}{n}{%
- <-> \gmu@fontscalebr \gmu@fontstring}{}%
- }\gmu@tempa
- }% of if |#2| given
- % \stanza
- \gmu@getfontdata{\rmfamily\upshape}%
- \edef\gmu@tempa{%
- \IfValueTF{#1}{\@nx\SetSymbolFont{gmathroman}{#1}}%
- {\@nx\DeclareSymbolFont{gmathroman}}%
- {\encodingdefault}{gmathrm\PutIfValue{#1}}{m}{n}%
- \@nx\DeclareFontFamily{\encodingdefault}{gmathrm\PutIfValue{#1}}{%
- \skewchar\font\gmu@theskewchar\space}%
- \@nx\DeclareFontShape{\encodingdefault}{gmathrm\PutIfValue{#1}}{m}{n}{%
- <-> \gmu@fontscalebr \gmu@fontstring}{}%
- \IfValueT{#1}{%
- \@nx\SetMathAlphabet\@nx\mathrm{#1}{\encodingdefault}{gmathrm#1}{m}{n}}%
- }\gmu@tempa
- % ^^A \typeout{@@@ gmathrm (upright symbols):
- % ^^A \meaning\gmu@tempa}%
- \@xa\font\csname gmath@font\PutIfValue{#1}\endcsname
- =\gmu@fontstring\relax
- \gmathfamshook
-}
-
-\emptify\gmathfamshook
-
-\DeclareCommand\gmathbase{oC{\NoValue}}{%
- \gmathFams[#1](#2)%
- \DeclareCommand\gmath@do{%
- m % (1) the character or \CS\ to be declared,
- o % (2) the Unicode to be assigned,
- m % (3) math type (\CS like \cs{mathord} etc.)
- C{\gmath@fam} % font family
- }{%\
- %
- \gmath@getfamnum(##4)%
- \IfValueTF{##2}{%
- \edef\gmu@tempa{%
- = \mathchar@type##3\space
- \gmath@famnum\space
- % ^^A\the\XeTeXcharglyph
- "##2\relax}%
- \if\relax\@nx##1%
- \gmu@ifstored{##1}{}{\StoreMacro##1}%
- \edef\gmu@tempa{%
- \XeTeXmathchardef \@nx##1\gmu@tempa}%
- \else
- \edef\gmu@tempa{%
- \XeTeXmathcode `##1 \gmu@tempa}
- \fi%
- }%
- {% no value of |##2|
- \edef\gmu@tempa{%
- \XeTeXmathcode `##1 =
- \mathchar@type##3\space
- \gmath@famnum\space
- %^^A \the\XeTeXcharglyph
- `##1\relax}%
- }%
- \gmu@tempa
- % ^^A \typeout{@@@@ \@nx##1}%
- % ^^A \typeout{@@@@ \@xa\detokenize\@xa{\gmu@tempa}}%
- }% of \incs{gmath@do}
- %
- \DeclareCommand\gmath@doif{%
- m % (1) the Unicode hex of char enquired,
- m % (2) the char or \CS\ to be declared,
- m % (3) math type \CS (\cs{mathord} etc.),
- o % (4) second-choice Unicode (taken if first-choice is absent),
- o % (5) third-choice Unicode (as above if second-choice is absent from font).
- B{\gmath@fam} % (6) never used in this package. Why?
- C{\NoValue}
- }{%
- \gmu@storeifnotyet{##2}%
- \@xa\let\@xa\gmath@ft\csname
- gmath@font%
- \ifx\gmath@fam##6\else t\fi
- \gmath@version
- \endcsname
- \iffontchar\gmath@ft"##1 \gmath@do##2[##1]##3(##6)%
- \else
- \IfValueTF{##4}{%
- \iffontchar\gmath@ft"##4 \gmath@do##2[##4]##3(##6)%
- \else
- \IfValueTF{##5}{%
- \iffontchar\gmath@ft"##5 \gmath@do##2[##5]##3(##6)%
- \else
- \gmath@restore{##1}{##2}{##3}{##4}{##5}{##7}%
- \fi}%
- {\gmath@restore{##1}{##2}{##3}{##4}{##5}{##7}}%
- \fi}%
- {\gmath@restore{##1}{##2}{##3}{##4}{##5}{##7}}%
- \fi
- }% of |\gmath@doif|
- % In the command above we try to define math char or a~\CS in the
- % family given as |##6|. If there're no respective chars, we try
- % the same with the family given (as a~word) in |##7|.
- \def\gmath@restore##1##2##3##4##5##6{%
- \IfValueT{##6}%
- {\ifcsname ##6\endcsname
- \edef\gmu@tempa{%
- \unexpanded{\gmath@doif{##1}{##2}{##3}[##4][##5]}%
- {\@xa\@nx\csname##6\endcsname}\relax
- }\gmu@tempa
- \@xa\@gobbletwo % if family |##6| is defined, we gobble the
- % other branch
- \fi
- }%
- \firstofone
- {\if\relax\@nx##2%
- \RestoreMacro##2%
- \fi
- }%
- }%
- %
-\iffalse % doesn't work in a~non-math font.
- \DeclareCommand\gmath@delc{mo}{%\
- % \begin{enumargs*}
- % \mand the char or \CS\ to be declared,
- % \opt the Unicode (if not the same as the char).
- % \end{enumargs*}
- %
- \gmath@getfamnum
- \IfValueTF{##2}{%
- \edef\gmu@tempa{%
- = \gmath@famnum\space "##2\relax}%
- \edef\gmu@tempa{%
- \XeTeXdelcode `##1 \gmu@tempa}
- }%
- {%
- \edef\gmu@tempa{%
- \XeTeXdelcode `##1 =
- \gmath@famnum\space
- % ^^A \the\XeTeXcharglyph
- `##1\relax}%
- }%
- \gmu@tempa
- % ^^A \typeout{@@@@ \@nx##1}%
- % ^^A \typeout{@@@@ \meaning\gmu@tempa}%
- }% of \incs{gmath@delc}
- %
- \def\gmath@delcif##1##2{%\
- % \begin{enumargs*}
- % \mand the Unicode enquired,
- % \item the char to be delcode-declared
- % \end{enumargs*}
- %
- \iffontchar\gmath@font"##1 \gmath@delc##2[##1]\fi}
-\fi% of iffalse
- %
- \def\gmath@delimif##1##2##3{%\
- % \begin{enumargs*}
- % \item the Unicode enquired,
- % \item the \CS\ defined as \cs{XeTeXdelimiter},
- % \item the math type \CS\ (probably \incs{mathopen} or
- % \incs{mathclose}).
- % \end{enumargs*}
- \iffontchar\gmath@font"##1
- \gmath@getfamnum
- \protected\edef##2{\@nx\ensuremath{%
- \XeTeXdelimiter \mathchar@type##3\space
- \gmath@famnum\space "##1\relax}}%
- \fi}% of \cs{gmath@delimif}.
- %
- \pdef\rmopname##1##2##3{%
- \mathop {##1\kern \z@ \mathrm{##3}}\csname n##2limits@\endcsname
- }%
- %
- \DeclareCommand\gmu@dogmathbase{oC{\NoValue}}{%
- %^^A\setbox0=\hbox{$\showthe\textfont0 $}%
- \RestoreMacro\mathchar@type%
- %
- \IfValueT{##1}{\mathversion{##1}}%
- %
- \edef\gmath@version{\PutIfValue{##1}}%
- % ^^A\show\gmath@version
- %
- \@xa\let\@xa\gmath@fam\csname symgmathroman%
- \endcsname
- \edef\gmath@famm{symgmathRoman\gmath@version}% as you see, this is
- % not a~font family (number) but a~macro containing the name: of
- % the secondary (‘rescue’) family.
- %
- \typeout{@@@ gmutils.sty: taking some math chars from the font^^J \gmu@fontstring@}%
- \gmath@do+\mathbin
- \gmath@doif{2212}-\mathbin[2013](\gmath@famm)% minus sign if present or else en dash
- \gmath@do=\mathrel
- \gmath@do0\mathord
- \gmath@do1\mathord
- \gmath@do2\mathord
- \gmath@do3\mathord
- \gmath@do4\mathord
- \gmath@do5\mathord
- \gmath@do6\mathord
- \gmath@do7\mathord
- \gmath@do8\mathord
- \gmath@do9\mathord
- %%
- \gmath@doif{2264}\le\mathrel(\gmath@famm)%
- \let\leq\le
- \let\leeng\le
- \gmath@doif{2265}\ge\mathrel(\gmath@famm)%
- \let\geq\ge
- \let\geeng\ge
- \gmath@doif{2A7D}\xleq\mathrel(\gmath@famm)%
- \gmath@doif{2A7E}\xgeq\mathrel(\gmath@famm)%
- \@ifpackageloaded{polski}{%
- \ifdefined\xleq
- \gmu@storeifnotyet\leq
- \let\leq=\xleq
- \let\le=\leq
- \fi
- \ifdefined\xgeq
- \gmu@storeifnotyet\geq
- \let\geq=\xgeq
- \let\ge=\geq
- \fi}{}%
- %
- \gmath@do.\mathpunct
- \gmath@do,\mathpunct
- \gmath@do;\mathpunct
- \gmath@do…\mathpunct
- \gmath@do(\mathopen
-%^^A \gmath@delc(% doesn't work with a~non-math font (I~dunno if
-%^^A~it works with a~math font).
- \gmath@do)\mathclose
-%^^A \gmath@delc)%
- \gmath@do[\mathopen
-%^^A \gmath@delc[%
- \gmath@do]\mathclose
-%^^A \gmath@delc]%
- %
- \gmath@doif{00D7}×\mathbin (\gmath@famm)%
- \gmath@do:\mathrel
- \gmath@doif{00B7}·\mathbin(\gmath@famm)%
- \gmath@doif{22C6}*\mathbin(\gmath@famm)% % low star
- \gmath@doif{2300}\varnothing\mathord(\gmath@famm)%
- \gmath@doif{221E}\infty\mathord(\gmath@famm)%
- \gmath@doif{2248}\approx\mathrel(\gmath@famm)%
- \gmath@doif{2260}\neq\mathrel(\gmath@famm)%
- \let\ne\neq
- \gmath@doif{00AC}\neg\mathbin(\gmath@famm)%
- \gmath@doif{00AC}\nego\mathord(\gmath@famm)%
- \gmath@do/\mathop
- \gmath@do<\mathrel
-%^^A \gmath@delcif{2329}<%
- \gmath@do>\mathrel
-%^^A \gmath@delcif{232A}>%
- \gmath@doif{2329}\langle\mathopen(\gmath@famm)%
- \gmath@doif{232A}\rangle\mathclose(\gmath@famm)%
- \gmath@doif{2202}\partial\mathord(\gmath@famm)%
- \gmath@doif{00B1}\pm\mathbin(\gmath@famm)%
- \gmath@doif{007E}\sim\mathrel(\gmath@famm)%
- \gmath@doif{2190}\leftarrow\mathrel(\gmath@famm)%
- \gmath@doif{2192}\rightarrow\mathrel(\gmath@famm)%
- \gmath@doif{2194}\leftrightarrow\mathrel(\gmath@famm)%% if not present,
- % \incs{gmathfurther} will take care
- % of it if left and right arrows are present.
- \gmath@doif{2191}\uparrow\mathrel(\gmath@famm)%% it should be a~delimiter
- % (declared with \incs{gmath@delimif}) % but in a~non-math
- % font the delimiters don't work (2008/11/19) and I~don't think
- % I'll ever need up- and down- arrows as delimiters.
- \gmath@doif{2193}\downarrow\mathrel(\gmath@famm)%
- %
- \gmath@doif{2208}\in\mathrel[03F5][0454](\gmath@famm)%%
- % As a~fan of modal logics I~allow redefinition of \incs{lozenge}
- % and \incs{square} iff both are in the font. I~don't accept
- % the ‘ballot box’ U+2610.
- \if\iffontchar\gmath@font"25CA 0\else 1\fi
- \iffontchar\gmath@font"25FB 0\else\iffontchar\gmath@font"25A1 0\else 2\fi\fi
- \gmath@do\lozenge[25CA]\mathord
- \gmath@doif{25FB}\square\mathord[25A1](\gmath@famm)%% ‘medium white square (modal
- % operator)’ of just ‘white square’.
- \fi
- \gmath@doif{EB08}\bigcircle\mathbin(\gmath@famm)%
- \gmath@doif{2227}\wedge\mathbin(\gmath@famm)%
- \gmath@doif{2228}\vee\mathbin(\gmath@famm)%
- %
- \gmath@doif{0393}\Gamma\mathalpha(\gmath@famm)%
- \gmath@doif{0394}\Delta\mathalpha(\gmath@famm)%
- \gmath@doif{0398}\Theta\mathalpha(\gmath@famm)%
- \gmath@doif{039B}\Lambda\mathalpha(\gmath@famm)%
- \gmath@doif{039E}\Xi\mathalpha(\gmath@famm)%
- %^^A~\gmath@doif{039F}\Xi\mathalpha(\gmath@famm)%
- \gmath@doif{03A3}\Sigma\mathalpha(\gmath@famm)%
- \gmath@doif{03A5}\Upsilon\mathalpha(\gmath@famm)%
- \gmath@doif{03А6}\Phi\mathalpha(\gmath@famm)%
- \gmath@doif{03A8}\Psi\mathalpha(\gmath@famm)%
- \gmath@doif{03A9}\Omega\mathalpha(\gmath@famm)%
- %
- \@xa\let\@xa\gmath@fam\csname symletters\gmath@version%
- \endcsname
- \edef\gmath@famm{symgmathItalic\gmath@version}%
- %
- \gmath@doif{03B1}\alpha\mathalpha(\gmath@famm)%
- \gmath@doif{03B2}\beta\mathalpha(\gmath@famm)%
- \gmath@doif{03B3}\gamma\mathalpha(\gmath@famm)%
- \gmath@doif{03B4}\delta\mathalpha(\gmath@famm)%
- \gmath@doif{03F5}\epsilon\mathalpha(\gmath@famm)%
- \gmath@doif{03B5}\varepsilon\mathalpha(\gmath@famm)%
- \gmath@doif{03B6}\zeta\mathalpha(\gmath@famm)%
- \gmath@doif{03B7}\eta\mathalpha(\gmath@famm)%
- \gmath@doif{03B8}\theta\mathalpha(\gmath@famm)%
- \gmath@doif{03D1}\vartheta\mathalpha(\gmath@famm)%
- \gmath@doif{03B9}\iota\mathalpha(\gmath@famm)%
- \gmath@doif{03BA}\kappa\mathalpha(\gmath@famm)%
- \gmath@doif{03BB}\lambda\mathalpha(\gmath@famm)%
- \gmath@doif{03BC}\mu\mathalpha(\gmath@famm)%
- \gmath@doif{03BD}\nu\mathalpha(\gmath@famm)%
- \gmath@doif{03BE}\xi\mathalpha(\gmath@famm)%
- \gmath@doif{03C0}\pi\mathalpha(\gmath@famm)%
- \gmath@doif{03A0}\Pi\mathalpha(\gmath@famm)%
- \gmath@doif{03C1}\rho\mathalpha(\gmath@famm)%
- \gmath@doif{03C3}\sigma\mathalpha(\gmath@famm)%
- \gmath@doif{03DA}\varsigma\mathalpha(\gmath@famm)%% 03C2?
- \gmath@doif{03C4}\tau\mathalpha(\gmath@famm)%
- \gmath@doif{03C5}\upsilon\mathalpha(\gmath@famm)%
- \gmath@doif{03D5}\phi\mathalpha(\gmath@famm)%
- \gmath@doif{03C7}\chi\mathalpha(\gmath@famm)%
- \gmath@doif{03C8}\psi\mathalpha(\gmath@famm)%
- \gmath@doif{03C9}\omega\mathalpha(\gmath@famm)%
- %
- \if 1 1%
- \iffontchar\gmath@font"221A
- \fontdimen61\gmath@font=1pt
- \edef\sqrtsign{%
- \XeTeXradical \@xa\gmu@stripchar\meaning\symgmathroman\space "221A\relax}%
- \fi
- \fi% of if 1 1.
- \def\max{\rmopname \relax m{max}}%
- \def\min{\rmopname \relax m{min}}%
- \def\lim{\rmopname \relax m{lim}}%
- \def\sin{\rmopname \relax o{sin}}%
- \def\cos{\rmopname \relax o{cos}}%
- \def\tg{\rmopname \relax o{tg}}%
- \def\ctg{\rmopname \relax o{ctg}}%
- \def\tan{\rmopname \relax o{tan}}%
- \def\ctan{\rmopname \relax o{ctan}}%
- }% of |\gmu@dogmathbase|
- \AtBeginDocument{\gmu@dogmathbase[#1](#2)%
- \let\gmathbase\gmu@dogmathbase
- }% of atbd
- \not@onlypreamble\gmathbase
-}% of \cs{gmathbase}
-
-% The |\gmatbase| declaration defines a~couple of gmath defining
-% commands and then launches them for the default font at begin
-% document and becomes only that launching.
-
-\@onlypreamble\gmathbase
-% \nostanza It's a~bit tricky: if \cs{gmathbase} occurs first time in
-% a~document inside \env{document} then an error error is raised. But
-% if \cs{gmathbase} occurs first time in the preamble, then it removes
-% itself from the only-preamble list and redefines itself to be only
-% the inner macro of the former itself.
-
-\pdef\gmathfurther{% \HideDef
- % \changes{v0.94}{2008/10/4}{removed definition of
- % \cs{}\<letter>s and \cs{}\<digit>s}
- % \changes{v0.96}{2008/11/7}{Greek letters completed. Wrapped with
- % \cs{addtotoks} to allow using in any order with \cs{garamath}
- % and others}
- %
- \def\do##1##2##3{\gmu@storeifnotyet##1%
- \def##1{%
- \mathop{\mathchoice{\hbox{%
- \rm
- \edef\gma@tempa{\the\fontdimen8\font}%
- \larger[3]%
- \lower\dimexpr(\fontdimen8\font-\gma@tempa)/2 %
- \hbox{##2}}}{\hbox{%
- \rm
- \edef\gma@tempa{\the\fontdimen8\font}%
- \larger[2]%
- \lower\dimexpr(\fontdimen8\font-\gma@tempa)/2 %
- \hbox{##2}}}%
- {\mathrm{##2}}{\mathrm{##2}}}##3}}%
- \iffontchar\gmath@font"2211 \do\sum{\char"2211}{}\fi%
- \do\forall{\gma@quantifierhook \rotatebox[origin=c]{180}{A}%
- \gmu@forallkerning
- }{\nolimits}%
- \def\gmu@forallkerning{\setbox0=\hbox{A}\setbox2=\hbox{\scriptsize x}%
- \kern\dimexpr\ht2/3*2 -\wd0/2\relax}% to be able to redefine it
- % when the big quantifier is Bauhaus-like.
- \do\exists{\rotatebox[origin=c]{180}{\gma@quantifierhook E}}\nolimits%
- %
- \def\do##1##2##3{\gmu@storeifnotyet##1%
- \def##1{##3{%
- \mathchoice{\hbox{\rm##2}}{\hbox{\rm##2}}%
- {\hbox{\rm\scriptsize##2}}{\hbox{\rm\tiny##2}}}}}%
- %
- \unless\iffontchar\gmath@font"2227
- \do\vee{\rotatebox[origin=c]{90}{<}}\mathbin%
- \fi
- \unless\iffontchar\gmath@font"2228
- \do\wedge{\rotatebox[origin=c]{-90}{<}}\mathbin
- \fi
- %
- \unless\iffontchar\gmath@font"2194
- \if\iffontchar\gmath@font"2190 0\else1\fi
- \iffontchar\gmath@font"2192 0\else2\fi
- \do\leftrightarrow{\char"2190\kern-0,1em \char"2192}\mathrel
- %^^A\typeout{@@@ I fake \string\leftrightarrow}%
- \fi\fi
- %
- \def\do##1##2##3{\gmu@storeifnotyet##1%
- \def##1####1{##2{\hbox{%
- \rm
- \setbox0=\hbox{####1}%
- \edef\gma@tempa{\the\ht0}%
- \edef\gma@tempb{\the\dp0}%
- ##3%
- \setbox0=\hbox{####1}%
- \lower\dimexpr(\ht0 + \dp0)/2-\dp0 -((\gma@tempa+\gma@tempb)/2-\gma@tempb) %
- \box0}}}}%
- \do\bigl\mathopen\larger
- \do\bigr\mathclose\larger
- \do\Bigl\mathopen\largerr
- \do\Bigr\mathclose\largerr
- \do\biggl\mathopen{\larger[3]}%
- \do\biggr\mathclose{\larger[3]}%
- \do\Biggl\mathopen{\larger[4]}%
- \do\Biggr\mathclose{\larger[4]}%
- %
- %
- \addtotoks\everymath{% \changes{v0.96}{2008/11/20}{the
- % \cs{everymath}'s left brace moved here:
- % earlier all the stuff was put into \cs{everymath}}
- \def\do##1##2{\gmu@storeifnotyet##1%
- \def##1{\ifmmode##2{\mathchoice
- {\hbox{\rm\char`##1}}{\hbox{\rm\char`##1}}%
- {\hbox{\rm\scriptsize\char`##1}}{\hbox{\rm\tiny\char`##1}}}%
- \else\char`##1\fi}}%
- % ^^A \StoreMacros{\{\}}%
- \do\{\mathopen
- \do\}\mathclose
- %
- \def\={\mathbin{=}}%
- \def\neqb{\mathbin{\neq}}%
- \let\neb\neqb
- \def\do##1{\gmu@storeifnotyet##1%
- \edef\gma@tempa{%
- \def\@xa\@nx\csname \@xa\gobble\string##1r\endcsname{%
- \@nx\mathrel{\@nx##1}}}%
- \gma@tempa}%
- \do\vee \do\wedge \do\neg
- \def\fakern{\mkern-3mu}%
- \thickmuskip=8mu plus 4mu\relax
- %
- \gma@gmathhook
- }% of |\everymath|.
- \everydisplay\everymath
- \ifdefined\Url
- \ampulexdef\Url{\let\do}\@makeother
- {\everymath{}\let\do\@makeother}% I~don't know why but the
- % \pk{url} package's \incs{url} typesets the argument inside
- % a~math which caused digits not to be typewriter but Roman and
- % lowercase.
- \fi% of |\ifdefined\Url|.
-}% of |\def\gmathfurther|. \ResumeDef
-
-\StoreMacro\mathchar@type
-
-\DeclareCommand\gmath{oC{\NoValue}}{%
- \gmathbase[#1](#2)%
- \gmathfurther
- \IfValueT{#1}{\csname gmathhook#1\endcsname}% this allows adding
- % version-specific stuff (I~first used this for Fell fonts rescued
- % with Garamond Premier)
-}
-
-\pdef\gmathscripts{% \changes{v0.96}{2008/11/11}{added}
- \addtotoks\everymath{\catcode`\^=7\relax \catcode`\_=8\relax }%
- \everydisplay\everymath}
-
-\pdef\gmathcats{%
- \addtotoks\everymath{\gmu@septify}%
- \everydisplay\everymath}
-
-\emptify\gma@quantifierhook
-\def\quantifierhook#1{%
- \def\gma@quantifierhook{#1}}
-
-\emptify\gma@gmathhook
-\def\gmathhook#1{\addtomacro\gma@gmathhook{#1}}
-
-
-\def\gma@dollar$#1${{\gmath$#1$}}%
-\def\gma@bare#1{\gma@dollar$#1$}%
-\def\gma@checkbracket{\@ifnextchar\[%^^A\]
- \gma@bracket\gma@bare}
-\def\gma@bracket\[#1\]{{\gmath\[#1\]}\@ifnextchar\par{}{\noindent}}
-\def\gma{\@ifnextchar$%^^A $
- \gma@dollar\gma@checkbracket}
-
- %^^A In Beamer presentations it will we defined another way.
- %^^B trial composition
-\def\bgcolor{\color{white}}
-
-\DeclareCommand\garamath{%
- O{\rm}% the font command
-}{%
- % Before 2009/10/19 all the stuff was added to |\everymath| which
- % didn't work.
- \quantifierhook{\addfontfeature{OpticalSize=800}}%
- %
- \def\gma@arrowdash{{%
- \setbox0=\hbox{\char"2192}\copy0\kern-0,6\wd0
- \bgcolor\rule[-\dp0]{0,6\wd0}{\dimexpr1,07\ht0+\dp0}\kern-0,6\wd0}}%
- %
- \def\gma@gmathhook{%
- \def\do####1####2####3{\gmu@storeifnotyet####1%
- \def####1{####3{%
- \mathchoice{\hbox{#1####2}}{\hbox{#1####2}}%
- {\hbox{#1\scriptsize####2}}{\hbox{#1\tiny####2}}}}}%
- \do\mapsto{\rule[0,4ex]{0,1ex}{0,4ex}\kern-0,05em%
- \gma@arrowdash\kern-0,05em\char"2192}\mathrel
- \do\cup{\scshape u}\mathbin
- \do\varnothing{\setbox0=\hbox{\gma@quantifierhook\addfontfeature{Scale=1.272727}0}%
- \setbox2=\hbox{\char"2044}%
- \copy0 \kern-0,5\wd0 \kern-0,5\wd2 \lower0,125\wd0 \copy2
- \kern0,5\wd0\kern-0,5\wd2}{}% of |\varnothing|
- \do\leftarrow{\char"2190\kern-0,05em\gma@arrowdash}\mathrel
- \do\shortleftarrow{\char"2190}\mathrel
- \do\rightarrow{\gma@arrowdash\kern-0,05em\char"2192}\mathrel
- \do\shortrightarrow{\char"2192\relax}\mathrel
- \do\in{\gma@quantifierhook\char"0454}\mathbin
- \do\prec{\gma@quantifierhook
- \rotatebox[origin=c]{-90}{%
- \glyphname{u03A5.a}}}\mathrel % added 2009/9/11
- }% of |\gma@gmathhook|
-}% of |\garamath|.
-
-
-
-
-% \subdivision{Minion and Garamond Premier kerning and ligature fixes}
-
-%»Ws« shall not make long »s« because long »s« looks ugly next to »W«.
-
-\def\gmu@tempa{\kern-0,08em\penalty10000\hskip0sp\relax
- s\penalty10000\hskip0sp\relax}
-
-\protected\edef\Vs{V\gmu@tempa}
-
-\protected\edef\Ws{W\gmu@tempa}
-
-\pdef\Wz{W\kern-0,05em\penalty10000\hskip0sp\relax z}
-
-
-
-% \subdivision{A~left-slanted font} Or rather a~left Italic \emph{and}
-% left slanted font. In both cases we sample the skewness of the
-% itshape font of the current family, we reverse it and apply to
-% \cs{itshape} in \cs{litshape} and
-% \cs{textlit} and to \cs{sl} in \cs{lsl}. Note
-% a~slight asymmetry: \cs{litshape} and \cs{textlit} take the current
-% family while \cs{lsl} and \cs{textlsl} the basic Roman family and
-% basic (serif) Italic font. Therefore we introduce the \cs{lit}
-% declaration for symmetry, that declaration left-slants \cs{it}.
-%
-% {\leftslanting
-% I~introduced them first while typesetting E.~Szarzyński's
-% \ty{Letters} to follow his (elaborate) hand-writing and now I copy
-% them here when need left Italic for his \ty{Albert Camus' ^^B
-% \ty{The Plague}} to avoid using bold font.\par}
-%
-% Of course it's rather esoteric so I~wrap all that in a~declaration.
-
-\pdef\leftslanting@{%
- \def\litdimen{\strip@pt\fontdimen1\font ex}%
- \def\litcorrection{%
- \ifhmode\null\nobreak\hskip\litdimen\relax\fi}%
- \def\litkern{% note it's to be used inside the left slanted font,
- % unlike \incmd\litcorrection, intended to be used \emph{before}
- % switching to left slant/italic.
- \leavevmode\null
- \kern-\litdimen\relax}%
- \def\dilitkern{\kern\litdimen\litkern}%
- % \stanza
- \pdef\litshape{% \changes{v0.93}{2008/08/22}{copied here from
- % E.~Szarzyński's \ty{The Letters}}
- \litcorrection
- \itshape
- \@tempdima=-2\fontdimen1\font
- \advance\leftskip by\strip@pt\fontdimen1\font ex % to assure at
- % least the lowercase letters not to overshoot to the (left)
- % margin. Note this has any effect only if there is a~\incs{par} in
- % the scope.
- \litcorrection
- \edef\gmu@tempa{%
- \@nx\addfontfeature{FakeSlant=\strip@pt\@tempdima}}%^^B
- % \ilrr when not \incs{edef}ed, it caused an error, which is
- % perfectly understandable.
- \gmu@tempa}%
- %
- %
- \pdef\textlit##1{% \changes{v0.93}{2008/08/22}{added}
- {\litshape##1}}%
- %
- \pdef\lit{\rm\litshape}%
- %
- %
- \pdef\lsl{{%
- \litcorrection
- \it
- % \changes{v0.93}{2008/08/22}{copied here from E.~Szarzyński's \ty{The
- % Letters}}
- \@tempdima=-\fontdimen1\font
- \litcorrection
- \xdef\gmu@tempa{%
- \@nx\addfontfeature{RawFeature={slant=\strip@pt\@tempdima}}}}%
- \rm % Note in this declaration we left-slant the basic Roman font
- % not the itshape of the current family.
- \gmu@tempa}%
- %
- % Now we can redefine \cs{em} and \cs{emph} to use left Italic for
- % nested emphasis. In Polish typesetting there is bold in nested
- % emphasis as I~have heard but we don't like bold since it perturbs
- % homogeneous greyness of a~page. So we introduce a~three-cycle
- % instead of two-: Italic, left Italic, upright.
- %
- \pdef\em{%\changes{v0.93}{2008/08/22}{added}
- \ifdim\fontdimen1\font=\z@ \itshape
- \else
- \ifdim\fontdimen1\font>\z@ \litshape
- \else \upshape
- \fi
- \fi}%
- %
- %
- \pdef\emph##1{% \changes{v0.93}{2008/08/22}{added}
- {\em##1}}%
-}% of \cs{leftslanting@}.
-
-\pdef\leftslanting{\AtBeginDocument\leftslanting@}
-
-\AtBeginDocument{\let\leftslanting\leftslanting@}
-
-
-% \subdivision{Fake Old-style Numbers}
-%
-% While preparing documentation of this package I~faced an \ae ^^A
-% sthetic problem of lack of old-style numbers in a~font I~fancy. The
-% font is for the sans serif and the digits occur only in the date in
-% title so it would be a~pity not too use a~nice font when only one or
-% two numbers are needed.
-
-\def\romorzero#1{%
- \ifnum#1=0 zero\else\romannumeral#1 \fi}
-
-\DeclareCommand\fakeonum{%
- o % fake bold for the digit »2« (for which emboldening improves
- % look),
- >Pm % the text to fake old-style numbers in.
- % ^^A Note it's an optional
- % ^^A % braced argument so if the next non-space token after
- % ^^A % \incs{fakeonum} is not left brace, the \inverb|#2|-less version
- % ^^A % will be executed. It allows one to use this command as an
- % ^^A % environment.
-}{%\
- % I~tried to use this command as a~declaration but active digits are
- % very uncomfortable, e.g.\ you can't define macros with arguments.
- % \chgs{2008/12/04 v0.98 added}
- \gmu@if@onum{#2}{%
- \begingroup
- \edef\gmu@tempa{#2}%
- \makeatletter%
- \IfValueT{#1}{%
- \prependtomacro\fake@onum@ii{%
- \begingroup\addfontfeature{FakeBold=#1}}%
- \addtomacro\fake@onum@ii\endgroup
- }%
- \endlinechar\m@ne % to suppress the line end added by
- % |\scantokens|, especially in active |^^M|'s scopes.
- \gmu@dofakeonum
- \@xa\scantokens\@xa{\gmu@tempa}%
- \endgroup
- }% of |\gmu@ifonum| ‘else’.
-}% of |\fakeonum|.
-
-\def\gmu@dofakeonum{%
- \def\do##1{%
- \catcode`##1\active
- \scantokens{%
- \@xa\let\@xa##1%
- \csname fake@onum@\@xa\romorzero\string##1\endcsname\empty}}%
- \do0\do1\do2\do3\do4\do5\do6\do7\do8\do9%
-}
-
-\def\do#1#2{%
- \@namedef{fake@onum@\romorzero#1}{#2}}
-
-\def\gmu@tempa#1{%
- \do#1{\leavevmode
- \gmu@calculateslant{#1}% uses \incs{gmu@tempa} and
- % \incs{gmu@tempb}, therefore goes first. And defines \incs{gmu@tempd}.
- \gmu@measurewd{#1}% the width of char |#1| is in \incs{gmu@tempa}
- % without kerning and in \incs{gmu@tempb} with kerning.
- %^^A\typeout{@@@@@@ \gmu@tempa}%
- %^^A {\gmu@tempe
- % ^^A \typeout{@@@@@@ \the\fontcharwd\font`#1}%
- % ^^A }%
- \edef\gmu@tempc{\the\fontcharht\font`#1}%
- \hbox to \gmu@tempb {%
- \hss\resizebox{\gmu@tempa}%
- {\dimexpr\fontdimen5\font+\gmu@tempc-\fontdimen8\font}%
- {\gmu@tempd#1}\hss}}}
-
-\def\gmu@measurewd#1{% \label{@measurewd}
- \edef\gmu@tempa{\the\fontcharwd\font`#1}%
- \settowidth{\@tempdimb}{% to preserve kerning
- \char`#1\char`#1\char`#1\char`#1\char`#1\char`#1%
- \char`#1\char`#1\char`#1\char`#1\char`#1\char`#1%
- \char`#1\char`#1\char`#1\char`#1\char`#1\char`#1%
- \char`#1\char`#1\char`#1}%
- \edef\gmu@tempb{\the\dimexpr(\@tempdimb-\gmu@tempa)/20}%
-}
-
-\gmu@tempa0 % |\fake@onum@zero|
-\gmu@tempa1 % |\fake@onum@i|
-\gmu@tempa2 % |\fake@onum@ii|
-
-\def\gmu@tempa#1{%
- \do#1{\leavevmode
- \gmu@measurewd{#1}%
- \lower
- \dimexpr\fontdimen8\font-\fontdimen5\font\relax
- \hbox to \gmu@tempb {\hss#1\hss}}%
-}
-
-\gmu@tempa3 % |\fake@onum@iii|
-\gmu@tempa4 % |\fake@onum@iv|
-\gmu@tempa5 % |\fake@onum@v|
-\gmu@tempa7 % |\fake@onum@vii|
-\gmu@tempa9 % |\fake@onum@ix|
-
-\def\gmu@tempa#1{% to preserve pseudo-kerning in digits sequences.
- \do#1{\leavevmode
- \gmu@measurewd#1%
- \hbox to \gmu@tempb {\hss#1\hss}}}
-
-\gmu@tempa6 % |\fake@onum@vi|
-\gmu@tempa8 % |\fake@onum@viii|
-
-
-\protected\def\gmu@if@onum{%
- \edef\gmu@tempa{\@xa\meaning\the\font}%
- \@xa\@ifinmeaning\detokenize{+onum}\of\gmu@tempa
-}
-% \nostanza Thus |\gmu@if@onum| becomes a~two-argument command that
-% executes its \hash1 if there is |+onum| in current font
-% specification or its |#2| if |+onum| is absent.
-%
-% One could easily generalise |\gmu@if@onum| to |\@if@fontfeature|,
-% i.e.\ to a~test for an arbitrary font feature, probably with
-% employing that very nice feature specification of \pk{fontspec}, so
-% that you could write
-% |\IfFontFeature{Numbers=OldStyle}{}{fake old-style digits}|.
-
-\pdef\gmu@getslant{% we define |\gmu@tempa| to the (fake) slant of current font.
- \edef\gmu@tempa{\@xa\meaning\the\font\detokenize{slant=0,}}%
- \edef\gmu@tempb{%
- \def\@nx\gmu@tempb####1%
- \detokenize{slant=}%
- ####2,####3}%
- \gmu@tempb\@@nil{##2}%
- \edef\gmu@tempa{\@xa\gmu@tempb\gmu@tempa\@@nil pt}%
- %^^A~\typeout{@@@@ :::\gmu@tempa:::}%
-}
-
-\def\gmu@calculateslant#1{%
- \gmu@getslant
- %^^A~\typeout{@@@@ \the\fontdimen1\font}%
- \edef\gmu@tempa{\the\numexpr\dimexpr\fontdimen1\font + \gmu@tempa}%\
- % \incs{gmu@tempa} bears the number of scaled points of total slant
- % (\inverb|\fontdimen1\font|${}+$\inverb|slant=…| if present) per 1pt
- % of \inhash1.\ilrr
- \edef\gmu@tempa{\the\numexpr \gmu@tempa *
- \numexpr\fontdimen5\font\relax/\numexpr\fontcharht\font`#1
- \relax}%\
- % we scale the total slant of \inverb|#1| by the ratio of original
- % and scaled height of \inverb|#1|.
- \edef\gmu@tempd{%
- \the\dimexpr \gmu@tempa sp - \fontdimen1\font}%\
- % and we subtract slant-fontdimen from the scaled total slant.
- %^^A\typeout{@@@ \gmu@tempd}%
- \ifdim\gmu@tempd=\z@ \emptify\gmu@tempd
- \else\edef\gmu@tempd{%
- \@nx\addfontfeature{FakeSlant=\strip@pt\dimexpr\gmu@tempd}}%
- \fi}
-
-\DeclareCommand\gmu@cepstnof{O{\gmu@tempa}% a~cs to be |\xdef|ed the
- % font specification,
- s% not used really,
- m% |\fontspec| token or name of feature font (\inverb|Italic|, \inverb|Bold|,
- % \inverb|SmallCaps|, \inverb|BoldItalic| ),
- O{, Scale=MatchLowercase}% \pk{fontspec} font features (key=val)
-}
-{% |\gmu@cepstnof|'s body
- \def\gmu@reservedc##1:##2:\@@nil{%
- \ifx:##2:\else RawFeature={\gmu@maybestripcomma##2,,\@@nil} \fi}%
- % \stanza
- \def\gmu@reservedd##1/##2/\@@nil{% to check whether font name
- % contains |/| (which may not be true!)
- \ifx&##2&\@xa\@firstoftwo\else\@xa\@secondoftwo\fi}%
- % \stanza
- \def\gmu@reservede##1:##2:\@@nil{% to check whether the font name
- % contains |:| when it doesn't contain |/|.
- \ifx&##2&\@xa\@firstoftwo\else\@xa\@secondoftwo\fi}%
- % \stanza
- \edef\gmu@reserveda{%
- % now, reserved B parses the font name and features. It uses an
- % auxiliary reserved C because after |/| may be or may not be
- % features specification.
- \@xa\@xa\@xa\gmu@reservedd\@xa\meaning\the\font//\@@nil
- {% font name doesn't contain a~slash
- \@xa\@xa\@xa\gmu@reservede\@xa\meaning\the\font::\@@nil
- {% nor does it contain a~colon
- \def\@nx\gmu@reservedb\detokenize{select font
- "}####1\detokenize{"}####2\@nx\@@nil{%
- \ifx\fontspec#3%
- \@nx\@nx\@nx\fontspec[\@gobble#4\@empty]{####1}% gobble a~comma
- \else
- #3Font={####1}, #3Features={\@gobble #4\@empty}%
- \fi
- }%
- }%
- {% no slash but there is a~colon
- \def\@nx\gmu@reservedb\detokenize{select font
- "}####1:####2\detokenize{"}####3\@nx\@@nil{%
- \ifx\fontspec#3%
- \@nx\@nx\@nx\fontspec[\@nx\gmu@reservedc####2::\@nx\@@nil#4]{####1}%
- \else
- #3Font={####1}, #3Features={\@nx\gmu@reservedc####2::\@nx\@@nil#4}%
- \fi
- }%
- }%
- }% of ‘no slash’ case
- {% font name contains a~slash
- \def\@nx\gmu@reservedb\detokenize{select font
- "}####1/####2\detokenize{"}####3\@nx\@@nil{%
- \ifx\fontspec#3%
- \@nx\@nx\@nx\fontspec[\@nx\gmu@reservedc####2::\@nx\@@nil#4]{####1}%
- \else
- #3Font={####1}, #3Features={\@nx\gmu@reservedc####2::\@nx\@@nil#4}%
- \fi
- }% of |\gmu@reservedb|
- }% of ‘slash present’ case
- }\gmu@reserveda
- % ^^A\typeout{@@@@@ ›\@xa\meaning\the\font‹}%
- \xdef#1{\@xa\@xa\@xa\gmu@reservedb\@xa\meaning\the\font\@@nil}%
- % ^^A~\typeout{@@@@@ ›\meaning#1‹}%
-}%
-
-\def\gmu@maybestripcomma#1,,#2\@@nil{#1}
-
-\pdef\gmu@setbasefont{\@xa\let\@xa\gmu@basefont\the\font}
-
-\let\setbasefont\gmu@setbasefont
-
-\DeclareCommand\gmu@calc@scale{%
- O{1}% a~factor,
- m% number of the fontdimen
- }
-{\begingroup
- % ^^A~\setlength\@tempdima{\fontdimen#1\font}%
- % ^^A~\setlength\@tempdimb{\fontdimen#1\zf@basefont}%
- % ^^A~\setlength\@tempdimc{1pt*\ratio{\@tempdima}{\@tempdimb}}%
- % We ‘descale’ the current font:\nostanza
- \gmu@cepstnof\fontspec[, Scale=1]\gmu@tempa
- \@xa\let\@xa\gmu@currfont@descaled\the\font
- \gmu@basefont
- % ^^A\typeout{@@@@ \meaning\gmu@basefont}%
- \gmu@cepstnof\fontspec[, Scale=1]\gmu@tempa
- % \nostanza now also the base font is descaled.
- \xdef\gmu@fontscale{%
- \strip@pt
- % ^^A\@tempdimc
- \dimexpr 1pt *
- \numexpr\dimexpr#1\fontdimen#2\font\relax\relax /
- \numexpr\fontdimen#2\gmu@currfont@descaled\relax
- \relax}%
- % ^^A \zf@PackageInfo{\zf@fontname\space scale = \zf@scale}%
- \endgroup}
-
-
-%\division{Varia}
-%
-
-% A~very neat macro provided by \pk{doc}. I~copy it
-% \texttilde|verbatim|.
-\def\gmu@tilde{%
- \leavevmode\lower.8ex\hbox{$\,\widetilde{\mbox{ }}\,$}}
-% Originally there was just |\ | instead of |\mbox{ }| but some
-% commands of ours do redefine |\ |.
-%^^A\pdef\*{\gmu@tilde}
-% \changes[\*]{v0.97}{2008/11/29}{ removed (it was a~text tilde,
-% available as \cmd\texttilde)}
-\AtBeginDocument{% to bypass redefinition of |\~| as a~text command
- % with various encodings
- \pdef\texttilde{%
- % \changes{v0.83}{2007/08/22}{postponed to
- % \cs{begin\{document\}} to avoid overwriting by a~text command
- % and
- % made sensible to a~subsequent
- % /} % \changes{v0.86}{2007/12/11}{renamed from \cmd\~
- % since the latter is one of \LaTeX's\ accents}
- \@ifnextchar/{\gmu@tilde\kern-0,1667em\relax}\gmu@tilde}}
-% We prepare the proper kerning for ``\texttilde/''.
-
-% The standard |\obeyspaces| declaration just changes the space's
-% |\catcode| to \catactive\ (`active'). Usually it is fairly enough
-% because no one `normal' redefines the active space. But we are
-% \emph{not} normal and we do \emph{not} do usual things and therefore
-% we want a~declaration that not only will |\active|ate the space but
-% also will (re)define it as the |\ | primitive. So define
-% |\gmobeyspaces| that obeys this requirement.
-%
-% (This definition is repeated in \pk{gmverb}.)
-\foone{\catcode`\ \active}%
-{\def\gmobeyspaces{\let \ \catcode`\ \active}}
-
-% While typesetting poetry, I~was surprised that sth.\ didn't work. The
-% reason was that original |\obeylines| does |\let| not |\def|, so I~give
-% the latter possibility.
-% \Define\defobeylines
-% \changes{v0.62}{06/09/07}{moved from \pk{pmlectionis.cls}}
-\foone{\catcode`\^^M\active}% the comment signs here are crucial.
-{\def\defobeylines{\catcode`\^^M=13 \def^^M{\par}}}
-
-% Another thing I~dislike in \LaTeX\ yet is doing special things for
-% |\…skip|'s, 'cause I~like the Knuthian simplicity. So I~sort of
-% restore Knuthian meanings:
-% \changes{v0.63}{06/9/8}{Plain-like skip macros
-% defined: \cs{dek›(small⁄|med⁄|big›)skip} i.e., moved here from
-% another file}
-
-\def\deksmallskip{\vskip\smallskipamount}
-\def\undeksmallskip{\vskip-\smallskipamount}
-\def\dekmedbigskip{\vskip\glueexpr \medskipamount+\smallskipamount}
-\def\dekmedskip{\vskip\medskipamount}
-\def\dekbigskip{\vskip\bigskipamount}
-
-
-\def\hfillneg{\hskip 0pt plus -1fill\relax}
-% \changes{v0.80}{2007/04/28}{added}
-
-
-% A~mark for the \TODO{}s:
-\newcommand*{\TODO}[1][]{{%
- \sffamily\bfseries\huge TO-DO!\if\relax#1\relax\else\space\fi#1}}
-% \changes{v0.64}{06/9/17}{moved here from \pk{pmlectionis}}
-
-% \skiplines
-% The code contained in this |\skiplines| I~wrote to make the table of
-% contents two-column. The first difficulties led me to making the
-% writes immediate at begin and end document but this also worked bad
-% in a~special situation, namely, when a~contents line was added on
-% the last page of the document. So for now I~give this way up and
-% brutally redefine the internal \LaTeX\ macro.
-%
-% % A~trick for making |\protected@write| immediate. What's a~use of it?
-% % See the next macro.
-% % Define\MakeWriteImmediate
-% % CodeDefIndex\@@write
-% % changes{v0.65}{06/9/26}{added}
-% \newcommand*\MakeWriteImmediate{%
-% \let\@@write\write
-% \def\write{\immediate\@@write}}
-%
-% % First I~used it for closing of \env{multicols} in the \file{.toc}
-% % file. Second time to make \emph{two} tables of contents containing
-% % two different parts of the document
-% % Define\ImmediateAddtoConts
-% % changes{v0.65}{06/9/26}{added}
-% \newcommand\ImmediateAddtoConts[2]{{%
-% \MakeWriteImmediate
-% \addtocontents{#1}{#2}%
-% }}
-% \endskiplines
-
-% I~like two-column tables of contents. First I~tried to provide them by
-% writing |\begin{multicols}{2}| and |\end{multicols}| out to the
-% \file{.toc} file but it worked wrong in some cases. So I~redefine the
-% internal \LaTeX\ macro instead.
-\newcommand*\twocoltoc{%
- \RequirePackage{multicol}%
- \def\@starttoc##1{%
- \begin{multicols}{2}\makeatletter\@input {\jobname .##1}%
- \if@filesw \@xa \newwrite \csname tf@##1\endcsname
- \immediate \openout \csname tf@##1\endcsname \jobname .##1\relax
- \fi
- \@nobreakfalse\end{multicols}}}
-
-\@onlypreamble\twocoltoc
-
-% The macro given below is taken from the \pk{multicol} package (where
-% its name is |\enough@room|). I~put it in this package since I~needed
-% it in two totally different works.
-\DeclareCommand\enoughpage{%
- Q{+-0123456789}% (optional short version (number of |\baselineskip|s))
- B{2\baselineskip}% (2) optional (formerly mandatory) long version of
- % required room on a page
- >is
- B{} % (3) what if the room is enough
- >isB{\newpage} % (4) what if there's to little room on a page
-}{%
- % \chgs{2009/03/18 v0.98 made \eTeX-ish}
- % \chgs{2009/05/25 v0.98 made ifthenelse-like with ‘then’ and ‘else’
- % optional default \<nothing> and \cmd\newpage resp.}
- % \chgs{2009/10/21 v0.98 \cmd\par\ removed since to let it be used
- % for \cmd\pagebreak\ inside a paragraph}
- % ^^A \par
- \if
- \ifdim\dimexpr\pagegoal-\pagetotal<\dimexpr
- \IfValueTF{#1}{#1\baselineskip}{#2}\relax
- 1\else0\fi
- \unless\ifdim\dimexpr\pagegoal-\pagetotal<\z@
- 1\else2\fi
- % \nostanza We check both whether space left on page is larger
- % than we check \emph{and} whether it's nonnegative (the latter
- % happens when we are already on the next page). Therefore this
- % test will not work properly for large values of \inhash1 or
- % values close to \incmd\textwidth.
- % ^^A % \nostanza since 2009/03/18 the test is expandable but
- % ^^A % I~leave this macro \inverb|\protected| because user's will to
- % ^^A % make the test during the (e-)definition of some macro or while
- % ^^A % expanding macros as in inserts seems to me not
- % ^^A % very likely. \nostanza
- \@xa\@firstoftwo
- \else
- \@xa\@secondoftwo
- \fi
- {#4}{#3}%
-}
-
-%^^A % Two shorthands for debugging:
-%^^A %\Define\tOnLine\Define\OnAtLine
-%^^A \newcommand*\tOnLine{\typeout{\on@line}}
-%^^A
-%^^A \let\OnAtLine\on@line
-
-% An equality sign properly spaced:
-\pdef\equals{\hunskip${}={}$\ignorespaces}
-% And for the \LaTeX's pseudo-code statements:
-\pdef\eequals{\hunskip${}=={}$\ignorespaces}
-
-\pdef\·{\hunskip${}·{}$\ignorespaces}
-
-
-% While typesetting a~\acro{UTF-8} ls-R result I~found a~difficulty that
-% follows: \acro{UTF-8} encoding is handled by the \pk{inputenc}
-% package. It's O.K. so far. The \acro{UTF-8} sequences are managed using
-% active chars. That's O.K. so far. While writing such sequences to
-% a~file, the active chars expand. You feel the blues? When the result of
-% expansion is read again, it sometimes is again an active char, but
-% now it doesn't star a~correct \acro{UTF-8} sequence.
-%
-% Because of that I~wanted to `freeze' the active chars so that they
-% would be |\write|n to a~file unexpanded. A~very brutal operation is
-% done: we look at all 256 chars' catcodes and if we find an active
-% one, we |\let| it |\relax|. As the macro does lots and lots of
-% assignments, it shouldn't be used in |\edef|s.
-%
-% \Define\freeze@actives
-% \changes{v0.76}{2007/02/07}{added}
-
-\def\freeze@actives{%
- \count\z@\z@
- %
- \@whilenum\count\z@<\@cclvi\do{%
- \ifnum\catcode\count\z@=\active
- \uccode`\~=\count\z@
- \uppercase{\let~\relax}%
- \fi
- \advance\count\z@\@ne}}
-
-
-% A~macro that typesets all 256 chars of given font. It makes use of
-% |\@whilenum|. \Define\ShowFont
-
-\newcommand*\ShowFont[1][6]{%
- \begin{multicols}{#1}[The current font (the \f@encoding\ encoding):]
- \parindent\z@
- \count\z@\m@ne
- \@whilenum\count\z@<\@cclv\do{
- \advance\count\z@\@ne
- \ \the\count\z@:~\char\count\z@\par}
- \end{multicols}}
-
-
-% A~couple of macros for typesetting liturgic texts such as psalmody
-% of Liturgia Horarum. I~wrap them into a~declaration since they'll be
-% needed not every time.
-% \Define\liturgiques
-% \changes{v0.76}{07/3/30}{added, or rather moved from \file{Akatyst.tex}}
-\newcommand*\liturgiques[1][red]{% Requires the \pk{color} package.
- \gmu@RPfor{xcolor}\color%
- \newcommand*\czerwo{\small\color{#1}}% environment
- \newcommand{\czer}[1]{\leavevmode{\czerwo##1}}% we leave
- % vmode because if we don't, then \env{verse}'s |\everypar| would be
- % executed in a~group and thus its effect lost.
- \StoreMacro\*%
- \def\*{\czer{\storedcsname{*}}}%
- \def\+{\czer{†}}%
- \newcommand*\nieczer[1]{\textcolor{black}{##1}}%
-}
-
-% After the next definition you can write
-% \cs{gmu@RP}\arg[options]{package}{\CS} to get the package |#2|
-% loaded with options |#1| if the \CS |#3| is undefined.
-\newcommand*\gmu@RPfor[3][]{% \changes{v0.93}{2008/08/30}{renamed from
- % \cs{gmu@RPif} and \#3 changed from a~csname to \CS}
- \ifx\relax#1\relax\emptify\gmu@resa
- \else \def\gmu@resa{[#1]}%
- \fi
- \@xa\RequirePackage\gmu@resa{#2}}
-
-% Since inside \env{document} we cannot load a~package, we'll redefine
-% |\gmu@RPfor| to issue a~request before the error issued by undefined
-% \CS.
-%^^A \Define\gmu@RPfor
-\AtBeginDocument{%
- \renewcommand*\gmu@RPfor[3][]{%
- \unless\ifdefined#3%
- \@ifpackageloaded{#2}{}{%
- \typeout{^^J! Package `#2' not loaded!!! (\on@line)^^J}}%
- \fi}}
-
-
-% It's very strange to me but it seems that $\continuum$ is not
-% defined in the basic math packages. It is missing at least in the
-% \textit{Symbols} book.
-\pprovide\continuum{%
- \gmu@RPfor{eufrak}\mathfrak\ensuremath{\mathfrak{c}}}
-
-% And this macro I~saw in the \pk{ltugproc} document class and I~liked
-% it.
-\def\iteracro{%
- \pdef\acro##1{%
- \begingroup
- \acropresetting
- \gmu@acrospaces##1 \gmu@acrospaces
- \endgroup
- }%
-}
-
-\emptify\acropresetting
-
-\iteracro
-
-\def\gmu@acrospaces#1 #2\gmu@acrospaces{%
- \gmu@acroinner#1\gmu@acroinner
- \ifx\relax#2\relax\else
- \space
- \afterfi{\gmu@acrospaces#2\gmu@acrospaces}% when |#2| is nonempty,
- % it is ended with a~space. Adding one
- % more space in this line resulted in
- % an infinite loop, of course.
- \fi}
-
-
-\def\gmu@acroinner#1{%
- \ifx\gmu@acroinner#1\relax\else
- \ifcat a\@nx#1\relax%
- \ifnum`#1=\uccode`#1%
- {\acrocore{#1}}%
- \else{#1}% tu było |\smallerr|
- \fi
- \else#1%
- \fi
- \afterfi\gmu@acroinner
- \fi}
-
-% We extract the very thing done to the letters to a~macro because we
-% need to redefine it in fonts that don't have small caps.
-\pdef\acrocore{\smaller % was: |\scshape\lowercase|
-}
-
-% Since the fonts I~am currently using do not support required font
-% feature, I~skip the following definition.
-
-\def\IMHO{\acro{IMHO}}
-\def\AKA{\acro{AKA}}
-
-\pdef\usc#1{{\addfontfeature{Letters=UppercaseSmallCaps}#1}}
-
-\def\uscacro{\let\acro\usc}
-
-%^^A \newcommand*\qxenc{\fontencoding{QX}\selectfont}
-%^^A % The |\copyright| command is unavailable in T1 and U~(unknown)
-%^^A % encodings so provide
-%^^A \newcommand*\qxcopyright{{\qxenc\copyright}}
-%^^A \newcommand*\qxcopyrights{%
-%^^A \let\gmu@copyright\copyright
-%^^A \def\copyright{{\qxenc\gmu@copyright}}}
-%^^A
-%^^A \newcommand*\fixcopyright{%
-%^^A \@ifXeTeX{\def\copyright{\char"00A9 }}{\qxcopyrights}}
-
-
-% Probably the only use of it is loading \pk{gmdocc.cls} `as second
-% class'. This command takes first argument optional, options of the
-% class, and second mandatory, the class name. I~use it in an article
-% about \pk{gmdoc}.
-\def\secondclass{%
- \newif\ifSecondClass
- \SecondClasstrue
- \@fileswithoptions\@clsextension}%|[outeroff,gmeometric]{gmdocc}|%
-% it's loading \pk{gmdocc.cls} with all the bells and whistles except
-% the error message.
-
-
-% Cf.\ \TeXbook\ ex.\ 11.6.\par
-% A~line from \LaTeX:
-% \[|% \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont|\]
-% didn't work as I~would wish: in a~|\footnotesize|'s scope it still
-% was |\scriptsize|, so too large.
-% \changes{v0.81}{2007/05/13}{moved here from \pk{pmlectionis.cls}}
-
-\def\gmu@dekfraccsimple#1/#2{\leavevmode\kern.1em
- \raise.7ex\hbox{%^^A \udigits
- \gmu@fracfontsetup#1}\gmu@numeratorkern
- \dekfraccslash\gmu@denominatorkern
- %^^A\lower.25ex\hbox
- {%^^A\udigits
- \gmu@fracfontsetup#2}%
- \if@gmu@mmhbox\egroup\fi}
-
-\def\gmu@fracfontsetup{%
- \smaller[3]\addfontfeature{FakeBold=1}}
-
-
-\def\dekfraccsimple{% \label{2292}
- \let\dekfracc@args\gmu@dekfraccsimple
-}
-\@ifXeTeX{\def\dekfraccslash{\char"2044 }}
-{\def\dekfraccslash{/}} % You can define it as the fraction slash,
-% %%%%% \nlpercent|\char"2044 |\ilrr
-\dekfraccsimple
-
-% \changes{v0.81}{2007/05/13}{moved here from \pk{pmlectionis.cls}}
-
-
-% A~macro that acts like |\,| (thin and unbreakable space) except it
-% allows hyphenation afterwards:
-
-\newcommand*\ikern{\,\penalty\@M\hskip\z@skip\relax}
-%\changes{v0.82}{2007/07/17}{added}
-
-% And a~macro to forbid hyphenation of the next word:
-\pdef\nohy{\leavevmode\kern0sp\relax}
-\pdef\yeshy{\leavevmode\penalty\@M\hskip\z@skip}
-% In both of the above definitions `0sp' not |\z@| to allow their
-% writing to and reading from files where @ is `other'.
-
-
-
-
-% \subdivision{\cs{include} not only \file{.tex}'s}
-% |\include| modified by me below lets you to include files of any
-% extension provided that extension in the argument.
-%
-% If you want to |\include| a~non-\file{.tex} file and deal with it
-% with |\includeonly|, give the latter command full file name, with
-% the extension that is.
-%
-\def\gmu@getext#1.#2\@@nil{%\UnDef
- \def\gmu@filename{#1}%\UnDef
- \def\gmu@fileext{#2}}
-
-\def\include#1{\relax
- \ifnum\@auxout=\@partaux
- \@latex@error{\string\include\space cannot be nested}\@eha
- \else \@include#1 \fi}
-
-\def\@include#1 {%
- \gmu@getext#1.\@@nil
- % \UnDef
- \ifx\gmu@fileext\empty\def\gmu@fileext{tex}\fi
- \clearpage
- \if@filesw
- \immediate\write\@mainaux{\string\@input{\gmu@filename.aux}}%
- \fi
- \@tempswatrue
- \if@partsw
- \@tempswafalse
- \edef\reserved@b{#1}%
- \@for\reserved@a:=\@partlist\do{%
- \ifx\reserved@a\reserved@b\@tempswatrue\fi}%
- \fi
- \if@tempswa
- \let\@auxout\@partaux
- \if@filesw
- \immediate\openout\@partaux \gmu@filename.aux
- \immediate\write\@partaux{\relax}%
- \fi
- \@input@{\gmu@filename.\gmu@fileext}%
- \inclasthook
- \clearpage
- \@writeckpt{\gmu@filename}%
- \if@filesw
- \immediate\closeout\@partaux
- \fi
- \else
-% If the file is not included, reset |\@include| |\deadcycles|, so that a
-% long list of non-included files
-% does not generate an `Output loop' error.
- \deadcycles\z@
- \@nameuse{cp@\gmu@filename}%
- \fi
- \let\@auxout\@mainaux}
-
-
-\newcommand\whenonly[3]{%
- \def\gmu@whonly{#1,}%
- \ifx\gmu@whonly\@partlist\afterfi{#2}\else\afterfi{#3}\fi}
-
-% I~assume one usually includes chapters or so so the last page style
-% should be closing.
-\def\inclasthook{\thispagestyle{closing}}
-
-% \subdivision{Switching on and off parts of one file}
-%
-% The |\include| facility is very nice only it forces you to split
-% your source in many files. Therefore I~provide a~tool analogous to
-% |\include| and using the same |\includeonly| mechanism/list to
-% switch on and off parts of the same source file.
-%
-\def\filepart#1{\relax
- \ifnum\@auxout=\@partaux
- \@latex@error{\string\filepart\space cannot be nested}\@eha
- \else\afterfi{\@filepart#1 }\fi}
-
-\def\@filepart#1 {%
- \clearpage
- \edef\gmu@filepartname{#1}% we'll use it later
- \if@filesw
- \immediate\write\@mainaux{\string\@input{#1.aux}}%
- \fi
- \@tempswatrue
- \if@partsw
- \@tempswafalse
- \@for\reserved@a:=\@partlist\do{%
- \ifx\reserved@a\gmu@filepartname\@tempswatrue\fi}%
- \fi
- \if@tempswa
- \let\@auxout\@partaux
- \if@filesw
- \immediate\openout\@partaux #1.aux
- \immediate\write\@partaux{\relax}%
- \fi
- \@xa\@firstoftwo
- % \label{spart:iftrue}
- \else
-% If the file is not included, reset |\@include| |\deadcycles|, so that a
-% long list of non-included files
-% does not generate an `Output loop' error.
- \deadcycles\z@
- \@nameuse{cp@\gmu@filepartname}%
- \let\@auxout\@mainaux
- \@xa\@secondoftwo
- \fi
- {\iftrue}%
- {\let\endfilepart\fi
- \csname gm@skipped@#1\endcsname
- \def\next{\RestoreMacro\endfilepart
- \@ifnextchar\bgroup{\show\NextBgroup\@gobble}{}}%
- \@xa\next\iffalse}%
-}
-
-
-\DeclareCommand\endfilepart{b}{% Note the argument is not used really. Maybe later we'll
- % use it for checking of proper matching. Or maybe not.
- \inclasthook
- \clearpage
- \@writeckpt{\gmu@filepartname}%
- \if@filesw
- \immediate\closeout\@partaux
- \fi
- \fi% this |\fi| closes |\Iftrue| put by line \ref{spart:iftrue}.
- \let\@auxout\@mainaux
-}
-
-\StoreMacro\endfilepart
-
-\def\nofileparts{%
- \let\filepart\@gobble
- \DeclareCommand\endfilepart{b}{}%
-}
-
-% \subdivision{Fix of including when \pk{fontspec} is used}
-% The \pk{fontspec} package creates counters for font families. If
-% a~\pk{fontspec} command is used in a~part of a~document and then
-% such a~part is skipped, an error occurs ‘No counter zf@fam@…
-% defined’. Now we fix that by ensuring all the counters are defined
-% before they are set.
-%
-% Note it's a~draft version which doesn't support resetting of one counter
-% within another.
-
-\def\includecountfix{%
- \def\@wckptelt##1{%
- \immediate\write\@partaux{%
- \providecounter{##1}% to
- % provide the font counters defined
- % in parts of the document.
- \string\setcounter{##1}{\the\@nameuse{c@##1}}}}%
-}
-
-\pdef\providecounter#1{%
- \unless\ifcsname c@#1\endcsname\newcounter{#1}\fi}
-
-
-% \subdivision{Faked small caps}
-
-\def\gmu@scapLetters#1{%
- \ifx#1\relax\relax\else% two |\relax|es to cover the case of empty |#1|.
- \ifcat a\@nx#1\relax
- \ifnum\the\lccode`#1=`#1\relax
- {\fakescapscore\MakeUppercase{#1}}% not Plain |\uppercase|
- % because that works bad with \pk{inputenc}.
- \else#1%
- \fi
- \else#1%
- \fi%
- \@xa\gmu@scapLetters
- \fi}%
-%
-\def\gmu@scapSpaces#1 #2\@@nil{%
- \ifx#1\relax\relax
- \else\gmu@scapLetters#1\relax
- \fi
- \ifx#2\relax\relax
- \else\afterfi{\ \gmu@scapSpaces#2\@@nil}%
- \fi}
-%
-\def\gmu@scapss#1\@@nil{{\def~{{\nobreakspace}}%
- \gmu@scapSpaces#1 \@@nil}}%|% \def\\{{\newline}}\relax|
-% adding redefinition of |\\| caused stack overflow. Note it
-% disallows hyphenation except at |\-|.
-
-\pdef\fakescaps#1{{\gmu@scapss#1\@@nil}}
-
-\let\fakescapscore\gmu@scalematchX
-
-% Experimente z~akcentami patrz no3.tex.
-\def\tinycae{{\tiny\AE}}% to use in |\fakescaps[\tiny]{…}|
-
-\RequirePackage{calc}
-
-% wg |\zf@calc@scale| pakietu \pk{fontspec}.
-
-\@ifpackageloaded{fontspec}{%
- \def\gmu@scalar{1.0}%
- \def\zf@scale{}%
- \def\gmu@scalematchX{%
- \begingroup
- \ifx\zf@scale\empty\def\gmu@scalar{1.0}%
- \else\let\gmu@scalar\zf@scale\fi
- \setlength\@tempdima{\fontdimen5\font}% 5---ex height
- \setlength\@tempdimb{\fontdimen8\font}% 8---\XeTeX\ synthesised
- % uppercase height.
- \divide\@tempdimb by1000\relax
- \divide\@tempdima by\@tempdimb
- \setlength{\@tempdima}{\@tempdima*\real{\gmu@scalar}}%
- \gm@ifundefined{fakesc@extrascale}{}{%
- \setlength{\@tempdima}{\@tempdima*\real{\fakesc@extrascale}}}%
- \@tempcnta=\@tempdima
- \divide\@tempcnta by 1000\relax
- \@tempcntb=-1000\relax
- \multiply\@tempcntb by\@tempcnta
- \advance\@tempcntb by\@tempdima
- \xdef\gmu@scscale{\the\@tempcnta.%
- \ifnum\@tempcntb<100 0\fi
- \ifnum\@tempcntb<10 0\fi
- \the\@tempcntb}%^^A{\strip@pt\@tempdimc}%
-%^^A \typeout{**** \gmu@scscale}%
- \endgroup
- \addfontfeature{Scale=\gmu@scscale}%
- }}{\let\gmu@scalematchX\smallerr}
-
-\def\fakescextrascale#1{\def\fakesc@extrascale{#1}}
-
-
-% \subdivision{See above/see below}
-% To generate a~phrase as in the header depending of whether the
-% respective label is before of after.
-\newcommand*\wyzejnizej[1]{%
- \edef\gmu@tempa{\gm@ifundefined{r@#1}{\arabic{page}}{%
- \@xa\@xa\@xa\@secondoftwo\csname r@#1\endcsname}}%
- \ifnum\gmu@tempa<\arabic{page}\relax wy\.zej\fi
- \ifnum\gmu@tempa>\arabic{page}\relax ni\.zej\fi
- \ifnum\gmu@tempa=\arabic{page}\relax \@xa\ignorespaces\fi
-}
-
-%\subdivision{\env{luzniej} and \env{napapierki}---environments used\
-% in page breaking for money}
-%
-% \QueerEOL
-% The name of first of them comes from Polish typesetters' phrase
-% ``rozbija\cacute\ [sk\l ad] na papierki''---`to broaden [leading] with
-% paper scratches'.
-
-\def\napapierkistretch{0,3pt}% It's quite much for 11/13pt leading.
-
-\def\napapierkicore{\advance\baselineskip%
- by 0ptplus\napapierkistretch\relax}
-
-
-% ^^A % \catcode`\^^D\active \def^^D{\traceon}
-% ^^A % \catcode`\^^E\active \def^^E{\traceoff\gmshowlists}
-% ^^A \catcode`\^^D=9
-% ^^A \catcode`\^^E=9
-\DeclareEnvironment{napapierki}{s}{%
- % \chgs{2009/01/05 v0.98 added optional star controlling globalness}
- \par\IfValueT{#1}{\global
- }%
- \napapierkicore}
-{%
- \par
- \IfValueT{#1}{\global\baselineskip=1\baselineskip\relax
- }%
-}% so that you can use \inverb|\napapierki*›…\endnapapierki*|
-% in interlacing environments.
-
-
-
-\newcount\gmu@luzniej
-
-\newcommand*\luzniejcore[1][1]{%
- \advance\gmu@luzniej\@ne% We use this count to check whether we open
- % the environment or just set |\looseness| inside it again.
- \ifnum\gmu@luzniej=\@ne \multiply\tolerance by 2 \fi
- \looseness=#1\relax}
-
-% After |\begin{luzniej}| we may put the optional argument of
-% |\luzniejcore|
-\newenvironment*{luzniej}{\par\luzniejcore}{\par}
-
-
-% The starred version sets |\looseness| in |\everypar|, which has its advantages
-% and disadvantages.\nostanza
-\newenvironment*{luzniej*}[1][1]{%
- \multiply\tolerance by 2\relax
- \everypar{\looseness=#1\relax}}{\par}
-
-\newcommand*\nawj{\kern0,1em\relax}% a~kern to be put between
-% parentheses and letters with descendants such as $j$ or $y$ in
-% certain fonts.
-%
-% The original |\pauza| of \pk{polski} has the skips rigid (one is
-% even a~kern). We make the skips flexible. Moreover, our |\pauza|
-% begins with |\ifhmode| to be usable also at the beginning of a~line
-% where it marks a~part of a~dialogue.
-
-\def\pauza@skipcore{\hskip0.2em plus0.1em\relax
- \pauzacore
- \@ifnextchar,{% 2009/11/22 added a special case of a comma following pauza
- }{\hskip.2em plus0.1em\relax\ignorespaces}}%
-%
-\def\ppauza@skipcore{\unskip\penalty10000\hskip0.2em plus0.1em\relax
- \ppauza@dash\hskip.2em plus0.1em\ignorespaces}
-%
-
-\AtBeginDocument{%
- \pdef\pauza{%
- \ifhmode
- \unskip\penalty10000
- \hskip0.2em plus0.1em\relax
- \pauzacore\hskip.2em plus0.1em\relax\ignorespaces%
- \else
- \pauzadial
- \fi}%
- %
- % According to \tytul{Instrukcja technologiczna.\ Skład ręczny ^^B
- % i~maszynowy} the dialogue dash (in Polish) should be followed by
- % a~rigid hskip of \dekfracc1/2\,em.
- \pdef\pauzadial{%
- \leavevmode\pauzacore\penalty10000\hskip0,5em\ignorespaces}
- %
- % And a~version with no space at the left, to begin a~|\noindent|ed
- % paragraph explaining e.g.\ a~quotation:
- \pdef\lpauza{%
- \leavevmode
- \pauzacore\hskip.2em plus0.1em\ignorespaces}%
- %
- % We define |\ppauza| as an en dash surrounded with thin stretchable
- % spaces and sticking to the upper line or bare but discretionary
- % depending on the next token being space${}_10$. Of course you'll
- % never get such a~space after a~literal \CS so an explicit |\ppauza|
- % will always result with a~bare discretionary en dash, but if we
- % |\let–\ppauza|…
- % \stanza
- \pdef\ppauza{%
- \ifvmode \PackageError{gmutils}{%
- command \bslash ppauza (en dash) not intended for vmode.}{%
- Use \bslash ppauza (en dash) only in number and numeral ranges.}%
- \else
- \unskip\discretionary
- {\ppauza@dash}{\ppauza@dash}{\ppauza@dash}%
- \fi}%
-}% of at begin document
-
-\ifdefined\XeTeXversion
-%
-\AtBeginDocument{% to be independent of moment of loading of \pk{polski}.
- \pdef\—{%
- \ifhmode
- \unskip\penalty10000
- \afterfi{%
- \@ifnextspace{\pauza@skipcore}%
- {\@ifnextchar,{\pauza@skipcore}% a special case of comma added 2009/11/22
- {\@ifnextMac{\pauza@skipcore}%
- {\pauzacore\penalty\hyphenpenalty\hskip\z@skip}}}%
- }% of |\afterfi|'s argument
- \else
- % \nostanza According to \tytul{Instrukcja technologiczna.\ Skład ręczny ^^B
- % i~maszynowy} the dialogue dash should be followed by a~rigid
- % hskip of \dekfracc1/2\,em.\nostanza
- \leavevmode\pauzacore\penalty10000\hskip0,5em\ignorespaces
- \fi}%
- % The next command's name consists of letters and therefore it eats
- % any spaces following it, so |\@ifnextspace| would always be
- % false, therefore we don't use it.\nostanza
- \pdef\–{%
- \ifvmode \PackageError{gmutils}{%
- command \bslash ppauza (en dash) not intended for vmode.}{%
- Use \bslash ppauza (en dash) only in number and numeral ranges.}%
- \else
- \afterfi{%
- \@ifnextspace{\ppauza@skipcore}{%
- \@ifnextMac\ppauza@skipcore
- {\unskip\discretionary
- {\ppauza@dash}{\ppauza@dash}{\ppauza@dash}}}%
- }%
- \fi
- }%
- %
- \def\emdash{\char`\—}
-}% of at begin document
-
-\def\longpauza{\def\pauzacore{—}}
-\longpauza
-\def\shortpauza{%
- \def\pauzacore{\hbox{–\kern,23em\relax\llap{–}}}}%
-\def\ppauza@dash{–}%
-
-
-\else % not \XeTeX
-\def\longpauza{\def\pauzacore{---}}
-\longpauza
-\def\shortpauza{%
- \def\pauzacore{--\kern,23em\relax\llap{--}}}%
-\def\ppauza@dash{--}%
-
-
-\fi% of if \XeTeX.
-
-
-
-% If you have all the three dashes on your keyboard (as I~do), you may want to use
-% them for short instead of |\pauza|, |\ppauza| and |\dywiz|. The
-% shortest dash is defined to be smart in math mode and result with
-% $-$.
-\ifdefined\XeTeXversion
-\foone{\catcode`—\active \catcode`–\active \catcode`-\active}{%\label{not@ifundef}
- \def\adashes{\AtBeginDocument\adashes}% because |\pauza|
- % is defined at begin document.
- \AtBeginDocument{\def\adashes{%
- \catcode`—\active \def—{\—}%
- \catcode`–\active \def–{\–}%
- % ^^A \catcode`-\active \let-\gmu@dywiz
- \addtomacro\dospecials{\do\–\do\—}%
- \addtomacro\@sanitize{\@makeother\–\@makeother\—}%
- \addtomacro\gmu@septify{\do\–13\do\—13\relax}%
-}}}
-\else
-\relaxen\adashes
-\fi
-
-
-% The hyphen shouldn't be active \IMHO\ because it's used in \TeX\
-% control such as |\hskip-2pt|. Therefore we provide the |\ahyphen|
-% declaration reluctantly, because sometimes we need it and always use
-% it with caution. Note that my active hyphen in vertical and math
-% modes expands to |-|\catother.
-
-\def\gmu@dywiz{\ifmmode-\else
- \ifvmode-\else\afterfifi\dywiz\fi\fi}%
-
-\foone{\catcode`-\active}{% aktivnyj diefis aktywny dywiz active hyphen
- \def\ahyphen{\let-\gmu@dywiz\catcode`\-\active}}
-
-
-% To get current time. Works in \eTeX s, including \XeTeX. |\czas|
-% typesets \czas\ and |\czas[:]| typesets \czas[:].
-\newcommand*\czas[1][.]{%
- \the\numexpr(\time-30)/60\relax#1%
- \@tempcnta=\numexpr\time-(\time-30)/60*60\relax
- \ifnum\@tempcnta<10 0\fi\the\@tempcnta}
-
-
-\@ifXeTeX{%
- \pdef\textbullet{% \changes{v0.94}{2008/10/3}{the \XeTeX\
- % version enriched with \cs{iffontchar} due to lack of bullets
- % with the default settings reported by Morten H\o{}gholm and Edd Barrett}
- \iffontchar\font"2022 \char"2022 \else\ensuremath{\bullet}\fi}%
- %
- \pprovide\glyphname#1{% \changes{v0.96}{2008/11/12}{moved here from
- % my private document class}
- \XeTeXglyph \numexpr\XeTeXglyphindex "#1"\relax\relax}% since
- % \XeTeX\ … \incs{numexpr} is redundant.
-}
-{\def\textbullet{\ensuremath{\bullet}}}
-
-\newenvironment*{tytulowa}{\newpage}{\par\thispagestyle{empty}\newpage}
-
-% To typeset peoples' names on page 4 (the editorial page):
-\def\nazwired{\quad\textsc}
-
-
-
-
-% \subdivision{Typesetting dates in my memoirs}
-
-% A~date in the |YYYY-MM-DD| format we'll transform into
-% `\acro{DD mmmm YYYY}'
-% format or we'll just typeset next two tokens/|{…}| if the
-% arguments' string begins with |--|. The latter option is provided to
-% preserve compatibility with already used macros and to avoid
-% a~starred version of |\thedate| and the same time to be able to turn
-% |\datef| off in some cases (for \file{SevSev04.tex}).
-\pdef\polskadata{%
- \DeclareCommand\gmu@datefsl{%
- Q{0123456789\bgroup}>iT{/-} % (1) year
- Q{0123456789\bgroup}>iT{/-} % (2) month
- Q{0123456789\bgroup} % (3) day
- T{,} K{##1\gmu@datefsl} % (4, 5) additional stuff after comma
- }{%
- \IfValueF{##2}{\PutIfValue{##3}}%
- \IfValueT{##2}{%
- \@tempcnta=0##3\relax\the\@tempcnta
- \ifcase##2\relax\or\ stycznia\or\ lutego%
- \or\ marca\or\ kwietnia\or\ maja\or\ czerwca\or\ lipca\or\ sierpnia%
- \or\ września\or\ października\or\ listopada\or\ grudnia\else
- {}%
- \fi}%
- \IfValueT{##1}{\space ##1}%
- \PutIfValue{##4}\IfValueT{##5}{ ##5}%
- }% of \incs{gmu@datefsl}.
- }% of |\polskadata|
-
-\polskadata
-
-% For documentation in English:
-\pdef\englishdate{%
- \DeclareCommand\gmu@datefsl{%
- Q{0123456789\bgroup}>iT{/-} % (1) year
- Q{0123456789\bgroup}>iT{/-} % (2) month
- Q{0123456789\bgroup} % (3) day
- T{,} K{##1\gmu@datefsl} % (4, 5) additional stuff after comma
- }{%
- \IfValueF{##2}{\PutIfValue{##3}}%
- \IfValueT{##2}{%
- \ifcase##2\relax\or January\or February%
- \or March\or April\or May\or June\or July\or August%
- \or September\or October\or November\or December\else
- {}%
- \fi}%
- \space
- \@tempcnta=##3\relax\the\@tempcnta,
- \IfValueT{##1}{ ##1}%
- \PutIfValue{##4}\IfValueT{##5}{ ##5}%
- }% of \incs{gmu@datefsl}.
-}%
-
-
-
-% Dates for memoirs to be able to typeset them also as diaries.
-\newif\ifdate
-% ^^A|%\newcounter{dateinsection}[section]|
-\pdef\bidate#1{%
- \gmu@datefsl#1\gmu@datefsl
-}
-
-\pdef\linedate{\gm@ifstar\linedate@@\linedate@}
-\pdef\linedate@@#1{\linedate@{--{}{}#1}}
-\pdef\linedate@#1{\par
- \linedate@hook{#1}%
- \ifdate\addvspace{\dateskipamount}%
- \possvfil% if we put it before |\addvspace|, the v-space is always added.
- \date@line{\footnotesize\itshape \bidate{#1}}%
- \nopagebreak
- \else%|%\ifnum\arabic{dateinsection}>0\dekbigskip\fi|
- \addvspace{\bigskipamount}\possvfil
- \fi}% end of |\linedate|.
-
-\let\linedate@hook\@gobble
-
-\let\dateskipamount\medskipamount
-
-\pdef\rdate{\let\date@line\rightline \linedate}
-
-
-\def\date@left#1{\par{%
- \raggedright#1%
- \leftskip\z@skip
- % ^^A \hangindent\z@skip
- % ^^A \hangafter\z@
- % ^^A \parshape\z@
- % ^^A~wycinam, bo gryzło się z~floatingfigure.
- \@@par}}%
-
-\pdef\ldate{%\changes{v0.94}{2008/09/06}{\cs{leftline}
- % replaced with \cs{par}…\cs{par} to work well with \pk{floatflt}}
- \let\date@line\date@left
- \linedate}
-
-\newcommand*\runindate[1]{%
- \paragraph{\footnotesize\itshape \gmu@datef#1\gmu@datef}%
- \stepcounter{dateinsection}}
-% I'm not quite positive which side I~want the date to be put to so
-% let's |let| for now and we'll be able to change it in the very documents.
-\let\thedate\ldate
-
-
-\pdef\zwrobcy#1{\emph{#1}} %ostinato, allegro con moto,
- %garden party etc., także kompliment
-
-\pdef\tytul#1{\emph{#1}}
-
-
-% Maszynopis w~świecie justowanym zrobi delikatną
-% chorągiewkę. (The \env{maszynopis} environment will make a~delicate
-% ragged right if called in a~justified world.)
-\newenvironment{maszynopis}[1][]{#1\ttfamily
- \hyphenchar\font=45\relax% this assignment is global for the font.
- \@tempskipa=\glueexpr\rightskip+\leftskip\relax
- \ifdim\gluestretch\@tempskipa=\z@
- \tolerance900
- % \nostanza it worked well with tolerance \equals 900.\nostanza
- \advance\rightskip by\z@ plus0,5em\relax\fi
- \fontdimen3\font=\z@% we forbid stretching spaces…\par\nostanza\gmdnoindent
- %|% \fontdimen4\font=\z@| but allow shrinking them.\nostanza
- \hyphenpenalty0 % not to make \TeX\ nervous: in a~typewriting this
- % marvellous algorithm of hyphenation should be turned off and every
- % line broken at the last allowable point.
- \StoreMacro\pauzacore
- \def\pauzacore{-\rlap{\kern-0,3em-}-}%
-}{\par}
-
-
-
-\pdef\justified{%
- \leftskip=1\leftskip% to preserve the natural length and discard
- % stretch and shrink.
- \rightskip=1\rightskip
- \parfillskip=1\parfillskip
- \advance\parfillskip by 0sp plus 1fil\relax
- % ^^A~\lastlinefit=700
- \let\\\@normalcr}
-
-% To conform Polish recommendation for typesetting saying that
-% a~paragraph's last line leaving less than |\parindent| should be
-% stretched to fill the text width:\nostanza
-\DeclareCommand\fullpar{%
- T{+-}%
- Q{+-0123456789} % optional looseness (most probably negative)
-}{%
- \begingroup
- \IfValueT{#1}{\looseness=#1\IfValueTF{#2}{#2}{1}\relax
- \multiply\tolerance by \tw@
- }%
- \fullparcore
- \par
- \endgroup}
-
-\pdef\fullparcore{%
- \hunskip
- \parfillskip\z@skip}
-
-
-% To conform Polish recommendation for typesetting that says that the
-% last line of a~paragraph has to be 2|\parindent| long at least. The
-% idea is to set \cs{parfillskip} naturally rigid and long as
-% |\textwidth-2\parindent|, but that causes non-negligible shrinking
-% of the
-% inter-word spaces so we provide a~declaration to catch the proper
-% glue where the parindent is set (e.g.\ in footnotes parindent is 0\,pt)
-\newcommand*\twoparinit{% the name stands for `\emph{last} paragraph
- % line's length \emph{min}imum \emph{two} \incs{parindent}.
- \def\twopar@defts{%
- \hsize-\leftskip-\rightskip-\fontcharwd\font`…}%
- \def\twopar@atleast{2\@parindent}%
- \DeclareCommand\twopar{%
- T{+-}% (1) you can specify loosening the paragraph by one only by
- % typing single |+| and tightening by one by typing single |-|.
- Q{+-0123456789}% (2)
- A{\twopar@atleast}% (3)
- >iT{\cipolagwa}}{%
- \begingroup
- \IfValueT{##1}{%
- \looseness=##1\IfValueTF{##2}{##2}{1}\relax
- \multiply\tolerance by2
- }%
- \twoparcore<##3>%
- \par
- \endgroup
- }% of \incmd\twopar.
- % \stanza
- \ifdefined\XeTeXversion
- \DeclareCommand\twoparcore{%
- A{\twopar@atleast}>iT{\cipolągwa}}{%
- \hunskip % it's \ac{O.K.} it's in a~group, it'll work anyway.
- \edef\gmu@tempa{\the\dimexpr\twopar@defts-##1\relax}%
- \parfillskip=\glueexpr\gmu@tempa minus \gmu@tempa
- \relax% to delimit |\glueexpr|.
- \relax% to delimit the assignment.
- }%
- \else % not \XeTeX---doesn't use |\fontcharwd|.
- \DeclareCommand\twoparcore{%
- A{\twopar@default}>iT{\cipolagwa}}{%
- \hunskip % it's \ac{O.K.} it's in a~group, it'll work anyway.
- {\setbox0=\hbox{\dots}%
- \xdef\gmu@tempa{\the\wd0}}%
- \edef\gmu@tempa{%
- \the\dimexpr\hsize-\leftskip-\rightskip
- -\gmu@tempa-2\@parindent\relax}%
- \parfillskip=\glueexpr\gmu@tempa minus \gmu@tempa
- \relax% to delimit |\glueexpr|.
- \relax% to delimit the assignment.
- }%
- \fi
- % \stanza
- \AtBeginDocument{%
- \unless\ifdefined\@parindent
- \newskip\@parindent
- \@parindent=\parindent
- \fi
- \def\restoreparindent{\parindent\@parindent}%
- }% of \cmd\AtBeginDocument.
-}% of \cs{twoparinit}.
-
-
-
-
-% \subdivision{For dati under poems}
-% Or explanations under results of \pk{time}.
-
-\DeclareCommand\wherncore{om}{%\
- % \begin{enumargs}
- % \dc optional value of \incs{hskip} of (left) indent of the parbox. If
- % absent, parbox is aligned right;
- % \dc text for the datum parbox.
- % \end{enumargs}
- \IfValueTF{#1}{\leftline{%
- \whernfont
- \hskip#1\relax\parbox
- {\dimexpr\textwidth-\leftskip-\rightskip-#1}%
- {#2}% of |\parbox|,
- }% of |\leftline|,
- }% of |ValueT{#1}|.
- {% |ValueF{#1}|:
- \rightline
- {\whernfont
- \whern@parbox{#2}%
- }% of |\rightline|,
- \setprevdepth
- }% of |ValueF{#1}|,
-}% of |\wherncore|.
-
-
-\DeclareCommand\whern@parbox{%
- S{\leftskip\rightskip}% horizontal alignment of resulting box (the
- % side to be ragged)
- O{t} % vertical alignment of parbox
- >is % separator
- O{0,7666\textwidth} % (3) width of parbox
- m % (4) parbox contents
-}{%
- % \begin{enumargs}
- % \dc S the skip of the ragged side,
- % \dc the |\parbox|'s contents.
- % \end{enumargs}
- \parbox[#2]{#3}{%
- \IfValueTF{#1}{#1}{\leftskip}=0sp plus \textwidth
- \parfillskip0sp\relax
- \let\\\linebreak
- \disobeylines
- \whernfont #4\unskip\strut\endgraf
- \getprevdepth
- }% of |\parbox|,
-}% of |\whern@parbox|.
-
-\def\whern{%
- \endgraf\nopagebreak
- \gm@ifstar{\wherncore}%
- {\vskip\whernskip\wherncore}}
-
-\let\whernfont\footnotesize
-
-\newskip\whernskip
-\whernskip2\baselineskip minus 2\baselineskip\relax
-
-\DeclareCommand\whernup{%
- o % a~vskip before
- >is % separating star (ignored)
- o % (2) custom width of parbox
- >Pm}{\par
- \IfValueT{#1}{\vskip#1\relax}%
- \leftline{%
- \IfValueTF{#2}{\whern@parbox\rightskip[b][#2]}%
- {\whern@parbox\rightskip[b]}%
- {#3}%
- }%
- \setprevdepth
- \nopagebreak\relax
- \@ifenvir{quote}{\noindent\ignorespaces}{}}
-
-
-
-%\subdivision{Thousand separator}
-
-\pdef\thousep#1{% a~macro that'll put the thousand separator between
- % every two three-digit groups.\par\nostanza
- % First we check whether we have at least five digits.
- %\changes{v0.93}{2008/08/23}{added}
- \gmu@thou@fiver#1\relax\relax\relax\relax\relax% we put five
- % \incs{relax}es after the parameter to ensure the string will meet
- % \incs{gmu\+@\+thou\+@\+fi\+ver}'s definition.\ilrr
- \gmu@thou@fiver{#1}{% if more than five digits:
- \emptify\gmu@thou@put
- \relaxen\gmu@thou@o\relaxen\gmu@thou@i\relaxen\gmu@thou@ii
- \@tempcnta\z@
- \gmu@thou@putter#1\gmu@thou@putter
- \gmu@thou@put
- }}
-
-\def\gmu@thou@fiver#1#2#3#4#5\gmu@thou@fiver#6#7{% this macro only
- % checks if the text delimited with itself consists of at least five tokens/braces
- \ifx\relax#5\relax\@xa\@firstoftwo
- \else\@xa\@secondoftwo
- \fi{#6}{#7}}
-
-\def\gmu@thou@putter#1#2{% we are sure to have at least five tokens
- % before the sentinel \incs{gmu@thou@putter}.
- \advance\@tempcnta\@ne
- \@tempcntb\@tempcnta
- \divide\@tempcntb3\relax
- \@tempcnta=\numexpr\@tempcnta-\@tempcntb*3
- \edef\gmu@thou@put{\@xau{\gmu@thou@put}\unexpanded{#1}%
- \ifx\gmu@thou@putter#2\else
- \ifcase\@tempcnta
- \gmu@thou@o\or\gmu@thou@i\or\gmu@thou@ii% all three
- % \CSes are yet \incs{relax} so we may put them in
- % an \incs{edef} safely.\ilrr
- \fi
- \fi}% of \cs{edef}
- \ifx\gmu@thou@putter#2% if we are at end of the digits…
- \edef\gmu@tempa{%
- \ifcase\@tempcnta
- \gmu@thou@o\or\gmu@thou@i\or\gmu@thou@ii
- \fi}%
- \@xa\let\gmu@tempa\gmu@thousep% … we set the proper \CS…
- \else% or …
- \afterfi{% iterate.
- \gmu@thou@putter#2}% of \cs{afterfi}
- \fi% of if end of digits.
-}% of \cs{gmu@thou@putter}.
-
-\def\gmu@thousep{\,}% in Polish the recommended thousand separator is
-% a~thin space.
-%
-% So you can type |\thousep{7123123123123}| to get
-% \thousep{7123123123123}. But what if you want to apply |\thousep| to
-% a~count register or a~|\numexpr|? You should write one or two
-% |\expandafter|s and |\the|. Let's do it only once for all:
-
-\pdef\xathousep#1{\@xa\thousep\@xa{\the#1}}
-% Now write |\xathousep{\numexpr 10*9*8*7*6*120}| to get
-% \xathousep{\numexpr 90*8*7*6*120}.
-
-\def\shortthousep{%
- \DeclareCommand\thous{Q{+-0123456789}}{%
- % we declare it as a command with Q-type argument to allow spaces
- % between digits.
- \ifmmode\hbox\bgroup\@gmu@mmhboxtrue\fi
- \IfValueTF{##1}{% we are given a sequence of digits
- \@tempcnta=##1\relax
- \ifnum\@tempcnta<0 $-$%
- \@tempcnta=-\@tempcnta
- \fi
- \xathousep\@tempcnta
- \if@gmu@mmhbox\egroup
- \else\@xa\spifletter
- \fi
- }%
- {% no bare digits given, then we assume the argument is braced.
- \thousep
- }%
- }% of |\thous|.
-}% of |\shortthousep|.
-%
-% And now write \shortthousep |\thous 3628800| to get \thous 3628800 even with
-% a~blank space (beware of the range of \TeX's counts).
-
-
-% \subdivision{\pk{hyperref}'s \cs{nolinkurl} into \cs{url*}}
-
-\def\urladdstar{%
- \AtBeginDocument{%
- \@ifpackageloaded{hyperref}{%
- \StoreMacro\url
- \pdef\url{\gm@ifstar{\nolinkurl}{\storedcsname{url}}}%
- }{}}}
-
-\@onlypreamble\urladdstar
-
-
-% \subdivision{Footnotes suggested by Andrzej Tomaszewski}
-
-\DeclareCommand\ATfootnotes{s}{% \chgs{2008/11/29 v0.98 moved here
- % from my own private macro package to allow the beauty of these
- % footnotes for the general audience}
- % \stanza
- % We make the footnote mark in the footnote |\scriptsize| not
- % |\scriptscriptsize|.\nostanza
- \IfValueT{#1}% the following setting is suitable for old style
- % numbers in footnote marks, therefore I~place it in the starred
- % version of the command.
- {\prependtomacro\gmu@ATfootnotes{%
- \pdef\@makefnmark{%
- \mbox {\normalfont \textsuperscript {\smaller[3]\@thefnmark }}}%
- }% of prepend,
- }% of |\IfValueT|.
- %
- \gmu@ATfootnotes
- \gmu@AT@ampulex\maketitle% without \pk{hyperref}
- \ifdefined\HyOrg@maketitle
- \afterfi{\gmu@AT@ampulex\HyOrg@maketitle}% with \pk{hyperref}
- \fi
-}
-
-\pdef\gmu@AT@ampulex#1{%
- \ampulexdef#1{\def\@makefnmark}%
- \if@twocolumn
- {\gmu@ATfootnotes\if@twocolumn}% Ampulex redefinition of
- % \incs{maketitle} for the standard classes.
- \ampulexdef#1{\long\def\@makefntext}%
- \if@twocolumn{\gmu@ATfootnotes\if@twocolumn}% Ampulex redefinition
- % of \incs{maketitle} for \pk{mwcls}.
-}
-
-\pdef\gmu@ATfootnotes{%
- % And we make the footnote number not be in superscript but on the
- % base line, according to Andrzej Tomaszewski's suggestion on
- % Bacho\TeX\ 2008, and the same size as in the footnote mark.\nostanza
- \long\pdef\@makefntext##1{%
- \ifdefined\@parindent \parindent\@parindent
- \else \parindent 1em\relax
- \fi
- \indent{\ATf@font\scriptsize% ^^A \hphantom{19}\llap
- {\@thefnmark}}%
- \gmu@fnhook
- \enspace\ignorespaces##1}%
-}
-
-\let\ATf@font\normalfont
-
-\emptify\gmu@fnhook
-
-\pdef\rrthis{% ‘rag right this’: make only the current paragraph
- % ragged right (e.g.\ if the paragraph consists of a~long \ac{URL}).
- % \chgs{2008/12/01 v0.98 added}
- \begingroup\rightskip=0sp plus \hsize \endgraf\endgroup}
-
-\pdef\centerthis{% 2009/12/15
- \begingroup
- \rightskip=1\rightskip plus \hsize
- \leftskip=1\leftskip plus\hsize
- \parfillskip=\z@skip
- \endgraf\endgroup}
-
-
-\def\balsmiley#1 {}% to balance parentheses and brackets in
- % smileys. \balsmiley( ;-) \inverb|\balsmiley( ;-)|
-% \chgs{2008/12/9 v0.98 moved here from my personal macro package
-% since I~needed it in the documentation of \pk{gmutils}}.
-%^^A The \pk{wasysym} package defines \incs{smiley} as it should be, a~smiley
-%^^A that is.
-
-\long\pdef\scantnoline#1{% ‘rescan tokens without adding line end’
- {\endlinechar\m@ne\scantokens{#1}}}
-% \chgs{2008/12/14 v0.98 added}
-
-% \subdivision{A~fix to the \pk{url} package}
-%
-% It happened that a~\ac{URL}s typeset with the |\url| command of the
-% \pk{url} package came out sort of spaced because kerning was off
-% because of the math mode. So I~provide a~redefinition of the
-% internal macros of the \pk{url} package which in my version uses not math mode but
-% |\scantokens| and not |\relpenalty| and |\binoppenalty| but
-% |\hyphenpenalty| (as it is in the paragraph) and
-% |\discretionary|. I~tried putting explicit penalties after the
-% symbols but that spoiled kerning.
-%
-% The rules of line breaking are somewhat different, too: in the original \pk{url}
-% package line breaks are forbidden between any two symbols listed in
-% |\UrlBigBreaks|. In my version line breaks are
-% forbidden between any two \emph{identical} ‘\ac{URL} Breaks’ and
-% ‘\ac{URL} Big Breaks’.
-%
-% There are some more differences in formatting some chars, i.a.\ |~|,
-% |%| and angle brackets which I~don't treat specially and just take from font
-% assuming the font provides \ac{ASCII} chars and checking whether it
-% provides the angle brackets.
-%
-\@ifXeTeX{%
- \pdef\UrlFix{\AtBeginDocument{%
- \@ifpackageloaded{url}{\gm@UrlFix}{}}%
- \relaxen\UrlFix}%
- %
- \AtBeginDocument{%
- \pdef\UrlFix{%
- \@ifpackageloaded{url}{\gm@UrlFix}{}%
- \relaxen\UrlFix}}%
-}
-{%
- \pdef\UrlFix{\PackageWarning{gmutils}{!!! The \string\UrlFix\space
- declaration works only with XeTeX}}%
-}
-
-
-\@ifXeTeX{}{%
- \edef\gmu@restoreUpUpUp{\catcode`\@nx\^^^=\the\catcode`\^^^}%
- \AtEndOfPackage\gmu@restoreUpUpUp
- \catcode`\^^^=9 }
-
-\def\gm@UrlFix{%
- % \stanza
- % default style assignments
- \def\UrlBreaks{\do\.\do\@\do\\\do\/\do\!\do\_\do\|\do\;\do\]%
- \do\)\do\,\do\?\do\'\do\"\do\+\do\=\do\#\do\%\do\~\do\_\do\|%
- \do\{\do\}\do\$}%
- \def\UrlBigBreaks{\do\:}%
- \def\UrlNoBreaks{\do\(\do\[\do\{}%
- \def\UrlSpecials{%
- \do\ {\hbox{\visiblespace}}\do\^^M{\hbox{\visiblespace}}}%
- % \stanza
- %
- % \stanza
- \def\Url@Format##1{%
- \UrlFont
- \ifdefined\verbatim@specials
- \catcode`\>\active
- \verbatim@specials
- \verbatim@mathhack
- \fi % setting of
- % the escape char, begin and end group and optionally math shift,
- % defined in \pk{gmverb}.
- \gm@UrlSetup
- \UrlLeft
- \edef\gmu@theendlinechar{\the\endlinechar}%
- \endlinechar\m@ne
- \kern\z@% to forbid hyphenating the first word if the \ac{URL}
- % begins with a~word
- \hyphenchar\font=\UrlHyphenchar\relax
- \let\-\gmu@discretionaryhyphen
- \scantokens{##1}%
- \endlinechar\gmu@theendlinechar\relax
- \UrlRight
- }% of |\Url@Format|.
- % \stanza
- \edef\UrlHyphenchar{%
- \ifdefined\gmv@hyphenchar\gmv@hyphenchar
- \else"A6 \fi}% \label{UrlHyphenchar} broken bar, |¦| or the same as
- % provided in \pk{gmverb} for verbatims. You
- % can redefine it as you please. This char is used as the
- % hyphenation char in \ac{URL}s and therefore should be different
- % from |-| (hyphen), which is often a part of an \ac{URL}. The
- % broken bar seems to be quite unlikely in \ac{URL}s and/or file
- % names.
- % \stanza
- \def\verbatim@mathhack{%
- \ifdefined\verbatim@specials@list
- \@xa\verbatim@mathhack@\verbatim@specials@list
- \fi
- }%
- % \stanza
- \def\verbatim@mathhack@##1##2##3##4##5##6{%
- \IfValueT{##4}{%
- \edef\gmu@thinmuskip{\the\thinmuskip}%
- \edef\gmu@medmuskip{\the\medmuskip}%
- \edef\gmu@thickmuskip{\the\thickmuskip}%
- \begingroup
- \lccode`\~=`##4\lowercase{%
- \endgroup\def~####1~}%
- {$\thinmuskip\gmu@thinmuskip\relax
- \medmuskip\gmu@medmuskip\relax
- \thickmuskip\gmu@thickmuskip\relax
- ####1%
- $}%
- \catcode`##4\active
- }%
- }%
- %\stanza
- \def\gm@UrlSetup{%
- \medmuskip\Urlmuskip \thickmuskip\medmuskip \thinmuskip0mu%
- \relpenalty\UrlBigBreakPenalty \binoppenalty\UrlBreakPenalty
- % ^^A \exhyphenpenalty\@M % seems not to work.
- % ^^A \hyphenpenalty\@M
- \def\do{\gmu@doUrlMath\UrlBreakPenalty}\UrlBreaks % bin
- % (\incs{hyphenpenalty} anyway)
- \def\do{\gmu@doUrlMath\UrlBigBreakPenalty}\UrlBigBreaks % rel
- % (\incs{hyphenpenalty} anyway)
- \def\do{\gmu@doUrlMath\@M}\UrlNoBreaks % open (no break)
- \def\do{\gmu@doUrlMathAc\UrlBreakPenalty}% (\incs{hyphenpenalty})
- \UrlSpecials
- \if \iffontchar\font"2329 1\else0\fi\iffontchar\font"232A 1\else2\fi
- % \nostanza we check whether the font provides both left and right
- % angle brackets. \nostanza
- \gmu@measurewd{^^^^2329}%
- \edef\gmu@tempa{%
- \@nx\gmu@doUrlMathAc\@M\@nx\<{%
- \hbox to\gmu@tempb{\unexpanded{\hss\char"2329 \hss}}}%
- }\gmu@tempa
- \gmu@measurewd{^^^^232a}%
- \edef\gmu@tempa{%
- \@nx\do\@nx\>{%
- \hbox to\gmu@tempb{\unexpanded{\hss\char"232A \hss}}}%
- }\gmu@tempa
- \else
- \gmu@doUrlMathAc\@M\<{\langle}\do\>{\rangle}%
- \fi
- \iffontchar\font"22C6 % low star
- \do\*{\hbox{\char"22C6 }}%
- \else \do\**%
- \fi
- \ifx\do@url@hyp\@empty
- \gmu@measurewd{-}% this macro is defined in line \ref{@measurewd}.
- \edef\gmu@tempa{%
- \unexpanded{\gmu@doUrlMathAc\@M\-}%
- {\hbox to \gmu@tempb{\unexpanded{\hss-\hss}}%
- \@nx\-}% hyphen is a
- % good point for hyphenation, but the hyphenation char should
- % be sth. else, and it is indeed: |¦| (broken bar,
- % |\char"A6|). See also line \ref{UrlHyphenchar}
- }\gmu@tempa
- \fi
- \addfontfeature{Ligatures=NoCommon, Mapping=none}% instead of
- % ‘doing’ \incs{ver\+bat\+im\+@\+no\+lig\+@\+list}.
- % ^^A \let\do\set@mathnolig \verbatim@nolig@list % prevent ligatures
- }% of |\gm@UrlSetup|.
- % \stanza
- % ^^A \def\gmu@UrlBreakPenalty{\gobble{\penalty\UrlBreakPenalty\relax}}%
- % ^^A \def\gmu@UrlBigBreakPenalty{\gobble{\penalty\UrlBigBreakPenalty\relax}}%
- % ^^A \def\gmu@Url@M{\gobble{\penalty\@M\relax}}%
- %
- % \stanza
- \def\gmu@doUrlMath##1##2{%\
- % \begin{enumargs}
- % \item value of the penalty (used as a~Boolean: if $<$
- % \thous 10000, \nlperc\cs{hyphenpenalty} will be used anyway, if $\ge$
- % \thous10000, there will be no \incs{discretionary}),
- % \item the char, given as |\⁄<char>|.
- % \end{enumargs}
- % ^^A % \begin{enumargs}
- % ^^A % \item a~type information macro that expands to |\gobble{⁄«penalty»}|,
- % ^^A % \item the char, given as |\⁄<char>|.
- % ^^A % \end{enumargs}
- % ^^A\gmu@measurewd{##3}%
- \begingroup
- \lccode`\~=`##2\lowercase{%
- \endgroup\def~{\@ifnextchar~}%
- \@xa\addtomacro\@xa~}% of |\lowercase|.
- \ifnum##1<\@M
- {%
- {\char`##2\csname gmu@dbl\string##2kern\endcsname}% if next is the same char
- {\ifmmode\char`##2% else
- \else\gmu@urlbreakable{##1}{##2}%
- \fi}%
- }% of |\addtomacro|'s argument |\ifnum| true.
- \else
- {%
- {\char`##2\csname gmu@dbl\string##2kern\endcsname}{\char`##2}%
- }% of |\addtomacro|'s argument |\ifnum| false.
- \fi
- \catcode`##2=\active
- }% of |\gmu@doUrlMath|.
- % \stanza
- \def\gmu@doUrlMathAc##1##2##3{%\
- % \begin{enumargs}
- % \item (value of) a~penalty (see the remark to \inverb|##1| of
- % the previous macro),
- % \item the char (as |\⁄<char>|),
- % \item the definition.
- % \end{enumargs}
- \begingroup
- \lccode`\~=`##2\lowercase{%
- \endgroup\def~{\@ifnextchar~}%
- \@xa\addtomacro\@xa~}% of |\lowercase|.
- \ifnum ##1<\@M
- {%
- {\ifmmode\char`##2\else$##3\m@th$\fi}%
- {\ifmmode\char`##2%
- \else\discretionary{\hbox{$##3\m@th$}}{}{\hbox{$##3\m@th$}}%
- \fi}%
- }% of |\addtomacro|'s argument if num true.
- \else
- {%
- {\ifmmode\char`##2\else$##3\m@th$\fi}{\ifmmode\char`##2\else$##3\m@th$\fi}%
- }% of |\addtomacro|'s argument if num false.
- \fi
- \catcode`##2=\active
- }% of |\gmu@doUrlMathAc|.
- % \stanza
- \pdef\gmu@url@rigidbreak##1##2{\discretionary{\char`##2}{}{\char`##2}}%
- % \stanza
- \pdef\gmu@url@flexbreak##1##2{\penalty\@M \hskip\z@ plus0,03em
- \char`##2\penalty##1\hskip\z@ plus0,03em\relax}%
- % \stanza
- \let\gmu@urlbreakable\gmu@url@flexbreak
- % \stanza
- \def\Url@z##1{%
- % Do any hyper referencing due to hyperref (or perform a url-def)
- \Url@HyperHook
- % Now do the formatting in a group (can also have \incs{Url@HyperHook} take
- % this as an argument). \nostanza
- {\Url@Format{##1}}%
- \endgroup}%
- % \stanza
- \DeclareUrlCommand\file{\urlstyle{sf}}%
- % \stanza
- \emptify\Url@moving% with our settings |\url| is pretty allowed in
- % moving arguments, I~hope.
-}% of |\gmu@UrlFix|.
-
-\DeclareCommand\UrlSlashKern{O{tt}m}%
-{\AtBeginDocument{%
- \@nameedef{url@#1style}{\def\@nx\UrlFont{%
- \@xa\@nx\csname#1family\endcsname
- \def\@xa\@nx\csname gmu@dbl\string\/kern\endcsname
- {\kern#2\relax}%
- % ^^A \hyphenchar\font=124
- }% of |\UrlFont|
- }% of |\url#1style|
- \urlstyle{#1}%
- }% of |\AtBeginDocument|
-}% of |\UrlSlashKern|
-
-
-
-
-% \division{Conditional tilde}
-%
-% Polish typesetting standards say that for 12 dd and 10 dd \<czcionki>
-% if leading is narrower that 3\dekfracc1/2 \<kwadratu>, $ 3\dekfracc1/2 × 48$dd,
-% then hanging letters are allowed, which also applies to 8 and 6 dd
-% \<czcionki> in less than 3 \<kwadraty> leading. I~treat this
-% recommendation not strictly but as an inspiration, that is
-% I~translate »dd« to »pt«.
-
-\def\TrzaskaTilde{%
- \@xa\DeclareCommand\@xa\gm@smarttilde
- \@xa{\@xa S\@xa{\all@stars~}}{%
- \IfValueTF{##1}{\nobreakspace{}}%
- {\ifdim\dimexpr\hsize-\leftskip-\rightskip
- -\ifdim\hangindent<\z@-\fi\hangindent % the last
- % parameter is used with respect to the \pk{floatflt} package.
- >%
- \ifdim\f@size pt>\dimexpr10pt-1sp\relax
- 168dd
- \else
- 144dd
- \fi
- \nobreakspace {}%
- \else
- \ %
- \fi
- }% of |\gm@ifstar|'s else,
- }% of |\gm@smarttilde|,
- \let~\gm@smarttilde
-}% of |\TrzaskaTilde|.
-
-
-\pdef\getprevdepth{%
- \endgraf
- \xdef\setprevdepth{\prevdepth=\the\prevdepth\relax}%
-}
-
-% \division{Storing the catcode of line end}
-\def\StoreCatM{%
- \protected\edef\RestoreCatM{%
- \catcode`\@nx\^^M=\the\catcode`\^^M\relax}%
-}
-
-\pdef\RestoreCatM{\PackageE{gmutils}{first store the catcode of
- ^\empty^\empty M with \string\StoreCatM.}%
-}
-
-% \division{A~really empty page}
-% Copied from Marcin Woliński's macros.
-%
-
-\newcommand{\clearemptydoublepage}{%
- \newpage{\pagestyle{empty}\cleardoublepage}}
-
-
-\DeclareCommand\setspaceskip{%
- A{}% optional factor for all three components
- O{\fontdimen2\font}%
- >is
- O{\fontdimen3\font}%
- >is
- O{\fontdimen4\font}}
-{\spaceskip=#1#2plus#1#3minus#1#4\relax}
-
-\foone\obeylines{%
- \def\disobeylines{% for arguments in which line end is active to
- % simulate normal behaviour
- \ifnum\catcode`\^^M=\active%
- \pdef^^M{\@ifnextgroup{\ifhmode\unskip\space\fi}{\gmu@disMinner}}%
- \def\gmu@disMinner##1{%
- \ifx^^M##1\endgraf%
- \else\afterfi{\ifhmode\unskip\space\fi}\fi##1}%
- \fi}%
-}
-
-
-%^^A\def\gmu@lowstarfake{*}
-
-
-\def\makestarlow{%
- \begingroup\lccode`\~=`\*\lowercase{%% \Define**
- \endgroup\def~{\gmu@lowstar}}% 2009/10/19 |\let| changed to
- % \inverb|\def| to allow redefinitions of \incmd\gmu@lowstar.
- \catcode`\*=\active
- \defLowStarFake
-}
-
-\DeclareCommand\defLowStarFake{%
- Q{+-0123456789,.}{0,5}% fraction of fontchar depth of the star glyph
-}%
-{%
- \def\gmu@lowstarfake{%
- \leavevmode\vbox{\hbox{*}\kern#1\fontchardp\font`*}%
- }%
-}
-
-
-\def\gmu@lowstarfake{*} % useful for next command where normal star is
-% low.
-
-
-% The |\*| \CS and active |*| should be defined different to make them
-% distinguishable by tests, especially with |\gm@ifstar| in
-% mind.
-
-\DeclareCommand\*{Q{0123456789}{1}}
-% \label{def:gmu@star}
-{\gmu@star@loop0{#1}}
-
-\def\gmu@star@loop#1#2{% this is an expandable loop as in The
- % \eTeX\ Manual p.~9.
- \ifnum#1<\numexpr#2\relax%
- \gmu@lowstar
- \@xa\gmu@star@loop
- \@xa{\number\numexpr#1+1\@xa}%
- \@xa{\number#2\@xa}%
- \fi}
-
-
-
-\endinput
-%
-% \ChangesGeneral
-%
-% \changes{v0.70}{06/10/20}{Package renamed to \pk{gmutils} from
-% \pk{gmlpatch}. As my \protect\TeX\ Guru remarked rightly, the
-% previous name might suggest there was sth.\ wrong with \LaTeX\ which
-% was not my intention}
-%
-% \changes{v0.74}{2006/11/28}{Added macros to make sectioning commands
-% of \pk{mwcls} and standard classes compatible. Now my sectionings
-% allow two optionals in both worlds and with \pk{mwcls} if there's
-% only one optional, it's the title to toc and running head not just
-% to the latter}
-%
-% \changes{v0.76}{2007/03/10}{A~`fixing' of \cs{dots} was rolled back
-% since it came out they were \acro{O.K.} and that was the \acro{QX} encoding that
-% prints them very tight}
-%
-% \changes{v0.77}{2007/04/13}{\cs{afterfi} \& pals made two-argument
-% as the Marcin Woli\nacute ski's analogoi are. At this occasion some
-% redundant macros of that family are deleted}
-%
-% \changes{v0.78}{2007/04/26}{\cs{@namelet} renamed to \cs{n@melet}
-% to solve a~conflict with the \pk{beamer} class. The package contents
-% regrouped}
-%
-% \changes{v0.85}{2007/11/16}{fixed behaviour of too clever headings
-% with \pk{gmdoc} by adding an \cs{ifdim} test}
-%
-% \changes{v0.87}{2008/08/03}{the package goes \eTeX\ even more,
-% making use of \cs{ifdefined} and the code using \acro{UTF-8} chars is
-% wrapped in a~\XeTeX-condition}
-%
-% \changes{v0.89}{2008/08/04}{removed obsolete adjustment of \pk{pgf}
-% for \XeTeX}
-%
-% \changes{v0.91}{2008/08/06}{removed \cs{jobnamewoe} since
-% \cs{jobname} is always without extension. \cs{xiispace} forked to
-% \cs{visiblespace} \cs{let} to \cs{xxt@visiblespace} of \pk{xltxtra}
-% if available. The documentation driver integrated with the \file{.sty} file}
-%
-% \changes{v0.93}{2008/08/21}{A~couple of \cs{DeclareRobustCommand*}
-% changed to \cs{pdef}}
-%
-% \changes{v0.93}{2008/08/29}{The numerical macros commented out as
-% obsolete and never really used}
-%
-% \changes{v0.94}{2008/09/08}{\cs{bgroup} and \cs{egroup} in the
-% macro storing commands and in \cs{foone} changed to \cs{begingroup}
-% and \cs{endgroup} since the former produce an empty \cs{mathord} in
-% math mode while the latter don't}
-%
-% \changes{v0.94}{2008/10/4}{The code from ancient \pk{xparse} (1999) of \TeX
-% Live 2007 rewritten here}
-%
-% \changes{v0.94}{2008/10/4}{removed \cs{unex@namedef} and
-% \cs{unex@nameuse}, probably never really used since they were
-% incomplete: \cs{edef@other} undefined}
-%
-% \toCTAN{2008/11/21 v0.96}
-%
-%
-% \PrintChanges\PrintIndex
-%\NoEOF
-
-% (For my GNU Emacs:)
-%%% Local Variables:
+%%% (For my GNU Emacs:)
+%%% Local Variables:
%%% mode: doctex
%%% coding: utf-8
-%%% mode: flyspell
-%%% ispell-local-dictionary: "british"
-%%% End:
-
-% LocalWords: xedekfraccplain dekfraccsimple doif ifnif sptoken xifnif lowstar
-% LocalWords: dc oC soC oarg parg Ps LocalWords ifnextgroup xifncat ifncat xaS
-% LocalWords: ifnextsingle seQuence activespace dofakeonum smarttilde prevdp
-% LocalWords: reserveda fileext filepart tempswatrue partsw tempswafalse gmu
-% LocalWords: tempswa filename filepartname partlist mainaux writeckpt nameuse
-% LocalWords: prependtomacro xefraccdef xefracc mmhbox selectfont cepstnof
-% LocalWords: reservedb tempd SMglobal smtempa SMglobalfalse MacroSt fontscale
-% LocalWords: quotedstring getfontdata getfontscale getfontstring fontstring
-% LocalWords: numeratorkern denominatorkern fracfontsetup maxnum minnum
-% LocalWords: extremnum firstofmany normalcr tempcnta currfont reservedc
-% LocalWords: maybestripcomma twocolumn thefnmark makefnmark ATfootnotes
-% LocalWords: reservedd reservede
+%%% End:
+\endinput
+%%
+%% End of file `gmutils.sty'.