% 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: