%% 
%% \iffalse ^^A we skip the debug setting
\IfFileExists{\string~/bin/gen_and_xela}{\errorcontextlines=1000 }{}
%% \fi
%% ^^A $Id: TheUltimateMaster.gmd,v 0.250 2010/10/24 14:42:35 natror Exp natror $
%% This is file “gmmw.sty” generated with the DocStrip utility.
%% 
%%
%% The original source files were:
%%
%% gmutils/gmutils.gmd  (with options: `mw')
%%
%% 
%% Copyright ©  
%% by Grzegorz ‘Natror’ Murzynowski
%% natror (at) o2 (dot) pl
%% 
%% This program is subject to the LaTeX Project Public License.
%% See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html
%% for the details of that license.
%%
%% LPPL status: "author-maintained".
%%
%% 
%% 
%% For the documentation please refer to the file(s)
%% gmutils.{gmd,pdf}.
%% 
%% 
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{gmmw}
    [2010/10/24 v0.993 improvements to the MWCLS classes (GM)]


%%
%%
%%     ^^A\typeout{\unexpanded{#4}}%%
\RequirePackage{gmcommand}


\AtBeginDocument{% because we don't know when exactly \pk{hyperref} is
  % loaded and maybe after this package.
  \@ifpackageloaded{hyperref}{\newcounter{NoNumSecs}%
    \setcounter{NoNumSecs}{617}% to make |\ref|ing to an unnumbered section
    % visible (and funny?).
    \def\gmu@hyperrefstepcounter{\refstepcounter{NoNumSecs}}%
    \pdef\gmu@targetheading#1{%
      \hypertarget{#1}{#1}}}% end of then
  {\def\gmu@hyperrefstepcounter{}%
    \def\gmu@targetheading#1{#1}}% end of else
}% of |\AtBeginDocument|

\def\gmu@dontnumbersectionsoutofmainmatter{%
  \if@mainmatter\else \HeadingNumberedfalse \fi}
\def\gmu@clearpagesduetoopenright{%
  \if@openright\cleardoublepage\else \clearpage\fi}

\long\def\@ifnotmw#1#2{\gmu@ifundefined{mw@sectionxx}{#1}{#2}}

\@ifnotmw{}{%
\def\mw@sectionxx#1#2[#3]#4{%
  \edef\mw@HeadingLevel{\csname #1@level\endcsname
        \space}% space delimits level number!
  \ifHeadingNumbered
      \ifnum \mw@HeadingLevel>\c@secnumdepth \HeadingNumberedfalse \fi
      % \nostanza line below is in |\gmu@ifundefined| to make it work in classes
      % other than \pk{mwbk}\nostanza
      \gmu@ifundefined{if@mainmatter}{}{\gmu@dontnumbersectionsoutofmainmatter}
  \fi
%%   \ifHeadingNumbered
%%     \refstepcounter{#1}%
%%     \protected@edef\HeadingNumber{\csname the#1\endcsname\relax}%
%%   \else
%%     \let\HeadingNumber\@empty
%%   \fi
  \def\HeadingRHeadText{#2}%
  \def\HeadingTOCText{#3}%
  \def\HeadingText{#4}%
  \def\mw@HeadingType{#1}%
  \if\mw@HeadingBreakBefore
    \if@specialpage\else\thispagestyle{closing}\fi
    \gmu@ifundefined{if@openright}{}{\gmu@clearpagesduetoopenright}%
    \if\mw@HeadingBreakAfter
      \thispagestyle{blank}\else
      \thispagestyle{opening}\fi
       \global\@topnum\z@
  \fi% of |\if\mw@HeadingBreakBefore|
%%
  \ifHeadingNumbered
    \refstepcounter{#1}%
    \protected@edef\HeadingNumber{\csname the#1\endcsname\relax}%
  \else
    \let\HeadingNumber\@empty
    \gmu@hyperrefstepcounter % we step an auxiliary counter to make a
                            % hyperref's label/target.
  \fi% of |\ifHeadingNumbered|
%%
  \if\mw@HeadingRunIn
    \mw@runinheading
  \else
    \if\mw@HeadingWholeWidth
      \if@twocolumn
        \if\mw@HeadingBreakAfter
        \onecolumn
        \mw@normalheading
        \pagebreak\relax
              \if@twoside
                \null
                \thispagestyle{blank}%
                \newpage
              \fi% of |\if@twoside|
        \twocolumn
        \else
          \@topnewpage[\mw@normalheading]%
        \fi% of |\if\mw@HeadingBreakAfter|
      \else
        \mw@normalheading
        \if\mw@HeadingBreakAfter\pagebreak\relax\fi
      \fi% of |\if@twocolumn|
    \else
      \mw@normalheading
      \if\mw@HeadingBreakAfter\pagebreak\relax\fi
    \fi% of |\if\mw@HeadingWholeWidth|
  \fi% of |\if\mw@HeadingRunIn|
  }


\relaxen\SetSectionFormatting
\newcommand*\SetSectionFormatting[5][\empty]{%
  \ifx\empty#1\relax\else% empty (not |\empty|!) |#1| also launches |\else|.\HideDef
    \def\mw@HeadingRunIn{10}\def\mw@HeadingBreakBefore{10}%
    \def\mw@HeadingBreakAfter{10}\def\mw@HeadingWholeWidth{10}%
    \gmu@ifempty{#1}{}{\mw@processflags#1,\relax}% If |#1| is omitted,
    % the flags are left unchanged. If |#1| is given, even as [], the
    % flags are first cleared and then processed again.
  \fi
  \gmu@ifundefined{#2}{\@namedef{#2}{\mw@section{#2}}}{}%
  \mw@secdef{#2}{@preskip} {#3}{2 oblig.}%
  \mw@secdef{#2}{@head}    {#4}{3 oblig.}%
  \mw@secdef{#2}{@postskip}{#5}{4 oblig.}%
  \ifx\empty#1\relax
    \mw@secundef{#2@flags}{1 (optional)}%
  \else\mw@setflags{#2}% \ResumeDef
  \fi}

\def\mw@secdef#1#2#3#4{% ^^B
  \gmu@ifempty{#3}
    {\mw@secundef{#1#2}{#4}}
    {\@namedef{#1#2}{#3}}}

\def\mw@secundef#1#2{%
  \gmu@ifundefined{#1}{%
    \ClassError{mwcls/gm}{%
      command \bslash#1  undefined \MessageBreak
      after \bslash SetSectionFormatting!!!\MessageBreak}{%
      Provide the #2 argument of \bslash SetSectionFormatting.}}{}}

\def\addtoheading#1#2{%
    \n@melet{gmu@addtoheading@resa}{#1@head}%
    \edef\gmu@addtoheading@resa{\unexpanded{#2}\@xa\unexpanded{\gmu@addtoheading@resa}}%
    \n@melet{#1@head}{gmu@addtoheading@resa}%
}

}% of |\@ifnotmw|'s else.


\@ifnotmw{}{% We proceed only in \acro{MWCLS}.

\def\@afterheading{%
  \@nobreaktrue
  \xdef\gmu@prevsec{\mw@HeadingType}% added now
  \everypar{%
    \grelaxen\gmu@prevsec% added now. All the rest is original \LaTeX.
    \if@nobreak
    \@nobreakfalse
    \clubpenalty \@M
    \if@afterindent \else
    {\setbox\z@\lastbox}%
    \fi
    \else
    \clubpenalty \@clubpenalty
    \everypar{}%
    \fi}}

\def\gmu@checkaftersec{%
  \gmu@ifundefined{gmu@prevsec}{}{%
    \ifgmu@postsec% an additional switch that is true by default but
    % may be turned into an \cs{ifdim} in special
    % cases, see line \ref{gmu@postsec}.
    {\@xa\mw@getflags\@xa{\gmu@prevsec}%
      \glet\gmu@checkaftersec@resa\mw@HeadingBreakAfter}% \UnDef
    \if\mw@HeadingBreakBefore\def\gmu@checkaftersec@resa{11}\fi% if the
    % current heading inserts page break before itself, all the play
    % with vskips is irrelevant.
    \if\gmu@checkaftersec@resa\else
    \penalty10000\relax
    \skip\z@=\csname\gmu@prevsec @postskip\endcsname\relax
    \skip\tw@=\csname\mw@HeadingType @preskip\endcsname\relax
    \gmu@ifundefined{\mw@HeadingType @twoheadskip}{%
      \ifdim\skip\z@>\skip\tw@
      \vskip-\skip\z@% we strip off the post-skip of previous
      % header if it's bigger than current pre-skip
      \else
      \vskip-\skip\tw@% we strip off the current pre-skip otherwise
      \fi}{% But if the two-header-skip is defined, we put
      % \emph{it}
      \penalty10000
      \vskip-\skip\z@
      \penalty10000
      \vskip-\skip\tw@
      \penalty10000
      \vskip\csname\mw@HeadingType @twoheadskip\endcsname
      \relax}%
    \penalty10000
    \hrule height\z@\relax% to hide the last (un)skip before subsequent
    % \incs{addvspace}s. \ilrr
    \penalty10000
    \fi
    \fi
  }% of |\gmu@ifundefined{gmu@prevsec}| `else'.
}% of |\def\gmu@checkaftersec|.

\def\ParanoidPostsec{% \label{gmu@postsec} this version of
  % \inverb|\ifgmu@postsec| is intended for the special case of
  % sections may contain no normal text, as while \pk{gmdoc}ing.
  \def\ifgmu@postsec{% note this macro expands to an open \cs{if}.
    \skip\z@=\csname\gmu@prevsec @postskip\endcsname\relax
    \ifdim\lastskip=\skip\z@\relax% we play
    % with the vskips only if the last skip is the previous
    % heading's postskip (a~counter-example I~met while
    % \pk{gmdoc}ing).
  }}

\let\ifgmu@postsec\iftrue

\def\gmu@getaddvs#1\addvspace#2\gmu@getaddvs{%
  \toks\z@={#1}%
  \toks\tw@={#2}}

\def\gmu@setheading#1{%
  \@xa\gmu@getaddvs#1\gmu@getaddvs
  \edef#1{%
    \the\toks\z@\@nx\gmu@checkaftersec
    \@nx\addvspace\the\toks\tw@}}

\gmu@setheading\mw@normalheading
\gmu@setheading\mw@runinheading

\def\SetTwoheadSkip#1#2{\@namedef{#1@twoheadskip}{#2}}

}% of |\@ifnotmw|'s else.


\@ifnotmw{}{% We define this declaration only when in \pk{mwcls}.
\DeclareCommand\WPheadings{T{\chapter}}{%
  \SetSectionFormatting[breakbefore,wholewidth]
      {part}{\z@\@plus1fill}{}{\z@\@plus3fill}%
  %
  \IfValueF{#1}{%
    \gmu@ifundefined{chapter}{}{%
      \SetSectionFormatting[breakbefore,wholewidth]
      {chapter}
      {66\p@}% |{67\p@}|% for Adventor/Schola 0,95.
      {\FormatHangHeading{\LARGE}}
      {27\p@\@plus0,2\p@\@minus1\p@}%
    }%
  }% of unless |#1|
  %
  \SetTwoheadSkip{section}{27\p@\@plus0,5\p@}%
  \SetSectionFormatting{section}
      {24\p@\@plus0,5\p@\@minus5\p@}%  ^^A {24\p@\@plus5\p@\@minus2\p@}
      {\FormatHangHeading {\Large}}
      {10\p@\@plus0,5\p@}% ed.\ Krajewska of ``Wiedza Powszechna'', as
      % we understand her, wants the skip between a~heading and text
      % to be rigid.
  %
  \SetTwoheadSkip{subsection}{11\p@\@plus0,5\p@\@minus1\p@}%
  \SetSectionFormatting{subsection}
      {19\p@\@plus0,4\p@\@minus6\p@}
      {\FormatHangHeading {\large}}% 12/14 pt
      {6\p@\@plus0,3\p@}% after-skip 6\,pt due to p.12, not to squeeze
      % the before-skip too much.
  %
  \SetTwoheadSkip{subsubsection}{10\p@\@plus1,75\p@\@minus1\p@}%
  \SetSectionFormatting{subsubsection}
      {10\p@\@plus0,2\p@\@minus1\p@}
      {\FormatHangHeading {\normalsize}}
      {3\p@\@plus0,1\p@}% those little skips should be smaller than
      % you calculate out of a~geometric progression, because the
      % interline skip enlarges them.
  %
  \SetSectionFormatting[runin]{paragraph}
      {7\p@\@plus0,15\p@\@minus1\p@}
      {\FormatRunInHeading{\normalsize}}
      {2\p@}%
  %
  \SetSectionFormatting[runin]{subparagraph}
      {4\p@\@plus1\p@\@minus0,5\p@}
      {\FormatRunInHeading{\normalsize}}
      {\z@}%
}% of |\WPheadings|
}% of |\@ifnotmw|

\@ifnotmw{% we are not in \pk{mwcls} and want to
  % handle \pk{mwcls}-like sectionings i.e., those written with two
  % optionals.
  \def\gmu@secini{gm@la}%
  \Store@Macros{%
    \partmark \chaptermark \sectionmark \subsectionmark
    \subsubsectionmark \paragraphmark}%
  % \Define\gmu@secxx
  \def\gmu@secxx#1#2[#3]#4{%
    \ifx\gmu@secstar\@empty
    % \nostanza a~little trick to allow
      % a~special version of the heading just to the running head.
      \@namedef{#1mark}##1{% we redefine \cs{\<sec>mark} to gobble its
        % argument and to launch the stored true marking command on the
        % appropriate argument.
        \storedcsname{#1mark}{#2}%
        \Restore@MacroSt{#1mark}% after we've done what we
        % wanted we restore original |\#1mark|.\ilrr
      }%
      \def\gmu@secstar{[#3]}% if |\gmu@secstar|
    % is empty, which means the sectioning command was written
    % starless, we pass the `true' sectioning command |#3| as the
    % optional argument. Otherwise the sectioning command was written
    % with star so the `true' s.c.\ takes no optional.
    \fi
    \@xa\@xa\csname\gmu@secini#1\endcsname
    \gmu@secstar{#4}}%
}{% we are in \pk{mwcls} and want to reverse MW's optionals order
  % i.e., if there's just one optional, it should go both to toc and to
  % running head.
  \def\gmu@secini{gm@mw}%
  %
  \let\gmu@secmarkh\@gobble% in \pk{mwcls} there's no need to make
  % tricks for special version to running headings.
  % \Define\gmu@secxx
  \def\gmu@secxx#1#2[#3]#4{%
    \@xa\@xa\csname\gmu@secini#1\endcsname
    \gmu@secstar[#2][#3]{#4}}%
}

\def\gmu@sec#1{\@dblarg{\gmu@secx{#1}}}
\def\gmu@secx#1[#2]{%
  \@ifnextchar[{\gmu@secxx{#1}{#2}}{\gmu@secxx{#1}{#2}[#2]}}% if

\def\gmu@straightensec#1{% the parameter is for the command's name.
  \gmu@ifundefined{#1}{}{% we don't change the ontological status of the
    % command because someone may test it.
    \n@melet{\gmu@secini#1}{#1}%
    \@namedef{#1}{%
      \gmu@ifstar{\def\gmu@secstar{*}\gmu@sec{#1}}{%
        \def\gmu@secstar{}\gmu@sec{#1}}}}%
}%

\let\do\gmu@straightensec
\do{part}\do{chapter}\do{section}\do{subsection}\do{subsubsection}
\@ifnotmw{}{\do{paragraph}}% this `straightening' of

%%% (For my GNU Emacs:)
%%% Local Variables:
%%% mode: doctex
%%% coding: utf-8
%%% End:
\endinput
%%
%% End of file `gmmw.sty'.
