% $Date: 2004/10/04 17:25:17 $  $Author: nthiery $  $Revision: 1.1.1.2 $ 

% mupadman.sty 5-Mar-92
% Style for MuPAD-Manualpages by Karsten Morisse
% Last change: 15-July-93

% Changed for compatibility with `Mhelp.sty': 
%       1-Mar-96 (roehrig)

%
% \documentstyle[...hypertex,..,mupad,..,mupadman,..]{}
%
% Style fuer die Manualseiten des MuPAD-Handbuches
% Definiert sind die folgenden Macros:
%       \mupfunction
%       \mupmanfield
%       \mupsummary
%       \mupexample
%       \mupseealso
%
% Weiterhin gibt es die folgenden Abk"urzungen, die in Abh"angigkeit von
% \ifenglisch entweder deutschen oder englischen Text erzeugen.
%       \mfunc  -> Function, Funktion
%       \mcalseq -> Calling sequence, Aufruf
%       \merror -> Possible errors, M"ogliche Fehler
%
%
% 1. \mupfunction
% \mupfunction erwartet 4 Parameter:
%       #1 : Typ der Manualseite (z.B. Function). Der hier uebergebene Parameter
%            erscheint auch als Name auf der Manualseite.
%       #2 : Name der beschriebenen Funktion o.a. 
%       #3 : kurze Beschreibung der Funktion
%       #4 : Name f"ur interne HyTeX-Label
% Mit dem Aufruf von \mupfunction wird automatisch das nodelabel `help-#4` gesetzt.
% Ausserdem werden zwei nodepageref-Aufrufe ausgefuehrt. Und zwar
%       \nodepageref{manual-#4}{Detailed Information}
%       \nodepageref{help-index}{Index}
%
% ACHTUNG:
% \mupfunction muss f"ur jede Manualseite genau einmal aufgerufen werden.
% Wird \mupfunction mit leeren Parametern aufgerufen, so liefert das einen Fehler.
%
% Als Abk"urzung f"ur \mupfunction gibt es die Makros:
%       \mupsysvar
%       \mupsysfunc
% Beide erwarten jeweils 3 Paramter. Diese Parameter entsprechen den Parametern
% #2,#3,#4 von \mupfunction. \mupsysvar dient f"ur eine Helpseite "uber eine
% Systemvariable. \mupsysfunc ist f"ur eine Helpseite "uber eine Funktion gedacht.
% Bei beiden erfolgt ein hierarchischer Eintrag in den Index. Bei \mupsysvar unter
% dem Wort "Systemvariablen", bei \mupsysfunc unter "Funktionen".
%
%
% 2. \mupmanfield
% \mupmanfield erwartet 2 Parameter:
%       #1 : Name des 'Manualitems', z.B. Calling sequence oder Parameter. Der hier
%            uebergebene Parameter erscheint auch als Name auf der Manualseite.
%       #2 : Der Text, der unter dem ersten Parameter auf der Manualseite erscheinen
%            soll.
%
% Der Aufruf \mupmanfield{}{} wird ignoriert, liefert aber eine Warnung.
%
%
% 3. \mupsummary
% \mupsummary ist f"ur die Beschreibung der Funktion (o.a.) gedacht. Das Makro erwartet
% als einzigen Parameter einen Text, der in einer einfachen Liste ausgegeben wird. 
% Ist \englischtrue, so wird als "Uberschrift 'Zusammenfassung' ausgegeben. Andernfalls
% erscheint die Ausgabe 'Summary'.
%
% Der Aufruf \mupsummary{} wird ignoriert, liefert aber eine Warnung.
% ACHTUNG:
%
%
% 4. \mupexample
% Zur Darstellung eines Beispiels ist das Macro \mupexample gedacht. Es erwartet 3 
% Parameter:
%       #1 : die MuPAD Beispieleingabe
%       #2 : das aus der Eingabe resultierende Ergebnis
%       #3 : eine Datei (auf UNIX Ebene), die bei Aktivierung des Beispiels 
%            ausgef"uhrt werden soll. 
% F"ur jede Manualseite darf \mupexample zur Darstellung eines Beispiels beliebig oft 
% aufgerufen werden. Es erscheint auf der Manualseite jedoch nur einmal das Schl"ussel-
% wort 'Examples'.
% Man hat mehrere M"oglichkeiten, um Beispiele anzugeben.
% (1) Alle drei Parameter sind nichtleer.
%     In diesem Fall wird 'Call #<nr>' (maussensitiv), die Ein- und Ausgabe ausgegeben.
% (2) Nur der dritte Parameter ist leer.
%     Mit diesem Fall kann man mehrzeilige Beispiele darstellen, die pro Eingabezeile
%     auch eine Ausgabe erzeugen. 
% (3) Nur der erste Parameter ist nichtleer.
%     Darstellung mehrzeiliger Eingaben, die nicht pro Eingabezeile eine Ausgabe erzeugen.
% (4) Nur der zweite Parameter ist nichtleer.
%     Darstellung mehrzeiliger Ausgaben
%
% Ist der dritte Parameter leer, so wird der interne \@examplecounter nicht erh"oht.
% Ist \englischtrue, so wird als "Uberschrift 'Beispiele' ausgegeben. Andernfalls 
% erscheint die Ausgabe 'Examples'.
%
% Der Aufruf \mupexample{}{}{} wird ignoriert, liefert aber eine Warnung.
%
%
% 5. \mupseealso
% \mupseealso dient zur Erstellung einer Liste mit Verweisen auf die Help-Seiten 
% "ahnliche Funktionen. Das Macro wird aufgerufen mit einer in () eingeschlossenen 
% beliebig langen Liste von  Namen. F"ur jeden Namen <name> in der Liste erfolgt 
% ein '\hhbf'-Aufruf mit dem Label 'help-<name>'.
% Ist \englischtrue, so wird als "Uberschrift 'Siehe auch' ausgegeben. Andernfalls 
% erscheint die Ausgabe 'See also'.
%
% ACHTUNG: \mupseealso muss als letztes Macro auf einer Manualseite aufgerufen werden. 
%          Sollen keine Querverweise eingetragen werden, so ist \mupseealso() aufzurufen. 
%
% Der Aufruf \mupseealso() wird ignoriert, liefert aber eine Warnung.
%
%
% ACHTUNG:
% Jede Help Seite muss mit \mupfunction beginnen, da in diesem Macro einige wichtige
% Zaehler und Sprungverweise fuer HyperTeX gesetzt werden.
% Das Macor \mupseealso sollte am Ende einer Help Seite aufgerufen werden. Dieses Macro
% beinhaltet ein \hyperpagebreak.

\typeout{MuPAD Manualpage Style <5 Mar 92>}

\makeatletter

\newcount\@examplecounter
\newcount\@bspcnt
\newif\if@moreseealso
\newdimen\@myindent
\@myindent=\parindent
\newdimen\@mytextwidth
\@mytextwidth=\textwidth
\advance\@mytextwidth by -1\@myindent
\newdimen\@mytwidth
\@mytwidth=\textwidth
\advance\@mytwidth by -20mm

\iflanguage{german}{%
\newcommand{\mfunc}{Funktion}
\newcommand{\mcalseq}{Aufruf}
\newcommand{\merror}{M\"ogliche Fehler}
\newcommand{\movload}{Uberladbare Operanden}
}{
\newcommand{\mfunc}{Function}
\newcommand{\mcalseq}{Calling sequence}
\newcommand{\merror}{Possible errors}
\newcommand{\movload}{Overloading}
}

\def\mupup{\vspace*{-1.8 em}}                   % nach der ersten Zeile noetig
\def\mupblank{\,\,\,}                           % Blank
\def\muptab{\mupblank\mupblank\mupblank}        % Einrueckung



%
% Die folgenden Zeichen m"ussen im 1. Parameter von \mupexample verwendet werden.
%
\chardef\mupdol="24             % Dollarzeichen $ 
\chardef\muphat="5E             % ^
\chardef\mupsetl="7B            % {
\chardef\mupsetr="7D            % }
\chardef\mupbsl="5C             % \
\chardef\mupqmk="3F             % ?
\chardef\mupstar="2A            % *

\chardef\munderbar="5F          % Unterstrich _
\chardef\mupttgt="3E            % >
\chardef\mupttlt="3C            % <

\def\mupunderbar{{\tt\munderbar}}

\def\_{\mupunderbar}
% Hier die Originaldefinition
%\def\_{\leavevmode\kern.06em \vbox{\hrule width0.3em}}

%
% Automatische Erzeugung der MuPAD-Beispiel-Dateien
%

\newif\ifexampleout     
% Durch Setzen von \exampleouttrue oder \exampleoutfalse kann der Benutzer in 
% seinem Dokument die Ausgabe der Beispiele steuern.

\newwrite\@OUTPUT
% Reservierung eines Ausgabekanals

\newcommand\Mbsppath{BSP/}
\newcommand\Mbspfile{\jobname.bsp}
% Default-Verzeichnis f"ur die Beispieldateien. Dieses kann vom Benutzer
% mittels \renewcommand{\Mbsppath}{<neues Verzeichnis>} umdefiniert werden.

\def\@bspfile{Dummy}


%
% Erstellung zweier Listen der verf"ugbaren Help-Dateien
% Die erste Liste verweist auch auf Eintr"age innerhalb des Textes,
% die zweite nur auf echte Help-Seiten. Letztere ist wichtig f"ur
% die terminal-Version.
%
\newif\if@helpindex
\newif\if@helpindextty

%
% "Offnen der Help-Index-Datei
% Muss vor dem ersten Aufruf von \muphelp benutzt werden.
%
\def\mupstarthelp{
\newwrite\@HELPOUT
\immediate\openout\@HELPOUT=\jobname.help\relax%
\@helpindextrue
}

%
% Schliessen der Help-Index-Datei
%
\def\mupendhelp{\immediate\closeout\@HELPOUT}


%
% "Offnen der Help-Index-Datei f"ur die Terminal Version
% Muss genau vor der ersten Help-Seite benutzt werden.
%
\def\mupstarthelptty{
\newwrite\@HELPTTYOUT
\immediate\openout\@HELPTTYOUT=\jobname.helptty\relax%
\@helpindexttytrue
}

%
% Schliessen der Help-Index-Datei f"ur die Terminal Version
%
\def\mupendhelptty{\immediate\closeout\@HELPTTYOUT}

%
% Aufnahme eines Eintrages in die Help-Index-Datei
%
\newif\if@mmuphelp

\def\muphelp#1{%        
        \def\ne{#1}%
        \ifx\ne\empty%
        \else%
                %\ifhypermode\subnode{help-#1}\fi
                \ifhypermode\subnode{#1}\fi
                \if@helpindex\immediate\write\@HELPOUT{#1 #1}\fi
                \if@helpindextty\immediate\write\@HELPTTYOUT{#1 \Mfilename}\fi
        \fi
}

\def\mupalias#1#2{%     
        \def\ne{#1}%
        \def\nz{#2}%
        \ifx\ne\empty%
        \else%
             \ifx\nz\empty%
             \else%
                   \if@helpindex\immediate\write\@HELPOUT{#1 #2}\fi
                   \if@helpindextty\immediate\write\@HELPTTYOUT{#1 \Mfilename}\fi
                 \fi
        \fi
}


\def\mupfunction#1#2#3#4{
        \def\ne{#1#2#3#4}
        \def\nez{#2}
        \errhelp{Calling mupfunction with empty arguments is not allowed !}
        \ifx\ne\empty\errmessage{mupadman: Error in mupfunction on page \thepage \space}
        \else
        \def\@Mhelpname{#4}
        % Setzen der fuer HyTeX noetigen Labels
        \muphelp{#4}%
        \Idx{#4@{\Mout #4}}
        \Idx{\Mupsystemfunc,#4@{\Mout #4}}
        \ifhypermode\markright{{\Mout #1}}\fi
        \ifx\nez\empty\else\addcontentsline{toc}{subsection}{{\Mout #2}}\fi
        {\vskip 1ex\noindent\large\bf \hspace*{-4ex}\rule{1.5ex}{1.5ex}%
        \hspace*{2.5ex}%
        \ifx\nez\empty\hspace*{\parindent}\parbox[t]{\@mytextwidth}{#3}%
        \else\hspace*{\parindent}\parbox[t]{\@mytextwidth}{{\Mout #2} -- #3}%
        \fi}
        %Nachfolgende Leerzeile darf nicht fehlen

        \@examplecounter=0 
        \@bspcnt=1 
        \fi
}

\def\mupfunctionspec#1#2#3#4{
        % Wie mupfunction, es erfolgt jedoch kein Eintrag des vierten
        % Parameters in den Index
        \def\ne{#1#2#3#4}
        \def\nez{#2}
        \errhelp{Calling mupfunction with empty arguments is not allowed !}
        \ifx\ne\empty\errmessage{mupadman: Error in mupfunction on page \thepage \space}
        \else
        \def\@Mhelpname{#4}
        % Setzen der fuer HyTeX noetigen Labels
        \muphelp{#4}%
        \ifhypermode\markright{{\Mout #1}}\fi
        \ifx\nez\empty\else\addcontentsline{toc}{subsection}{{\Mout #2}}\fi
        {\vskip 1.5ex\noindent\large\bf \hspace*{-4ex}\rule{1.5ex}{1.5ex}%
        \hspace*{2.5ex}%
        \ifx\nez\empty\hspace*{\parindent}\parbox[t]{\@mytextwidth}{#3}%
        \else\hspace*{\parindent}\parbox[t]{\@mytextwidth}{{\Mout #2} -- #3}%
        \fi}
        %Nachfolgende Leerzeile darf nicht fehlen

        \@examplecounter=0 
        \@bspcnt=1 
        \fi
}

\def\mupsysvar#1#2#3{
        \def\ne{#1#2#3}
        \def\nez{#2}
        \errhelp{Calling mupsysvar with empty arguments is not allowed !}
        \ifx\ne\empty\errmessage{mupadman: Error in mupsysvar on page \thepage \space}
        \else
        \def\@Mhelpname{#3}
        % Setzen der fuer HyTeX noetigen Labels
        \muphelp{#3}
        \Idx{#3@{\Mout #3}}
        \Idx{\Mupenvvar,#3@{\Mout #3}}
        \ifhypermode\markright{{\Mout #1}}\fi
        \ifx\nez\empty\else\addcontentsline{toc}{subsection}{{\Mout #1}}\fi
        {\vskip 1.5ex\noindent\large\bf \hspace*{-4ex}\rule{1.5ex}{1.5ex}%
        \hspace*{2.5ex}%
        \ifx\nez\empty\hspace*{\parindent}\parbox[t]{\@mytextwidth}{#2}%
        \else\hspace*{\parindent}\parbox[t]{\@mytextwidth}{{\Mout #1} -- #2}%
        \fi}
        %Nachfolgende Leerzeile darf nicht fehlen

        \@examplecounter=0 
        \@bspcnt=1 
        \fi
}

\def\mupsysvarspec#1#2#3#4{
        % Kommentar: siehe \mupsysfuncspec
        \def\ne{#1#2#3#4}
        \def\nez{#2}
        \def\nev{#4}
        \errhelp{Calling mupsysvar with empty arguments is not allowed !}
        \ifx\ne\empty\errmessage{mupadman: Error in mupsysvar on page \thepage \space}
        \else
        \def\@Mhelpname{#3}
        % Setzen der fuer HyTeX noetigen Labels
        \muphelp{#3}%
        \ifhypermode\markright{{\Mout #1}}\fi
        \ifx\nev\empty\typeout{Warning: mupsysvarspec no fourth parameter specified}
        \else   
                \Idx{#4@{\Mout #4}}
                \Idx{\Mupenvvar,#4@{\Mout #4}}
        \fi
        \ifx\nez\empty\else\addcontentsline{toc}{subsection}{{\Mout #1}}\fi
        {\vskip 1.5ex\noindent\large\bf \hspace*{-4ex}\rule{1.5ex}{1.5ex}%
        \hspace*{2.5ex}%
        \ifx\nez\empty\hspace*{\parindent}\parbox[t]{\@mytextwidth}{#2}%
        \else\hspace*{\parindent}\parbox[t]{\@mytextwidth}{{\Mout #1} -- #2}%
        \fi}
        %Nachfolgende Leerzeile darf nicht fehlen

        \@examplecounter=0 
        \@bspcnt=1 
        \fi
}


\def\mupsysfunc#1#2#3{
        \def\ne{#1#2#3}
        \def\nez{#1}
        \errhelp{Calling mupsysfunc with empty arguments is not allowed !}
        \ifx\ne\empty\errmessage{mupadman: Error in mupsysfunc on page \thepage \space}
        \else
        \def\@Mhelpname{#3}
        % Setzen der fuer HyTeX noetigen Labels
        \muphelp{#3}%
        \Idx{#3@{\Mout #3}}
        \Idx{\Mupsystemfunc,#3@{\Mout #3}}
        \ifhypermode\markright{{\Mout #1}}\fi
        \ifx\nez\empty\else\addcontentsline{toc}{subsection}{{\Mout #1}}\fi
        {\vskip 1.5ex\noindent\large\bf \hspace*{-4ex}\rule{1.5ex}{1.5ex}%
        \hspace*{2.5ex}%
        \ifx\nez\empty\hspace*{\parindent}\parbox[t]{\@mytextwidth}{#2}%
        \else\hspace*{\parindent}\parbox[t]{\@mytextwidth}{{\Mout #1} -- #2}%
        \fi}
        %Nachfolgende Leerzeile darf nicht fehlen

        \@examplecounter=0 
        \@bspcnt=1 
        \fi
}

\def\mupsysfuncspec#1#2#3#4{
        % Spezielle Version von \mupsysfunc
        % In diesem Makro wird der dritte Parameter gleichzeitig als HyTeX-Sprungmarke
        % und als Indexeintrag verwendet. Dies macht Probleme, wenn die Funktion ein 
        % Underline (_) im Namen enth"alt. Hierf"ur ist diese spezielle Version gedacht.
        % Der dritte Parameter wird als Sprungmarke benutzt, der vierte als Indexeintrag.
        \def\ne{#1#2#3#4}
        \def\nez{#1}
        \def\nev{#4}
        \errhelp{Calling mupsysfunc with empty arguments is not allowed !}
        \ifx\ne\empty\errmessage{mupadman: Error in mupsysfunc on page \thepage \space}
        \else
        \def\@Mhelpname{#3}
        % Setzen der fuer HyTeX noetigen Labels
        \muphelp{#3}%
        \ifhypermode\markright{{\Mout #1}}\fi
        \ifx\nev\empty\typeout{Warning: mupsysfuncspec no fourth parameter specified}
        \else
                \Idx{#4@{\Mout #4}}
                \Idx{\Mupsystemfunc,#4@{\Mout #4}}
        \fi
        \ifx\nez\empty\else\addcontentsline{toc}{subsection}{{\Mout #1}}\fi
        {\vskip 1.5ex\noindent\large\bf \hspace*{-4ex}\rule{1.5ex}{1.5ex}%
        \hspace*{2.5ex}%
        \ifx\nez\empty\hspace*{\parindent}\parbox[t]{\@mytextwidth}{#2}%
        \else\hspace*{\parindent}\parbox[t]{\@mytextwidth}{{\Mout #1} -- #2}%
        \fi}
        %Nachfolgende Leerzeile darf nicht fehlen

        \@examplecounter=0 
        \@bspcnt=1 
        \fi
}

\def\mupoverload#1{
        {\vskip 1.5ex\large\bf {\movload}:\nopagebreak\vskip 0ex\nopagebreak}\noindent
        \begin{list}{}%
        {\rightmargin0pt\leftmargin\rightmargin\topsep0.0ex\parsep\parskip}%
        \item[]#1\end{list}
}



\def\mupmanfield#1#2{
        \def\ne{#1#2}
        \ifx\ne\empty\typeout{Warning: mupmanfield on page \thepage \space ignored}
        \else
                {\vskip 1.5ex\noindent\large\bf {#1}:\nopagebreak\vskip 0ex\nopagebreak}\noindent
                \begin{list}{}%
                {\rightmargin0pt\leftmargin\rightmargin\topsep0.0ex\parsep\parskip}%
                \item[]#2\end{list}
        \fi  %  Leerzeile darf nicht fehlen

}

\def\mupexample#1#2#3{
        \def\nea{#1#2#3}%
        \def\nee{#1}%
        \def\nez{#2}%
        \def\ned{#3}%
        \ifx\nee\empty\else\ifx\ned\empty\else
                \ifexampleout\immediate\closeout\@OUTPUT\fi
                \advance\@examplecounter+1
                \gdef\@bspfile{\Mbsppath\@Mhelpname-\the\@examplecounter.bsp}
                \ifexampleout\immediate\openout\@OUTPUT=\@bspfile\relax\fi
        \fi\fi
        \ifx\nea\empty\typeout{Warning: mupexample on page \thepage \space ignored}
        \else
            \ifnum\@bspcnt=1 
                \iflanguage{german}{%
                   {\vskip 1.5ex\noindent\large\bf Beispiele:}\nopagebreak\noindent%
                   }{%
                   {\vskip 1.5ex\noindent\large\bf Examples:}\nopagebreak\noindent%
                   }%
            \fi
                \ifx\nee\empty%         % Erster Parameter leer ?
                    \ifx\nez\empty%     % Zweiter Parameter leer ?
                        \errhelp{mupexample was called with empty first and second argument.}%
                        \errmessage{mupadman: Error in mupexample on page \thepage}%
                        \errorstopmode
                    \else               % Zweiter Parameter nicht leer, dritter wird ignoriert 
                        \noindent\centerline{{\Mout #2}}
                    \fi
                \else                   % Erster Parameter nicht leer
                    \ifexampleout       % Erzeugung der Beispieldatei
                        \immediate\write\@OUTPUT{#1}\relax%
                    \fi
                    \vskip 1ex\noindent
                    \ifx\ned\empty      % Dritter Parameter leer ?
                        \noindent\hspace*{\parindent}%
                        \ifhypermode\hspace*{22.0mm}
                        \else\hspace*{18.5mm}
                        \fi
                        \noindent%
                        {{\Mout #1}}\nopagebreak\\\nopagebreak
                        \ifx\nez\empty\vskip -4ex % Nur erster Parameter ist nichtleer
                        \else\nopagebreak\vskip 1ex\nopagebreak\centerline{{\Mout #2}}
                        \fi
                    \else%              % Dritter Parameter nicht leer
                        \vskip 1ex\noindent     % Abstand zwischen Call-Aufrufen
                        \hspace*{\parindent}%
                        \hhbf{?\@bspfile}{Call \#\the\@examplecounter}:
                        \hspace*{5.0mm}{{\Mout #1}}\nopagebreak\\\nopagebreak
                        \ifx\nez\empty\else\nopagebreak\vskip 1ex\nopagebreak\centerline{{\Mout #2}}\fi
                        \advance\@bspcnt+1
                    \fi
                \fi
        \fi  %  Leerzeile darf nicht fehlen

}


\long\def\mupsummary#1{
        \def\ne{#1}
        \ifx\ne\empty\typeout{Warning: mupsummary on page \thepage \space ignored}
        \else
                \iflanguage{german}{%
                {\vskip 1.5ex\noindent\large\bf Zusammenfassung:}\nopagebreak
                 }{%
                {\vskip 1.5ex\noindent\large\bf Summary:}\nopagebreak
                }
        \begin{list}{}{\rightmargin0pt\leftmargin\rightmargin\topsep0.0ex\parsep\parskip}\item[]#1\end{list}
        \fi

}

\def\mupseealso(#1){%
        \ifexampleout\immediate\closeout\@OUTPUT\relax\fi
        \def\ne{#1}
        \ifx\ne\empty\typeout{Warning: mupseealso on page \thepage \space ignored}
        \else
                \def\mmupseealso##1{\def\arguments{##1,\end}%
                        \@moreseealsotrue
                        \loop\expandafter\nextseealso\arguments\if@moreseealso\repeat}
                \def\nextseealso##1,##2\end{\def\next{##2}%
                        %\ifx\next\empty\@moreseealsofalse\hhbf{help-##1}{\Mupold{##1}}
                        \ifx\next\empty\@moreseealsofalse\hhbf{##1}{\Mupold{##1}}
                        %\else\def\arguments{##2\end}\hhbf{help-##1}{\Mupold{##1}}, \fi }
                        \else\def\arguments{##2\end}\hhbf{##1}{\Mupold{##1}}, \fi }
                \iflanguage{german}{%
                %{\vskip 1.5ex\noindent\large\bf Siehe auch:\nopagebreak\vskip 1ex}\nopagebreak
                {\vskip 1.5ex\noindent\large\bf Siehe auch:}%
                }{%
                %{\vskip 1.5ex\noindent\large\bf See also:\nopagebreak\vskip 1ex}\nopagebreak
                {\vskip 1.5ex\noindent\large\bf See also:}%
                }
                \ifhypermode
                        \noindent\hspace*{\parindent}\parbox[t]{\@mytwidth}{\mmupseealso{#1}}
                \else
                        \parbox[t]{\@mytwidth}{\mmupseealso{#1}}
                \fi
        \fi
        \nopagebreak\vskip -2ex\noindent\nopagebreak\hrule
        \hyperpagebreak
}

%
% In \mupseealso werden die eingetragenen Namen auch direkt als
% Sprungziele verwendet. Dies funktioniert jedoch nicht, wenn im
% Namen Sonderzeichen, wie z.B. \_ vorkommen. Um auch solche Namen
% korrekt bearbeiten zu k"onnen, gibt es \mupseealsospec.
% Hier muss jeder Eintrag doppelt vorkommen. Das erste Vorkommen
% erscheint im Text, das zweite Vorkommen wird als Marke verwendet.
% Beispiel: Um 
%       Siehe auch: args, built_in, nops
% zu erzeugen, muss man schreiben: 
%       \mupseealsospec(args,args,built\_in,built_in,nops,nops)
%
\def\mupseealsospec(#1){%
        \ifexampleout\immediate\closeout\@OUTPUT\relax\fi
        \def\ne{#1}
        \ifx\ne\empty\typeout{Warning: mupseealso on page \thepage \space ignored}        \else
                \def\mmupseealso##1{\def\arguments{##1,\end}%
                        \@moreseealsotrue
                        \loop\expandafter\nextseealso\arguments\if@moreseealso\repeat}
                \def\nextseealso##1,##2,##3\end{\def\next{##3}%
                        %\ifx\next\empty\@moreseealsofalse\hhbf{help-##2}{\Mupold{##1}}
                        \ifx\next\empty\@moreseealsofalse\hhbf{##2}{\Mupold{##1}}
                        %\else\def\arguments{##3\end}\hhbf{help-##2}{\Mupold{##1}}, \fi }
                        \else\def\arguments{##3\end}\hhbf{##2}{\Mupold{##1}}, \fi }
                \iflanguage{german}{%
                %{\vskip 1.5ex\noindent\large\bf Siehe auch:\nopagebreak\vskip 1ex}\nopagebreak
                {\vskip 1.5ex\noindent\large\bf Siehe auch:}%
                }{%
                %{\vskip 1.5ex\noindent\large\bf See also:\nopagebreak\vskip 1ex}\nopagebreak
                {\vskip 1.5ex\noindent\large\bf See also:}%
                }
                \ifhypermode
                        \noindent\hspace*{\parindent}\parbox[t]{\@mytwidth}{\mmupseealso{#1}}
                \else
                        \parbox[t]{\@mytwidth}{\mmupseealso{#1}}
                \fi
        \fi
        \nopagebreak\vskip -2ex\noindent\nopagebreak\hrule
        \hyperpagebreak
}

\makeatother
