% This file is part of the CTAN package named gfnotation.
%
% GFnotation.tex: typeset G. Frege's notation of the Begriffsschrift or
% the Grundgesetze der Arithmetik in plain TeX
%
% Copyright (C) 2015 Udo Wermuth (author)
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with this program. If not, see <http://www.gnu.org/licenses/>.
\message{[(GFnotation.tex) Version 2.9 --- 29.03.2015 10:45]}
% Werte für den Stil der Begriffsschrift
% die Weite eines \*-Makroteils (Voreinstellung 0.57 em)
\newdimen\gfbsvolleeinheit \gfbsvolleeinheit = 0.57 em
% die Höhe der horizontalen Striche (Voreinstellung 0.5 ex)
\newdimen\gfbsraise \gfbsraise = 0.5 ex
% die Höhe des Negationstriches (Voreinstellung 0.25 ex)
\newdimen\gfbsneg \gfbsneg = 0.25 ex
% die Dicke der horizontalen Striche (Voreinstellung 0.5 pt)
\newdimen\gfbsstrichdicke \gfbsstrichdicke = 0.5 pt
% die Dicke des Urteilsstrichs (Voreinstellung 0.1 em)
\newdimen\gfbsurteildicke \gfbsurteildicke = 0.1 em
% die Höhe (ohne Strichdicke) (Voreinstellung 1.5 ex)
\newdimen\gfbsuht \gfbsuht = 1.5 ex
% die Tiefe des Urteilsstrichs (Voreinstellung 0.5 ex)
\newdimen\gfbsudp \gfbsudp = 0.5 ex
% die Dicke des Ersetzungsstrichs (Voreinstellung 0.08 em)
\newdimen\gfbsersetzungdicke \gfbsersetzungdicke = 0.08 em
% die Dicke eines Definitionsstrichs (Voreinstellung 0.075 em)
\newdimen\gfbsdefdicke \gfbsdefdicke = 0.075 em
% der Abstand der Striche bei Schlussketten (Voreinstellung 2.5 pt)
\newdimen\gfbsschlussabstand \gfbsschlussabstand = 2.5 pt
% und die Dicke des dickeren Striches (Voreinstellung 0.8 pt)
\newdimen\gfbsschlussdicke \gfbsschlussdicke = 0.8 pt
% der Abstand in Schlussweisen zwischen Doppelpunkten
\newdimen\gfbsdpabstand \gfbsdpabstand = 0.2 em
% Werte für den Grundgesetzestil
% Einheitsstrichdicke (Voreinstellung 0.58 pt)
\newdimen\gfggstrichdicke \gfggstrichdicke = 0.58 pt
% Höhe des Inhaltsstriches (Voreinstellung 0.14 ex)
\newdimen\gfggraise \gfggraise = 0.14 ex
% Höhe Negationszeichen (Voreinstellung 0.47 ex)
\newdimen\gfggneg \gfggneg = 0.47 ex
% Höhe des Urteilsstriches (Voreinstellung 1.4 ex)
\newdimen\gfgguht \gfgguht = 1.4 ex
% Tiefe des Urteilstriches (Voreinstellung 0.9 ex)
\newdimen\gfggudp \gfggudp = 0.9 ex
% der Abstand in Schlussweisen zwischen Doppelpunkten
\newdimen\gfggdpabstand \gfggdpabstand = 0.06 em
% Prozentangabe für die Höhe eines kurzen Negationsstrichs
\newcount\gfbsnegpct \gfbsnegpct=70
% Die kompakte Notation benötigt für die Zeilen Register
\newcount\gfbsmaxanzahlzeilen \gfbsmaxanzahlzeilen=25
%
% ab hier keine Änderungen vornehmen (außer am Ende Buchstaben)
%
% Setze folgendes Zeichen für Zeilenumbruch in Meldungen ein
\newlinechar=`\^^J
% Substitutionen können unterdrückt werden
\newif\ifgfbskeinesubst
\ifx t\nosubst
\message{^^JOK, substitutions are disabled^^J}%
\gfbskeinesubsttrue
\else
\gfbskeinesubstfalse
\fi
\newif\ifggsymloaded
\ifx t\fgefontsknown
\message{^^JThe family ggfam with the fge-fonts is active.^^J}%
\ggsymloadedtrue
\else
\ggsymloadedfalse
\fi
\newif\ifggrotiere
\ifx t\showrotation
\ggrotieretrue
\else
\message{^^JRotated symbols are shown unrotated.^^J}%
\ggrotierefalse
\fi
\catcode`@=11
\def\mynewfam{\alloc@8\fam\chardef\sixt@@n}
\catcode`@=12
\ifggsymloaded
\font\tengg=fgerm10 \font\tenggi=fgeit10
\font\ninegg=fgerm10 at 9pt \font\nineggi=fgeit10 at 9pt
\font\eightgg=fgerm10 at 8pt \font\eightggi=fgeit10 at 8pt
\mynewfam\ggfam
\fi
\font\nineeufm=eufm9
\font\eighteufm=eufm8
\font\sixeufm=eufm6
\font\tencmmib=cmmib10 \skewchar\tencmmib='177
\font\ninecmmib=cmmib9 \skewchar\ninecmmib='177
\font\eightcmmib=cmmib8 \skewchar\eightcmmib='177
\font\sevencmmib=cmmib7 \skewchar\sevencmmib='177
\font\sixcmmib=cmmib6 \skewchar\sixcmmib='177
\font\fivecmmib=cmmib5 \skewchar\fivecmmib='177
\expandafter\ifx\csname cmmibfam\endcsname\relax
\mynewfam\cmmibfam
\else
\message{^^JThe family cmmibfam is already defined.^^J}%
\fi
\font\tencmbsy=cmbsy10 \skewchar\tencmbsy='60
\font\ninecmbsy=cmbsy9 \skewchar\ninecmbsy='60
\font\eightcmbsy=cmbsy8 \skewchar\eightcmbsy='60
\font\sevencmbsy=cmbsy7 \skewchar\sevencmbsy='60
\font\sixcmbsy=cmbsy6 \skewchar\sixcmbsy='60
\font\fivecmbsy=cmbsy5 \skewchar\fivecmbsy='60
\expandafter\ifx\csname cmbsyfam\endcsname\relax
\mynewfam\cmbsyfam
\else
\message{^^JThe family cmbsyfam is already defined.^^J}%
\fi
\font\sevenit=cmti7
\font\sixit=cmti7 at 6pt
\font\fiveit=cmti7 at 5pt
\font\twelvei=cmmi10 at 12pt \skewchar\twelvei='177
\def\hexno#1{\ifcase#1 0\or 1\or 2\or 3\or 4\or 5\or 6\or 7\or 8\or
9\or A\or B\or C\or D\or E\or F\fi}
\newtoks\gftextfontaenderung
\newdimen\ufdimi \newdimen\ufdimii
\def\bstenpoint{%
\scriptfont\itfam=\sevenit
\scriptscriptfont\itfam=\fiveit
\textfont\eufmfam=\teneufm
\scriptfont\eufmfam=\seveneufm
\scriptscriptfont\eufmfam=\fiveeufm
\textfont\cmmibfam=\tencmmib
\scriptfont\cmmibfam=\sevencmmib
\scriptscriptfont\cmmibfam=\fivecmmib
\textfont\cmbsyfam=\tencmbsy
\scriptfont\cmbsyfam=\sevencmbsy
\scriptscriptfont\cmbsyfam=\fivecmbsy
\ifggsymloaded
\textfont\ggfam=\tengg
\fi
\font\ffont=cmdunh10 at 8pt \font\nfont=cmsl12
\font\ufont=cmdunh10 at 9pt {\ufont\global\ufdimi=0.07em \global\ufdimii=0.5ex }%
\gftextfontaenderung={\textfont1=\twelvei \textfont\msbfam=\sevenmsb
\ifggsymloaded\textfont\ggfam=\tenggi\fi}}
\def\bsninepoint{%
\scriptfont\itfam=\sixit
\scriptscriptfont\itfam=\fiveit
\textfont\eufmfam=\nineeufm
\scriptfont\eufmfam=\sixeufm
\scriptscriptfont\eufmfam=\fiveeufm
\textfont\cmmibfam=\ninecmmib
\scriptfont\cmmibfam=\sixcmmib
\scriptscriptfont\cmmibfam=\fivecmmib
\textfont\cmbsyfam=\ninecmbsy
\scriptfont\cmbsyfam=\sixcmbsy
\scriptscriptfont\cmbsyfam=\fivecmbsy
\ifggsymloaded
\textfont\ggfam=\ninegg
\fi
\font\ffont=cmdunh10 at 7pt \font\nfont=cmsl10 at 11pt
\font\ufont=cmdunh10 at 8pt {\ufont\global\ufdimi=0.11em \global\ufdimii=0.6ex }%
\gftextfontaenderung={\textfont1=\twelvei\textfont\msbfam=\sixmsb
\ifggsymloaded\textfont\ggfam=\nineggi\fi}}
\def\bseightpoint{%
\scriptfont\itfam=\sixit
\scriptscriptfont\itfam=\fiveit
\textfont\eufmfam=\eighteufm
\scriptfont\eufmfam=\sixeufm
\scriptscriptfont\eufmfam=\fiveeufm
\textfont\cmmibfam=\eightcmmib
\scriptfont\cmmibfam=\sixcmmib
\scriptscriptfont\cmmibfam=\fivecmmib
\textfont\cmbsyfam=\eightcmbsy
\scriptfont\cmbsyfam=\sixcmbsy
\scriptscriptfont\cmbsyfam=\fivecmbsy
\ifggsymloaded
\textfont\ggfam=\eightgg
\fi
\font\ffont=cmdunh10 at 6pt \font\nfont=cmsl10
\font\ufont=cmdunh10 at 7pt {\ufont\global\ufdimi=0.16em \global\ufdimii=0.6ex }%
\gftextfontaenderung={\textfont1=\teni\textfont\msbfam=\fivemsb
\ifggsymloaded\textfont\ggfam=\eightggi\fi}}
\bstenpoint
\def\AmSTeX{$\cal A\kern-.1667em\lower.5ex\hbox{$\cal M$}\kern-.075em S$-\TeX}
\newhelp\gfbskeinbuchstabeinhoehlunghilfe{%
Either in the current or in the previously typed \string\* macro you must have^^J%
used as the last symbol one of (1) \string$, %$%
(2) \string., (3) \string,, (4) \string;,^^J%
(5) \string`, (6) 7, or (7) \string @ and now a character is expected that is^^J%
used as the variable for the ``for all''.}
\newhelp\gfbsunbekanntessymbolhilfe{%
The shown character is not handled by the \string\* macro.^^J%
Here is the list of allowed characters:^^J%
(1) \string" (nothing), (2) \string_ (empty box), (3) \string- (content stroke),^^J%
(4) \string<, \string(, \string~, \string), or \string> (negation),
(5) \string+, \string^, or \string/ (double negation),^^J%
(6) \string: (then), (7) \string' (if), (8) \string! (connector then-if),^^J%
(9) \string[ (judgement left), (10) \string] (judgement right),^^J%
(11) \string| (substitution bar), (12) \string= (double inference rule),^^J%
(13) \string. (half \string-), (14) \string, (half \string~), ^^J%
(15) \string` (half \string~ moved left), (16) \string; (half \string+),^^J%
(17) \string @ (for all), (18) \string$ (either \string. or half \string"),^^J% $
(19) 0 (either \string( or \string)), (20) 1 (either \string^ or \string/),
(21) 2 (either \string^ or \string+),^^J%
(22) 3 , (23) 4 (either \string- or \string"),^^J%
(24) 5 (either \string_ or \string"), (25) 6 (either \string[ or \string]),
(26) 7 (either \string` or \string,),^^J%
(27) 8 (either \string< or \string~), (28) 9 (only 1/3 of \string-).^^J%
(13)-(16), and (26) signal a ``for all'' and must be paired^^J%
(any combination allowed).^^J%
(18) signals also a ``for all'' and must be paired with itself.}
\newhelp\gfbshaelftehilfe{%
After a signaled ``for all'' one of (1) \string., (2) \string,, (3) \string;,^^J%
(4) \string`, or (5) 7 must directly follow the variable. These symbols must be^^J%
paired in any combination around the character that is used as the^^J%
variable in the ``for all''.}
\newhelp\gfbsklammerhilfe{%
A ``for all'' was signaled by a dollar sign. This must be followed by^^J%
a dollar sign. The other symbols to signal the end of a ``for all''^^J%
cannot be used here, that is \string., \string,, \string`, or \string; are not allowed.}
\newhelp\gfggschlussweisehilfe{%
The `\string?' cannot be used if the style is set to follow the Begriffsschrift.^^J%
Either the style for the Grundgesetze must be used or the `\string?' sign has to^^J%
be invoked: You have to set `\string\gfggschlussweisetrue' to use this command.^^J%
You can activate the style of the Grundgesetze with the command \string\toggleGGstyle.}
\newhelp\gfbszwischenzeichenhilfe{%
A character for a single conclusion sign must be introduced by a `\string>'.^^J%
The character was found but no `\string>' has been read before.}
\newhelp\gfbszwischenzeichenfehlthilfe{%
You have entered a `\string>' so that the next conclusion symbol must be^^J%
either an `x' or an `u'.}
\newhelp\gfbsunbekannterschlusshilfe{%
The symbol is not allowed in a \string\*? macro. Here is a list of known symbols:^^J%
(1) \string_ (empty box), (2) \string" (nothing), (3) \string- (single line),^^J%
(4) \string. (single dot), (5) \string= (double line),^^J%
(6) \string* (line and empty box as double line),^^J%
(7) \string> (signal single character), (8) x (cross), and (9) u (brace).^^J%
(8) and (9) must be signaled by (7).}
\newhelp\gfbsnegwdhhilfe{%
The repetition needs a nonnegative counter to output the^^J%
text parameters. The negative value is ignored.}
\newhelp\gfbspositionunbekannthilfe{%
To position the formula number use either l for left, m for middle,^^J%
or r for right.}
\newhelp\gfbsdoppelpunkthilfe{%
The number of colons (one or two) is given by the number of periods:^^J%
the period gives one colon, the colon two.}
\newhelp\gfbszuvieleparameterhilfe{%
A statement has only three parameters. But here you have used more.^^J%
The parameter is ignored but it might belong to the next construction^^J%
and can cause more errors if the grouping was not correct.}
\newhelp\gfbsfalschesvzhilfe{%
A sign must be one of (1) \string-, (2) \string+, or (3) \string..^^J%
They have the meaning negation, confirmation (double negation), and no sign, resp.}
\newhelp\gfbskeinbuchstabeanhoehlungspositionhilfe{%
A ``for all'' variable must be a letter.^^J%
Other error messages from building the \string\*-macros will follow.}
\newhelp\gfbsfalscherstarthilfe{%
A formula must start either with `\string|' or `\string.'.^^J%
The second parameter to \string\formel\space must be one of these characters.}
\newhelp\gfbsnurterminalhilfe{%
Only a terminal string was entered, no valid Frege formula found.}
\newhelp\gfbsnurnullinaushilfe{%
As substitutions are disabled, a number can only be written in the^^J%
first line of a formula. The input is ignored and 0 is used instead.}
\newhelp\gfbskeinesubsthilfe{%
The last parameter is substitution information and should be empty.^^J%
You have disabled the use of substitutions in the compact notation^^J%
by asigning the value ``t'' to \string\nosubst. Don't make this setting^^J%
before the package is loaded if you need substitutions.}
\newhelp\gfbsleeresubsthilfe{%
You cannot substitute a character by a space. Probably some space occurs^^J%
directly after the colon that should be removed.}
\newhelp\gfbszweiteposzugrosshilfe{%
The position for the formel number must be to the left^^J%
of the postition of the line. Assuming a small positive distance.}
\newhelp\gfbskeinelaengehilfe{%
The line denoting the conclusion can only be drawn if it^^J%
has a positive length. More errors will follow.}
\newhelp\gfbsdoppelpunktzahlhilfe{%
The third symbol must be either a period or a colon to^^J%
give the number of colons. More erros will follow.}
\newhelp\gfbsposabstandhilfe{%
The p-parameter of the substitution is not smaller than the^^J%
p-parameter of the formula. A small distance is assumed, but^^J%
that might result in a wrong output.}
\newhelp\ggunbekannteboxnummer{%
There are four boxes for \string\pfrege\space and \string\pparens, and^^J%
four boxes for \string\bfrege\space and \string\bparens.^^J%
To output a box \string\pfbox\space and \string\bfbox\space are used.^^J%
The listed macros need as the first parameter a number^^J%
in the range 1 and 4. Other numbers are ignored.}
\newhelp\ggkeinbekanntessymbol{%
Macro \string\G\space does not know how to handle the argument.}
\newhelp\ggkeinvokalbuchstabe{%
For a value-range the spiritus lenis must be applied to a^^J%
lowercase greek vowel (\string\alpha, \string\epsilon).^^J%
The greek letter is given as the argument of the macro and^^J%
must be expresssed here by its latin representation,^^J%
f.e., a for \string\alpha. Other letters are rejected.}
% \ff ist der Formelnummernfont
\let\ff=\rm
\newdimen\gfbssdicke \newdimen\gfbsudicke
\newdimen\gfbsddicke
\newdimen\gfbsedicke \newdimen\gfbsfdicke
\newdimen\gfbshoehe
\newdimen\gfbsneght \newdimen\gfbsnegdp
\gfbssdicke=\gfbsstrichdicke \gfbsudicke=\gfbsurteildicke
\gfbsddicke=\gfbsdefdicke
\gfbsedicke=\gfbsersetzungdicke \gfbsfdicke=\gfbsschlussdicke
\gfbshoehe=\gfbsraise \gfbsnegdp=\gfbsneg
% die Überlappung der Striche an den Fugen
\newdimen\gfbsueberlappung \gfbsueberlappung = -0.001 em
% eine \gfbseinheit ist um die Überlappung kleiner als die volle Einheit
\newdimen\gfbseinheit \gfbseinheit = \gfbsvolleeinheit
\advance\gfbseinheit by \gfbsueberlappung
% für zwei Einheiten wird ebenfalls ein Wert benötigt
\newdimen\gfbszweiheit \gfbszweiheit = 2\gfbsvolleeinheit
\advance\gfbszweiheit by \gfbsueberlappung
% aus drei Teilen wird ein Element erzeugt
\newdimen\gfbselementdimen \gfbselementdimen = 3\gfbseinheit
% die Gesamthöhe der horizontalen Striche
\newdimen\gfbsht \newdimen\gfgght
\gfbsht=\gfbshoehe \advance\gfbsht by \gfbssdicke \gfgght=\gfbsht
% \gfbsrulefill ändert sich mit dem Stil, \gfggrulefill bleibt konstant
\def\gfbsrulefill{\leaders\hrule height \gfbsht depth -\gfbshoehe\hfill}
\def\gfggrulefill{\leaders\hrule height \gfgght depth -\gfbsraise\hfill}
% die Strichdicke noch beim Urteilsstrich addieren
\newdimen\gfbsfuht \newdimen\gfbsfudp
\gfbsfuht=\gfbsuht \advance\gfbsfuht by \gfbssdicke
\gfbsfudp=\gfbsudp
% die Position der Schlussstriche berechnen
\newdimen\gfbsos \newdimen\gfbsus
\gfbsos=\gfbsschlussabstand \advance\gfbsos by \gfbsfdicke
\gfbsus=\gfbsos \advance\gfbsus by -\gfbssdicke
% und der Abstand bei Doppelpunkten
\newdimen\gfbsdpa
\gfbsdpa=\gfbsdpabstand
\def\gfbsneuestriche{%
\ifgfbsuseGGstyle
\global\gfbssdicke=\gfggstrichdicke
\global\gfbsudicke=\gfggstrichdicke
\global\gfbsddicke=\gfggstrichdicke
\global\gfbsedicke=\gfggstrichdicke
\global\gfbsfdicke=\gfggstrichdicke
\global\gfbshoehe=\gfggraise
\global\gfbsnegdp=\gfggneg
\global\gfbsfuht=\gfgguht
\global\gfbsfudp=\gfggudp
\global\gfbsdpa=\gfggdpabstand
\else
\global\gfbssdicke=\gfbsstrichdicke
\global\gfbsudicke=\gfbsurteildicke
\global\gfbsddicke=\gfbsdefdicke
\global\gfbsedicke=\gfbsersetzungdicke
\global\gfbsfdicke=\gfbsschlussdicke
\global\gfbshoehe=\gfbsraise
\global\gfbsnegdp=\gfbsneg
\global\gfbsfuht=\gfbsuht
\global\gfbsfudp=\gfbsudp
\global\gfbsdpa=\gfbsdpabstand
\fi
\global\gfbsht=\gfbshoehe
\global\advance\gfbsht by \gfbssdicke
\gdef\gfbsrulefill{\leaders\hrule height \gfbsht depth -\gfbshoehe\hfill}%
\global\advance\gfbsfuht by \gfbssdicke
\global\gfbsos=\gfbsschlussabstand \global\advance\gfbsos by \gfbsfdicke
\global\gfbsus=\gfbsos \global\advance\gfbsus by -\gfbssdicke
}
\newif\ifgfbsuseGGstyle \gfbsuseGGstylefalse
% true falls der Negationsstrich den Inhaltsstrich berühren soll
\newif\ifgfbsnegdirekt \gfbsnegdirektfalse
\newif\ifgfbshoehlung \gfbshoehlungfalse
\newif\ifgfbskompakt \gfbskompaktfalse
\newif\ifgfbszweitehaelfte \gfbszweitehaelftefalse
\newif\ifgfbsklammerzu \gfbsklammerzufalse
\newif\ifgfggschlussweise \gfggschlussweisefalse
\newif\ifgfbszwischenzeichen
\mathchardef\diagup="0\hexno\msbfam1E
\mathchardef\diagdown="0\hexno\msbfam1F
\newdimen\gfbsfonosenken
\newbox\gfbsbox \newdimen\gfbsboxht \newdimen\gfbsboxdp
\newif\ifgfbsfonoohnepunkt \gfbsfonoohnepunktfalse
\newbox\ggpboxi \newbox\ggbboxi % Boxen für \pfrege und \bfrege
\newbox\ggpboxii \newbox\ggbboxii
\newbox\ggpboxiii \newbox\ggbboxiii % und für \pparens und \bparens
\newbox\ggpboxiv \newbox\ggbboxiv
\def\gfbsteilelement#1{%
\ifgfbshoehlung % Zeichen in eine Höhlung setzen (1. \fi)
\ifcat \noexpand#1a\else
\errhelp=\gfbskeinbuchstabeinhoehlunghilfe
\errmessage{A ``for all'' variable must be a letter not `\string#1'}%
\fi
\ifdim\gfbssdicke<0.59 pt
\setbox0=\hbox{$\mathchar"015E$}% plain \TeX Vorgabe
\else
\setbox0=\hbox{$\mathchar"0\hexno\cmmibfam5E$}%
\fi
\dimen0 = \gfbseinheit \advance\dimen0 by -0.5\wd0
\dimen2 = \wd0 \divide\dimen2 by 18 \advance\dimen0 by 1.5\dimen2
\hbox to \gfbszweiheit{%
\hbox to\dimen0{\gfbsrulefill}%
\kern-1.2\dimen2
\raise\gfbshoehe\hbox{%
\lower\ht0\hbox{%
\ifx#1ß$\buildrel{\the\dsz}\over{\box0}$%
\else$\buildrel{{\frak #1}}\over{\box0}$%
\fi
}%
}%
\nobreak
\kern-1.5\dimen2
\gfbsrulefill
}%
\kern\gfbsueberlappung
\gfbshoehlungfalse
\else
\ifx #1$%$% halber Inhaltsstrich oder Leerstelle nach Höhlung
\ifgfbsklammerzu
\gfbsklammerzufalse
\else
\gfbsklammerzutrue
\gfbshoehlungtrue
\fi
\ifgfbszweitehaelfte
\errhelp=\gfbshaelftehilfe
\errmessage{Unexpected `\string#1' after signaled ``for all''}%
\gfbszweitehaelftefalse
\fi
\ifgfbskompakt\relax
\else
\hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
\nobreak
\fi
\else
\ifgfbsklammerzu
\errhelp=\gfbsklammerhilfe
\errmessage{A \string$ expected, not `\string#1'}%$
\gfbsklammerzufalse
\fi
\ifx #1.% halber Inhaltsstrich
\hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
\nobreak
\ifgfbszweitehaelfte
\gfbszweitehaelftefalse
\else
\gfbshoehlungtrue
\gfbszweitehaelftetrue
\fi
\else\ifx #1,% halber verneinter Inhaltsstrich
\hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
\nobreak
\ifgfbszweitehaelfte\hskip-0.3\gfbseinheit
\else\hskip-0.2\gfbseinheit\fi
\hskip-0.5\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-0.5\gfbssdicke
\ifgfbszweitehaelfte\hskip0.3\gfbseinheit
\else\hskip0.2\gfbseinheit\fi
\ifgfbszweitehaelfte
\gfbszweitehaelftefalse
\else
\gfbshoehlungtrue
\gfbszweitehaelftetrue
\fi
\else\ifx #1`% halber ganz links verneinter Inhaltsstrich
\hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
\nobreak
\hskip-0.5\gfbseinheit
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-\gfbssdicke
\hskip0.5\gfbseinheit
\ifgfbszweitehaelfte
\gfbszweitehaelftefalse
\else
\gfbshoehlungtrue
\gfbszweitehaelftetrue
\fi
\else\ifx #1;% halber doppelt verneinter Inhaltsstrich
\hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
\nobreak
\ifgfbszweitehaelfte\hskip-0.42\gfbseinheit
\else\hskip-0.27\gfbseinheit\fi
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip0.27\gfbseinheit
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\ifgfbszweitehaelfte\hskip0.15\gfbseinheit\fi
\ifgfbszweitehaelfte
\gfbszweitehaelftefalse
\else
\gfbshoehlungtrue
\gfbszweitehaelftetrue
\fi
\else\ifx #17% variable Negation
\ifgfbskompakt
\hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
\nobreak
\ifgfbszweitehaelfte\hskip-0.3\gfbseinheit
\else\hskip-0.2\gfbseinheit\fi
\hskip-0.5\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-0.5\gfbssdicke
\ifgfbszweitehaelfte\hskip0.3\gfbseinheit
\else\hskip0.2\gfbseinheit\fi
\else
\hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
\nobreak
\hskip-0.5\gfbseinheit
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-\gfbssdicke
\hskip0.5\gfbseinheit
\fi
\ifgfbszweitehaelfte
\gfbszweitehaelftefalse
\else
\gfbshoehlungtrue
\gfbszweitehaelftetrue
\fi
\else
\ifgfbszweitehaelfte
\errhelp=\gfbshaelftehilfe
\errmessage{Unexpected `\string#1' after signaled ``for all''}%
\gfbszweitehaelftefalse
\fi
\ifx #1"% Leerstelle
\relax
\else\ifx #1_% leer
\hskip\gfbseinheit
\else\ifx #1-% Inhaltsstrich
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\else\ifx #1=% Schlusskette
\vrule height \gfbsos depth -\gfbsus width \gfbsvolleeinheit
\nobreak
\hskip-\gfbsvolleeinheit
\vrule height \gfbsfdicke depth 0pt width \gfbsvolleeinheit
\nobreak
\kern\gfbsueberlappung
\else
\ifx #1~% verneinter Inhaltsstrich
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-0.5\gfbseinheit
\hskip-0.5\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-0.5\gfbssdicke
\hskip0.5\gfbseinheit
\else\ifx #1(% Negation mitte-links
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-0.75\gfbseinheit
\hskip-0.5\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-0.5\gfbssdicke
\hskip0.75\gfbseinheit
\else\ifx #1<% Negation ganz links
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-\gfbseinheit
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-\gfbssdicke
\hskip\gfbseinheit
\else\ifx #1)% Negation mitte-rechts
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-0.25\gfbseinheit
\hskip-0.5\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-0.5\gfbssdicke
\hskip0.25\gfbseinheit
\else\ifx #1>% Negation ganz rechts
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\else\ifx #1+% doppelter verneinter Inhaltsstrich
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-0.75\gfbseinheit
\hskip-0.5\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip0.5\gfbseinheit
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-0.5\gfbssdicke
\hskip0.25\gfbseinheit
\else\ifx #1^% doppelter verneinter Inhaltsstrich links
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-\gfbseinheit
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip0.5\gfbseinheit
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-\gfbssdicke
\hskip0.5\gfbseinheit
\else\ifx #1/% doppelter verneinter Inhaltsstrich rechts
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-0.5\gfbseinheit
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip0.5\gfbseinheit
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\else
\ifx #1:% dann-Verbindung
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-0.5\gfbseinheit
\hskip-0.5\gfbssdicke
\vrule width \gfbssdicke height \gfbshoehe
\nobreak
\hskip-0.5\gfbssdicke
\hskip0.5\gfbseinheit
\else\ifx #1'% wenn-Verbindung
\hskip0.5\gfbsvolleeinheit
\hskip-0.5\gfbssdicke
\vrule width \gfbssdicke depth -\gfbshoehe
\nobreak
\hskip-0.5\gfbssdicke
\hbox to 0.5\gfbsvolleeinheit{\gfbsrulefill}\kern0.5\gfbsueberlappung
\nobreak
\kern0.5\gfbsueberlappung
\else\ifx #1!% senkrechter Strich für Verlängerungen zwischen dann und wenn
\hskip0.5\gfbseinheit
\hskip-0.5\gfbssdicke
\vrule width \gfbssdicke
\nobreak
\hskip-0.5\gfbssdicke
\hskip0.5\gfbseinheit
\else
\ifx #1[% Urteilsstrich
\smash{\vrule width \gfbsudicke height \gfbsfuht depth \gfbsfudp}%
\nobreak
\hskip-\gfbsudicke
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\else\ifx #1]% Urteilsstrich rechtsbündig
\hskip\gfbseinheit
\hskip-\gfbsudicke
\smash{\vrule width \gfbsudicke height \gfbsfuht depth \gfbsfudp}%
\else\ifx #13% Definitionsstriche rechtsbündig
\hskip\gfbseinheit
\hskip-4\gfbsddicke
\smash{\vrule width \gfbsddicke height \gfbsfuht depth \gfbsfudp}%
\nobreak
\hskip2\gfbsddicke
\smash{\vrule width \gfbsddicke height \gfbsfuht depth \gfbsfudp}%
\else\ifx #1|% Ersetzungsstrich
\hskip0.5\gfbseinheit
\hskip-0.5\gfbsedicke
\vrule width \gfbsedicke
\nobreak
\hskip-0.5\gfbsedicke
\hskip0.5\gfbseinheit
\else\ifx #1@% Vorbereitung für eine Höhlung
\gfbshoehlungtrue
\else
\ifx #10% Negation mitte-links oder mitte-rechts
\ifgfbskompakt
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-0.25\gfbseinheit
\hskip-0.5\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-0.5\gfbssdicke
\hskip0.25\gfbseinheit
\else
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-0.75\gfbseinheit
\hskip-0.5\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-0.5\gfbssdicke
\hskip0.75\gfbseinheit
\fi
\else\ifx #11% Doppelte Negation links oder rechts
\ifgfbskompakt
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-0.5\gfbseinheit
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip0.5\gfbseinheit
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\else
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-\gfbseinheit
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip0.5\gfbseinheit
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-\gfbssdicke
\hskip0.5\gfbseinheit
\fi
\else\ifx #12% Doppelte Negation links oder zentriert
\ifgfbskompakt
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-0.75\gfbseinheit
\hskip-0.5\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip0.5\gfbseinheit
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-0.5\gfbssdicke
\hskip0.25\gfbseinheit
\else
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-\gfbseinheit
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip0.5\gfbseinheit
\hskip-\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-\gfbssdicke
\hskip0.5\gfbseinheit
\fi
\else\ifx #14% Inhaltsstrich oder Leerstelle
\ifgfbskompakt\relax
\else
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\fi
\else\ifx #15% leer oder Leerstelle
\ifgfbskompakt\relax
\else
\hskip\gfbseinheit
\fi
\else\ifx #16% Urteil links- oder rechtsbündig
\ifgfbskompakt
\hskip\gfbseinheit
\hskip-\gfbsudicke
\smash{\vrule width \gfbsudicke height \gfbsfuht depth \gfbsfudp}%
\else
\smash{\vrule width \gfbsudicke height \gfbsfuht depth \gfbsfudp}%
\nobreak
\hskip-\gfbsudicke
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\fi
\else\ifx #18% Negation ganz links oder zentriert
\ifgfbskompakt
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-0.5\gfbseinheit
\hskip-0.5\gfbssdicke
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-0.5\gfbssdicke
\hskip0.5\gfbseinheit
\else
\hbox to \gfbsvolleeinheit{\gfbsrulefill}\kern\gfbsueberlappung
\nobreak
\hskip-\gfbseinheit
\ifgfbsnegdirekt
\vrule width \gfbssdicke height \gfbshoehe depth \gfbsnegdp
\else
\gfbsneght=.01\gfbshoehe \multiply\gfbsneght by \gfbsnegpct
\vrule width \gfbssdicke height \gfbsneght depth \gfbsnegdp
\fi
\nobreak
\hskip-\gfbssdicke
\hskip\gfbseinheit
\fi
\else\ifx #19% Drittelstrich
\hbox to 0.333333\gfbsvolleeinheit{\gfbsrulefill}\kern0.3333\gfbsueberlappung
\nobreak
\else\ifx #1*% 5/3 Leerstelle
\hskip1.666667\gfbseinheit
\else
\errhelp=\gfbsunbekanntessymbolhilfe
\errmessage{`\string#1' is not allowed in a \string\* macro}%
\fi\fi\fi\fi\fi\fi\fi\fi\fi
\fi\fi\fi\fi\fi
\fi\fi\fi
\fi\fi\fi\fi\fi\fi\fi\fi
\fi\fi\fi\fi
\fi\fi\fi\fi\fi\fi
\fi
}
\let\discretionarytimes=\*
\def\*#1#2#3{%
\ifx #1?% Schlussweise aus den Grundgesetzen
\ifgfggschlussweise
\gfbsschluss{#2}%
\gfbsschluss{#3}%
\else
\errhelp=\gfggschlussweisehilfe
\errmessage{You cannot use this construction in style Begriffsschrift}%
\fi
\else
\gfbsteilelement{#1}%
\gfbsteilelement{#2}%
\gfbsteilelement{#3}%
\fi
}
\def\toggleGGstyle{%
\ifgfbsuseGGstyle% gehe zum Stil der Begriffsschrift über
\gfbskompaktfalse
\gfbsfonoohnepunktfalse
\gfggschlussweisefalse
\gfbsnegdirektfalse
\gfbsuseGGstylefalse
\else% verwende den Stil der Grundgesetze
\gfbskompakttrue
\gfbsfonoohnepunkttrue
\gfggschlussweisetrue
\gfbsnegdirekttrue
\gfbsuseGGstyletrue
\fi
\gfbsneuestriche
}
\def\gfbsschluss#1{%
\ifx #1x% Wendung
\ifgfbszwischenzeichen
\kern\gfbsueberlappung
\hbox to 3\gfbsvolleeinheit{\hss$\diagdown$\llap{$\diagup$}\hss}%
\kern2\gfbsueberlappung
\else
\errhelp=\gfbszwischenzeichenhilfe
\errmessage{An `x' must be introduced by `\string>'}%
\fi
\gfbszwischenzeichenfalse
\else\ifx #1u% Wandlung
\ifgfbszwischenzeichen
\kern\gfbsueberlappung
\hbox to 3\gfbsvolleeinheit{$\setbox0=\hbox{$\braceld$}%
\bracelu\leaders\vrule height\ht0 depth0pt\hfill\braceru$}%
\kern2\gfbsueberlappung
\else
\errhelp=\gfbszwischenzeichenhilfe
\errmessage{An `u' must be introduced by `\string>'}%
\fi
\gfbszwischenzeichenfalse
\else
\ifgfbszwischenzeichen
\errhelp=\gfbszwischenzeichenfehlthilfe
\errmessage{Either `x' or `u' expected}%
\gfbszwischenzeichenfalse
\fi
\ifx #1-% einzeln: Strich
\hbox to 1.5\gfbsvolleeinheit{\gfggrulefill}\kern1.5\gfbsueberlappung
\else\ifx #1.% einzeln: zentrierter Punkt
\hbox to 1.5\gfbsvolleeinheit{\hss$\cdot$\hss}\kern1.5\gfbsueberlappung
\else
\ifx #1=% doppelt: Strich oben, Strich unten
\vrule height \gfbsos depth -\gfbsus width 1.5\gfbsvolleeinheit
\nobreak
\hskip-1.5\gfbsvolleeinheit
\vrule height \gfbsfdicke depth 0pt width 1.5\gfbsvolleeinheit
\kern1.5\gfbsueberlappung
\else\ifx #1*% doppelt: Strich oben, leer unten
\vrule height \gfbsos depth -\gfbsus width 1.5\gfbsvolleeinheit
\kern1.5\gfbsueberlappung
\else
\ifx #1_% Leerraum
\hskip1.5\gfbseinheit
\else\ifx #1"% Leerstelle
\relax
\else\ifx #1>% Einzelsymbol (Wendung oder Wandlung) folgt
\gfbszwischenzeichentrue
\else % nicht erlaubt
\errhelp=\gfbsunbekannterschlusshilfe
\errmessage{`\string#1' is not allowed in a \string\*? macro}%
\fi\fi\fi
\fi\fi
\fi\fi
\fi\fi
}
\newcount\gfbswiederholung
\def\wdh#1#2#3#4#5{%
\gfbswiederholung=#1
\ifnum\gfbswiederholung<0
\errhelp=\gfbsnegwdhhilfe
\errmessage{Repetition count cannot be negative, found \string#1}%
\else
\loop
\ifnum\gfbswiederholung>0
#2#3#4#5%
\advance\gfbswiederholung by -1
\repeat
\fi
}
\def\nzp#1{%
\ifvmode\noindent\else\hfil\break\fi
\gfbsstrut
\hskip#1\gfbselementdimen
\relax
\global\gfbsfonosenken=0pt
}
\let\nlp\nzp
\def\gfbsstrut{%
\relax\ifmmode\copy\gfbsbox\else\unhcopy\gfbsbox\fi
}
\def\gfbsabstandzuruecksetzen{%
\global\gfbsboxht=\ht\strutbox \global\gfbsboxdp=\dp\strutbox
\global\setbox\gfbsbox=\hbox{%
\vrule height\the\gfbsboxht depth\the\gfbsboxdp width0pt }%
}
\gfbsabstandzuruecksetzen
\def\gfbssetzeabstand#1#2{%
\global\gfbsboxht=#1pt \global\gfbsboxdp=#2pt %
\global\setbox\gfbsbox=\hbox{%
\vrule height\the\gfbsboxht depth\the\gfbsboxdp width0pt }%
}
\def\gfbsreduziereabstandum#1#2{%
\global\advance\gfbsboxht by -0.#1#2\gfbsboxht
\global\advance\gfbsboxdp by -0.#1#2\gfbsboxdp
\global\setbox\gfbsbox=\hbox{%
\vrule height\the\gfbsboxht depth\the\gfbsboxdp width0pt }%
}
\def\zi#1{%
\hbox to \gfbselementdimen{\rm\thinspace #1\hss}\ignorespaces
}
\def\ze#1{%
\hbox{\rm\thinspace #1}%
}
\newif\ifgfbsinnen % false: Zeichen werden mit \ze gesetzt, true: mit \zi
\def\nzpz#1#2{\nzp{#1}\llap{#2}}
\let\nlpz\nzpz
\def\fono#1{%
\hfill\lower\gfbsfonosenken\hbox{\rm({\ff #1}\ifgfbsfonoohnepunkt\else.\fi}%
}
\def\bss#1/#2#3:#4#5\ess{%
\nzp{#1}%
\ifx #2l%
\ifx #4.%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:}\hss}%
\else\ifx #4:%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
\else
\errhelp=\gfbsdoppelpunkthilfe
\errmessage{Either a period or a colon is expected for the number of colons}%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
\fi\fi
\hskip2\gfbseinheit
\else\ifx #2r%
\hskip2\gfbseinheit
\ifx #4.%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:}\hss}%
\else\ifx #4:%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
\else
\errhelp=\gfbsdoppelpunkthilfe
\errmessage{Either a period or a colon is expected for the number of colons}%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
\fi\fi
\else\ifx #2m%
\hskip\gfbseinheit
\ifx #4.%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:}\hss}%
\else\ifx #4:%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
\else
\errhelp=\gfbsdoppelpunkthilfe
\errmessage{Either a period or a colon is expected for the number of colons}%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
\fi\fi
\hskip\gfbseinheit
\else
\errhelp=\gfbspositionunbekannthilfe
\errmessage{Only l, m, and r are allowed as position parameter}%
\hskip\gfbseinheit
\ifx #4.%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:}\hss}%
\else\ifx #4:%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
\else
\errhelp=\gfbsdoppelpunkthilfe
\errmessage{Either a period or a colon is expected for the number of colons}%
\hbox to \gfbseinheit{\rm\hss({\ff #3})\rlap{\kern\gfbsdpa:\kern\gfbsdpa:}\hss}%
\fi\fi
\hskip\gfbseinheit
\fi\fi\fi
{\let\gfbsrulefill\gfggrulefill #5}%
\vadjust{\penalty-15}\ignorespaces
}
%
% ab hier folgt die Zeilennotation
%
\newtoks\dsz \dsz={\xi}% wird für Buchstaben ß eingesetzt
\newcount\gfbstmpcount
\catcode`@=11
\def\mynewskip{\alloc@2\skip\skipdef\insc@unt}
\def\mynewtoks{\alloc@5\toks\toksdef\@cclvi}
\catcode`@=12
\gfbstmpcount=\gfbsmaxanzahlzeilen
\ifgfbskeinesubst
\advance\gfbstmpcount by 1
\else
\multiply\gfbstmpcount by 2
\fi
\let\rom\romannumeral
\count255=1
\loop
\expandafter\mynewtoks\csname gfbstoks\rom\count255\endcsname
\expandafter\mynewskip\csname gfbsskip\rom\count255\endcsname
\ifnum\count255<\gfbstmpcount
\advance\count255 by 1
\repeat
\newcount\gfbshaengtan \newcount\gfbsgehtbis \newcount\gfbsanzahl
\newif\ifgfbsdannwenn
\newtoks\gfbselement \newcount\gfbszeile
\newcount\gfbsanzahlplus \newcount\gfbsanzahlfest
\newtoks\gfbsprefix
\newif\ifgfbsaussagesichtbar \gfbsaussagesichtbarfalse
\newcount\gfbsgrenze \newcount\gfbszaehler
\newif\ifgfbskeinekompaktehoehlung \gfbskeinekompaktehoehlungfalse
\newcount\gfbserstezeile \newcount\gfbsersteanzahl \newcount\gfbserstegehtbis
\newcount\gfbszweitezeile \newcount\gfbszweitegehtbis
\newif\ifvzzz \newif\ifvzez
\newcount\gfbseinzug
\newif\ifgfbsnurterminal
\newcount\gfbsgrundeinzug \newcount\gfbssubststart
\gfbsgrundeinzug=0
\gfbssubststart=\gfbsmaxanzahlzeilen \advance\gfbssubststart by 1
\newif\ifgfbslognotation \gfbslognotationfalse
\newif\ifgfbszeigestats \gfbszeigestatsfalse
\newcount\gfbsmaxformelzeile
\newcount\gfbsvorgaenger \gfbsvorgaenger=0
\def\setskip#1#2#3#4{%
%\skip-Register = \gfbsanzahl plus \gfbshaengtan minus \gfbsgehtbis
\global\csname gfbsskip\rom#1\endcsname=#2pt plus #3pt minus #4pt%
}
\def\verschlucke#1#2{\relax}
\def\getskip#1.#2 #3 #4.#5 #6 #7.#8{%
\global\gfbsanzahl=#1%
\global\gfbshaengtan=#4%
\global\gfbsgehtbis=#7%
\verschlucke
}
\def\gfbsformel#1#2#3#4#5{%
\gfbsdannwennfalse
\ifx #1.% dann-wenn Beziehung
\gfbsdannwenntrue
\else\ifx #1-% dann-wenn
\gfbsdannwenntrue
\else\ifx #1+% dann-wenn
\gfbsdannwenntrue
\else\ifx #1*% Höhlung
\global\gfbsnurterminalfalse
\ifcat \noexpand#3a\else
\errhelp=\gfbskeinbuchstabeanhoehlungspositionhilfe
\errmessage{Symbol `\string#3' not allowed as variable}%
\fi
\bgroup\gfbsvorgaenger=2
\ifx #2.\ifx #4.\ifgfbskeinekompaktehoehlung\else
\gfbsvorgaenger=3
\fi\fi\fi \gfbsformel #5{}{}{}{}\egroup
\expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
\gfbstmpcount=0 % Anzahl der benutzen .
\ifx #2-%
\ifnum\gfbsvorgaenger<2 \gfbselement={\*,#3}%
\else\ifnum\gfbsvorgaenger=2 \gfbselement={\*`#3}%
\else\gfbselement={\*7#3}%
\fi\fi
\else\ifx #2+%
\gfbselement={\*;#3}%
\else\ifx #2.%
\gfbselement={\*.#3}\gfbstmpcount=1
\else
\errhelp=\gfbsfalschesvzhilfe
\errmessage{Symbol `\string#2' not allowed as sign}%
\gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
\fi\fi\fi
\ifx #4-% ebenso nach der Höhlung
\gfbselement=\expandafter{\the\gfbselement,}%
\else\ifx #4+%
\gfbselement=\expandafter{\the\gfbselement;}%
\else\ifx #4.%
\gfbselement=\expandafter{\the\gfbselement.}%
\advance\gfbstmpcount by 1
\else
\errhelp=\gfbsfalschesvzhilfe
\errmessage{Symbol `\string#4' not allowed as sign}%
\gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
\fi\fi\fi
\ifnum\gfbstmpcount=2
\ifgfbskeinekompaktehoehlung
\gfbsprefix={\*___}\gfbsanzahlfest=3
\else\gfbselement={\*$#3$}\gfbsprefix={\*5__}\gfbsanzahlfest=2
\fi
\else
\gfbsprefix={\*___}\gfbsanzahlfest=3
\fi
\gfbsanzahlplus=3
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
\ifgfbskompakt
\global\advance\gfbsanzahl by \gfbsanzahlfest
\else
\global\advance\gfbsanzahl by \gfbsanzahlplus
\fi
\setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
\gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
\else\ifx #1=% Aussage
\global\gfbsnurterminalfalse
\def\gfbstest{#4}%
\ifx\gfbstest\empty
\def\gfbstest{#5}%
\ifx\gfbstest\empty\else
\errhelp=\gfbszuvieleparameterhilfe
\errmessage{Too many parameters for statement (found `\string#5')}%
\fi
\else
\errhelp=\gfbszuvieleparameterhilfe
\errmessage{Too many parameters for statement (found `\string#4')}%
\fi
\bgroup\gfbsvorgaenger=4 \gfbsformel #3{}{}{}{}\egroup
\expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
\ifx #2-% auf Negation bzw. doppelte Negation prüfen
\ifnum\gfbsvorgaenger>6 \gfbselement={\*484}\else\gfbselement={\*4~4}\fi
\gfbsprefix={\*5_5}\gfbsanzahlfest=1
\else\ifx #2+%
\ifnum\gfbsvorgaenger>6 \gfbselement={\*424}\else\gfbselement={\*4+4}\fi
\gfbsprefix={\*5_5}\gfbsanzahlfest=1
\else\ifx #2.%
\ifgfbsaussagesichtbar
\gfbselement={\*4-4}\gfbsprefix={\*5_5}\gfbsanzahlfest=1
\else
\gfbselement={\*444}\gfbsprefix={\*555}\gfbsanzahlfest=0
\fi
\else
\errhelp=\gfbsfalschesvzhilfe
\errmessage{Symbol `\string#2' not allowed as sign}%
\gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
\fi\fi\fi
\gfbsanzahlplus=3
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
\ifgfbskompakt
\global\advance\gfbsanzahl by \gfbsanzahlfest
\else
\global\advance\gfbsanzahl by \gfbsanzahlplus
\fi
\setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
\gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
\else\ifx #1!% Sequenz oder Makroaufruf
\gfbselement=\expandafter{#2#3#4#5}%
\edef\gfbstoken{\the\gfbselement}%
\bgroup\expandafter\gfbsformel\gfbstoken {}{}{}{}\egroup
\else % einzelnes Zeichen
\ifgfbsinnen
\gfbselement={\zi{$#1#2#3#4#5$}}%
\else
\gfbselement={\ze{$#1#2#3#4#5$}}%
\fi
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
\setskip{\the\gfbszeile}3{\the\gfbszeile}{\the\gfbszeile}%
\fi\fi\fi\fi\fi\fi
\ifgfbsdannwenn
\global\gfbsnurterminalfalse
\bgroup\gfbsvorgaenger=5 \gfbsformel #3{}{}{}{}\egroup
\expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
\gfbserstezeile=\gfbszeile
\gfbsersteanzahl=\gfbsanzahl
\gfbserstegehtbis=\gfbsgehtbis
\gfbszeile=\gfbsgehtbis \advance\gfbszeile by 1
\bgroup\gfbsvorgaenger=6 \gfbsformel #5{}{}{}{}\egroup
\expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
\gfbszweitezeile=\gfbszeile
\gfbszweitegehtbis=\gfbsgehtbis
\global\vzezfalse
\ifx #2-%
\global\vzeztrue
\else\ifx #2+%
\global\vzeztrue
\else\ifx #2.\else
\errhelp=\gfbsfalschesvzhilfe
\errmessage{Symbol `\string#2' not allowed as sign}%
\gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
\fi\fi\fi
\global\vzzzfalse
\ifx #4-%
\global\vzzztrue
\else\ifx #4+%
\global\vzzztrue
\else\ifx #4.\else
\errhelp=\gfbsfalschesvzhilfe
\errmessage{Symbol `\string#4' not allowed as sign}%
\gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
\fi\fi\fi
{\advance\gfbsersteanzahl by -\gfbsanzahl
\ifnum\gfbsersteanzahl>0 % fülle zweite Zeile auf
\advance\gfbsersteanzahl by -1
\gfbstmpcount=\gfbsersteanzahl
\loop
\ifnum\gfbstmpcount>2
\advance\gfbstmpcount by -3
\repeat
\ifcase\gfbstmpcount
\gfbselement={\*""}\gfbsprefix={\*""_}\gfbsanzahlplus=1 \gfbsanzahlfest=1
\or\gfbselement={\*"-}\gfbsprefix={\*"__}\gfbsanzahlplus=2 \gfbsanzahlfest=2
\or\gfbselement={\*-}\gfbsprefix={\*___}\gfbsanzahlplus=3 \gfbsanzahlfest=3
\fi
\advance\gfbsersteanzahl by -\gfbstmpcount
\ifnum\gfbstmpcount=2
\gfbselement=\expandafter{\the\gfbselement-}%
\fi
\ifvzzz
\ifx #4-%
\gfbselement=\expandafter{\the\gfbselement(}%
\else
\gfbselement=\expandafter{\the\gfbselement+}%
\fi
\global\vzzzfalse
\else
\gfbselement=\expandafter{\the\gfbselement-}%
\fi
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
\ifgfbskompakt
\global\advance\gfbsanzahl by \gfbsanzahlfest
\else
\global\advance\gfbsanzahl by \gfbsanzahlplus
\fi
\setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
\gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
\gfbselement={\*---}\gfbsprefix={\*___}\gfbsanzahlfest=3 \gfbsanzahlplus=3
\loop
\ifnum\gfbsersteanzahl>2
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
\ifgfbskompakt
\global\advance\gfbsanzahl by \gfbsanzahlfest
\else
\global\advance\gfbsanzahl by \gfbsanzahlplus
\fi
\setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
\gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
\advance\gfbsersteanzahl by -3
\repeat
\fi
\ifnum\gfbsersteanzahl<0 % fülle erste Zeile auf
\advance\gfbsersteanzahl by 1
\gfbstmpcount=-\gfbsersteanzahl
\loop
\ifnum\gfbstmpcount>2
\advance\gfbstmpcount by -3
\repeat
\ifcase\gfbstmpcount
\gfbselement={\*""}\gfbsprefix={\*""_}\gfbsanzahlplus=1 \gfbsanzahlfest=1
\or\gfbselement={\*"-}\gfbsprefix={\*"__}\gfbsanzahlplus=2 \gfbsanzahlfest=2
\or\gfbselement={\*-}\gfbsprefix={\*___}\gfbsanzahlplus=3 \gfbsanzahlfest=3
\fi
\advance\gfbsersteanzahl by \gfbstmpcount
\ifnum\gfbstmpcount=2
\gfbselement=\expandafter{\the\gfbselement-}%
\fi
\ifvzez
\ifx #2-%
\gfbselement=\expandafter{\the\gfbselement(}%
\else
\gfbselement=\expandafter{\the\gfbselement+}%
\fi
\global\vzezfalse
\else
\gfbselement=\expandafter{\the\gfbselement-}%
\fi
\advance\gfbstmpcount by 1
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbserstezeile\endcsname}%
\global\csname gfbstoks\rom\gfbserstezeile\endcsname=\expandafter{\gfbstoken}%
\global\advance\csname gfbsskip\rom\gfbserstezeile\endcsname by \number\gfbstmpcount pt
\gfbsfuegelinksan{\gfbserstezeile}{\gfbserstegehtbis}%
\gfbselement={\*---}\gfbsprefix={\*___}\gfbsanzahlfest=3 \gfbsanzahlplus=3
\loop
\ifnum\gfbsersteanzahl<-2
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbserstezeile\endcsname}%
\global\csname gfbstoks\rom\gfbserstezeile\endcsname=\expandafter{\gfbstoken}%
\global\advance\csname gfbsskip\rom\gfbserstezeile\endcsname by 3 pt
\gfbsfuegelinksan{\gfbserstezeile}{\gfbserstegehtbis}%
\advance\gfbsersteanzahl by 3
\repeat
\fi}%
\gfbszeile=\gfbserstezeile
\expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
\gfbsanzahlfest=0
\gfbsanzahlplus=3
\ifx #1-% auf Negation bzw. doppelte Negation prüfen
\ifnum\gfbsvorgaenger<2 \gfbselement={\*):}%
\else\ifnum\gfbsvorgaenger<4 \gfbselement={\*~:}%
\else\ifnum\gfbsvorgaenger<7 \gfbselement={\*8:}%
\else\gfbselement={\*0:}\fi\fi\fi
\gfbsprefix={\*_!}\gfbsanzahlfest=2
\else\ifx #1+%
\ifnum\gfbsvorgaenger<2 \gfbselement={\*/:}%
\else\ifnum\gfbsvorgaenger>6 \gfbselement={\*1:}%
\else\gfbselement={\*+:}%
\fi\fi
\gfbsprefix={\*_!}\gfbsanzahlfest=2
\else\ifx #1.%
\gfbselement={\*4:}\gfbsprefix={\*5!}\gfbsanzahlfest=1
\fi\fi\fi
\ifvzez
\ifx #2-%
\gfbselement=\expandafter{\the\gfbselement(}%
\else
\gfbselement=\expandafter{\the\gfbselement+}%
\fi
\advance\gfbsanzahlfest by 1
\gfbsprefix=\expandafter{\the\gfbsprefix_}%
\else
\ifvzzz
\gfbselement=\expandafter{\the\gfbselement-}%
\advance\gfbsanzahlfest by 1
\gfbsprefix=\expandafter{\the\gfbsprefix_}%
\else
\gfbselement=\expandafter{\the\gfbselement4}%
\gfbsprefix=\expandafter{\the\gfbsprefix5}%
\fi
\fi
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
\ifgfbskompakt
\global\advance\gfbsanzahl by \gfbsanzahlfest
\else
\global\advance\gfbsanzahl by \gfbsanzahlplus
\fi
\setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
\gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
\gfbszeile=\gfbszweitezeile
\expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
\gfbsanzahlplus=3
\ifx #1.%
\gfbselement={\*5}\gfbsprefix={\*5}\gfbsanzahlfest=0
\else
\gfbselement={\*_}\gfbsprefix={\*_}\gfbsanzahlfest=1
\fi
\ifvzzz
\ifx #4-%
\gfbselement=\expandafter{\the\gfbselement'(}%
\else
\gfbselement=\expandafter{\the\gfbselement'+}%
\fi
\advance\gfbsanzahlfest by 2
\gfbsprefix=\expandafter{\the\gfbsprefix__}%
\else
\ifvzez
\gfbselement=\expandafter{\the\gfbselement'-}%
\advance\gfbsanzahlfest by 2
\gfbsprefix=\expandafter{\the\gfbsprefix__}%
\else
\gfbselement=\expandafter{\the\gfbselement'4}%
\advance\gfbsanzahlfest by 1
\gfbsprefix=\expandafter{\the\gfbsprefix_5}%
\fi\fi
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
\ifgfbskompakt
\global\advance\gfbsanzahl by \gfbsanzahlfest
\else
\global\advance\gfbsanzahl by \gfbsanzahlplus
\fi
\setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
\gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
\setskip{\the\gfbszweitezeile}{\the\gfbsanzahl}{\the\gfbserstezeile}{\the\gfbsgehtbis}%
\gfbszeile=\gfbserstezeile
\expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
\setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbszweitegehtbis}%
\fi
}
\def\gfbsfuegelinksan#1#2{\bgroup
\gfbstmpcount=0 \advance\gfbstmpcount by #2% höchste zu ändernde Zeilennummer
\count255=0 \advance\count255 by #1% Startzeile (nicht zu ändern)
\loop
\ifnum\gfbstmpcount>\count255
\edef\gfbstoken{\the\gfbsprefix\the\csname gfbstoks\rom\gfbstmpcount\endcsname}%
\global\csname gfbstoks\rom\gfbstmpcount\endcsname=\expandafter{\gfbstoken}%
\ifgfbskompakt
\global\advance\csname gfbsskip\rom\gfbstmpcount\endcsname
by \number\gfbsanzahlfest pt
\else
\global\advance\csname gfbsskip\rom\gfbstmpcount\endcsname
by \number\gfbsanzahlplus pt
\fi
\advance\gfbstmpcount by -1
\repeat
\egroup}
\outer\def\formel p#1#2#3{%
\global\gfbseinzug=#1%
\global\gfbszeile=1
\setskip 1011
\gfbsanzahlfest=0 \gfbsanzahlplus=0 \gfbsprefix={}\gfbselement={}%
\gfbsnurterminaltrue
\bgroup\gfbsvorgaenger=8 \gfbsformel #3{}{}{}{}\egroup
\expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
\ifx #2|% | markiert ein Urteil, sonst ist es eine Vorstellung
\gfbsprefix={\*55_}%
\ifnum\gfbsanzahl<4 % Formel besteht nur aus einem Terminal
\ifgfbsnurterminal
\errhelp=\gfbsnurterminalhilfe
\errmessage{No Frege formula entered}%
\gfbselement={\*55]}\gfbsanzahlfest=1
\else\gfbselement={\*5]9}\gfbsanzahlfest=2
\fi
\else\gfbselement={\*556}\gfbsanzahlfest=1
\fi
\else\ifx #2.%
\gfbsprefix={\*555}%
\ifnum\gfbsanzahl<4 % Formel besteht nur aus einem Terminal
\ifgfbsnurterminal
\errhelp=\gfbsnurterminalhilfe
\errmessage{No Frege formula entered}%
\gfbselement={\*555}\gfbsanzahlfest=0
\else\gfbselement={\*559}\gfbsanzahlfest=1
\fi
\else\gfbselement={\*554}\gfbsanzahlfest=0
\fi
\else
\errhelp=\gfbsfalscherstarthilfe
\errmessage{Unknown formula type `\string#2'}%
\gfbselement={\*___}\gfbsprefix={\*___}\gfbsanzahlfest=3
\fi\fi
\gfbsanzahlplus=3
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
\ifgfbskompakt
\global\advance\gfbsanzahl by \gfbsanzahlfest
\else
\global\advance\gfbsanzahl by \gfbsanzahlplus
\fi
\setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
\gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
\expandafter\getskip\the\gfbsskipi\relax
\ifnum\gfbsmaxformelzeile<\gfbsgehtbis
\global\gfbsmaxformelzeile=\gfbsgehtbis
\ifgfbszeigestats\zeigezeilenstatistik\fi
\fi
\gfbszaehler=\gfbshaengtan
\gfbsgrenze=1 \advance\gfbsgrenze by \gfbsgehtbis
\gfbszeile=\gfbssubststart
\ifnum\gfbsgrundeinzug>0
\advance\gfbseinzug by -\gfbsgrundeinzug
\ifnum\gfbseinzug>0\else
\errhelp=\gfbsposabstandhilfe
\errmessage{The formula must be positioned to the right of substitutions}%
\gfbseinzug=2
\fi\fi
\par\noindent\leavevmode
\vbox\bgroup\offinterlineskip
\loop
\ifnum\gfbszaehler<\gfbsgrenze
\bgroup
\count255=\csname gfbsskip\rom\gfbszeile\endcsname
\divide\count255 by 65536
\gfbstmpcount=\count255
\divide\gfbstmpcount by 3
\advance\gfbseinzug by -\gfbstmpcount
\multiply\gfbstmpcount by -3
\advance\gfbstmpcount by \count255
\ifcase\gfbstmpcount
\edef\gfbstoken{\noexpand\wdh\noexpand{\the\gfbseinzug
\noexpand}\noexpand\*___}%
\or
\advance\gfbseinzug by -1
\edef\gfbstoken{\noexpand\*"__\noexpand\wdh\noexpand{\the\gfbseinzug
\noexpand}\noexpand\*___}%
\or
\advance\gfbseinzug by -1
\edef\gfbstoken{\noexpand\*""_\noexpand\wdh\noexpand{\the\gfbseinzug
\noexpand}\noexpand\*___}%
\fi
\global\gfbselement=\expandafter{\gfbstoken}%
\egroup
\hbox{%
\nlp{\the\gfbsgrundeinzug}%
\the\csname gfbstoks\rom\gfbszeile\endcsname
\the\gfbselement
\the\csname gfbstoks\rom\gfbszaehler\endcsname
}%
\ifgfbslognotation
\dimen255=\csname gfbsskip\rom\gfbszeile\endcsname
\wlog{\string\nlp\string{\the\gfbsgrundeinzug\string}}%
\ifdim\dimen255>0pt \wlog{\the\csname gfbstoks\rom\gfbszeile\endcsname}\fi
\wlog{\the\gfbselement}%
\wlog{\the\csname gfbstoks\rom\gfbszaehler\endcsname}%
\fi
\global\csname gfbstoks\rom\gfbszaehler\endcsname={}%
\global\csname gfbsskip\rom\gfbszaehler\endcsname=0pt
\global\advance\gfbszaehler by 1
\global\csname gfbstoks\rom\gfbszeile\endcsname={}%
\global\csname gfbsskip\rom\gfbszeile\endcsname=0pt
\ifgfbskeinesubst\else
\global\advance\gfbszeile by 1
\fi
\repeat
\ifgfbskeinesubst\else
\loop
\ifnum\csname gfbsskip\rom\gfbszeile\endcsname>0
\hbox{\nlp{\the\gfbsgrundeinzug}\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\ifgfbslognotation
\wlog{\string\nlp\string{\the\gfbsgrundeinzug\string}}%
\wlog{\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\fi
\global\csname gfbstoks\rom\gfbszeile\endcsname={}%
\global\csname gfbsskip\rom\gfbszeile\endcsname=0pt
\global\advance\gfbszeile by 1
\repeat
\fi
\egroup
\gfbsgrundeinzug=0
}
\def\gfbsaus p#1,#2"#3"mit#4\also{%
\global\gfbsgrundeinzug=#1%
\gfbszeile=\the\gfbssubststart
\ifgfbskeinesubst
\ifnum #2>0
\errhelp=\gfbsnurnullinaushilfe
\errmessage{Zero expected; read ``#2''}%
\fi
\else
\advance\gfbszeile by #2%
\fi
\global\csname gfbstoks\rom\gfbszeile\endcsname={\zi{\hss\thinspace #3\hss}}%
\setskip{\the\gfbszeile}3{\the\gfbszeile}{\the\gfbszeile}%
\gfbsanzahlfest=0 \gfbsanzahlplus=0 \gfbsprefix={}\gfbselement={}%
\def\next{#4}%
\ifx\next\empty
\else\ifgfbskeinesubst
\errhelp=\gfbskeinesubsthilfe
\errmessage{Substitutions disabled}%
\else
\bgroup
\gfbsinnentrue
\advance\gfbszeile by 1
\gfbssubst #4\gfbssubstend
\egroup
\fi\fi
}
\outer\def\aus p#1,#2"#3"mit#4\also{%
\gfbsaus p#1,#2"#3"mit#4\also
}
\outer\def\verwende p#1"#2"{%
\gfbsaus p#1,0"#2"mit\also
}
\let\ziehan\verwende
\def\gfbssubst#1:#2 #3\gfbssubstend{%
\def\gfbstest{#1}%
\ifx\gfbstest\empty% Ende der Substitutionen
\null
\else
\def\gfbstest{#2}%
\ifx\gfbstest\empty
\if#1\ \else
\errhelp=\gfbsleeresubsthilfe
\errmessage{Empty substitution}%
\fi
\bgroup\gfbsformel \ {}{}{}{}{}\egroup
\else
\gfbsanzahlplus=0 \gfbsanzahlfest=0 \gfbsprefix={}\gfbselement={}%
\bgroup\gfbsvorgaenger=1 \gfbsformel #2{}{}{}{}{}\egroup
\fi
\expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
\gfbselement={\*_|_}\gfbsprefix={\*_|_}\gfbsanzahlfest=3 \gfbsanzahlplus=3
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
\ifgfbskompakt
\global\advance\gfbsanzahl by \gfbsanzahlfest
\else
\global\advance\gfbsanzahl by \gfbsanzahlplus
\fi
\setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
\gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
\gfbselement={\llap{$#1$}}%
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
\def\gfbstest{#3}%
\ifx\gfbstest\empty
\else
\gfbsanzahlplus=0 \gfbsanzahlfest=0 \gfbsprefix={}\gfbselement={}%
\bgroup
\gfbszeile=\gfbsgehtbis
\advance\gfbszeile by 1
\gfbssubst #3\gfbssubstend
\egroup
\fi
\fi
}
\outer\def\folgtmit p#1"#2"a#3p#4s#5{%
\gfbsgrundeinzug=#4 \advance\gfbsgrundeinzug by -#1
\advance\gfbsgrundeinzug by -1
\ifnum #1<#4\else
\errhelp=\gfbszweiteposzugrosshilfe
\errmessage{The second p-value must be larger than the first}%
\gfbsgrundeinzug=1
\fi
\ifnum 0>#5
\errhelp=\gfbskeinelaengehilfe
\errmessage{The s-value must be nonnegative}%
\fi
\ifx #3.%
\else
\ifx #3:\else
\errhelp=\gfbsdoppelpunktzahlhilfe
\errmessage{Invalid symbol `#3' for number of colons}%
\fi
\fi
\bss{#1}/m{#2}:#3\wdh{\the\gfbsgrundeinzug}\*___\wdh{#5}\*---\ess
\ifgfbslognotation
\wlog{\string\bss\string{#1\string}/m\string{#2\string}:#3%
\string\wdh\string{\the\gfbsgrundeinzug\string}\string\*___%
\string\wdh\string{#5\string}\string\*---\string\ess}%
\fi
}
\def\gfbsdurch p#1 #2\folgende{%
\ifgfbskeinesubst
\errhelp=\gfbskeinesubsthilfe
\errmessage{Substitutions disabled}%
\fi
\global\gfbsgrundeinzug=#1%
\gfbszeile=\the\gfbssubststart
\setskip{\the\gfbszeile}0{\the\gfbszeile}{\the\gfbszeile}%
\gfbsanzahlfest=0 \gfbsanzahlplus=0 \gfbsprefix={}\gfbselement={}%
\bgroup\gfbsinnentrue\gfbssubst #2\gfbssubstend\egroup
}
\outer\def\durch p#1 #2\folgende{%
\gfbsdurch p#1 #2\folgende
}
\def\formelName "#1"{%
\fono{#1}%
\ifgfbslognotation
\wlog{\string\fono\string{#1\string}}%
\wlog{==========}%
\wlog{}%
\fi
\ignorespaces
}
\outer\def\genannt{\formelName}
\def\zeigezeilenstatistik{\bgroup
\message{^^JMaximum number of lines: \the\gfbsmaxformelzeile. }%
\egroup}
\def\frege#1#2{%
\global\gfbszeile=1
\setskip 1011
\gfbselement={}\gfbsprefix={}\gfbsanzahlfest=0 \gfbsanzahlplus=0
\gfbsnurterminaltrue
\bgroup\gfbsvorgaenger=7 \gfbsformel #2{}{}{}{}\egroup
\expandafter\getskip\the\csname gfbsskip\rom\gfbszeile\endcsname
\ifx #1|% Urteil
\gfbsprefix={\*""_}%
\ifnum\gfbsanzahl<4
\ifgfbsnurterminal
\errhelp=\gfbsnurterminalhilfe
\errmessage{No Frege formula entered}%
\gfbselement={\*""[}\gfbsanzahlfest=1
\else\gfbselement={\*"]9}\gfbsanzahlfest=2
\fi
\else\gfbselement={\*""6}\gfbsanzahlfest=1
\fi
\else\ifx #1.%
\gfbsprefix={\*""5}%
\ifnum\gfbsanzahl<4
\ifgfbsnurterminal
\errhelp=\gfbsnurterminalhilfe
\errmessage{No Frege formula entered}%
\gfbselement={\*""5}\gfbsanzahlfest=0
\else\gfbselement={\*"--}\gfbsanzahlfest=2
\fi
\else\gfbselement={\*""4}\gfbsanzahlfest=0
\fi
\else
\errhelp=\gfbsfalscherstarthilfe
\errmessage{Unknown formula type `\string#1'}%
\gfbselement={\*""-}\gfbsprefix={\*""_}\gfbsanzahlfest=1
\fi\fi
\gfbsanzahlplus=1
\edef\gfbstoken{\the\gfbselement\the\csname gfbstoks\rom\gfbszeile\endcsname}%
\global\csname gfbstoks\rom\gfbszeile\endcsname=\expandafter{\gfbstoken}%
\ifgfbskompakt
\global\advance\gfbsanzahl by \gfbsanzahlfest
\else
\global\advance\gfbsanzahl by \gfbsanzahlplus
\fi
\setskip{\the\gfbszeile}{\the\gfbsanzahl}{\the\gfbshaengtan}{\the\gfbsgehtbis}%
\gfbsfuegelinksan{\gfbszeile}{\gfbsgehtbis}%
\expandafter\getskip\the\gfbsskipi\relax
\gfbszaehler=\gfbshaengtan \gfbsgrenze=1 \advance\gfbsgrenze by \gfbsgehtbis
\leavevmode\vtop\bgroup\offinterlineskip
\loop
\ifnum\gfbszaehler<\gfbsgrenze
\hbox{\gfbsstrut\the\csname gfbstoks\rom\gfbszaehler\endcsname}%
\global\csname gfbstoks\rom\gfbszaehler\endcsname={}%
\global\csname gfbsskip\rom\gfbszaehler\endcsname=0pt
\global\advance\gfbszaehler by 1
\repeat
\egroup
}
\def\klammerfrege#1#2#3#4#5#6#7{% \frege#1#2 mit Klammern #3 und #4;
% #5=1 <=> ohne \frege#1; #6 Boxtyp; #7 Boxnr.
\setbox0=\hbox{\ifnum#5=0 \frege#1{#2}\else#2\fi}\dimen0=\ht0
\setbox1=\hbox{(}\advance\dimen0 by .5\dp1
\setbox0=\hbox{\delimiterfactor=100 \delimitershortfall=8pt
$\left#3\vcenter{\box0}\right#4$}%
\dimen1=\ht0 \advance\dimen1 by -\dimen0
\ifnum#7>0 \ifnum#7<5
\global\setbox\csname gg#6box\romannumeral#7\endcsname=\hbox{%
\vbox to\dimen0{\hbox{\lower\dimen1\box0}}}%
\else\errhelp=\ggunbekannteboxnummer
\errmessage{The box number must be 1, 2, 3, or 4}%
\fi
\else\errhelp=\ggunbekannteboxnummer
\errmessage{The box number must be \string>0 and \string<5}%
\fi
\ignorespaces
}
\def\pfrege#1#2#3{\klammerfrege#2{#3}()0p{#1}}%
\def\bfrege#1#2#3{\klammerfrege#2{#3}[]0b{#1}}%
\def\pparens#1#2{\klammerfrege{}{$#2$}()1p{#1}}%
\def\bparens#1#2{\klammerfrege{}{$#2$}[]1b{#1}}%
\def\ggpoderbboxausgeben#1#2{\ifnum#1>0
\ifnum#1<5
\copy\csname gg#2box\romannumeral#1\endcsname
\else\errhelp=\ggunbekannteboxnummer
\errmessage{The box number must be 1, 2, 3, or 4}%
???
\fi
\else\errhelp=\ggunbekannteboxnummer
\errmessage{The box number must be \string>0 and \string<5}%
???
\fi}
\def\pfbox#1{\ggpoderbboxausgeben{#1}p}
\def\bfbox#1{\ggpoderbboxausgeben{#1}b}
%
% weitere Einstellungen
%
\def\erklaerung p#1#2 #3#4=#5{%
\ifgfbsuseGGstyle
\nlp{#1}\ifx #2|\*_[-\else\*_39\fi
$\;
\vtop{\hbox{%
\ifx #2:%
$#3#4$%
\else
\frege #3{#4}%
\fi}}
=\vtop{\hbox{$#5$}}$%
\else\nlp{#1}\ifx #2|\*_[-\else\*_3-\fi
$\left\lgroup
\left\lgroup
\vcenter{\hbox{\frege #3{#4}}}
\right\rgroup
\equiv\vcenter{\hbox{$#5$}}%
\right\rgroup$%
\fi
}
\def\gfvererbe#1#2#3#4{{%
\setbox0=\vbox{\offinterlineskip\hbox{\gfbsstrut$#1$}\hbox{$\vert$}\hbox{\gfbsstrut$#2$}}%
\setbox2=\vbox{\offinterlineskip\hbox{\gfbsstrut$#3$}\hbox{\phantom{$\vert$}}\hbox{\gfbsstrut$#4$}}%
\ifdim\ht0>\ht2
\global\gfbsfonosenken=0.5\ht0 \global\advance\gfbsfonosenken by -\dp0
\else\global\gfbsfonosenken=0.5\ht2 \global\advance\gfbsfonosenken by -\dp2 \fi
\vcenter{\unvbox0 }\!\left(\vcenter{\unvbox2 }\right.%
}}
\def\gffolgt#1#2#3{%
\!\!{\textstyle\phantom t#1\atop\textstyle\phantom)\widetilde#2}#3%
}
\def\gfgehoertan#1#2#3{%
\!\!{\textstyle\phantom t\underline#1\atop\textstyle\phantom{)}\widetilde#2}#3%
}
\def\gfeindeutig#1#2#3{{%
\setbox0=\vbox{\offinterlineskip\hbox{\gfbsstrut$#1$}\hbox{\rm I}\hbox{\gfbsstrut$#2$}}%
\setbox2=\vbox{\hbox{\gfbsstrut$#3$}}%
\ifdim\ht0>\ht2
\global\gfbsfonosenken=0.5\ht0 \global\advance\gfbsfonosenken by -\dp0
\else\global\gfbsfonosenken=0.5\ht2 \global\advance\gfbsfonosenken by -\dp2 \fi
\vcenter{\unvbox0 }\vcenter{\unvbox2 }%
}}
\def\G#1{%
\ifx#1!% 1. Eintrag
\hbox{$\scriptstyle\mathchar"0\hexno\cmbsyfam6E
\mkern-9.1mu
\mathchar"0\hexno\cmbsyfam6E$}%
\else\ifx#1^% 2. Eintrag
\mathbin{\raise.5ex
\hbox{$\scriptscriptstyle\mathchar"0\hexno\cmmibfam5F$}}%
\else\ifx#1>% 3. Eintrag
\hbox{$\mathchar"0269\thinspace$}%
\else\ifx#10% 4. Eintrag
{\rm0\raise.35ex\llap{$\scriptstyle\mathchar"026E$\kern.02em}}%
\else\ifx#11% 5. Eintrag
{\rm1\raise.35ex\llap{$\scriptscriptstyle\mathchar"026E$\kern.05em}}%
\else\ifx#1-% 6. Eintrag
\hbox{\lower1ex\hbox{$\acute{\raise1ex\hbox{{\tt\char95 }}}\>$}}%
\else\ifx#1~% 7. Eintrag
\hbox{%
\lower.7ex\hbox{$\acute{\raise.3ex\hbox{\smash{$\mathchar"0\hexno\msafam60$}}}\>$}}%
\else\ifx#1_% 8. Eintrag
\mathbin{\hbox{%
\vrule width0.4pt height0.25ex depth0pt
\vrule width0.6em height0.4pt depth0pt
\vrule width0.4pt height0.25ex depth0pt}}%
\else\ifx#1;% 9. Eintrag
\mathbin{\mskip-2mu;}%
\else\ifx#1<% 10. Eintrag
\mathbin{{\scriptstyle\mathchar"026E}%
\hskip-.375em \hbox to.5em{\rm
\leaders\hrule height 1.35ex depth -1.22ex\hfill}}%
\else\ifx#1*% 11. Eintrag
\mathord{{}_{\textstyle*\,}}%
\else\ifx#16% 12. Eintrag
\mathchar"0\hexno\msbfam67
\else\errhelp\ggkeinbekanntessymbol
\errmessage{^^JUnknown symbol after \string\G}%
???
\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
}
\newif\ifgefunden
\def\ist #1 in #2?{%
\def\finde##1#1##2\ednif{%
\ifx\empty##2\empty
\gefundenfalse
\else
\gefundentrue
\fi
\ignorespaces}%
\finde#2#1\ednif
}
\def\gfwerteverlauf#1{%
\ist #1 in ae?\ifgefunden
\hbox{{$\mathaccent"0027\csname k#1\endcsname$}}%
\else\errhelp=\ggkeinvokalbuchstabe
\errmessage{The operator must be applied to a lowercase (greek) vowel}%
\mathaccent"0027\ka
\fi}%
\def\kasl{\gfwerteverlauf{a}}
\def\kesl{\gfwerteverlauf{e}}
\def\GI{\hbox{\rm I\kern.05em}}
\def\GU{\hbox{\ufont
\setbox0=\hbox{\ufont U}\dimen0=\wd0 \advance\dimen0 by.05em
\rlap{\raise.1ex\hbox to\dimen0{\leaders\hrule height.11ex\hfill\kern.1em}}\kern-.01em
\lower\ufdimii\box0\kern\ufdimi
\llap{\raise.4ex\hbox{$\the\gftextfontaenderung\mathchar"0\hexno\msbfam1F$}}%
\kern0.1em
}}
\ifggsymloaded
\let\GUorg=\GU
\def\GU{\setbox0=\hbox{$\GUorg$}%
\mathord{\hbox to \wd0{\hss$\mathchar"0\hexno\ggfam55$\hss}}}%
\fi
\def\Gn{\hbox{\lower.2ex\hbox{\nfont
n\kern.1em}%
\llap{\raise.2ex\hbox{$\the\gftextfontaenderung\scriptstyle\mathchar"015E$}}}\kern.01em}
\ifggsymloaded
\let\Gnorg=\Gn
\def\Gn{\setbox0=\hbox{$\Gnorg$}%
\mathord{\hbox to \wd0{\hss$\the\gftextfontaenderung\mathchar"0\hexno\ggfam11$\hss}}}%
\fi
\def\Gbf{\mkern0mu \setbox0=\hbox{{\ffont f}}\ffont
\kern-.02em\copy0\kern-\wd0 \kern.04em\copy0\kern-\wd0
\kern-.02em\raise.03ex\box0 \kern.1em
\llap{\raise2ex\hbox{\ffont.}}}
\let\Gff\Gbf
\def\Guu{\mathop{\kern0pt
\smash{\hbox{$\scriptscriptstyle\mathchar"0\hexno\cmmibfam5E\mkern-4mu\mathchar"0\hexno\cmmibfam5E$}}}%
\limits^{\lower.1ex\hbox{{$\the\gftextfontaenderung\mathchar"015F$}}}}
\def\Gfm{\mathbin{\mathop{\kern0pt \smash{-}}%
\limits^{\raise.2ex\hbox{$\scriptstyle\mathchar"2\hexno\msafam61$}}}}
\def\Gsm{\mathbin{\mathop{\kern0pt \smash{-}}%
\limits^{\raise.2ex\hbox{$\scriptstyle\mathchar"2\hexno\msafam60$}}}}
\newbox\ggunrotbox \newbox\ggrotbox
\def\ggrotate#1#2#3{\global\setbox\ggunrotbox=\hbox{#1}%
\expandafter\ifx\csname rot#2\endcsname\relax
\message{^^JCan't do that kind of rotation.^^J}%
\global\setbox\ggrotbox=\copy\ggunrotbox
\else
\ifnum#3=0 \else\ht\ggunrotbox=#3ex \fi
\global\setbox\ggrotbox=\hbox{\csname rot#2\endcsname\ggunrotbox}%
\global\setbox\ggunrotbox=\hbox to\wd\ggrotbox{\hss#1\hss}%
\fi}
\def\prtggrotbox{\ifggrotiere\box\ggrotbox\else\box\ggunrotbox\fi}
\def\Gy{\ggrotate{\hbox{\accent22 y}}u1%
\mathbin{\prtggrotbox}}
\def\Ge{\ggrotate{\lower.65ex\hbox{%
$\scriptscriptstyle\mathchar"0\hexno\cmmibfam2C$}%
\llap{e\kern-.1em}}u1%
\mathbin{\,\prtggrotbox\,}}
\def\Gc{\ggrotate{\lower.64ex\hbox{%
$\scriptscriptstyle\mathchar"0\hexno\cmmibfam2C$}%
\llap{c\kern-.1em}}u1%
\mathbin{\,\prtggrotbox\,}}
\def\Gmf{\mathbin{\mathop{\kern0pt \smash{\scriptstyle\mathchar"2\hexno\msafam61}}%
\limits^{\lower1ex\hbox{$\scriptstyle-$}}}}
\def\Gf{\ggrotate{$f$}u0%
\mathord{\ifggrotiere\rlap{\raise.1ex\hbox{$\scriptstyle\gamma$}}\kern.025em\lower.5ex\box\ggrotbox
\else\rlap{\raise.4ex\hbox{$\scriptstyle\gamma$}}\kern.02em\box\ggunrotbox\fi}}
\def\GF{\ggrotate{$F$}u1%
\mathbin{\prtggrotbox}}
\def\Gl{\mathbin{\hbox{\l}}}
\def\Gp{\mathord{%
\rlap{\raise.45ex\hbox{$\scriptstyle\gamma$}}\kern.15em
\hbox{$p$}\,}}
\def\Gss{\ggrotate{\ss}u0%
\mathbin{\ifggrotiere\lower.5ex\box\ggrotbox\else\box\ggunrotbox\fi}}
\let\Gsz\Gss
% Zuordnung nach TUGboat, V.9, p.20
\def\gA{A}
\def\gB{B}
\def\gG{{\it\Gamma}}
\def\gD{{\it\Delta}}
\def\gL{{\it\Lambda}}
\def\gM{M}
\def\gN{N}
\def\gR{P}
\def\gS{{\it\Sigma}}
\def\gF{{\it\Phi}}
\def\gQ{X}
\def\gY{{\it\Psi}}
\def\gE{E}
\def\gZ{Z}
\def\gH{H}
\def\gJ{{\it\Theta}}
\def\gI{I}
\def\gK{K}
\def\gX{{\it\Xi}}
\def\gO{O}
\def\gP{{\it\Pi}}
\def\gT{T}
\def\gU{{\it\Upsilon}}
\def\gW{{\it\Omega}}
\def\ka{\alpha}
\def\kb{\beta}
\def\kg{\gamma}
\def\kd{\delta}
\def\ke{\epsilon}
\def\kz{\zeta}
\def\kh{\eta}
\def\kj{\vartheta}
\def\ki{\iota}
\def\kk{\kappa}
\def\kl{\lambda}
\def\km{\mu}
\def\kn{\nu}
\def\kx{\xi}
\def\ko{o}
\def\kp{\pi}
\def\kr{\varrho}
\def\ks{\sigma}
\def\kt{\tau}
\def\ku{\upsilon}
\def\kf{\varphi}
\def\kq{\chi}
\def\ky{\psi}
\def\kw{\omega}
\def\da{{\frak a}}
\def\dd{{\frak d}}
\def\de{{\frak e}}
\def\df{{\frak f}}
\def\dF{{\frak F}}
\def\dc{{\frak c}}
\def\dg{{\frak g}}
\def\dm{{\frak m}}
\def\dn{{\frak n}}
\def\ddo{{\frak o}}
\def\ddp{{\frak p}}
\def\dq{{\frak q}}
\def\dr{{\frak r}}
\def\dt{{\frak t}}
\def\du{{\frak u}}
\def\trenner #1{%
\vskip 0pt plus 0.5\baselineskip minus 0.25\baselineskip
\centerline{\hbox to 0.#1\hsize{\leaders\hrule height 1pt\hfill}}%
\vskip 2pt plus 0.5\baselineskip minus 0.25\baselineskip
}
\def\gfggtrenner{\hbox to 6\gfbseinheit{\leaders\hrule height 1pt\hfill}%
\ \lower.5ex\hbox{$\bullet$}\
\hbox to 6\gfbseinheit{\leaders\hrule height 1pt\hfill}%
}
\def\ggtrenner{%
\vskip 0pt plus 0.5\baselineskip minus 0.25\baselineskip
\centerline{\hskip\leftskip\gfggtrenner\hskip\rightskip}%
\vskip 2pt plus 0.5\baselineskip minus 0.25\baselineskip
}
\let\nlpc\nzpz % NewLine Position Character
\let\ci\zi % Character Inside
\let\ce\ze % Character End
\let\rep\wdh % REPeat
\def\bcc#1/#2#3:#4#5\ecc{% ConClusion
\bss#1/#2#3:#4#5\ess
}
\let\formula\formel
\let\followswith\folgtmit
\let\named\genannt
\let\use\verwende
\let\decollator\trenner
\let\separator\ggtrenner
\outer\def\outof p#1,#2"#3"with#4\thatis{%
\gfbsaus p#1,#2"#3"mit#4\also
}
\outer\def\substituting p#1 #2\whichgives{%
\gfbsdurch p#1 #2\folgende
}
\let\gfdefinition\erklaerung
% Local Variables:
% coding: iso-latin-9-unix
% End: