diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/gmutils/gmutils.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/gmutils/gmutils.sty | 7203 |
1 files changed, 98 insertions, 7105 deletions
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'. |