%%% { BRACE MATCHING HACK %-------------------------------------------------------------------------- % Created by T.Birnthaler (FAU Erlangen-Nuernberg, IMMD5 (Mustererkennung)) %-------------------------------------------------------------------------- \message{Document Style Option `regel' Version 1.0, as of 30. November 1989} % % Befehle zum Erzeugen von Regeln % (werden zusammen mit den Formeln durchnumeriert): % % Erzeugung: % \begin{regel} \begin{regel*} % Anweisungen bzw. Anweisungen % \end{regel} \end{regel*} % % % Anweisung: % \IF{Bedingung1 \AND Bedingung2 \AND ... \AND BedingungN}[,.;] % \THEN{Folgerung1 \OR Folgerung2 \OR ... \OR FolgerungM}[,.;] % \label{...} % \nonumber % % Masse: (Bedeutung: Defaultwert) % \aboveruleskip (Abstand zu vorhergeh. abgetr. Absatz: 1.5ex) % \belowruleskip (Abstand zu nachfolg. abgetr. Absatz: 1.5ex) % \aboveruleshortskip (Abstand zu vorhergeh. angrenz. Absatz: 0.5ex) % \belowruleshortskip (Abstand zu nachfolg. angrenz. Absatz: 0.5ex) % \ruleleftindent (linke Einrueckung: 1cm) % \rulerightindent (rechte Einrueckung: 2cm) % \inruleskip (Abstand zw. zus.geh. IF- und THEN-Teil: 0pt) % \betweenruleskip (Abstand zw. zwei Regeln in derselben Umgebung: 1ex) % \rulehskip (Abstand zw. THEN,AND,OR und folg. Text: 1ex) % % Bedingung, Folgerung: % beliebiger Text mit TeX-Kommandos zum Zeilenumbruch, % Schriftartwechsel, ... % % Hinweise: % -- \label-Kommandos *duerfen nur* direkt vor dem abschliessenden % \end{regel}-Kommando von Regeln angegeben werden. % % -- Die regel*-Umgebung erzeugt *keine* Numerierung der Regel(n). % Alternativ kann auch in der regel-Umgebung die Numerierung % mit \nonumber unterdrueckt werden. % % -- nach dem Argument von \IF- oder \THEN-Anweisungen *darf optional* % eines der Satzzeichen ,;. folgen, das dann im Text nach dem % Argumenttext und der abschliessenden rechten Klammer erscheint. % % -- Die Masse *koennen* durch Zuweisung einer beliebigen Laenge mit dem % Kommando % \setlength{\mass}{laenge} % % nach Geschmack veraendert werden. % % -- Leerzeichen am Anfang einer Zeile werden von TeX bis zum ersten % echten Zeichen *nicht* beachtet (d.h Einruecken ist erlaubt). %----------------------------------------------------------------------- % interne Boxen \newbox\rule@then@box \newbox\rule@if@box \newbox\rule@and@box \newbox\rule@or@box \newbox\rule@regel@box % Masse \newdimen\aboveruleskip \newdimen\belowruleskip \newdimen\aboveruleshortskip \newdimen\belowruleshortskip \newdimen\ruleleftindent \newdimen\rulerightindent \newdimen\inruleskip \newdimen\betweenruleskip \newdimen\rulehskip \newdimen\rule@depth %%% intern verwendet % Defaultwerte fuer Masse \aboveruleskip = 1.5ex \belowruleskip = 1.5ex \aboveruleshortskip = 0.5ex \belowruleshortskip = 0.5ex \ruleleftindent = 1cm \rulerightindent = 2cm \inruleskip = 0pt \betweenruleskip = 1ex \rulehskip = 1ex % fuer Folgen von Regeln \newif\if@firstrule \@firstruletrue % Alternative regel*-Umgebung, *un*numeriert \@namedef{regel*}{\regel} \@namedef{endregel*}{\nonumber\endregel} % Normale regel-Umgebung, numeriert \def\regel{% % % Abstand zum vorhergehenden Text bestimmen \ifhmode \ifinner \errmessage{regel-Umgebung in \string\hbox nicht erlaubt}% \else %%% \message{ regel: hmode->aboveshort}% \vskip\aboveruleshortskip \fi \else \ifvmode \if@firstrule %%% \message{ regel: vmode,firsttrue->above}% \ifdim \lastskip < \aboveruleskip \vskip -\lastskip \vskip\aboveruleskip \fi \else %%% \message{ regel: vmode,firstfalse->between}% \@restorepar \everypar{}% \ifdim \lastskip < \betweenruleskip \vskip -\lastskip \vskip\betweenruleskip \fi \fi \else \errmessage{regel-Umgebung in math-mode nicht erlaubt}% \fi \fi % % Gleichungsnummer aktualisieren \stepcounter{equation}% \let\@currentlabel=\theequation \global\@eqnswtrue % % hier wegen Schriftgroesse \setbox\rule@then@box=\hbox{THEN\hskip\rulehskip(}% left parentheses \setbox\rule@if@box=\hbox to \wd\rule@then@box{IF\hfill(}% left parentheses \setbox\rule@and@box=\hbox{AND\hskip\rulehskip}% \setbox\rule@or@box=\hbox{OR\hskip\rulehskip}% % % Kommandos nur lokal erlauben \def\IF{\RULE@IF}% \def\THEN{\RULE@THEN}% \def\OR{\RULE@OR}% \def\AND{\RULE@AND}% % % Regelkoerper setzen \setbox\rule@regel@box\vtop\bgroup % begin of vtop \advance\hsize by -\ruleleftindent \advance\hsize by -\rulerightindent \@parboxrestore } \def\endregel{% \egroup % end of vtop % % Regelhoehe bestimmen \rule@depth=\ht\rule@regel@box \advance\rule@depth by \dp\rule@regel@box \advance\rule@depth by -\dp\strutbox % % Regelkoerper mit Raendern und Regelnummer plazieren \hbox{% \hskip\ruleleftindent \box\rule@regel@box \hskip\rulerightindent % \vtop to \rule@depth {% \hbox{\strut}% \vss \if@eqnsw % Regelnummer ausgeben ? \llap{\@eqnnum}% \else \global\advance\c@equation\m@ne \fi }% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% tricky, tricky, ... %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Abstand zum nachfolgenden Text bestimmen \def\@doendpe{% % \@firstrulefalse \@ignoretrue % \def\par{% %%% \message{ *tmp par}% \@restorepar \everypar{}% \vskip\belowruleskip \@firstruletrue \@endpefalse }% % \everypar={% %%% \message{ *tmp everypar}% \@restorepar \everypar{}% \setbox0=\lastbox %%% anstatt \unskip !!! \vskip\belowruleshortskip \noindent \@firstruletrue \@endpefalse }% }% % \@endpetrue %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% ... tricky, tricky. %%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% } % \IF mit optionalem Satzzeichen [,;.] % \long\def\RULE@IF#1{% \@ifnextchar,{\RULE@@IF{#1}}{% \@ifnextchar;{\RULE@@IF{#1}}{% \@ifnextchar.{\RULE@@IF{#1}}{\RULE@@IF{#1}{}}% }}} \long\def\RULE@@IF#1#2{% \hbox to \hsize{% \copy\rule@if@box \vtop{% \advance\hsize by -\wd\rule@then@box \vtop\bgroup % begin of first vtop \noindent\strut\ignorespaces #1\unskip\strut)#2% right parentheses \egroup % end of last vtop }% }% \vskip\inruleskip \ignorespaces } % \THEN mit optionalem Satzzeichen [,;.] % \long\def\RULE@THEN#1{% \@ifnextchar,{\RULE@@THEN{#1}}{% \@ifnextchar;{\RULE@@THEN{#1}}{% \@ifnextchar.{\RULE@@THEN{#1}}{\RULE@@THEN{#1}{}}% }}} \long\def\RULE@@THEN#1#2{% \hbox to \hsize{% \copy\rule@then@box \vtop{% \advance\hsize by -\wd\rule@then@box \vtop\bgroup % begin of first vtop \noindent\strut\ignorespaces #1\unskip\strut)#2% right parentheses \egroup % end of last vtop }% }% \ignorespaces } \def\RULE@AND{% \unskip\strut \egroup % end of previous vtop \vtop\bgroup % begin of next vtop \noindent\copy\rule@and@box\strut % AND keyword } \def\RULE@OR{% \unskip\strut \egroup % end of previous vtop \vtop\bgroup % begin of next vtop \noindent\copy\rule@or@box\strut % OR keyword } %%% } BRACE MATCHING HACK