comparison final_pre/bussproofs.sty @ 7:28f900230c26

add final_pre
author ryokka
date Mon, 19 Feb 2018 23:32:24 +0900
parents
children
comparison
equal deleted inserted replaced
6:d927f6b3d2b3 7:28f900230c26
1 %
2 \def\BPmessage{Proof Tree (bussproofs) style macros. Version 1.1.}
3 % bussproofs.sty. Version 1.1
4 % (c) 1994,1995,1996,2004,2005,2006, 2011.
5 % Copyright retained by Samuel R. Buss.
6 %
7 % ==== Legal statement: ====
8 % This work may be distributed and/or modified under the
9 % conditions of the LaTeX Project Public License, either version 1.3
10 % of this license or (at your option) any later version.
11 % The latest version of this license is in
12 % http://www.latex-project.org/lppl.txt.
13 % and version 1.3 or later is part of all distributions of LaTeX
14 % version 2005/12/1 or later.
15 %
16 % This work has the LPPL maintenance status 'maintained'.
17 %
18 % The Current Maintainer of the work is Sam Buss.
19 %
20 % This work consists of bussproofs.sty.
21 % =====
22 % Informal summary of legal situation:
23 % This software may be used and distributed freely, except that
24 % if you make changes, you must change the file name to be different
25 % than bussproofs.sty to avoid compatibility problems.
26 % The terms of the LaTeX Public License are the legally controlling terms
27 % and override any contradictory terms of the "informal situation".
28 %
29 % Please report comments and bugs to sbuss@ucsd.edu.
30 %
31 % Thanks to Felix Joachimski for making changes to let these macros
32 % work in plain TeX in addition to LaTeX. Nothing has been done
33 % to see if they work in AMSTeX. The comments below mostly
34 % are written for LaTeX, however.
35 % July 2004, version 0.7
36 % - bug fix, right labels with descenders inserted too much space.
37 % Thanks to Peter Smith for finding this bug,
38 % see http://www.phil.cam.ac.uk/teaching_staff/Smith/LaTeX/
39 % March 2005, version 0.8.
40 % Added a default definition for \fCenter at Denis Kosygin's
41 % suggestion.
42 % September 2005, version 0.9.
43 % Fixed some subtle spacing problems, by adding %'s to the end of
44 % few lines where they were inadvertantly omitted. Thanks to
45 % Arnold Beckmann for finding and fixing this problem.
46 % April 2006, version 0.9.1. Updated comments and testbp2.tex file.
47 % No change to the actual macros.
48 % June 2006, version 1.0. The first integer numbered release.
49 % New feature: root of proof may now be at the bottom instead of
50 % at just the top. Thanks to Alex Hertel for the suggestion to implement
51 % this.
52 % June 2011, version 1.1.
53 % New feature: 4-ary and 5-ary inferences. Thanks to Thomas Strathmann
54 % for taking the initiative to implement these.
55 % Four new commands: QuaternaryInf(C) and QuinaryInf(C).
56 % Bug fix: \insertBetweenHyps now works for proofs with root at top and
57 % three or more hypotheses..
58
59 % A good exposition of how to use bussproofs.sty (version 0.9) has been written
60 % by Peter Smith and is available on the internet.
61 % The comments below also describe the features of bussproofs.sty,
62 % including user-modifiable parameters.
63
64 % bussproofs.sty allows the construction of proof trees in the
65 % style of the sequent calculus and many other proof systems
66 % One novel feature of these macros is they support the horizontal
67 % alignment according to some center point specified with the
68 % command \fCenter. This is the style often used in sequent
69 % calculus proofs.
70 % Proofs are specified in left-to-right traversal order.
71 % For example a proof
72 % A B
73 % -----
74 % D C
75 % ---------
76 % E
77 %
78 % if given in the order D,A,B,C,E. Each line in the proof is
79 % specified according to the arity of the inference which generates
80 % it. Thus, E would be specified with a \BinaryInf or \BinaryInfC
81 % command.
82 %
83 % The above proof tree could be displayed with the commands:
84 %
85 % \AxiomC{D}
86 % \AxiomC{A}
87 % \AxiomC{B}
88 % \BinaryInfC{C}
89 % \BinaryInfC{E}
90 % \DisplayProof
91 %
92 % Inferences in a proof may be nullary (axioms), unary, binary, or
93 % trinary.
94 %
95 % IMPORTANT: You must give the \DisplayProof command to make the proof
96 % be printed. To display a centered proof on a line by itself,
97 % put the proof inside \begin{center} ... \end{center}.
98 %
99 % There are two styles for specifying horizontal centering of
100 % lines (formulas or sequents) in a proof. One format \AxiomC{...}
101 % just centers the formula {...} in the usual way. The other
102 % format is \Axiom$...\fCenter...$. Here, the \fCenter specifies
103 % the center of the formula. (It is permissable for \fCenter to
104 % generate typeset material; in fact, I usually define it to generate
105 % the sequent arrow.) In unary inferences, the \fCenter
106 % positions will be vertically aligned in the upper and lower lines of
107 % the inference. Unary, Binary, Trinary inferences are specified
108 % with the same format as Axioms. The two styles of centering
109 % lines may be combined in a single proof.
110 %
111 % By using the optional \EnableBpAbbreviations command, various
112 % abbreviated two or three letter commands are enabled. This allows,
113 % in particular:
114 % \AX and \AXC for \Axiom and \AxiomC, (resp.),
115 % \DP for \DisplayProof,
116 % \BI and \BIC for \BinaryInf and \BinaryInfC,
117 % \UI and \UIC for \UnaryInf and \UnaryInfC,
118 % \TI and \TIC for \TrinaryInf and \TrinaryInfC,
119 % \LL and \RL for \LeftLabel and \RightLabel.
120 % See the source code below for additional abbreviations.
121 % The enabling of these short abbreviations is OPTIONAL, since
122 % there is the possibility of conflicting with names from other
123 % macro packages.
124 %
125 % By default, the inferences have single horizontal lines (scores)
126 % This can be overridden using the \doubleLine, \noLine commands.
127 % These two commands affect only the next inference. You can make
128 % make a permanent override that applies to the rest of the current
129 % proof using \alwaysDoubleLine and \alwaysNoLine. \singleLine
130 % and \alwaysSingleLine work in the analogous way.
131 %
132 % The macros do their best to give good placements of for the
133 % parts of the proof. Several macros allow you to override the
134 % defaults. These are \insertBetweenHyps{...} which overrides
135 % the default spacing between hypotheses of Binary and Trinary
136 % inferences with {...}. And \kernHyps{...} specifies a distance
137 % to shift the whole block of hypotheses to the right (modifying
138 % the default center position.
139 % Other macros set the vertical placement of the whole proof.
140 % The default is to try to do a good job of placement for inferences
141 % included in text. Two other useful macros are: \bottomAlignProof
142 % which aligns the hbox output by \DisplayProof according to the base
143 % of the bottom line of the proof, and \centerAlignProof which
144 % does a precise center vertical alignment.
145 %
146 % Often, one wishes to place a label next to an inference, usually
147 % to specify the type of inference. These labels can be placed
148 % by using the commands \LeftLabel{...} and \RightLabel{...}
149 % immediately before the command which specifies the inference.
150 % For example, to generate
151 %
152 % A B
153 % --------- X
154 % C
155 %
156 % use the commands
157 % \AxiomC{A}
158 % \AxiomC{B}
159 % \RightLabel{X}
160 % \BinaryInfC{C}
161 % \DisplayProof
162 %
163 % The \DisplayProof command just displays the proof as a text
164 % item. This allows you to put proofs anywhere normal text
165 % might appear; for example, in a paragraph, in a table, in
166 % a tabbing environment, etc. When displaying a proof as inline text,
167 % you should write \DisplayProof{} (with curly brackets) so that
168 % LaTeX will not "eat" the white space following the \DisplayProof
169 % command.
170 % For displaying proofs in a centered display: Do not use the \[...\]
171 % construction (nor $$...$$). Instead use
172 % \begin{center} ... \DisplayProof\end{center}.
173 % Actually there is a better construction to use instead of the
174 % \begin{center}...\DisplayProof\end{center}. This is to
175 % write
176 % \begin{prooftree} ... \end{prooftree}.
177 % Note there is no \DisplayProof used for this: the
178 % \end{prooftree} automatically supplies the \DisplayProof
179 % command.
180 %
181 % Warning: Any commands that set line types or set vertical or
182 % horizontal alignment that are given AFTER the \DisplayProof
183 % command will affect the next proof, no matter how distant.
184
185
186
187
188 % Usages:
189 % =======
190 %
191 % \Axiom$<antecedent>\fCenter<succedent>$
192 %
193 % \AxiomC{<whole sequent or formula}
194 %
195 % Note that the use of surrounding {}'s is mandatory in \AxiomC and
196 % is prohibited in $\Axiom. On the other hand, the $'s are optional
197 % in \AxiomC and are mandatory in \Axiom. To typeset the argument
198 % to \AxiomC in math mode, you must use $'s (or \(...\) ).
199 % The same comments apply to the inference commands below.
200 %
201 % \UnaryInf$<antecendent>\fCenter<succedent>$
202 %
203 % \UnaryInfC{<whole sequent or formula>}
204 %
205 % \BinaryInf$<antecendent>\fCenter<succedent>$
206 %
207 % \BinaryInfC{<whole sequent or formula>}
208 %
209 % \TrinaryInf$<antecendent>\fCenter<succedent>$
210 %
211 % \TrinaryInfC{<whole sequent or formula>}
212 %
213 % \QuaternaryInf$<antecendent>\fCenter<succedent>$
214 %
215 % \QuaternaryInfC{<whole sequent or formula>}
216 %
217 % \QuinaryInf$<antecendent>\fCenter<succedent>$
218 %
219 % \QuinaryInfC{<whole sequent or formula>}
220 %
221 % \LeftLabel{<text>} - Puts <text> as a label to the left
222 % of the next inference line. (Works even if
223 % \noLine is used too.)
224 %
225 % \RightLabel{<text>} - Puts <text> as a label to the right of the
226 % next inference line. (Also works with \noLine.)
227 %
228 % \DisplayProof - outputs the whole proof tree (and finishes it).
229 % The proof tree is output as an hbox.
230 %
231 %
232 % \kernHyps{<dimen>} - Slides the upper hypotheses right distance <dimen>
233 % (This is similar to shifting conclusion left)
234 % - kernHyps works with Unary, Binary and Trinary
235 % inferences and with centered or uncentered sequents.
236 % - Negative values for <dimen> are permitted.
237 %
238 % \insertBetweenHyps{...} - {...} will be inserted between the upper
239 % hypotheses of a Binary or Trinary Inferences.
240 % It is possible to use negative horizontal space
241 % to push them closer together (and even overlap).
242 % This command affects only the next inference.
243 %
244 % \doubleLine - Makes the current (ie, next) horizontal line doubled
245 %
246 % \alwaysDoubleLine - Makes lines doubled for rest of proof
247 %
248 % \singleLine - Makes the current (ie, next) line single
249 %
250 % \alwaysSingleLine - Undoes \alwaysDoubleLine or \alwaysNoLine.
251 %
252 % \noLine - Make no line at all at current (ie next) inference.
253 %
254 % \alwaysNoLine - Makes no lines for rest of proof. (Untested)
255 %
256 % \solidLine - Does solid horizontal line for current inference
257 %
258 % \dottedLine - Does dotted horizontal line for current inference
259 %
260 % \dashedLine - Does dashed horizontal line for current inference
261 %
262 % \alwaysSolidLine - Makes the indicated change in line type, permanently
263 % \alwaysDashedLine until end of proof or until overridden.
264 % \alwaysDottedLine
265 %
266 % \bottomAlignProof - Vertically align proof according to its bottom line.
267 % \centerAlignProof - Vertically align proof proof precisely in its center.
268 % \normalAlignProof - Overrides earlier bottom/center AlignProof commands.
269 % The default alignment will look good in most cases,
270 % whether the proof is displayed or is
271 % in-line. Other alignments may be more
272 % appropriate when putting proofs in tables or
273 % pictures, etc. For custom alignments, use
274 % TeX's raise commands.
275 %
276 % \rootAtTop - specifies that proofs have their root a the top. That it,
277 % proofs will be "upside down".
278 % \rootAtBottom - (default) Specifies that proofs have root at the bottom
279 % The \rootAtTop and \rootAtBottom commands apply *only* to the
280 % current proof. If you want to make them persistent, use one of
281 % the next two commands:
282 % \alwaysRootAtTop
283 % \alwaysRootAtBottom (default)
284 %
285
286 % Optional short abbreviations for commands:
287 \def\EnableBpAbbreviations{%
288 \let\AX\Axiom
289 \let\AXC\AxiomC
290 \let\UI\UnaryInf
291 \let\UIC\UnaryInfC
292 \let\BI\BinaryInf
293 \let\BIC\BinaryInfC
294 \let\TI\TrinaryInf
295 \let\TIC\TrinaryInfC
296 \let\QI\QuaternaryInf
297 \let\QIC\QuaternaryInfC
298 \let\QuI\QuinaryInf
299 \let\QuIC\QuinaryInfC
300 \let\LL\LeftLabel
301 \let\RL\RightLabel
302 \let\DP\DisplayProof
303 }
304
305 % Parameters which control the style of the proof trees.
306 % The user may wish to override these parameters locally or globally.
307 % BUT DON'T CHANGE THE PARAMETERS BY CHANGING THIS FILE (to avoid
308 % future incompatibilities). Instead, you should change them in your
309 % TeX document right after including this style file in the
310 % header material of your LaTeX document.
311
312 \def\ScoreOverhang{4pt} % How much underlines extend out
313 \def\ScoreOverhangLeft{\ScoreOverhang}
314 \def\ScoreOverhangRight{\ScoreOverhang}
315
316 \def\extraVskip{2pt} % Extra space above and below lines
317 \def\ruleScoreFiller{\hrule} % Horizontal rule filler.
318 \def\dottedScoreFiller{\hbox to4pt{\hss.\hss}}
319 \def\dashedScoreFiller{\hbox to2.8mm{\hss\vrule width1.4mm height0.4pt depth0.0pt\hss}}
320 \def\defaultScoreFiller{\ruleScoreFiller} % Default horizontal filler.
321 \def\defaultBuildScore{\buildSingleScore} % In \singleLine mode at start.
322
323 \def\defaultHypSeparation{\hskip.2in} % Used if \insertBetweenHyps isn't given
324
325 \def\labelSpacing{3pt} % Horizontal space separating labels and lines
326
327 \def\proofSkipAmount{\vskip.8ex plus.8ex minus.4ex}
328 % Space above and below a prooftree display.
329
330 \def\defaultRootPosition{\buildRootBottom} % Default: Proofs root at bottom
331 %\def\defaultRootPosition{\buildRootTop} % Makes all proofs upside down
332
333 \ifx\fCenter\undefined
334 \def\fCenter{\relax}
335 \fi
336
337 %
338 % End of user-modifiable parameters.
339 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
340
341 % Here are some internal paramenters and defaults. Not really intended
342 % to be user-modifiable.
343
344 \def\theHypSeparation{\defaultHypSeparation}
345 \def\alwaysScoreFiller{\defaultScoreFiller} % Horizontal filler.
346 \def\alwaysBuildScore{\defaultBuildScore}
347 \def\theScoreFiller{\alwaysScoreFiller} % Horizontal filler.
348 \def\buildScore{\alwaysBuildScore} %This command builds the score.
349 \def\hypKernAmt{0pt} % Initial setting for kerning the hypotheses.
350
351 \def\defaultLeftLabel{}
352 \def\defaultRightLabel{}
353
354 \def\myTrue{Y}
355 \def\bottomAlignFlag{N}
356 \def\centerAlignFlag{N}
357 \def\defaultRootAtBottomFlag{Y}
358 \def\rootAtBottomFlag{Y}
359
360 % End of internal parameters and defaults.
361
362 \expandafter\ifx\csname newenvironment\endcsname\relax%
363 % If in TeX:
364 \message{\BPmessage}
365 \def\makeatletter{\catcode`\@=11\relax}
366 \def\makeatother{\catcode`\@=12\relax}
367 \makeatletter
368 \def\newcount{\alloc@0\count\countdef\insc@unt}
369 \def\newdimen{\alloc@1\dimen\dimendef\insc@unt}
370 \def\newskip{\alloc@2\skip\skipdef\insc@unt}
371 \def\newbox{\alloc@4\box\chardef\insc@unt}
372 \makeatother
373 \else
374 % If in LaTeX
375 \typeout{\BPmessage}
376 \newenvironment{prooftree}%
377 {\begin{center}\proofSkipAmount \leavevmode}%
378 {\DisplayProof \proofSkipAmount \end{center} }
379 \fi
380
381 \def\thecur#1{\csname#1\number\theLevel\endcsname}
382
383 \newcount\theLevel % This counter is the height of the stack.
384 \global\theLevel=0 % Initialized to zero
385 \newcount\myMaxLevel
386 \global\myMaxLevel=0
387 \newbox\myBoxA % Temporary storage boxes
388 \newbox\myBoxB
389 \newbox\myBoxC
390 \newbox\myBoxD
391 \newbox\myBoxLL % Boxes for the left label and the right label.
392 \newbox\myBoxRL
393 \newdimen\thisAboveSkip %Internal use: amount to skip above line
394 \newdimen\thisBelowSkip %Internal use: amount to skip below line
395 \newdimen\newScoreStart % More temporary storage.
396 \newdimen\newScoreEnd
397 \newdimen\newCenter
398 \newdimen\displace
399 \newdimen\leftLowerAmt% Amount to lower left label
400 \newdimen\rightLowerAmt% Amount to lower right label
401 \newdimen\scoreHeight% Score height
402 \newdimen\scoreDepth% Score Depth
403 \newdimen\htLbox%
404 \newdimen\htRbox%
405 \newdimen\htRRbox%
406 \newdimen\htRRRbox%
407 \newdimen\htAbox%
408 \newdimen\htCbox%
409
410 \setbox\myBoxLL=\hbox{\defaultLeftLabel}%
411 \setbox\myBoxRL=\hbox{\defaultRightLabel}%
412
413 \def\allocatemore{%
414 \ifnum\theLevel>\myMaxLevel%
415 \expandafter\newbox\curBox%
416 \expandafter\newdimen\curScoreStart%
417 \expandafter\newdimen\curCenter%
418 \expandafter\newdimen\curScoreEnd%
419 \global\advance\myMaxLevel by1%
420 \fi%
421 }
422
423 \def\prepAxiom{%
424 \advance\theLevel by1%
425 \edef\curBox{\thecur{myBox}}%
426 \edef\curScoreStart{\thecur{myScoreStart}}%
427 \edef\curCenter{\thecur{myCenter}}%
428 \edef\curScoreEnd{\thecur{myScoreEnd}}%
429 \allocatemore%
430 }
431
432 \def\Axiom$#1\fCenter#2${%
433 % Get level and correct names set.
434 \prepAxiom%
435 % Define the boxes
436 \setbox\myBoxA=\hbox{$\mathord{#1}\fCenter\mathord{\relax}$}%
437 \setbox\myBoxB=\hbox{$#2$}%
438 \global\setbox\curBox=%
439 \hbox{\hskip\ScoreOverhangLeft\relax%
440 \unhcopy\myBoxA\unhcopy\myBoxB\hskip\ScoreOverhangRight\relax}%
441 % Set the relevant dimensions for the boxes
442 \global\curScoreStart=0pt \relax
443 \global\curScoreEnd=\wd\curBox \relax
444 \global\curCenter=\wd\myBoxA \relax
445 \global\advance \curCenter by \ScoreOverhangLeft%
446 \ignorespaces
447 }
448
449 \def\AxiomC#1{ % Note argument not in math mode
450 % Get level and correct names set.
451 \prepAxiom%
452 % Define the box.
453 \setbox\myBoxA=\hbox{#1}%
454 \global\setbox\curBox =%
455 \hbox{\hskip\ScoreOverhangLeft\relax%
456 \unhcopy\myBoxA\hskip\ScoreOverhangRight\relax}%
457 % Set the relevant dimensions for the boxes
458 \global\curScoreStart=0pt \relax
459 \global\curScoreEnd=\wd\curBox \relax
460 \global\curCenter=.5\wd\curBox \relax
461 \global\advance \curCenter by \ScoreOverhangLeft%
462 \ignorespaces
463 }
464
465 \def\prepUnary{%
466 \ifnum \theLevel<1
467 \errmessage{Hypotheses missing!}
468 \fi%
469 \edef\curBox{\thecur{myBox}}%
470 \edef\curScoreStart{\thecur{myScoreStart}}%
471 \edef\curCenter{\thecur{myCenter}}%
472 \edef\curScoreEnd{\thecur{myScoreEnd}}%
473 }
474
475 \def\UnaryInf$#1\fCenter#2${%
476 \prepUnary%
477 \buildConclusion{#1}{#2}%
478 \joinUnary%
479 \resetInferenceDefaults%
480 \ignorespaces%
481 }
482
483 \def\UnaryInfC#1{
484 \prepUnary%
485 \buildConclusionC{#1}%
486 %Align and join the curBox and the new box into one vbox.
487 \joinUnary%
488 \resetInferenceDefaults%
489 \ignorespaces%
490 }
491
492 \def\prepBinary{%
493 \ifnum\theLevel<2
494 \errmessage{Hypotheses missing!}
495 \fi%
496 \edef\rcurBox{\thecur{myBox}}% Set up names of right hypothesis
497 \edef\rcurScoreStart{\thecur{myScoreStart}}%
498 \edef\rcurCenter{\thecur{myCenter}}%
499 \edef\rcurScoreEnd{\thecur{myScoreEnd}}%
500 \advance\theLevel by-1%
501 \edef\lcurBox{\thecur{myBox}}% Set up names of left hypothesis
502 \edef\lcurScoreStart{\thecur{myScoreStart}}%
503 \edef\lcurCenter{\thecur{myCenter}}%
504 \edef\lcurScoreEnd{\thecur{myScoreEnd}}%
505 }
506
507 \def\BinaryInf$#1\fCenter#2${%
508 \prepBinary%
509 \buildConclusion{#1}{#2}%
510 \joinBinary%
511 \resetInferenceDefaults%
512 \ignorespaces%
513 }
514
515 \def\BinaryInfC#1{%
516 \prepBinary%
517 \buildConclusionC{#1}%
518 \joinBinary%
519 \resetInferenceDefaults%
520 \ignorespaces%
521 }
522
523 \def\prepTrinary{%
524 \ifnum\theLevel<3
525 \errmessage{Hypotheses missing!}
526 \fi%
527 \edef\rcurBox{\thecur{myBox}}% Set up names of right hypothesis
528 \edef\rcurScoreStart{\thecur{myScoreStart}}%
529 \edef\rcurCenter{\thecur{myCenter}}%
530 \edef\rcurScoreEnd{\thecur{myScoreEnd}}%
531 \advance\theLevel by-1%
532 \edef\ccurBox{\thecur{myBox}}% Set up names of center hypothesis
533 \edef\ccurScoreStart{\thecur{myScoreStart}}%
534 \edef\ccurCenter{\thecur{myCenter}}%
535 \edef\ccurScoreEnd{\thecur{myScoreEnd}}%
536 \advance\theLevel by-1%
537 \edef\lcurBox{\thecur{myBox}}% Set up names of left hypothesis
538 \edef\lcurScoreStart{\thecur{myScoreStart}}%
539 \edef\lcurCenter{\thecur{myCenter}}%
540 \edef\lcurScoreEnd{\thecur{myScoreEnd}}%
541 }
542
543 \def\TrinaryInf$#1\fCenter#2${%
544 \prepTrinary%
545 \buildConclusion{#1}{#2}%
546 \joinTrinary%
547 \resetInferenceDefaults%
548 \ignorespaces%
549 }
550
551 \def\TrinaryInfC#1{%
552 \prepTrinary%
553 \buildConclusionC{#1}%
554 \joinTrinary%
555 \resetInferenceDefaults%
556 \ignorespaces%
557 }
558
559 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
560 \def\prepQuaternary{%
561 \ifnum\theLevel<4
562 \errmessage{Hypotheses missing!}
563 \fi%
564 \edef\rrcurBox{\thecur{myBox}}% Set up names of very right hypothesis
565 \edef\rrcurScoreStart{\thecur{myScoreStart}}%
566 \edef\rrcurCenter{\thecur{myCenter}}%
567 \edef\rrcurScoreEnd{\thecur{myScoreEnd}}%
568 \advance\theLevel by-1%
569 \edef\rcurBox{\thecur{myBox}}% Set up names of right hypothesis
570 \edef\rcurScoreStart{\thecur{myScoreStart}}%
571 \edef\rcurCenter{\thecur{myCenter}}%
572 \edef\rcurScoreEnd{\thecur{myScoreEnd}}%
573 \advance\theLevel by-1%
574 \edef\ccurBox{\thecur{myBox}}% Set up names of center hypothesis
575 \edef\ccurScoreStart{\thecur{myScoreStart}}%
576 \edef\ccurCenter{\thecur{myCenter}}%
577 \edef\ccurScoreEnd{\thecur{myScoreEnd}}%
578 \advance\theLevel by-1%
579 \edef\lcurBox{\thecur{myBox}}% Set up names of left hypothesis
580 \edef\lcurScoreStart{\thecur{myScoreStart}}%
581 \edef\lcurCenter{\thecur{myCenter}}%
582 \edef\lcurScoreEnd{\thecur{myScoreEnd}}%
583 }
584
585 \def\QuaternaryInf$#1\fCenter#2${%
586 \prepQuaternary%
587 \buildConclusion{#1}{#2}%
588 \joinQuaternary%
589 \resetInferenceDefaults%
590 \ignorespaces%
591 }
592
593 \def\QuaternaryInfC#1{%
594 \prepQuaternary%
595 \buildConclusionC{#1}%
596 \joinQuaternary%
597 \resetInferenceDefaults%
598 \ignorespaces%
599 }
600
601 \def\joinQuaternary{% Construct the quarterary inference into a vbox.
602 % Join the four hypotheses's boxes into one hbox.
603 \setbox\myBoxA=\hbox{\theHypSeparation}%
604 \lcurScoreEnd=\rrcurScoreEnd%
605 \advance\lcurScoreEnd by\wd\rcurBox%
606 \advance\lcurScoreEnd by\wd\lcurBox%
607 \advance\lcurScoreEnd by\wd\ccurBox%
608 \advance\lcurScoreEnd by3\wd\myBoxA%
609 \displace=\lcurScoreEnd%
610 \advance\displace by -\lcurScoreStart%
611 \lcurCenter=.5\displace%
612 \advance\lcurCenter by\lcurScoreStart%
613 \ifx\rootAtBottomFlag\myTrue%
614 \setbox\lcurBox=%
615 \hbox{\box\lcurBox\unhcopy\myBoxA\box\ccurBox%
616 \unhcopy\myBoxA\box\rcurBox
617 \unhcopy\myBoxA\box\rrcurBox}%
618 \else%
619 \htLbox = \ht\lcurBox%
620 \htAbox = \ht\myBoxA%
621 \htCbox = \ht\ccurBox%
622 \htRbox = \ht\rcurBox%
623 \htRRbox = \ht\rrcurBox%
624 \setbox\lcurBox=%
625 \hbox{\lower\htLbox\box\lcurBox%
626 \lower\htAbox\copy\myBoxA\lower\htCbox\box\ccurBox%
627 \lower\htAbox\copy\myBoxA\lower\htRbox\box\rcurBox%
628 \lower\htAbox\copy\myBoxA\lower\htRRbox\box\rrcurBox}%
629 \fi%
630 % Adjust center of upper hypotheses according to how much
631 % the lower sequent is off-center.
632 \displace=\newCenter%
633 \advance\displace by -.5\newScoreStart%
634 \advance\displace by -.5\newScoreEnd%
635 \advance\lcurCenter by \displace%
636 %Align and join the curBox and the two hypotheses's box into one vbox.
637 \edef\curBox{\lcurBox}%
638 \edef\curScoreStart{\lcurScoreStart}%
639 \edef\curScoreEnd{\lcurScoreEnd}%
640 \edef\curCenter{\lcurCenter}%
641 \joinUnary%
642 }
643
644 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
645 \def\prepQuinary{%
646 \ifnum\theLevel<5
647 \errmessage{Hypotheses missing!}
648 \fi%
649 \edef\rrrcurBox{\thecur{myBox}}% Set up names of very very right hypothesis
650 \edef\rrrcurScoreStart{\thecur{myScoreStart}}%
651 \edef\rrrcurCenter{\thecur{myCenter}}%
652 \edef\rrrcurScoreEnd{\thecur{myScoreEnd}}%
653 \advance\theLevel by-1%
654 \edef\rrcurBox{\thecur{myBox}}% Set up names of very right hypothesis
655 \edef\rrcurScoreStart{\thecur{myScoreStart}}%
656 \edef\rrcurCenter{\thecur{myCenter}}%
657 \edef\rrcurScoreEnd{\thecur{myScoreEnd}}%
658 \advance\theLevel by-1%
659 \edef\rcurBox{\thecur{myBox}}% Set up names of right hypothesis
660 \edef\rcurScoreStart{\thecur{myScoreStart}}%
661 \edef\rcurCenter{\thecur{myCenter}}%
662 \edef\rcurScoreEnd{\thecur{myScoreEnd}}%
663 \advance\theLevel by-1%
664 \edef\ccurBox{\thecur{myBox}}% Set up names of center hypothesis
665 \edef\ccurScoreStart{\thecur{myScoreStart}}%
666 \edef\ccurCenter{\thecur{myCenter}}%
667 \edef\ccurScoreEnd{\thecur{myScoreEnd}}%
668 \advance\theLevel by-1%
669 \edef\lcurBox{\thecur{myBox}}% Set up names of left hypothesis
670 \edef\lcurScoreStart{\thecur{myScoreStart}}%
671 \edef\lcurCenter{\thecur{myCenter}}%
672 \edef\lcurScoreEnd{\thecur{myScoreEnd}}%
673 }
674
675 \def\QuinaryInf$#1\fCenter#2${%
676 \prepQuinary%
677 \buildConclusion{#1}{#2}%
678 \joinQuinary%
679 \resetInferenceDefaults%
680 \ignorespaces%
681 }
682
683 \def\QuinaryInfC#1{%
684 \prepQuinary%
685 \buildConclusionC{#1}%
686 \joinQuinary%
687 \resetInferenceDefaults%
688 \ignorespaces%
689 }
690
691 \def\joinQuinary{% Construct the quinary inference into a vbox.
692 % Join the five hypotheses's boxes into one hbox.
693 \setbox\myBoxA=\hbox{\theHypSeparation}%
694 \lcurScoreEnd=\rrrcurScoreEnd%
695 \advance\lcurScoreEnd by\wd\rrcurBox%
696 \advance\lcurScoreEnd by\wd\rcurBox%
697 \advance\lcurScoreEnd by\wd\lcurBox%
698 \advance\lcurScoreEnd by\wd\ccurBox%
699 \advance\lcurScoreEnd by4\wd\myBoxA%
700 \displace=\lcurScoreEnd%
701 \advance\displace by -\lcurScoreStart%
702 \lcurCenter=.5\displace%
703 \advance\lcurCenter by\lcurScoreStart%
704 \ifx\rootAtBottomFlag\myTrue%
705 \setbox\lcurBox=%
706 \hbox{\box\lcurBox\unhcopy\myBoxA\box\ccurBox%
707 \unhcopy\myBoxA\box\rcurBox
708 \unhcopy\myBoxA\box\rrcurBox
709 \unhcopy\myBoxA\box\rrrcurBox}%
710 \else%
711 \htLbox = \ht\lcurBox%
712 \htAbox = \ht\myBoxA%
713 \htCbox = \ht\ccurBox%
714 \htRbox = \ht\rcurBox%
715 \htRRbox = \ht\rrcurBox%
716 \htRRRbox = \ht\rrrcurBox%
717 \setbox\lcurBox=%
718 \hbox{\lower\htLbox\box\lcurBox%
719 \lower\htAbox\copy\myBoxA\lower\htCbox\box\ccurBox%
720 \lower\htAbox\copy\myBoxA\lower\htRbox\box\rcurBox%
721 \lower\htAbox\copy\myBoxA\lower\htRRbox\box\rrcurBox%
722 \lower\htAbox\copy\myBoxA\lower\htRRRbox\box\rrrcurBox}%
723 \fi%
724 % Adjust center of upper hypotheses according to how much
725 % the lower sequent is off-center.
726 \displace=\newCenter%
727 \advance\displace by -.5\newScoreStart%
728 \advance\displace by -.5\newScoreEnd%
729 \advance\lcurCenter by \displace%
730 %Align and join the curBox and the two hypotheses's box into one vbox.
731 \edef\curBox{\lcurBox}%
732 \edef\curScoreStart{\lcurScoreStart}%
733 \edef\curScoreEnd{\lcurScoreEnd}%
734 \edef\curCenter{\lcurCenter}%
735 \joinUnary%
736 }
737
738 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
739
740 \def\buildConclusion#1#2{% Build lower sequent w/ center at \fCenter position.
741 % Define the boxes
742 \setbox\myBoxA=\hbox{$\mathord{#1}\fCenter\mathord{\relax}$}%
743 \setbox\myBoxB=\hbox{$#2$}%
744 % Put them together in \myBoxC
745 \setbox\myBoxC =%
746 \hbox{\hskip\ScoreOverhangLeft\relax%
747 \unhcopy\myBoxA\unhcopy\myBoxB\hskip\ScoreOverhangRight\relax}%
748 % Calculate the center of the \myBoxC string.
749 \newScoreStart=0pt \relax%
750 \newCenter=\wd\myBoxA \relax%
751 \advance \newCenter by \ScoreOverhangLeft%
752 \newScoreEnd=\wd\myBoxC%
753 }
754
755 \def\buildConclusionC#1{% Build lower sequent w/o \fCenter present.
756 % Define the box.
757 \setbox\myBoxA=\hbox{#1}%
758 \setbox\myBoxC =%
759 \hbox{\hbox{\hskip\ScoreOverhangLeft\relax%
760 \unhcopy\myBoxA\hskip\ScoreOverhangRight\relax}}%
761 % Calculate kerning to line up centers
762 \newScoreStart=0pt \relax%
763 \newCenter=.5\wd\myBoxC \relax%
764 \newScoreEnd=\wd\myBoxC%
765 \advance \newCenter by \ScoreOverhangLeft%
766 }
767
768 \def\joinUnary{%Align and join \curBox and \myBoxC into a single vbox
769 \global\advance\curCenter by -\hypKernAmt%
770 \ifnum\curCenter<\newCenter%
771 \displace=\newCenter%
772 \advance \displace by -\curCenter%
773 \kernUpperBox%
774 \else%
775 \displace=\curCenter%
776 \advance \displace by -\newCenter%
777 \kernLowerBox%
778 \fi%
779 \ifnum \newScoreStart < \curScoreStart %
780 \global \curScoreStart = \newScoreStart \fi%
781 \ifnum \curScoreEnd < \newScoreEnd %
782 \global \curScoreEnd = \newScoreEnd \fi%
783 % Leave room for the left label.
784 \ifnum \curScoreStart<\wd\myBoxLL%
785 \global\displace = \wd\myBoxLL%
786 \global\advance\displace by -\curScoreStart%
787 \kernUpperBox%
788 \kernLowerBox%
789 \fi%
790 % Draw the score
791 \buildScore%
792 % Form the score and labels into a box.
793 \buildScoreLabels%
794 % Form the new box and its dimensions
795 \ifx\rootAtBottomFlag\myTrue%
796 \buildRootBottom%
797 \else%
798 \buildRootTop%
799 \fi%
800 \global \curScoreStart=\newScoreStart%
801 \global \curScoreEnd=\newScoreEnd%
802 \global \curCenter=\newCenter%
803 }
804
805 \def\buildRootBottom{%
806 \global \setbox \curBox =%
807 \vbox{\box\curBox%
808 \vskip\thisAboveSkip \relax%
809 \nointerlineskip\box\myBoxD%
810 \vskip\thisBelowSkip \relax%
811 \nointerlineskip\box\myBoxC}%
812 }
813
814 \def\buildRootTop{%
815 \global \setbox \curBox =%
816 \vbox{\box\myBoxC%
817 \vskip\thisAboveSkip \relax%
818 \nointerlineskip\box\myBoxD%
819 \vskip\thisBelowSkip \relax%
820 \nointerlineskip\box\curBox}%
821 }
822
823 \def\kernUpperBox{%
824 \global\setbox\curBox =%
825 \hbox{\hskip\displace\box\curBox}%
826 \global\advance \curScoreStart by \displace%
827 \global\advance \curScoreEnd by \displace%
828 \global\advance\curCenter by \displace%
829 }
830
831 \def\kernLowerBox{%
832 \global\setbox\myBoxC =%
833 \hbox{\hskip\displace\unhbox\myBoxC}%
834 \global\advance \newScoreStart by \displace%
835 \global\advance \newScoreEnd by \displace%
836 \global\advance\newCenter by \displace%
837 }
838
839 \def\joinBinary{% Construct the binary inference into a vbox.
840 % Join the two hypotheses's boxes into one hbox.
841 \setbox\myBoxA=\hbox{\theHypSeparation}%
842 \lcurScoreEnd=\rcurScoreEnd%
843 \advance\lcurScoreEnd by\wd\lcurBox%
844 \advance\lcurScoreEnd by\wd\myBoxA%
845 \displace=\lcurScoreEnd%
846 \advance\displace by -\lcurScoreStart%
847 \lcurCenter=.5\displace%
848 \advance\lcurCenter by\lcurScoreStart%
849 \ifx\rootAtBottomFlag\myTrue%
850 \setbox\lcurBox=%
851 \hbox{\box\lcurBox\unhcopy\myBoxA\box\rcurBox}%
852 \else%
853 \htLbox = \ht\lcurBox%
854 \htAbox = \ht\myBoxA%
855 \htRbox = \ht\rcurBox%
856 \setbox\lcurBox=%
857 \hbox{\lower\htLbox\box\lcurBox%
858 \lower\htAbox\box\myBoxA\lower\htRbox\box\rcurBox}%
859 \fi%
860 % Adjust center of upper hypotheses according to how much
861 % the lower sequent is off-center.
862 \displace=\newCenter%
863 \advance\displace by -.5\newScoreStart%
864 \advance\displace by -.5\newScoreEnd%
865 \advance\lcurCenter by \displace%
866 %Align and join the curBox and the two hypotheses's box into one vbox.
867 \edef\curBox{\lcurBox}%
868 \edef\curScoreStart{\lcurScoreStart}%
869 \edef\curScoreEnd{\lcurScoreEnd}%
870 \edef\curCenter{\lcurCenter}%
871 \joinUnary%
872 }
873
874 \def\joinTrinary{% Construct the trinary inference into a vbox.
875 % Join the three hypotheses's boxes into one hbox.
876 \setbox\myBoxA=\hbox{\theHypSeparation}%
877 \lcurScoreEnd=\rcurScoreEnd%
878 \advance\lcurScoreEnd by\wd\lcurBox%
879 \advance\lcurScoreEnd by\wd\ccurBox%
880 \advance\lcurScoreEnd by2\wd\myBoxA%
881 \displace=\lcurScoreEnd%
882 \advance\displace by -\lcurScoreStart%
883 \lcurCenter=.5\displace%
884 \advance\lcurCenter by\lcurScoreStart%
885 \ifx\rootAtBottomFlag\myTrue%
886 \setbox\lcurBox=%
887 \hbox{\box\lcurBox\unhcopy\myBoxA\box\ccurBox%
888 \unhcopy\myBoxA\box\rcurBox}%
889 \else%
890 \htLbox = \ht\lcurBox%
891 \htAbox = \ht\myBoxA%
892 \htCbox = \ht\ccurBox%
893 \htRbox = \ht\rcurBox%
894 \setbox\lcurBox=%
895 \hbox{\lower\htLbox\box\lcurBox%
896 \lower\htAbox\copy\myBoxA\lower\htCbox\box\ccurBox%
897 \lower\htAbox\copy\myBoxA\lower\htRbox\box\rcurBox}%
898 \fi%
899 % Adjust center of upper hypotheses according to how much
900 % the lower sequent is off-center.
901 \displace=\newCenter%
902 \advance\displace by -.5\newScoreStart%
903 \advance\displace by -.5\newScoreEnd%
904 \advance\lcurCenter by \displace%
905 %Align and join the curBox and the two hypotheses's box into one vbox.
906 \edef\curBox{\lcurBox}%
907 \edef\curScoreStart{\lcurScoreStart}%
908 \edef\curScoreEnd{\lcurScoreEnd}%
909 \edef\curCenter{\lcurCenter}%
910 \joinUnary%
911 }
912
913 \def\DisplayProof{%
914 % Display (and purge) the proof tree.
915 % Choose the appropriate vertical alignment.
916 \ifnum \theLevel=1 \relax \else%x
917 \errmessage{Proof tree badly specified.}%
918 \fi%
919 \edef\curBox{\thecur{myBox}}%
920 \ifx\bottomAlignFlag\myTrue%
921 \displace=0pt%
922 \else%
923 \displace=.5\ht\curBox%
924 \ifx\centerAlignFlag\myTrue\relax
925 \else%
926 \advance\displace by -3pt%
927 \fi%
928 \fi%
929 \leavevmode%
930 \lower\displace\hbox{\copy\curBox}%
931 \global\theLevel=0%
932 \global\def\alwaysBuildScore{\defaultBuildScore}% Restore "always"
933 \global\def\alwaysScoreFiller{\defaultScoreFiller}% Restore "always"
934 \global\def\bottomAlignFlag{N}%
935 \global\def\centerAlignFlag{N}%
936 \resetRootPosition
937 \resetInferenceDefaults%
938 \ignorespaces
939 }
940
941 \def\buildSingleScore{% Make an hbox with a single score.
942 \displace=\curScoreEnd%
943 \advance \displace by -\curScoreStart%
944 \global\setbox \myBoxD =%
945 \hbox to \displace{\expandafter\xleaders\theScoreFiller\hfill}%
946 %\global\setbox \myBoxD =%
947 %\hbox{\hskip\curScoreStart\relax \box\myBoxD}%
948 }
949
950 \def\buildDoubleScore{% Make an hbox with a double score.
951 \buildSingleScore%
952 \global\setbox\myBoxD=%
953 \hbox{\hbox to0pt{\copy\myBoxD\hss}\raise2pt\copy\myBoxD}%
954 }
955
956 \def\buildNoScore{% Make an hbox with no score (raise a little anyway)
957 \global\setbox\myBoxD=\hbox{\vbox{\vskip1pt}}%
958 }
959
960 \def\doubleLine{%
961 \gdef\buildScore{\buildDoubleScore}% Set next score to this type
962 \ignorespaces
963 }
964 \def\alwaysDoubleLine{%
965 \gdef\alwaysBuildScore{\buildDoubleScore}% Do double for rest of proof.
966 \gdef\buildScore{\buildDoubleScore}% Set next score to be double
967 \ignorespaces
968 }
969 \def\singleLine{%
970 \gdef\buildScore{\buildSingleScore}% Set next score to be single
971 \ignorespaces
972 }
973 \def\alwaysSingleLine{%
974 \gdef\alwaysBuildScore{\buildSingleScore}% Do single for rest of proof.
975 \gdef\buildScore{\buildSingleScore}% Set next score to be single
976 \ignorespaces
977 }
978 \def\noLine{%
979 \gdef\buildScore{\buildNoScore}% Set next score to this type
980 \ignorespaces
981 }
982 \def\alwaysNoLine{%
983 \gdef\alwaysBuildScore{\buildNoScore}%Do nolines for rest of proof.
984 \gdef\buildScore{\buildNoScore}% Set next score to be blank
985 \ignorespaces
986 }
987 \def\solidLine{%
988 \gdef\theScoreFiller{\ruleScoreFiller}% Use solid horizontal line.
989 \ignorespaces
990 }
991 \def\alwaysSolidLine{%
992 \gdef\alwaysScoreFiller{\ruleScoreFiller}% Do solid for rest of proof
993 \gdef\theScoreFiller{\ruleScoreFiller}% Use solid horizontal line.
994 \ignorespaces
995 }
996 \def\dottedLine{%
997 \gdef\theScoreFiller{\dottedScoreFiller}% Use dotted horizontal line.
998 \ignorespaces
999 }
1000 \def\alwaysDottedLine{%
1001 \gdef\alwaysScoreFiller{\dottedScoreFiller}% Do dotted for rest of proof
1002 \gdef\theScoreFiller{\dottedScoreFiller}% Use dotted horizontal line.
1003 \ignorespaces
1004 }
1005 \def\dashedLine{%
1006 \gdef\theScoreFiller{\dashedScoreFiller}% Use dashed horizontal line.
1007 \ignorespaces
1008 }
1009 \def\alwaysDashedLine{%
1010 \gdef\alwaysScoreFiller{\dashedScoreFiller}% Do dashed for rest of proof
1011 \gdef\theScoreFiller{\dashedScoreFiller}% Use dashed horizontal line.
1012 \ignorespaces
1013 }
1014 \def\kernHyps#1{%
1015 \gdef\hypKernAmt{#1}%
1016 \ignorespaces
1017 }
1018 \def\insertBetweenHyps#1{%
1019 \gdef\theHypSeparation{#1}%
1020 \ignorespaces
1021 }
1022
1023 \def\centerAlignProof{%
1024 \def\centerAlignFlag{Y}%
1025 \def\bottomAlignFlag{N}%
1026 \ignorespaces
1027 }
1028 \def\bottomAlignProof{%
1029 \def\centerAlignFlag{N}%
1030 \def\bottomAlignFlag{Y}%
1031 \ignorespaces
1032 }
1033 \def\normalAlignProof{%
1034 \def\centerAlignFlag{N}%
1035 \def\bottomAlignFlag{N}%
1036 \ignorespaces
1037 }
1038
1039 \def\LeftLabel#1{%
1040 \global\setbox\myBoxLL=\hbox{{#1}\hskip\labelSpacing}%
1041 \ignorespaces
1042 }
1043 \def\RightLabel#1{%
1044 \global\setbox\myBoxRL=\hbox{\hskip\labelSpacing #1}%
1045 \ignorespaces
1046 }
1047
1048 \def\buildScoreLabels{%
1049 \scoreHeight = \ht\myBoxD%
1050 \scoreDepth = \dp\myBoxD%
1051 \leftLowerAmt=\ht\myBoxLL%
1052 \advance \leftLowerAmt by -\dp\myBoxLL%
1053 \advance \leftLowerAmt by -\scoreHeight%
1054 \advance \leftLowerAmt by \scoreDepth%
1055 \leftLowerAmt=.5\leftLowerAmt%
1056 \rightLowerAmt=\ht\myBoxRL%
1057 \advance \rightLowerAmt by -\dp\myBoxRL%
1058 \advance \rightLowerAmt by -\scoreHeight%
1059 \advance \rightLowerAmt by \scoreDepth%
1060 \rightLowerAmt=.5\rightLowerAmt%
1061 \displace = \curScoreStart%
1062 \advance\displace by -\wd\myBoxLL%
1063 \global\setbox\myBoxD =%
1064 \hbox{\hskip\displace%
1065 \lower\leftLowerAmt\copy\myBoxLL%
1066 \box\myBoxD%
1067 \lower\rightLowerAmt\copy\myBoxRL}%
1068 \global\thisAboveSkip = \ht\myBoxLL%
1069 \global\advance \thisAboveSkip by -\leftLowerAmt%
1070 \global\advance \thisAboveSkip by -\scoreHeight%
1071 \ifnum \thisAboveSkip<0 %
1072 \global\thisAboveSkip=0pt%
1073 \fi%
1074 \displace = \ht\myBoxRL%
1075 \advance \displace by -\rightLowerAmt%
1076 \advance \displace by -\scoreHeight%
1077 \ifnum \displace<0 %
1078 \displace=0pt%
1079 \fi%
1080 \ifnum \displace>\thisAboveSkip %
1081 \global\thisAboveSkip=\displace%
1082 \fi%
1083 \global\thisBelowSkip = \dp\myBoxLL%
1084 \global\advance\thisBelowSkip by \leftLowerAmt%
1085 \global\advance\thisBelowSkip by -\scoreDepth%
1086 \ifnum\thisBelowSkip<0 %
1087 \global\thisBelowSkip = 0pt%
1088 \fi%
1089 \displace = \dp\myBoxRL%
1090 \advance\displace by \rightLowerAmt%
1091 \advance\displace by -\scoreDepth%
1092 \ifnum\displace<0 %
1093 \displace = 0pt%
1094 \fi%
1095 \ifnum\displace>\thisBelowSkip%
1096 \global\thisBelowSkip = \displace%
1097 \fi%
1098 \global\thisAboveSkip = -\thisAboveSkip%
1099 \global\thisBelowSkip = -\thisBelowSkip%
1100 \global\advance\thisAboveSkip by\extraVskip% Extra space above line
1101 \global\advance\thisBelowSkip by\extraVskip% Extra space below line
1102 }
1103
1104 \def\resetInferenceDefaults{%
1105 \global\def\theHypSeparation{\defaultHypSeparation}%
1106 \global\setbox\myBoxLL=\hbox{\defaultLeftLabel}%
1107 \global\setbox\myBoxRL=\hbox{\defaultRightLabel}%
1108 \global\def\buildScore{\alwaysBuildScore}%
1109 \global\def\theScoreFiller{\alwaysScoreFiller}%
1110 \gdef\hypKernAmt{0pt}% Restore to zero kerning.
1111 }
1112
1113
1114 \def\rootAtBottom{%
1115 \global\def\rootAtBottomFlag{Y}%
1116 }
1117
1118 \def\rootAtTop{%
1119 \global\def\rootAtBottomFlag{N}%
1120 }
1121
1122 \def\resetRootPosition{%
1123 \global\edef\rootAtBottomFlag{\defaultRootAtBottomFlag}
1124 }
1125
1126 \def\alwaysRootAtBottom{%
1127 \global\def\defaultRootAtBottomFlag{Y}
1128 \rootAtBottom
1129 }
1130
1131 \def\alwaysRootAtTop{%
1132 \global\def\defaultRootAtBottomFlag{N}
1133 \rootAtTop
1134 }
1135
1136