diff options
author | Norbert Preining <preining@logic.at> | 2007-11-20 07:34:58 +0000 |
---|---|---|
committer | Norbert Preining <preining@logic.at> | 2007-11-20 07:34:58 +0000 |
commit | 05a46ca1f7bede5c9e2b7ee6e06c545a91589b53 (patch) | |
tree | 417b77b46d20942320684c72f4d7cdb06cfa08da /Master/texmf-dist/tex/latex/gmutils | |
parent | 9c6029bdd07b862c0355f18460e5c540cfa7e792 (diff) |
update gmutils (07-11-20)
git-svn-id: svn://tug.org/texlive/trunk@5521 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/gmutils')
-rw-r--r-- | Master/texmf-dist/tex/latex/gmutils/gmutils.sty | 1235 |
1 files changed, 1031 insertions, 204 deletions
diff --git a/Master/texmf-dist/tex/latex/gmutils/gmutils.sty b/Master/texmf-dist/tex/latex/gmutils/gmutils.sty index 4732dc42dfe..8793dbcf664 100644 --- a/Master/texmf-dist/tex/latex/gmutils/gmutils.sty +++ b/Master/texmf-dist/tex/latex/gmutils/gmutils.sty @@ -42,11 +42,13 @@ % \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} % \NeedsTeXFormat{LaTeX2e} \ProvidesPackage{gmutils} - [2007/04/28 v0.80 some rather TeXnical macros, some of them tricky (GM)] + [2007/11/16 v0.85 some rather TeXnical macros, some of them tricky (GM)] % % \tableofcontents @@ -65,11 +67,12 @@ % For details just read the code part. % % \begin{gmlonely} -% \subdivision{Installation} -% -% 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. +% \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. @@ -78,12 +81,13 @@ % \subdivision{Contents of the \pk{gmutils.zip} Archive} % % The distribution of the \pk{gmutils} package consists of the -% following four files. +% following four files and a~\acro{TDS}-compliant archive. % \begin{verse} % \pk{gmutils.sty}\\ % \pk{README}\\ % \pk{gmutilsDoc.tex}\\ -% \pk{gmutilsDoc.pdf} +% \pk{gmutilsDoc.pdf}\\ +% \pk{gmutils.tds.zip} % \end{verse} % % \begin{gmlonely} @@ -116,7 +120,7 @@ % % % \division{A~couple of abbreviations} -% \CodeDefine\@xa \CodeDefine\@nx +% \Define\@xa \Define\@nx \let\@xa\expandafter \let\@nx\noexpand @@ -128,7 +132,7 @@ % 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) \CodeDefine\newgif +% 139--150) \Define\newgif \def\newgif#1{% {\escapechar\m@ne \global\let#1\iffalse @@ -139,7 +143,7 @@ % |\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. -% \CodeDefIndex\@gif +% \DefIndex\@gif \def\@gif#1#2{% \@xa\gdef\csname\@xa\@gobbletwo\string#1% g% the letter $g$ for `|\global|'. @@ -157,7 +161,7 @@ % Note that it's just a~shorthand. |\global\if|\<switch>|true/false| % \emph{does} work as expected. -% \CodeDefine\grefstepcounter +% \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|. @@ -176,7 +180,7 @@ % \dekmedskip % % Another shorthand. It may decrease a~number of |\expandafter|s e.g. -% \CodeDefine\glet +% \Define\glet \def\glet{\global\let} @@ -184,36 +188,40 @@ % 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: -% \CodeDefine\gaddtomacro +% \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: -% \CodeDefine\addto@macro +% \Define\addto@macro \long\def\addto@macro#1#2{% \toks@\@xa{#1#2}% \edef#1{\the\toks@}% }%(|\toks@| is a~scratch register, namely |\toks0|.) % And for use in the very document, -% \CodeDefine\addtomacro +% \Define\addtomacro \let\addtomacro=\addto@macro -%\CodeDefine\@emptify \CodeDefine\emptify +% \Define\addtotoks +\long\def\addtotoks#1#2{% + #1=\@xa{\the#1#2}} + +%\Define\@emptify \Define\emptify \newcommand*\@emptify[1]{\let#1=\@empty} \@ifdefinable\emptify{\let\emptify\@emptify} % Note the two following commands are in fact one-argument. -%\CodeDefine\g@emptify \CodeDefine\gemptify +%\Define\g@emptify \Define\gemptify \newcommand*\g@emptify{\global\@emptify} \@ifdefinable\gemptify{\let\gemptify\g@emptify} -% \CodeDefine\@relaxen \CodeDefine\relaxen +% \Define\@relaxen \Define\relaxen \newcommand*\@relaxen[1]{\let#1=\relax} \@ifdefinable\relaxen{\let\relaxen\@relaxen} % Note the two following commands are in fact one-argument. -% \CodeDefine\g@relaxen \CodeDefine\grelaxen +% \Define\g@relaxen \Define\grelaxen \newcommand*\g@relaxen{\global\@relaxen} \@ifdefinable\grelaxen{\let\grelaxen\g@relaxen} @@ -223,11 +231,11 @@ % usually too little: usually it needed setting |\showboxdepth| and % |\showboxbreadth| to some positive values. So, % -% \CodeDefine\gmshowlists +% \Define\gmshowlists % \changes{v0.59}{06/09/04}{moved here from \pk{gmdoc}} \def\gmshowlists{\showboxdepth=1000 \showboxbreadth=1000 \showlists} -% \CodeDefine\nameshow +% \Define\nameshow \newcommand*\nameshow[1]{\@xa\show\csname#1\endcsname} @@ -235,11 +243,11 @@ % 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 -% \CodeDefine\xiistring +% \Define\xiistring % \changes{v0.59}{06/09/04}{moved here from \pk{gmdoc}} \def\xiistring#1{% - \if\@nx#1\twelvespace - \twelvespace + \if\@nx#1\xiispace + \xiispace \else \string#1% \fi} @@ -247,7 +255,7 @@ % \division{\cs{@ifnextcat}, \cs{@ifnextac}} % -% As you guess, we |\def| |\@ifnextcat| \`a~la |\@ifnextchar|, see +% 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 @@ -258,16 +266,17 @@ % not protected and therefore it shall be expanded if it's % a~macro. Because an assignment is involved, you can't test whether % the next token is an active char. -%\CodeDefine\@ifnextcat + +\long\def\@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\*}} -\long\def\@ifnextcat#1#2#3{% +% \HideDef \def\reserved@d{#1}% \def\reserved@a{#2}% \def\reserved@b{#3}% \futurelet\@let@token\@ifncat} -% \CodeDefIndex\@ifncat +% \ResumeDef \def\@ifncat{% \ifx\@let@token\@sptoken \let\reserved@c\@xifncat @@ -282,19 +291,53 @@ {\def\:{\let\@sptoken= } \: % this makes |\@sptoken| a space token. - % \CodeDefIndex\@xifncat + % \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}. + +\long\def\@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\*}} +% \HideDef + \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 + \let\reserved@c\reserved@b + \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. -% \CodeDefine\@ifnextac +% \Define\@ifnextac % \changes{v0.75}{2007/01/11}{added} % \long\def\@ifnextac#1#2{% @@ -313,13 +356,13 @@ % a~space. The assignment needs a~little trick (\TeXbook\ appendix D) % since |\let|'s syntax includes one optional space after |=|. % -\let\@tempa\*% +\let\gmu@reserveda\*% \def\*{% - \let\*\@tempa + \let\*\gmu@reserveda \let\gm@letspace= }% \* % -% \CodeDefine\@ifnextspace +% \Define\@ifnextspace \def\@ifnextspace#1#2{% \let\@reserveda\*% \def\*{% @@ -329,7 +372,8 @@ \fi}% \futurelet\@let@token\*} % First use of this macro is for an active |-| that expands to |---| -% if followed by a~space. +% if followed by a~space. Another to make dot checking whether is +% followed by |~| without gobbling the space if it occurs instead. % \division{\cs{afterfi} and Pals} @@ -354,8 +398,8 @@ % |^^M|\catother. To avoid pollution write % \[|\if..\afterfi{\bgroup\@makeother\^^M\egroup}\fi|\,.\] % -% \CodeDefine\afterfi \CodeDefine\afterfifi -% \CodeDefine\afteriffifi +% \Define\afterfi \Define\afterfifi +% \Define\afteriffifi \long\def\afterfi#1#2\fi{\fi#1} % And two more of that family: @@ -395,7 +439,7 @@ % \begingroup\@endpefalse\reserved@a} %\end{verbatim} % -% \CodeDefine\@begnamedgroup +% \Define\@begnamedgroup \@ifdefinable\@begnamedgroup{\relax} \def\@begnamedgroup#1{% \@ignorefalse% not to ignore blanks after group @@ -408,17 +452,17 @@ % will act as |\relax|.) % For back compatibility with my earlier works -% \CodeDefine\bnamegroup -% \CodeDefine\enamegroup +% \Define\bnamegroup +% \Define\enamegroup \let\bnamegroup\@begnamedgroup % And for the ending \def\enamegroup#1{\end{#1}} % And we make it the starred version of |\begin|. % \begin{DoIndex}{\begin} -% \CodeDefine\old@begin \CodeDefine\begin +% \Define\old@begin \Define\begin \let\old@begin\begin - % \CodeDefine*\begin* + % \Define*\begin* \def\begin{\@ifstar{\@begnamedgroup}{\old@begin}} % \end{DoIndex} @@ -476,7 +520,7 @@ % (Since |\DeclareRobustCommand| % doesn't issue an error if its argument has been defined and it only % informs about redefining, loading \pk{relsize} remains allowed.) -% \CodeDefine\relsize +% \Define\relsize \DeclareRobustCommand*\relsize[1]{% \ifmmode \@nomath\relsize\else \begingroup @@ -504,18 +548,18 @@ \rs@size@warning{large}{\string\Huge}\Huge \fi\fi}% end of |\relsize|. -% \CodeDefine\rs@size@warning +% \Define\rs@size@warning \providecommand*\rs@size@warning[2]{\PackageWarning{gmutils (relsize)}{% Size requested is too #1.\MessageBreak Using #2 instead}} -% \CodeDefine\rs@unknown@warning +% \Define\rs@unknown@warning \providecommand*\rs@unknown@warning{\PackageWarning{gmutils (relsize)}{Current font size is unknown! (Why?!?)\MessageBreak Assuming \string\normalsize}} % And a~handful of shorthands: % -% \CodeDefine\larger \CodeDefine\smaller \CodeDefine\textlarger -% \CodeDefine\textsmaller \CodeDefine\largerr \CodeDefine\smallerr +% \Define\larger \Define\smaller \Define\textlarger +% \Define\textsmaller \Define\largerr \Define\smallerr \DeclareRobustCommand*\larger[1][\@ne]{\relsize{+#1}} \DeclareRobustCommand*\smaller[1][\@ne]{\relsize{-#1}} \DeclareRobustCommand*\textlarger[2][\@ne]{{\relsize{+#1}#2}} @@ -532,66 +576,71 @@ % Just see the below usage of this macro `with \TeX's eyes', as my % \TeX\ Guru taught me. % -% \CodeDefine\firstofone \long\def\firstofone#1{#1} +% The next command, |\foone|, is intended as two-argument for +% shortening of the |\bgroup...\firstofone{\egroup...}| hack. +% +\long\def\foone#1{\bgroup#1\egroupfirstofone} +% \UnDef +\long\def\egroupfirstofone#1{\egroup#1} + +\long\def\fooatletter{\foone\makeatletter} + + + % And this one is defined, I~know, but it's not |\long| with the % standard definition. -% \CodeDefine\gobble\CodeDefine\gobbletwo +% \Define\gobbletwo \long\def\gobble#1{} \let\gobbletwo\@gobbletwo -% \CodeDefine\subs -\bgroup\catcode`\_=8 % -\firstofone{\egroup - \let\subs=_} +% \Define\subs +\foone{\catcode`\_=8 }% +{\let\subs=_} + +\foone{\@makeother\_}% +{\def\xiiunder{_}} + +\@ifundefined{XeTeXversion}{}{% + \def\xiiunder{\char"005F }% + \let\_\xiiunder} -% \CodeDefine\twelveunder -\bgroup\@makeother\_% -\firstofone{\egroup - \def\twelveunder{_}} % Now, let's define such a~smart |_| (underscore) which will be usual % |_|${}_8$ in the math mode and |_|\catother\ (`other') outside math. -% \CodeDefine\smartunder -% \changes{v0.60}{06/09/05}{\cs{\_} instead of \cs{twelveunder}} -\bgroup\catcode`\_=\active -\firstofone{\egroup +% \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 |\_| not just as -% |\twelveunder| because some font encodings don't have |_| at the +% |\xiiunder| because some font encodings don't have |_| at the % |\char`\_| position. % % \CodeEscapeChar\! -% \CodeDefine\bslash \CodeDefine\twelvebackslash -\begingroup\catcode`\!=0 -\@makeother\\ -!firstofone{!endgroup% - !newcommand*!twelvebackslash{\}} +% \Define\bslash \Define\xiibackslash +\foone{\catcode`\!=0 + \@makeother\\} +{!newcommand*!xiibackslash{\}} %^^A] balancing braces for Emacs % \CodeEscapeChar\\ -\@ifundefined{bslash}{\let\bslash=\twelvebackslash}{} +\@ifundefined{bslash}{\let\bslash=\xiibackslash}{} -% \CodeDefine\twelvepercent % \begin{oldmc} -\begingroup \@makeother\% -\firstofone{\endgroup - \def\twelvepercent{%}} +\foone{\@makeother\%} +{\def\xiipercent{%}} % \end{oldmc} -% \CodeDefine\twelveand -\begingroup \@makeother\&% -\firstofone{\endgroup% - \def\twelveand{&}} +\foone{\@makeother\&}% +{\def\xiiand{&}} -% \CodeDefine\twelvespace -\begingroup\@makeother\ % -\firstofone{\endgroup% -\def\twelvespace{ }} +\foone{\@makeother\ }% +{\def\xiispace{ }} %\division{Metasymbols} % I~fancy also another Knuthian trick for typesetting \<metasymbols> @@ -607,7 +656,7 @@ % which has no patterns associated with it and use this to typeset the words within % the angle brackets. % \end{quotation} -% \CodeDefine\meta \CodeDefIndex\l@nohyphenation +% \Define\meta \DefIndex\l@nohyphenation \ifx\l@nohyphenation\undefined \newlanguage\l@nohyphenation \fi @@ -625,7 +674,7 @@ \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. -% \CodeDefIndex\meta@hyphen@restore +% \DefIndex\meta@hyphen@restore \edef\meta@hyphen@restore{% \hyphenchar\the\font\the\hyphenchar\font}% \hyphenchar\font\m@ne @@ -635,7 +684,7 @@ }\ensuremath\rangle } -% \CodeDefIndex\meta@font@select +% \DefIndex\meta@font@select % \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| @@ -646,7 +695,7 @@ % The below |\meta|'s drag\footnote{Think of the drags that transform ^^B % a~very nice but rather standard `auntie' (`Tante' in Deutsch) into ^^B( % a~most adorable Queen ;-)\,.} is a~version of \TeXbook's one. -% \CodeDefine*{\<...>} +% \Define*{\<...>} \def\<#1>{\meta{#1}} % \division{Macros for Printing Macros and Filenames} @@ -657,7 +706,7 @@ % a~linebreak just before nor just after themselves. The % |\discretionary| \TeX\ primitive has three arguments: |#1| `before % break', |#2| `after break', |#3| `without break', remember? -% \CodeDefine\discre \CodeDefine\discret +% \Define\discre \Define\discret \def\discre#1#2#3{\kern0sp\discretionary{#1}{#2}{#3}\penalty10000\hskip0sp\relax} \def\discret#1{\kern0sp\discretionary{#1}{#1}{#1}\penalty10000\hskip0sp\relax} @@ -665,14 +714,14 @@ % has its original meaning inside math. \def\:{\ifmmode\afterfi{\mskip\medmuskip}\else\afterfi{\discret{}}\fi} -% \CodeDefine\vs +% \Define\vs \newcommand*{\vs}{\discre{\textvisiblespace}{}{\textvisiblespace}} % 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). % -% \CodeDefine\printspaces +% \Define\printspaces %^^A\def\printspaces#1{\gm@printspaces#1\@@nil} %^^A CodeDefIndex\gm@printspaces % ^^A~originally it has a~version with the argument delimited with / @@ -680,21 +729,21 @@ % ^^A A~test: \printspaces{Ala ma kota }\par % ^^A \printspaces{Ala ma aligatora} \def\printspaces#1{{\let~=\vs \let\ =\vs \gm@pswords#1 \@@nil}} -% \CodeDefIndex\gm@pswords +% \DefIndex\gm@pswords \def\gm@pswords#1 #2\@@nil{% - \if\relax#1\relax\else#1\fi - \if\relax#2\relax\else\vs\penalty\hyphenpenalty\gm@pswords#2\@@nil\fi}% note + \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 |\gm@pswords| the argument string is % not extended with a~guardian space: it has been already by % |\printspaces|. -% \CodeDefine\sfname \CodeDefine\file +% \Define\sfname \Define\file \DeclareRobustCommand*\sfname[1]{\textsf{\printspaces{#1}}} \let\file\sfname% it allows the spaces in the filenames (and prints % them as \vs). % The below macro I~use to format the packages' names. -% \CodeDefine\pk \CodeDefine\file +% \Define\pk \Define\file \DeclareRobustCommand*{\pk}[1]{\textsf{\textup{#1}}} % Some (if not all) of the below macros are copied from \pk{doc} @@ -705,16 +754,22 @@ % calls |\ttfamily| not |\tt| to be usable in headings which are % boldface sometimes. % -% \CodeDefine\cs +% \Define\cs \DeclareRobustCommand*{\cs}[2][\bslash]{{% \def\-{\discretionary{{\rmfamily-}}{}{}}% \def\{{\char`\{}\def\}{\char`\}}\ttfamily #1#2}} -% \CodeDefine\env +% \Define\env % \changes{v0.66}{06/09/29}{the braces removed} \DeclareRobustCommand*{\env}[1]{\cs[]{#1}} + +% And for the special sequences like |^^A|: +\foone{\@makeother\^} + {\DeclareRobustCommand*\hathat[1]{\cs[^^]{#1}}} + + % And one for encouraging linebreaks e.g., before long verbatim words. -% \CodeDefine\possfil +% \Define\possfil \newcommand*\possfil{\hfil\penalty1000\hfilneg} % The five macros below are taken from the \pk{ltxdoc.dtx}. @@ -724,32 +779,32 @@ % syntax. (This second form may even be used when |\foo| is % |\outer|).\end{quotation} % -% \CodeDefine\cmd +% \Define\cmd \def\cmd#1{\cs{\@xa\cmd@to@cs\string#1}} -% \CodeDefIndex\cmd@to@cs +% \DefIndex\cmd@to@cs \def\cmd@to@cs#1#2{\char\number`#2\relax} % |\marg{text}| prints \marg{text}, `mandatory argument'. -% \CodeDefine\marg +% \Define\marg \def\marg#1{{\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}} % |\oarg{text}| prints \oarg{text}, `optional argument'. % Also |\oarg[text]| does that. -% \CodeDefine\oarg +% \Define\oarg \def\oarg{\@ifnextchar[\@oargsq\@oarg} %^^A] \def\@oarg#1{{\ttfamily[}\meta{#1}{\ttfamily]}} \def\@oargsq[#1]{\@oarg{#1}} % |\parg{te,xt}| prints \parg{te,xt}, `picture mode argument'. -% \CodeDefine\parg +% \Define\parg \def\parg{\@ifnextchar(\@pargp\@parg} %^^A) \def\@parg#1{{\ttfamily(}\meta{#1}{\ttfamily)}} \def\@pargp(#1){\@parg{#1}} % But we can have all three in one command. -% \CodeDefine\arg +% \Define\arg \AtBeginDocument{% \let\math@arg\arg \def\arg{\ifmmode\math@arg\else\afterfi{% @@ -760,11 +815,19 @@ % \division{Storing and Restoring the Meanings of CSs} % +% First a~Boolean switch af globalness of assignments and +% its verifier. +\newif\ifgmu@SMglobal + +\def\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 meanig % back (when grouping is not recommended): % -%\CodeDefine\StoreMacro +%\Define\StoreMacro %\changes{v0.61}{06/09/05}{added.} %\changes{v0.67}{06/10/11}{enriched with \cs{makeatletter}} \def\StoreMacro{% @@ -774,12 +837,25 @@ \long\def\egStore@MacroSt#1{\egroup\Store@MacroSt{#1}} \long\def\Store@Macro#1{% - \@xa\let\csname /gml/store\string#1\endcsname#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{% - \@nx\let\@xa\@nx\csname/gml/store#1\endcsname\@xa\@nx\csname#1\endcsname} - \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 + % \cs{(Re)StoreMacro} and \cs{(Re)StoreMacro*}, that is. to allow + % writing e.g. |\StoreMacro\kitten| and then + % |\RestoreMacro*{kitten}| to restore the meaning of |\kitten|. + \@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. % @@ -791,33 +867,43 @@ % % The next command iterates over a~list of CSs and stores each of % them. The CS may be separated with commas but they don't have to. -% \CodeDefine\StoreMacros +% \Define\StoreMacros + \long\def\StoreMacros{\bgroup\makeatletter\Store@Macros} \long\def\Store@Macros#1{\egroup + \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\@tempa{\@nx#1}% My \TeX\ Guru's trick to deal with |\fi| + \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\@tempa.% a~dot finishes storing. + \if\gmu@reserveda.% a~dot finishes storing. + \global\gmu@SMglobalfalse \else - \if\@tempa,% The list this macro is put before may + \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\gml@storemacros + \afterfifi{\gmu@setSMglobal\gml@storemacros}% \fi \fi} % And for the restoring -%\CodeDefine\RestoreMacro +%\Define\RestoreMacro %\changes{v0.61}{06/09/05}{added.} %\changes{v0.67}{06/10/11}{enriched with \cs{makeatletter}} \def\RestoreMacro{% @@ -827,16 +913,25 @@ \long\def\egRestore@MacroSt#1{\egroup\Restore@MacroSt{#1}} \long\def\Restore@Macro#1{% - \@xa\let\@xa#1\csname /gml/store\string#1\endcsname} + \escapechar92 + \ifgmu@SMglobal\afterfi\global\fi + \@xa\let\@xa#1\csname /gmu/store\string#1\endcsname + \global\gmu@SMglobalfalse} \long\def\Restore@MacroSt#1{% \edef\gmu@smtempa{% - \@nx\let\@xa\@nx\csname#1\endcsname\@xa\@nx\csname/gml/store#1\endcsname} - \gmu@smtempa} - -% \CodeDefine\RestoreMacros + \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\def\RestoreMacros{\bgroup\makeatletter\Restore@Macros} + \long\def\Restore@Macros#1{\egroup + \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}. @@ -856,35 +951,58 @@ % of |\do| of course. So here is this proper definition of |\do|, % provided as a~macro (a~declaration). % -% \CodeDefine\StoringAndRelaxingDo +% \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}.} -\long\def\StoringAndRelaxingDo{% - \def\do##1{\@xa\let\csname /gml/store\string##1\endcsname##1% - \let##1\relax}} - +\long\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. % -% \CodeDefine\RestoringDo +% \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{% - \def\do##1{% - \@xa\let\@xa##1\csname /gml/store\string##1\endcsname}} + \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| becasuse the latter is defined -% in Till Tantau's \pk{beamer} class another way): +% in Till Tantau's \pk{beamer} class another way) (both arguments +% should be text): \def\n@melet#1#2{% - \edef\@tempa{% + \edef\gmu@nl@reserveda{% \let\@xa\@nx\csname#1\endcsname \@xa\@nx\csname#2\endcsname}% - \@tempa} + \gmu@nl@reserveda} + +% The |\global| prefix doesn't work with |\n@melet| so we define the +% alternative. +\def\gn@melet#1#2{% + \edef\gmu@nl@reserveda{% + \global\let\@xa\@nx\csname#1\endcsname + \@xa\@nx\csname#2\endcsname}% + \gmu@nl@reserveda} + % \division{Not only preamble!} @@ -894,7 +1012,7 @@ % commands should be rethought \IMO. -% \CodeDefine\not@onlypreamble +% \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} @@ -949,15 +1067,15 @@ % meaning of reference is extended. Such an extension also my % automatic pronouns do suggest. It's \emph{not} political % correctness, it's just respect to people's diversity. -% \CodeDefIndex*{gm@PronounGender} -% \let\do\CodeDefine +% \DefIndex*{gm@PronounGender} +% \let\do\Define % \do\gm@atppron \do\heshe \do\hisher \do\himher \do\hishers % \do\HeShe \do\HisHer \do\HimHer \do\HisHers \newcounter{gm@PronounGender} \newcommand*\gm@atppron[2]{% \stepcounter{gm@PronounGender}% remember |\stepcounter| is global. - \ifodd\arabic{gm@PronounGender}#1\else#2\fi} + \ifodd\value{gm@PronounGender}#1\else#2\fi} \newcommand*\heshe{\gm@atppron{he}{she}} \newcommand*\hisher{\gm@atppron{his}{her}} @@ -973,7 +1091,7 @@ % % It's a~contribution to \TeX's ecology \gobble(;-). You can use as % many CSs as you wish and you may use only 256 count registers -% (although in e\TeX\ there are $2^{16}$ count registers, which makes +% (although in \eTeX\ there are $2^{16}$ count registers, which makes % the following a~bit obsolete). \newcommand*\nummacro[1]{\gdef#1{0}} @@ -1053,7 +1171,7 @@ % % But let's make a~shorthand for this test since we'll use it three % times in this package and maybe also somewhere else. -% \CodeDefine\@ifnotmw +% \Define\@ifnotmw \long\def\@ifnotmw#1#2{\@ifundefined{mw@sectionxx}{#1}{#2}} \let\gmu@def\def @@ -1144,14 +1262,253 @@ \fi% of |\if\mw@HeadingWholeWidth| \fi% of |\if\mw@HeadingRunIn| } -%%%% (End of Experimente with MW sectioning.) +%^^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. +\relaxen\SetSectionFormatting +\newcommand*\SetSectionFormatting[5][\empty]{% + \ifx\empty#1\relax\else% empty (not |\empty|!) |#1| also launches |\else|. + \def\mw@HeadingRunIn{10}\def\mw@HeadingBreakBefore{10}% + \def\mw@HeadingBreakAfter{10}\def\mw@HeadingWholeWidth{10}% + \@ifempty{#1}{}{\mw@processflags#1,\relax}% If |#1| is omitted, + % the flags are left unchanged. If |#1| is given, even as [], the + % flags are first cleared and then processed again. + \fi + \@ifundefined{#2}{\@namedef{#2}{\mw@section{#2}}}{}% + \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}% + \fi} +\def\mw@secdef#1#2#3#4{% |#1| the heading name,\\ +% |%| |#2| the command distinctor, \\ +% |%| |#3| the meaning, \\ +% |%| |#4| the number of argument to error message. + \@ifempty{#3} + {\mw@secundef{#1#2}{#4}} + {\@namedef{#1#2}{#3}}} + +\def\mw@secundef#1#2{% + \@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. |\|) and second the +% stuff to be added at the beginning of the heading declarations. +\def\addtoheading#1#2{% + \n@melet{gmu@reserveda}{#1@head}% + \toks\z@=\@xa{\gmu@reserveda}% + \toks\tw@={#2}% + \edef\gmu@reserveda{\the\toks\tw@\the\toks\z@}% + \n@melet{#1@head}{gmu@reserveda}% +%^^A \@xa\show\csname#1@head\endcsname +} + +% \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 MWCLS inner macros. + \def\gmu@checkaftersec{% + \@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}% + \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 + \@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 + % |\addvspace|s. + \penalty10000 + \fi + \fi + }% of |\@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| + +%^^A% % \subdivision{Feature fix for \pk{gmdoc}} +%^^A% % +%^^A% % I'm not sure whether call it `bug' but it happens while +%^^A% % \pk{gmodc}ing that between two headers only code appears no `normal' +%^^A% % text, the commentary that is. And the code layer redefines +%^^A% % |\everypar| so the next heading `thinks' it is next to the previous +%^^A% % heading and does those special things with the skips when in +%^^A% % \pk{mwcls}. Therefore we provide two-heading skips for all the +%^^A% % headings in \pk{gmdoc} equal to the respective preskips whatever +%^^A% % those preskips may be. +%^^A% +%^^A% \@ifnotmw{}{% +%^^A% \AtBeginDocument{% +%^^A% \@ifpackageloaded{gmdoc}{% +%^^A% \def\do#1{% +%^^A% \@namedef{#1@twoheadskip}{\csname#1@preskip\endcsname}}% +%^^A% \do{part}% +%^^A% \do{section}\do{subsection}\do{subsubsection}% +%^^A% \do{paragraph}\do{subparagraph}% +%^^A% \@ifundefined{chapter}{}{\do{chapter}}% +%^^A% }{}}} +%^^A% \fi +%^^A% commented out since the additional \ifdim in line 1358 does. + +% \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}. +\def\WPheadings{% + \SetSectionFormatting[breakbefore,wholewidth] + {part}{\z@\@plus1fill}{}{\z@\@plus3fill}% + % + \@ifundefined{chapter}{}{% + \SetSectionFormatting[breakbefore,wholewidth] + {chapter} + {66\p@}% |{67\p@}|% for Adventor/Schola 0,95. + {\FormatHangHeading{\LARGE}} + {27\p@\@plus0,2\p@\@minus1\p@}% + }% + % + \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| -% % \division{Compatibilising Standard and \pk{mwcls} Sectionings} % -% If you use Marcin Woli\'nski's document classes (\pk{mwcls}), you +% 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, @@ -1191,7 +1548,7 @@ % handle \pk{mwcls}-like sectionings i.e., those written with two % optionals. \def\gm@secini{gm@la}% - % \CodeDefine\gm@secxx + % \Define\gm@secxx \def\gm@secxx#1#2[#3]#4{% \ifx\gm@secstar\@empty \n@melet{gm@true@#1mark}{#1mark}% a~little trick to allow @@ -1219,7 +1576,7 @@ % \let\gm@secmarkh\@gobble% in \pk{mwcls} there's no need to make % tricks for special version to running headings. - % \CodeDefine\gm@secxx + % \Define\gm@secxx \def\gm@secxx#1#2[#3]#4{% \@xa\@xa\csname\gm@secini#1\endcsname \gm@secstar[#2][#3]{#4}}% @@ -1229,7 +1586,7 @@ \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] +% argument. ^^A} \def\gm@straightensec#1{% the parameter is for the command's name. \@ifundefined{#1}{}{% we don't change the ontological status of the @@ -1247,17 +1604,17 @@ % 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\'nski in \pk{mwcls} defines those environments slightly +% (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.) % -% \CodeDefine*{enumerate*} +% \Define*{enumerate*} \@namedef{enumerate*}{% \ifnum\@enumdepth>\thr@@ \@toodeep @@ -1266,7 +1623,7 @@ \edef\@enumctr{enum\romannumeral\the\@enumdepth}% \@xa\list\csname label\@enumctr\endcsname{% \partopsep\topsep \topsep\z@ \leftmargin\z@ - \itemindent\@parindent %\advance\itemindent\labelsep + \itemindent\@parindent %|%\advance\itemindent\labelsep| \labelwidth\@parindent \advance\labelwidth-\labelsep \listparindent\@parindent @@ -1275,7 +1632,7 @@ \fi} \@namedef{endenumerate*}{\endlist} -% \CodeDefine*{itemize*} +% \Define*{itemize*} \@namedef{itemize*}{% \ifnum\@itemdepth>\thr@@ \@toodeep @@ -1293,6 +1650,7 @@ \@namedef{enditemize*}{\endlist} + % \division{The Logos} % % We'll modify The \LaTeX\ logo now to make it fit better to various @@ -1309,18 +1667,20 @@ % |#2| is the command, its name will be the PD1 spelling by % default,\\ % |#3| is the definition for all the font encodings except PD1. - \ifx\relax#1\def\@tempa{\@xa\@gobble\string#2}% + \ifx\relax#1\def\gmu@reserveda{\@xa\@gobble\string#2}% \else - \def\@tempa{#1}% + \def\gmu@reserveda{#1}% \fi - \edef\@tempa{% - \@nx\DeclareTextCommand\@nx#2{PD1}{\@tempa}} - \@tempa - \DeclareTextCommandDefault#2{#3}} - + \edef\gmu@reserveda{% + \@nx\DeclareTextCommand\@nx#2{PD1}{\gmu@reserveda}} + \gmu@reserveda + \DeclareTextCommandDefault#2{#3}% + \DeclareRobustCommand*#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@ @@ -1344,16 +1704,17 @@ \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'. -% \CodeDefine\LaTeXpar +% \Define\LaTeXpar \DeclareLogo[(La)TeX]{\LaTeXpar}{% {% \setbox\z@\hbox{(}%) @@ -1375,6 +1736,61 @@ \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} +\@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{% + \ensuremath{\varepsilon}-\kern-.125em\TeX}% definition sent by Karl +% Berry from \textit{TUG Boat} itself. + +\DeclareLogo[pdfe-TeX]\pdfeTeX{pdf\eTeX} + +\DeclareLogo\pdfTeX{pdf\TeX} + +%^^A\@ifXeTeX{}{} +\@ifundefined{XeTeX}{% + \DeclareLogo\XeTeX{X\kern-.125em\relax + \@ifundefined{reflectbox}{% + \lower.5ex\hbox{E}\kern-.1667em\relax}{% + \lower.5ex\hbox{\reflectbox{E}}\kern-.1667em\relax}% + \TeX}}{} + +\@ifundefined{XeLaTeX}{% + \DeclareLogo\XeLaTeX{X\kern-.125em\relax + \@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 recognize \nlpercent\cs{re\+flect\+box} +% (\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. + % \division{Expanding turning stuff all into `other'} @@ -1385,13 +1801,13 @@ % make all the name `other'. So---here we are. % % Don't use them in |\edef|s, they would expand not quite. -% \CodeDefine\unex@namedef \CodeDefine\unex@nameuse +% \Define\unex@namedef \Define\unex@nameuse % The next macro turns its |#2| all into `other' chars and assigns % them to |#1| which has to be a~CS or an active char. % -% \CodeDefine\def@other +% \Define\def@other \long\def\def@other#1#2{% \long\def\gm@def@other@tempa{#2}% @@ -1400,38 +1816,187 @@ % The next macro is intended to be put in |\edef|s with a~macro % argument. The meaning of the macro will be made all `other' and the % words '(long) macro:->' gobbled. -%\CodeDefine\all@other +%\Define\all@other \def\all@other#1{\@xa\gm@gobmacro\meaning#1} % The |\gm@gobmacro| macro above is applied to gobble the |\meaning|'s % beginnig, |long macro:->| all `other' that is. % -% \CodeDefine\gm@gobmacro -\edef\@tempa{% +% \Define\gm@gobmacro +\edef\gmu@reserveda{% \def\@nx\gm@gobmacro##1\@xa\@gobble\string\macro:->{}} -\@tempa +\gmu@reserveda % In the next two macros' names, `unex' stands both for not expanding % the argument(s) and for disastrously partial unexpandability of the % macros themselves. \long\def\unex@namedef#1#2{% - \edef@other\gmu@tempa{#1}% - \@xa\long\@xa\def\csname\gmu@tempa\endcsname{#2}} + \edef@other\gmu@reserveda{#1}% + \@xa\long\@xa\def\csname\gmu@reserveda\endcsname{#2}} \long\def\unex@nameuse#1{% - \edef@other\gmu@tempa{#1}% - \csname\gmu@tempa\endcsname} - + \edef@other\gmu@reserveda{#1}% + \csname\gmu@reserveda\endcsname} + + +% \division{Brave New World of \XeTeX} + +\newcommand\@ifXeTeX[2]{% + \@xa\ifx\csname XeTeXversion\endcsname\relax + \afterfi{#2}\else\afterfi{#1}\fi} + +%^^A \Define\withXeTeX +%^^A~\let\withXeTeX\@ifXeTeX + +\def\XeTeXthree{% + \@ifXeTeX{% +%^^A \SMglobal\StoreMacro\LaTeX +%^^A \SMglobal\StoreMacro*{LaTeX }% we want \emph{our} version +%^^A of |\LaTeX|. + \RequirePackage{fontspec}% + \RequirePackage{xunicode}% + \RequirePackage{xltxtra}% + \AtBeginDocument{% + \RestoreMacro\LaTeX\RestoreMacro*{LaTeX }}% my version of the + % \LaTeX\ logo has been stored just + % after defining, in line \ref{SMLaTeX}. + % ^^A \def\dekfracc##1/##2{\vfrac{##1}{##2}} +}{}} + + +% 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}{% + \DeclareRobustCommand*\udigits{% + \addfontfeature{Numbers=Uppercase}}% + }{% + \emptify\udigits}} + + +% \subdivision{Fractions} + +\def\Xedekfracc{\@ifstar{% +% Minion GM 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|). + \def\gmu@dekfracc########1/########2{% + {\addfontfeature{VerticalPosition=Numerator}########1}\kern-0.05em + \char"2044\kern-.05em + {\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. + \@namedef{gmu@xefracc1/4}{\char"BC\relax}% + \@namedef{gmu@xefracc1/2}{\char"BD\relax}% + \@namedef{gmu@xefracc3/4}{\char"BE\relax}% + \@namedef{gmu@xefracc1/3}{\char"2153\relax}% + \@namedef{gmu@xefracc2/3}{\char"2154\relax}% + \@namedef{gmu@xefracc1/8}{\char"215B\relax}% + \@namedef{gmu@xefracc3/8}{\char"215C\relax}% + \@namedef{gmu@xefracc5/8}{\char"215D\relax}% + \@namedef{gmu@xefracc7/8}{\char"215E\relax}% + \def\dekfracc########1/########2{% + \@ifundefined{gmu@xefracc########1/########2}{% + \gmu@dekfracc{########1}/{########2}}{% + \csname gmu@xefracc########1/########2\endcsname}}% + }{% + \def\dekfracc####1/####2{{% + \addfontfeature{Fractions=On}% + ####1/####2}}% + \let\fnfracc\dekfracc + }} +% 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 |\@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 |\@ifstar| so maybe it's subject to change.) + + +% \subdivision{\cs{resizegraphics}} +% + +\@ifXeTeX{% + \def\resizegraphics#1#2#3{{% + \setbox0=\hbox{\XeTeXpicfile #3 }% + \ifx!#1\else + \dimen0=#1\relax + \count2=\wd0 + \divide\count2 by1000\relax + \count0=\dimen0\relax + \divide\count0\count2 + \fi + \ifx!#2\else + \dimen0=#1\relax + \count6=\ht0 + \divide\count6 by1000\relax + \count4=\dimen0\relax + \divide\count4\count6 + \fi + \ifx!#1\count0=\count4\fi + \ifx!#2\count4=\count0\fi + \XeTeXpicfile #3 xscaled \count0 yscaled \count4 + }}}{% + \def\resizegraphics#1#2#3{% + \resizebox{#1}{#2}{% + \includegraphics{#3}}}}% + +% The [options] in the |\XeTeXpicfile| command use the following keywords:\\ +% |width| \<dimen>\\ +% |height| \<dimen>\\ +% |scaled| \<scalefactor>\\ +% |xscaled| \<scalefactor>\\ +% |yscaled| \<scalefactor>\\ +% |rotated| \<degrees> +% + +\def\GMtextsuperscript{% + \@ifXeTeX{% + \def\textsuperscript##1{{% + \addfontfeature{VerticalPosition=Numerator}##1}}% + }{\truetextsuperscript}} + +\def\truetextsuperscript{% + \DeclareRobustCommand*\textsuperscript[1]{% + \@textsuperscript{\selectfont##1}} + \def\@textsuperscript##1{% + {\m@th\ensuremath{^{\mbox{\fontsize\sf@size\z@##1}}}}}} %\division{Varia} % % A~very neat macro provided by \pk{doc}. I~copy it % \*|verbatim|. -% \CodeDefine\* -\DeclareRobustCommand*\*{\leavevmode\lower.8ex\hbox{$\,\widetilde{\ }\,$}} +\def\gmu@tilde{% + \leavevmode\lower.8ex\hbox{$\,\widetilde{\mbox{ }}\,$}} +% Originally there was just |\ | instead of |\mbox{ }| but some +% commands of ours do redefine |\ |. +% \Define\* +\DeclareRobustCommand*\*{\gmu@tilde} +% \Define\~ +% \changes{v0.83}{2007/08/22}{postponed to +% \cs{begin\{document\}} to avoid overwriting by a~text command and +% made sensible to a~subsequent /} + +\AtBeginDocument{% to bypass redefinition of |\~| as a~text command + % with various encodings + \DeclareRobustCommand*\~{% + \@ifnextchar/{\gmu@tilde\kern-0,1667em\relax}\gmu@tilde}} +% We prepare the proper kerning for ``\~/''. % The standard |\obeyspaces| declaration just changes the space's % |\catcode| to \catactive\ (`active'). Usually it is fairly enough @@ -1442,19 +2007,16 @@ % |\gmobeyspaces| that obeys this requirement. % % (This definition is repeated in \pk{gmverb}.) -%\CodeDefine\gmobeyspaces -\begin{catcode}`\ \active -\gdef\gmobeyspaces{\catcode`\ \active\let \ } -\end{catcode} +\foone{\catcode`\ \active}% +{\def\gmobeyspaces{\catcode`\ \active\let \ }} % 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. -% \CodeDefine\defobeylines +% \Define\defobeylines % \changes{v0.62}{06/09/07}{moved from \pk{pmlectionis.cls}} -\bgroup\catcode`\^^M\active% the comment signs here are crucial. -\firstofone{\egroup% -\def\defobeylines{\catcode`\^^M=13 \def^^M{\par}}}% +\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 @@ -1462,31 +2024,28 @@ % \changes{v0.63}{06/9/8}{Plain-like skip macros % defined: \cs{deksmall/med/bigskip} i.e., moved here from % another file} -% \CodeDefine\deksmallskip \CodeDefine\dekmedskip -% \CodeDefine\dekbigskip \CodeDefine\undeksmallskip + \def\deksmallskip{\vskip\smallskipamount} \def\undeksmallskip{\vskip-\smallskipamount} \def\dekmedskip{\vskip\medskipamount} \def\dekbigskip{\vskip\bigskipamount} -% \CodeDefine\hfillneg -% \changes{v0.80}{2007/04/28}{added} + \def\hfillneg{\hskip 0pt plus -1fill\relax} +% \changes{v0.80}{2007/04/28}{added} % 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 \marg{text}) of its argument. % -% \CodeDefine\@firstofmany -% \changes{v0.63}{06/9/9}{added} \long\def\@firstofmany#1#2\@@nil{#1} +% \changes{v0.63}{06/9/9}{added} % A~mark for the \TODO{}s: -% \CodeDefine\TODO -% \changes{v0.64}{06/9/17}{moved here from \pk{pmlectionis}} \newcommand*{\TODO}[1][]{{% \sffamily\bfseries\huge TODO!\if\relax#1\relax\else\space\fi#1}} +% \changes{v0.64}{06/9/17}{moved here from \pk{pmlectionis}} % \iffalse % The code contained in this iffalse I~wrote to make the table of @@ -1506,7 +2065,8 @@ % \def\write{\immediate\@@write}} % % % First I~used it for closing of \env{multicols} in the \file{.toc} -% % file. +% % file. Second time to make \emph{two} tables of contents containing +% % two different parts of the document % % CodeDefine\ImmediateAddtoConts % % changes{v0.65}{06/9/26}{added} % \newcommand\ImmediateAddtoConts[2]{{% @@ -1519,7 +2079,6 @@ % writing |\begin{multicols}{2}| and |\end{multicols}| outto the % \file{.toc} file but it worked wrong in some cases. So I~redefine the % internal \LaTeX\ macro instead. -% \CodeDefine\twocoltoc \CodeDefine\@starttoc \newcommand*\twocoltoc{% \RequirePackage{multicol}% \def\@starttoc##1{% @@ -1534,7 +2093,7 @@ % 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. -%\CodeDefine\enoughpage +%\Define\enoughpage \newcommand\enoughpage[1]{% \par \dimen0=\pagegoal @@ -1542,19 +2101,19 @@ \ifdim\dimen0<#1\relax\newpage\fi} % Two shorthands for debugging: -%\CodeDefine\tOnLine\CodeDefine\OnAtLine +%\Define\tOnLine\Define\OnAtLine \newcommand*\tOnLine{\typeout{\on@line}} \let\OnAtLine\on@line % An equality sign properly spaced: -% \CodeDefine\equals\CodeDefine\eequals +% \Define\equals\Define\eequals \newcommand*\equals{${}={}$} % And for the \LaTeX's pseudo-code statements: \newcommand*\eequals{${}=={}$} % The job name without extension. -% \CodeDefine\jobnamewoe +% \Define\jobnamewoe \def\gm@jobn#1.#2\@@nil{#1} \def\jobnamewoe{\@xa\gm@jobn\jobname.\@@nil}% We add the dot @@ -1577,7 +2136,7 @@ % one, we |\let| it |\relax|. As the macro does lots and lots of % assignments, it shouldn't be used in |\edef|s. % -% \CodeDefine\freeze@actives +% \Define\freeze@actives % \changes{v0.76}{2007/02/07}{added} \def\freeze@actives{% @@ -1592,7 +2151,7 @@ % A~macro that typesets all 256 chars of given font. It makes use of -% |\@whilenum|. \CodeDefine\ShowFont +% |\@whilenum|. \Define\ShowFont \newcommand*\ShowFont[1][6]{% \begin{multicols}{#1}[The current font (the \f@encoding\ encoding):] @@ -1607,10 +2166,10 @@ % 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. -% \CodeDefine\liturgiques +% \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@RP{color}% + \gmu@RPif{color}{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 @@ -1619,29 +2178,67 @@ \def\+{\czer{$\dag$}} \newcommand*\nieczer[1]{\textcolor{black}{##1}}} -% A~command that issues a~message urging to load a~package if it has -% not been loaded. -\let\gmu@RP\RequirePackage +% After the next definition you can write +% \cs{gmu@RP}\arg[options]\arg{package}\arg{csname} to get the package |#2| +% loaded with options |#1| if the csname |#3| is undefined. +\newcommand*\gmu@RPif[3][]{% + \ifx\relax#1\relax + \else \def\gmu@resa{[#1]}% + \fi + \@xa\RequirePackage\gmu@resa{#2}} -% \CodeDefine\gmu@RP +% Since inside \env{document} we cannot load a~package, we'll redefine +% |\gmu@RPif| to issue a~request before the error issued by undefined +% CS. +% \Define\gmu@RPif \AtBeginDocument{% - \renewcommand*\gmu@RP[2][]{% - \@ifpackageloaded{#2}{}{% - \typeout{^^J! Package `#2' not loaded!!! (\on@line)^^J}}}} + \renewcommand*\gmu@RPif[3][]{% + \@ifundefined{#3}{% + \@ifpackageloaded{#2}{}{% + \typeout{^^J! Package `#2' not loaded!!! (\on@line)^^J}}}{}}} % 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.\CodeDefine\continuum -\providecommand*\continuum{\gmu@RP{eufrak}\mathfrak{c}} +% \textit{Symbols} book.\Define\continuum +\providecommand*\continuum{\gmu@RPif{eufrak}{mathfrak}\mathfrak{c}} % And this macro I~saw in the \pk{ltugproc} document class nad I~liked % it. -\providecommand*\acro[1]{{\scshape\lowercase{#1}}} +\def\acro#1{\gmu@acroinner#1\gmu@acroinner} + +\def\gmu@acroinner#1{% + \ifx\gmu@acroinner#1\else + \ifcat a\@nx#1% + \ifnum`#1=\uccode`#1% + {\scshape\lowercase{#1}}% + \else{\smallerr#1}% + \fi + \else#1% + \fi + \afterfi\gmu@acroinner + \fi} + +% Since the fonts I~am currently using do not support required font +% feature, I~skip the following definition. +\iffalse +\newcommand*\acroff{% + \def\acro##1{{\addfontfeature{Letters=UppercaseSmallCaps}##1}}} +\fi \newcommand*\IMO{\acro{IMO}} \newcommand*\AKA{\acro{AKA}} +\newcommand*\qxenc{\fontencoding{QX}\selectfont} +% The |\copyright| command is unavailable in T1 and U~(unknown) +% encodings so provide +\newcommand*\qxcopyright{{\qxenc\copyright}} +\newcommand*\qxcopyrights{% + \let\gmu@copyright\copyright + \def\copyright{{\qxenc\gmu@copyright}}} + +\newcommand*\fixcopyright{% + \@ifXeTeX{\def\copyright{\char"00A9 }}{\qxcopyrights}} % Probably the only use of it is loading \pk{gmdocc.cls} `as second @@ -1656,8 +2253,234 @@ % the error message. +% Cf.\ \TeXbook exc. 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}} + +%^^A% From my first love with infinite stretchabilities +%^^A~ \def\myvfil#1/{\vskip0pt plus#1fil\relax} +%^^A~ \def\myvfill#1/{\vskip0pt plus#1fill\relax} +%^^A~ \def\myhfil#1/{\hskip0pt plus#1fil\relax} +%^^A~ \def\myhfill#1/{\hskip0pt plus#1fill\relax} + +\def\dekfracc#1/#2{\leavevmode\kern.1em + \raise.5ex\hbox{\udigits\scriptsize#1}\kern-.1em + /\kern-.15em\lower.25ex\hbox{\udigits\scriptsize#2}} + + +\def\fnfracc#1/#2{\leavevmode\kern.1em + \raise.6ex\hbox{\udigits\tiny#1}\kern-.1em + /\kern-.1em\lower.25ex\hbox{\udigits\tiny#2}} +% \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{\,\penalty10000\hskip0sp\relax} +%\changes{v0.82}{2007/07/17}{added} + +% And a~macro to forbid hyphenation of the next word: +\newcommand*\nohy{\kern\z@} + + +% \subdivision{\cs{@ifempty}} + +\long\def\@ifempty#1#2#3{% + \def\gmu@reserveda{#1}% + \ifx\gmu@reserveda\@empty\afterfi{#2}% + \else\afterfi{#3}\fi +} + + + +% \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{% + \def\gmu@filename{#1}% + \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 + \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{Faked small caps} + +\def\gmu@scapLetters#1{% + \ifx#1\relax\relax\else% two |\relax|es to cover the case of empty |#1|. + \ifcat a#1\relax + \ifnum\the\lccode`#1=`#1\relax + {\gmu@scsetup\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 |\-|. +\DeclareRobustCommand\fakescaps[2][\gmu@scalematchX]{{% + \let\gmu@scsetup=#1\gmu@scapss#2\@@nil}} + +% Experimente z~akcentami patrz no3.tex. +\def\tinycae{{\tiny\AE}}% to use in |\fakescaps[\tiny]{...}| + +\RequirePackage{calc} + +% wg |\zf@calc@scale| pakietu \pk{fontspec}. + +\@ifXeTeX{% + \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\ synthesized + % uppercase height. + \divide\@tempdimb by1000\relax + \divide\@tempdima by\@tempdimb + \setlength{\@tempdima}{\@tempdima*\real{\gmu@scalar}}% + \@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{\@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 ^^B +% used in page breaking for money} +% +% 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 typesetting + +\newenvironment*{napapierki}{% + \par\global\advance\baselineskip% + by 0ptplus\napapierkistretch\relax}{% + \par\dimen\z@=\baselineskip + \global\baselineskip=\dimen\z@}% so that you can use |\endnapapierki| + % in interlacing environments + + +\newenvironment*{luzniej}[1][1]{% + \multiply\tolerance by 2\relax + \looseness=#1\relax}{\par} + + +% The original |\pauza| of \pk{polski} has the skips rigid (one is even +% a~kern). It begins with |\ifhmode| to be usable also at the +% beginning of a~line as the mark of a~dialogue. +% \Define\pauza\Define\pauzacore\Define\shortpauza +\AtBeginDocument{% to be independent of moment of loading of \pk{polski}. + \DeclareRobustCommand*\pauza{% + \ifhmode\unskip\penalty10000\hskip0.2em plus0.1em\relax\fi + \pauzacore\hskip.2em plus0.1em\ignorespaces}} + +\def\pauzacore{---} +\def\shortpauza{% + \def\pauzacore{--\kern,23em\relax\llap{--}}} + + \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 @@ -1674,13 +2497,17 @@ % prints them very tight} % % \changes{v0.77}{2007/04/13}{\cs{afterfi} \& pals made two-argument -% as the Marcin Woli\'nski's analogoi are. At this occasion some +% 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} +% +% % \PrintChanges\PrintIndex %\NoEOF |