diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/gmutils/gmutils.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/gmutils/gmutils.sty | 1232 |
1 files changed, 759 insertions, 473 deletions
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmutils.sty b/Master/texmf-dist/tex/latex/gmutils/gmutils.sty index 5182082a4dd..0736669b416 100644 --- a/Master/texmf-dist/tex/latex/gmutils/gmutils.sty +++ b/Master/texmf-dist/tex/latex/gmutils/gmutils.sty @@ -20,7 +20,7 @@ %% %% LPPL status: "author-maintained".\par %% -%% Many thanks to my \TeX\ Guru Marcin Woli\'nski for his \TeX nical ^^A +%% Many thanks to my \TeX\ Guru Marcin Woliński for his \TeX nical ^^A %% support. % %\end{copyrnote} @@ -53,6 +53,7 @@ % \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}{4869} % % % \skiplines we skip the driver @@ -81,7 +82,7 @@ pagella, fontspec=quiet]{gmdocc} \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{gmutils} - [2008/08/30 v0.93 some rather TeXnical macros, some of them tricky (GM)] + [2008/10/03 v0.94 some rather TeXnical macros, some of them tricky (GM)] % % \tableofcontents @@ -169,7 +170,7 @@ pagella, fontspec=quiet]{gmdocc} % -% \subdivision{A~couple of abbreviations} +% \division{A~couple of abbreviations} % {\DoIndex{\@nx \@xa} \Define\@xa \Define\@nx \let\@xa\expandafter \let\@nx\noexpand @@ -220,7 +221,7 @@ pagella, fontspec=quiet]{gmdocc} \long\def\@nameedef#1#2{% \changes{v0.93}{2008/08/30}{added} \@xa\edef\csname#1\endcsname{#2}} -% \subdivision{\cs{firstofone} and the queer \cs{catcode}s} +% \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 @@ -232,17 +233,17 @@ pagella, fontspec=quiet]{gmdocc} \long\def\firstofone#1{#1} % The next command, |\foone|, is intended as two-argument for -% shortening of the |\bgroup...\firstofone{\egroup...}| hack. +% shortening of the |\begingroup...\firstofone{\endgroup...}| hack. % -\long\def\foone#1{\bgroup#1\egroupfirstofone} +\long\def\foone#1{\begingroup#1\egfirstofone} % \UnDef -\long\def\egroupfirstofone#1{\egroup#1} +\long\def\egfirstofone#1{\endgroup#1} \long\def\fooatletter{\foone\makeatletter} -% \subdivision{Global Boolean switches} +% \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 @@ -366,8 +367,9 @@ pagella, fontspec=quiet]{gmdocc} \let\addtomacro=\addto@macro % 2008/08/09 I~need to prepend something not add at the end---so -\long\def\prependtomacro#1#2{% - \edef#2{\unexpanded{#1}\@xa\unexpanded\@xa{#2}}} +\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 @@ -392,34 +394,278 @@ pagella, fontspec=quiet]{gmdocc} \newcommand*\g@relaxen{\global\@relaxen} \@ifdefinable\grelaxen{\let\grelaxen\g@relaxen} -% \subdivision{Apmpulex Compressa-like modifications of macros} + +%\division{From the ancient \pk{xparse} of \TeX Live 2007} +% The code of this section is rewritten contents of the \pk{xparse} +% package version 0.17 dated 1999/09/10, the version available in \TeX +% Live 2007-13, in Ubuntu packages at least. It's a~stub `im Erwartung' +% (Schönberg) for the \LaTeX 3 bundle and it does what I~want, namely +% defines |\DeclareDocumentCommand|. I~rewrote the 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|). + +\newtoks\@temptokenb +\newtoks\xparsed@args +\long\def\DeclareDocumentCommand#1#2#3{% + \@tempcnta\z@ + \toks@{}% + \@temptokena\toks@ + \@temptokenb\toks@ + \@ddc#2X\edef#1{% + \noexpand\@ddc@ + {\the\toks@}% + \@xa\noexpand\csname\string#1\endcsname + \noexpand#1% + }% + \long\@xa\def\csname\string#1\@xa\endcsname + \the\@temptokena{#3}} + +\long\def\DeclareDocumentEnvironment#1#2#3#4{% + \@xa\DeclareDocumentCommand\csname#1\endcsname{#2}{% + \xparsed@args\toks@ + #3}% + \@xa\let\csname end#1\endcsname\@parsed@endenv + \long\@xa\def\csname end\string\\#1\@xa\endcsname + \the\@temptokena{#4}} + +\def\@parsed@endenv{% + \@xa\@parsed@endenv@\the\xparsed@args} + +\def\@parsed@endenv@#1{% + \csname end\string#1\endcsname} + +\def\@ddc@#1#2#3{% + \ifx\protect\@typeset@protect + \@xa\@firstofone + \else + \protect#3\@xa\@gobble + \fi + {\toks@{#2}#1\the\toks@}} + +\def\@ddc#1{% + \ifx#1X% + \else + \ifx#1m% + \addto@hook\@temptokenb m% + \else + \toks@\@xa{% + \the\@xa\toks@ + \csname @ddc@\the\@temptokenb\@xa\endcsname + \csname @ddc@#1\endcsname}% + \@temptokenb{}% + \fi + \advance\@tempcnta\@ne + \@temptokena\@xa{% + \the\@xa\@temptokena\@xa##\the\@tempcnta}% + \@xa + \@ddc + \fi} + +\long\def\@ddc@s#1\toks@{% + \@ifstar + {\addto@hook\toks@\BooleanTrue#1\toks@}% + {\addto@hook\toks@\BooleanFalse#1\toks@}} + +\long\def\@ddc@m#1\toks@#2{% + \addto@hook\toks@{{#2}}#1\toks@}% + +\long\def\@ddc@o#1\toks@{% + \@ifnextchar[%^^A] + {\@ddc@o@{#1}} + {\addto@hook\toks@\NoValue#1\toks@}} + +\long\def\@ddc@o@#1[#2]{% + \addto@hook\toks@{{#2}}#1\toks@} + +\def\@ddc#1{% + \ifx#1X% + \perhaps@grab@ms + \else + \ifx#1m% + \addto@hook\@temptokenb m% + \else + \toks@\@xa{% + \the\@xa\toks@ + \csname @ddc@x\the\@temptokenb\@xa\endcsname + \csname @ddc@#1\endcsname}% + \@temptokenb{}% + \ifx#1O% + \let\next@ddc\grab@default + \else + \ifx#1C% + \let\next@ddc\grab@default + \fi + \fi + \fi + \advance\@tempcnta\@ne + \@temptokena\@xa{% + \the\@xa\@temptokena\@xa##\the\@tempcnta}% + \@xa + \next@ddc + \fi +}% + +\let\next@ddc\@ddc +\def\grab@default#1{% + \toks@\@xa{% + \the\toks@ + {#1}}% + \let\next@ddc\@ddc + \@ddc +} + +\long\def\@ddc@O#1#2\toks@{% + \@ifnextchar[%^^A] + {\@ddc@o@{#2}}% + {\addto@hook\toks@{{#1}}#2\toks@}} + +\long\def\@ddc@c#1\toks@{% + \@ifnextchar(%^^A) + {\@ddc@c@#1}% + {\PackageError{xparse}{Missing~coordinate~argument}% + {A~value~of~(0,0)~is~assumed}% + \addto@hook\toks@{{00}}#1\toks@}% +} + +\long\def\@ddc@c@#1(#2,#3){% + \addto@hook\toks@{{{#2}{#3}}}#1\toks@} + +\long\def\@ddc@C#1#2\toks@{% + \@ifnextchar(%^^A) + {\@ddc@c@#2}% + {\addto@hook\toks@{{#1}}#2\toks@}} + +\let\perhaps@grab@ms\relax +\def\grab@ms{% + \toks@\@xa{% + \the\@xa\toks@ + \csname @ddc@x\the\@temptokenb\endcsname + }} + +\let\@ddc@m\undefined +\long\def\@ddc@xm#1\toks@#2{% + \addto@hook\toks@{{#2}}#1\toks@} + +\long\def\@ddc@xmm#1\toks@#2#3{% + \addto@hook\toks@{{#2}{#3}}#1\toks@} + +\long\def\@ddc@xmmm#1\toks@#2#3#4{% + \addto@hook\toks@{{#2}{#3}{#4}}#1\toks@} + +\long\def\@ddc@xmmmm#1\toks@#2#3#4#5{% + \addto@hook\toks@{{#2}{#3}{#4}{#5}}#1\toks@} + +\long\def\@ddc@xmmmmm#1\toks@#2#3#4#5#6{% + \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}}#1\toks@} +\long\def\@ddc@xmmmmmm#1\toks@#2#3#4#5#6#7{% + \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}{#7}}#1\toks@} +\long\def\@ddc@xmmmmmmm#1\toks@#2#3#4#5#6#7#8{% + \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}{#7}{#8}}#1\toks@} +\long\def\@ddc@xmmmmmmmm#1\toks@#2#3#4#5#6#7#8#9{% + \addto@hook\toks@{{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}#1\toks@} +\long\def\@ddc@xmmmmmmmmm\the\toks@#1#2#3#4#5#6#7#8#9{% + \addto@hook\toks@{{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}}\the\toks@} +\let\@ddc@x\relax + +\long\def\DeclareDocumentEnvironment#1#2#3#4{% +\@xa\DeclareDocumentCommand\csname#1\endcsname{#2}{% + #3}% +\@namedef{end#1}{#4}% +} +\let\@parsed@endenv\undefined +\let\@parsed@endenv@\undefined +\def\IfSomethingTF#1{\def\something@in{#1}\If@SomethingTF} +\def\IfSomethingT#1#2#3{\def\something@in{#1}% + \If@SomethingTF{#2}{#3}\@empty} + +\def\IfSomethingF#1#2#3{\def\something@in{#1}% + \If@SomethingTF{#2}\@empty{#3}} + +\def\If@SomethingTF#1{% + \def\something@tmp{#1}% + \ifx\something@tmp\something@in + \@xa\@secondofthree + \else + \@xa\def\@xa\something@tmpb\@xa{#1}% + \ifx\something@tmp\something@tmpb + \@xa\@xa\@xa\@thirdofthree + \else + \@xa\@xa\@xa\@firstofone + \fi + \fi + {\@xa\If@SomethingTF\@xa{#1}}% +} + +\long\def\@secondofthree#1#2#3{#2} +\long\def\@thirdofthree#1#2#3{#3} +\def\NoValue{-NoValue-} +\def\NoValueInIt{\NoValue} +\def\IfNoValueTF{\IfSomethingTF\NoValue} +\def\IfNoValueT{\IfSomethingT\NoValue} +\def\IfNoValueF{\IfSomethingF\NoValue} +\def\IfValueTF#1#2#3{\IfNoValueTF{#1}{#3}{#2}} +\let\IfValueT\IfNoValueF +\let\IfValueF\IfNoValueT +\def\BooleanFalse{TF} +\def\BooleanTrue{TT} +\def\IfBooleanTF#1{% + \if#1% + \@xa\@firstoftwo + \else + \@xa\@secondoftwo + \fi +} + +\def\IfBooleanT#1#2{% + \IfBooleanTF{#1}{#2}\@empty +} + +\def\IfBooleanF#1{% + \IfBooleanTF{#1}\@empty +} + + +% \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 |#3| and |#4|) +% The \cs{ampulexdef} command takes its |#4| which has to be a~macro +% and replaces part of its definition (delimited with |#5| and |#6|) % with the replacement |#5|. 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 with the \cs{ampulexset} +% |#1|. |#4| may have parameters and for such a~macro you have to set +% the parameters string and arguments string with the \cs{ampulexset} % declaration. If \cs{ampulexdef} doesn't find the sart and end tokens -% in the meaning of the macro, it does nothing to it. For an example +% in the meaning of the macro, it does nothing to it. |#2| and |#3| +% are parameters' strings for \cs{def} and for eating by first-level +% expansion. You have to write |####| instead of |#| or you can use +% |\ampulexhash| as well. For an example % use see line \ref{ampulexset}. -\newcommand\ampulexdef[5][\relax]{%^^B +%^^A\RequirePackage{xparse} + +%^^A\long\def\gobblefour#1#2#3#4{} + +\DeclareDocumentCommand\ampulexdef{O{}mO{}O{}mmm}{%^^B % \begin{enumargs} - % \item definition prefix, + % \item definition prefix, empty by default, % \item macro to be redefined, + % \item \cs{def} parameters string, empty by default, + % \item definition body parameters for the first expansion, empty by default, % \item start token(s), % \item end token(s) % \item replacement. % \end{enumargs} % \changes{v0.93}{2008/08/29}{added} - \def\gmu@tempa{#3}% - \def\gmu@tempb{#4}% - \def\gmu@tempc{#5}% we wrap the start, end and replacement tokens in + % \changes{v0.94}{2008/09/07}{made \pk{xparse}-ish and + % \cs{ampulexset} removed} + % For the example of usage see \ref{ampulexset}. + \def\gmu@tempa{#5}% + \def\gmu@tempb{#6}% + \def\gmu@tempc{#7}% we wrap the start, end and replacement tokens in % macros to avoid unbalanced \incs{if}s. \edef\gmu@tempd{% \long\def\@nx\gmu@tempd @@ -452,32 +698,27 @@ pagella, fontspec=quiet]{gmdocc} \@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{#4}% \edef\gmu@tempe{% - #1\def\@nx#2\gmu@ampulexpa{% - \@xa\@xa\@xa\gmu@tempd\@xa#2\gmu@ampulexpb - \ampulexdef}}% + #1\def\@nx#2#3{% + \@xa\@xa\@xa\gmu@tempd\@xa#2\gmu@tempf\ampulexdef}}% \gmu@tempe \fi} - -\long\def\ampulexset#1#2{% - \def\gmu@ampulexpa{#1}% it's the parameter string for definition - \def\gmu@ampulexpb{#2}% it's the arguments string for the first - % expansion. For the example of usage see \ref{ampulexset}. -} - -\ampulexset{}{} +\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, % -% \Define\gmshowlists -% \changes{v0.59}{06/09/04}{moved here from \pk{gmdoc}} +%^^A \Define\gmshowlists \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} @@ -656,7 +897,8 @@ pagella, fontspec=quiet]{gmdocc} \long\def\afterfi#1#2\fi{\fi#1} % And two more of that family: \long\def\afterfifi#1#2\fi#3\fi{\fi\fi#1} -\long\def\afteriffifi#1#2\if#3\fi#4\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. @@ -664,6 +906,32 @@ pagella, fontspec=quiet]{gmdocc} \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{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{% + % \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 as |\relax| + \afterfifi\@firstoftwo% + \else% defined and not |\relax| + \afterfifi\@secondoftwo% + \fi + \else% not defined + \afterfi\@firstoftwo% + \fi} + + + + % \division{Environments redefined} % \subdivision{Almost an environment or redefinition of \cs{begin}} % @@ -706,17 +974,10 @@ pagella, fontspec=quiet]{gmdocc} % corresponding control sequence hasn't been known to \TeX, this line % will act as |\relax|.) -% For back compatibility with my earlier works -% \Define\bnamegroup -% \Define\enamegroup -\let\bnamegroup\@begnamedgroup -% And for the ending -\def\enamegroup#1{\end{#1}} - -% And we make it the starred version of |\begin|. +% Let us make it the starred version of |\begin|. % \begin{DoIndex}{\begin} % \Define\begin - % \Define*\begin* +% \Define*\begin* \def\begin{\@ifstar{\@begnamedgroup}{% \@begnamedgroup@ifcs}} % \end{DoIndex} @@ -1125,13 +1386,13 @@ pagella, fontspec=quiet]{gmdocc} %\changes{v0.61}{06/09/05}{added.} %\changes{v0.67}{06/10/11}{enriched with \cs{makeatletter}} \pdef\StoreMacro{% - \bgroup\makeatletter\@ifstar\egStore@MacroSt\egStore@Macro} + \begingroup\makeatletter\@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{\egroup\Store@Macro{#1}} -\long\def\egStore@MacroSt#1{\egroup\Store@MacroSt{#1}} +\long\def\egStore@Macro#1{\endgroup\Store@Macro{#1}} +\long\def\egStore@MacroSt#1{\endgroup\Store@MacroSt{#1}} \long\def\Store@Macro#1{% \escapechar92 @@ -1167,8 +1428,8 @@ pagella, fontspec=quiet]{gmdocc} % them. The \CS may be separated with commas but they don't have to. % \Define\StoreMacros -\long\pdef\StoreMacros{\bgroup\makeatletter\Store@Macros} -\long\def\Store@Macros#1{\egroup +\long\pdef\StoreMacros{\begingroup\makeatletter\Store@Macros} +\long\def\Store@Macros#1{\endgroup \gmu@setsetSMglobal \let\gml@StoreCS\Store@Macro \gml@storemacros#1.} @@ -1205,10 +1466,10 @@ pagella, fontspec=quiet]{gmdocc} %\changes{v0.61}{06/09/05}{added.} %\changes{v0.67}{06/10/11}{enriched with \cs{makeatletter}} \pdef\RestoreMacro{% - \bgroup\makeatletter\@ifstar\egRestore@MacroSt\egRestore@Macro} + \begingroup\makeatletter\@ifstar\egRestore@MacroSt\egRestore@Macro} -\long\def\egRestore@Macro#1{\egroup\Restore@Macro{#1}} -\long\def\egRestore@MacroSt#1{\egroup\Restore@MacroSt{#1}} +\long\def\egRestore@Macro#1{\endgroup\Restore@Macro{#1}} +\long\def\egRestore@MacroSt#1{\endgroup\Restore@MacroSt{#1}} \long\def\Restore@Macro#1{% \escapechar92 @@ -1226,9 +1487,9 @@ pagella, fontspec=quiet]{gmdocc} \global\gmu@SMglobalfalse} % \Define\RestoreMacros -\long\pdef\RestoreMacros{\bgroup\makeatletter\Restore@Macros} +\long\pdef\RestoreMacros{\begingroup\makeatletter\Restore@Macros} -\long\def\Restore@Macros#1{\egroup +\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 @@ -1239,8 +1500,8 @@ pagella, fontspec=quiet]{gmdocc} % And to restore \emph{and} use immediately: %\changes{v0.67}{06/10/11}{enriched with \cs{makeatletter}} -\def\StoredMacro{\bgroup\makeatletter\Stored@Macro} -\long\def\Stored@Macro#1{\egroup\Restore@Macro#1#1} +\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} @@ -1370,12 +1631,14 @@ pagella, fontspec=quiet]{gmdocc} \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 not too large. - \ampulexset{########1}{{####1}}% \label{ampulexset} the first is the + % \label{ampulexset} the first is the % parameters string and the second the argument for one-level % expansion of \incs{nocite} so it has to consist of two times less % hashes than the first. Both hash strings are doubled to pass the % first \incs{def}. - \ampulexdef\nocite\ifx + \ampulexdef[]\nocite[####1][{{####1}}]% note the double brace + % around \inverb|#3|. + \ifx {\@onlypreamble\document}% \iftrue} @@ -1422,44 +1685,6 @@ pagella, fontspec=quiet]{gmdocc} \newcommand*\HimHer{\gm@atppron{Him}{Her}} \newcommand*\HisHers{\gm@atppron{His}{Hers}} -%^^A % \division[To Save Precious Count Registers]{\gmhypertarget{To Save Precious Count Registers}} -%^^A % -%^^A % It's a~contribution to \TeX's ecology \gobble(;-). You can use as -%^^A % many \CSs as you wish and you may use only 256 count registers -%^^A % (although in \eTeX\ there are $2^{16}$ count registers, which makes -%^^A % the following a~bit obsolete). -%^^A -%^^A \newcommand*\nummacro[1]{\gdef#1{0}} -%^^A -%^^A \newcommand*\stepnummacro[1]{% -%^^A \@tempcnta=#1\relax -%^^A \advance\@tempcnta by1\relax -%^^A \xdef#1{\the\@tempcnta}}% Because of some mysterious reasons -%^^A % explicit |\count0| interferred with page -%^^A % numbering when used in |\gmd@evpaddonce| in \pk{gmdoc}. -%^^A -%^^A -%^^A -%^^A \newcommand*\addtonummacro[2]{% -%^^A \count0=#1\relax -%^^A \advance\count0by#2\relax -%^^A \xdef#1{\the\count\z@}} -%^^A % Need an explanation? The |\nummacro| declaration defines its -%^^A % argument (that should be a~\CS) as |{0}| which is analogous to -%^^A % |\newcount| declaration but doesn't use up any count register. -%^^A % -%^^A % Then you may use this numeric macro as something between \TeX's -%^^A % count \CS and \LaTeX's counter. The macros |\stepnummacro| and -%^^A % |\addtonummacro| are analogous to \LaTeX's |\stepcounter| and -%^^A % |\addtocounter| respectively: |\stepnummacro| advances the number -%^^A % stored in its argument by 1 and |\addtonummacro| advances it by the -%^^A % second argument. As the \LaTeX's analogoi, they have the global effect -%^^A % (the effect of global warming \gobble(;-)\,). -%^^A % -%^^A % So far I've used only |\nummacro| and |\stepnummacro|. Notify me if -%^^A % you use them and whether you need sth.\ more, |\multiplynummacro| -%^^A % e.g. -%^^A % % \division{Improvements to \pk{mwcls} sectioning commands} % @@ -1506,37 +1731,40 @@ pagella, fontspec=quiet]{gmdocc} % 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{\@ifundefined{mw@sectionxx}{#1}{#2}} - -\let\gmu@def\def -\@ifnotmw{% - \StoreMacro\gmu@def \def\gmu@def#14#2{\RestoreMacro\gmu@def}}{} -% I~know it may be of bad taste (to write such a~way \emph{here}) but -% I~feel so lonely and am in an alien state of mind after 3 hour sleep -% last night and, worst of all, listening to sir Edward Elgar's flamboyant -% Symphonies d'Art Nouveau. -% -% A~\emph{decent} person would just wrap the following -% definition in |\@ifundefined|'s Else. But look, the definition is so -% long and I~feel so lonely etc. So, -% I~define |\def| (for some people there's nothing sacred) to be -% a~macro with two parameters, first of which is -% delimited by digit 4 (the last token of |\mw@sectionxx|'s parameter -% string) and the latter is undelimited which means it'll be the body -% of the definition. Such defined |\def| does nothing else but -% restores its primitive meaning by the way sending its arguments to -% the Gobbled Tokens' Paradise. Luckily, |\RestoreMacro| contains -% |\let| not |\def|. +\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: -\gmu@def\mw@sectionxx#1#2[#3]#4{% +\@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 - % line below is in \@ifundefined to make it work in classes - % other than mwbk - \@ifundefined{if@mainmatter}{}{\gm@dontnumbersectionsoutofmainmatter} + % \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 @@ -1552,7 +1780,7 @@ pagella, fontspec=quiet]{gmdocc} \def\mw@HeadingType{#1}% \if\mw@HeadingBreakBefore \if@specialpage\else\thispagestyle{closing}\fi - \@ifundefined{if@openright}{}{\gm@clearpagesduetoopenright}% + \gm@ifundefined{if@openright}{}{\gm@clearpagesduetoopenright}% \if\mw@HeadingBreakAfter \thispagestyle{blank}\else \thispagestyle{opening}\fi @@ -1598,6 +1826,7 @@ pagella, fontspec=quiet]{gmdocc} } %^^A%%% (End of Experimente with MW sectioning.) + % % \subdivision{An improvement of MW's \cs{SetSectionFormatting}} % @@ -1620,20 +1849,20 @@ pagella, fontspec=quiet]{gmdocc} \relaxen\SetSectionFormatting \newcommand*\SetSectionFormatting[5][\empty]{% - \ifx\empty#1\relax\else% empty (not |\empty|!) |#1| also launches |\else|. + \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 - \@ifundefined{#2}{\@namedef{#2}{\mw@section{#2}}}{}% + \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}% + \else\mw@setflags{#2}% \ResumeDef \fi} \def\mw@secdef#1#2#3#4{% ^^B @@ -1648,7 +1877,7 @@ pagella, fontspec=quiet]{gmdocc} {\@namedef{#1#2}{#3}}} \def\mw@secundef#1#2{% - \@ifundefined{#1}{% + \gm@ifundefined{#1}{% \ClassError{mwcls/gm}{% command \bslash#1 undefined \MessageBreak after \bslash SetSectionFormatting!!!\MessageBreak}{% @@ -1659,13 +1888,13 @@ pagella, fontspec=quiet]{gmdocc} % stuff to be added at the beginning of the heading declarations. \def\addtoheading#1#2{% \n@melet{gmu@reserveda}{#1@head}% - \toks\z@=\@xa{\gmu@reserveda}% - \toks\tw@={#2}% - \edef\gmu@reserveda{\the\toks\tw@\the\toks\z@}% + \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 @@ -1703,12 +1932,12 @@ pagella, fontspec=quiet]{gmdocc} % two-header-skip. (We put the macro defined below just before % |\addvspace| in \pk{mwcls} inner macros.) \def\gmu@checkaftersec{% - \@ifundefined{gmu@prevsec}{}{% + \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}% + \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. @@ -1716,7 +1945,7 @@ pagella, fontspec=quiet]{gmdocc} \penalty10000\relax \skip\z@=\csname\gmu@prevsec @postskip\endcsname\relax \skip\tw@=\csname\mw@HeadingType @preskip\endcsname\relax - \@ifundefined{\mw@HeadingType @twoheadskip}{ + \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 @@ -1737,7 +1966,7 @@ pagella, fontspec=quiet]{gmdocc} \penalty10000 \fi \fi - }% of |\@ifundefined{gmu@prevsec}| `else'. + }% of |\gm@ifundefined{gmu@prevsec}| `else'. }% of |\def\gmu@checkaftersec|. \def\ParanoidPostsec{% \label{gmu@postsec} this version of @@ -1754,7 +1983,7 @@ pagella, fontspec=quiet]{gmdocc} \let\ifgmu@postsec\iftrue \def\gmu@getaddvs#1\addvspace#2\gmu@getaddvs{% - \toks\z@={#1} + \toks\z@={#1}% \toks\tw@={#2}} % And the modification of the inner macros at last: @@ -1769,7 +1998,7 @@ pagella, fontspec=quiet]{gmdocc} \def\SetTwoheadSkip#1#2{\@namedef{#1@twoheadskip}{#2}} -}% of |\@ifnotmw|. +}% of |\@ifnotmw|'s else. % \subdivision{My heading setup for \pk{mwcls}} @@ -1786,7 +2015,7 @@ pagella, fontspec=quiet]{gmdocc} \SetSectionFormatting[breakbefore,wholewidth] {part}{\z@\@plus1fill}{}{\z@\@plus3fill}% % - \@ifundefined{chapter}{}{% + \gm@ifundefined{chapter}{}{% \SetSectionFormatting[breakbefore,wholewidth] {chapter} {66\p@}% |{67\p@}|% for Adventor/Schola 0,95. @@ -1830,7 +2059,7 @@ pagella, fontspec=quiet]{gmdocc} }% of |\@ifnotmw| -% \division{Compatibilising standard and \pk{mwcls} sectionings} +% \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 @@ -1913,7 +2142,7 @@ pagella, fontspec=quiet]{gmdocc} % argument. ^^A} \def\gm@straightensec#1{% the parameter is for the command's name. - \@ifundefined{#1}{}{% we don't change the ontological status of the + \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}{% @@ -2067,7 +2296,7 @@ pagella, fontspec=quiet]{gmdocc} % 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} -\@ifundefined{AmSTeX} +\gm@ifundefined{AmSTeX} {\def\AmSTeX{\leavevmode\hbox{$\mathcal A\kern-.2em\lower.376ex% \hbox{$\mathcal M$}\kern-.2em\mathcal S$-\TeX}}}{} @@ -2096,16 +2325,16 @@ pagella, fontspec=quiet]{gmdocc} \DeclareLogo\pdfTeX{pdf\TeX} -\@ifundefined{XeTeX}{% +\gm@ifundefined{XeTeX}{% \DeclareLogo\XeTeX{X\kern-.125em\relax - \@ifundefined{reflectbox}{% + \gm@ifundefined{reflectbox}{% \lower.5ex\hbox{E}\kern-.1667em\relax}{% \lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\relax}% \TeX}}{} -\@ifundefined{XeLaTeX}{% +\gm@ifundefined{XeLaTeX}{% \DeclareLogo\XeLaTeX{X\kern-.125em\relax - \@ifundefined{reflectbox}{% + \gm@ifundefined{reflectbox}{% \lower.5ex\hbox{E}\kern-.1667em\relax}{% \lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\relax}% \LaTeX}} @@ -2142,19 +2371,18 @@ pagella, fontspec=quiet]{gmdocc} \def\@nx\gm@gobmacro##1\@xa\@gobble\string\macro:##2->{}} \gmu@tempa -% In the next two macros' names, `unex' stands both for not expanding -% the argument(s) and for disastrously partial unexpandability of the -% macros themselves. - -\long\def\unex@namedef#1#2{% - \edef@other\gmu@reserveda{#1}% - \@xa\long\@xa\def\csname\gmu@reserveda\endcsname{#2}} - - -\long\def\unex@nameuse#1{% - \edef@other\gmu@reserveda{#1}% - \csname\gmu@reserveda\endcsname} - +%^^A % In the next two macros' names, `unex' stands both for not expanding +%^^A % the argument(s) and for disastrously partial unexpandability of the +%^^A % macros themselves. +%^^A +%^^A \long\def\unex@namedef#1#2{% +%^^A \edef@other\gmu@reserveda{#1}% +%^^A \@xa\long\@xa\def\csname\gmu@reserveda\endcsname{#2}} +%^^A +%^^A +%^^A \long\def\unex@nameuse#1{% +%^^A \edef@other\gmu@reserveda{#1}% +%^^A \csname\gmu@reserveda\endcsname} % \division{Brave New World of \XeTeX} @@ -2180,8 +2408,7 @@ pagella, fontspec=quiet]{gmdocc} \RestoreMacro\LaTeX\RestoreMacro*{LaTeX }}% my version of the % \LaTeX\ logo has been stored just % after defining, in line \ref{SMLaTeX}. \ilrr - % ^^A \def\dekfracc##1/##2{\vfrac{##1}{##2}} -}{}} + }{}} % \indent The |\udigits| declaration causes the digits to be typeset % uppercase. I~provide it since by default I~prefer the lowercase @@ -2235,19 +2462,33 @@ pagella, fontspec=quiet]{gmdocc} \gmu@xefraccdef{3/8}{"215C}% \gmu@xefraccdef{5/8}{"215D}% \gmu@xefraccdef{7/8}{"215E}% - \def\dekfracc##1/##2{% + \pdef\dekfracc@args##1/##2{% \def\gm@duppa{##1/##2}% - \@ifundefined{gmu@xefracc\all@other\gm@duppa}{% + \gm@ifundefined{gmu@xefracc\all@other\gm@duppa}{% \gmu@dekfracc{##1}/{##2}}{% - \csname gmu@xefracc\all@other\gm@duppa\endcsname}}% + \csname gmu@xefracc\all@other\gm@duppa\endcsname}% + \if@gmu@mmhbox\egroup\fi + }% of |\dekfracc@args|. \@ifstar{\let\gmu@dekfracc\gmu@dekfraccsimple}{}% } \def\gmu@xedekfraccplain{% `else' of the main |\@ifstar| - \def\dekfracc##1/##2{{% + \pdef\dekfracc@args##1/##2{% + \ifmmode\hbox\fi{% \addfontfeature{Fractions=On}% - ##1/##2}}% - } + ##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-.05em\relax} \let\gmu@denominatorkern\gmu@numeratorkern @@ -2271,41 +2512,12 @@ pagella, fontspec=quiet]{gmdocc} % A~simpler version of |\dekfracc| is provided in line \ref{2292}. % \subdivision{\cs{resizegraphics}} -% -\@ifXeTeX{% - \def\resizegraphics#1#2#3{{% - \setbox0=\hbox{\XeTeXpicfile #3 }% - \ifx!#1\else - \dimen0=#1\relax - \count2=\wd0 - \divide\count2 by1000\relax - \count0=\dimen0\relax - \divide\count0\count2 - \fi - \ifx!#2\else - \dimen0=#1\relax - \count6=\ht0 - \divide\count6 by1000\relax - \count4=\dimen0\relax - \divide\count4\count6 - \fi - \ifx!#1\count0=\count4\fi - \ifx!#2\count4=\count0\fi - \XeTeXpicfile #3 xscaled \count0 yscaled \count4 - }}}{% - \def\resizegraphics#1#2#3{% - \resizebox{#1}{#2}{% - \includegraphics{#3}}}}% - -% The [options] in the |\XeTeXpicfile| command use the following keywords:\\ -% |width| \<dimen>\\ -% |height| \<dimen>\\ -% |scaled| \<scalefactor>\\ -% |xscaled| \<scalefactor>\\ -% |yscaled| \<scalefactor>\\ -% |rotated| \<degrees> -% +\def\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}} + \resizebox{#1}{#2}{% + \includegraphics{#3}}} \def\GMtextsuperscript{% \@ifXeTeX{% @@ -2323,6 +2535,211 @@ pagella, fontspec=quiet]{gmdocc} %^^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. + +\pdef\gmath{% \HideDef + \everymath{% \changes{v0.94}{2008/10/4}{removed definition of + % \cs{}\<letter>s and \cs{}\<digit>s} + \relaxen\do + \newcommand*\do[4][\mathit]{\def##2{##3{##1{\char"##4}}}}% + \do\alpha{}{03B1}% + \do[\mathrm]\Delta{}{0394}% + \do\varepsilon{}{03B5}% + \do\vartheta{}{03D1}% + \do\nu{}{03BD}% + \do\pi{}{03C0}% + \do\phi{}{03D5}% + \do[\mathrm]\Phi{}{0424}% + \do\sigma{}{03C3}% + \do\varsigma{}{03DA}% + \do\psi{}{03C8}% + \do\omega{}{03C9}% + \do\infty{}{221E}% + \do[\mathrm]\neg{\mathbin}{00AC}% + \do[\mathrm]\neq{\mathrel}{2260}% + \do\partial{}{2202}% + \do[\mathrm]\pm{}{00B1}% + \do[\mathrm]\pm{\mathbin}{00B1}% + \do[\mathrm]\sim{\mathrel}{007E}% + % + \def\do##1##2##3{\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}}% + \do\sum{\char"2211}{}% + \do\forall{\gma@quantifierhook \rotatebox[origin=c]{180}{A}% + \setbox0=\hbox{A}\setbox2=\hbox{\scriptsize x}% + \kern\dimexpr\ht2/3*2 -\wd0/2\relax}{\nolimits}% + \do\exists{\rotatebox[origin=c]{180}{\gma@quantifierhook E}}\nolimits% + % + \def\do##1##2##3{\def##1{##3{% + \mathchoice{\hbox{\rm##2}}{\hbox{\rm##2}}% + {\hbox{\rm\scriptsize##2}}{\hbox{\rm\tiny##2}}}}}% + \do\vee{\rotatebox[origin=c]{90}{<}}\mathbin + \do\wedge{\rotatebox[origin=c]{-90}{<}}\mathbin + \do\leftarrow{\char"2190}\mathrel + \do\rightarrow{\char"2192}\mathrel + \do\leftrightarrow{\char"2190\kern-0,1em \char"2192}\mathrel + % + \gmu@storespecials[\do\`\do\"\do\=]% \label{@storespecials} + \gmu@septify[\do\`12\do\"12\do\=12]% + \def\do##1##2##3{% + \catcode`##1=12\relax % to ensure |##2| be `other' in the + % definition body. + \scantokens{\mathcode`##1="8000\relax + \foone{\catcode`##1=\active}{\def##1}{##3{% + \mathchoice{\hbox{\rm##2}}{\hbox{\rm##2}}% + {\hbox{\rm\scriptsize##2}}{\hbox{\rm\tiny##2}}}}% + \ignorespaces}}% to eat the lineend (scantokens acts as |\read| + % icluding line end). + \do..\mathpunct \do,,\mathpunct \do……\mathpunct + \do((\mathopen%^^A)) + \gm@ifundefined{resetMathstrut@}{}{% an error occured `bad mathchar + % etc.'\ because \pk{amsmath.sty} doesn't take account of + % a~possibility of `|(|' %^^A) + % being math-active. + \def\resetMathstrut@{% + \setbox\z@\hbox{% \label{gmu:leading space} \nostanza \gmdnoindent + % |%% \mathchardef\@tempa\mathcode`\(\relax|\\ + % |%% \def\@tempb##1"##2##3{\the\textfont"##3\char"}%|\\ + % |%% \expandafter\@tempb\meaning\@tempa \relax|\nostanza + (%^^A) + }% + \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@ + }}%^^A(( + \do))\mathclose + \do[[\mathopen\do]]\mathclose + \do-{\char"2212}\mathbin \do++\mathbin \do==\mathrel \do××\mathbin + \do::\mathbin \do··\mathbin \do//\mathbin \do<<\mathrel + \do>>\mathrel + \do00\mathord \do11\mathord \do22\mathord \do33\mathord + \do44\mathord \do55\mathord \do66\mathord \do77\mathord + \do88\mathord \do99\mathord + \gmu@restorespecials + % + \def\do##1##2##3{\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]}% + % + \def\do##1##2{\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}}% + \def\do##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 |\def\gmath|. \ResumeDef + +\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}} + +\def\garamath{% + \addtotoks\everymath{% + \quantifierhook{\addfontfeature{OpticalSize=800}}% + % + \def\gma@arrowdash{{% + \setbox0=\hbox{\char"2192}\copy0\kern-0,6\wd0 + \bgcolor\rule[-\dp0]{0,6\wd0}{\dimexpr\ht0+\dp0}\kern-0,6\wd0}}% + % + \def\gma@gmathhook{% + \def\do####1####2####3{\def####1{####3{% + \mathchoice{\hbox{\rm####2}}{\hbox{\rm####2}}% + {\hbox{\rm\scriptsize####2}}{\hbox{\rm\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}{}% + \do\leftarrow{\char"2190\kern-0,05em\gma@arrowdash}\mathrel + \do\rightarrow{\gma@arrowdash\kern-0,05em\char"2192}\mathrel + \do\in{\gma@quantifierhook\char"0454}\mathbin + }}% + \everydisplay\everymath} + + + +% \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} + + %\division{Varia} % @@ -2623,18 +3040,21 @@ pagella, fontspec=quiet]{gmdocc} % \changes{v0.81}{2007/05/13}{moved here from \pk{pmlectionis.cls}} \def\gmu@dekfraccsimple#1/#2{\leavevmode\kern.1em - \raise.5ex\hbox{\udigits\smaller[3]#1}\gmu@numeratorkern + \raise.5ex\hbox{%^^A \udigits + \smaller[3]#1}\gmu@numeratorkern \dekfraccslash\gmu@denominatorkern %^^A\lower.25ex\hbox - {\udigits\smaller[3]#2}}% + {%^^A\udigits + \smaller[3]#2}% + \if@gmu@mmhbox\egroup\fi} \def\dekfraccsimple{% \label{2292} - \let\dekfracc\gmu@dekfraccsimple + \let\dekfracc@args\gmu@dekfraccsimple } \@ifXeTeX{\def\dekfraccslash{\char"2044 }}{% \def\dekfraccslash{/}} % You can define it as the fraction slash, -% %%%%% \nlpercent|\char"2044 | +% %%%%% \nlpercent|\char"2044 |\ilrr \dekfraccsimple % \changes{v0.81}{2007/05/13}{moved here from \pk{pmlectionis.cls}} @@ -2670,8 +3090,8 @@ pagella, fontspec=quiet]{gmdocc} % with |\includeonly|, give the latter command full file name, with % the extension that is. % -\def\gmu@getext#1.#2\@@nil{% - \def\gmu@filename{#1}% +\def\gmu@getext#1.#2\@@nil{%\UnDef + \def\gmu@filename{#1}%\UnDef \def\gmu@fileext{#2}} \def\include#1{\relax @@ -2681,6 +3101,7 @@ pagella, fontspec=quiet]{gmdocc} \def\@include#1 {% \gmu@getext#1.\@@nil + % \UnDef \ifx\gmu@fileext\empty\def\gmu@fileext{tex}\fi \clearpage \if@filesw @@ -2751,11 +3172,10 @@ pagella, fontspec=quiet]{gmdocc} % \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 |\-|. -\DeclareRobustCommand\fakescaps[1]{{% - \gmu@scapss#1\@@nil}} +% adding redefinition of |\\| caused stack overflow. Note it +% disallows hyphenation except at |\-|. + +\pdef\fakescaps#1{{\gmu@scapss#1\@@nil}} \let\fakescapscore\gmu@scalematchX @@ -2766,7 +3186,7 @@ pagella, fontspec=quiet]{gmdocc} % wg |\zf@calc@scale| pakietu \pk{fontspec}. -\@ifXeTeX{% +\@ifpackageloaded{fontspec}{% \def\gmu@scalar{1.0}% \def\zf@scale{}% \def\gmu@scalematchX{% @@ -2779,7 +3199,7 @@ pagella, fontspec=quiet]{gmdocc} \divide\@tempdimb by1000\relax \divide\@tempdima by\@tempdimb \setlength{\@tempdima}{\@tempdima*\real{\gmu@scalar}}% - \@ifundefined{fakesc@extrascale}{}{% + \gm@ifundefined{fakesc@extrascale}{}{% \setlength{\@tempdima}{\@tempdima*\real{\fakesc@extrascale}}}% \@tempcnta=\@tempdima \divide\@tempcnta by 1000\relax @@ -2802,7 +3222,7 @@ pagella, fontspec=quiet]{gmdocc} % To generate a~phrase as in the header depending of whether the % respective label is before of after. \newcommand*\wyzejnizej[1]{% - \edef\gmu@tempa{\@ifundefined{r@#1}{\arabic{page}}{% + \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 @@ -2817,7 +3237,7 @@ pagella, fontspec=quiet]{gmdocc} % ``rozbija\cacute\ [sk\l ad] na papierki''---`to broaden [leading] with % paper scratches'. -\def\napapierkistretch{0,3pt}% It's quite much for 11/13pt typesetting +\def\napapierkistretch{0,3pt}% It's quite much for 11/13pt leading. \def\napapierkicore{\advance\baselineskip% by 0ptplus\napapierkistretch\relax} @@ -2848,8 +3268,9 @@ pagella, fontspec=quiet]{gmdocc} \multiply\tolerance by 2\relax \everypar{\looseness=#1\relax}}{\par} -\newcommand*\nawj{\kern0,1em\relax}% to put between parentheses and -% letters with lower … such as $j$ or $y$ in certain fonts. +\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). It begins with |\ifhmode| to be usable also at the @@ -2911,8 +3332,10 @@ pagella, fontspec=quiet]{gmdocc} \else \afterfi{% \@ifnextspace{\ppauza@skipcore}{% - \@ifnextMac\ppauza@skipcore{\unskip\discretionary{–}{–}{–}}}}% - \fi}% + \@ifnextMac\ppauza@skipcore{\unskip\discretionary{–}{–}{–}}}% + }% + \fi + }% % \pdef\ppauza{% \ifvmode \PackageError{gmutils}{% @@ -2969,208 +3392,23 @@ pagella, fontspec=quiet]{gmdocc} \@tempcnta=\numexpr\time-(\time-30)/60*60\relax \ifnum\@tempcnta<10 0\fi\the\@tempcnta} -%^^A % To push the stuff up to the header and have the after heading skip -%^^A % after the stuff -%^^A -%^^A \long\def\przeniesvskip#1{% -%^^A \edef\gmu@LastSkip{\the\lastskip}% -%^^A \vskip-\gmu@LastSkip\relax -%^^A \vspace*{0sp}% -%^^A #1\vskip\gmu@LastSkip\relax} -\@ifXeTeX{\chardef\textbullet="2022 }{\def\textbullet{$\bullet$}} +\@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}} +{\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} -% \division{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 defines -% one-letter an one-digt \CSes etc., the \TextUsage\garamath\ -% declaration redefines the quantifiers and is more Garamond Premier -% Pro-specific. -\pdef\gmath{% - \everymath{% - \def\do##1{\edef##1{{\@nx\mathit{\@xa\@gobble\string##1}}}}% - \do\A \do\a \do\B \do\b \do\c \do\C\do\d \do\D \do\e \do\E\do\f - \do\F\do\g\do\G \do\i\do\I \do\j\do\J \do\k\do\K \do\l \do\L \do\m - \do\M \do\n \do\N \do\P \do\p \do\q \do\Q \do\R \do\r - \let\sectionsign\S \do\S \do\s \do\T \do\t \do\u \do\U \do\v\do\V - \do\w \do\W \do\x \do\X \do\Y \do\y \do\z\do\Z - % - \def\do##1{\edef##1{{\@nx\mathrm{\@xa\@gobble\string##1}}}}% - \do\0\do\1\do\2\do\3\do\4\do\5\do\6\do\7\do\8\do\9% - % - %^^A\typeout{@@@@ przeszło 2897}% - \relaxen\do - \newcommand*\do[4][\mathit]{\def##2{##3{##1{\char"##4}}}}% - \do\alpha{}{03B1}% - \do[\mathrm]\Delta{}{0394}% - \do\varepsilon{}{03B5}% - \do\vartheta{}{03D1}% - \do\nu{}{03BD}% - \do\pi{}{03C0}% - \do\phi{}{03D5}% - \do[\mathrm]\Phi{}{0424}% - \do\sigma{}{03C3}% - \do\varsigma{}{03DA}% - \do\psi{}{03C8}% - \do\omega{}{03C9}% - \do\infty{}{221E}% - \do[\mathrm]\neg{\mathbin}{00AC}% - \do[\mathrm]\neq{\mathrel}{2260}% - \do\partial{}{2202}% - \do[\mathrm]\pm{}{00B1}% - \do[\mathrm]\pm{\mathbin}{00B1}% - \do[\mathrm]\sim{\mathrel}{007E}% - % - \def\do##1##2##3{\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}}% - \do\sum{\char"2211}{}% - \do\forall{\gma@quantifierhook \rotatebox[origin=c]{180}{A}% - \setbox0=\hbox{A}\setbox2=\hbox{\scriptsize x}% - \kern\dimexpr\ht2/3*2 -\wd0/2\relax}{\nolimits}% - \do\exists{\rotatebox[origin=c]{180}{\gma@quantifierhook E}}\nolimits% - % - \def\do##1##2##3{\def##1{##3{% - \mathchoice{\hbox{\rm##2}}{\hbox{\rm##2}}% - {\hbox{\rm\scriptsize##2}}{\hbox{\rm\tiny##2}}}}}% - \do\vee{\rotatebox[origin=c]{90}{<}}\mathbin - \do\wedge{\rotatebox[origin=c]{-90}{<}}\mathbin - \do\leftarrow{\char"2190}\mathrel - \do\rightarrow{\char"2192}\mathrel - \do\leftrightarrow{\char"2190\kern-0,1em \char"2192}\mathrel - % - \gmu@storespecials[\do\`\do\"\do\=]% \label{@storespecials} - \gmu@septify[\do\`12\do\"12\do\=12]% - \def\do##1##2##3{% - \catcode`##1=12\relax - \scantokens{\mathcode`##1="8000\relax - \foone{\catcode`##1=\active}{\def##1}{##3{% - \mathchoice{\hbox{\rm##2}}{\hbox{\rm##2}}% - {\hbox{\rm\scriptsize##2}}{\hbox{\rm\tiny##2}}}}% - \ignorespaces}}% to eat the lineend (scantokens acts as |\read| - % icluding line end). - \do..\mathpunct \do,,\mathpunct \do……\mathpunct - \do((\mathopen%^^A)) - \@ifundefined{resetMathstrut@}{}{% an error occured `bad mathchar - % etc.'\ because \pk{amsmath.sty} doesn't take account of - % a~possibility of `|(|' %^^A) - % being math-active. - \def\resetMathstrut@{% - \setbox\z@\hbox{% \label{gmu:leading space} \nostanza \gmdnoindent - % |%% \mathchardef\@tempa\mathcode`\(\relax|\\ - % |%% \def\@tempb##1"##2##3{\the\textfont"##3\char"}%|\\ - % |%% \expandafter\@tempb\meaning\@tempa \relax|\nostanza - (%^^A) - }% - \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@ - }}%^^A(( - \do))\mathclose - \do[[\mathopen\do]]\mathclose - \do-{\char"2212}\mathbin \do++\mathbin \do==\mathrel \do××\mathbin - \do::\mathbin \do··\mathbin \do//\mathbin \do<<\mathrel - \do>>\mathrel - \gmu@restorespecials - % - \def\do##1##2##3{\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]}% - % - \def\do##1##2{\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}}% - \def\do##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|. - }% of |\def\gmath|. - -\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}} - -\def\garamath{% - \quantifierhook{\addfontfeature{OpticalSize=800}}% - % - \def\gma@arrowdash{{% - \setbox0=\hbox{\char"2192}\copy0\kern-0,6\wd0 - \bgcolor\rule[-\dp0]{0,6\wd0}{\dimexpr\ht0+\dp0}\kern-0,6\wd0}}% - % - \def\gma@gmathhook{% - \def\do####1####2####3{\def####1{####3{% - \mathchoice{\hbox{\rm####2}}{\hbox{\rm####2}}% - {\hbox{\rm\scriptsize####2}}{\hbox{\rm\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}{}% - \do\leftarrow{\char"2190\kern-0,05em\gma@arrowdash}\mathrel - \do\rightarrow{\gma@arrowdash\kern-0,05em\char"2192}\mathrel - \do\in{\gma@quantifierhook\char"0454}\mathbin - }} - - -% \division{Typesetting dates in my memoirs} +% \subdivision{Typesetting dates in my memoirs} % A~date in the |YYYY-MM-DD| format we'll transform into % `\acro{DD mmmm YYYY}' @@ -3179,49 +3417,52 @@ pagella, fontspec=quiet]{gmdocc} % 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}). -% \Define\datef \newcommand*\polskadata{% - \def\datef##1-##2-##3##4{% - \if\relax##2\relax##3##4% + \def\gmu@datef##1-##2-##3##4,##5\gmu@datef{% + \ifx\relax##2\relax##3##4% \else - \ifnum##3##4=0\relax - \else - \ifnum##3=0\relax - \else##3% - \fi##4% - \fi + \ifnum##3\@firstofmany##40\@@nil=0\relax + \else + \ifnum0##3=0\relax + \else##3% + \fi##4% + \fi \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 - {}% + \or\ marca\or\ kwietnia\or\ maja\or\ czerwca\or\ lipca\or\ sierpnia% + \or\ września\or\ października\or\ listopada\or\ grudnia\else + {}% \fi \if\relax##1\relax\else\ \fi ##1% - \fi}% -% -% \Define\datefsl -\def\datefsl##1/##2/##3##4{% - \if\relax##2\relax##3##4% - \else - \ifnum##3##4=0\relax + \fi + \gmu@datecomma{##5}}% of \incs{gmu@datef}. + % + \def\gmu@datefsl##1/##2/##3##4,##5\gmu@datefsl{% + \if\relax##2\relax##3##4% + \else + \ifnum##3\@firstofmany##40\@@nil=0\relax \else - \ifnum##3=0\relax - \else##3% - \fi##4% + \ifnum0##3=0\relax + \else##3% + \fi##4% \fi \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 - {}% + \or\ marca\or\ kwietnia\or\ maja\or\ czerwca\or\ lipca\or\ sierpnia% + \or\ września\or\ października\or\ listopada\or\ grudnia\else + {}% \fi \if\relax##1\relax\else\ \fi ##1% - \fi}% + \fi + \gmu@datecomma{##5}}% }% of |\polskadata| +%^^A \def\datef#1-#2-#3#4{\gmu@datef#1-#2-#3#4\gmu@datef}% +%^^A \def\datefsl#1/#2/#3#4{\gmu@datefsl#1/#2/#3#4\gmu@datefsl} + \polskadata % For documentation in English: \newcommand*\englishdate{% - \def\datef##1-##2-##3##4{% + \def\gmu@datef##1-##2-##3##4,##5\gmu@datef{% \if\relax##2\relax##3##4% \else \ifcase##2\relax\or January\or February% @@ -3229,18 +3470,19 @@ pagella, fontspec=quiet]{gmdocc} \or September\or October\or November\or December\else {}% \fi - \ifnum##3##4=0\relax + \ifnum##3\@firstofmany##40\@@nil=0\relax \else \ % - \ifnum##3=0\relax + \ifnum0##3=0\relax \else##3% \fi##4% - \ifcase##3##4\relax\or st\or nd\or rd\else th\fi + \ifcase##3\@firstofmany##4\relax\@@nil\relax\or st\or nd\or rd\else th\fi \fi - \if\relax##1\relax\else,\ \fi ##1% + \ifx\relax##1\relax\else,\ \fi ##1% \fi - }% - \def\datefsl##1/##2/##3##4{% + \gmu@datecomma{##5}}% +% + \def\gmu@datefsl##1/##2/##3##4,##5\gmu@datefsl{% \if\relax##2\relax##3##4% \else \ifcase##2\relax\or January\or February% @@ -3248,33 +3490,45 @@ pagella, fontspec=quiet]{gmdocc} \or September\or October\or November\or December\else {}% \fi - \ifnum##3##4=0\relax + \ifnum##3\@firstofmany##40\@@nil=0\relax \else \ % - \ifnum##3=0\relax + \ifnum0##3=0\relax \else##3% \fi##4% - \ifcase##3##4\relax\or st\or nd\or rd\else th\fi + \ifcase##3\@firstofmany##4\relax\@@nil\relax\or st\or nd\or rd\else th\fi \fi \if\relax##1\relax\else,\ \fi ##1% \fi - }% + \gmu@datecomma{##5}}% } + +\def\gmu@datecomma#1{% sometimes we want to typeset something like `11 + % września, czwartek' so we add handling for comma in the + % \incs{ldate}'s argument. + \ifx\gmu@datecomma#1\gmu@datecomma\else + ,\gmu@stripcomma#1% + \fi +}% of |\gmu@datecomma| + +\def\gmu@stripcomma#1,{#1} + + \newif\ifgmu@dash \def\gmu@ifnodash#1-#2\@@nil{% - \def\@tempa{#2}% - \ifx\@tempa\@empty} + \def\gmu@tempa{#2}% + \ifx\gmu@tempa\@empty} -\def\gmu@testdash#1\ifgmu@dash{% +\pdef\gmu@testdash#1\ifgmu@dash{% \gmu@ifnodash#1-\@@nil \gmu@dashfalse \else \gmu@dashtrue \fi \ifgmu@dash} -% A~word of explanation to the above pair of macros. |\gmu@testdash| +% A~word of explanation to the pair of macros above. |\gmu@testdash| % sets |\iftrue| the |\ifgmu@dash| switch if the argument contains an % explicit |-|. To learn it, an auxiliary |\gmu@ifdash| macro is used % that expands to an open (un|\fi|ed) |\ifx| that tests whether the @@ -3306,24 +3560,38 @@ pagella, fontspec=quiet]{gmdocc} % Dates for memoirs to be able to typeset them also as diaries. \newif\ifdate %^^A|%\newcounter{dateinsection}[section]| -\newcommand*{\data}[1]{% - \ifdate\gmu@testdash#1\ifgmu@dash\datef#1\else\datefsl#1\fi\fi} +\pdef\bidate#1{% + \ifdate\gmu@testdash#1% + \ifgmu@dash + \gmu@datef#1,\gmu@datef + \else + \gmu@datefsl#1,\gmu@datefsl + \fi\fi} -\newcommand*{\linedate}[1]{\par\ifdate\addvspace{\dateskip}% - \date@line{\footnotesize\itshape \date@biway{#1}}% +\pdef\linedate{\@ifstar\linedate@@\linedate@} +\pdef\linedate@@#1{\linedate@{--{}{}#1}} +\pdef\linedate@#1{\par\ifdate\addvspace{\dateskip}% + \date@line{\footnotesize\itshape \bidate{#1}}% \nopagebreak\else%|%\ifnum\arabic{dateinsection}>0\dekbigskip\fi| \addvspace{\bigskipamount}% \fi}% end of |\linedate|. \let\dateskip\medskipamount -\def\date@biway#1{% - \gmu@testdash#1\ifgmu@dash\datef#1\else\datefsl#1\fi} - -\newcommand*\rdate[1]{\let\date@line\rightline \linedate{#1}} -\newcommand*\ldate[1]{\let\date@line\leftline \linedate{#1}} +%^^A \pdef\date@biway#1{% +%^^A \gmu@testdash#1% +%^^A \ifgmu@dash\gmu@datef#1\gmu@datef +%^^A \else\gmu@datefsl#1\gmu@datefsl +%^^A \fi} + +\pdef\rdate{\let\date@line\rightline \linedate} +\pdef\ldate{%\changes{v0.94}{2008/09/06}{\cs{leftline} + % replaced with \cs{par}…\cs{par} to work well with \pk{floatflt}} + \def\date@line##1{\par{\raggedright##1\par}}% + \linedate} \newcommand*\runindate[1]{% - \paragraph{\footnotesize\itshape \datef#1\@@nil}\stepcounter{dateinsection}} + \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 @@ -3420,18 +3688,6 @@ pagella, fontspec=quiet]{gmdocc} -% \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 @@ -3561,6 +3817,24 @@ pagella, fontspec=quiet]{gmdocc} % Now write |\xathousep{\numexpr 10*9*8*7*6*120}| to get % \xathousep{\numexpr 90*8*7*6*120}. +\def\shortthousep{% + \pdef\thous{% + \ifmmode\hbox\bgroup\@gmu@mmhboxtrue\fi + \afterassignment\thous@inner + \@tempcnta=}%^^A} + % + \def\thous@inner{% + \ifnum\@tempcnta<0 $-$% + \@tempcnta=-\@tempcnta + \fi + \xathousep\@tempcnta + \if@gmu@mmhbox\egroup + \else\afterfi{\@ifnextcat a\space{}}% + \fi}% +}% 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{Storing and restoring the catcodes of specials} @@ -3636,11 +3910,23 @@ pagella, fontspec=quiet]{gmdocc} % \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} +% % \PrintChanges\PrintIndex %\NoEOF % (For my GNU Emacs:) %%% Local Variables: %%% mode: doctex -%%% TeX-master: "../../../../LaTeX/TeXGuru/gmutils/gmutilsDoc.tex" +%%% coding: utf-8 %%% End: |