% \iffalse
%   (This is a META-COMMENT.)
%
%   This is file `halloweenmath.dtx'.
%
%   This file is part of a work named "halloweenmath package".
%
%   Copyright (C) 2019 by Gustavo MEZZETTI.
%
%   This file may be distributed and/or modified under the conditions
%   of the LaTeX Project Public License, either version 1.3 of this
%   license or (at your option) any later version.
%   The latest version of this license is in
%     http://www.latex-project.org/lppl.txt
%   and version 1.3 or later is part of all distributions of LaTeX
%   version 2005/12/01 or later.
%
%   The halloweenmath package has the LPPL maintenance status
%     "author-maintained".
%
%   The file `manifest.txt' that comes along with this file specifies what the
%   halloweenmath package consists of; more precisely, it explains how the
%   locutions "Work" and "Compiled Work", used in the LaTeX Project Public
%   License, are to be interpreted in the case of this work.
%
%   Note that the distribution of this file alone is "distribution of
%   only part of the Work" in the sense of the LaTeX Project Public
%   License, and should be avoided (see the LaTeX Project Public
%   Licence for details).
%
%   (End of the META-COMMENT.)
% \fi
%
% \def\filename{halloweenmath.dtx}
% \def\fileversion{0.11}
% \def\filedate{2019/11/01}
% \def\docdate {2019/11/01}
% \def\doclongdate{November~1, 2019}
%
% \CheckSum{2262}
%
% \changes{0.01}{2017 Jan 06}{First writing of the code}
% \changes{0.10}{2017 Apr 16}{Changed the look of the broom in the extensible
%   ``arrow-like'' symbols, but retained the old one in newly added pitchforks}
% \changes{0.10}{2017 Apr 16}{Added bats (ordinary symbols and extensible 
%   ``arrow-like'' series)}
% \changes{0.10}{2017 Apr 16}{Added skulls (binary operators and ``large'' 
%   operators)}
% \changes{0.10}{2017 Apr 16}{Added ``unwitched'' extensible brooms and 
%   pitchforks}
% \changes{0.10}{2017 Apr 16}{Added ``Boo'' options}
%
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%
% \MakeShortVerb{\"}
% \DeleteShortVerb{\|}
%
% \DoNotIndex{\begin,\end,\def,\let,\else,\fi,\@ifdefinable,\@empty}
% \DoNotIndex{\newcommand,\renewcommand}
% \DoNotIndex{\newenvironment,\renewenvironment}
% \DoNotIndex{\z@,\z@skip,\p@,\@ne,\tw@,\thr@@,\@m,\@M,\m@ne}
% \DoNotIndex{\setlength,\setcounter,\addtolength}
% \DoNotIndex{\expandafter,\do,\relax,\advance,\multiply,\divide}
% \DoNotIndex{\DeclareOption,\ExecuteOptions,\ProcessOptions}
% \DoNotIndex{\",\.,\@}
% \DoNotIndex{\-,\+}
%
% \IndexPrologue{
%   \section{\indexname}
%   Numbers in italics refer to the page where the corresponding entry
%   is described, the ones underlined to the code line of the
%   definition, the rest to the code lines where the entry is used.
% }
% \setcounter{IndexColumns}{2}
%
% \GlossaryPrologue{\section{Change History}}
%
% \setcounter{StandardModuleDepth}{1}
%
% \setlength{\unitlength}{1cm}
% \definecolor{guidelines}{rgb}{0,.5,1}
% \definecolor{coverwitch}{rgb}{.1,.4,.5}
%
% \newcommand*{\DS}{\textsf{DocStrip}}
% \newcommand*{\TikZ}{Ti\emph{k}Z}
% \renewcommand*{\partname}{Part}
% \newcommand*{\halloweenmath}{halloweenmath}
% \newcommand*{\amsmath}{amsmath}
% \newcommand*{\picttwoe}{pict2e}
% \newcommand*{\textoken}[1]{\(\langle\mbox{\normalfont #1}\rangle\)}
% \makeatletter
% \newcommand*{\myspecialindex}[2]
%    {\special@index{#1\actualchar#2\encapchar main}}
% \newcounter{paramlist}
% \renewcommand*{\theparamlist}{^^A
%   \ifnum \value{paramlist}>\z@
%     \ifnum \value{paramlist}<10
%       \arabic{paramlist}^^A
%     \else
%       \@ctrerr
%     \fi
%   \fi
% }
% \newenvironment*{paramlist}{^^A
%   \setcounter{paramlist}\z@
%   \@beginparpenalty \@M \relax
%   \setlength\topsep{\z@}^^A
%   \tabbing
%   \(\mbox{\#0}\leftarrow {\,}\)\=\kill
% }{^^A
%   \endtabbing
% }
% \newcommand*{\param}{^^A
%   \stepcounter{paramlist}^^A
%   \(\mbox{\#\theparamlist}\leftarrow{}\)\>^^A
% }
% \newenvironment*{tightitemize}{^^A
%   \itemize
%     \setlength\topsep{\p@ \@plus\p@}^^A
%     \setlength\partopsep{\z@}^^A
%     \setlength\itemsep{\p@}^^A
%     \setlength\parsep{\z@ \@plus\p@}^^A
%     \setlength\parskip{\parsep}^^A
%     \setlength\@topsepadd{\topsep}^^A
%     \setlength\@topsep{\@topsepadd}^^A
% }{\enditemize}
% \newcommand{\@no@imp@StopEventually}[1]{#1\endinput}
% \newcommand*{\IfImplementation}{%
%   \ifx \StopEventually \@no@imp@StopEventually
%     \expandafter\@secondoftwo
%   \else
%     \expandafter\@firstoftwo
%   \fi
% }
% \makeatother
% \newcommand*{\counterindex}[1]{\myspecialindex{#1}{{\string\ttfamily
%    \space #1} (counter)}\index{counters:\levelchar{\protect\ttfamily
%    #1}\encapchar usage}}
% \newcommand*{\optuseindex}[1]{\SortIndex{#1}{\protect\opt{#1}
%    (option)\encapchar usage}\index{options:\levelchar
%    \protect\opt{#1}\encapchar usage}}
% ^^A REMEMBER: "\DeclareTextFontCommand" can be used only in preamble!
% \DeclareRobustCommand*{\packlass}[1]{{\normalfont\sffamily #1}}
% \DeclareRobustCommand*{\filedir} [1]{{\normalfont\ttfamily #1}}
% \DeclareRobustCommand*{\env}[1]{{\normalfont\ttfamily #1}}
% ^^A \DeclareRobustCommand*{\ctr}[]{{\normalfont\ttfamily #1}}
% \DeclareRobustCommand*{\opt}[1]{{\normalfont\ttfamily #1}}
% \newcommand*{\sopt}[1]{\mbox{\opt{#1}}\optuseindex{#1}}
% \newcommand*{\binvert}{\mathbin{|}}
% \DeclareRobustCommand*{\TeXSXFullName}{^^A
% 	\TeX \kern .13333em --\,\LaTeX\ Stack Exchange^^A
% }
% \DeclareRobustCommand*{\TeXSXAbbrev}{\TeX.SX\@}
% \DeclareRobustCommand*{\TeXSXuser}[1]{{\normalfont\sffamily #1}}
% \DeclareRobustCommand*{\TeXtok}[1]{\mbox{$\langle$#1\/$\rangle$}}
% \newcommand*{\cfr}{\TeXSXuser{cfr}}
% \newcommand*{\eg}{\emph{e.g.}, } ^^A note the space at the end
%
% \providecommand*{\href}[3][]{#3}
% \providecommand*{\pdfbookmark}[3][]{}
% \providecommand*{\nolinkurl}[1]{\url{#1}} ^^A if hyperref isn't loades,
%                                           ^^A hand over to url package
% \providecommand*{\hypersetup}{}
%
% \addtolength{\marginparwidth}{2pt}
%
% \newcommand*{\magicstar}[1]{^^A
%   \begingroup
%     \setlength\unitlength{#1\unitlength}^^A
%     \begin{picture}(0,0)^^A
%       \polygon*(0,1)(-.225,.309)(-.951,.309)(-.363,-.118)(-.588,-.809)^^A
%               (0,-.382)(.588,-.809)(.363,-.118)(.951,.309)(.225,.309)^^A
%     \end{picture}^^A
%   \endgroup
% }
%
%
%
% \title{
%    The \packlass{\halloweenmath} package:\\
%    scary and creepy math symbols\\
%    with \texorpdfstring{\hologo{AmSLaTeX}}{AMS-LaTeX}\ 
%    integration\thanks{This file has
%    version~\fileversion, release date \filedate;
%    last documentation update: \docdate.
%    Copyright \copyright~2019 by G.~Mezzetti
%    (see page~\pageref{S:Copy}).}
% }
% \author{G. Mezzetti}
% \date{\doclongdate}
%
% \hypersetup{
%   pdftitle        = {The halloweenmath package:
%                       scary and creepy math symbols
%                       with AMS-LaTeX integration},
%   pdfauthor       = {G. Mezzetti},
%   pdfsubject      = {Documentation of the halloweenmath package},
%   pdfkeywords     = {Halloween, math, scary mathematical symbols},
%   pdfcreationdate = {D:20191101120000},
%   pdfmoddate      = {D:20191101120000},
%   bookmarksopen,
%   bookmarksopenlevel = 1
% }
%
% \pdfbookmark[0]{Front Matter}{FrontMatter}
% \maketitle
%
% \begin{abstract}
%    This document describes a \LaTeX\ package that originates from a question
%    asked for enjoyment on
%    \href{https://tex.stackexchange.com/}{\emph{\TeXSXFullName}}
%    (see~\cite{bib:cfr}) by the user
%    \href{https://tex.stackexchange.com/users/39222/cfr}{\cfr}; this package
%    defines a handful of commands for typesetting mathematical symbols of
%    various kinds (including ``large'' operators, extensible arrow-like
%    relations, and growing arrow-like math accents) that all draw from the
%    classic Halloween-related iconography (pumpkins, witches, ghosts, cats, and
%    so on) while being, at the same time, seamlessly integrated within the rest
%    of the mathematics produced by \hologo{LaTeX}\slash\hologo{AmSLaTeX}.
% \end{abstract}
%
% \vfil
%
% \begin{center}
%   \color{coverwitch}
%   \begin{picture}(0,8)(0,-4)
%     \roundcap
%     \linethickness{4pt}
%     \Line(-2,-2)(6,2)
%     \linethickness{2pt}
%     \Line(-2,-2)(-5,-2.5)
%     \Line(-2,-2)(-4.85,-2.95)
%     \Line(-2,-2)(-4.6,-3.3)
%     \Line(-2,-2)(-4.35,-3.65)
%     \Line(-2,-2)(-4,-4)
%     \put(-3,-1.2){\magicstar{.4}}
%     \put(-4.1,-.8){\magicstar{.8}}
%     \put(-5.4,-1.8){\magicstar{.6}}
%     \Line(0,1.8)(-.2,1.4)
%     \polyline(.6,3.2)(.8,3)(1.5,3)
%     \put(1.6,3){\oval(.2,.2)[tl]}
%     \put(1.6,3){\oval(.2,.2)[r]}
%     \polyline(1.6,2.9)(1.8,2.4)(1.2,2.4)(1,2.5)(1,2.3)
%             (1.2,2)(1.6,1.8)(1.7,1.8)(1.7,1.6)(1.4,1.5)
%             (0,1.8)(-.2,2)
%     \Line(.2,2.8)(.6,3)
%     \polygon*(-1,2)(-2,0)(-2,-1)(-1.5,-2)(1,-2)
%             (0,-3.6)(.4,-3.8)(.6,-3.4)(.8,-4)(2,-4)
%             (1,-3.6)(1,-3)(1.6,-3.2)(2,-1.5)(0,-1)
%             (0,-.6)(1.4,-.6)(1.8,-.4)(2,0)(0,0)
%             (0,1.4)
%     \polygon*(-3,2)(-2.8,3)(-2,4)(-1.5,4.1)(-1,4)(0,3.5)
%             (1,3.8)(2.5,3.5)(3,3.3)(2,3.4)(0,3)(-1,2)(-2,1.6)
%             (-2.7,2)(-2,2)(-1,3)(-2,3.5)(-2.6,3)
%     \linethickness{.4pt}
%     \Line(1.7,1.6)(2,1.6)
%     \Line(1.7,1.6)(1.9,1.4)
%     \Line(1.7,1.6)(1.7,1.3)
%     ^^A
%     ^^A The cat:
%     \put(3.6,1){\circle*{1.2}}
%     \put(4.2,1.4){\circle*{1}}
%     \put(4.5,2){\circle*{.8}}
%     \polygon*(4.1,2)(4.1,2.5)(4.5,2.2)(4.9,2.5)(4.9,2)
%     \linethickness{4pt}
%     \cbezier(3.2,.6)(2,0)(4.2,-.4)(3,-1)
%     \buttcap
%     \linethickness{.4pt}
%     \Line(3.8,2.1)(5.2,1.9)
%     \Line(3.8,2)(5.2,2)
%     \Line(3.8,1.9)(5.2,2.1)
%   \end{picture}
% \end{center}
%
% \newpage
% \tableofcontents
% \IfImplementation{\listoffigures}{}
%
% \newpage
% \begingroup
%
%    \setlength{\parskip}{\medskipamount}
%    \setlength{\parindent}{0pt}
%
% \section*{Copyright notice}
%    \label{S:Copy}
%    \vspace{-\parskip}
%
%    Copyright \copyright~2019 by Gustavo \textsc{Mezzetti}.
%    All rights are reserved, except as noted below.
%
%    This document has been produced by feeding to a \LaTeX\ typesetting engine
%    the file \filedir{\filename} version \fileversion\ (\docdate).  This file
%    is part of a work named ``\packlass{\halloweenmath} package'', and may be
%    distributed and/or modified only as a part thereof.
%    Subsection~\ref{sS:License} on page~\pageref{sS:License} explains the
%    conditions under which the \packlass{\halloweenmath} package may be
%    distributed and/or modified.
%
%    The \packlass{\halloweenmath} package has the following LPPL maintenance 
%    status:\\
%    ``author-maintained''.
%
%    Permission is granted to make new printed copies of this document, by any
%    means (\emph{e.g.}, photocopying, direct printing from the electronic
%    version, and so on).
%
%    Note, though, that distribution of this document alone is ``distribution of
%    only part of the Work'' in the sense of the \LaTeX\ Project Public License,
%    and should therefore be avoided: please distribute, in addition, the source
%    file \filedir{\halloweenmath.dtx} together with all other files listed in
%    \filedir{manifest.txt}, as explained as well in Subsection~\ref{sS:License}
%    and in the file \filedir{manifest.txt} itself.
%
% \section*{Author's addresses}
% \label{S:MyAddresses}
%    \vspace{-\parskip}
%
%    The recommended way to contact the author is by e-mail; his address is:
%
%    \begin{list}{\setlength{\topsep}{0pt}}\item\relax
%      gustavo dot mezzetti at istruzione dot it
%    \end{list}
%
%    Please include the \emph{exact} phrase \verb*|halloweenmath package| in the
%    \emph{subject} of your message; otherwise, your message could be
%    thrown away by a mail filter.  In this regard, the weakness of the
%    laws concerning the protection of privacy forces me to explicitly
%    forbid the use of the above address for any kind of advertising,
%    marketing, polling, or similar commercial or statistical contact.
%
%    If you have no e-mail access, write to:
%
%    \begin{list}{\setlength{\topsep}{0pt}}\item\relax
%      Gustavo \textsc{Mezzetti}\\
%      L.~S.~U. ``A.~di Savoia Duca d'Aosta''\\
%      Via del Santo, 57\\
%      I--35123\quad PADOVA\quad PD\\
%      Italy
%    \end{list}
%
% \endgroup
%
%
%
% \setcounter{secnumdepth}{0}
%
%
%
% \clearpage
% \section{Introduction}
%
%    On October~31, 2016, around 3 in the morning (GMT\@), user
%    \href{https://tex.stackexchange.com/users/39222/cfr}{\cfr} asked a
%    question~\cite{bib:cfr} on the
%    \href{https://tex.stackexchange.com/}{\emph{\TeXSXFullName} network},
%    challenging other users to contribute \LaTeX\ documents that showcased
%    ``the spookiest, creepiest images'' ever possible.  I~was aware of a
%    method---well known, nonetheless---to integrate arbitrary pictures into
%    math formulas as though they were mathematical symbols, so, on the pretext
%    ``that, since \hologo{(La)TeX} is a language primarily designed to handle
%    text with math, the lack of a `math-flavored'
%    answer~\ldots\linebreak[0]\,was a gap that ought to be filled'', I~wrote an
%    answer implementing a command that drew a (not particularly spooky or
%    creepy) little witch astride of her broom, but with the silly distinctive
%    feature of being seen by \LaTeX\ as a mathematical ``large'' operator like
%    "\sum", "\prod", "\int", or "\bigcup"; this first command was named
%    "\mathwitch" and was ``intended for denoting the operation of applying
%    black magic to the ensuing subformula''.
%
%    I~subsequently added an extensible math accent similar to
%    "\overrightarrow", but with the arrow replaced by a broom carrying the same
%    witch and a black cat, and my answer ended up winning the contest (the
%    presence of the cat turned out to be a decisive factor); besides, some
%    users were so enthusiast of the new commands that they requested that they
%    were re-implemented as a new, stand-alone package.  Well, here it is.
%
%    In the writing of the package, more features, and creatures, have been
%    added.  Also available now are:
%    \begin{itemize}
%    \item
%    ghosts, both still and hovering (or, if you prefer, acting both as ordinary
%    symbols and as math accents similar to "\overrightarrow");
%    \item
%    a "\pumpkin" binary operator, with an associated ``large'' operator named
%    "\bigpumpkin"\footnote{\cs{greatpumpkin} is available as a synonym, in
%    homage to Linus van Pelt.} (cf.~"\cup" vs.\ "\bigcup", "\cap" vs.\
%    "\bigcap", "\vee" vs.\ "\bigvee", "\oplus" vs.\ "\bigoplus",\,\ldots);
%    \item
%    extensible ``arrow-like'' brooms that act as relation symbols;
%    \item
%    clouds, for denoting unscrutable subformulas (this one is even sensible!);
%    \item
%    fluttering bats, skulls, and more.
%    \end{itemize}
%    All the above are available for the \texttt{bold} math version as well as 
%    for the \texttt{normal} one.
%    The symbols provided should prove sufficient for preparing lecture notes,
%    slides, tests, or even exams to amuse~(?\@) your students with during the
%    Halloween period.  Of course, any suggestion for additions and/or
%    improvements are most welcome: you can find my addresses on
%    page~\pageref{S:MyAddresses}.
%
%    As for the name of this new package, \cfr\ initially
%    \href{https://tex.stackexchange.com/questions/336768/seasonal-challenge-contributions-from-texing-dead-welcome#comment828307_337719}{proposed}
%    \packlass{mathwitch} (from the name of the main command);
%    \href{https://tex.stackexchange.com/users/81905/guilherme-zanotelli}{\TeXSXuser{Guilherme
%    Zanotelli}} then
%    \href{https://tex.stackexchange.com/questions/336768/seasonal-challenge-contributions-from-texing-dead-welcome#comment828796_337719}{suggested}
%    \packlass{mathemagics} (a truly befitting pun!); but in the end I~decided
%    to choose \packlass{\halloweenmath} because (1)~it instantly and clearly
%    communicates the context in which the package arose, as well as the purpose
%    for which it was written, and (2)~it is 13~characters long.
%
%    This work is dedicated to \cfr, without whom it would have never seen the
%    light, and to whom I~am offering it ``as an Epiphany present''---or rather,
%    as one would say in Italian, ``\emph{come regalo per la Befana}'', where
%    the last word bears not-so-subtle connections with the world of
%    witches\ldots\footnote{Indeed, the first version of this package was
%    released on January~6, 2017.}
%
%    \subsection{Disclaimer}
%
%    Although a \LaTeX\ package is a piece of software that executes in a
%    rather protected environment and should therefore be relatively
%    incapable of doing serious damages, no warranty is given, as usual with
%    computer software, that this code will work properly, or even that it
%    will work at all.  To be on the safe side, be aware that using this
%    code can even result in loss of data and/or damages to your disks and
%    your storage media.  If you use this code, you do so exclusively at
%    your own risk!
%
%    See Subsection~\ref{sS:License} and the \LaTeX\ Project Public
%    Licence for more information.
%
%    \subsection{About this document}
%
%    This document, like many documentation files distributed for \LaTeX, is
%    divided into two parts.
%
%    The first part, \emph{User's Manual}, contains all the documentation you
%    need to be able to \emph{use} the \packlass{\halloweenmath} package.  Every
%    user of this package will probably want to read this part.
%
%    The second part, \emph{Implementation}, can be omitted if you
%    want (explanations on how to omit it are given at the beginning
%    of the part itself), and contains information that concerns only
%    ``hackers'' who want to learn how the package that this document
%    presents is \emph{implemented}.  Actually, this part contains the
%    complete listing of the \LaTeX\ code that implements the macros,
%    in the usual \DS\ format; if you are not a \LaTeX\ hacker, this
%    part will probably have little meaning to you.
%
%    In this release too, alas, I~have to ask to be excused for not having
%    completed the comments in the \emph{Implementation} part.  Some~35\% of the
%    code is still uncommented, and, as I~had already said in the
%    \emph{Introduction} to version~0.01, at present I~cannot yet make any
%    reliable guess as to when (or even if!\@) I'll be able to finish the work.
%    It is precisely for this reason that I~decided to release it in this
%    incomplete form, to avoid deferring indefinitely the availability of the
%    new, horrifying features that this version introduces.
%
%
%
% \setcounter{secnumdepth}{3}
%
%
%
% \clearpage
% \part{User's Manual}
%
% \section{About this part}
%
%    This part tells you how to use the \packlass{\halloweenmath} package.  It
%    also contains detailed instructions on how to install it and how to
%    generate this same documentation, but normally you need not bother reading
%    this information, either because your \TeX\ distribution already includes
%    both the package code and its documentation, or because package
%    installation is implicitly dealt with by the automatic update mechanism
%    provided by the distribution itself.
%
% \section{How to use the \packlass{\halloweenmath} package}
% \label{S:Usage}
%
%    This section explains everything you need to know in order to be able to
%    use the \packlass{\halloweenmath} package.  However, to keep this document
%    independent of the package itself, the output produced by the various
%    commands is not shown here: for this, you are referred to
%    \cite{bib:manual}.
%
%    \subsection{Package loading}
%
%    The usual "\usepackage" declaration is used, as in
%    \begin{verbatim}\usepackage{halloweenmath}\end{verbatim} It should be
%    noted, however, that the \packlass{\halloweenmath} package requires the
%    \packlass{\amsmath} package, and loads it (without specifying any option)
%    if it is not already loaded.  If you want to pass options to
%    \packlass{\amsmath}, load it before \packlass{\halloweenmath}.
%
%    The \packlass{\halloweenmath} package defines no options by itself;
%    nevertheless, it does honor the [\opt{no}]\opt{sumlimits} options from the
%    \packlass{\amsmath} package (see below).
%
%    \subsection{Scary symbols}
%
%    This package defines some commands \emph{for use in mathematical mode},
%    which provide a handful of symbols, all of which honor the \texttt{bold}
%    math version, when in force.  They can be loosely grouped as follows.
%
%    \subsubsection{Pumpkins}
%    \label{ssS:Pumpkins}
%
%    \DescribeMacro{\pumpkin}
%    \DescribeMacro{\bigpumpkin}
%    \DescribeMacro{\greatpumpkin}
%    It is even too obvious to begin with pumpinks.  In this regard, the package
%    provides two interrelated commands:
%    \begin{itemize}
%    \item
%    "\pumpkin" yields a binary operator symbol in the shape of a (little) 
%    pumpkin;
%    \item
%    "\bigpumpkin" is the ``large'' operator that is to "\pumpkin" as
%    "\bigoplus" is to "\oplus"; it typesets a somewhat bigger pumpkin in
%    in-line formulas, which becomes significantly larger in displayed formulas.
%    \end{itemize}
%    The [\opt{no}]\opt{sumlimits} options from the \packlass{\amsmath} package
%    also affect the "\bigpumpkin" command.  As a homage to Linus van Pelt,
%    "\greatpumpkin" is available as a perfect synonym for "\bigpumpkin".
%
%    \subsubsection{Witches, brooms, and black cats}
%    \label{ssS:Witches}
%
%    All this arose from a witch.
%
%    \DescribeMacro{\mathwitch} \DescribeMacro{\reversemathwich}
%    The "\mathwitch" command yields a ``large'' operator symbol, similar to
%    "\sum", representing a witch astride of a broom (in my answers
%    to~\cite{bib:cfr}, I~claimed that this symbol denotes the operation of
%    applying black magic to the ensuing subformula, a fundamental operation in
%    so many mathematical proofs\ldots).  There is also a "\reversemathwich"
%    command, which produces an operator that looks like a mirror image of the
%    above, for denoting the inverse operation of undoing the black magic.  Both
%    commands honor the [\opt{no}]\opt{sumlimits} options from the
%    \packlass{\amsmath} package.
%
%    \DescribeMacro{\xrightwitchonbroom}
%    \DescribeMacro{\xleftwitchonbroom}
%    Witches infest the field of extensible ``arrow-like'' symbols too: the
%    commands "\xrightwitchonbroom" and "\xleftwitchonbroom" are syntactically
%    identical to, \eg "\xrightarrow", but produce an extensible broom with a
%    witch sitting on it.  That is to say, the syntax for "\xrightwitchonbroom"
%    is as follows
%    \begin{flushleft}
%      \cmd{\xrightwitchonbroom}\oarg{under text}\marg{over text}
%    \end{flushleft}
%    and "\xleftwitchonbroom" is similar.
%
%    \DescribeMacro{\xrightwitchonpitchfork}
%    \DescribeMacro{\xleftwitchonpitchfork}
%    In version~0.01 of this package, the "\x"$\,*\,$"witchonbroom" commands
%    drew under the witch a ``broom'' that, actually, looked more like a
%    pitchfork (\TeXSXuser{cfr} had already complained about this in
%    \href{https://tex.stackexchange.com/questions/336768/seasonal-challenge-contributions-from-texing-dead-welcome#comment829686_337719}{one
%    of her comments} to my original answer on \TeXSXAbbrev); in the present
%    version this has been corrected, but the output produced by the first
%    version (which I~liked) can still be obtained by means of these two
%    commands, whose name is, indeed, more appropriate to the look of the
%    symbols they yield.  Obviously, their syntax remains identical, \eg
%    \begin{flushleft}
%      \cmd{\xleftwitchonpitchfork}\oarg{under text}\marg{over text}
%    \end{flushleft}
%
%    \DescribeMacro{\overrightwitchonbroom}
%    \DescribeMacro{\overleftwitchonbroom}
%    \DescribeMacro{\underrightwitchonbroom}
%    \DescribeMacro{\underleftwitchonbroom}
%    Finally, the four commands
%    \begin{flushleft}
%      "\overrightwitchonbroom "\marg{subformula} \\
%      "\overleftwitchonbroom  "\marg{subformula} \\
%      "\underrightwitchonbroom"\marg{subformula} \\
%      "\underleftwitchonbroom "\marg{subformula}
%    \end{flushleft}
%    are similar to, \eg "\overrightarrow", and typeset a broom, with a witch
%    sitting on it, over or under the subformula specified in their
%    argument.\footnote{It should be noted that, in my answers
%    to~\cite{bib:cfr}, only the command that now corresponds to
%    \cmd{\overrightwitchonbroom} was provided, but under the different name
%    \cmd{\overrightbroom}.}
%    \DescribeMacro{\overrightwitchonpitchfork}
%    \DescribeMacro{\overleftwitchonpitchfork}
%    \DescribeMacro{\underrightwitchonpitchfork}
%    \DescribeMacro{\underleftwitchonpitchfork}
%    Also in this case, the look of the symbols they draw has changed since
%    version~0.01 of this package, but the old shapes have been kept available
%    under different, and more appropriate, names: just use
%    \begin{flushleft}
%      "\overrightwitchonpitchfork "\marg{subformula} \\
%      "\overleftwitchonpitchfork  "\marg{subformula} \\
%      "\underrightwitchonpitchfork"\marg{subformula} \\
%      "\underleftwitchonpitchfork "\marg{subformula}
%    \end{flushleft}
%    instead of the above.
%
%    \paragraph*{Important note:}
%    All the commands described in this subsection have a \mbox{$*$-form} that
%    adds a black cat on the broomstick.  The syntax should be easy to remember,
%    since the additional asterisk can be thought of as reminiscent of the cat.
%
%    \subsubsection{Ghosts}
%
%    Of course, on Halloween, ghosts cannot be missing either.
%
%    \DescribeMacro{\mathghost}
%    \DescribeMacro{\mathrightghost}
%    \DescribeMacro{\mathleftghost}
%    There are three similar commands (without arguments) that produce ordinary
%    symbols, that is, symbols that are treated like letters: the "\mathghost"
%    command yield a symbol resembling a ghost standing upfront; the
%    "\mathrightghost" (resp., "\mathleftghost") command gives a symbol that
%    looks like a ghost moving toward the right (resp., the left).
%
%    \DescribeMacro{\xrightswishingghost}
%    \DescribeMacro{\xleftswishingghost}
%    Once again, ghosts too haunt the region of extensible ``arrow-like''
%    symbols:
%    \begin{flushleft}
%      "\xrightswishingghost"\oarg{under text}\marg{over text} \\
%      "\xleftswishingghost "\oarg{under text}\marg{over text}
%    \end{flushleft}
%    are analogous to, \eg "\xrightarrow", but, in place of the arrow, draw a
%    ghost swishing, respectively, toward the right and toward the left.
%
%    \DescribeMacro{\overrightswishingghost}
%    \DescribeMacro{\overleftswishingghost}
%    \DescribeMacro{\underrightswishingghost}
%    \DescribeMacro{\underleftswishingghost}
%    It is now easy to guess what the following four commands do:
%    \begin{flushleft}
%      "\overrightswishingghost "\marg{subformula} \\
%      "\overleftswishingghost  "\marg{subformula} \\
%      "\underrightswishingghost"\marg{subformula} \\
%      "\underleftswishingghost "\marg{subformula}
%    \end{flushleft}
%
%    \subsubsection{Bats}
%
%    For some people, bats are even more horrifying than ghosts.  The
%    \packlass{\halloweenmath} package provides a collection of commands for
%    drawing bat-like symbols that are closely analogous to the ghost-related
%    ones.
%
%    \DescribeMacro{\mathbat}
%    \DescribeMacro{\mathrightbat}
%    \DescribeMacro{\mathleftbat}
%    You can get an ordinary symbol resembling a bat flying, respectively,
%    toward you, toward the right, and toward the left with the three
%    argumentless commands "\mathbat", "\mathrightbat", and "\mathleftbat".  The
%    height of these symbols has intentionally been made pretty small, to
%    facilitate their use in superscripts.
%
%    \DescribeMacro{\xrightflutteringbat}
%    \DescribeMacro{\xleftflutteringbat}
%    You can get extensible ``arrow-like'' relation symbols that depict a
%    fluttering bat by means of the following constructs:
%    \begin{flushleft}
%      "\xrightflutteringbat"\oarg{under text}\marg{over text} \\
%      "\xleftflutteringbat "\oarg{under text}\marg{over text}
%    \end{flushleft}
%    \DescribeMacro{\overrightflutteringbat}
%    \DescribeMacro{\overleftflutteringbat}
%    \DescribeMacro{\underrightflutteringbat}
%    \DescribeMacro{\underleftflutteringbat}
%    And these are the associated ``over\mbox{-}\slash under-arrow-like''
%    commands:
%    \begin{flushleft}
%      "\overrightflutteringbat "\marg{subformula} \\
%      "\overleftflutteringbat  "\marg{subformula} \\
%      "\underrightflutteringbat"\marg{subformula} \\
%      "\underleftflutteringbat "\marg{subformula}
%    \end{flushleft}
%
%    \DescribeMacro{\overbat}
%    \DescribeMacro{\underbat}
%    There are, finally, two more commands that have no parallel in the 
%    collection of ghostly symbols (because ghost are to tall!): they are
%    \begin{flushleft}
%      "\overbat "$*$\marg{subformula} \\
%      "\underbat"$*$\marg{subformula}
%    \end{flushleft}
%    where $*$ indicates an optional "*" denoting, as usual, their
%    \mbox{$*$-form}.  These constructs typeset \meta{subformula} respectively
%    surmounted by the bat produced by "\mathbat", or with that symbol
%    underneath.  The normal (\emph{i.e.}, unstarred) form pretends that the bat
%    has zero width (but some height), so that, say, "$x+\overbat{y}+z$" has the
%    same horizontal spacing as "$x+y+z$"; if you prefer that the actual width
%    of the bat be taken into account instead, then use the starred variants.
%
%    \subsubsection{Skulls}
%
%    \DescribeMacro{\skull}
%    \DescribeMacro{\bigskull}
%    For skulls, I~imagined a r\^{o}le very similar to that of
%    \hyperref[ssS:Pumpkins]{pumpkins}.  Indeed, anything that is shaped like a
%    human head reminds me of symbols like "\oplus"~($\oplus$) and
%    "\otimes"~($\otimes$), so that my fantasy immediately goes to a binary
%    operator and its associated ``large'' operator.  In this case, we have:
%    \begin{itemize}
%    \item
%    "\skull", which is the binary operator (similar to "\oplus");
%    \item
%    "\bigskull", which is the ``large'' operator (similar to "\bigoplus") and
%    which, like all symbols of this kind, becomes significantly larger in
%    displayed math.
%    \end{itemize}
%    As for all ``large'' operators defined by this package, the
%    [\opt{no}]\opt{sumlimits} options from the \packlass{\amsmath} package
%    affect the "\bigskull" command too.
%
%    \subsubsection{Other symbols}
%
%    The \packlass{\halloweenmath} package implements one more symbol that could
%    loosely be connected with the world of witches.
%
%    \DescribeMacro{\mathcloud} \DescribeMacro{\reversemathcloud}
%    Mathemagicians often deal with unscrutable formulas.  To represent them,
%    the "\mathcloud" command (without arguments) is available, which produces a
%    symbol, with the form of a cloud, that behaves to a certain extent like a
%    fraction, in that it is typeset in a significantly larger size in displayed
%    formulas than in in-line ones.  The companion command "\reversemathcloud"
%    yields a mirror image of the same symbol.
%
%    \subsection{More \textquotedblleft arrow-like\textquotedblright\ symbols
%      (these don\textquoteright t scare!)}
%
%    If designing the first symbol, the "\mathwitch", could be relatively
%    entertaining, the implementation of the other operators and ordinary
%    symbols like "\pumpkin", "\mathghost", "\mathcloud", or "\bigskull" soon
%    became a rather dull and repetitive task, that essentialy consisted of
%    nothing more than placing lots of dots on a grid.  The part related to the
%    extensible ``arrow-like'' commands was a bit more amusing, since it
%    involved dealing with at least a few typical \TeX nical aspects.  Probably,
%    it was for this reason that this field grew so much in passing from the
%    first release of the package to the second.
%
%    \subsubsection{Script-style version of standard over\protect\slash under
%      arrows}
%    \label{ssS:StandardArrows}
%
%    In order to implement our over\slash under ``arrow-like'' symbols, we had
%    to develop an extension of some internal macros of the \packlass{\amsmath}
%    package.  These extensions can be applied to produce variants of the
%    standard over\slash under arrows too.
%
%    \DescribeMacro{\overscriptrightarrow}
%    \DescribeMacro{\overscriptleftarrow}
%    \DescribeMacro{\overscriptleftrightarrow}
%    \DescribeMacro{\underscriptrightarrow}
%    \DescribeMacro{\underscriptleftarrow}
%    \DescribeMacro{\underscriptleftrightarrow}
%    The following six commands are analogous to their standard counterparts
%    whose names do not contain the "script" substring, but the arrows they put
%    above or below the given subformulas are typeset in their relative script
%    style, instead of in the same style as the subformulas themselves (as the
%    standard commands do):
%    \begin{flushleft}
%      "\overscriptrightarrow     "\marg{subformula} \\
%      "\overscriptleftarrow      "\marg{subformula} \\
%      "\overscriptleftrightarrow "\marg{subformula} \\
%      "\underscriptrightarrow    "\marg{subformula} \\
%      "\underscriptleftarrow     "\marg{subformula} \\
%      "\underscriptleftrightarrow"\marg{subformula}
%    \end{flushleft}
%
%    \subsubsection{\textquotedblleft Unwitched\textquotedblright\ brooms 
%      and pitchforks}
%
%    In the last years, the use of unmanned aircrafts has become increasingly
%    important, and it has in parallel become more and more common to see flying
%    devices of this kind even across the skies of our cities (just think of
%    drones and of how they tend to be employed ubiquitously for the most
%    heterogeneous kinds of jobs and services).  Needless to say, it was
%    inevitable that this aeronautical revolution propagated even to an
%    inherently conservative world like that of sorcery, and it should come as
%    no great surprise to learn that the \packlass{\halloweenmath} package now
%    features ``unwitched'' versions of all the ``arrow-like'' extensible
%    symbols too, both of those that depict brooms and of those which stick to
%    the original pitchfork-like shape.  The useful side of these is that the
%    absence of the witch allows for a reduction of the vertical space they take
%    up.
%
%    \DescribeMacro{\xrightbroom}
%    \DescribeMacro{\xleftbroom}
%    To begin with, we have the extensible ``arrow-like'' relations, those
%    modeled after "\xrightarrow": they are
%    \begin{flushleft}
%      "\xrightbroom"\oarg{under text}\marg{over text} \\
%      "\xleftbroom "\oarg{under text}\marg{over text} \\
%    \end{flushleft}
%    and produce extensible brooms \emph{without} a witch sitting on them.
%    \DescribeMacro{\xrightpitchfork}
%    \DescribeMacro{\xleftpitchfork}
%    The commands
%    \begin{flushleft}
%      "\xrightpitchfork"\oarg{under text}\marg{over text} \\
%      "\xleftpitchfork "\oarg{under text}\marg{over text}
%    \end{flushleft}
%    are almost identical, only they yield pitchforks instead of brooms---or, if
%    you prefer, brooms with the shape that was used in version~0.01 of this
%    package.
%
%    \DescribeMacro{\rightbroom}
%    \DescribeMacro{\leftbroom}
%    When both the \meta{under text} and the \meta{over text} are void, the
%    "\xrightbroom"\,\ldots\linebreak[0]"\xleftpitchfork" commands yield a
%    symbol that is, on purpose, more or less as large as what "\xrightarrow{}"
%    yields (\emph{i.e.},~$\xrightarrow{}$); but it turns out that such a short
%    broom (or pitchfork) completely lacks the broomstick.  For this reason, the
%    two (argumentless) commands "\rightbroom" and "\leftbroom" has been
%    provided too: they typeset a broom the same length of a
%    "\longrightarrow"\slash "\longleftarrow" ($\longrightarrow$\slash
%    $\longleftarrow$).
%    \DescribeMacro{\hmrightpitchfork}
%    \DescribeMacro{\hmleftpitchfork}
%    It would now seem logical to infer that the two companion commands that
%    typeset pitchforks should be named "\rightpitchfork" and "\leftpitchfork";
%    unfortunately, these names already denote two different (albeit vaguely
%    similar) symbols supplied by the \packlass{MnSymbol} package.  Because of
%    this potential name clash, we have chosen instead to call them
%    "\hmrightpitchfork" and "\hmleftpitchfork", respectively (the
%    \texttt{hm}~prefix, of course, stands for ``Halloween math'').
%
%    Before getting to the group of the ``over\mbox{-}\slash under-arrow-like''
%    extensible brooms, a preliminary statement needs to be made.  For the
%    ``witched'' version of all these, we had chosen to typeset them in the
%    relative script style associated to the style of the affected subformula.
%    For example, in a construct like
%    \begin{verbatim}$W_{\overrightwitchonbroom{x_{1}+\dots+x_{n}}}$\end{verbatim}
%    the subformula "x_{1}+\dots+x_{n}", argument of the
%    "\overrightwitchonbroom" command, is set in script style, therefore the
%    style applied to the covering broom (and witch) will be the scriptscript
%    style.  We already remarked in Subsection~\ref{ssS:StandardArrows} that
%    this is not what the standard ``over\mbox{-}\slash under-arrow'' commands
%    do: instead, they use for the arrow the same style as that in which the
%    argument gets typeset.  The reason for this different behavior was that,
%    with the same style of the affected subformula, the witch would have looked
%    too large; but when the witch isn't there, both solutions are viable, and
%    we do provide both.
%
%    ^^A \paragraph{Brooms\slash pitchforks in the same relative style.}
%    We have, in the first place, a set of commands for placing brooms or
%    pitchforks (a.k.a.\ version-0.01-styled brooms) over or under a subformula,
%    setting them in the same style as the subformula itself.
%    \DescribeMacro{\overrightbroom}
%    \DescribeMacro{\overleftbroom}
%    \DescribeMacro{\underrightbroom}
%    \DescribeMacro{\underleftbroom}
%    There are four ``over\mbox{-}\slash under-arrow-like'' extensible
%    brooms\ldots
%    \begin{flushleft}
%      "\overrightbroom "\marg{subformula} \\
%      "\overleftbroom  "\marg{subformula} \\
%      "\underrightbroom"\marg{subformula} \\
%      "\underleftbroom "\marg{subformula}
%    \end{flushleft}
%    \DescribeMacro{\overrightpitchfork}
%    \DescribeMacro{\overleftpitchfork}
%    \DescribeMacro{\underrightpitchfork}
%    \DescribeMacro{\underleftpitchfork}
%    \ldots and four corresponding ``over\mbox{-}\slash under-arrow-like''
%    extensible pitchforks:
%    \begin{flushleft}
%      "\overrightpitchfork "\marg{subformula} \\
%      "\overleftpitchfork  "\marg{subformula} \\
%      "\underrightpitchfork"\marg{subformula} \\
%      "\underleftpitchfork "\marg{subformula}
%    \end{flushleft}
%
%    ^^A \paragraph{Brooms\slash pitchforks in relative script style.}
%    Then, for each of the commands just listed, a corresponding variant is
%    provided that sets the broom, or the pitchfork, in the relative script
%    style of the style applied to \meta{subformula}, and which is named
%    following the same convention we already used for the commands of
%    Subsection~\ref{ssS:StandardArrows}, that is, inserting the "script"
%    substring.
%    \DescribeMacro{\overscriptrightbroom}
%    \DescribeMacro{\overscriptleftbroom}
%    \DescribeMacro{\underscriptrightbroom}
%    \DescribeMacro{\underscriptleftbroom}
%    Thus, again, we find four ``over\mbox{-}\slash under-arrow-like''
%    extensible brooms\ldots
%    \begin{flushleft}
%      "\overscriptrightbroom "\marg{subformula} \\
%      "\overscriptleftbroom  "\marg{subformula} \\
%      "\underscriptrightbroom"\marg{subformula} \\
%      "\underscriptleftbroom "\marg{subformula}
%    \end{flushleft}
%    \DescribeMacro{\overscriptrightpitchfork}
%    \DescribeMacro{\overscriptleftpitchfork}
%    \DescribeMacro{\underscriptrightpitchfork}
%    \DescribeMacro{\underscriptleftpitchfork}
%    \ldots and four matching ``over\mbox{-}\slash under-arrow-like'' extensible
%    pitchforks:
%    \begin{flushleft}
%      "\overscriptrightpitchfork "\marg{subformula} \\
%      "\overscriptleftpitchfork  "\marg{subformula} \\
%      "\underscriptrightpitchfork"\marg{subformula} \\
%      "\underscriptleftpitchfork "\marg{subformula}
%    \end{flushleft}
%
%    \paragraph*{Please note:}
%    Since all of the commands listed in this subsection omit the witch, none 
%    of them has got a \mbox{$*$-form} for adding a cat (the cat can only go 
%    with the witch: no witch, no cat).
%
%    \subsubsection{Summary of the naming scheme}
%
%    It is worth noting that the commands for the extensible brooms\slash
%    pitchforks follow a consistent naming scheme: the name is of the form
%    \begin{center}
%      \texttt{\bslash}\meta{x-over-under}\meta{opt-script}^^A
%        \meta{left-right}\meta{opt-witch}\meta{broom-pitchf}
%    \end{center}
%    where
%    \begin{flalign*}
%      \meta{x-over-under} &\longrightarrow
%                \texttt{x}\binvert\texttt{over}\binvert\texttt{under} &
%            \meta{opt-script} &\longrightarrow
%                \meta{empty}\binvert\texttt{script} \\
%      \meta{left-right} &\longrightarrow
%                \texttt{left}\binvert\texttt{right} &
%            \meta{opt-witch} &\longrightarrow
%                \meta{empty}\binvert\texttt{witchon} \\
%      \meta{broom-pitchf} &\longrightarrow
%                \texttt{broom}\binvert\texttt{pitchfork}
%    \end{flalign*}
%    with the constraint that \meta{opt-script} must be \meta{empty} if either \( \meta{x-over-under} =
%    \texttt{x} \) or \( \meta{opt-witch} \neq \meta{empty} \).
%
% \section
%      [Installing the pacakge code and documentation]
%      {Installing the package code and documentation\footnote{^^A
%    Recall that you need to read this section only in the unusual case that you
%    have to carry out a manual installation from the sources; normally, you'll
%    be using a prepackaged \TeX\ distribution like
%    \href{https://www.tug.org/texlive/}{\TeX~Live} or
%    \href{https://miktex.org/}{MiK\TeX}, which can automatically manage
%    installation as well as updates.^^A
%        }}
%
%    As usual for \LaTeX\ distributions, the \packlass{\halloweenmath}
%    package is distributed in the form of a \filedir{.dtx} file,
%    namely \filedir{\halloweenmath.dtx}, and an accompanying
%    \filedir{.ins} file, namely \filedir{\halloweenmath.ins}.
%
%    \subsection{Installation}
%
%    To extract the code, run \LaTeX\ (or plain \TeX) once on the
%    file \filedir{\halloweenmath.ins}.  This will generate the following
%    \LaTeX\ input file:
%    \begin{quote}
%      \ttfamily
%      \halloweenmath.sty
%    \end{quote}
%    To finish the installation, move it to a \LaTeX\ input directory.  The
%    above listing of the files you need to move is also displayed on the
%    terminal at the end of the run of the file \filedir{\halloweenmath.ins}.
%    The documentation of your \TeX\ installation should tell you how to find
%    the \LaTeX\ input directory/ies, and probably also how to create new
%    \LaTeX\ input directories reserved to contain your personal packages.
%    The accepted TDS-compliant directory where the above file should be put is
%    \begin{quote}
%      \filedir{\$TEXMF/tex/latex/halloweenmath/}
%    \end{quote}
%
%    Please note: before using the \packlass{\halloweenmath} package you
%    must read its license (see Subsection~\ref{sS:License}) to see whether its
%    terms are acceptable for you, especially for what concerns the lack of any
%    warranty; if they are not, don't use it.
%
%    \subsection{Documentation}
%
%    To produce this documentation, run \LaTeX\ three times (for the ToC to get
%    right) on the file \filedir{\halloweenmath.dtx}.  This won't give you the
%    index and the change history, though: for those, you should run
%    \emph{MakeIndex} on the files \filedir{\halloweenmath.idx} and
%    \filedir{\halloweenmath.glo}, obtained during the last of the aforesaid
%    three \LaTeX\ runs, with styles \filedir{gind.ist} and \filedir{gglo.ist},
%    respectively (which are part of the standard \LaTeX\ distribution); then
%    pass \filedir{\halloweenmath.dtx} through \LaTeX\ twice more.
%
%    The documentation produced by default includes the \emph{Implementation}
%    part too; see the beginning of this part for instructions on how to omit
%    it.
%
%    \subsection{The makefile}
%    \label{sS:Makefile}
%
%    A (quite trivial!\@) makefile, named \filedir{Makefile}, that ``knows'' how
%    to carry out the installation, is offered along with the package.  Although
%    it is not a required part of the distribution (as per LPPL\@), you may find
%    that some distributors supply it all the same (I~hope the CTAN\@ sites will
%    do so).  With this makefile in the same directory as the two source files
%    \filedir{\filename} and \filedir{\halloweenmath.ins}, the simple shell
%    command, given inside that same directory,
%    \begin{quote}
%      \ttfamily
%      make
%    \end{quote}
%    will \emph{both} extract the code file \emph{and} typeset the full
%    documentation (in~PDF\@).  Type
%    \begin{quote}
%      \ttfamily
%      make help
%    \end{quote}
%    for more information.
%
%    \subsection{License}
%    \label{sS:License}
%
%    The \packlass{\halloweenmath} package is \emph{not} in the public
%    domain: its author, Gustavo \textsc{Mezzetti}, owns the
%    copyright, and in general retains all the rights therein; but as
%    a special exception, the author grants you the permissions
%    indicated below.
%
%    \subsubsection{Distribution and/or modification}
%
%    The \packlass{\halloweenmath} package may be distributed and/or
%    modified under the conditions of the \LaTeX\ Project Public
%    License, either version~1.3 of this license or (at your option)
%    any later version.  The latest version of this license is in
%    \begin{quote}
%      \ttfamily
%      http://www.latex-project.org/lppl.txt
%    \end{quote}
%    and version~1.3 or later is part of all distributions of \LaTeX\
%    version 2005/12/01 or later.
%
%    The \packlass{\halloweenmath} package has the LPPL maintenance status
%    ``author-maintained''.
%
%    The file \filedir{manifest.txt} included along with this file
%    specifies what the \packlass{\halloweenmath} package consists of; more
%    precisely, it explains how the locutions ``Work'' and ``Compiled
%    Work'', used in the \LaTeX\ Project Public License, are to be
%    interpreted in the case of this work.
%
%    \subsubsection{Use}
%
%    The use of the \packlass{\halloweenmath} package is unrestricted,
%    provided that you accept the terms and conditions of the \LaTeX\
%    Project Public License and of the following subsection for what
%    concerns the absence of any warranty.
%
%    \subsubsection{No warranty}
%
%    There is absolutely no warranty for the \packlass{\halloweenmath}
%    package.  The Copyright Holder provides the \packlass{\halloweenmath}
%    package ``as is'', without warranty of any kind, either expressed
%    or implied, including, but not limited to, the implied warranties
%    of merchantability and fitness for a particular purpose.  The
%    entire risk as to the quality and performance of the
%    \packlass{\halloweenmath} package is with you.  Should the
%    \packlass{\halloweenmath} package prove defective, you assume the cost
%    of all necessary servicing, repair, or correction.
%
%    In no event will The Copyright Holder, or any other party who may
%    distribute and/or modify the \packlass{\halloweenmath} package as
%    permitted by the \LaTeX\ Project Public License, be liable to you
%    for damages, including any general, special, incidental or
%    consequential damages arising out of any use of the
%    \packlass{\halloweenmath} package or out of inability to use it
%    (including, but not limited to, loss of data, data being rendered
%    inaccurate, or losses sustained by anyone as a result of any
%    failure of the \packlass{\halloweenmath} package to operate with any
%    other programs), even if The Copyright Holder or said other party
%    has been advised of the possibility of such damages.
%
% \StopEventually{
%    \setcounter{secnumdepth}{0}
%    \providecommand*\bysame{\leavevmode\hbox to3em{\hrulefill}\thinspace}
%
%    \clearpage
%    \pdfbookmark[0]{Back Matter}{BackMatter}
%    \begin{thebibliography}{9}
%    \addcontentsline{toc}{section}{\refname}
%
%    \bibitem{bib:cfr}
%      \emph{Seasonal Challenge (Contributions from \TeX ing Dead 
%        Welcome)},\\
%      \url{https://tex.stackexchange.com/q/336768/69818}
%
%    \bibitem{bib:manual}
%      \emph{User's manual for the \packlass{\halloweenmath} package}, included
%      in the documentation of the \packlass{\halloweenmath} package,\\
%      \href{file:halloweenmath-man.pdf}
%        {\nolinkurl{$TEXMF/doc/latex/halloweenmath/halloweenmath-man.pdf}}
%
%    \IfImplementation{
%      \bibitem{bib:diffs-m}
%        File \filedir{diffs-m.txt}, which is part of the standard
%        \hologo{AmSLaTeX} distribution,\\
%        \nolinkurl{$TEXMF/doc/latex/amsmath/diffs-m.txt}
%
%      \bibitem{bib:std}
%        \emph{Why does the \packlass{\amsmath} package define
%          \textnormal{\cs{std@minus}} and \textnormal{\cs{std@equal}}?},\\
%        \url{https://tex.stackexchange.com/q/352043}
%    }{}
%
%    \end{thebibliography}
% }
%
%
%
% \clearpage
% \part{Implementation}
%
% \section{About this part}
%
%    This part is of interest only to \LaTeX\ hackers; to avoid
%    having this part printed, look in the file \filedir{\filename}
%    for a line that looks \emph{exactly} like this
%    \begin{verbatim}%% \OnlyDescription % uncomment to discard Implementation part\end{verbatim}
%    and remove the two leading percent signs ("%%").
%
% \section{A driver for this document}
%
%    This part of the file is \emph{not} included in any generated file:
%    it is simply the driver.
%    \begin{macrocode}
%<*driver>
%    \end{macrocode}
%
%    To begin with, we load the \packlass{ltxdoc} class
%    and the packages we require.
%    \begin{macrocode}
\documentclass{ltxdoc}
\usepackage{amsmath,color,pict2e,hologo}
\usepackage{hypdoc}
%    \end{macrocode}
%    We now set a few typesetting options.
%    First of all, we want a history listing and a full index, the latter
%    organized by line numbers.
%    \begin{macrocode}
\RecordChanges
\EnableCrossrefs
\CodelineIndex
%    \end{macrocode}
%    If you don't want to include the second part of this document,
%    \emph{Implementation}, uncomment the line containing the command
%    "\OnlyDescription".
%    \begin{macrocode}
%% \OnlyDescription % uncomment to discard Implementation part
%    \end{macrocode}
%    Finally, setting "\hfuzz" and "\vfuzz" to 0~points is only one
%    of the many neurotic symptoms of the author!
%    \begin{macrocode}
\hfuzz = 0pt
\vfuzz = 0pt
%    \end{macrocode}
%    Now input this same file, using \DS\ conventions.
%    \begin{macrocode}
\begin{document}
  \DocInput{halloweenmath.dtx}
%    \end{macrocode}
%    Then print the change list and the index.  We put these commands in
%    the driver, rather than in the comments of this file, because
%    producing the change list and the index is somewhat cumbersome, and some
%    users could prefer to omit them: such users should simply use a
%    different driver.
%    \begin{macrocode}
  % \clearpage % attach Change history below References
  \PrintChanges
  \clearpage \PrintIndex
%    \end{macrocode}
%    When this file is read directly by \LaTeX\ without the intervention
%    of \DS, the following line will make \TeX\ stop
%    reading.
%    \begin{macrocode}
\end{document}
%    \end{macrocode}
%    End of driver module.
%    \begin{macrocode}
%</driver>
%    \end{macrocode}
%
% \section{The code for the \packlass{\halloweenmath} package}
%
%    This part of the file goes into \filedir{\halloweenmath.sty}.
%    \begin{macrocode}
%<*halloweenmath>
%    \end{macrocode}
%
%    \subsection{Identification}
%
%    No particular reason for asking for a particular release of \LaTeXe; but at
%    least, let us specify a date on which the \packlass{\picttwoe} package was
%    likely to exist.
%    \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}[2004/06/01] % LaTeX2e is required!
%    \end{macrocode}
%    The usual identification:
%    \begin{macrocode}
\ProvidesPackage{halloweenmath}
                [2019/11/01 v0.11 (development)]
%    \end{macrocode}
%
%    \subsection{Initial code}
%
%    \begin{macro}{\@HwM@say@BOO}
%    Of course, to make this anything even vaguely resembling an ``Easter egg'',
%    I~should at least pretend to try to obfuscate the code; but too much time
%    has already been wasted on this huge and ridicolous heap of foolishness.
%    \begin{macrocode}
\newcommand*\@HwM@say@BOO{%
  \begingroup
    \escapechar \m@ne
    \def~{\string\\}%
    \def\-{\space\space}%
    \def\+{\space\space\space\space}%
    \def\={\+\+\+\+}%
    \def\*{****}%
    \typeout{}%
    \typeout{\+ _-==-_ \+ /~/~/~}%
    \typeout{\+|\-\-\-|\+< BOO! >\+\+\+\today...}%
    \typeout{\+|(.)(.)|\+/~/~/~/}%
    \typeout{\++--/~--+\- /\=\*\*\*\*\*\*\*}%
    \typeout{\+ [::::] __/ \= ... This is HALLOWEENMATH!}%
    \typeout{\+\-----\-\+\=\*\*\*\*\*\*\*}%
    \typeout{}%
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@opt@say@BOO}
%    Well, at least do not add comments to what is already crystal clear by 
%    itself\ldots
%    \begin{macrocode}
\newcommand*\@HwM@opt@say@BOO{}
%    \end{macrocode}
%    \end{macro}
%
%    \subsection{Declaration of options}
%
%    Hidden options.  Note that they are later processed in the order in which
%    they are declared here.
%    \begin{macrocode}
\DeclareOption{silent}{%
  \let \@HwM@opt@say@BOO \@empty
}
\DeclareOption{boo}{%
  \let \@HwM@opt@say@BOO \@HwM@say@BOO
}
\DeclareOption{boo-10-31}{%
  \ifnum\month=10
    \ifnum\day=31
      \let \@HwM@opt@say@BOO \@HwM@say@BOO
    \else
      \let \@HwM@opt@say@BOO \@empty
    \fi
  \else
    \let \@HwM@opt@say@BOO \@empty
  \fi
}
%    \end{macrocode}
%
%    \subsection{Option processing}
%
%    Note that, at the end, at least we release the memory taken up by this
%    piece of buffoonery.
%    \begin{macrocode}
\ExecuteOptions{boo-10-31}
\ProcessOptions\relax
\@HwM@opt@say@BOO
\let \@HwM@say@BOO = \@undefined
\let \@HwM@opt@say@BOO = \@undefined
%    \end{macrocode}
%
%    \subsection{Package loading}
%
%    Besides the \packlass{\picttwoe} package, that we need to draw the 
%    pictures, we also require the \packlass{\amsmath} package.
%    \begin{macrocode}
\RequirePackage{amsmath,pict2e}
%    \end{macrocode}
%
%    \subsection{Main code}
%
%    Let's begin with an important remark.  It would be pretty easy to fulfill 
%    the purpose of this package using \TikZ; this has been deliberately 
%    avoided.  This package has been written for fun, and part of this fun lay 
%    in the constraint of using only the means provided by the \env{picture} 
%    environment, albeit with the \packlass{\picttwoe} extensions.  Please 
%    accept this fact without arguing about it.
%
%    The names of all the macros defined in this package start with the prefix 
%    "\@HwM@" (``namespace'' prefix).
%
%    \subsubsection{Preliminary macros}
%
%    We begin with defining some macros that provide basic functionality.
%
%    \begin{macro}{\@HwM@tempa}
%    Temporary scratch macro reserved for this package.  Here we just check 
%    that the name can be used, while, at the same time, reserving it.
%    \begin{macrocode}
\@ifdefinable\@HwM@tempa{}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@thickness@units@for}
%    The unit of measure we are going to use for line thicknesses; since it is
%    defined in term of the ``default-rule-thickness'' "\fontdimen", it will
%    automatically scale with the font size.  The suffix "for" at the end of the
%    names reminds that a font selector like "\textfont" must follow and will be
%    absorbed as argument~\#1.
%    \begin{macrocode}
\newcommand*\@HwM@thickness@units@for[1]{\fontdimen 8 #1\thr@@}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@right@or@left}
%    \changes{0.11}{2019 Nov 01}{Corrected bug: \cs{@HwM@right@or@left} 
%      now defaults to \cs{@gobbletwo}}
%    Used to pass information about the orientation of left\slash right
%    symmetric figures.  More precisely, it is a switch that selects
%    between two branches according to the current orientation.  Here we
%    set the global default (no current orientation defined) so that it
%    ignores \emph{both} branches, thus correcting a bug in versions
%    prior to 0.11.
%    \begin{macrocode}
\@ifdefinable\@HwM@right@or@left{\let \@HwM@right@or@left=\@gobbletwo}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@set@right@dir}
%    Causes the following left\slash right symmetric figure to face to the
%    right.
%    \begin{macrocode}
\newcommand*\@HwM@set@right@dir{%
  \let \@HwM@right@or@left \@firstoftwo
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@set@left@dir}
%    Causes the following left\slash right symmetric figure to face to the left.
%    \begin{macrocode}
\newcommand*\@HwM@set@left@dir{%
  \let \@HwM@right@or@left \@secondoftwo
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{environment}{@HwM@math@picture}
%    Customized \env{picture} environment for our ``math pictures'', makes some
%    initializations that are always needed (local to its group).  Arguments:
%    \begin{paramlist}
%      \param
%        bounding box height, in coordinate units;\\
%      \param
%        $y$-coordinate of lower left corner of bounding box;\\
%      \param
%        additional code to be executed during initialization;\\
%      \param
%        font selector (\eg "\textfont");\\
%      \param
%        bounding box width, in coordinate units;\\
%      \param
%        $x$-coordinate of lower left corner of bounding box.
%    \end{paramlist}
%    \begin{macrocode}
\newenvironment*{@HwM@math@picture}[6]{%
  \setlength\unitlength{\fontdimen 22 #4\tw@}%
  #3%
  \@HwM@right@or@left{%
    \def\+{+}%
    \def\-{-}%
  }{%
    \def\+{-}%
    \def\-{+}%
  }%
  \picture(#5,#1)(#6,#2)%
}{\endpicture}
%    \end{macrocode}
%    \end{environment}
%
%    \begin{macro}{\@HwM@short@circuited@vphant}
%    ``Short-circuited'' version of "\vphantom".
%    \begin{macrocode}
\newcommand*\@HwM@short@circuited@vphant{\v@true\h@false\mathph@nt}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@oplus@strut}
%    \changes{0.10}{2017 Apr 16}{Corrected bug: the size of the strut used to 
%      be that of \cs{bigoplus}}
%    Vertical phantom the size of "\oplus".  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\scriptstyle").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@oplus@strut[1]{%
  \@HwM@short@circuited@vphant #1\oplus
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@bigoplus@strut}
%    \changes{0.10}{2017 Apr 16}{Added this macro}
%    Vertical phantom the size of "\bigoplus".  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\displaystyle").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@bigoplus@strut[1]{%
  \@HwM@short@circuited@vphant #1\bigoplus@
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@d@pict@strut}
%    Inserts a ``depth-only half-strut'' (the~"d" in the name is for ``depth''),
%    \#1~is its size in picture units.
%    \begin{macrocode}
\newcommand*\@HwM@d@pict@strut[1]{%
  \vrule \@width\z@ \@height\z@ \@depth #1\unitlength
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@large@picture}
%    \begin{macro}{\end@HwM@large@picture}
%    This is actually a definition of an environment.  The environment beign
%    defined, namely \env{@HwM@large@picture}, is simply syntactic sugar for a
%    typical invocation of the \env{@HwM@math@picture} environment, for a
%    picture of ``large'' size (\( \mbox{height}=5 \), \( \mbox{depth}=3 \),
%    with the baseline running at \( y=-1 \)), suitable for the display-style
%    version of a large operator.  Supplies arguments \#1--\#4 of
%    \env{@HwM@math@picture}, with \#4 being "\textfont"; the caller must supply
%    the remaining ones.
%    \begin{macrocode}
\newcommand*\@HwM@large@picture{%
  \@HwM@math@picture{5}{-1}{\@HwM@d@pict@strut\thr@@}\textfont
}
\let\end@HwM@large@picture = \end@HwM@math@picture
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
%    \begin{macro}{\@HwM@small@picture}
%    \begin{macro}{\end@HwM@small@picture}
%    This is actually a definition of an environment.  The environment beign
%    defined, namely \env{@HwM@small@picture}, is simply syntactic sugar for a
%    typical invocation of the \env{@HwM@math@picture} environment, for a
%    picture of ``small'' size (\( \mbox{height}=3 \), \( \mbox{depth}=1 \),
%    with the baseline running at \( y=-1 \)), suitable for the
%    non-display-style version of a large operator.  Supplies arguments \#1--\#3
%    of \env{@HwM@math@picture}; the caller must supply the remaining ones,
%    \emph{including} argument~\#4.
%    \begin{macrocode}
\newcommand*\@HwM@small@picture{%
  \@HwM@math@picture{3}{-1}{\@HwM@d@pict@strut\@ne}%
}
\let\end@HwM@small@picture = \end@HwM@math@picture
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
%    \begin{macro}{\@HwM@bigop@picture}
%    \begin{macro}{\end@HwM@bigop@picture}
%    This is actually a definition of an environment.  The environment beign
%    defined, namely \env{@HwM@bigop@picture}, is simply syntactic sugar for a
%    typical invocation of the \env{@HwM@math@picture} environment, for a
%    picture having the vertical size of a "\bigoplus", with baseline running at
%    \( y=-1 \).  Supplies arguments \#1--\#3 of \env{@HwM@math@picture}; the
%    caller must supply the others, \emph{including} argument~\#4, immediately
%    after the single argument to this environment, which is
%    \begin{paramlist}
%      \param
%        style selector (\eg "\displaystyle").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@bigop@picture[1]{%
  \@HwM@math@picture{0}{-1}{\@HwM@bigoplus@strut #1}%
}
\let\end@HwM@bigop@picture = \end@HwM@math@picture
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
%    \begin{macro}{\@HwM@oplus@picture}
%    \begin{macro}{\end@HwM@oplus@picture}
%    This is actually a definition of an environment.  The environment beign
%    defined, namely \env{@HwM@oplus@picture}, is simply syntactic sugar for a
%    typical invocation of the \env{@HwM@math@picture} environment, for a
%    picture having the vertical size of an "\oplus", with baseline running at
%    \( y=-1 \).  Supplies arguments \#1--\#3 of \env{@HwM@math@picture}; the
%    caller must supply the others, \emph{including} argument~\#4, immediately
%    after the single argument to this environment, which is
%    \begin{paramlist}
%      \param
%        style selector (\eg "\scriptstyle").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@oplus@picture[1]{%
  \@HwM@math@picture{0}{-1}{\@HwM@oplus@strut #1}%
}
\let\end@HwM@oplus@picture = \end@HwM@math@picture
%    \end{macrocode}
%    \end{macro}
%    \end{macro}
%
%    \paragraph*{Comment added in version~0.10:}
%    After all, I~think I'd better recap what the full argument lists for the
%    ``specialized'' math picture environments are.
%
%    \medskip
%    Full argument list for \env{@HwM@large@picture}:
%    \begin{paramlist}
%      \param
%        bounding box width, in coordinate units;\\
%      \param
%        $x$-coordinate of lower left corner of bounding box.
%    \end{paramlist}
%
%    \medskip
%    Full argument list for \env{@HwM@small@picture}:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont");\\
%      \param
%        bounding box width, in coordinate units;\\
%      \param
%        $x$-coordinate of lower left corner of bounding box.
%    \end{paramlist}
%
%    \medskip
%    Full argument list for both \env{@HwM@bigop@picture} and
%    \env{@HwM@oplus@picture}:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\scriptstyle");\\
%      \param
%        font selector (\eg "\scriptfont");\\
%      \param
%        bounding box width, in coordinate units;\\
%      \param
%        $x$-coordinate of lower left corner of bounding box.
%    \end{paramlist}
%
%    \begin{macro}{\if@HwM@cat@}
%    Switch that tells whether a witch that is about to be drawn should be 
%    accompanied by her cat or not.
%    \begin{macrocode}
\@ifdefinable\if@HwM@cat@{\newif\if@HwM@cat@}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@bold@version@name}
%    In version~0.01 of this package, the definition of the "\@HwM@if@bold@math"
%    macro (see below) used to be
%    \begin{verbatim}\newcommand*\@HwM@if@bold@math{%
%  \def\@tempa{bold}%
%  \ifx\math@version\@tempa
%    \expandafter\@firstoftwo
%  \else
%    \expandafter\@secondoftwo
%  \fi
%}\end{verbatim}
%    We have now decided to set the comparison string (\texttt{bold}) here, once
%    and for all: this allows the following macro to be purely expandable, a
%    feature we'll now need.
%    \begin{macrocode}
\newcommand*\@HwM@bold@version@name{bold}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@if@bold@math}
%    \changes{0.10}{2017 Apr 16}{Made purely expandable}
%    \LaTeX-style conditional: if the math version is currently \texttt{bold},
%    executes the code in the first argument, otherwise the code in the second
%    argument.  Now made purely expandable (see above).
%    \begin{macrocode}
\newcommand*\@HwM@if@bold@math{%
  \ifx\math@version\@HwM@bold@version@name
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@choose@thicknesses}
%    Shuffles arguments according to the current math version.  Now purely 
%    expandable.
%    \begin{macrocode}
\newcommand*\@HwM@choose@thicknesses[3]{%
  \@HwM@if@bold@math{#1#3}{#1#2}
}
%    \end{macrocode}
%    The typical use of this macro is as follows: suppose you have a macro
%    \cmd{\CS} with, say, five arguments, and suppose you want to invoke it
%    passing different values for some of the arguments, depending on the
%    current math version; more precisely, let's say that you want the following
%    call to be made
%    \begin{flushleft}
%      \small
%      "\CS{"\meta{fixed-value1}"}{"\meta{fixed-value2}"}{"^^A
%                \meta{bold-value3}"}{"\meta{bold-value4}"}{"^^A
%                \meta{bold-value5}"}"
%    \end{flushleft}
%    if the current math version is \texttt{bold}, but that you want, instead,
%    to call
%    \begin{flushleft}
%      \small
%      "\CS{"\meta{fixed-value1}"}{"\meta{fixed-value2}"}{"^^A
%                \meta{nrml-value3}"}{"\meta{nrml-value4}"}{"^^A
%                \meta{nrml-value5}"}"
%    \end{flushleft}
%    if it is not; then you would say
%    \begin{flushleft}
%      \small
%      "\@HwM@choose@thicknesses{\CS{"\meta{fixed-value1}"}{"^^A
%                \meta{fixed-value2}"}}"\\
%      "    {{"\meta{normal-value3}"}{"\meta{normal-value4}"}{"^^A
%                \meta{normal-value5}"}}"\\
%      "    {{"\meta{bold-value3}"}{"\meta{bold-value4}"}{"^^A
%                \meta{bold-value5}"}}"
%    \end{flushleft}
%    Note the inner pairs of braces; as usual, they can be omitted if they
%    surround a single token, \eg
%    \begin{verbatim}\@HwM@choose@thicknesses{\CS{FFF1}\textfont}
%    {\thr@@{4.0}{5.0}}
%    {{BBB3}{BBB4}\@empty}\end{verbatim}
%    \end{macro}
%
%    \begin{macro}{\@HwM@magic@star}
%    Draws a star; argument~\#1 is a scale factor.
%    \begin{macrocode}
\newcommand*{\@HwM@magic@star}[1]{%
  \begingroup
    \setlength\unitlength{#1\unitlength}%
    \picture(0,0)%
      \polygon*(0,1)(-.225,.309)(-.951,.309)(-.363,-.118)(-.588,-.809)%
              (0,-.382)(.588,-.809)(.363,-.118)(.951,.309)(.225,.309)%
    \endpicture
  \endgroup
}
%    \end{macrocode}
%    \end{macro}
%
%    \paragraph*{General remark:}
%    In all of the following drawings, the thickness of most of the lines
%    depends on the current math version.  On the other hand, some pictures are
%    made up of smaller reusable pieces that are shared among more than one
%    drawing.  As a matter of mental order, I~prefer to confine the lookup for
%    the current version to a single place for each picture, and pass the
%    appropriate thicknesses down to the macros that draw the single pieces as
%    parameters.  Nonetheless, the interface toward the rest of the code
%    requires macros that can draw a picture without requiring the caller to
%    specify thickness arguments.  This means that some drawing macros must
%    exist in two variants:
%    \begin{itemize}
%      \item
%        a ``private'' variant that requires the caller to specify thickness 
%        parameters;
%      \item
%        a ``public'' variant that doesn't require such parameters, but uses,
%        instead, the "\@HwM@choose@thicknesses" macro to find out the
%        appropriate thickness values by itself.
%    \end{itemize}
%    To make it clear when two macros are actually two such variants of the same
%    conceptual function, we shall consistently adhere to the following naming
%    convention:
%    \begin{itemize}
%      \item
%        the name of the``private'' private variant will be made up of words
%        separated by "@"~characters, and each of those word will \emph{not} be
%        capitalized (for example, "\@HwM@large@witch");
%      \item
%        the name of the ``public'' variant will be composed by exactly the same
%        words, again separated by "@"~characters, \emph{but} with each word
%        being also capitalized (for example, "\@HwM@Large@Witch").
%    \end{itemize}
%    Note, though, that the ``public'' variant of a macro will typically (but
%    not always) require the caller to specify a font selector like "\textfont";
%    we'll see that, from the point of view of the other parts of the code, this
%    is an acceptable requirement for the interface.
%
%    \subsubsection{Drawing the witch (and the cat)}
%
%    The following macros are responsible for the bulk of the task of drawing
%    the witch (with an optional cat).  Figure~\ref{fig:witch} shows a sketch of
%    this drawing.
%
%    \begin{figure}[tp]
%      \centering
%      The small variant:\\*[\bigskipamount]
%      \begin{picture}(6,4)(-3,-2)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-3,-2)(1,0){7}{\line(0,1){4}}
%        \multiput(-3,-2)(0,1){5}{\line(1,0){6}}
%        \color{black}
%        \linethickness{3pt}
%        \roundcap
%        \Line(-1,-1)(3,1)
%        \linethickness{1.5pt}
%        \Line(-1,-1)(-2.5,-1.25)
%        \Line(-1,-1)(-2.4,-1.5)
%        \Line(-1,-1)(-2.25,-1.75)
%        \Line(-1,-1)(-2,-2)
%        \put(-1.7,-.4){\magicstar{.4}}
%        \put(-2.7,-.8){\magicstar{.25}}
%        \Line(0,.9)(-.1,.7)
%        \polyline(.3,1.6)(.4,1.5)(.75,1.5)(.9,1.2)(.5,1.2)
%                (.6,1)(.8,.9)(.7,.75)(0,.9)(-.1,1)
%        \Line(.1,1.4)(.3,1.5)
%        \polygon*(-.5,1)(-1,0)(-1,-.5)(-.75,-1)(.5,-1)
%                (0,-1.8)(.2,-1.9)(.3,-1.7)(.4,-2)(1,-2)
%                (.5,-1.8)(.5,-1.5)(.8,-1.6)(1,-.75)(0,-.5)
%                (0,-.3)(.7,-.3)(.9,-.2)(1,0)(0,0)
%                (0,.7)
%        \polygon*(-1.5,1)(-1.4,1.5)(-1,2)(-.5,2)(0,1.75)
%                (.5,1.9)(1.25,1.75)(0,1.5)(-.5,1)(-1,.8)
%                (-1.2,1)(-1,1)(-.5,1.5)(-1,1.75)(-1.3,1.5)
%        ^^A
%        ^^A The cat:
%        \put(1.8,.5){\circle*{.6}}
%        \put(2.1,.7){\circle*{.5}}
%        \put(2.25,1){\circle*{.4}}
%        \polygon*(2.05,1)(2.05,1.25)(2.25,1.1)(2.45,1.25)(2.45,1)
%        \linethickness{3pt}
%        \cbezier(1.6,.3)(1,0)(2.1,-.2)(1.5,-.5)
%      \end{picture}
%
%      \bigskip\bigskip\bigskip
%
%      The large variant:\\*[\bigskipamount]
%      \begin{picture}(12,8)(-6,-4)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-6,-4)(1,0){13}{\line(0,1){8}}
%        \multiput(-6,-4)(0,1) {9}{\line(1,0){12}}
%        \color{black}
%        \roundcap
%        \linethickness{4pt}
%        \Line(-2,-2)(6,2)
%        \linethickness{2pt}
%        \Line(-2,-2)(-5,-2.5)
%        \Line(-2,-2)(-4.85,-2.95)
%        \Line(-2,-2)(-4.6,-3.3)
%        \Line(-2,-2)(-4.35,-3.65)
%        \Line(-2,-2)(-4,-4)
%        \put(-3,-1.2){\magicstar{.4}}
%        \put(-4.1,-.8){\magicstar{.8}}
%        \put(-5.4,-1.8){\magicstar{.6}}
%        \Line(0,1.8)(-.2,1.4)
%        \polyline(.6,3.2)(.8,3)(1.5,3)
%        \put(1.6,3){\oval(.2,.2)[tl]}
%        \put(1.6,3){\oval(.2,.2)[r]}
%        \polyline(1.6,2.9)(1.8,2.4)(1.2,2.4)(1,2.5)(1,2.3)
%                (1.2,2)(1.6,1.8)(1.7,1.8)(1.7,1.6)(1.4,1.5)
%                (0,1.8)(-.2,2)
%        \Line(.2,2.8)(.6,3)
%        \polygon*(-1,2)(-2,0)(-2,-1)(-1.5,-2)(1,-2)
%                (0,-3.6)(.4,-3.8)(.6,-3.4)(.8,-4)(2,-4)
%                (1,-3.6)(1,-3)(1.6,-3.2)(2,-1.5)(0,-1)
%                (0,-.6)(1.4,-.6)(1.8,-.4)(2,0)(0,0)
%                (0,1.4)
%        \polygon*(-3,2)(-2.8,3)(-2,4)(-1.5,4.1)(-1,4)(0,3.5)
%                (1,3.8)(2.5,3.5)(3,3.3)(2,3.4)(0,3)(-1,2)(-2,1.6)
%                (-2.7,2)(-2,2)(-1,3)(-2,3.5)(-2.6,3)
%        \linethickness{.4pt}
%        \Line(1.7,1.6)(2,1.6)
%        \Line(1.7,1.6)(1.9,1.4)
%        \Line(1.7,1.6)(1.7,1.3)
%        ^^A
%        ^^A The cat:
%        \put(3.6,1){\circle*{1.2}}
%        \put(4.2,1.4){\circle*{1}}
%        \put(4.5,2){\circle*{.8}}
%        \polygon*(4.1,2)(4.1,2.5)(4.5,2.2)(4.9,2.5)(4.9,2)
%        \linethickness{4pt}
%        \cbezier(3.2,.6)(2,0)(4.2,-.4)(3,-1)
%        \buttcap
%        \linethickness{.4pt}
%        \Line(3.8,2.1)(5.2,1.9)
%        \Line(3.8,2)(5.2,2)
%        \Line(3.8,1.9)(5.2,2.1)
%      \end{picture}
%
%      \caption{Sketches of the witch}
%      \label{fig:witch}
%    \end{figure}
%
%    \begin{macro}{\@HwM@large@witch}
%    This is the macro that draws the ``large'' version of the witch (for
%    "\displaystyle").  This is the ``private'' variant, with the following
%    parameters:
%    \begin{paramlist}
%      \param
%        "l"~for a right-facing witch, "r"~for a left-facing one;\\
%      \param
%        "r"~for a right-facing witch, "l"~for a left-facing one;\\
%      \param
%        main drawing thickn., in units of the default-rule-thickness
%        "\fontdimen";\\
%      \param
%        thickness of the broomstick and of the cat's tail, in the same units;\\
%      \param
%        thickness of hair (beard, whiskers), in points~(\texttt{pt}).
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@large@witch[5]{%
  \begin{@HwM@large@picture}{12}{-6}%
    \roundcap
    \linethickness{#4\@HwM@thickness@units@for \textfont}%
    \Line(\-2,-2)(\+6,2)%
    \linethickness{#3\@HwM@thickness@units@for \textfont}%
    \Line(\-2,-2)(\-5,-2.5)%
    \Line(\-2,-2)(\-4.85,-2.95)%
    \Line(\-2,-2)(\-4.6,-3.3)%
    \Line(\-2,-2)(\-4.35,-3.65)%
    \Line(\-2,-2)(\-4,-4)%
    \put(\-3,-1.2){\@HwM@magic@star{.4}}%
    \put(\-4.1,-.8){\@HwM@magic@star{.8}}%
    \put(\-5.4,-1.8){\@HwM@magic@star{.6}}%
    \Line(0,1.8)(\-.2,1.4)%
    \polyline(\+.6,3.2)(\+.8,3)(\+1.5,3)%
    \put(\+1.6,3){\oval(.2,.2)[t#1]}%
    \put(\+1.6,3){\oval(.2,.2)[#2]}%
    \polyline(\+1.6,2.9)(\+1.8,2.4)(\+1.2,2.4)(\+1,2.5)(\+1,2.3)%
            (\+1.2,2)(\+1.6,1.8)(\+1.7,1.8)(\+1.7,1.6)(\+1.4,1.5)%
            (0,1.8)(\-.2,2)%
    \polygon*(\-1,2)(\-2,0)(\-2,-1)(\-1.5,-2)(\+1,-2)%
            (0,-3.6)(\+.4,-3.8)(\+.6,-3.4)(\+.8,-4)(\+2,-4)%
            (\+1,-3.6)(\+1,-3)(\+1.6,-3.2)(\+2,-1.5)(0,-1)%
            (0,-.6)(\+1.4,-.6)(\+1.8,-.4)(\+2,0)(0,0)%
            (0,1.4)%
    \polygon*(\-3,2)(\-2.8,3)(\-2,4)(\-1.5,4.1)(\-1,4)(0,3.5)%
            (\+1,3.8)(\+2.5,3.5)(\+3,3.3)(\+2,3.4)(0,3)(\-1,2)%
            (\-2,1.6)(\-2.7,2)(\-2,2)(\-1,3)(\-2,3.5)(\-2.6,3)%
    \buttcap
%    \end{macrocode}
%    The witch's eye:
%    \begin{macrocode}
    \Line(\+.2,2.8)(\+.6,3)%
%    \end{macrocode}
%    Rest of the code:
%    \begin{macrocode}
    \linethickness{#5\p@}%
    \Line(\+1.7,1.6)(\+2,1.6)%
    \Line(\+1.7,1.6)(\+1.9,1.4)%
    \Line(\+1.7,1.6)(\+1.7,1.3)%
    \if@HwM@cat@
      \Line(\+3.8,2.1)(\+5.2,1.9)%
      \Line(\+3.8,2)(\+5.2,2)%
      \Line(\+3.8,1.9)(\+5.2,2.1)%
      \roundcap
      \linethickness{#4\@HwM@thickness@units@for \textfont}%
      \put(\+3.6,1){\circle*{1.2}}%
      \put(\+4.2,1.4){\circle*{1}}%
      \put(\+4.5,2){\circle*{.8}}%
      \polygon*(\+4.1,2)(\+4.1,2.5)(\+4.5,2.2)(\+4.9,2.5)(\+4.9,2)%
      \cbezier(\+3.2,.6)(\+2,0)(\+4.2,-.4)(\+3,-1)%
    \fi
  \end{@HwM@large@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Large@Witch}
%    The ``public'' variant of the above, with the following parameters:
%    \begin{paramlist}
%      \param
%        "l"~for a right-facing witch, "r"~for a left-facing one;\\
%      \param
%        "r"~for a right-facing witch, "l"~for a left-facing one.
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@Large@Witch[2]{%
  \@HwM@choose@thicknesses{\@HwM@large@witch #1#2}%
        {{.4}{1.8}{.1}}%
        {{.8}{2.7}{.15}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@common@small@body}
%    The macros that draw the ``small'' version of the witch (for styles others
%    than "\displaystyle") are more complex, because some parts of the drawing
%    are shared also by the extensible brooms ("\xrightwicthonbroom",
%    "\overrightwitchonbroom", and the like).  The following macro draws the
%    parts that are common to all such constructions.  This is the ``private''
%    variant, with the following parameters:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont");\\
%      \param
%        line thickness for the witch's face, in relative units.
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@common@small@body[2]{%
  \linethickness{#2\@HwM@thickness@units@for #1}%
  \buttcap
%    \end{macrocode}
%    The witch's eye:
%    \begin{macrocode}
  \Line(\+.1,1.4)(\+.3,1.5)%
%    \end{macrocode}
%    Rest of the code:
%    \begin{macrocode}
  \roundcap
  \Line(0,.9)(\-.1,.7)%
  \polyline(\+.3,1.6)(\+.4,1.5)(\+.75,1.5)(\+.9,1.2)(\+.5,1.2)%
          (\+.6,1)(\+.8,.9)(\+.7,.75)(0,.9)(\-.1,1)%
  \polygon*(\-.5,1)(\-1,0)(\-1,-.5)(\-.75,-1)(\+.5,-1)%
          (0,-1.8)(\+.2,-1.9)(\+.3,-1.7)(\+.4,-2)(\+1,-2)%
          (\+.5,-1.8)(\+.5,-1.5)(\+.8,-1.6)(\+1,-.75)(0,-.5)%
          (0,.7)%
  \polygon*(\-1.5,1)(\-1.4,1.5)(\-1,2)(\-.5,2)(0,1.75)%
          (\+.5,1.9)(\+1.25,1.75)(0,1.5)(\-.5,1)(\-1,.8)%
          (\-1.2,1)(\-1,1)(\-.5,1.5)(\-1,1.75)(\-1.3,1.5)%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Common@Small@Body}
%    The ``public'' variant of the above; parameters:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@Common@Small@Body[1]{%
  \@HwM@choose@thicknesses {\@HwM@common@small@body #1}{{.35}}{{.7}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@common@small@cat}
%    Draws the part of the cat that is shared also by the extensible brooms;
%    ``private'' variant, parameters are as follows:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont");\\
%      \param
%        line thickness for the cat's tail, in relative units.
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@common@small@cat[2]{%
  \roundcap
  \linethickness{#2\@HwM@thickness@units@for #1}%
  \if@HwM@cat@
    \put(\+1.8,.5){\circle*{.6}}%
    \put(\+2.1,.7){\circle*{.5}}%
    \put(\+2.25,1){\circle*{.4}}%
    \polygon*(\+2.05,1)(\+2.05,1.25)(\+2.25,1.1)(\+2.45,1.25)
            (\+2.45,1)%
    \cbezier(\+1.8,.4)(\+1.2,.1)(\+2,-.1)(\+1.4,-.4)%
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Common@Small@Cat}
%    The ``public'' variant of the above; parameters:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@Common@Small@Cat[1]{%
  \@HwM@choose@thicknesses {\@HwM@common@small@cat #1}{{}}{{2}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Small@Witch}
%    This is the macro that draws the complete ``small'' variant of the witch
%    (for styles other than "\displaystyle").  This one exists only in the
%    ``public'' variant, with the following arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\scriptstyle");\\
%      \param
%        font selector (\eg "\scriptfont").
%    \end{paramlist}
%    The first parameter is imposed by the interface toward other parts of the
%    code, because other macros that share the same interface might need it, but
%    isn't actually used in this case.
%    \begin{macrocode}
\newcommand*\@HwM@Small@Witch[2]{%
  \begin{@HwM@small@picture}#2{6}{-3}%
    \@HwM@Common@Small@Cat #2%
    \Line(\-1,-1)(\+3,1)%
    \@HwM@Common@Small@Body #2%
    \Line(\-1,-1)(\-2.5,-1.25)%
    \Line(\-1,-1)(\-2.4,-1.5)%
    \Line(\-1,-1)(\-2.25,-1.75)%
    \Line(\-1,-1)(\-2,-2)%
    \put(\-1.7,-.4){\@HwM@magic@star{.4}}%
    \put(\-2.7,-.8){\@HwM@magic@star{.25}}%
    \polygon*(0,-.3)(\+.7,-.3)(\+.9,-.2)(\+1,0)(0,0)%
  \end{@HwM@small@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Small@Witch@Wo@Broom}
%    Draws the small witch w/o the broom.  This one exists only in the
%    ``public'' variant, with the following argument:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@Small@Witch@Wo@Broom[1]{%
  \begin{@HwM@math@picture}{4}{-2}{}#1{0}{\+1}%
    \@HwM@Common@Small@Body #1%
    \polygon*(\-.1,.4)(\+1,-.9)(\+1,-1.2)(\+.8,-1.2)(\-.1,0)%
  \end{@HwM@math@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Small@Cat@On@Hori@Broom}
%    Draws a small cat on a horizontal broomstick.  This one exists only in the
%    ``public'' variant, with the following argument:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@Small@Cat@On@Hori@Broom[1]{%
  \begin{@HwM@math@picture}{0}{-.6}{}#1{0}{\+2.5}%
    \@HwM@Common@Small@Cat #1%
    \Line(\+2.2,.8)(\+2.4,.4)%
  \end{@HwM@math@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \subsubsection{Drawing the pumpkins}
%
%    Here we group the macros that take care of drawing the pumpkins.
%    Figure~\ref{fig:pumpkins} shows a sketch of the relevant drawings.
%
%    \begin{figure}[tp]
%      \newcommand*{\PumpkinSmallMouth}[7]{^^A
%        \polygon*^^A
%            (-#1)(-#2)(-#3)(0,#4)(#3)(#2)(#1)^^A
%            (#5)(#6)(0,#7)(-#6)(-#5)^^A
%      }
%      \newcommand*{\PumpkinLargeMouth}[9]{^^A
%        \polygon*^^A
%            (-#1)(-#2)(-#3)(-#4)(0,#5)(#4)(#3)(#2)(#1)^^A
%            (#6)(#7)(#8)(0,#9)(-#8)(-#7)(-#6)^^A
%      }
%
%      \centering
%
%      The binary operator variant:\\*[\medskipamount]
%      \begin{picture}(3.2,4)(-1.6,-2)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-2,-2)(1,0){5}{\line(0,1){4}}
%        \multiput(-2,-2)(0,1){5}{\line(1,0){4}}
%        \color{black}
%        \roundcap
%        \linethickness{1.3pt}
%        \Line(-.1,1)(-.15,1.4)(.15,1.4)(.1,1)
%        \Line(-.1,-1)(.1,-1)
%        \newcommand*{\PumpkinProfile}[1]{%
%          \cbezier(#1.1,1)(#11.2,1.7)(#11.6,.8)(#11.6,0)%
%          \cbezier(#1.1,-1)(#11,-1.5)(#11.6,-.8)(#11.6,0)%
%          \put(#1.6,.5){\circle*{.4}}%
%        }
%        \PumpkinProfile-
%        \PumpkinProfile+
%        \PumpkinSmallMouth{1,-.1}{.7,-.5}{.4,-.4}
%            {-.7}
%            {.6,-.3}{.3,-.2}
%            {-.4}
%      \end{picture}
%
%      \bigskip\bigskip
%
%      The small variant:\\*[\medskipamount]
%      \begin{picture}(4.5,4)(-2.25,-2)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-3,-2)(1,0){7}{\line(0,1){4}}
%        \multiput(-3,-2)(0,1){5}{\line(1,0){6}}
%        \color{black}
%        \roundcap
%        \linethickness{2pt}
%        \Line(-.1,1.5)(-.15,2)(.15,2)(.1,1.5)
%        \Line(-.1,-1.8)(.1,-1.8)
%        \newcommand*{\PumpkinProfile}[1]{%
%          \cbezier(#1.1,1.5)(#11.75,2.5)(#12.25,1)(#12.25,0)%
%          \cbezier(#1.1,-1.8)(#11.6,-2.4)(#12.25,-1)(#12.25,0)%
%          \put(#1.75,.75){\circle*{.5}}%
%        }
%        \PumpkinProfile-
%        \PumpkinProfile+
%        \polygon*(0,.2)(-.2,-.2)(.2,-.2)
%        \PumpkinSmallMouth{1.3,-.3}{.8,-.8}{.5,-.7}
%            {-1}
%            {.7,-.6}{.4,-.5}
%            {-.7}
%      \end{picture}
%   
%      \bigskip\bigskip
%   
%      The large variant:\\*[\medskipamount]
%      \begin{picture}(9,8)(-4.5,-4)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-5,-4)(1,0){11}{\line(0,1) {8}}
%        \multiput(-5,-4)(0,1) {9}{\line(1,0){10}}
%        \color{black}
%        \roundcap
%        \linethickness{3pt}
%        \Line(-.15,2.25)(-.3,3)(.3,3)(.15,2.25)
%        \Line(-.15,-2.7)(.15,-2.7)
%        \newcommand*{\PumpkinProfile}[1]{%
%          \cbezier(#1.15,2.25)(#12.63,3.75)(#13.38,1.5)(#13.38,0)%
%          \cbezier(#1.15,-2.7)(#12.4,-3.6)(#13.38,-1.5)(#13.38,0)%
%          \put(#11.13,1.13){\circle*{.8}}%
%        }
%        \PumpkinProfile-
%        \PumpkinProfile+
%        \polygon*(0,.35)(-.35,-.35)(.35,-.35)
%        \PumpkinLargeMouth{2,-.5}{1.3,-1.4}{.8,-1.3}{.5,-1.6}
%            {-1.5}
%            {1.2,-1.1}{.7,-1}{.45,-1.1}
%            {-1}
%      \end{picture}
%
%      \caption{Sketches of the pumpkins}
%      \label{fig:pumpkins}
%    \end{figure}
%
%    As you can see in figure~\ref{fig:pumpkins}, pumpkins come in three
%    variants: a binary operator and the two versions (both for display and
%    nondisplay math) of a ``large'' operator.  Below, the macros for each
%    version are preceded by one or two useful ``subroutines'', that draw some
%    patterns that appear more than once in the picture.
%
%    \begin{macro}{\@HwM@large@pumpkin@profile}
%    Subroutine that draws the outline of the pumpkin and one eye, for a
%    ``large'' operator in display style.  Argument~\#1 is either \texttt{-}
%    or~\texttt{+}, depending on which half of the pumpkin you want to draw.
%    \begin{macrocode}
\newcommand*\@HwM@large@pumpkin@profile[1]{%
  \cbezier(#1.15,2.25)(#12.63,3.75)(#13.38,1.5)(#13.38,0)%
  \cbezier(#1.15,-2.7)(#12.4,-3.6)(#13.38,-1.5)(#13.38,0)%
  \put(#11.13,1.13){\circle*{.8}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@large@pumpkin@mouth}
%    This subroutine draws the variant of the mouth that is used by the display
%    version of the ``large'' operator.  The parameters are suitable point
%    coordinates.
%    \begin{macrocode}
\newcommand*\@HwM@large@pumpkin@mouth[9]{%
    \polygon*%
%    \end{macrocode}
%    Lower lip:
%    \begin{macrocode}
        (-#1)(-#2)(-#3)(-#4)(0,#5)(#4)(#3)(#2)(#1)%
%    \end{macrocode}
%    Upper lip:
%    \begin{macrocode}
        (#6)(#7)(#8)(0,#9)(-#8)(-#7)(-#6)%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@large@pumpkin}
%    Private version of the macro that draws the pumpkin correspondng to a
%    ``large'' operator used in display math mode.  Argument:
%    \begin{paramlist}
%      \param
%        drawing thickness, in units of the default-rule-thickness "\fontdimen".
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@large@pumpkin[1]{%
  \begin{@HwM@bigop@picture}\displaystyle \textfont {7.5}{-3.75}%
    \roundcap
    \linethickness{#1\@HwM@thickness@units@for \textfont}%
    \Line(-.15,2.25)(-.3,3)(.3,3)(.15,2.25)%
    \Line(-.15,-2.7)(.15,-2.7)%
    \@HwM@large@pumpkin@profile-%
    \@HwM@large@pumpkin@profile+%
    \polygon*(0,.35)(-.35,-.35)(.35,-.35)%
    \@HwM@large@pumpkin@mouth{2,-.5}{1.3,-1.4}{.8,-1.3}{.5,-1.6}%
        {-1.5}%
        {1.2,-1.1}{.7,-1}{.45,-1.1}%
        {-1}%
  \end{@HwM@bigop@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Large@Pumpkin}
%    Public version of the above; requires no parameters.
%    \begin{macrocode}
\newcommand*\@HwM@Large@Pumpkin{%
  \@HwM@choose@thicknesses \@HwM@large@pumpkin
        {{1.8}}%
        {{2.2}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@small@pumpkin@profile}
%    Subroutine that draws the outline of the pumpkin and one eye, for a
%    ``large'' operator \emph{not} in display style.  Argument~\#1 is either
%    \texttt{-} or~\texttt{+}, depending on which half of the pumpkin you want
%    to draw.
%    \begin{macrocode}
\newcommand*\@HwM@small@pumpkin@profile[1]{%
  \cbezier(#1.1,1.5)(#11.75,2.5)(#12.25,1)(#12.25,0)%
  \cbezier(#1.1,-1.8)(#11.6,-2.4)(#12.25,-1)(#12.25,0)%
  \put(#1.75,.75){\circle*{.5}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@small@pumpkin@mouth}
%    This subroutine draws the variant of the mouth that is shared between the
%    binary operator and the nondisplay version of the ``large'' operator.  The
%    parameters are suitable point coordinates.
%    \begin{macrocode}
\newcommand*\@HwM@small@pumpkin@mouth[7]{%
    \polygon*%
%    \end{macrocode}
%    Lower lip:
%    \begin{macrocode}
        (-#1)(-#2)(-#3)(0,#4)(#3)(#2)(#1)%
%    \end{macrocode}
%    Upper lip:
%    \begin{macrocode}
        (#5)(#6)(0,#7)(-#6)(-#5)%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@small@pumpkin}
%    Private version of the macro that draws the pumpkin correspondng to a
%    ``large'' operator used in nondisplay math mode.  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\scriptstyle");\\
%      \param
%        font selector (\eg "\scriptfont");\\
%      \param
%        drawing thickness, in units of the default-rule-thickness "\fontdimen".
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@small@pumpkin[3]{%
  \begin{@HwM@bigop@picture}#1#2{5}{-2.5}%
    \roundcap
    \linethickness{#3\@HwM@thickness@units@for #2}%
    \Line(-.1,1.5)(-.15,2)(.15,2)(.1,1.5)%
    \Line(-.1,-1.8)(.1,-1.8)%
    \@HwM@small@pumpkin@profile-%
    \@HwM@small@pumpkin@profile+%
    \polygon*(0,.2)(-.2,-.2)(.2,-.2)%
    \@HwM@small@pumpkin@mouth{1.3,-.3}{.8,-.8}{.5,-.7}%
        {-1}%
        {.7,-.6}{.4,-.5}%
        {-.7}%
  \end{@HwM@bigop@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Small@Pumpkin}
%    Public version of the above, with the following arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\scriptstyle");\\
%      \param
%        font selector (\eg "\scriptfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@Small@Pumpkin[2]{%
  \@HwM@choose@thicknesses{\@HwM@small@pumpkin #1#2}%
        {{}}%
        {{1.5}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@binop@pumpkin@profile}
%    Subroutine that draws the outline of the pumpkin and one eye, for a binary
%    operator (in whatever style).  Argument~\#1 is either \texttt{-}
%    or~\texttt{+}, depending on which half of the pumpkin you want to draw.
%    \begin{macrocode}
\newcommand*\@HwM@binop@pumpkin@profile[1]{%
  \cbezier(#1.1,1)(#11.2,1.7)(#11.6,.8)(#11.6,0)%
  \cbezier(#1.1,-1)(#11,-1.5)(#11.6,-.8)(#11.6,0)%
  \put(#1.6,.5){\circle*{.4}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@binop@pumpkin}
%    Private version of the macro that draws the pumpkin correspondng to a
%    binary operator.  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\textstyle");\\
%      \param
%        font selector (\eg "\textfont");\\
%      \param
%        drawing thickness, in units of the default-rule-thickness "\fontdimen".
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@binop@pumpkin[3]{%
  \begin{@HwM@oplus@picture}#1#2{3.6}{-1.8}%
    \roundcap
    \linethickness{#3\@HwM@thickness@units@for #2}%
    \Line(-.1,1)(-.15,1.4)(.15,1.4)(.1,1)%
    \Line(-.1,-1)(.1,-1)%
    \@HwM@binop@pumpkin@profile-%
    \@HwM@binop@pumpkin@profile+%
    \@HwM@small@pumpkin@mouth{1,-.1}{.7,-.5}{.4,-.4}%
        {-.7}%
        {.6,-.3}{.3,-.2}%
        {-.4}%
  \end{@HwM@oplus@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Binop@Pumpkin}
%    Public version of the above, with the following arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\textstyle");\\
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@Binop@Pumpkin[2]{%
  \@HwM@choose@thicknesses{\@HwM@binop@pumpkin #1#2}%
        {{.6}}%
        {{1.2}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \subsubsection{Drawing the skulls}
%
%    Now it's the turn of the macros that take care of drawing the skulls.
%    Figure~\ref{fig:skulls} shows a sketch of the relevant drawings.
%
%    \begin{figure}[tp]
%      \newcommand*{\binaryskullnose}[8]{^^A
%        \moveto(0,-.#1)^^A
%        \curveto(-.#2,-.#1)(-.#3,-.#4)(-.#5,-.#6)^^A
%        \curveto(-.#7,-.#8)(.#7,-.#8)(.#5,-.#6)^^A
%        \curveto(.#3,-.#4)(.#2,-.#1)(0,-.#1)^^A
%        \fillpath
%      }
%      \newcommand*{\semibinaryskullcontour}[1]{^^A
%        \moveto(#1.15,0)^^A
%        \curveto(#1.15,.1)(#1.15,.21)(#1.4,.2)^^A
%        \curveto(#1.6,.19)(#1.69,.1)(#1.7,0)^^A
%        \curveto(#1.71,-.1)(#1.6,-.3)(#1.5,-.3)^^A
%        \curveto(#1.4,-.3)(#1.15,-.2)(#1.15,0)^^A
%        \fillpath
%        \cbezier(0,1.333336)(#11,1.333336)(#11.2,0.5)(#11,0)^^A
%        \cbezier(#11,0)(#11.05,-.9)(#1.5,-.3)(#1.5,-.65)^^A
%      }
%      \newcommand*{\semibinaryskullteeth}[2]{^^A
%        \moveto(#1.5,-.7)^^A
%        \curveto(#1.45,-.6)(#1.4,-.6)(#1.35,-.7)^^A
%        \curveto(#1.4,-1.2)(#1.5,-1.2)(#1.5,-.7)^^A
%        \strokepath
%        \moveto(#1.33,-.7)^^A
%        \curveto(#1.3,-.6)(#1.22,-.6)(#1.19,-.75)^^A
%        \curveto(#1.15,-.9)(#1.38,-.9)(#1.33,-.7)^^A
%        \strokepath
%        \moveto(#1.17,-.75)^^A
%        \curveto(#1.13,-.65)(#1.05,-.62)(#1.02,-.75)^^A
%        \curveto(#2.03,-.95)(#1.22,-.95)(#1.17,-.75)^^A
%        \strokepath
%      }
% 
%      \newcommand*{\semismallskullcontour}[1]{^^A
%        \moveto(#1.225,0)^^A
%        \curveto(#1.225,.15)(#1.225,.315)(#1.6,.3)^^A
%        \curveto(#1.9,.285)(#11.035,.15)(#11.05,0)^^A
%        \curveto(#11.065,-.15)(#1.9,-.45)(#1.75,-.45)^^A
%        \curveto(#1.6,-.45)(#1.225,-.3)(#1.225,0)^^A
%        \fillpath
%        \cbezier(0,2)(#11.5,2)(#11.8,0.75)(#11.5,0)^^A
%        \cbezier(#11.5,0)(#11.575,-1.35)(#1.75,-.45)(#1.75,-1)^^A
%      }
%      \newcommand*{\semismallskulljaw}[1]{^^A
%        \moveto(#11.25,-.9)^^A
%        \curveto(#11.24,-1.2)(#11.2,-1)(#11.1,-1.3)^^A
%        \curveto(#11,-1.6)(#11,-1.8)(#1.75,-1.9)^^A
%        \curveto(0,-2.1)(#1.3,-2)(0,-2)^^A
%        \strokepath
%      }
%      \newcommand*{\semismallskullinnerjaw}[1]{^^A
%        \moveto(#11,-.9)^^A
%        \curveto(#1.9,-1)(#11,-1.5)(#1.75,-1.5)^^A
%        \strokepath
%      }
%      \newcommand*{\semismallskullteeth}[2]{^^A
%        \moveto(#1.75,-1)^^A
%        \curveto(#1.65,-.9)(#1.6,-.9)(#1.5,-1)^^A
%        \curveto(#1.6,-2)(#1.7,-2)(#1.75,-1)^^A
%        \strokepath
%        \moveto(#1.45,-1)^^A
%        \curveto(#1.4,-.9)(#1.3,-.9)(#1.285,-1.05)^^A
%        \curveto(#1.2,-1.35)(#1.6,-1.35)(#1.45,-1)^^A
%        \strokepath
%        \moveto(#1.25,-1.05)^^A
%        \curveto(#1.2,-.9)(#1.04,-.9)(#1.03,-1.05)^^A
%        \curveto(#2.08,-1.4)(#1.35,-1.4)(#1.25,-1.05)^^A
%        \strokepath
%        \moveto(#1.5,-1.5)^^A
%        \curveto(#1.47,-1.65)(#1.35,-1.6)(#1.3,-1.55)^^A
%        \curveto(#1.15,-1.25)(#1.65,-1.25)(#1.5,-1.5)^^A
%        \strokepath
%        \moveto(#1.25,-1.55)^^A
%        \curveto(#1.2,-1.7)(#1.04,-1.7)(#1.03,-1.55)^^A
%        \curveto(#2.1,-1.3)(#1.35,-1.3)(#1.25,-1.55)^^A
%        \strokepath
%      }
% 
%      \newcommand*{\largeskullnose}[9]{^^A
%        \moveto(0,-#1)^^A
%        \curveto(-#2,-#1)(-#3,-#1)(-#4,-#5)^^A
%        \curveto(-#6,-#7)(-#8,-#9)(0,-#9)^^A
%        \curveto(#8,-#9)(#6,-#7)(#4,-#5)^^A
%        \curveto(#3,-#1)(#2,-#1)(0,-#1)^^A
%        \fillpath
%      }
%      \newcommand*{\semilargeskullcontour}[1]{^^A
%        \moveto(#1.3375,0)^^A
%        \curveto(#1.3375,.225)(#1.3375,.4725)(#1.9,.45)^^A
%        \curveto(#11.35,.4275)(#11.5525,.225)(#11.575,0)^^A
%        \curveto(#11.5975,-.225)(#11.35,-.675)(#11.125,-.675)^^A
%        \curveto(#1.9,-.675)(#1.3375,-.45)(#1.3375,0)^^A
%        \fillpath
%        \cbezier(#12,2)(#12.1,1.8)(#12.7,1.125)(#12.25,0)^^A
%        \moveto(#12.24,.1)^^A
%        \curveto(#12.3,-1)(#12,-1.2)(#11.5,-1.2)^^A
%        \curveto(#11.3,-1.2)(#11.125,-1.3)(#11.125,-1.5)^^A
%        \strokepath
%        ^^A Jaw
%        \moveto(#11.875,-1.35)^^A
%        \curveto(#11.86,-1.8)(#11.8,-1.5)(#11.65,-1.95)^^A
%        \curveto(#11.5,-2.4)(#11.5,-2.75)(#11.2,-2.9)^^A
%        \curveto(#1.9,-3.05)(#11,-3.2)(#1.3,-3.1)^^A
%        \strokepath
%      }
%      \newcommand*{\semilargeskullinnerjaw}[1]{^^A
%        \moveto(#11.5,-1.35)^^A
%        \curveto(#11.35,-1.5)(#11.5,-2.25)(#11.125,-2.25)^^A
%        \strokepath
%      }
%      \newcommand*{\semilargeskullteeth}[2]{^^A
%        \moveto(#1.75,-2.25)^^A
%        \curveto(#1.65,-2.5)(#1.55,-2.5)(#1.45,-2.3)^^A
%        \curveto(#1.35,-2.05)(#1.4,-2)(#1.6,-2)^^A
%        \curveto(#1.8,-2)(#1.8,-2.05)(#1.75,-2.25)^^A
%        \strokepath
%        \moveto(#1.35,-2.3)^^A
%        \curveto(#1.25,-2.6)(#1.1,-2.65)(#1.05,-2.3)^^A
%        \curveto(#1.05,-2.05)(0,-2.05)(#1.2,-2.05)^^A
%        \curveto(#1.4,-2.05)(#1.42,-2)(#1.35,-2.3)^^A
%        \strokepath
%        \moveto(#11.12,-1.6)^^A
%        \curveto(#11,-1.3)(#1.9,-1.3)(#1.75,-1.6)^^A
%        \curveto(#11,-3)(#11,-3)(#11.12,-1.5)^^A
%        \strokepath
%        \moveto(#1.7,-1.6)^^A
%        \curveto(#1.6,-1.4)(#1.5,-1.4)(#1.45,-1.65)^^A
%        \curveto(#1.45,-1.85)(#1.4,-1.95)(#1.55,-1.95)^^A
%        \curveto(#1.85,-1.95)(#1.75,-1.75)(#1.7,-1.6)^^A
%        \strokepath
%        \moveto(#1.4,-1.65)^^A
%        \curveto(#1.3,-1.4)(#1.1,-1.4)(#1.05,-1.7)^^A
%        \curveto(#1.05,-1.9)(#2.05,-2)(#1.225,-2)^^A
%        \curveto(#1.5,-2)(#1.45,-1.9)(#1.4,-1.65)
%        \strokepath
%      }
%      \newcommand*{\semilargeskullthinlines}[1]{^^A
%        \moveto(#1.8,.7)^^A
%        \curveto(#1.4,.7)(#1.4,.9)(#1.2,.7)^^A
%        \curveto(#1.1,.6)(#1.2,.4)(#1.2,.3)^^A
%        \strokepath
%        \cbezier(#11.3,.7)(#11.5,.7)(#11.5,.75)(#11.75,.5)^^A
%      }
%
%      \centering
%
%      The binary operator variant:\\*[\medskipamount]
%      \begin{picture}(3.2,4)(-1.6,-2)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-2,-2)(1,0){5}{\line(0,1){4}}
%        \multiput(-2,-2)(0,1){5}{\line(1,0){4}}
%        \color{black}
%        \roundcap
%        \linethickness{.7pt}
%        \semibinaryskullteeth-+
%        \semibinaryskullteeth+-
%        \linethickness{1.3pt}
%        \binaryskullnose{5}{1}{2}{5}{15}{4}{1}{1}
%        \semibinaryskullcontour-
%        \semibinaryskullcontour+
%      \end{picture}
%
%      \bigskip\bigskip
%
%      The small variant:\\*[\medskipamount]
%      \begin{picture}(4,4)(-2,-2)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-2,-2)(1,0){5}{\line(0,1){4}}
%        \multiput(-2,-2)(0,1){5}{\line(1,0){4}}
%        \color{black}
%        \roundcap
%        \linethickness{.8pt}
%        \semismallskullteeth-+
%        \semismallskullteeth+-
%        \linethickness{2pt}
%        \binaryskullnose{75}{15}{3}{75}{225}{6}{15}{15}
%        \semismallskullcontour-
%        \semismallskullcontour+
%        \semismallskulljaw-
%        \semismallskulljaw+
%        \linethickness{1.2pt}
%        \semismallskullinnerjaw-
%        \semismallskullinnerjaw+
%      \end{picture}
%   
%      \bigskip\bigskip
%   
%      The large variant:\\*[\medskipamount]
%      \begin{picture}(9,8)(-4.5,-4)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-4,-4)(1,0){9}{\line(0,1){8}}
%        \multiput(-4,-4)(0,1){9}{\line(1,0){8}}
%        \color{black}
%        \roundcap
%        \linethickness{1pt}
%        \semilargeskullteeth-+
%        \semilargeskullteeth+-
%        \linethickness{3pt}
%        \largeskullnose
%            {1.125}{.1}{.5}{.3375}{.9}{.147}{.7}{.2}{.4}
%        \cbezier(-2,2)(-1.25,3.5)(1.25,3.5)(2,2)
%        \semilargeskullcontour-
%        \semilargeskullcontour+
%        \cbezier(-.3,-3.1)(0,-3)(0,-3)(.3,-3.1)
%        \linethickness{1.8pt}
%        \semilargeskullinnerjaw-
%        \semilargeskullinnerjaw+
%        \linethickness{.5pt}
%        \semilargeskullthinlines-
%        \semilargeskullthinlines+
%      \end{picture}
%
%      \caption{Sketches of the skulls}
%      \label{fig:skulls}
%    \end{figure}
%
%    As you can see in figure~\ref{fig:pumpkins}, skulls too come in three
%    variants: a binary operator and the two versions (both for display and
%    nondisplay math) of a ``large'' operator.  Below, the macros for each
%    version are preceded by one or two useful ``subroutines'', that draw some
%    patterns that appear more than once in the picture.
%
%    \begin{macro}{\@HwM@large@skull@nose}
%    Subroutine that draws the (hole corresponding to the) nose in the variant 
%    of the skull that is used for a ``large'' operator typeset in display 
%    style.  Parameters are suitable points coordinates.
%    \begin{macrocode}
\newcommand*\@HwM@large@skull@nose[9]{%
  \moveto(0,-#1)%
  \curveto(-#2,-#1)(-#3,-#1)(-#4,-#5)%
  \curveto(-#6,-#7)(-#8,-#9)(0,-#9)%
  \curveto(#8,-#9)(#6,-#7)(#4,-#5)%
  \curveto(#3,-#1)(#2,-#1)(0,-#1)%
  \fillpath
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@large@skull@profile}
%    Subroutine that draws the outline and the outer part of the jaw in the
%    variant of the skull that is used for a ``large'' operator typeset in
%    display style.  Argument~\#1 is either \texttt{-} or~\texttt{+}, depending
%    on which half of the skull you want to draw.
%    \begin{macrocode}
\newcommand*\@HwM@large@skull@profile[1]{%
  \moveto(#1.3375,0)%
  \curveto(#1.3375,.225)(#1.3375,.4725)(#1.9,.45)%
  \curveto(#11.35,.4275)(#11.5525,.225)(#11.575,0)%
  \curveto(#11.5975,-.225)(#11.35,-.675)(#11.125,-.675)%
  \curveto(#1.9,-.675)(#1.3375,-.45)(#1.3375,0)%
  \fillpath
  \cbezier(#12,2)(#12.1,1.8)(#12.7,1.125)(#12.25,0)%
  \moveto(#12.24,.1)%
  \curveto(#12.3,-1)(#12,-1.2)(#11.5,-1.2)%
  \curveto(#11.3,-1.2)(#11.125,-1.3)(#11.125,-1.5)%
  \strokepath
%    \end{macrocode}
%    The outer contour of the jaw:
%    \begin{macrocode}
  \moveto(#11.875,-1.35)%
  \curveto(#11.86,-1.8)(#11.8,-1.5)(#11.65,-1.95)%
  \curveto(#11.5,-2.4)(#11.5,-2.75)(#11.2,-2.9)%
  \curveto(#1.9,-3.05)(#11,-3.2)(#1.3,-3.1)%
  \strokepath
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@large@skull@innerjaw}
%    Subroutine that draws the inner part of the jaw in the variant of the skull
%    that is used for a ``large'' operator typeset in display style.
%    Argument~\#1 is either \texttt{-} or~\texttt{+}, depending on which half of
%    the skull you want to draw.
%    \begin{macrocode}
\newcommand*\@HwM@large@skull@innerjaw[1]{%
  \moveto(#11.5,-1.35)%
  \curveto(#11.35,-1.5)(#11.5,-2.25)(#11.125,-2.25)%
  \strokepath
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@large@skull@teeth}
%    Subroutine for drawing the teeth in the variant of the skull that is used
%    for a ``large'' operator typeset in display style.  Argument~\#1 is either
%    \texttt{-} or~\texttt{+}, depending on which half of the skull you want to
%    draw; then, argument~\#2 must always be the opposite sign (that is, either
%    \texttt{+} or~\texttt{-}, respectively).
%    \begin{macrocode}
\newcommand*\@HwM@large@skull@teeth[2]{%
  \moveto(#1.75,-2.25)%
  \curveto(#1.65,-2.5)(#1.55,-2.5)(#1.45,-2.3)%
  \curveto(#1.35,-2.05)(#1.4,-2)(#1.6,-2)%
  \curveto(#1.8,-2)(#1.8,-2.05)(#1.75,-2.25)%
  \strokepath
  \moveto(#1.35,-2.3)%
  \curveto(#1.25,-2.6)(#1.1,-2.65)(#1.05,-2.3)%
  \curveto(#1.05,-2.05)(0,-2.05)(#1.2,-2.05)%
  \curveto(#1.4,-2.05)(#1.42,-2)(#1.35,-2.3)%
  \strokepath
  \moveto(#1.7,-1.6)%
  \curveto(#1.6,-1.4)(#1.5,-1.4)(#1.45,-1.65)%
  \curveto(#1.45,-1.85)(#1.4,-1.95)(#1.55,-1.95)%
  \curveto(#1.85,-1.95)(#1.75,-1.75)(#1.7,-1.6)%
  \strokepath
  \moveto(#11.12,-1.6)%
  \curveto(#11,-1.3)(#1.9,-1.3)(#1.75,-1.6)%
  \curveto(#11,-3)(#11,-3)(#11.12,-1.5)%
  \strokepath
  \moveto(#1.4,-1.65)%
  \curveto(#1.3,-1.4)(#1.1,-1.4)(#1.05,-1.7)%
  \curveto(#1.05,-1.9)(#2.05,-2)(#1.225,-2)%
  \curveto(#1.5,-2)(#1.45,-1.9)(#1.4,-1.65)
  \strokepath
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@large@skull@brows}
%    Subroutine for drawing the brows in the variant of the skull that is used
%    for a ``large'' operator typeset in display style.  Argument~\#1 is either
%    \texttt{-} or~\texttt{+}, depending on which half of the skull you want to
%    draw.
%    \begin{macrocode}
\newcommand*\@HwM@large@skull@brows[1]{%
  \moveto(#1.8,.7)%
  \curveto(#1.4,.7)(#1.4,.9)(#1.2,.7)%
  \curveto(#1.1,.6)(#1.2,.4)(#1.2,.3)%
  \strokepath
  \cbezier(#11.3,.7)(#11.5,.7)(#11.5,.75)(#11.75,.5)%
}
%    \end{macrocode}
%    \end{macro}
%
%    Admittedly, not all these subroutines were actually needed; but I~wrote the
%    code this way when I~dashed off the skethces, and I~was too lazy to
%    streamline it afterwards, when copying it to this package!
%
%    \begin{macro}{\@HwM@large@skull}
%    Private version of the macro that draws the skull correspondng to a
%    ``large'' operator used in display math mode.  Arguments:
%    \begin{paramlist}
%      \param
%        main drawing thickn., in units of the default-rule-thickness
%        "\fontdimen";\\
%      \param
%        line thickness for drawing the inner of the jaw, in the same units;\\
%      \param
%        line thickness for drawing the teeth, in the same units;\\
%      \param
%        line thickness for drawing the brows, in points~(\texttt{pt}).
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@large@skull[4]{%
  \begin{@HwM@bigop@picture}\displaystyle \textfont {6}{-3}%
    \roundcap
    \linethickness{#3\@HwM@thickness@units@for \textfont}%
    \@HwM@large@skull@teeth-+%
    \@HwM@large@skull@teeth+-%
    \linethickness{#1\@HwM@thickness@units@for \textfont}%
    \@HwM@large@skull@nose
        {1.125}{.1}{.5}{.3375}{.9}{.147}{.7}{.2}{.4}%
    \cbezier(-2,2)(-1.25,3.5)(1.25,3.5)(2,2)%
    \@HwM@large@skull@profile-%
    \@HwM@large@skull@profile+%
    \cbezier(-.3,-3.1)(0,-3)(0,-3)(.3,-3.1)%
    \linethickness{#2\@HwM@thickness@units@for \textfont}%
    \@HwM@large@skull@innerjaw-%
    \@HwM@large@skull@innerjaw+%
    \linethickness{#4\p@}%
    \@HwM@large@skull@brows-%
    \@HwM@large@skull@brows+%
  \end{@HwM@bigop@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Large@Skull}
%    Public version of the above; requires no parameters.
%    \begin{macrocode}
\newcommand*\@HwM@Large@Skull{%
  \@HwM@choose@thicknesses \@HwM@large@skull
        {{1.5}{.9}{.3}{.075}}%
        {{2}{1.2}{.4}{.1}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@small@skull@nose}
%    Subroutine that draws the (hole corresponding to the) variant of the nose
%    that is shared between the binary operator and the nondisplay version of
%    the ``large'' operator.  The parameters are suitable point coordinates.
%    \begin{macrocode}
\newcommand*\@HwM@small@skull@nose[8]{%
  \moveto(0,-.#1)%
  \curveto(-.#2,-.#1)(-.#3,-.#4)(-.#5,-.#6)%
  \curveto(-.#7,-.#8)(.#7,-.#8)(.#5,-.#6)%
  \curveto(.#3,-.#4)(.#2,-.#1)(0,-.#1)%
  \fillpath
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@small@skull@profile}
%    Subroutine that draws the outline and the outer part of the jaw in the
%    variant of the skull that is used for a ``large'' operator typeset in
%    \emph{non}-display style.  Argument~\#1 is either \texttt{-} or~\texttt{+},
%    depending on which half of the skull you want to draw.
%    \begin{macrocode}
\newcommand*\@HwM@small@skull@profile[1]{%
  \moveto(#1.225,0)%
  \curveto(#1.225,.15)(#1.225,.315)(#1.6,.3)%
  \curveto(#1.9,.285)(#11.035,.15)(#11.05,0)%
  \curveto(#11.065,-.15)(#1.9,-.45)(#1.75,-.45)%
  \curveto(#1.6,-.45)(#1.225,-.3)(#1.225,0)%
  \fillpath
  \cbezier(0,2)(#11.5,2)(#11.8,0.75)(#11.5,0)%
  \cbezier(#11.5,0)(#11.575,-1.35)(#1.75,-.45)(#1.75,-1)%
%    \end{macrocode}
%    The outer contour of the jaw:
%    \begin{macrocode}
  \moveto(#11.25,-.9)%
  \curveto(#11.24,-1.2)(#11.2,-1)(#11.1,-1.3)%
  \curveto(#11,-1.6)(#11,-1.8)(#1.75,-1.9)%
  \curveto(0,-2.1)(#1.3,-2)(0,-2)%
  \strokepath
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@small@skull@innerjaw}
%    Subroutine that draws the inner part of the jaw in the variant of the skull
%    that is used for a ``large'' operator typeset in display style.
%    Argument~\#1 is either \texttt{-} or~\texttt{+}, depending on which half of
%    the skull you want to draw.
%    \begin{macrocode}
\newcommand*\@HwM@small@skull@innerjaw[1]{%
  \moveto(#11,-.9)%
  \curveto(#1.9,-1)(#11,-1.5)(#1.75,-1.5)%
  \strokepath
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@small@skull@teeth}
%    Subroutine for drawing the teeth in the variant of the skull that is used
%    for a ``large'' operator which gets typeset in \emph{non}-display style.
%    Argument~\#1 is either \texttt{-} or~\texttt{+}, depending on which half of
%    the skull you want to draw; then, argument~\#2 must always be the opposite
%    sign (that is, either \texttt{+} or~\texttt{-}, respectively).
%    \begin{macrocode}
\newcommand*\@HwM@small@skull@teeth[2]{%
  \moveto(#1.5,-1.5)%
  \curveto(#1.47,-1.65)(#1.35,-1.6)(#1.3,-1.55)%
  \curveto(#1.15,-1.25)(#1.65,-1.25)(#1.5,-1.5)%
  \strokepath
  \moveto(#1.25,-1.55)%
  \curveto(#1.2,-1.7)(#1.04,-1.7)(#1.03,-1.55)%
  \curveto(#2.1,-1.3)(#1.35,-1.3)(#1.25,-1.55)%
  \strokepath
  \moveto(#1.45,-1)%
  \curveto(#1.4,-.9)(#1.3,-.9)(#1.285,-1.05)%
  \curveto(#1.2,-1.35)(#1.6,-1.35)(#1.45,-1)%
  \strokepath
  \moveto(#1.75,-1)%
  \curveto(#1.65,-.9)(#1.6,-.9)(#1.5,-1)%
  \curveto(#1.6,-2)(#1.7,-2)(#1.75,-1)%
  \strokepath
  \moveto(#1.25,-1.05)%
  \curveto(#1.2,-.9)(#1.04,-.9)(#1.03,-1.05)%
  \curveto(#2.08,-1.4)(#1.35,-1.4)(#1.25,-1.05)%
  \strokepath
}
%    \end{macrocode}
%    \end{macro}
%
%    The same remark, as the one we made above, about the redundancy of these 
%    subroutines (and about my laziness!\@) applies here.
%
%    \begin{macro}{\@HwM@small@skull}
%    Private version of the macro that draws the skull correspondng to a
%    ``large'' operator used in \emph{non}-display math mode.  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\scriptstyle");\\
%      \param
%        font selector (\eg "\scriptfont");\\
%      \param
%        main drawing thickn., in units of the default-rule-thickness
%        "\fontdimen";\\
%      \param
%        line thickness for drawing the inner of the jaw, in the same units;\\
%      \param
%        line thickness for drawing the teeth, in the same units.
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@small@skull[5]{%
  \begin{@HwM@bigop@picture}#1#2{3.48}{-1.74}%
    \roundcap
    \linethickness{#5\@HwM@thickness@units@for #2}%
    \@HwM@small@skull@teeth-+%
    \@HwM@small@skull@teeth+-%
    \linethickness{#3\@HwM@thickness@units@for #2}%
    \@HwM@small@skull@nose{75}{15}{3}{75}{225}{6}{15}{15}%
    \@HwM@small@skull@profile-%
    \@HwM@small@skull@profile+%
    \linethickness{#4\@HwM@thickness@units@for #2}%
    \@HwM@small@skull@innerjaw-%
    \@HwM@small@skull@innerjaw+%
  \end{@HwM@bigop@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Small@Skull}
%    Public version of the above, with the following arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\scriptstyle");\\
%      \param
%        font selector (\eg "\scriptfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@Small@Skull[2]{%
  \@HwM@choose@thicknesses{\@HwM@small@skull #1#2}%
        {{}{.6}{.25}}%
        {{1.333333}{.7}{.3}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@binop@skull@profile}
%    Subroutine that draws the outline of the variant of the skull that is used
%    for a binary operator (in whatever style).  Argument~\#1 is either
%    \texttt{-} or~\texttt{+}, depending on which half of the skull you want to
%    draw.
%    \begin{macrocode}
\newcommand*\@HwM@binop@skull@profile[1]{%
  \moveto(#1.15,0)%
  \curveto(#1.15,.1)(#1.15,.21)(#1.4,.2)%
  \curveto(#1.6,.19)(#1.69,.1)(#1.7,0)%
  \curveto(#1.71,-.1)(#1.6,-.3)(#1.5,-.3)%
  \curveto(#1.4,-.3)(#1.15,-.2)(#1.15,0)%
  \fillpath
  \cbezier(0,1.333336)(#11,1.333336)(#11.2,0.5)(#11,0)%
  \cbezier(#11,0)(#11.05,-.9)(#1.5,-.3)(#1.5,-.65)%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@binop@skull@teeth}
%    Subroutine for drawing the teeth in the variant of the skull that is used
%    for a binary operator.  Argument~\#1 is either \texttt{-} or~\texttt{+},
%    depending on which half of the skull you want to draw; then, argument~\#2
%    must always be the opposite sign (that is, either \texttt{+} or~\texttt{-},
%    respectively).
%    \begin{macrocode}
\newcommand*\@HwM@binop@skull@teeth[2]{%
  \moveto(#1.33,-.7)%
  \curveto(#1.3,-.6)(#1.22,-.6)(#1.19,-.75)%
  \curveto(#1.15,-.9)(#1.38,-.9)(#1.33,-.7)%
  \strokepath
  \moveto(#1.5,-.7)%
  \curveto(#1.45,-.6)(#1.4,-.6)(#1.35,-.7)%
  \curveto(#1.4,-1.2)(#1.5,-1.2)(#1.5,-.7)%
  \strokepath
  \moveto(#1.17,-.75)%
  \curveto(#1.13,-.65)(#1.05,-.62)(#1.02,-.75)%
  \curveto(#2.03,-.95)(#1.22,-.95)(#1.17,-.75)%
  \strokepath
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@binop@skull}
%    Private version of the macro that draws the skull for a binary operator.
%    Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\textstyle");\\
%      \param
%        font selector (\eg "\textfont");\\
%      \param
%        main drawing thickn., in units of the default-rule-thickness
%        "\fontdimen";\\
%      \param
%        line thickness for drawing the teeth, in the same units.
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@binop@skull[4]{%
  \begin{@HwM@oplus@picture}#1#2{2.48}{-1.24}%
    \roundcap
    \linethickness{#4\@HwM@thickness@units@for #2}%
    \@HwM@binop@skull@teeth-+%
    \@HwM@binop@skull@teeth+-%
    \linethickness{#3\@HwM@thickness@units@for #2}%
    \@HwM@small@skull@nose{5}{1}{2}{5}{15}{4}{1}{1}%
    \@HwM@binop@skull@profile-%
    \@HwM@binop@skull@profile+%
  \end{@HwM@oplus@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Binop@Skull}
%    Public version of the above, with the following arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\scriptstyle");\\
%      \param
%        font selector (\eg "\scriptfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@Binop@Skull[2]{%
  \@HwM@choose@thicknesses{\@HwM@binop@skull #1#2}%
        {{.6}{.2}}%
        {{.9}{.266667}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \subsubsection{Drawing the clouds}
%
%    Clouds are relatively simple to deal with: they are treated similarly to
%    fractions, in that they are typeset in a larger version, used only for
%    "\displaystyle" math, and in a smaller one, used in all the other cases.
%    Figure~\ref{fig:cloud} sketches both variants.
%
%    \begin{figure}[tp]
%      \centering
%      The small variant:\\*[\bigskipamount]
%      \begin{picture}(6,4)(-3,-2)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-3,-2)(1,0){7}{\line(0,1){4}}
%        \multiput(-3,-2)(0,1){5}{\line(1,0){6}}
%        \color{black}
%        \linethickness{1.5pt}
%        \roundcap
%        \cbezier(-2.5,0)(-3.5,.25)(-3,2)(-1,1.5)
%        \cbezier(-1.2,1.25)(-.75,2)(1,2.5)(1,1.5)
%        \cbezier(.9,1.4)(1.25,2)(2.25,1.25)(1.4,.9)
%        \cbezier(1.6,1)(3.5,1)(3,0)(2.5,0)
%        \cbezier(2.5,0)(3,0)(3.5,-1)(2.1,-1.2)
%        \cbezier(2.5,-1.1)(2.5,-2)(1,-2.5)(0,-1.5)
%        \cbezier(.1,-1.2)(-.1,-2.25)(-2.25,-2)(-2,-1)
%        \cbezier(-1.7,-1)(-2.75,-1)(-3.25,-.25)(-2.5,0)
%      \end{picture}
%
%      \bigskip\bigskip\bigskip
%
%      The large variant:\\*[\bigskipamount]
%      \begin{picture}(12,8)(-6,-4)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-6,-4)(1,0){13}{\line(0,1){8}}
%        \multiput(-6,-4)(0,1) {9}{\line(1,0){12}}
%        \color{black}
%        \roundcap
%        \linethickness{2pt}
%        \cbezier(-5,0)(-7,.5)(-5.5,3.25)(-4,2.5)
%        \cbezier(-3.8,2.1)(-4.75,3.5)(-2,4)(-2,3)
%        \cbezier(-2.4,2.5)(-1.5,4)(2,5)(2,3)
%        \cbezier(1.8,2.8)(2.5,4)(4.5,2.5)(2.8,1.8)
%        \cbezier(3.2,2)(7,2)(6,0)(5,0)
%        \cbezier(5,0)(6,0)(6.25,-1)(5.3,-1.4)
%        \cbezier(4.6,-1.1)(6.8,-1.5)(4.3,-4)(3.6,-2.1)
%        \cbezier(3.9,-2.6)(4,-3)(2,-5)(0,-3)
%        \cbezier(.2,-2.4)(-.2,-4.5)(-4.5,-4)(-4,-2)
%        \cbezier(-3.4,-2)(-5.5,-2)(-6.5,-.5)(-5,0)
%      \end{picture}
%
%      \caption{Sketches of the cloud}
%      \label{fig:cloud}
%    \end{figure}
%
%    By good fortune, clouds do not require any subroutine\ldots
%
%    \begin{macro}{\@HwM@large@cloud}
%    This is the private version of the macro that draws the larger cloud.
%    Argument:
%    \begin{paramlist}
%      \param
%        drawing thickness, in units of the default-rule-thickness "\fontdimen".
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@large@cloud[1]{%
  \begin{@HwM@large@picture}{12}{-6}%
    \roundcap
    \linethickness{#1\@HwM@thickness@units@for \textfont}%
    \cbezier(\-5,0)(\-7,.5)(\-5.5,3.25)(\-4,2.5)%
    \cbezier(\-3.8,2.1)(\-4.75,3.5)(\-2,4)(\-2,3)%
    \cbezier(\-2.4,2.5)(\-1.5,4)(\+2,5)(\+2,3)%
    \cbezier(\+1.8,2.8)(\+2.5,4)(\+4.5,2.5)(\+2.8,1.8)%
    \cbezier(\+3.2,2)(\+7,2)(\+6,0)(\+5,0)%
    \cbezier(\+5,0)(\+6,0)(\+6.25,-1)(\+5.3,-1.4)%
    \cbezier(\+4.6,-1.1)(\+6.8,-1.5)(\+4.3,-4)(\+3.6,-2.1)%
    \cbezier(\+3.9,-2.6)(\+4,-3)(\+2,-5)(0,-3)%
    \cbezier(\+.2,-2.4)(\-.2,-4.5)(\-4.5,-4)(\-4,-2)%
    \cbezier(\-3.4,-2)(\-5.5,-2)(\-6.5,-.5)(\-5,0)%
  \end{@HwM@large@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Large@Cloud}
%    Public version of the above; requires no parameters.
%    \begin{macrocode}
\newcommand*\@HwM@Large@Cloud{%
  \@HwM@choose@thicknesses \@HwM@large@cloud
        {{.8}}%
        {{1.6}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@small@cloud}
%    Private version of the macro that draws the smaller cloud (which has a
%    little fewer details than the larger one).  Arguments:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\scriptfont");\\
%      \param
%        drawing thickness, in units of the default-rule-thickness "\fontdimen".
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@small@cloud[2]{%
  \begin{@HwM@small@picture}#1{6}{-3}%
    \roundcap
    \linethickness{#2\@HwM@thickness@units@for #1}%
    \cbezier(\-2.5,0)(\-3.5,.25)(\-3,2)(\-1,1.5)%
    \cbezier(\-1.2,1.25)(\-.75,2)(\+1,2.5)(\+1,1.5)%
    \cbezier(\+.9,1.4)(\+1.25,2)(\+2.25,1.25)(\+1.4,.9)%
    \cbezier(\+1.6,1)(\+3.5,1)(\+3,0)(\+2.5,0)%
    \cbezier(\+2.5,0)(\+3,0)(\+3.5,-1)(\+2.1,-1.2)%
    \cbezier(\+2.5,-1.1)(\+2.5,-2)(\+1,-2.5)(0,-1.5)%
    \cbezier(\+.1,-1.2)(\-.1,-2.25)(\-2.25,-2)(\-2,-1)%
    \cbezier(\-1.7,-1)(\-2.75,-1)(\-3.25,-.25)(\-2.5,0)%
  \end{@HwM@small@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Small@Cloud}
%    Public version of the above.  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\scriptstyle");\\
%      \param
%        font selector (\eg "\scriptfont").
%    \end{paramlist}
%    The first parameter is imposed by the interface toward other parts of the
%    code, because other macros that share the same interface might need it, but
%    isn't actually used in this case.
%    \begin{macrocode}
\newcommand*\@HwM@Small@Cloud[2]{%
  \@HwM@choose@thicknesses{\@HwM@small@cloud #2}%
        {{.5}}%
        {{1.2}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    That's all: as we promised, this has been a quick one!
%
%    \subsubsection{Drawing the ghosts}
%
%    For ghosts, I~imagined a r\^{o}le as ordinary symbols, and nothing else;
%    therefore, they exist in only one size, but, in return, they can be seen
%    from three different views (left, front, and right), as
%    figure~\ref{fig:ghosts} depicts.  From the implementation viewpoint, only
%    two variants need to be defined: a ``symmetric ghost'', that corresponds to
%    the front view, and an ``asymmetric ghost'', which yields the left and the
%    right views through the same mechanism that toggles, for example, between
%    the straight and the reverse witch.
%
%    \begin{figure}[tp]
%      \newcommand*{\SymmetricGhostContour}[8]{^^A
%        \cbezier(-#1,#2)(-#3,#4)(-#3,#5)(-#3,#6)^^A
%        \Line(-#3,#6)(-#3,#7)^^A
%        \cbezier(#1,#2)(#3,#4)(#3,#5)(#3,#6)^^A
%        \Line(#3,#6)(#3,#7)^^A
%        \cbezier(-#3,#7)(-#3,#8)(#3,#8)(#3,#7)^^A
%      }
%      \newcommand*{\SymmetricGhostBorder}[8]{^^A
%        \cbezier(-#1,#2)(-#3,#4)(-#5,#6)(-#7,#2)^^A
%        \qbezier(-#7,#2)(0,#8)(#7,#2)^^A
%        \cbezier(#1,#2)(#3,#4)(#5,#6)(#7,#2)^^A
%      }
%      \newcommand*{\SymmetricGhostEyes}[3]{^^A
%        \put(-#1,#2){\circle*{#3}}^^A
%        \put(#1,#2){\circle*{#3}}^^A
%      }
%      \newcommand*{\AsymmetricGhost}[2]{^^A
%        \roundcap
%        \linethickness{1.5pt}^^A
%        \cbezier(#11.75,-1.5)(#11,-1)(#1.7,-.5)(#1.5,0)^^A
%        \cbezier(#1.5,0)(#1.3,.5)(0,1.6)(#21,1.6)^^A
%        \cbezier(#21,1.6)(#21.8,1.6)(#21.8,.9)(#21.8,.6)^^A
%        \cbezier(#21.8,.6)(#21.8,-.3)(#2.9,-.7)(#21.25,-1.5)^^A
%        \linethickness{1pt}^^A
%        \cbezier(#11.75,-1.5)(#11.4,-1.2)(#11.1,-1.8)(#1.75,-1.5)^^A
%        \cbezier(#1.75,-1.5)(#1.4,-1.2)(#1.1,-1.8)(#2.25,-1.5)^^A
%        \cbezier(#2.25,-1.5)(#2.6,-1.2)(#2.9,-1.8)(#21.25,-1.5)^^A
%        \put(#21.2,.7){\circle*{.4}}^^A
%      }
%
%      \centering
%      \addtolength\leftskip {-2cm}
%      \addtolength\rightskip{-2cm}
%
%      Only the small variant is defined:\\*[\bigskipamount]
%      \begin{picture}(4,4)(-2,-2)
%          \linethickness{.1pt}
%          \color{guidelines}
%          \multiput(-2,-2)(1,0){5}{\line(0,1){4}}
%          \multiput(-2,-2)(0,1){5}{\line(1,0){4}}
%          \color{black}
%          \AsymmetricGhost+-
%      \end{picture}\qquad
%      \begin{picture}(4,4)(-2,-2)
%          \linethickness{.1pt}
%          \color{guidelines}
%          \multiput(-2,-2)(1,0){5}{\line(0,1){4}}
%          \multiput(-2,-2)(0,1){5}{\line(1,0){4}}
%          \color{black}
%          \roundcap
%          \linethickness{1.5pt}
%          \SymmetricGhostContour{1.5}{-1.5}{1}{-1}{-.5}{0}{.5}{2}
%          \linethickness{1pt}
%          \SymmetricGhostBorder{1.5}{-1.5}{1.1}{-1.1}{.7}{-1.9}{.3}{-1.2}
%          \SymmetricGhostEyes{.4}{.7}{.4}
%      \end{picture}\qquad
%      \begin{picture}(4,4)(-2,-2)
%          \linethickness{.1pt}
%          \color{guidelines}
%          \multiput(-2,-2)(1,0){5}{\line(0,1){4}}
%          \multiput(-2,-2)(0,1){5}{\line(1,0){4}}
%          \color{black}
%          \AsymmetricGhost-+
%      \end{picture}\par
%
%      \caption{Sketches of the ghosts}
%      \label{fig:ghosts}
%    \end{figure}
%
%    For ghosts, again, we do have some subroutines; and, again, some of these 
%    could actually be inserted inline.
%
%    \begin{macro}{\@HwM@symm@ghost@contour}
%    Subroutine that draws the thicker part of a symmetric ghost's contour.
%    Parameters are suitable point coordinates.
%    \begin{macrocode}
\newcommand*\@HwM@symm@ghost@contour[8]{%
  \cbezier(-#1,#2)(-#3,#4)(-#3,#5)(-#3,#6)%
  \Line(-#3,#6)(-#3,#7)%
  \cbezier(#1,#2)(#3,#4)(#3,#5)(#3,#6)%
  \Line(#3,#6)(#3,#7)%
  \cbezier(-#3,#7)(-#3,#8)(#3,#8)(#3,#7)%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@symm@ghost@border}
%    Subroutine that draws the lower border of a symmetric ghost's sheet (the
%    thinner part of its contour).  Parameters are suitable point coordinates.
%    \begin{macrocode}
\newcommand*\@HwM@symm@ghost@border[8]{%
  \cbezier(-#1,#2)(-#3,#4)(-#5,#6)(-#7,#2)%
  \qbezier(-#7,#2)(0,#8)(#7,#2)%
  \cbezier(#1,#2)(#3,#4)(#5,#6)(#7,#2)%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@symm@ghost@eyes}
%    Subroutine that draws the eyes of a symmetric ghost.  The parameters are
%    self-explanatory.
%    \begin{macrocode}
\newcommand*\@HwM@symm@ghost@eyes[3]{%
  \put(-#1,#2){\circle*{#3}}%
  \put(#1,#2){\circle*{#3}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@symmetric@ghost}
%    Private version of the macro that draws the symmetric ghost.  Arguments:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont");\\
%      \param
%        contour thickness, in units of the default-rule-thickness
%        "\fontdimen";\\
%      \param
%        lower border thickness, in the same units.
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@symmetric@ghost[3]{%
  \begin{@HwM@math@picture}{2.6}{-1}%
            {\@HwM@d@pict@strut{.6}}#1{3.2}{-1.6}%
    \roundcap
    \linethickness{#2\@HwM@thickness@units@for #1}%
    \@HwM@symm@ghost@contour{1.5}{-1.5}{1}{-1}{-.5}{0}{.5}{2}%
    \linethickness{#3\@HwM@thickness@units@for #1}%
    \@HwM@symm@ghost@border{1.5}{-1.5}{1.1}{-1.1}{.7}{-1.9}{.3}{-1.2}%
    \@HwM@symm@ghost@eyes{.4}{.7}{.4}%
  \end{@HwM@math@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Symmetric@Ghost}
%    Public version of the above.  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\textstyle");\\
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    The first parameter is imposed by the interface toward other parts of the
%    code, because other macros that share the same interface might need it, but
%    isn't actually used in this case.
%    \begin{macrocode}
\newcommand*\@HwM@Symmetric@Ghost[2]{%
  \@HwM@choose@thicknesses{\@HwM@symmetric@ghost #2}%
        {{.9}{.6}}%
        {{1.8}{1.2}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@asymmetric@ghost}
%    Private version of the macro that draws the asymmetric ghost.  Arguments:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont");\\
%      \param
%        contour thickness, in units of the default-rule-thickness
%        "\fontdimen";\\
%      \param
%        lower border thickness, in the same units.
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@asymmetric@ghost[3]{%
  \begin{@HwM@math@picture}{2.6}{-1}%
            {\@HwM@d@pict@strut{.6}}#1{3.8}%
            {-\@HwM@right@or@left{1.6}{2.2}}%
    \roundcap
    \linethickness{#2\@HwM@thickness@units@for #1}%
    \cbezier(\-1.75,-1.5)(\-1,-1)(\-.7,-.5)(\-.5,0)%
    \cbezier(\-.5,0)(\-.3,.5)(0,1.6)(\+1,1.6)%
    \cbezier(\+1,1.6)(\+1.8,1.6)(\+1.8,.9)(\+1.8,.6)%
    \cbezier(\+1.8,.6)(\+1.8,-.3)(\+.9,-.7)(\+1.25,-1.5)%
    \linethickness{#3\@HwM@thickness@units@for #1}%
    \cbezier(\-1.75,-1.5)(\-1.4,-1.2)(\-1.1,-1.8)(\-.75,-1.5)%
    \cbezier(\-.75,-1.5)(\-.4,-1.2)(\-.1,-1.8)(\+.25,-1.5)%
    \cbezier(\+.25,-1.5)(\+.6,-1.2)(\+.9,-1.8)(\+1.25,-1.5)%
    \put(\+1.2,.7){\circle*{.4}}%
  \end{@HwM@math@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Asymmetric@Ghost}
%    Public version of the above.  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\textstyle");\\
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    The first parameter is imposed by the interface toward other parts of the
%    code, because other macros that share the same interface might need it, but
%    isn't actually used in this case.
%    \begin{macrocode}
\newcommand*\@HwM@Asymmetric@Ghost[2]{%
  \@HwM@choose@thicknesses{\@HwM@asymmetric@ghost #2}%
        {{.9}{.6}}%
        {{1.8}{1.2}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \subsubsection{Drawing the bats}
%
%    We've finally got to the last of our characters (at least for this
%    version): the bat.  Bats are rendered as filled, as opposed to stroked,
%    black shapes, and therefore it is impossible to differentiate the normal
%    and the bold version by changing the thickness of the strokes (because
%    there aren't any): the shape itself needs to be made slightly larger.
%    Besides this, as in the case of ghosts we have designed a ``symmetric'' bat
%    and an ``asymmetric'' one, where the latter can be drawn in two opposite
%    orientations: this makes a total of six possible variants, which are
%    portrayed in figures \ref{fig:s-bats} and~\ref{fig:a-bats}.  The reference
%    lines help you spot the differences between the bold and the normal
%    versions.
%
%    \begin{figure}[tp]
%      \newcommand*{\BatWing}[1]{^^A
%        \moveto(#1.7,0)^^A
%        \curveto(#11.5,.1)(#12.2,.5)(#12,1)^^A
%        \curveto(#12.5,.5)(#12.9,0)(#12.9,-.5)^^A
%        \curveto(#12.8,0)(#12,-.5)(#12.25,-1)^^A
%        \curveto(#12,-.5)(#11.7,-.3)(#11.5,-.7)^^A
%        \curveto(#11.4,-.5)(#11.2,-.3)(#11,-.5)^^A
%        \curveto(#1.9,-.4)(#1.7,-.4)(#1.5,-.5)^^A
%        \closepath
%        \fillpath
%      }
%      \newcommand*{\BoldBatWing}[1]{^^A
%        \moveto(#1.7,.1)^^A
%        \curveto(#11.5,.2)(#12.25,.6)(#12,1.1)^^A
%        \curveto(#12.6,.5)(#13,0)(#13,-.6)^^A
%        \curveto(#12.8,0)(#12,-.6)(#12.25,-1.1)^^A
%        \curveto(#12,-.6)(#11.7,-.4)(#11.5,-.8)^^A
%        \curveto(#11.4,-.6)(#11.2,-.4)(#11,-.6)^^A
%        \curveto(#1.9,-.5)(#1.7,-.5)(#1.5,-.5)^^A
%        \closepath
%        \fillpath
%      }
%
%      \newcommand*{\Bat}{^^A
%        \moveto(-.5,-.5)^^A
%        \curveto(-.4,-.6)(-.2,-.7)(-.2,-1)^^A
%        \curveto(-.1,-.7)(.1,-.7)(.2,-1)^^A
%        \curveto(.2,-.7)(.4,-.6)(.5,-.5)^^A
%        \closepath
%        \fillpath
%        \BatWing-^^A
%        \BatWing+^^A
%        \moveto(.5,0)^^A
%        \circlearc{.35}{0}{.15}{0}{180}^^A
%        \lineto(-.2,0)^^A
%        \circlearc{-.35}{0}{.15}{0}{180}^^A
%        \lineto(-.75,0)^^A
%        \curveto(-.75,.45)(-.7,.5)(-.5,1)^^A
%        \circlearc{0}{1}{.5}{180}{360}^^A
%        \curveto(.7,.5)(.75,.45)(.75,0)^^A
%        \closepath
%        \fillpath
%        \moveto(-.75,0)^^A
%        \circlearc{0}{0}{.75}{180}{360}^^A
%        \lineto(.5,0)^^A
%        \circlearc{.35}{0}{.15}{360}{180}^^A
%        \lineto(-.2,0)^^A
%        \circlearc{-.35}{0}{.15}{360}{180}^^A
%        \closepath
%        \fillpath
%      }
%      \newcommand*{\BoldBat}{^^A
%        \moveto(-.6,-.5)^^A
%        \curveto(-.5,-.6)(-.3,-.7)(-.3,-1.1)^^A
%        \curveto(-.1,-.7)(.1,-.7)(.3,-1.1)^^A
%        \curveto(.3,-.7)(.5,-.6)(.6,-.5)^^A
%        \closepath
%        \fillpath
%        \BoldBatWing-^^A
%        \BoldBatWing+^^A
%        \moveto(.5,0)^^A
%        \circlearc{.35}{0}{.15}{0}{180}^^A
%        \lineto(-.2,0)^^A
%        \circlearc{-.35}{0}{.15}{0}{180}^^A
%        \lineto(-.8,0)^^A
%        \curveto(-.8,.5)(-.7,.5)(-.55,1.1)^^A
%        \circlearc{0}{1.1}{.55}{180}{360}^^A
%        \curveto(.7,.5)(.8,.5)(.8,0)^^A
%        \closepath
%        \fillpath
%        \moveto(-.8,0)^^A
%        \circlearc{0}{0}{.8}{180}{360}^^A
%        \lineto(.5,0)^^A
%        \circlearc{.35}{0}{.15}{360}{180}^^A
%        \lineto(-.2,0)^^A
%        \circlearc{-.35}{0}{.15}{360}{180}^^A
%        \closepath
%        \fillpath
%      }
%
%      \centering
%
%      The symmetric bat,
%      in the \texttt{normal}\ldots\\*[\bigskipamount]
%      \begin{picture}(6,4)(-3,-2)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-3,-2)(1,0){7}{\line(0,1){4}}
%        \multiput(-3,-2)(0,1){5}{\line(1,0){6}}
%        \color{black}
%        \Bat
%      \end{picture}
% 
%      \bigskip\bigskip\bigskip
% 
%      \ldots and in the \texttt{bold} math version.\\*[\bigskipamount]
%      \begin{picture}(6,4)(-3,-2)
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-3,-2)(1,0){7}{\line(0,1){4}}
%        \multiput(-3,-2)(0,1){5}{\line(1,0){6}}
%        \color{black}
%        \BoldBat
%      \end{picture}
%
%      \caption{Sketches of the symmetric bats}
%      \label{fig:s-bats}
%    \end{figure}
%
%    \begin{figure}[tp]
%      \newcommand*{\AsymmBat}{^^A
%        \moveto(\-.5,.2)^^A
%        \curveto(\-1.5,.3)(\-2.2,.5)(\-1.8,1)^^A
%        \curveto(\-2.5,.5)(\-2.9,0)(\-2.9,-.5)^^A
%        \curveto(\-2.7,0)(\-2,-.25)(\-2,-.8)^^A
%        \curveto(\-2,-.5)(\-1.6,-.25)(\-1.4,-.5)^^A
%        \curveto(\-1.4,-.2)(\-1.2,-.1)(\-1,-.3)^^A
%        \curveto(\-1,-.1)(\-.7,-.1)(\-.6,-.1)^^A
%        \closepath
%        \fillpath
%        \moveto(\+.9,0)^^A
%        \curveto(\+2,-.1)(\+2.2,.5)(\+2,.7)^^A
%        \curveto(\+2.5,.6)(\+3.2,0)(\+2.9,-.7)^^A
%        \curveto(\+2.6,-.2)(\+2,-.5)(\+2,-1)^^A
%        \curveto(\+2,-.5)(\+1.7,-.4)(\+1.5,-.7)^^A
%        \curveto(\+1.6,-.4)(\+1.3,-.2)(\+1.1,-.5)^^A
%        \curveto(\+1.1,-.3)(\+1,-.3)(\+.8,-.3)^^A
%        \closepath
%        \fillpath
%        \moveto(\+.8,-.1)^^A
%        \curveto(\+.85,.08)(\+.65,.13)(\+.6,-.05)^^A
%        \lineto(\+.3,0)^^A
%        \curveto(\+.35,.2)(\+.05,.3)(0,.1)^^A
%        \lineto(\-.8,0)^^A
%        \curveto(\-.7,.3)(\-.4,.7)(\+.25,1)^^A
%        \curveto(\+.2,.4)(\+.8,.3)(\+1,.9)^^A
%        \curveto(\+1.1,.7)(\+1.1,.2)(\+1,0)^^A
%        \closepath
%        \fillpath
%        \moveto(\+.8,-.1)^^A
%        \curveto(\+.75,-.28)(\+.55,-.23)(\+.6,-.05)^^A
%        \lineto(\+.3,0)^^A
%        \curveto(\+.25,-.18)(\-.05,-.08)(0,.1)^^A
%        \lineto(\-.8,0)^^A
%        \curveto(\-.9,-.3)(\-.8,-.6)(\-1,-.9)^^A
%        \curveto(\-.8,-.6)(\-.4,-.7)(\-.6,-1)^^A
%        \curveto(\-.2,-.8)(\+.2,-.82)(\+.3,-.8)^^A
%        \curveto(\+.85,-.69)(\+.99,-.02)(\+1,0)^^A
%        \closepath
%        \fillpath
%      }
%      \newcommand*{\BoldAsymmBat}{^^A
%        \moveto(\-.5,.3)^^A
%        \curveto(\-1.5,.4)(\-2.2,.6)(\-1.9,1.1)^^A
%        \curveto(\-2.6,.6)(\-3,0)(\-3,-.6)^^A
%        \curveto(\-2.6,-.1)(\-2,-.4)(\-2,-.9)^^A
%        \curveto(\-2,-.6)(\-1.6,-.35)(\-1.4,-.6)^^A
%        \curveto(\-1.4,-.3)(\-1.2,-.2)(\-1,-.4)^^A
%        \curveto(\-1,-.2)(\-.7,-.2)(\-.6,-.2)^^A
%        \closepath
%        \fillpath
%        \moveto(\+.9,.1)^^A
%        \curveto(\+1.8,0)(\+2.3,.3)(\+2.1,.8)^^A
%        \curveto(\+2.6,.7)(\+3.3,-.1)(\+3,-.8)^^A
%        \curveto(\+2.7,-.3)(\+2,-.6)(\+2,-1.1)^^A
%        \curveto(\+2,-.6)(\+1.7,-.5)(\+1.5,-.8)^^A
%        \curveto(\+1.6,-.5)(\+1.3,-.3)(\+1.1,-.6)^^A
%        \curveto(\+1.1,-.4)(\+1,-.4)(\+.8,-.4)^^A
%        \closepath
%        \fillpath
%        \moveto(\+.8,-.1)^^A
%        \curveto(\+.85,.08)(\+.65,.13)(\+.6,-.05)^^A
%        \lineto(\+.3,0)^^A
%        \curveto(\+.35,.2)(\+.05,.3)(0,.1)^^A
%        \lineto(\-.85,0)^^A
%        \curveto(\-.75,.3)(\-.4,.7)(\+.25,1.1)^^A
%        \curveto(\+.2,.55)(\+.8,.45)(\+1,1)^^A
%        \curveto(\+1.1,.8)(\+1.2,.2)(\+1.05,0)^^A
%        \closepath
%        \fillpath
%        \moveto(\+.8,-.1)^^A
%        \curveto(\+.75,-.28)(\+.55,-.23)(\+.6,-.05)^^A
%        \lineto(\+.3,0)^^A
%        \curveto(\+.25,-.18)(\-.05,-.08)(0,.1)^^A
%        \lineto(\-.85,0)^^A
%        \curveto(\-.95,-.3)(\-.8,-.6)(\-1,-1)^^A
%        \curveto(\-.75,-.7)(\-.4,-.8)(\-.5,-1.1)^^A
%        \curveto(\-.2,-.8)(\+.2,-.82)(\+.3,-.8)^^A
%        \curveto(\+.85,-.69)(\+1.04,-.0133333)(\+1.05,0)^^A
%        \closepath
%        \fillpath
%      }
%
%      \centering
%      \addtolength\leftskip {-2cm}
%      \addtolength\rightskip{-2cm}
%
%      The asymmetric bat,
%      in the \texttt{normal}\ldots\\*[\bigskipamount]
%      \begin{picture}(6,4)(-3,-2)
%        \def\+{-}
%        \def\-{+}
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-3,-2)(1,0){7}{\line(0,1){4}}
%        \multiput(-3,-2)(0,1){5}{\line(1,0){6}}
%        \color{black}
%        \AsymmBat
%      \end{picture}\qquad
%      \begin{picture}(6,4)(-3,-2)
%        \def\+{+}
%        \def\-{-}
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-3,-2)(1,0){7}{\line(0,1){4}}
%        \multiput(-3,-2)(0,1){5}{\line(1,0){6}}
%        \color{black}
%        \AsymmBat
%      \end{picture}
% 
%      \bigskip\bigskip\bigskip
% 
%      \ldots and in the \texttt{bold} math version.\\*[\bigskipamount]
%      \begin{picture}(6,4)(-3,-2)
%        \def\+{-}
%        \def\-{+}
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-3,-2)(1,0){7}{\line(0,1){4}}
%        \multiput(-3,-2)(0,1){5}{\line(1,0){6}}
%        \color{black}
%        \BoldAsymmBat
%      \end{picture}\qquad
%      \begin{picture}(6,4)(-3,-2)
%        \def\+{+}
%        \def\-{-}
%        \linethickness{.1pt}
%        \color{guidelines}
%        \multiput(-3,-2)(1,0){7}{\line(0,1){4}}
%        \multiput(-3,-2)(0,1){5}{\line(1,0){6}}
%        \color{black}
%        \BoldAsymmBat
%      \end{picture}
%
%      \caption{Sketches of the asymmetric bats}
%      \label{fig:a-bats}
%    \end{figure}
%
%    \begin{macro}{\@HwM@symmetric@bat@wing}
%    Subroutine that draws the wing of a symmetric, normal (that is, not bold)
%    bat.  Argument~\#1 is either \texttt{-} or~\texttt{+}, depending on which
%    wing you want to draw.
%    \begin{macrocode}
\newcommand*\@HwM@symmetric@bat@wing[1]{%
  \moveto(#1.7,0)%
  \curveto(#11.5,.1)(#12.2,.5)(#12,1)%
  \curveto(#12.5,.5)(#12.9,0)(#12.9,-.5)%
  \curveto(#12.8,0)(#12,-.5)(#12.25,-1)%
  \curveto(#12,-.5)(#11.7,-.3)(#11.5,-.7)%
  \curveto(#11.4,-.5)(#11.2,-.3)(#11,-.5)%
  \curveto(#1.9,-.4)(#1.7,-.4)(#1.5,-.5)%
  \closepath
  \fillpath
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@symmetric@bbat@wing}
%    Subroutine that draws the wing of a symmetric, bold bat (note the
%    additional~\texttt{b}).  Argument~\#1 is either \texttt{-} or~\texttt{+},
%    depending on which wing you want to draw.
%    \begin{macrocode}
\newcommand*\@HwM@symmetric@bbat@wing[1]{%
  \moveto(#1.7,.1)%
  \curveto(#11.5,.2)(#12.25,.6)(#12,1.1)%
  \curveto(#12.6,.5)(#13,0)(#13,-.6)%
  \curveto(#12.8,0)(#12,-.6)(#12.25,-1.1)%
  \curveto(#12,-.6)(#11.7,-.4)(#11.5,-.8)%
  \curveto(#11.4,-.6)(#11.2,-.4)(#11,-.6)%
  \curveto(#1.9,-.5)(#1.7,-.5)(#1.5,-.5)%
  \closepath
  \fillpath
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@symmetric@bat}
%    Macro that draws the symmetric, normal (that is, not bold) bat.  Argument:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@symmetric@bat[1]{%
  \begin{@HwM@math@picture}{2}{-1}{}#1{6}{-3}%
    \moveto(-.5,-.5)%
    \curveto(-.4,-.6)(-.2,-.7)(-.2,-1)%
    \curveto(-.1,-.7)(.1,-.7)(.2,-1)%
    \curveto(.2,-.7)(.4,-.6)(.5,-.5)%
    \closepath
    \fillpath
    \@HwM@symmetric@bat@wing-%
    \@HwM@symmetric@bat@wing+%
    \moveto(.5,0)%
    \circlearc{.35}{0}{.15}{0}{180}%
    \lineto(-.2,0)%
    \circlearc{-.35}{0}{.15}{0}{180}%
    \lineto(-.75,0)%
    \curveto(-.75,.45)(-.7,.5)(-.5,1)%
    \circlearc{0}{1}{.5}{180}{360}%
    \curveto(.7,.5)(.75,.45)(.75,0)%
    \closepath
    \fillpath
    \moveto(-.75,0)%
    \circlearc{0}{0}{.75}{180}{360}%
    \lineto(.5,0)%
    \circlearc{.35}{0}{.15}{360}{180}%
    \lineto(-.2,0)%
    \circlearc{-.35}{0}{.15}{360}{180}%
    \closepath
    \fillpath
  \end{@HwM@math@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@symmetric@bold@bat}
%    Macro that draws the symmetric, bold bat.  Argument:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@symmetric@bold@bat[1]{%
  \begin{@HwM@math@picture}{2}{-1}{}#1{6}{-3}%
    \moveto(-.6,-.5)%
    \curveto(-.5,-.6)(-.3,-.7)(-.3,-1.1)%
    \curveto(-.1,-.7)(.1,-.7)(.3,-1.1)%
    \curveto(.3,-.7)(.5,-.6)(.6,-.5)%
    \closepath
    \fillpath
    \@HwM@symmetric@bbat@wing-%
    \@HwM@symmetric@bbat@wing+%
    \moveto(.5,0)%
    \circlearc{.35}{0}{.15}{0}{180}%
    \lineto(-.2,0)%
    \circlearc{-.35}{0}{.15}{0}{180}%
    \lineto(-.8,0)%
    \curveto(-.8,.5)(-.7,.5)(-.55,1.1)%
    \circlearc{0}{1.1}{.55}{180}{360}%
    \curveto(.7,.5)(.8,.5)(.8,0)%
    \closepath
    \fillpath
    \moveto(-.8,0)%
    \circlearc{0}{0}{.8}{180}{360}%
    \lineto(.5,0)%
    \circlearc{.35}{0}{.15}{360}{180}%
    \lineto(-.2,0)%
    \circlearc{-.35}{0}{.15}{360}{180}%
    \closepath
    \fillpath
  \end{@HwM@math@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Symmetric@Bat}
%    Macro that draws the symmetric bat, automatically choosing between the
%    normal and the bold version; because of this, it is directly a ``public''
%    macro.  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\textstyle");\\
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    The first parameter is imposed by the interface toward other parts of the
%    code, even if is not used here (as it happened in several other similar
%    macros).
%    \begin{macrocode}
\newcommand*\@HwM@Symmetric@Bat[2]{%
  \@HwM@if@bold@math{%
    \@HwM@symmetric@bold@bat #2%
  }{%
    \@HwM@symmetric@bat #2%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@asymmetric@bat}
%    Macro that draws the asymmetric, normal (that is, not bold) bat.  Argument:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@asymmetric@bat[1]{%
  \begin{@HwM@math@picture}{2}{-1}{}#1{6}{-3}%
    \moveto(\-.5,.2)%
    \curveto(\-1.5,.3)(\-2.2,.5)(\-1.8,1)%
    \curveto(\-2.5,.5)(\-2.9,0)(\-2.9,-.5)%
    \curveto(\-2.7,0)(\-2,-.25)(\-2,-.8)%
    \curveto(\-2,-.5)(\-1.6,-.25)(\-1.4,-.5)%
    \curveto(\-1.4,-.2)(\-1.2,-.1)(\-1,-.3)%
    \curveto(\-1,-.1)(\-.7,-.1)(\-.6,-.1)%
    \closepath
    \fillpath
    \moveto(\+.9,0)
    \curveto(\+2,-.1)(\+2.2,.5)(\+2,.7)
    \curveto(\+2.5,.6)(\+3.2,0)(\+2.9,-.7)%
    \curveto(\+2.6,-.2)(\+2,-.5)(\+2,-1)%
    \curveto(\+2,-.5)(\+1.7,-.4)(\+1.5,-.7)%
    \curveto(\+1.6,-.4)(\+1.3,-.2)(\+1.1,-.5)%
    \curveto(\+1.1,-.3)(\+1,-.3)(\+.8,-.3)%
    \closepath
    \fillpath
    \moveto(\+.8,-.1)%
    \curveto(\+.85,.08)(\+.65,.13)(\+.6,-.05)%
    \lineto(\+.3,0)%
    \curveto(\+.35,.2)(\+.05,.3)(0,.1)%
    \lineto(\-.8,0)%
    \curveto(\-.7,.3)(\-.4,.7)(\+.25,1)%
    \curveto(\+.2,.4)(\+.8,.3)(\+1,.9)%
    \curveto(\+1.1,.7)(\+1.1,.2)(\+1,0)%
    \closepath
    \fillpath
    \moveto(\+.8,-.1)%
    \curveto(\+.75,-.28)(\+.55,-.23)(\+.6,-.05)%
    \lineto(\+.3,0)%
    \curveto(\+.25,-.18)(\-.05,-.08)(0,.1)%
    \lineto(\-.8,0)%
    \curveto(\-.9,-.3)(\-.8,-.6)(\-1,-.9)%
    \curveto(\-.8,-.6)(\-.4,-.7)(\-.6,-1)%
    \curveto(\-.2,-.8)(\+.2,-.82)(\+.3,-.8)%
    \curveto(\+.85,-.69)(\+.99,-.02)(\+1,0)%
    \closepath
    \fillpath
  \end{@HwM@math@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@asymmetric@bold@bat}
%    Macro that draws the asymmetric, bold bat.  Argument:
%    \begin{paramlist}
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@asymmetric@bold@bat[1]{%
  \begin{@HwM@math@picture}{2}{-1}{}#1{6}{-3}%
    \moveto(\-.5,.3)%
    \curveto(\-1.5,.4)(\-2.2,.6)(\-1.9,1.1)%
    \curveto(\-2.6,.6)(\-3,0)(\-3,-.6)%
    \curveto(\-2.6,-.1)(\-2,-.4)(\-2,-.9)%
    \curveto(\-2,-.6)(\-1.6,-.35)(\-1.4,-.6)%
    \curveto(\-1.4,-.3)(\-1.2,-.2)(\-1,-.4)%
    \curveto(\-1,-.2)(\-.7,-.2)(\-.6,-.2)%
    \closepath
    \fillpath
    \moveto(\+.9,.1)
    \curveto(\+1.8,0)(\+2.3,.3)(\+2.1,.8)%
    \curveto(\+2.6,.7)(\+3.3,-.1)(\+3,-.8)%
    \curveto(\+2.7,-.3)(\+2,-.6)(\+2,-1.1)%
    \curveto(\+2,-.6)(\+1.7,-.5)(\+1.5,-.8)%
    \curveto(\+1.6,-.5)(\+1.3,-.3)(\+1.1,-.6)%
    \curveto(\+1.1,-.4)(\+1,-.4)(\+.8,-.4)%
    \closepath
    \fillpath
    \moveto(\+.8,-.1)%
    \curveto(\+.85,.08)(\+.65,.13)(\+.6,-.05)%
    \lineto(\+.3,0)%
    \curveto(\+.35,.2)(\+.05,.3)(0,.1)%
    \lineto(\-.85,0)%
    \curveto(\-.75,.3)(\-.4,.7)(\+.25,1.1)%
    \curveto(\+.2,.55)(\+.8,.45)(\+1,1)%
    \curveto(\+1.1,.8)(\+1.2,.2)(\+1.05,0)%
    \closepath
    \fillpath
    \moveto(\+.8,-.1)%
    \curveto(\+.75,-.28)(\+.55,-.23)(\+.6,-.05)%
    \lineto(\+.3,0)%
    \curveto(\+.25,-.18)(\-.05,-.08)(0,.1)%
    \lineto(\-.85,0)%
    \curveto(\-.95,-.3)(\-.8,-.6)(\-1,-1)%
    \curveto(\-.75,-.7)(\-.4,-.8)(\-.5,-1.1)%
    \curveto(\-.2,-.8)(\+.2,-.82)(\+.3,-.8)%
    \curveto(\+.85,-.69)(\+1.04,-.0133333)(\+1.05,0)%
    \closepath
    \fillpath
  \end{@HwM@math@picture}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@Asymmetric@Bat}
%    Macro that draws the asymmetric bat, automatically choosing between the
%    normal and the bold version; because of this, it is directly a ``public''
%    macro.  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\textstyle");\\
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    This should be the last time we have to repeat the usual remark about the
%    first parameter: although it is not used in this macro, it is imposed by
%    the interface toward other parts of the code, which is shared also by a few
%    macros that, instead, require the information it conveys.
%    \begin{macrocode}
\newcommand*\@HwM@Asymmetric@Bat[2]{%
  \@HwM@if@bold@math{%
    \@HwM@asymmetric@bold@bat #2%
  }{%
    \@HwM@asymmetric@bat #2%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
%    \subsubsection{New brooms, old pitchforks}
%
%    As we have already remarked in the first part, more precisely in
%    Subsection~\ref{ssS:Witches}, the look of brooms, as they were implemented
%    by the first release of this package, had already been
%    \href{https://tex.stackexchange.com/questions/336768/seasonal-challenge-contributions-from-texing-dead-welcome#comment829686_337719}{politely
%    questioned}: the problem was that, in certain commands, the brush was
%    rendered as an "\in" or~"\ni" character ($\in$/$\ni$), making the supposed
%    broom look more like a pitchfork.  The same commands now represent the
%    brush with a composite character obtained by overprinting a $<$ or~$>$
%    character to a~$-$; however, the old representation is retained too, using
%    different command names.  The following macros define both the old-style
%    pitchforks and the new ``composite'' brushes.
%
%    \begin{macro}{\@HwM@oooalign}
%    This macro overprints two or more characters, taking math style into due
%    account.  It is my personal version of "\ooalign".  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\textstyle");\\
%      \param
%        the symbols to be printed over oneanother, separated by "\cr".
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@oooalign[2]{%
  \leavevmode
  \vbox{%
    \baselineskip\z@skip
%    \end{macrocode}
%    The following line is just for elegance, since "\lineskip" will never be
%    used\ldots
%    \begin{macrocode}
    \lineskip\z@skip
%    \end{macrocode}
%    \ldots given the setting of "\lineskiplimit".
%    \begin{macrocode}
    \lineskiplimit -\maxdimen
    \m@th
    \ialign{\hfil$#1##$\hfil\crcr #2\crcr}%
  }%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@overprint@rel}
%    This macro builds a composite relation symbol out of the two characters
%    specified in the arguments.
%    \begin{macrocode}
\newcommand*\@HwM@overprint@rel[2]{%
  \mathrel{\mathpalette \@HwM@oooalign {#1\cr#2}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    The \packlass{\amsmath} package secures away, under the name "\std@minus",
%    the original "\mathcode" of the \texttt{-}~character; it does so because
%    this "\mathcode" is redefined when typesetting operator names
%    (see~\cite{bib:diffs-m}, near the end of the ``Changes in amsmath~2.0
%    [November 1999]''), and this would cause an extensible arrow, that happened
%    to be used inside an operator name, as in
%    \begin{verbatim}\DeclareMathOperator{\test}{\underleftrightarrow{test}}\end{verbatim}
%    to come out wrong.  The saved "\mathcode" is used later in the "\relbar"
%    macro.  Since we use are using "\relbar" for our brooms too, for some while
%    we've been concerned that other symbols we are going to employ could ``get
%    out of synch'', as it were, with what "\relbar" would yield.  This had
%    initially led us to adopt the following, ``paranoid'' approach:
%    \begin{verbatim}\def\do#1#2{\@ifdefinable#1{\mathchardef#1=\mathcode`#2\relax}}
%\do \@HwM@std@greater >
%\do \@HwM@std@less    <
%\def\do#1#2\@ifdefinable#1{\let #1=#2}
%\do \@HwM@std@in \in
%\do \@HwM@std@ni \ni
%\AtBeginDocument{%
%  \mathchardef \@HwM@std@greater \mathcode`>\relax
%  \mathchardef \@HwM@std@less    \mathcode`<\relax
%  \let \@HwM@std@in = \in
%  \let \@HwM@std@ni = \ni
%}
%\newcommand*\@HwM@rightbroomtail{%
%  \@HwM@overprint@rel \std@minus \@HwM@std@greater
%}
%\newcommand*\@HwM@leftbroomtail{%
%  \@HwM@overprint@rel \std@minus \@HwM@std@less
%}
%\newcommand*\@HwM@rightpforktail{\mathrel\@HwM@std@ni}
%\newcommand*\@HwM@leftpforktail {\mathrel\@HwM@std@in}\end{verbatim}
%    Note that the definition of "\in" and~"\ni" was secured away too (and saved
%    again at "\begin{document}"!\@), and not even I~can tell what was the
%    reasoning behind that: being \TeXtok{mathchardef token}'s by their own,
%    "\in" and~"\ni" needn't be saved as such; admittedly, there had been no
%    reasoning at all!  The redundant "\mathrel" in the definition of
%    "\@HwM@rightpforktail" and "\@HwM@leftpforktail" deserves special mention
%    as well; but we find the same redundancy in the definition of "\Relbar",
%    not only in \packlass{\amsmath}, but also back in Knuth's coding of the
%    \texttt{plain} format.
%
%    Later on, paranoia was lowered to what could even be deemed a sensible
%    level; indeed, storing away the "\mathcode" of~\texttt{<}/\texttt{>} is
%    closely similar to what the \packlass{\amsmath} package does when it
%    defines "\std@equal".
%    \begin{verbatim}\def\do#1#2{\@ifdefinable#1{\mathchardef#1=\mathcode`#2\relax}}
%\do \@HwM@std@greater >
%\do \@HwM@std@less    <
%\AtBeginDocument{%
%  \mathchardef \@HwM@std@greater \mathcode`>\relax
%  \mathchardef \@HwM@std@less    \mathcode`<\relax
%}
%\newcommand*\@HwM@rightbroomtail{%
%  \@HwM@overprint@rel \std@minus \@HwM@std@greater
%}
%\newcommand*\@HwM@leftbroomtail{%
%  \@HwM@overprint@rel \std@minus \@HwM@std@less
%}
%\newcommand*\@HwM@rightpforktail{\mathrel\ni}
%\newcommand*\@HwM@leftpforktail {\mathrel\in}\end{verbatim}
%    However, this code retains the fundamental drawback that affected the
%    previous version as well: it will break down with engines that use Unicode
%    math.  Of course, it would be easy to cater for this too, but the point is
%    that\ldots\ well, there's no point in all this "\mathcode" securement in
%    the first place: OK\@, it is necessary to provide it for the~\texttt{-}
%    character, which can denote two different symbols (minus and hyphen), taken
%    from two different fonts, but neither for \texttt{<} or~\texttt{>}, nor,
%    for that matter, for~\texttt{=}.  So, in the end we decided simply to keep
%    the symbolic names for the ``broom tail'' symbols, so that they serve as
%    hooks, should we ever need to take a different course of action in the
%    future, but to specify \texttt{<} and~\texttt{>} as literals, at least for
%    now.
%
%    \begin{macro}{\@HwM@rightbroomtail}
%    The representation of the brush in the ``new'' brooms; version for brooms
%    that point to the right.
%    \begin{macrocode}
\newcommand*\@HwM@rightbroomtail{\@HwM@overprint@rel \std@minus >}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@leftbroomtail}
%    As above, but for brooms that point to the left.
%    \begin{macrocode}
\newcommand*\@HwM@leftbroomtail {\@HwM@overprint@rel \std@minus <}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@rightpforktail}
%    Similar hook, but for pitchforks, pointing to the right.
%    \begin{macrocode}
\newcommand*\@HwM@rightpforktail{\mathrel\ni}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@leftpforktail}
%    For pitchforks pointing to the left.
%    \begin{macrocode}
\newcommand*\@HwM@leftpforktail {\mathrel\in}
%    \end{macrocode}
%    \end{macro}
%
%    Note again that, in the last two macros, we retained the redundant
%    "\mathrel", exactly as Knuth and the authors of \packlass{\amsmath} did in
%    the definition of "\Relbar": indeed, in order for "\joinrel" to work
%    properly, it is essential that the symbols it acts on behave as relations,
%    while, on the other hand, as remote as it might seem, there is always the
%    possibility that the final user has redefined the r\^{o}le of "\in"/"ni".
%    (Or, at least, this the tale I~recount to myself\ldots)
%
%    For the above discussion about "\std@minus", I~have to thank again the
%    people at \href{https://tex.stackexchange.com/}{\TeXSXAbbrev}, who provided
%    me with the necessary insight into the matter: see~\cite{bib:std}.
%
%    \subsubsection{Helper macros for the extensible symbols}
%    \label{sS:ExtensHelper}
%
%    This subsection contains some utility macros that help typeset certain
%    extensible components, like broomsticks, swishes of ghosts, and so on.
%    Such components are implemented by means of the "\leaders" primitive, or of
%    a variant thereof.
%
%    \begin{macro}{\@HwM@arrowfill@skip}
%    Instead of relying on temporaries, we reserve a "\skip" register
%    specifically devoted to holding the skip for the "\leaders".
%    \begin{macrocode}
\newlength\@HwM@arrowfill@skip
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@auto@font@selector}
%    Suppose you have \meta{something} (\eg a macro token) that expects to be
%    followed by a pair \meta{style selector}\meta{font selector}, where
%    \meta{style selctor} is a single token like "\displaystyle" or
%    "\scriptscriptstyle", and \meta{font selector} is a single token like
%    "\textfont" or "\scriptfont"; then
%    \begin{flushleft}
%      "\@HwM@auto@font@selector{"\meta{something}"}"\meta{style selector}
%    \end{flushleft}
%    is transformed into
%    \begin{flushleft}
%      \meta{something}\meta{style selector}\meta{font selector}
%    \end{flushleft}
%    where \meta{style selector} is the same selector as the one that was
%    originally present, and \meta{font selector} is the correct font selector
%    that is associated with it (namely, "\textfont" for "\displaystyle" and
%    "\textstyle", "\scriptfont" for "\scriptstyle", and "\scriptscriptfont" for
%    "\scriptscriptstyle").  For example,
%    \begin{flushleft}
%      "\@HwM@auto@font@selector{"\meta{something}"}\displaystyle"
%    \end{flushleft}
%    is transformed into
%    \begin{flushleft}
%      \meta{something}"\displaystyle\textfont"
%    \end{flushleft}
%    In other words, prepending \meta{something} with "\@HwM@auto@font@selector"
%    turns it from something that requires the two arguments \meta{style
%    selector}\meta{font selector} into something else that takes just the
%    single argument \meta{style selector}: the appropriate \meta{font selector}
%    will be automatically supplied (whence the name of this macro).
%    In version~0.01 of this package, this macro was implemented as shown here:
%    \begin{verbatim}\newcommand*\@HwM@auto@font@selector[2]{%
%  \def\@tempa{#1}%
%  \edef\@tempb{%
%    \ifx\displaystyle #2%
%      \textfont
%    \else \ifx\textstyle #2%
%      \textfont
%    \else \ifx\scriptstyle #2%
%      \scriptfont
%    \else \ifx\scriptscriptstyle #2%
%      \scriptscriptfont
%    \fi\fi\fi\fi
%  }%
%  \expandafter \@tempa \expandafter #2\@tempb
%}\end{verbatim}
%    But in this version, the multiple-choice conditional has been simplified as
%    follows.
%    \textbf{Beware:} this is still a simple implementation that relies on
%    assignments and that is therefore \emph{not} purely expandable.
%    \begin{macrocode}
\newcommand*\@HwM@auto@font@selector[2]{%
  \def\@tempa{#1}%
  \edef\@tempb{%
    \ifx\scriptscriptstyle #2%
      \scriptscriptfont
    \else \ifx\scriptstyle #2%
      \scriptfont
    \else
      \textfont
    \fi\fi
  }%
  \expandafter \@tempa \expandafter #2\@tempb
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@extended@arrowfill@}
%    This macro is loosely similar to the "\arrowfill@" macro found in the
%    \packlass{\amsmath} package, though its functionality is extended so as to
%    satisfy our needs.  Basically, it invokes a caller-supplied (pseudo-)macro
%    that typeset the "\leaders", passing to it the appropriate value for
%    "\@HwM@arrowfill@skip".  Arguments:
%    \begin{paramlist}
%      \param
%        the "\leaders" (pseudo-)macro (its arguments are specified below);\\
%      \param
%        the minimal width, expressed as a multiple of 18~math units.
%    \end{paramlist}
%    Arguments of the caller-supplied (pseudo-)macro:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\displaystyle");\\
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@extended@arrowfill@[2]{%
  \@HwM@auto@font@selector
        {\@HwM@stylefont@arrowfill{#1}{#2}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@stylefont@arrowfill}
%    This is, in a sense, the ``internal'' version of the above macro, that is,
%    the version that ought to be called \emph{after} the process of argument
%    doubling implemented by "\@HwM@auto@font@selector" has taken place (see the
%    description of that macro for details).  Note that the name of this macro
%    does \emph{not} end in an~\texttt{@}.  Arguments:
%    \begin{paramlist}
%      \param
%        the "\leaders" (pseudo-)macro (having the same 2~arguments as above);\\
%      \param
%        the minimal width, expressed as a multiple of 18~math units;\\
%      \param
%        style selector (\eg "\displaystyle");\\
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@stylefont@arrowfill[4]{%
  $\m@th
    \thickmuskip 0mu%
    \medmuskip  \thickmuskip
    \thinmuskip \thickmuskip
    \setlength\@HwM@arrowfill@skip
        {#2\fontdimen 6 #4\tw@ \@plus \@ne fill}%
    #3%
    #1#3#4%
  $%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@enriched@arrowfill@}
%    This macro provides an ``enriched'' version of the "\arrowfill@" macro,
%    that invokes two additional macros, supplied by the caller, one before and
%    one after "\cleaders"; these macros can insert additional stretchable
%    material.  In practice, this is used, below, to add the black cat on the
%    broomstick.  Note that, here, the ``"\leaders" pseudo-macro'' is
%    ``"\HwM@arrowfill@cleaders{#1}{#2}{#3}{#4}{#5}"''.
%
%    The arguments for this macro are as follows:
%    \begin{tightitemize}
%      \item
%        \#1, \#2, and~\#3 are the three characters that would be used by
%        "\arrowfill@" for the "\cleaders" (resp.: left, repeatable, right);
%      \item
%        \#4 and~\#5 are the two additional macros (resp.: left of "\cleaders",
%        right of "\cleaders");
%      \item
%        those argument must be followed, in the calling code, by the argument 
%        that holds the minimal size of the extensible symbol.
%    \end{tightitemize}
%    The arguments of the two ``additional macros'' are as follows:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\displaystyle");\\
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@enriched@arrowfill@[5]{%
  \@HwM@extended@arrowfill@
        {\HwM@arrowfill@cleaders{#1}{#2}{#3}{#4}{#5}}%
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\HwM@arrowfill@cleaders}
%    The arguments for this macro are as follows:
%    \begin{tightitemize}
%      \item
%        \#1, \#2, and~\#3 are the three characters, as above;
%      \item
%        \#4 and~\#5 are the two additional macros, as above;
%      \item
%        \( \mbox{\#6} \leftarrow \mbox{style sel.} \)
%        (\eg "\displaystyle"),
%        \( \mbox{\#7} \leftarrow \mbox{font sel.} \)
%        (\eg "\textfont").
%    \end{tightitemize}
%    \begin{macrocode}
\newcommand*\HwM@arrowfill@cleaders[7]{%
  #4#6#7%
  \relax #1\mkern-7mu%
  \cleaders\hbox{$#6\mkern-2mu#2\mkern-2mu$}\hskip\@HwM@arrowfill@skip
  \mkern-7mu#3\relax
  #5#6#7%
}
%    \end{macrocode}
%    \end{macro}
%
%    \subsubsection{Macros for extensible symbols (brooms, ghosts,~\ldots)}
%
%    This subsection defines the actual macros that typeset the extensible
%    broomsticks, swishes, etc., building on the top of the macros presented in
%    Subsection~\ref{sS:ExtensHelper}.  Extensible broomsticks come first.
%
%    \begin{macro}{\@HwM@rightbroomfill@Wwac@}
%    This macro should be thought of as an analog of \packlass{\amsmath}'s
%    "\rightarrowfill@": it takes no arguments and yields an extensible broom
%    complete with witch and, if appropriate, cat, both facing toward the right.
%    For this macro only, we choose to include extensive comments, that
%    exemplify how the macros defined in the
%    \hyperref[sS:ExtensHelper]{preceding subsection} can be utilized.
%    \begin{macrocode}
\newcommand*\@HwM@rightbroomfill@Wwac@{%
%    \end{macrocode}
%    Set up the right-facing direction:
%    \begin{macrocode}
  \@HwM@set@right@dir
%    \end{macrocode}
%    Have "\@HwM@enriched@arrowfill@" (assemble and) supply the extensible
%    broom.  Recall that the first three arguments are the characters it is
%    built from:
%    \begin{macrocode}
  \@HwM@enriched@arrowfill@ \@HwM@rightbroomtail\relbar\relbar
%    \end{macrocode}
%    The first additional macro (left of "\cleaders") does nothing, 
%    yet it must gobble two arguments:
%    \begin{macrocode}
        \@gobbletwo
%    \end{macrocode}
%    The second additional macro adds the witch, and possibly the cat, to the 
%    right of the "\cleaders", and is defined below:
%    \begin{macrocode}
        \@HwM@right@add@witch@cat
%    \end{macrocode}
%    The minimal size of the extensible broom (1~chunk of 18\,mu =~18\,mu):
%    \begin{macrocode}
        \@ne
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@rightpitchfill@Wwac@}
%    Like "\@HwM@rightbroomfill@Wwac@", but yields an extensible pitchfork.
%    \begin{macrocode}
\newcommand*\@HwM@rightpitchfill@Wwac@{%
  \@HwM@set@right@dir
  \@HwM@enriched@arrowfill@ \@HwM@rightpforktail\relbar\relbar
        \@gobbletwo
        \@HwM@right@add@witch@cat
        \@ne
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@right@add@witch@cat}
%    Adds the witch and possibly the cat.  Arguments:
%    \begin{paramlist}
%      \param
%        style selector (\eg "\displaystyle"), ignored;\\
%      \param
%        font selector (\eg "\textfont").
%    \end{paramlist}
%    \begin{macrocode}
\newcommand*\@HwM@right@add@witch@cat[2]{%
%    \end{macrocode}
%    First backspace by half of the width of the extensible symbol\ldots
%    \begin{macrocode}
  \hskip -\glueexpr \@HwM@arrowfill@skip/\tw@ \relax
%    \end{macrocode}
%    \ldots then typeset the witch.
%    \begin{macrocode}
  \@HwM@Small@Witch@Wo@Broom #2%
%    \end{macrocode}
%    If the cat has also been requested\ldots
%    \begin{macrocode}
  \if@HwM@cat@
%    \end{macrocode}
%    \ldots then move forward by $1/4$~of the width\ldots
%    \begin{macrocode}
    \hskip \glueexpr \@HwM@arrowfill@skip/4 \relax
%    \end{macrocode}
%    \ldots typeset the cat\ldots
%    \begin{macrocode}
    \@HwM@Small@Cat@On@Hori@Broom #2%
%    \end{macrocode}
%    \ldots then move forward by another $1/4$~of the width.
%    \begin{macrocode}
    \hskip \glueexpr \@HwM@arrowfill@skip/4 \relax
%    \end{macrocode}
%    Otherwise, just move forward by $1/2$~of the width, thus canceling the
%    previous backspace.
%    \begin{macrocode}
  \else
    \hskip \glueexpr \@HwM@arrowfill@skip/\tw@ \relax
  \fi
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@leftbroomfill@Wwac@}
%    Like "\@HwM@rightbroomfill@Wwac@", but facing to the left.
%    \begin{macrocode}
\newcommand*\@HwM@leftbroomfill@Wwac@{%
  \@HwM@set@left@dir
  \@HwM@enriched@arrowfill@ \relbar\relbar\@HwM@leftbroomtail
        \@HwM@left@add@witch@cat
        \@gobbletwo
        \@ne
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@leftpitchfill@Wwac@}
%    Like "\@HwM@rightpitchfill@Wwac@", but facing to the left.
%    \begin{macrocode}
\newcommand*\@HwM@leftpitchfill@Wwac@{%
  \@HwM@set@left@dir
  \@HwM@enriched@arrowfill@ \relbar\relbar\@HwM@leftpforktail
        \@HwM@left@add@witch@cat
        \@gobbletwo
        \@ne
}
%    \end{macrocode}
%    \end{macro}
%
%    \begin{macro}{\@HwM@left@add@witch@cat}
%    Similar to "\@HwM@right@add@witch@cat".
%    \begin{macrocode}
\newcommand*\@HwM@left@add@witch@cat[2]{%
  \if@HwM@cat@
    \hskip \glueexpr \@HwM@arrowfill@skip/4 \relax
    \@HwM@Small@Cat@On@Hori@Broom #2%
    \hskip \glueexpr \@HwM@arrowfill@skip/4 \relax
  \else
    \hskip \glueexpr \@HwM@arrowfill@skip/\tw@ \relax
  \fi
  \@HwM@Small@Witch@Wo@Broom #2%
  \hskip -\glueexpr \@HwM@arrowfill@skip/\tw@ \relax
}
%    \end{macrocode}
%    \end{macro}
%
%    Next, we take care of the ``swishes'' that accompany ghosts and fluttering
%    bats.  Probably, here, we should try harder to factor out common code.
%
%    \begin{macro}{\@HwM@init@swish@dimens}
%    Subroutine; \#1~is a font selector (\eg "\textfont").
%    \begin{macrocode}
\newcommand*\@HwM@init@swish@dimens[1]{%
  \dimen4 \glueexpr \fontdimen 22 #1\tw@ *\tw@/\thr@@
  \dimen6 .\@HwM@if@bold@math{333333}{25}\@HwM@thickness@units@for #1%
  \dimen@ \dimen4
  \@HwM@calc@swish@thickness
}
%    \end{macrocode}
%    \end{macro}
%
%    \textbf{Uncommented code} starts here.
%    \begin{macrocode}
\newcommand*\@HwM@calc@swish@thickness{%
  \dimen@ii -\dimen@
  \advance \dimen@ii \dimen6
}
\newcommand*\@HwM@swish@leaders{%
  \leaders \hrule \@height\dimen@ \@depth\dimen@ii \hskip
}
\newcommand*\@HwM@right@swish[3]{%
  % #1 := swishing subform. (e.g., "\mkern 1.5mu\relax \mathrightbat")
  % #2 := style selector (e.g., "\displaystyle")
  % #3 := font selector (e.g., "\textfont")
  \@HwM@init@swish@dimens #3%
  \hskip \glueexpr \@HwM@arrowfill@skip/4\relax
  \@HwM@swish@leaders \glueexpr \@HwM@arrowfill@skip/4\relax
  \hskip \glueexpr \@HwM@arrowfill@skip/8\relax
  \@HwM@swish@leaders \glueexpr \@HwM@arrowfill@skip*\thr@@/8\relax
  \hskip -\@HwM@arrowfill@skip
  \advance \dimen@ \dimen4
  \@HwM@calc@swish@thickness
  \@HwM@swish@leaders \glueexpr \@HwM@arrowfill@skip*\thr@@/4 \relax
  \hskip \glueexpr \@HwM@arrowfill@skip/8\relax
  \@HwM@swish@leaders
        \glueexpr \@HwM@arrowfill@skip/8+\dimen4 /\tw@ \relax
  \hskip -\glueexpr \@HwM@arrowfill@skip/\tw@ \relax
  \advance \dimen@ \dimen4
  \@HwM@calc@swish@thickness
  \@HwM@swish@leaders
        \glueexpr \@HwM@arrowfill@skip/\tw@ +\dimen4 /\tw@ \relax
  \kern -\dimen4
  #1%
}
\newcommand*\@HwM@left@swish[3]{%
  % #1 := swishing subformula (e.g., "\mathleftbat \mkern 1.5mu\relax")
  % #2 := style selector (e.g., "\displaystyle")
  % #3 := font selector (e.g., "\textfont")
  #1%
  \@HwM@init@swish@dimens #3%
  \@HwM@swish@leaders \glueexpr \@HwM@arrowfill@skip*\thr@@/8\relax
  \hskip \glueexpr \@HwM@arrowfill@skip/8\relax
  \@HwM@swish@leaders \glueexpr \@HwM@arrowfill@skip/4\relax
  \hskip -\glueexpr \@HwM@arrowfill@skip*\thr@@/4+\dimen4 /\tw@ \relax
  \advance \dimen@ \dimen4
  \@HwM@calc@swish@thickness
  \@HwM@swish@leaders
        \glueexpr \@HwM@arrowfill@skip/8+\dimen4 /\tw@\relax
  \hskip \glueexpr \@HwM@arrowfill@skip/8\relax
  \@HwM@swish@leaders \glueexpr \@HwM@arrowfill@skip*\thr@@/4\relax
  \hskip -\glueexpr \@HwM@arrowfill@skip +\dimen4 \relax
  \advance \dimen@ \dimen4
  \@HwM@calc@swish@thickness
  \@HwM@swish@leaders
        \glueexpr \@HwM@arrowfill@skip/\tw@ +\dimen4 /\tw@ \relax
  \hskip \glueexpr \@HwM@arrowfill@skip/\tw@ +\dimen4 /\tw@ \relax
}
\newcommand*\@HwM@rightghostfill@{%
  \@HwM@extended@arrowfill@ {\@HwM@right@swish \mathrightghost}{.5}%
}
\newcommand*\@HwM@leftghostfill@{%
  \@HwM@extended@arrowfill@ {\@HwM@left@swish \mathleftghost}{.5}%
}
\newcommand*\@HwM@rightbatfill@{%
  \@HwM@extended@arrowfill@
        {\@HwM@right@swish{\mkern 1.5mu\relax \mathrightbat}}{.5}%
}
\newcommand*\@HwM@leftbatfill@{%
  \@HwM@extended@arrowfill@
        {\@HwM@left@swish{\mathleftbat \mkern 1.5mu\relax}}{.5}%
}

\newcommand*\@HwM@rightbroomfill@{%
  \arrowfill@ \@HwM@rightbroomtail\relbar\relbar
}
\newcommand*\@HwM@leftbroomfill@{%
  \arrowfill@ \relbar\relbar\@HwM@leftbroomtail
}
\newcommand*\@HwM@rightpitchfill@{%
  \arrowfill@ \@HwM@rightpforktail\relbar\relbar
}
\newcommand*\@HwM@leftpitchfill@{%
  \arrowfill@ \relbar\relbar\@HwM@leftpforktail
}

\newcommand*\@HwM@dblstyle@mathpalette[2]{%
  % Works like "\mathpalette", but macro passed in #1 must take
  % (at least) three arguments, of which the first _two_ are
  % style selections.
  \mathchoice
    {#1\displaystyle      \scriptstyle       {#2}}%
    {#1\textstyle         \scriptstyle       {#2}}%
    {#1\scriptstyle       \scriptscriptstyle {#2}}%
    {#1\scriptscriptstyle \scriptscriptstyle {#2}}%
}
\newcommand*\@HwM@variable@mathpalette[2]{%
  \mathchoice
      {#1}%
      {#2\textstyle         \textfont        }%
      {#2\scriptstyle       \scriptfont      }%
      {#2\scriptscriptstyle \scriptscriptfont}%
}
\newcommand*\@HwM@constant@mathpalette[1]{%
  \mathchoice
      {#1\displaystyle      \textfont        }%
      {#1\textstyle         \textfont        }%
      {#1\scriptstyle       \scriptfont      }%
      {#1\scriptscriptstyle \scriptscriptfont}%
}

\newcommand*\@HwM@general@large@operator[2]{%
  \mathop{%
    \@HwM@variable@mathpalette{#1}{#2}%
  }\slimits@
}
\newcommand*\@HwM@general@inner@symbol[2]{%
  \mathinner{%
    \@HwM@variable@mathpalette{#1}{#2}%
  }%
}
\newcommand*\@HwM@general@binary@operation[1]{%
  \mathbin{%
    \@HwM@constant@mathpalette{#1}%
  }%
}
\newcommand*\@HwM@general@ordinary@symbol[1]{%
  \mathord{%
    \@HwM@constant@mathpalette{#1}%
  }%
}
\newcommand*\@HwM@ifstar@cat[1]{%
    \@ifstar
        {\@HwM@cat@true  #1}%
        {\@HwM@cat@false #1}%
}

\newcommand*\mathwitch{%
  \DOTSB
  \@HwM@set@right@dir
  \@HwM@ifstar@cat{\@HwM@mathwitch lr}%
}
\newcommand*\reversemathwitch{%
  \DOTSB
  \@HwM@set@left@dir
  \@HwM@ifstar@cat{\@HwM@mathwitch rl}%
}
\newcommand*\@HwM@mathwitch[2]{%
  \@HwM@general@large@operator
      {\@HwM@Large@Witch #1#2}%
      \@HwM@Small@Witch
}

\newcommand*\pumpkin{%
  \DOTSB
  \@HwM@general@binary@operation \@HwM@Binop@Pumpkin
}
\newcommand*\bigpumpkin{%
  \DOTSB
  \@HwM@general@large@operator \@HwM@Large@Pumpkin \@HwM@Small@Pumpkin
}
\@ifdefinable\greatpumpkin{\let\greatpumpkin=\bigpumpkin}

\newcommand*\skull{%
  \DOTSB
  \@HwM@general@binary@operation \@HwM@Binop@Skull
}
\newcommand*\bigskull{%
  \DOTSB
  \@HwM@general@large@operator \@HwM@Large@Skull \@HwM@Small@Skull
}

\newcommand*\mathcloud       {\@HwM@set@right@dir \@HwM@mathcloud}
\newcommand*\reversemathcloud{\@HwM@set@left@dir  \@HwM@mathcloud}
\newcommand*\@HwM@mathcloud{%
  \@HwM@general@inner@symbol \@HwM@Large@Cloud \@HwM@Small@Cloud
}

\newcommand*\mathghost{%
  \@HwM@general@ordinary@symbol \@HwM@Symmetric@Ghost
}
\newcommand*\mathrightghost{\@HwM@set@right@dir \@HwM@mathghost}
\newcommand*\mathleftghost {\@HwM@set@left@dir  \@HwM@mathghost}
\newcommand*\@HwM@mathghost{%
  \@HwM@general@ordinary@symbol \@HwM@Asymmetric@Ghost
}

\newcommand*\mathbat{%
  \@HwM@general@ordinary@symbol \@HwM@Symmetric@Bat
}
\newcommand*\mathrightbat{\@HwM@set@right@dir \@HwM@mathbat}
\newcommand*\mathleftbat {\@HwM@set@left@dir  \@HwM@mathbat}
\newcommand*\@HwM@mathbat{%
  \@HwM@general@ordinary@symbol \@HwM@Asymmetric@Bat
}

\newcommand*\@HwM@dblstyle@overarrow@[4]{%
  % #1 := stretchable covering arrow
  % #2 := base style
  % #3 := style for covering arrow
  % #4 := base symbol
  \vbox{\ialign{##\crcr
    #1#3\crcr
    \noalign{\nointerlineskip}%
    $\m@th\hfil #2#4\hfil$\crcr
  }}%
}
\newcommand*\@HwM@dblstyle@underarrow@[4]{%
  % #1 := stretchable underlying arrow
  % #2 := base style
  % #3 := style for underlying arrow
  % #4 := base symbol
  \vtop{\ialign{##\crcr
    $\m@th\hfil #2#4\hfil$\crcr
    \noalign{\nointerlineskip \kern\ex@}%
    #1#3\crcr
  }}%
}
\newcommand*\@HwM@general@ou@w@cat[1]{%
  \@HwM@ifstar@cat{\@HwM@dblstyle@mathpalette{#1}}%
}
\newcommand*\overrightwitchonbroom{%
  \@HwM@general@ou@w@cat
    {\@HwM@dblstyle@overarrow@ \@HwM@rightbroomfill@Wwac@}%
}
\newcommand*\overleftwitchonbroom{%
  \@HwM@general@ou@w@cat
    {\@HwM@dblstyle@overarrow@ \@HwM@leftbroomfill@Wwac@}%
}
\newcommand*\overrightwitchonpitchfork{%
  \@HwM@general@ou@w@cat
    {\@HwM@dblstyle@overarrow@ \@HwM@rightpitchfill@Wwac@}%
}
\newcommand*\overleftwitchonpitchfork{%
  \@HwM@general@ou@w@cat
    {\@HwM@dblstyle@overarrow@ \@HwM@leftpitchfill@Wwac@}%
}
\newcommand*\overrightswishingghost{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@overarrow@ \@HwM@rightghostfill@}%
}
\newcommand*\overleftswishingghost{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@overarrow@ \@HwM@leftghostfill@}%
}
\newcommand*\overrightflutteringbat{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@overarrow@ \@HwM@rightbatfill@}%
}
\newcommand*\overleftflutteringbat{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@overarrow@ \@HwM@leftbatfill@}%
}
\newcommand*\underrightwitchonbroom{%
  \@HwM@general@ou@w@cat
    {\@HwM@dblstyle@underarrow@ \@HwM@rightbroomfill@Wwac@}%
}
\newcommand*\underleftwitchonbroom{%
  \@HwM@general@ou@w@cat
    {\@HwM@dblstyle@underarrow@ \@HwM@leftbroomfill@Wwac@}%
}
\newcommand*\underrightwitchonpitchfork{%
  \@HwM@general@ou@w@cat
    {\@HwM@dblstyle@underarrow@ \@HwM@rightpitchfill@Wwac@}%
}
\newcommand*\underleftwitchonpitchfork{%
  \@HwM@general@ou@w@cat
    {\@HwM@dblstyle@underarrow@ \@HwM@leftpitchfill@Wwac@}%
}
\newcommand*\underrightswishingghost{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@underarrow@ \@HwM@rightghostfill@}%
}
\newcommand*\underleftswishingghost{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@underarrow@ \@HwM@leftghostfill@}%
}
\newcommand*\underrightflutteringbat{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@underarrow@ \@HwM@rightbatfill@}%
}
\newcommand*\underleftflutteringbat{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@underarrow@ \@HwM@leftbatfill@}%
}
\newcommand*\overrightbroom{%
  \mathpalette{\overarrow@ \@HwM@rightbroomfill@}%
}
\newcommand*\overleftbroom{%
  \mathpalette{\overarrow@ \@HwM@leftbroomfill@}%
}
\newcommand*\overrightpitchfork{%
  \mathpalette{\overarrow@ \@HwM@rightpitchfill@}%
}
\newcommand*\overleftpitchfork{%
  \mathpalette{\overarrow@ \@HwM@leftpitchfill@}%
}
\newcommand*\underrightbroom{%
  \mathpalette{\underarrow@ \@HwM@rightbroomfill@}%
}
\newcommand*\underleftbroom{%
  \mathpalette{\underarrow@ \@HwM@leftbroomfill@}%
}
\newcommand*\underrightpitchfork{%
  \mathpalette{\underarrow@ \@HwM@rightpitchfill@}%
}
\newcommand*\underleftpitchfork{%
  \mathpalette{\underarrow@ \@HwM@leftpitchfill@}%
}
\newcommand*\overscriptrightbroom{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@overarrow@ \@HwM@rightbroomfill@}%
}
\newcommand*\overscriptleftbroom{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@overarrow@ \@HwM@leftbroomfill@}%
}
\newcommand*\overscriptrightpitchfork{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@overarrow@ \@HwM@rightpitchfill@}%
}
\newcommand*\overscriptleftpitchfork{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@overarrow@ \@HwM@leftpitchfill@}%
}
\newcommand*\underscriptrightbroom{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@underarrow@ \@HwM@rightbroomfill@}%
}
\newcommand*\underscriptleftbroom{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@underarrow@ \@HwM@leftbroomfill@}%
}
\newcommand*\underscriptrightpitchfork{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@underarrow@ \@HwM@rightpitchfill@}%
}
\newcommand*\underscriptleftpitchfork{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@underarrow@ \@HwM@leftpitchfill@}%
}
\newcommand*\overscriptrightarrow{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@overarrow@ \rightarrowfill@}%
}
\newcommand*\overscriptleftarrow{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@overarrow@ \leftarrowfill@}%
}
\newcommand*\overscriptleftrightarrow{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@overarrow@ \leftrightarrowfill@}%
}
\newcommand*\underscriptrightarrow{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@underarrow@ \rightarrowfill@}%
}
\newcommand*\underscriptleftarrow{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@underarrow@ \leftarrowfill@}%
}
\newcommand*\underscriptleftrightarrow{%
  \@HwM@dblstyle@mathpalette
    {\@HwM@dblstyle@underarrow@ \leftrightarrowfill@}%
}

\newcommand*\@HwM@make@arrowfill@like[3]{%
  % #1 := base symbol, which expects as its own arguments
  %         - #1, a style selector (e.g., "\scriptstyle")
  %         - #2, a font selector (e.g., "\scriptfont")
  % #2 := centering method, either "\hfil" or "\hidewidth"
  % #3 := style selector (e.g., "\scriptstyle")
  #2%
  \@HwM@auto@font@selector{#1}#3% braces around #1 are for robustness
  #2%
}
\newcommand*\@HwM@over@under@bat[2]{%
  % #1 := "\@HwM@dblstyle@overarrow@" | "\@HwM@dblstyle@underarrow@"
  % #2 := "\hfil" | "\hidewidth"
  \@HwM@dblstyle@mathpalette{%
    #1{%
      \@HwM@make@arrowfill@like \@HwM@Symmetric@Bat #2%
    }%
  }%
}
\newcommand*\overbat{%
  \@ifstar{%
    \@HwM@over@under@bat \@HwM@dblstyle@overarrow@ \hfil
  }{%
    \@HwM@over@under@bat \@HwM@dblstyle@overarrow@ \hidewidth
  }%
}
\newcommand*\underbat{%
  \@ifstar{%
    \@HwM@over@under@bat \@HwM@dblstyle@underarrow@ \hfil
  }{%
    \@HwM@over@under@bat \@HwM@dblstyle@underarrow@ \hidewidth
  }%
}

\newcommand*\@HwM@ext@arrow@w@cat[5]{%
  \def\@HwM@tempa{\ext@arrow {#1}{#2}{#3}{#4}{#5}}%
  \@HwM@ifstar@cat{\@HwM@ext@arrow@w@cat@x}%
}
\newcommand*\@HwM@ext@arrow@w@cat@x[2][]{%
  \@HwM@tempa {#1}{#2}%
}
\newcommand*\xrightwitchonbroom{%
  \@HwM@ext@arrow@w@cat 9395\@HwM@rightbroomfill@Wwac@
}
\newcommand*\xleftwitchonbroom{%
  \@HwM@ext@arrow@w@cat 3959\@HwM@leftbroomfill@Wwac@
}
\newcommand*\xrightwitchonpitchfork{%
  \@HwM@ext@arrow@w@cat 9395\@HwM@rightpitchfill@Wwac@
}
\newcommand*\xleftwitchonpitchfork{%
  \@HwM@ext@arrow@w@cat 3959\@HwM@leftpitchfill@Wwac@
}
\newcommand*\xrightswishingghost[2][]{%
  \ext@arrow 3{12}5{15}\@HwM@rightghostfill@{#1}{#2}%
}
\newcommand*\xleftswishingghost[2][]{%
  \ext@arrow {12}3{15}5\@HwM@leftghostfill@{#1}{#2}%
}
\newcommand*\xrightflutteringbat[2][]{%
  \ext@arrow 0055\@HwM@rightbatfill@{#1}{#2}%
}
\newcommand*\xleftflutteringbat[2][]{%
  \ext@arrow 0055\@HwM@leftbatfill@{#1}{#2}%
}
\newcommand*\xrightbroom{%
  \@HwM@ext@arrow@w@cat 9395\@HwM@rightbroomfill@
}
\newcommand*\xleftbroom{%
  \@HwM@ext@arrow@w@cat 3959\@HwM@leftbroomfill@
}
\newcommand*\xrightpitchfork{%
  \@HwM@ext@arrow@w@cat 9395\@HwM@rightpitchfill@
}
\newcommand*\xleftpitchfork{%
  \@HwM@ext@arrow@w@cat 3959\@HwM@leftpitchfill@
}

\newcommand*\@HwM@tighter@joinrel{%
  \mathrel{\mkern-6.5mu}%
}
\newcommand*\rightbroom{%
  \DOTSB
  \protect\@HwM@rightbroomtail
  \protect\@HwM@tighter@joinrel
  \protect\relbar
  \protect\@HwM@tighter@joinrel
  \protect\relbar
}
\newcommand*\leftbroom{%
  \DOTSB
  \protect\relbar
  \protect\@HwM@tighter@joinrel
  \protect\relbar
  \protect\@HwM@tighter@joinrel
  \protect\@HwM@leftbroomtail
}
\newcommand*\hmrightpitchfork{%
  \DOTSB
  \protect\@HwM@rightpforktail
  \protect\@HwM@tighter@joinrel
  \protect\relbar
  \protect\@HwM@tighter@joinrel
  \protect\relbar
}
\newcommand*\hmleftpitchfork{%
  \DOTSB
  \protect\relbar
  \protect\@HwM@tighter@joinrel
  \protect\relbar
  \protect\@HwM@tighter@joinrel
  \protect\@HwM@leftpforktail
}

\let \do = \noexpand
%    \end{macrocode}
%
%    End of the module for the \packlass{\halloweenmath} package.
%    \begin{macrocode}
%</halloweenmath>
%    \end{macrocode}
%
% \section{End of input}
%
%    The usual "\endinput" which prevents the \DS\ program from putting
%    garbage into the generated files.
%    \begin{macrocode}
\endinput
%    \end{macrocode}
%
% \Finale
%
