1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
|
\documentclass[12pt]{article}
\usepackage{frege}
\usepackage{amsmath}
%% For condensed itemize:
\newcommand{\squishlist}{
\begin{list}{$\bullet$}{
\setlength{\itemsep}{0pt}
\setlength{\parsep}{0pt}
\setlength{\topsep}{0pt}
\setlength{\partopsep}{0pt}
\setlength{\leftmargin}{1em}
\setlength{\labelwidth}{1em}
\setlength{\parskip}{0pt}
\setlength{\partopsep}{0pt}
\setlength{\rightmargin}{0pt}
\setlength{\labelsep}{0.5em}}}
\newcommand{\squishlistend}{\end{list}}
\title{frege.sty \\ A \LaTeXe Package for Typesetting Begriffsschrift}
\author{Quirin Pamp \\ \texttt{Quirin.Pamp.2009@my.bristol.ac.uk}}
\begin{document}
\maketitle
\section{Background}
\subsection{begriff.sty}
This package is based on begriff.sty released under the GNU General Public
License.
Copyright (C) 2003 by Josh Parsons (josh@coombs.anu.edu.au) with changes made in
October 2004 by Richard Heck (heck@fas.harvard.edu) and minor changes by Josh
Parsons to fix a problem with linespacing made in May 2005.
While I could not have done so without the aforementioned work, I have reworked the
package from the ground up, to the point where some of the underlying approaches
have changed. On the downside this means there is no simple way of converting
anything typeset using begriff.sty to use this package instead. I felt this was
necessary to achieve a end result I was happy with.
\subsection{GNU General Public License}
This package and all accompanying documentation is released under the GNU General
Public License. It 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 2 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, write to the Free Software Foundation, Inc., 59 Temple Place -
Suite 330, Boston, MA 02111, USA. (or just search for it online... Seriously.)
\subsection{Changes as Compared to begriff.sty}
\squishlist
\item correct relative lengths of the content stroke with respect to other
strokes attached to it;
\item content strokes point at the middle of the followint symbols, rather
than the bottom;
\item greater width for the assertion stroke as compared to the content stroke;
\item a more intuitive structure for the conditional (arguments are now given in
the same order as they appear on the left of a completed formula);
\item the command for the conditional with empty arguments now results in a
vertical line (conditional stroke) on it's own the other strokes are added as
the arguments;
\item the linewidth is properly accounted for so that things remain properly
centered when scaled;
\squishlistend
\subsection{Changes in Version 1.1}
\squishlist
\item added a optional scale factor to all basic strokes;
\item simplified the code for Fbracket in terms of that for Fbox;
\item rearranged the code in the style file in a more logical way;
\squishlistend
\subsection{Changes in Version 1.2}
\squishlist
\item added a new command ``Fargument'' for typesetting arguments;
\item added a new command ``Fstrut'' to be used in conjunction with Fargument;
\item changed Fbaselength to be equal to the full length of a basi stroke (20pt);
\item fixed a bug where the scale factor introduced in version 1.1 does not reset
after all uses;
\squishlistend
\subsection{Changes and Features yet to come}
\squishlist
\item incorporation of other frege related material such as fge.sty so as to put
all frege related material in a single package;
\item a vertical shorthand stroke such as used by Frege for typesetting arguments
in ``Begriffsschrift'';
\squishlistend
\section{Features and Usage}
\subsection{Commands}
\subsubsection{Basic Commands}
The following is a list of the basic commands provided by this package along with
accompanying output. The conditional is treated sepperately.
\begin{flalign*}
&\mbox{\textbackslash Fcontent[1]} & &\Fcontent & & &\\
&\mbox{\textbackslash Fncontent[1]} & &\Fncontent\\
&\mbox{\textbackslash Fnncontent[1]} & &\Fnncontent\\
&\mbox{\textbackslash Facontent[1]} & &\Facontent\\
&\mbox{\textbackslash Fancontent[1]} & &\Fancontent\\
&\mbox{\textbackslash Fanncontent[1]} & &\Fanncontent\\
&\mbox{\textbackslash Fquant[1]\{a\}} & &\Fquant{a}\\
&\mbox{\textbackslash Fnquant[1]\{a\}} & &\Fnquant{a}\\
&\mbox{\textbackslash Fnnquant[1]\{a\}} & &\Fnnquant{a}\\
&\mbox{\textbackslash Fquantn[1]\{a\}} & &\Fquantn{a}\\
&\mbox{\textbackslash Fquantnn[1]\{a\}} & &\Fquantnn{a}\\
&\mbox{\textbackslash Fnquantn[1]\{a\}} & &\Fnquantn{a}\\
&\mbox{\textbackslash Fnquantnn[1]\{a\}} & &\Fnquantnn{a}\\
&\mbox{\textbackslash Fnnquantn[1]\{a\}} & &\Fnnquantn{a}\\
&\mbox{\textbackslash Fnnquantnn[1]\{a\}} & &\Fnnquantnn{a}\\
&\mbox{\textbackslash Faquant[1]\{a\}} & &\Faquant{a}\\
&\mbox{\textbackslash Fanquant[1]\{a\}} & &\Fanquant{a}\\
&\mbox{\textbackslash Fannquant[1]\{a\}} & &\Fannquant{a}\\
&\mbox{\textbackslash Faquantn[1]\{a\}} & &\Faquantn{a}\\
&\mbox{\textbackslash Faquantnn[1]\{a\}} & &\Faquantnn{a}\\
&\mbox{\textbackslash Fanquantn[1]\{a\}} & &\Fanquantn{a}\\
&\mbox{\textbackslash Fanquantnn[1]\{a\}} & &\Fanquantnn{a}\\
&\mbox{\textbackslash Fannquantn[1]\{a\}} & &\Fannquantn{a}\\
&\mbox{\textbackslash Fannquantnn[1]\{a\}} & &\Fannquantnn{a}\\
\end{flalign*}
This may seem like a daunting list, but there is an exceedingly simple way to think
about it. In a sense there are only two commands \textbackslash Fcontent[1] and
\textbackslash Fquant[1]\{\}. These two commands can be augmented with a
combination of as and ns so as to add assertion and negation strokes respectively.
Any stroke that is asserted (has a fat vertical line at the start) starts with
`\textbackslash Fa'. This may be followed by either one or two or no `n' to add one
or two or no negation strokes (the small vertical lines below the assertion
stroke). Next comes the name of the main command, either `quant' or `content'.
Finally the quantifiers may be followed by either one or two `n' to add one or two
negation strokes to the content stroke after the quantifier's depression.
Consider also that many of these commands are only really present for completeness
sake. It is difficult to imagine a situation where a twice negated quantifier with
twice negated content would ever be needed.
Since version 1.1 all basic strokes also have an optional scaling factor. A command
followed by [.5], for example would produce a stroke exactly half the default
length while [2] produces a stroke twice the default length. (The default length
is given by \textbackslash Fbaselength which is set to 20pt. Scaling allows for
greater control in the total length of formula as well as for a shorter syntax.
(We can replace expressions like \textbackslash Facontent \textbackslash Fcontent
with \textbackslash Facontent[2].) Care must be taken not to set a length that is
shorter than what is needed to fit all the parts of some basic stroke. This will
lead to negative lengths and hence unpredictable output.
All quantifiers also have a mandatory argument that specifies the variable
associated with the quantifier. (Mandatory arguments are contained in a set of
curly brackets \{ and \}). This argument should be a single small letter and
will be typeset above the semi circular depression in the assertion stroke in
mathfrak font which is provided by tha amssymb package. This font can be used in
maths mode by using the command `\textbackslash mathfrak\{\}'. Note that all the
commands provided by this package may be used in both math and text mode. (Though
math mode usually results in better formatting.)
Finally one may combine the above commands in arbitrary combinations which will
result in gapless longer strokes. (Eg.: $\Faquant[0.6]{a}\Fnquantn[1.4]{b}A$)
which may be roughly translated into english as ``for all $\mathfrak{a}$ there
exists a $\mathfrak{b}$ such that $A$''. (The commands I used for this expression
are \$\textbackslash Faquant\{a\}\textbackslash Fnquantn\{b\}A\$).
\subsubsection{Conditional}
The conditional is the most important command in this package since it gives
Frege's Begriffsschrift it's two dimensional structure.\\
The syntax for the Fconditional command is as follows:
\textbackslash Fconditional[\textless option\textgreater]
\{\textless consequent\textgreater\}\{\textless antecedent\textgreater\}\\
The arguments may in principle be anything, but you will only get a begriffschrift
formula if the arguments are themselves given by appropriate commands from the list
of basic commands given earlier. As an example, an asserted conjunction between $A$
and $B$ would be given as follows:
\$\textbackslash Fconditional[\textbackslash Fancontent]\{\textbackslash Fncontent
A\}\{\textbackslash Fcontent B\}\$ \\
and produce the following output:
\begin{align*}
\Fbox{\Fconditional[\Fancontent]{\Fncontent A}{\Fcontent B}}
\end{align*}
In addition Fconditional may be nested as it's own argument to arbitrary depth.
Nesting in the option is not recommended. \\
A conditional with nested consequent may be given as follows:
\$\textbackslash Fconditional[\textbackslash Facontent]\{\textbackslash
Fcontent\textbackslash Fconditional\{\textbackslash Fcontent A\}\{\textbackslash
Fcontent B\}\}\{\textbackslash Fcontent\textbackslash Fcontent C\}\$\\
and produces the following output:
\begin{align*}
\Fbox{\Fconditional[\Facontent]{\Fcontent\Fconditional{\Fcontent A}
{\Fcontent B}}{\Fcontent[2] C}}
\end{align*}
A conditional with nested antecedent may be given as follows:
\$\textbackslash Fconditional[\textbackslash Facontent]\{\textbackslash Fcontent
\textbackslash Fcontent A\}\{\textbackslash Fcontent\textbackslash Fconditional
\{\textbackslash Fcontent B\}\{\textbackslash Fcontent C\}\}\$\\
and produces the following output:
\begin{align*}
\Fbox{\Fconditional[\Facontent]{\Fcontent[2] A}{\Fcontent\Fconditional%
{\Fcontent B}{\Fcontent C}}}
\end{align*}
Each section of a content stroke may thus be replaced with any of the strokes given
by the list of basic commands. Note that it is up to the user to place the
appropriate number of strokes in each argument to ensure that the content strokes
all line up on the right hand side.
\subsubsection{Brackets and Boxes}
There are two more commands to be considered:
\textbackslash Fbracket\{\textless complex expression\textgreater\}
\textbackslash Fbox\{\textless complex expression\textgreater\}\\
Both Fbox and Fbracket take what I have called a `complex expression' for their
argument. A `complex expression' is any formula in begriffsschrift that has at
least one conditional in it. It is generally a good idea to put all complex
expressions into either a Fbox or a Fbracket. It is never necessary to place a
complex expressions into both an Fbox and an Fbracket since an Fbox simply is a
Fbracket without the actual brackets. Fbracket exists only for convenience with
the same effect being achieved by \textbackslash left(\textbackslash Fbox\{\}
\textbackslash right).
The reason why the Fbox is a good idea, is that the baseline is very near the top of
a complex expression of Begriffsschrift, which can make for some odd formatting
effects. In addition to placing the baseline at the middel of a complex expression
an Fbox ensures the expression is treated by LaTeX as a single object and given
enough space.
Finally a complex expression may not format correctly in some environments (like
the align* environment for example) unless it is placed in an Fbox. In short,
always use an Fbox (or Fbracket).
\subsection{Arguments and Struts}
Since version 1.2 two arguments have been added that allow for the typesetting of
arguments. The syntax for the argument command is as follows:
\textbackslash Fargument[\textless absent premise\textgreater]\{\textless premise
1\textgreater\}\{\textless premise 2\textgreater\}\{\textless conclusion
\textgreater\}\\
In the following esample the optional argument for the absent premise takes the
value `$X$' the premises are the two formulas above the therfore line and the
conclusion is the formula below the therefore line. The Begriffschrift expressions
in the arguments of the Fargument command do not need to be placed in an Fbox,
since the Fargument command works by boxing it's arguments allready.
\begin{align*}
\Fargument[X]
{\Fconditional[\Facontent]
{\Fcontent[2] A}
{\Fcontent\Fconditional{\Fcontent B}{\Fcontent C}}}
{\Fstrut[2]\Facontent C}
{\Fstrut[2]\Facontent A}
\end{align*}
where $X=\Facontent B$; (this is typeset seperately from the Fargument command);
The three begriffsschrift formulas above are in fact aligned leftbound. To make
them appear rightbound no matter what the relative lengths of $A$, $B$, and $C$,
the command ``Fstrut'' has been used in front of $\Facontent C$ and $\Facontent A$.
The command \textbackslash Fstrut[1] works exactly like an invisible content
stroke, that is it inserts space of length Fbaselength. Like all basic strokes it
can be scaled via an optional scale factor.
\subsection{Lengths}
In theory all the dimensions in this package can be changed with the command
\textbackslash setlength\{\textless name of length\textgreater\}\{\textless new
value\textgreater\}, though I have not done a great deal of testing and recommend
sticking to the default values. The following then is a table of all lengths: \\
\begin{tabular}{|l|l|l|}
\hline
name & default value & description \\
\hline
\textbackslash Fbaselength & 20pt & the length of the basic strokes \\
\textbackslash Flinewidth & 0.5pt & the line width \\
\textbackslash Fspace & 2pt & seperation between lines and text/formula \\
\textbackslash Fassertwidth & 3\textbackslash Flinewidth & width of assert
stroke \\
\textbackslash Fraiseheight & 1ex-\textbackslash Flinewidth & height of content
lines above baseline \\
\textbackslash Fnegsep & 3\textbackslash Flinewidth & seperation between a
double negation \\
\textbackslash Fnegshort & 2\textbackslash Flinewidth & space between negation
stroke and baseline \\
\textbackslash Fquantwidth & 6pt & width of the semi-circular quantifier
depression \\
\hline
\end{tabular}
the height of the conditional stroke is determined by the size of the contents of
the conditionals argument, as well as the baselineskip of the surrounding text. It
cannot be changed manually.
\subsection{Final Example}
The Geach-Kaplan sentance (with thanks to Marcus Rossberg):
\begin{align*}
\Fbox%
{%
\Fconditional[{\Facontent[.2]\Fnquant{F}\Fcontent[.2]}]%
{%
\Fcontent%
\Fconditional%
{%
\Fcontent[3]%
\Fbox%
{%
f\Fbracket%
{%
\Fconditional[\Faquant{a}]%
{\Fcontent C\mathfrak{(a)}}%
{\Fcontent \mathfrak{F(a)}}%
}%
}%
}%
{\Fcontent\Fnquantn{b}\Fcontent\mathfrak{F(b)}}%
}%
{%
\Fcontent[0.4]%
\Fquant[0.6]{c}%
\Fquant[0.6]{d}%
\Fcontent[0.4]%
\Fconditional%
{%
\Fncontent%
\Fconditional{\Fcontent\mathfrak{c=d}}{\Fcontent\mathfrak{F(d)}}%
}%
{%
\Fncontent%
\Fconditional{\Fncontent\mathfrak{F(c)}}{\Fcontent A\mathfrak{(c,d)}}%
}%
}%
}%
\end{align*}
And that is all. \\
For comments, suggestions, identified errors, email me at \\
\textless Q.Pamp.2009 at my.bristol.ac.uk\textgreater.
% don't like storing my full email in a text file on the interneti,
% so I replaced the @ with " at ";
\end{document}
|