%
% Mhyper.sty -- The hypertext functionality used by MuPAD documents.
%
% Currently, it *must* be included from Mhelp.sty.

%% Copyright 2002 SciFace Software GmbH
%
% This program may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.2
% 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.2 or later is part of all distributions of LaTeX 
% version 1999/12/01 or later.
%
% This program consists of the files Mhelp.sty, Mhyper.sty,
% Mcompat.sty, Mbook.sty, Mreprt.sty, Mfonts.sty, Mwrite.sty,
% and MuPAD.mf.

\def\splitcvs $#1: #2.sty,v #3 #4 #5$ to #6#7#8\relax{%
        \def#6{#2}%
        \def#7{v#3}%
        \def#8{#4}%
}
\splitcvs $Id: Mhyper.sty,v 1.7 2003/11/21 15:23:43 nthiery Exp $ to %
  \filename\fileversion\filedate\relax
%
\ProvidesPackage{\filename}[\filedate]
\immediate\typeout{Package: `\filename'
    \fileversion \space \filedate \space (roehrig, metzner, billing, ccr)}

%----------------------- Tokenregister ----------------------------------
\newtoks\iMindexentries % Hier wird gespeichert, fuer welche Eintraege
\iMindexentries{}       % in der Kopfzeile Links angelegt werden.

% xxx in Mhelp.sty sind einige Referenzen hierauf.
\newtoks\iM@bsplines    % Hier werden die Beispieleingaben gesammelt,
\iM@bsplines{}          % um sie am Ende des Beispiels in ein \special
                        % schreiben zu koennen.

% xxx in Mhelp.sty sind einige Referenzen hierauf.
\newtoks\iM@bsp@par
\iM@bsp@par{}

\newtoks\iM@menuhrefs   % Hier werden die Mmenuhref{}s gesammelt,
\iM@menuhrefs{} % Um mit autobutton nicht zu kollidieren.

\newcommand*{\iM@prepare@largepages}{%
                                % Hier wird die LaTeX-Routine, die für das
                                % Anhängen von Fußnoten zuständig ist, ein
                                % wenig aufgebohrt, so daß unten die
                                % \Mbottomline drankommt. Außerdem stimmt so
                                % endlich auch die Angabe der Seitenlänge.
  \newcounter{iM@floatsthispage}[page]
  \newdimen\iM@pageheight
  \def\@makecol{%
    \ifvoid\footins
      \setbox\@outputbox\box\@cclv
    \else
      \setbox\@outputbox \vbox{%
        \boxmaxdepth\@maxdepth
        \unvbox\@cclv
        \vskip\skip\footins
        \color@begingroup
        \normalcolor\footnoterule
        \unvbox\footins
        \color@endgroup}
    \fi
%
    \xdef\@freelist{\@freelist\@midlist}%
    \global\let\@midlist\@empty
    \@combinefloats
    \iMtmplength=\dp\@outputbox\relax
    \advance\iMtmplength\ht\@outputbox%
    \relax
% For the first page of an index:
    \ifx\@dbltoplist\@empty
    \else
      \def\@elt####1{%
        \global\advance\iMtmplength\ht####1\relax
        \global\advance\iMtmplength\dp####1\relax}%
      \@dbltoplist
      \let\@elt\relax
      \global\advance\iMtmplength by\dbltextfloatsep
    \fi
%
    \ifdim\iMtmplength>\iM@pageheight%
      \global\iM@pageheight=\iMtmplength%
    \fi%
    \ifvbox\@kludgeins
      \@makespecialcolbox
    \else
    \setbox\@outputbox \vbox to\@colht{%
      \@texttop \dimen@\dp\@outputbox
      \unvbox\@outputbox
      \vskip -\dimen@\@textbottom
      }%
    \fi
    \global\maxdepth\@maxdepth
    }
% \newpage enthält ein für diese Zwecke fatales \vfil, hier die
% Variante ohne diesen Befehl:
  \def\newpage{%
    \if@noskipsec\ifx\@nodocument\relax%
    \leavevmode\global\@noskipsecfalse%
    \fi\fi%
    \if@inlabel%
    \leavevmode%
    \global\@inlabelfalse%
    \fi%
    \if@nobreak%
    \@nobreakfalse%
    \everypar{}%
    \fi%
    \penalty-\@M%
    }%
% Und nun noch das pageheight-\special ausgeben.
% Um das Ende einer Hilfeseite erkennen zu können,
% brauchen wir einen speziellen penalty-Wert.
% Um den abfangen zu können, kann nicht mehr
% \EveryShipout verwendet werden, weil die LaTeX-
% \output-Routine dann schon die komplette Seite
% verworfen hätte.
  \gdef\M@output{%
    \ifnum\outputpenalty=-\@Mi\else
      \setbox\@tempboxa=\vbox{}%
      \ifnum\outputpenalty=-10037\relax
        \outputpenalty=-\@M\relax
      \else
        \ifM@helppage
          \setbox\@tempboxa=\vbox{\hbox to
            \linewidth{\hfill$\rightarrow$}}%
%        \advance\iM@pageheight by 2em\relax
        \fi
      \fi
      \setbox255=\vbox{%
        \vbox to \pagetotal{\unvbox255}\relax\unvbox\@tempboxa}%
    \fi}
  \let\M@orig@outputpage=\@outputpage
  \def\@outputpage{%
% \iM@pageheight wird oben in \@makecol gesetzt.
    \advance\iM@pageheight by 60pt\relax
    \setbox\@outputbox=\vbox{\special{|pageheight|\the\iM@pageheight|}%
      \unvbox\@outputbox\vfill}\relax
    \global\iM@pageheight=0pt%
    \M@orig@outputpage}

  \expandafter\output\expandafter=\expandafter{\expandafter\M@output\the\output}%
  \gdef\iM@helppage@ueberschrift{}%
                                % Kapitelanfänge werden nicht unten numeriert
  \global\let\ps@plain\ps@empty
  \let\@orig@startsection\@startsection
  \global\def\@startsection##1##2{%
    \ifnum##2<4\relax% bis zur subsubsection
       % Ein Seitenumbruch kommt, wenn seit der letzten Ueberschrift
       % Text ausgegeben wurde.
       % Sonst macht ein Seitenumbruch wenig Sinn.
    \if@nobreak\else\clearpage\null\vspace*{-1.2cm}\fi\fi
    \csname iM@prep@##1\endcsname%
    \@orig@startsection{##1}{##2}%
    }%
  \@ifundefined{chapter}{% nicht book.cls
    }{% book.cls
    \let\@orig@chapter\chapter
    \gdef\chapter{%
      \if@Msplittoc
        \ifnum\c@chapter>0\addtocontents{toc}{\protect\newpage}\fi%
      \fi
      \Mnewcontext
      \@orig@chapter%
      }
    }
  \let\@orig@sect\@sect
  \gdef\@sect##1##2##3##4##5##6[##7]##8{%
    \ifnum##2<7\relax
    {%
      \iM@flat@Mwrite{mantoc}{##2\space ##8\space \string\\\space%
        \if!\Mpackname!\else\Mpackname??\fi\iMidx@entry}%
      }
    \fi
    \Mnewcontext
    \@orig@sect{##1}{##2}{##3}{##4}{##5}{##6}[{##7}]{##8}}
  \let\@orig@appendix\appendix
  \gdef\appendix{%
    \addtocontents{toc}{\protect\newpage}%
    \global\let\chapter\@orig@chapter%
    \@orig@appendix%
    }
  \let\iM@orig@makechapterhead\@makechapterhead%
  \gdef\@makechapterhead{\vspace*{-2.5cm}\iM@prep@chapter\iM@orig@makechapterhead}%
  \let\iM@orig@makeschapterhead\@makeschapterhead%
  \gdef\@makeschapterhead{\iM@prep@chapter\iM@orig@makeschapterhead}%
  \let\iM@orig@figure\figure
  \let\iM@orig@endfigure\endfigure
  \global\stepcounter{iM@floatsthispage}%
  \global\renewenvironment{figure}[1][H]{%
    \ifnum\value{iM@floatsthispage}>\value{totalnumber}\newpage\fi%
    \iM@orig@figure[H]}%
  {\iM@orig@endfigure}%
  \global\setcounter{errorcontextlines}{255}%
  \global\setcounter{topnumber}{256}%
  \global\setcounter{bottomnumber}{256}%
  \global\setcounter{totalnumber}{3}%
  \global\renewcommand\topfraction{0.99999}%
  \global\renewcommand\bottomfraction{0.9999}%
  \global\renewcommand\textfraction{0.00001}%
  \global\renewcommand\floatpagefraction{0.000001}%
}
%------------------------------------------------------------------------
%--------------- Die Hy\TeX-Makros --------------------------------------

% xxx Werden noch an \Mwrite angepasst
\def\TRENNCHR{|}

\def\@hywarning#1{%
  \ifhytexwarnings\typeout{>>HyTeX Warning: #1. (Input line \the\inputlineno)}\fi}
%
% The next two commands have their equivalents in |\pagebreak| and |\clearpage|
% with the difference that they only act if hypermode is true
%
\def\hyperpagebreak{\ifhypermode\newpage\fi}
\def\hyperclearpage{\ifhypermode\clearpage\fi}
%
% \iM@nodepageref sets button with reference to node in toprow of previewer
% syntax : \iM@nodepageref {<nodename>} {<label for button>}
% option |\iM@nodepageref*| added on 10-9-93 to enable references to other
% HyTeX-files and system calls by dynamic buttons. (JH)
%
\def\iM@nodepageref{%
   \@ifstar{\@snodepageref}{\@nodepageref}}%
\def\@nodepageref#1#2{%
  \ifhtml\Link{#1}{}#2\EndLink\fi
  \ifhypermode\@ifundefined{nr@#1}%
  {%\@hywarning{nodepageref `#1' on page \thepage \space
                                %undefined}
  }%
  {%\iMputhyp{{\iM@therealpage}{#2}{\@nameuse{nr@#1}}}
  }%
  \fi}%
\def\@snodepageref#1#2{%
   \ifhypermode%\iMputhyp{{\iM@therealpage}{#2$#1}{-2}}%$
   \fi
   \ifhtml\Link{#1}{}#2\EndLink\fi
}%
%
\def\iM@newnode{\bgroup\iM@sanitize\@makeother{\%}\iM@@newnode}
\def\iM@@newnode#1#2#3{\egroup%
   \global\@namedef{nr@#1}{#2}%
   \iMescapeChar{:}{?}{#1}%
   \expandafter\xdef\csname la@\iM@docname @#1\endcsname{\iMescaped}%
%%%   \iMputlab{#1}{#2}%
}%
%%% %
%%% % Command \iM@node: Set nodes in a HyTeX-document.
%%% % Syntax: \iM@node {<nodename>}
%%% % last changes : 21- 4-94       JH
%%% %
%%% %\def\nodelabel{\PackageWarning{Mhelp}{please use \string\Mnode{}, not \string\nodelabel.}\Mnode}%
%%% %
%%% \def\iM@node{%
%%%   \@ifnextchar[%]
%%%     {\@subnode}{\@subnode[\relax]}}%
%%% 
%%% \def\@subnode[#1]{%
%%%  \if\relax#1\gdef\@nodetext{\@nodename}\else\gdef\@nodetext{#1}\fi%
%%%  \@ifnextchar({\@@subnode}{\@@subnode(sss)}}%
%%% \def\@@subnode(#1)#2{%
%%%  \@ifundefined{nn@#2}{\gdef\@nodemaplevel{#1}\gdef\@nodename{#2}%
%%%    \@checkmaplevel\@setnode\global\@namedef{nn@#2}{defined}}%
%%%   {\@hywarning{Node `#2' multiply defined}}}%
%%% 
%%% \def\@setnode{%
%%%   \@bsphack\if@filesw%
%%%     \protected@write\@auxout{\let\iM@therealpage\relax}%
%%%                     {\string\iM@newnode{\@nodename}%
%%%                     {\iM@therealpage}{\@nodetext}}%
%%%     \if@nobreak\ifvmode\nobreak\fi\fi\fi\@esphack}%
%%% \def\@checkmaplevel{%%
%%%  \def\@hyptmpb{p}\ifx\@hyptmpb\@nodemaplevel\else%
%%%   \def\@hyptmpb{c}\ifx\@hyptmpb\@nodemaplevel\else%
%%%    \def\@hyptmpb{s}\ifx\@hyptmpb\@nodemaplevel\else%
%%%     \def\@hyptmpb{ss}\ifx\@hyptmpb\@nodemaplevel\else%
%%%      \def\@hyptmpb{sss}\ifx\@hyptmpb\@nodemaplevel\else%
%%%       \def\@hyptmpb{n}\ifx\@hyptmpb\@nodemaplevel\else%
%%%        \@hywarning%
%%%         {Illegal level `\@nodemaplevel' for node `\@nodename' on page \thepage}%
%%%         \global\let\@nodemaplevel\@defaultmaplevel\fi\fi\fi\fi\fi\fi}%
%
% The \noderef command sets a referencemark to a node in current text.
% Syntax : \noderef{<nodename>}{<text>}
% `text' will appear in a fbox, so there will be no linebreak within that box!
% options: (see manuals for further information)
% - A star after the command will omitt warnings.
% - An exclamationmark at beginning of argument 1 will execute argument 1 as a
% shell command.
% - ?? fter nodename followed by documentname sets reference to that
% HyTeX-document. Changed from :: to ?? bei tom  01.06.97
% - (<dimension>,<dimension>,<dimension>) between arg1 and arg2 will set 
% surrounding fbox to (width, height, depth)
% - to `activate' equationnumbers, put \noderef {<nodename>} {} before \\ or
% end of line.
% last changes : 18- 4-93       JH
%
\newdimen\@rspace\global\@rspace\z@
\newdimen\@noderefdep
\newif\if@qnnumr@f\@qnnumr@ffalse
\newif\if@quote@quotes\@quote@quotesfalse

\def\MWinOpenFile{%
  \@quote@quotestrue
  \def\@shsp{winfile}%
  \let\@hyptmpd\ifhytexwarnings
  \hytexwarningsfalse\@noderef}%

\let\MOpenURL\MWinOpenFile

\def\noderef{%
  \@quote@quotesfalse
  \gdef\@shsp{hyp}%
  \let\@hyptmpd\ifhytexwarnings\@ifstar{\hytexwarningsfalse\@noderef}%
  {\@noderef}}

%%% \def\@noderef#1{%
%%% % \hskip\z@%
%%%  \leavevmode%
%%%  \@ifnextchar({\@bnoderef{#1}}{\@@noderef{#1}}}%
%%% 
%%% \def\@bnoderef#1(#2,#3,#4)#5{%
%%%  \@bsphack\setbox0\hbox{#5}\@esphack%
%%%  \ifdim\wd0<#2\wd0=#2\fi\ifdim\ht0<#3\ht0=#3\fi\ifdim\dp0<#4\dp0=#4\fi%
%%%  \@@@noderef{#1}{\box0}}%
%%% 
%%% \def\@@noderef#1#2{%
\def\@noderef#1#2{%
        \setbox0\hbox{#2}%
        \@noderefdep=\dp0%
        \@tempdima=\wd0%
        \ifMbspmode\else\dp0=0pt\fi%
        \setbox0\hbox{\@@@noderef{#1}{\box0}}%
        \ifdim\dp0<\@noderefdep\dp0=\@noderefdep\fi%
        \wd0=\@tempdima%
        \box0 %
}

% Falls ein \LaTeX-Knoten dieses Namens existiert, verweise auf ihn.
\bgroup
\@makeother{"}%
\lowercase{\egroup
\def\@@@noderef#1#2{%
\ifhypermode%
  \if@quote@quotes
    \def\x{\iMescapeChar{"}{\string\"}}%
    \def\y{#1}%
    \expandafter\expandafter\expandafter\x\expandafter\expandafter\expandafter{\expandafter\strip@prefix\meaning\y}%
    \expandafter\href\expandafter{\iMescaped}{#2}%
  \else
    \href{#1}{#2}%
  \fi
\else% not hypermode
\@ifstar{}{}#2\relax
\fi
\let\ifhytexwarnings\@hyptmpd}}

%
% should insert this \let in case of `private' definition of the equationcounter
% to recover previous definition after use of \noderef in equation or eqnarray
% environment. 
%
\let\@eqnnummem\@eqnnum
%
%
% \putgiffile is a HyTeX command that puts a GIF graphic in current text.
% syntax : \putgiffile {<filename>} (<width>,<height>,<depth>)
% filname has to be the name of the file, without path; height, depth and width
% determine height, depth and width of the box for the graphic.
% \special command expands to {gif:<filename>:<height>:<depth>:<width>}
% created : 25-11-93            JH
% last changes : 26-11-93       JH
%
% Should be replaced by \Mgraphic.
\def\putgiffile{%
 \PackageError{Mhelp}{\string\putgiffile{} no longer supported,
   superceded by \string\Mgraphic}}%
%%  \@ifstar{\@@putgiffile}{\@putgiffile}}
%% \def\@putgiffile#1(#2,#3,#4){%
%%  \ifhypermode\ifvmode\noindent\fi
%%   \setbox0\hbox{$#1$}
%%   \ifdim\wd0=\z@
%%   \@hywarning{No file named for \string\putgiffile{} on page \thepage}\fi
%%   \setbox0\hbox{}\ht0=#3\dp0=#4\wd0=#2\setbox1\hbox{\box0}
%%   \special{gif\TRENNCHR#1\TRENNCHR
%%     \number\ht1\TRENNCHR\number\dp1\TRENNCHR\number\wd1}%
%%   \hbox{\box1}\fi}
%% \def\@@putgiffile#1(#2,#3,#4){%
%%  \ifhypermode\ifvmode\noindent\fi
%%   \setbox0\hbox{$#1$}
%%   \ifdim\wd0=\z@
%%   \@hywarning{No file named for \string\putgiffile{} on page \thepage}\fi
%%   \setbox0\hbox{}\ht0=#3\dp0=#4\wd0=#2\setbox1\hbox{\box0}
%%   \special{gif\TRENNCHR#1\TRENNCHR
%%     \number\ht1\TRENNCHR\number\dp1\TRENNCHR\number\wd1}\fi}
%% Die Variante, alles in einem Token-Register zu sammeln, ist
%% unglaublich langsam (beim Einlesen des .aux-Files am Anfang).
%% Wir schreiben die Dinger also direkt hinaus, sie stehen dann
%% eh ziemlich am Anfang der Datei, direkt dort, wo das .aux-File
%% eingelesen wird.
%%\newtoks\iM@hyptok
%%\iM@hyptok{}
%%\newtoks\iM@labtok
%%\iM@labtok{}
%% \def\iMputhyp#1{%
%% %       \special{.hyp:#1}
%%         \iM@protected@Mwrite{hyp}{#1}%
%% }
%% \def\iMputlab#1#2{%
%% %        \ifhypermode\special{.lab|#1|#2}\fi%
%%         \Mwrite{lab}{{#2}{#1}{#2}}%
%% }
%
% \Mlabel enthaelt das Trennzeichen fuer dokumentuebergreifende 
% HyTeX Spruenge. Der Mhelp.sty ist nun so geschrieben, da"s bei einem
% anderen Trennzeichen nun nur noch dieses Makro zu aendern ist.
%
\bgroup
\catcode`\#=11
\gdef\Mlabel{#}
\egroup
\def\Msuffix{.mdvi}
%
% \iMscanoptlabel{optionaler_Label}{Text}
% Makro \iMscanoptlabel scannt einen optionalen HyTeX-Knoten und konstruiert
% hieraus und aus dem "ubergebenen Text einen noderef konformen HyTeX Knoten.
% Der optionale HyTeX-Knoten ist momentan wie folgt aufgebaut.
% a) name         Gibt den Knotennamen im aktuellen Dokument an
% b) name1,name2  Gibt den Knotennamen name2 im Dokument name1 an
% c) name,        Gibt den Knotennamen im Dokument name an. Als Knotenname
%                 wird der dem Makro "ubergebene Text benutzt.
%
% \iMscanoptlabel konstruiert aus dem uebergebenen optionalen HyTeX-Knoten
% (wie oben beschrieben) einen \noderef konformen HyTeX Knoten 
% Der so konstruierte \noderef konforme HyTeX Knoten wird in der
% globalen Variable \iMnod abgelegt, der Dokumentname wird in \jobname.exr
% geschrieben, außerdem enthält nach dem Aufruf \iM@refdocname den Namen
% der angesprochenen Datei, \iM@reflabel den Namen des angesprochenen
% Labels.
%
%   10.06.97    tom
%
\def\iMscanoptlabel#1#2{%
  \def\arguments{#1,\@end}\gdef\iMxx{}%
  \gdef\iM@refdoc{\iM@docname}%
  \def\Mtext{#2}%
  \def\iM@setlabel##1##2{%
    \gdef\iM@refdocname{##1}%
    \gdef\iM@reflabel{##2}%
      \gdef\iMnod{##1\Msuffix\Mlabel##2}%
      \gdef\iMnod@help{##1??##2}%
      }%
  \def\mkjump##1,##2,{%
    \iM@setlabel{##1}{##2}%
    \gdef\iMxx{x}%
    }%datei,name
   \def\mklink##1,##2\@end{\def\Meins{##1}\def\Mzwei{##2}%
      \def\Mkomma{,}%
      \ifx\Mzwei\@empty\iM@setlabel{\iM@docname}{##1}\gdef\iMxx{}%
      \else%
       \ifx\Mzwei\Mkomma\iM@setlabel{##1}{\Mtext}\gdef\iMxx{x}%
       \else\def\argus{##1,##2}\expandafter\mkjump\argus% 
       \fi%
      \fi%
   }%
   \expandafter\mklink\arguments%
}

\def\iMscanoptlabelh#1#2{%
   \def\arguments{#1,\@end}%
   \def\Mtext{#2}%
   \def\mkjump##1,##2,{\def\iMnod{##2$##1}\def\iMnod@help{##2??##1}}%$%
   \def\mklink##1,##2\@end{%
     \def\Mzwei{##2}%
     \def\Mkomma{,}%
     \ifx\Mzwei\@empty\gdef\iMnod{##1}\gdef\iMnod@help{##1}\gdef\iMin{}%
     \else%
       \ifx\Mzwei\Mkomma
         \def\iMnod{\Mtext$##1}%$%
         \def\iMnod@help{\Mtext??##1}%
       \else\def\argus{##1,##2}\expandafter\mkjump\argus% 
       \fi%
     \fi%
   }%
   \expandafter\mklink\arguments%
}
% Internes Makro (statt \noderef)
% wenn ein Knoten nicht existiert, wird kein HyTeX-Verweis angelegt
% Ausnahme: Referenzen in andere Dateien (Kontrolle nicht m"oglich!)
% Option \MDebugtrue  : entsprechende Textstelle wird umrahmt
% Option \Mfailreftrue: Verweis wird doch angelegt
% 08.10.97 - bij
% Jetzt auch mit * fuer mit ohne Warnung (fuer dokumentuebergreifende Spruenge)
% 01.07.98 - ccr
\newcommand*{\iMnoderef}{\@ifstar{%
    \let\@hyptmpd\ifhytexwarnings
    \hytexwarningsfalse\@iMnoderef}{\@iMnoderef}}%
\newcommand*{\@iMnoderef}[2]%
  {%
    \noderef{#1}{#2}%
    \gdef\iMxx{}%
  }

\gdef\iMxx{}%

%------------------------------------------------------------------------
\newcommand*{\Mbookbuttons}{%
  \Mmenuhref[tableofcontents]{\Mtoc}%
  \Mmenuhref[help-index]{\Mhind}%
  \Mmenuhref[index]{\Mind}%
  \Mmenuhref[news]{\Mnews}%
  }

\def\iM@clearbuttons{%
  \ifhypermode%
%   \iMputhyp{{\iM@therealpage}{!clear}{1}}%
%   \the\iM@menuhrefs%
  \fi
  }
\def\Mclearbuttons{%
  \global\iM@menuhrefs{}%
  \iM@clearbuttons}%
%( bij - neu )%
\let\Mclearmenu\Mclearbuttons
\def\Mbook{\bookversiontrue}
\def\Maddtoc{\iaddtoctrue}
\def\Mnoaddtoc{\iaddtocfalse}

\def\iM@therealpage{\@arabic\count1}

%
% Damit Referenzen per \cite anklickbar werden, definieren wir:
%
%%\let\iM@orig@lbibitem\@lbibitem
%%\def\@lbibitem[#1]#2{%
%%   \null\hypertarget{iMciteref-#2}{\relax}%
%%   \iM@orig@lbibitem[#1]{#2}%
%%}
%%
%%\let\iM@orig@bibitem\@bibitem
%%\def\@bibitem#1{%
%%        \null\hypertarget{iMciteref-#1}{\relax}%
%%        \iM@orig@bibitem{#1}%
%%}

%%\let\iM@orig@@citex\@citex
%%\def\@citex[#1]#2{%
%%   \setbox0=\hbox{\iM@orig@@citex[{#1}]{#2}}%
%%%   \iMnoderef*{iMciteref-#2}{\box0}%
%%   \hyperlink{iMciteref-#2}{\box0}%
%%}

% Zerlege package::ident
\def\iM@scanobject#1::#2\to#3#4\endscan{%
  \def\iM@skip::##1::\endscan{##1}%
  \def\temp@a{#2}%
  \ifx\@empty\temp@a%
   \def#3{}%
   \def#4{#1}%
  \else%
   \def#3{#1}%
   \expandafter\def\expandafter#4\expandafter{\iM@skip::#2\endscan}%
  \fi%
}

\begingroup%
\lccode`\@=`\_\relax
\lccode`\a=`\"\relax
\lccode`\b=`\$\relax
\lccode`\c=`\^\relax
\catcode`\"=\active
% for french.sty:
\catcode`\z=\active
\lccode`\z=`\:\relax
\catcode`\y=\active
\lccode`\y=`\!\relax
\lowercase{\endgroup
  \newcommand*{\M@clearunderlines}[1]{{%
      \let\Mex\relax
      \let\Mup\relax
      \iMescapeChar{_}{@}{#1}%
      \def\temp@a{\iMescapeChar{\_}{@}}%
      \expandafter\temp@a\expandafter{\iMescaped}%
      \def\temp@a{\iMescapeChar{"}{a}}%
      \expandafter\temp@a\expandafter{\iMescaped}%
      \def\temp@a{\iMescapeChar{$}{b}}%$
      \expandafter\temp@a\expandafter{\iMescaped}%
      \def\temp@a{\iMescapeChar{^}{c}}%
      \expandafter\temp@a\expandafter{\iMescaped}%
      \def\temp@a{\iMescapeChar{y}{!}}%
      \expandafter\temp@a\expandafter{\iMescaped}%
      \def\temp@a{\iMescapeChar{z}{:}}%
      \expandafter\temp@a\expandafter{\iMescaped}%
    }}}

\DeclareRobustCommand*{\Mup}% Frontend für \iM@Mup
{\bgroup%
  \@makeother\_%
  \@makeother\$%
  \@makeother\^%
  \iM@Mup}

\newcommand*{\iM@Mup}% % Makro zur Markierung von MuPAD-Objekten.
                   % Inklusive HyTeX-Referenz.
        [2][]   
{\egroup%
 \leavevmode
 \def\iMin{#1}% % Zum Merken von leeren
                % optionalen Argumenten.
 \M@clearunderlines{#2}%
 \let\M@temp\iMescaped%
 \ifx\iMin\iMleer%
   \@ifundefined{M@href@\M@temp}{%
     \expandafter\iM@scanobject\M@temp::\to\iM@package\iM@ident\endscan\relax%
     \ifx\iM@package\@empty%
       \ifhtml
         \Link[stdlib]{\iM@ident}{}\iMtt{\M@temp}\EndLink
       \else
         \hyper@@link{stdlib}{\iM@ident}{\iMtt{\M@temp}}\relax%
       \fi
     \else%
%       \iMnoderef{\iM@package\Msuffix\Mlabel\iM@ident}{\iMtt{\M@temp}}%
       \ifhtml
         \Link[\iM@package]{\iM@ident}{}\iMtt{\M@temp}\EndLink
       \else
         \hyper@@link{\iM@package}{\iM@ident}{\iMtt{\M@temp}}\relax%
       \fi
     \fi}%
 {% Verweis wird umgebogen
   \bgroup\edef\temp@a{\csname M@href@\M@temp\endcsname}%
   \expandafter\iM@Mup\expandafter[\temp@a]{#2}}%
 \else% #1 ist gesetzt
   \@ifundefined{M@href@#1}{%
     \iMscanoptlabel{#1}{#2}%
       \ifhtml
         \Link[\iM@refdocname]{\iM@reflabel}{}\iMtt{\M@temp}\EndLink
       \else
         \hyper@@link{\iM@refdocname}{\iM@reflabel}{\iMtt{\M@temp}}\relax%
       \fi
%     \iMnoderef*{\iMnod}{\iMtt{\M@temp}}%
       }%
   {% Verweis wird umgebogen
     \bgroup\edef\temp@a{\csname M@href@#1\endcsname}%
     \expandafter\iM@Mup\expandafter[\temp@a]{#2}}%
 \fi%
}

\newcommand*{\MupToDo}[1][]{%
  \bgroup
  \iM@sanitize
  \@MupToDo}
\newcommand*{\@MupToDo}[1]{\egroup\M@clearunderlines{#1}%
  \expandafter\iMtt\expandafter{\iMescaped}}

\newcommand*{\Mupc}{\bgroup\iM@sanitize\iM@Mupc}
\newcommand*{\iM@Mupc}% % Makro zur Markierung von MuPAD-Objekten
  [3][]             % mit angehaengtem Parameter.
                    % Inklusive HyTeX-Referenz.
  {\iM@Mup[#1]{#2}\M@clearunderlines{#3}\iMtt{(\iMescaped)}}

\newcommand*{\Mhytexbegin}
 {\iMhytexpagesize}

\newcommand*{\Mhytexend}
 {}%

\newcommand*{\Mnode}[1]  % HyTeX-Knoten wird erzeugt
 {\hypertarget{#1}{\relax}}

%% \newcommand{\Mhelpindexref} % Referenz zum Helpindex setzen
%%  {\Mclearbuttons%
%% % \iM@nodepageref*{help-index$manual_english}{Helpindex}} %$%
%%  \iM@nodepageref*{help-index$man_eng}{Helpindex}}%$%

% Für Verweise auf externe Dateien müssen die dort definierten Knotennamen
% gelesen werden.  Diese Routine splittet diese Datei auf.
% Aufruf: \iM@getlabels{filename} führt die \iM@globlabel aus filename aus.
% Die Idee ist aus xr.sty geklaut.

% xxx hier muß noch nach la@\iM@package @\iM@ident geschaut werden.
\newcommand{\Mhref}% % \Mhref[datei,knoten]{Text}
                     % es wird auf knoten in datei verwiesen,
        [2][]        % aber Text ausgegeben
{\leavevmode
  \def\iMin{#1}%
  \ifx\iMin\iMleer%
    \ifhypermode%
      \def\iMnod{\iM@docname @\iM@filename @#2}%
      \hyper@@link{}{\iMnod}{\ref{#2}}%
    \else%
      \ref{#2}%
    \fi
  \else
    \ifhypermode
      \@ifundefined{M@href@#1}{%
          \iMscanoptlabel{#1}{#2}%
          \hyper@@link{\iM@refdocname}{\iM@reflabel}{#2}%
          }%
      {% Verweis wird umgebogen
        \edef\temp@a{\csname M@href@#1\endcsname}%
        \expandafter\Mhref\expandafter[\temp@a]{#2}}%
    \else
      #2%
    \fi
  \fi%
}

\newcommand*{\MhrefToDo}[2][]{#2}

\newcommand*{\Mhpageref}[1]{%
%  \ifhypermode
%    \def\iMnod{#1}%
%    \iMnoderef{#1}{\pageref{#1}}%
%  \else
%    \pageref{#1}%
%  \fi
%%
%  \Mhref[#1]{\pageref{#1}}%
%%
  \edef\temp@a{\iM@docname @\iM@filename @#1}%
%  \@ifundefined{nr@\temp@a}%
    {\Mhref[#1]{\pageref{#1}}}%
%    {\iMnoderef{\temp@a}{\pageref{#1}}}%
}

\newcommand\Mmenuhref[2][]{%
  \def\temp@a{\iM@menuhref{#1}{#2}}%
  \iM@appendtok\iM@menuhrefs+=\temp@a\iM@appendtok\relax%
  \temp@a%
}

\newcommand\iM@menuhref%   % Neues Makro: \Mmenuhref[datei,knoten]{Text}
                         % es wird auf knoten in datei verwiesen
        [2]              % und im Previewer-Kopf ein Knopf 'Text' angezeigt
{\def\iMin{#1}%
   \ifx\iMin\iMleer%
     \iM@nodepageref{#2}{#2}%
   \else%
     \iMscanoptlabelh{#1}{#2}% setzt \iMnod und \iMin
     \ifx\iMin\iMleer%
       \expandafter\iM@nodepageref\expandafter{\iMnod}{#2}%
     \else%       
       \expandafter\iM@nodepageref\expandafter*\expandafter{\iMnod}{#2}%
     \fi%
   \fi%
}
%% Zur Angabe einer textuellen (auch leeren) Alternative zu Textteilen mit
%% Referenzen in andere Dokumente, die nicht verf"ugbar sind
%% Beispiel: Referenz auf Handbuch, Beschreibung wird aber teilweise ohne
%% Handbuch herausgegeben. (If-Optionen \Mextref \Mnoextref)
%%
%% Parameter: {Knoten, auf den referenziert werden soll}
%% - 3 -      {Ausgabetext, wenn der Knoten nicht existiert, auch leer}
%%            {Ausgabetext mit Referenz, wenn der Knoten bekannt ist}
%% Bei fehlendem Knoten wird gewarnt
%% 08.10.97 - bij
\newcommand{\Mextref}[3]%[]% (vorerst) drei Argumente
{%
  \ifMnoextref% % immer ohne Referenz
    #2%
  \else%
    \ifMextref% % immer mit Referenz
      #3%
    \else%     % mit Referenz, wenn der Knoten existiert
      \@ifundefined{nr@#1}%
        {%\ifMwarning%
%           \PackageWarning%
%             {Mhelp}{Macro 'Mextref': node `#1' on page \thepage \space undefined}%
         %\else%
         %  \PackageError%
         %    {Mhelp}{}%
         %\fi%
         #2}%
        {#3}%
    \fi%
  \fi%
}

% Die Beispieleinegaben werden gesammelt und am Ende komplett ausgegeben,
% damit das entsprechende Special den ganzen Text kennen kann.
\bgroup
\catcode`\^^J=12\relax%
\def\x{%
  \def\iM@collect@bsp@line{%
    \global\iM@appendtok\iM@bsplines+=\the\verbatim@line^^J\iM@appendtok%
    \global\iM@appendtok\iM@bsp@par+=\expandafter\M@contprompt\the\verbatim@line\par\iM@appendtok%
  }%
}%
\expandafter\egroup\x

\bgroup
\catcode`\"=12%
\def\x{\egroup
\def\M@makebsplink##1{%
  \leavevmode
  {\def\next{\iMescapeChar{"}{\"}}%
    \expandafter\next\expandafter{\the\iM@bsplines}%
    \expandafter\iM@tok\expandafter{\iMescaped}%
    \ifx\iM@Mvinnotebook\relax
      \special{html:<a MuPAD=\hyper@quote\the\iM@tok\hyper@quote>}%
    \else
      \special{html:<a MuPAD=\hyper@quote\the\iM@tok\hyper@quote\space Notebook=\hyper@quote\iM@Mvinnotebook\hyper@quote>}%
    \fi
    }%
  ##1%
  \special{html:</a>}%
}}%
\x


% Newenvironment Mbsp  Available since 19.12.96    tom
% \begin{Mbsp}{Text}
% mupad_command ;
% mupad_command ; 
% \end{Mbsp}
% The argument Text will be written into the document and it is a "hyperlink".
% Clicking on this text will transfer the mupad_commands to XMuPAD.
% The environment can be used inside normal text, e.g. you can and should
% use it in the following way:
% The 
% \begin{Mbsp}{integral of $x^2$}
% int(x^2,x) ;
% \end{Mbsp}
% results in ... Why not using MuPAD to get the result?

\newenvironment{Mbsp}[1]%
{\leavevmode\begingroup\@bsphack%
\setbox0\hbox{#1\strut}%
\addtocounter{iMexcounter}{1}%
\let\do\@makeother\dospecials\catcode`\^^M\active%
\global\iM@bsplines{}%
\def\verbatim@processline{%
  \iM@collect@bsp@line%
  }%
\let\M@contprompt\relax
\verbatim@start}%
{%
  \ifhypermode%
   \M@makebsplink{\box0}%
  \else%
   \box0%
  \fi%
  \@esphack\endgroup\ 
}

%% Um im Index die Seiten der Buchstaben direkt anspringen zu koennen,
%% muessen da entsprechende Hyperlinks gesetzt werden und es muß notiert
%% werden, wohin ueberhaupt gesprungen werden kann.
%% mindex.ity definiert als Eintrag \Mindexsection, makeindex haengt
%% da den Buchstaben des entsprechenden Abschnittes dran.
\def\Mindexsection#1{%
        \ifhypermode
                \def\temp@a{\protect\hyperlink{\iMidx@entry}{#1}}
% Das hier sieht grausam aus, aber diese Reihe von \expandafter
% dient nur dazu, daß erst \iMidx@entry, dann \the\iMindextries
% und dann die Zuweisung ausgefuehrt wird. Bitte erst verstehen,
% dann aendern. :-> ccr
                \global\iMindexentries=\expandafter\expandafter\expandafter{%
                        \expandafter\the\expandafter\iMindexentries%
                        \expandafter\ \expandafter\protect%
                        \expandafter\hyperlink\expandafter{\iMidx@entry}{#1}}
        \else
                \global\iMindexentries=\expandafter{\the\iMindexentries \ #1}
        \fi
        \goodbreak{\Huge #1\par}\penalty\@m\medskip\penalty\@m
}
\let\iMindexsection\Mindexsection
\providecommand{\iMindexhead}{}
\AtEndDocument{\immediate\write\@auxout{\string\gdef\string\iMindexhead{\the\iMindexentries}}}

%
% automatisierte Erzeugung der Buttons "next chapter", "previous chapter",
% "next section", "previous section".
%

% Idee: \chapter/\section bzw. \section/\subsection legen hypertexknoten
% mit Namen der Art iMchapter-\arabic{chapter} bzw.
% iMsection-\arabic{chapter}-\arabic{section} an und es wird auf diese
% verwiesen, wenn sie existieren.
\def\iM@prep@chapter{}%

\def\M@autobutton{%
  \@ifundefined{chapter}{%
    \def\iM@prep@section{%
      \iM@setchaplabel%
      \iM@setchapbuttons%
      }%
    \def\iM@prep@subsection{%
      \iM@setsectlabel%
      \iM@setsectbuttons%
      }%
    }{% book.cls
    \def\iM@prep@chapter{%
      \iM@setchaplabel%
      \iM@setchapbuttons%
      }%
    \def\iM@prep@section{%
      \iM@setsectlabel%
      \iM@setsectbuttons%
      }%
    }%
  \let\M@sethelppagebuttons=\M@@sethelppagebuttons%
  }%

% Set a \Mmenuhref iff the label exists, no warning otherwise.
\newcommand*{\iM@menuhref@ifexists}[3]{%
%\expandafter\show\csname nr@#1\endcsname
  \@ifundefined{\ifhtml\else n\fi r@#1}{}%
  {\iM@menuhref{#1}{#2}#3}%
}


\newcommand*{\iM@setchaplabel}{%
        \stepcounter{iM@allchap}% Resets iM@allsect
        \globallabel{iMchapter-\arabic{iM@allchap}}%
}

\newcommand*{\iM@setsectlabel}{%
        \stepcounter{iM@allsect}%
        \globallabel{iMsection-\arabic{iM@allchap}-\arabic{iM@allsect}}%
}

\newcommand*{\M@sethelppagelabel}{%
  \globallabel{iMhelppage-\arabic{iMhelppage}}%
  \ifhtml\Link{}{iMhelppage-\arabic{iMhelppage}}\EndLink\fi
}%

% These commands actually set the buttons.
\newcommand*{\iM@setchapbuttons}{%
  \ifhtml\HCode{<!-- start menubuttons -->}\fi
  \iM@clearbuttons%
  \iM@menuhref@ifexists{iM-toc}{\Mtocname}{\quad}%
  \setcounter{iM@tempa}{\value{iM@allchap}}%
  \addtocounter{iM@tempa}{-1}%
  \iM@menuhref@ifexists{iMchapter-\arabic{iM@tempa}}{\Mprevchap}{\quad}%
  \addtocounter{iM@tempa}{2}%
  \iM@menuhref@ifexists{iMchapter-\arabic{iM@tempa}}{\Mnextchap}{\quad}%
  \ifhtml\HCode{<!-- end menubuttons -->}\fi
}

% will be \let to \M@@sethelppagebuttons if autobuttons is set.
\let\M@sethelppagebuttons=\relax%

\newcommand*{\M@@sethelppagebuttons}{%
  \ifhtml\HCode{<!-- start menubuttons -->}\fi
  \iM@clearbuttons%
  \iM@menuhref@ifexists{iM-toc}{\Mtocname}{\quad}%
  \iM@menuhref@ifexists{\iM@docname @\iM@filename @M@exa}{\Mexaname}{\quad}%
  \setcounter{iM@tempa}{\value{iMhelppage}}%
  \addtocounter{iM@tempa}{-1}%
  \iM@menuhref@ifexists{iMhelppage-\arabic{iM@tempa}}{\Mprevpage}{\quad}%
  \addtocounter{iM@tempa}{2}%
  \iM@menuhref@ifexists{iMhelppage-\arabic{iM@tempa}}{\Mnextpage}{\quad}%
  \ifhtml\HCode{<!-- end menubuttons -->}\fi
}

\newcommand*{\iM@setsectbuttons}{%
  \ifhtml\HCode{<!-- start menubuttons -->}\fi
  \iM@clearbuttons%
  \iM@menuhref@ifexists{iM-toc}{\Mtocname}{\quad}%
  \setcounter{iM@tempa}{\value{iM@allchap}}%
  \setcounter{iM@tempb}{\value{iM@allsect}}%
  \addtocounter{iM@tempa}{-1}%
  \iM@menuhref@ifexists{iMchapter-\arabic{iM@tempa}}{\Mprevchap}{\quad}%
  \addtocounter{iM@tempa}{2}%
  \iM@menuhref@ifexists{iMchapter-\arabic{iM@tempa}}{\Mnextchap}{\quad}%
  \addtocounter{iM@tempa}{-1}% back to what it was
  \addtocounter{iM@tempb}{-1}%
  \iM@menuhref@ifexists{iMsection-\arabic{iM@tempa}-\arabic{iM@tempb}}{\quad}%
   {\Mprevsect}%
  \addtocounter{iM@tempb}{2}%
  \iM@menuhref@ifexists{iMsection-\arabic{iM@tempa}-\arabic{iM@tempb}}{\quad}%
   {\Mnextsect}%
  \ifhtml\HCode{<!-- end menubuttons -->}\fi
}

\newcommand*{\Mtocname}{%
  \ifcase\value{iMlang}%
    Table of Contents%
  \or
    Inhaltsverzeichnis%
  \fi%
}

\newcommand*{\Mexaname}{%
  \ifcase\value{iMlang}%
    Examples%
  \or
    Beispiele%
  \fi
}

\newcommand*{\Mprevchap}{%
  \@ifundefined{chapter}{%
    \ifcase\value{iMlang}%
    % 0 = English
      <-- Section%
    \or% 1 = Deutsch
      <-- Abschnitt%
    \fi%
    }{%
    \ifcase\value{iMlang}%
    % 0 = English
      <-- Chapter%
    \or% 1 = Deutsch
      <-- Kapitel%
    \fi}}
\newcommand*{\Mnextchap}{%
  \@ifundefined{chapter}{%
    \ifcase\value{iMlang}%
    % 0 = English
      Section -->%
    \or% 1 = Deutsch
      Abschnitt -->%
    \fi%
    }{%
    \ifcase\value{iMlang}%
    % 0 = English
      Chapter -->%
    \or% 1 = Deutsch
      Kapitel -->%
    \fi}}

\newcommand*{\Mprevsect}{%
  \@ifundefined{chapter}{%
    \ifcase\value{iMlang}%
    % 0 = English
      <-- Subsection%
    \or% 1 = Deutsch
      <-- Unterabschnitt%
    \fi%
    }{%
    \ifcase\value{iMlang}%
    % 0 = English
      <-- Section%
    \or% 1 = Deutsch
      <-- Abschnitt%
    \fi}}

\newcommand*{\Mnextsect}{%
  \@ifundefined{chapter}{%
    \ifcase\value{iMlang}%
    % 0 = English
      Subsection -->%
    \or% 1 = Deutsch
      Unterabschnitt -->%
    \fi%
    }{%
    \ifcase\value{iMlang}%
    % 0 = English
      Section -->%
    \or% 1 = Deutsch
      Abschnitt -->%
    \fi}}

\newcommand*{\Mnextpage}{%
    \ifcase\value{iMlang}%
    % 0 = English
      Helppage -->%
    \or% 1 = Deutsch
      Hilfeseite -->%
    \fi}

\newcommand*{\Mprevpage}{%
    \ifcase\value{iMlang}%
    % 0 = English
      <-- Helppage%
    \or% 1 = Deutsch
      <-- Hilfeseite%
    \fi}

% Fuer die Indizes wird fuer jede Seite ein Eintrag der Form iMpage-nnn
% angelegt. Damit sind doppelte Verweise auf derselben Seite fuer
% makeindex erkennbar und fliegen heraus. Ausserdem werden weniger
% HyperTeX-Knoten angelegt. Die Routine wird nebenbei auch noch
% fuer das Inhaltsverzeichnis verwendet.
%
%% Alles, was in EveryShipout ``einfach so'' drinsteht, wird in die
%% Liste der noch zu bearbeitenden Sachen eingefügt, also auf der
%% nächsten Seite mitbearbeitet.
\AtBeginDocument{%
        \xdef\iMidx@entry{iMpage-\@arabic\count1}%
        \hyper@anchorstart{\iMidx@entry}\hyper@anchorend
}
\newtoks\M@startof@page
\EveryShipout{%
        \setbox255=\vbox{%
          \hyper@anchorstart{\iMidx@entry}\hyper@anchorend
          \the\M@startof@page
          \box255
        }%
        \xdef\iMidx@entry{iMpage-\@arabic\count1}%
}
%
\DeclareOption{autobutton}{\M@autobutton}
\ProcessOptions
\let\M@contprompt\relax

% 15.6.2000:
% Hilfeseiten zu Datentypen fehlen noch, die entsprechenden Verweise
% werden ins Tutorium umgebogen.  Der Mechanismus könnte generell
% verwendet werden.

\@namedef{M@href@DOM_ARRAY}{tutorium,KapObjekteFelder}
\@namedef{M@href@DOM_BOOL}{tutorium,KapObjekteLogisch}
\@namedef{M@href@DOM_COMPLEX}{tutorium,KapErsteSchritteZahlenKomplex}
\@namedef{M@href@DOM_DOMAIN}{datatypes,DOM_DOMAIN}
%\@namedef{M@href@DOM_EXEC}{datatypes,DOM_EXEC}
\@namedef{M@href@DOM_EXPR}{tutorium,KapObjekteAusdruecke}
\@namedef{M@href@DOM_FAIL}{tutorium,KapObjekteNull}
\@namedef{M@href@DOM_FLOAT}{tutorium,KapErsteSchritteZahlenNumerisch}
\@namedef{M@href@DOM_FUNC_ENV}{tutorium,KapProzedurenFunktionsumgebungen}
\@namedef{M@href@DOM_IDENT}{tutorium,KapObjekteBezeichner}
\@namedef{M@href@DOM_INT}{tutorium,KapObjekteZahlen}
\@namedef{M@href@DOM_INTERVAL}{datatypes,DOM_INTERVAL}
\@namedef{M@href@DOM_LIST}{tutorium,KapObjekteListen}
\@namedef{M@href@DOM_NIL}{tutorium,KapObjekteNull}
\@namedef{M@href@DOM_NULL}{tutorium,KapObjekteNull}
\@namedef{M@href@DOM_POINT}{stdlib,point}
\@namedef{M@href@DOM_POLY}{tutorium,KapObjektePolynome}
\@namedef{M@href@DOM_POLYGON}{stdlib,polygon}
\@namedef{M@href@DOM_PROC}{tutorium,KapProzeduren}
\@namedef{M@href@DOM_PROC_ENV}{datatypes,DOM_PROC_ENV}
\@namedef{M@href@DOM_RAT}{tutorium,KapObjekteZahlen}
\@namedef{M@href@DOM_SET}{tutorium,KapObjekteMengen}
\@namedef{M@href@DOM_STRING}{tutorium,KapObjekteZeichenketten}
\@namedef{M@href@DOM_TABLE}{tutorium,KapObjekteTabellen}
\@namedef{M@href@DOM_VAR}{tutorium,KapProzedurenLokalGlobal}
\@namedef{M@href@Factored}{datatypes,Factored}
\@namedef{M@href@Series::Puiseux}{datatypes,Series::Puiseux}
\@namedef{M@href@Series::Puiseux::contfrac}{datatypes,Series::Puiseux}
\@namedef{M@href@Series::gseries}{datatypes,Series::gseries}
%\@namedef{M@href@domain}{domainref,domain}
\@namedef{M@href@domain}{stdlib,glossary}
\@namedef{M@href@axiom}{domainref,axiom}
\@namedef{M@href@category}{domainref,category}
\@namedef{M@href@adt}{adt,firstpage}
\@namedef{M@href@combinat}{combinat,firstpage}
\@namedef{M@href@detools}{detools,firstpage}
\@namedef{M@href@Ax}{Ax,firstpage}
\@namedef{M@href@Cat}{Cat,firstpage}
\@namedef{M@href@Dom}{Dom,firstpage}
\@namedef{M@href@fp}{fp,firstpage}
\@namedef{M@href@generate}{generate,firstpage}
\@namedef{M@href@groebner}{groebner,firstpage}
\@namedef{M@href@Graph}{Graph,firstpage}
\@namedef{M@href@import}{import,firstpage}
\@namedef{M@href@intlib}{intlib,firstpage}
\@namedef{M@href@linalg}{linalg,firstpage}
\@namedef{M@href@linopt}{linopt,firstpage}
\@namedef{M@href@listlib}{listlib,firstpage}
\@namedef{M@href@matchlib}{matchlib,firstpage}
\@namedef{M@href@misc}{misc,firstpage}
\@namedef{M@href@module}{module,firstpage}
\@namedef{M@href@Network}{Network,firstpage}
\@namedef{M@href@numeric}{numeric,firstpage}
\@namedef{M@href@numlib}{numlib,firstpage}
%%% Diese Zeile muss raus, da ode in stdlib (5.10.00 tonner)
%%% \@namedef{M@href@ode}{ode,firstpage}
\@namedef{M@href@orthpoly}{orthpoly,firstpage}
\@namedef{M@href@output}{output,firstpage}
%\@namedef{M@href@plot}{plot,firstpage}
\@namedef{M@href@polylib}{polylib,firstpage}
\@namedef{M@href@Pref}{Pref,firstpage}
\@namedef{M@href@prog}{prog,firstpage}
\@namedef{M@href@property}{property,firstpage}
\@namedef{M@href@solvelib}{solvelib,firstpage}
\@namedef{M@href@stats}{stats,firstpage}
\@namedef{M@href@scilab}{scilab,firstpage}
\@namedef{M@href@stdlib}{stdlib,firstpage}
\@namedef{M@href@stringlib}{stringlib,firstpage}
\@namedef{M@href@student}{student,firstpage}
\@namedef{M@href@transform}{transform,firstpage}
\@namedef{M@href@Type}{Type,firstpage}
