aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README8
-rw-r--r--blurb12
-rw-r--r--blurb.short2
-rw-r--r--c2lout.c916
-rw-r--r--data/standard.ld85
-rw-r--r--doc/README2
-rw-r--r--doc/design/README2
-rw-r--r--doc/design/outfile.ps11703
-rw-r--r--doc/expert/README2
-rw-r--r--doc/expert/all4
-rw-r--r--doc/expert/exa_bibl4
-rw-r--r--doc/expert/outfile.ps16122
-rw-r--r--doc/expert/preface2
-rw-r--r--doc/slides/README2
-rw-r--r--doc/slides/all2
-rw-r--r--doc/slides/outfile.ps4473
-rw-r--r--doc/user/README2
-rw-r--r--doc/user/all7
-rw-r--r--doc/user/cpp_chan91
-rw-r--r--doc/user/preface2
-rw-r--r--doc/user/prg (renamed from doc/user/cpp)43
-rw-r--r--doc/user/prg_chan108
-rw-r--r--doc/user/prg_comm (renamed from doc/user/cpp_comm)2
-rw-r--r--doc/user/prg_embe (renamed from doc/user/cpp_embe)7
-rw-r--r--doc/user/prg_erro (renamed from doc/user/cpp_erro)2
-rw-r--r--doc/user/prg_lone (renamed from doc/user/cpp_lone)5
-rw-r--r--doc/user/prg_opti (renamed from doc/user/cpp_opti)42
-rw-r--r--doc/user/prg_perl108
-rw-r--r--doc/user/prg_pipe (renamed from doc/user/cpp_pipe)0
-rw-r--r--doc/user/prg_prog (renamed from doc/user/cpp_prog)2
-rw-r--r--doc/user/prg_tabs (renamed from doc/user/cpp_tabs)0
-rw-r--r--doc/user/user.ps5202
-rw-r--r--doc/user/vcpp1
-rw-r--r--doc/user/vprg1
-rw-r--r--externs.h4
-rw-r--r--include/README16
-rw-r--r--include/blue117
-rw-r--r--include/bluef318
-rw-r--r--include/cprint119
-rw-r--r--include/cprintf327
-rw-r--r--include/eiffel117
-rw-r--r--include/eiffelf318
-rw-r--r--include/perl102
-rw-r--r--include/perlf354
-rw-r--r--include/pod164
-rw-r--r--include/podf513
-rw-r--r--include/progf281
-rw-r--r--man/prg2lout.18
-rw-r--r--man/prg2lout.txt6
-rw-r--r--prg2lout.c3598
-rw-r--r--whatsnew8
-rw-r--r--z01.c2
-rw-r--r--z02.c2
-rw-r--r--z03.c2
-rw-r--r--z04.c2
-rw-r--r--z05.c2
-rw-r--r--z06.c2
-rw-r--r--z07.c2
-rw-r--r--z08.c16
-rw-r--r--z09.c2
-rw-r--r--z10.c2
-rw-r--r--z11.c9
-rw-r--r--z12.c88
-rw-r--r--z13.c2
-rw-r--r--z14.c2
-rw-r--r--z15.c2
-rw-r--r--z16.c2
-rw-r--r--z17.c18
-rw-r--r--z18.c2
-rw-r--r--z19.c2
-rw-r--r--z20.c2
-rw-r--r--z21.c2
-rw-r--r--z22.c3
-rw-r--r--z23.c2
-rw-r--r--z24.c2
-rw-r--r--z25.c2
-rw-r--r--z26.c2
-rw-r--r--z27.c2
-rw-r--r--z28.c2
-rw-r--r--z29.c2
-rw-r--r--z30.c2
-rw-r--r--z31.c2
-rw-r--r--z32.c2
-rw-r--r--z33.c2
-rw-r--r--z34.c2
-rw-r--r--z35.c2
-rw-r--r--z36.c2
-rw-r--r--z37.c2
-rw-r--r--z38.c2
-rw-r--r--z39.c2
-rw-r--r--z40.c3
-rw-r--r--z41.c2
-rw-r--r--z42.c2
-rw-r--r--z43.c2
-rw-r--r--z44.c2
-rw-r--r--z45.c2
-rw-r--r--z46.c2
-rw-r--r--z47.c2
-rw-r--r--z48.c2
99 files changed, 42890 insertions, 2667 deletions
diff --git a/README b/README
index 82749f0..e577102 100644
--- a/README
+++ b/README
@@ -1,5 +1,5 @@
-THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.17)
-BASSER LOUT VERSION 3 COPYRIGHT (C) 1994, 1999 Jeffrey H. Kingston
+THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19)
+BASSER LOUT VERSION 3 COPYRIGHT (C) 1994, 2000 Jeffrey H. Kingston
Jeffrey H. Kingston
Basser Department of Computer Science
@@ -34,7 +34,7 @@ formatting system. It contains the following directories:
hyph Lout hyphenation files (see hyph/README for info)
include Lout packages (in Lout)
locale Locale-specific error messages
- man Lout and c2lout manual entries
+ man Lout and prg2lout manual entries
maps Lout Character Mapping (LCM) files
setup Lout setup files (in Lout)
software Information about Lout-related software from elsewhere
@@ -44,7 +44,7 @@ and the following files:
READMEPDF A description of the PDF back end
blurb A news blurb describing Lout
blurb.short A short news blurb describing Lout
- c2lout.c c2lout source code (all in one file)
+ prg2lout.c prg2lout source code (all in one file)
externs.h z*.c Lout source code
gnu.gpl A copy of the GNU General Public License
makefile A makefile for installing Lout
diff --git a/blurb b/blurb
index 4c748a8..0c8e3f3 100644
--- a/blurb
+++ b/blurb
@@ -1,7 +1,7 @@
- THE LOUT DOCUMENT FORMATTING SYSTEM, VERSION 3.17
+ THE LOUT DOCUMENT FORMATTING SYSTEM, VERSION 3.20
-Version 3.17 of the Lout document formatting system is now available
+Version 3.20 of the Lout document formatting system is now available
(free of charge). The system reads a high-level description of a
document similar in style to LaTeX and produces a PostScript, PDF or
plain text output file.
@@ -12,7 +12,7 @@ EPS file inclusion and generation, equation formatting, tables, diagrams,
rotation and scaling, sorted indexes, bibliographic databases, running
headers and odd-even pages, automatic cross referencing, multilingual
documents including hyphenation (most European languages are supported,
-including Russian), formatting of C/C++ programs, and much more, all
+including Russian), formatting of computer programs, and much more, all
ready to use. Furthermore, Lout is easily extended with definitions
which are very much easier to write than troff of TeX macros because
Lout is a high-level language, the outcome of an eight-year research
@@ -21,9 +21,9 @@ project that went back to the beginning.
Lout is written in highly portable ANSI C. It is distributed under the
GNU public license as follows:
- ftp://ftp.cs.usyd.edu.au/jeff/lout/lout-3.17.tar.gz
+ ftp://ftp.cs.usyd.edu.au/jeff/lout/lout-3.20.tar.gz
-In other words, in a gzipped tar file called "lout-3.17.tar.gz" in the
+In other words, in a gzipped tar file called "lout-3.20.tar.gz" in the
"jeff/lout" subdirectory of the home directory of "ftp ftp.cs.usyd.edu.au"
with login name "ftp" or "anonymous" using any non-empty password. The
distribution contains
@@ -43,7 +43,7 @@ distribution contains
For those who want to browse first, a PostScript version of the User's
Guide may be found in the same ftp directory:
- ftp://ftp.cs.usyd.edu.au/jeff/lout/lout-3.17.user.ps.gz
+ ftp://ftp.cs.usyd.edu.au/jeff/lout/lout-3.20.user.ps.gz
Lout was designed and implemented by Jeffrey H. Kingston (jeff@cs.usyd.edu.au)
of the Basser Department of Computer Science at the University of Sydney.
diff --git a/blurb.short b/blurb.short
index 1c31792..ea08e9f 100644
--- a/blurb.short
+++ b/blurb.short
@@ -9,7 +9,7 @@ formatting, tables, diagrams, rotation and scaling, sorted indexes,
bibliographic databases, running headers and odd-even pages, automatic
cross referencing, multilingual documents including hyphenation (most
European languages are supported, including Russian), formatting of
-C/C++ programs, and more. Lout may be extended by writing definitions
+computer programs, and more. Lout may be extended by writing definitions
which are much simpler than the equivalent troff of TeX macros.
Lout is written in highly portable ANSI C and runs on most platforms.
diff --git a/c2lout.c b/c2lout.c
deleted file mode 100644
index e1f5bb1..0000000
--- a/c2lout.c
+++ /dev/null
@@ -1,916 +0,0 @@
-/*****************************************************************************/
-/* */
-/* C2LOUT: A PROGRAM TO CONVERT C AND C++ SOURCE INTO LOUT (VERSION 1.0) */
-/* COPYRIGHT (C) 1993 Jeffrey H. Kingston */
-/* */
-/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
-/* Basser Department of Computer Science */
-/* The University of Sydney 2006 */
-/* AUSTRALIA */
-/* */
-/* 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 1, 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., 675 Mass Ave, Cambridge, MA 02139, USA. */
-/* */
-/*****************************************************************************/
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#define C2LOUT_VERSION "c2lout Version 3.15 (May 1999)"
-#define BOOLEAN unsigned
-#define FALSE 0
-#define TRUE 1
-#define MAX_LINE 1024
-
-/* print styles */
-#define NO_STYLE 0
-#define FIXED_STYLE 1
-#define VARYING_STYLE 2
-#define SYMBOL_STYLE 3
-
-static char file_name[MAX_LINE]; /* current input file name */
-static int line_num; /* current input line number */
-static int line_pos; /* current input column number */
-static FILE *err_fp; /* where error messages go */
-
-static BOOLEAN headers_option; /* TRUE if no -n option (headers) */
-static int style_option; /* value of -p option, or NO_STYLE */
-static char *font_option; /* value of -f option, else null */
-static char *size_option; /* value of -s option, else null */
-static char *line_option; /* value of -v option, else null */
-static char *tabin_option; /* value of -t option, else null */
-static char *tabout_option; /* value of -T option, else null */
-
-static BOOLEAN tab_by_spacing; /* TRUE if using space chars to tab */
-static int tab_in; /* tab interval, value of -t option */
-static float tab_out; /* tab interval width (-T option) */
-static char tab_unit; /* unit of measurement for tab */
-static BOOLEAN Scan();
-
-extern void ProcessStandAlone(char *fname, FILE *in_fp, FILE *out_fp);
-
-#define Error0(str) \
-{ \
- if( line_num > 0 ) \
- fprintf(err_fp, "c2lout %s %d,%d: ", file_name, line_num, line_pos);\
- else \
- fprintf(err_fp, "c2lout: "); \
- fprintf(err_fp, str); \
- fprintf(err_fp, "\n"); \
-}
-
-#define Error1(str, arg) \
-{ \
- if( line_num > 0 ) \
- fprintf(err_fp, "c2lout %s %d,%d: ", file_name, line_num, line_pos);\
- else \
- fprintf(err_fp, "c2lout: "); \
- fprintf(err_fp, str, arg); \
- fprintf(err_fp, "\n"); \
-}
-
-#define GetArg(arg, message, null_ok) \
-{ if( strcmp(argv[i]+2, "") != 0 ) \
- arg = argv[i]+2; \
- else if( !null_ok && i < argc-1 && *argv[i+1] != '-' ) \
- arg = argv[++i]; \
- else if( null_ok ) \
- arg = (char *) NULL; \
- else \
- { Error0(message); \
- exit(1); \
- } \
-} /* end GetArg */
-
-
-/*****************************************************************************/
-/* */
-/* main(argc, argv) */
-/* */
-/* Read command line and process each file in turn. */
-/* */
-/*****************************************************************************/
-
-int main(int argc, char *argv[])
-{ FILE *in_fp, *out_fp = stdout;
- BOOLEAN at_least_one_file, raw_seen; int i;
- char *infilename, *outfilename, *errfilename, *str;
-
- /* read command line */
- in_fp = out_fp = NULL;
- err_fp = stderr;
- line_num = 0;
- raw_seen = FALSE;
- tab_by_spacing = TRUE;
- style_option = NO_STYLE;
- tab_in = 8;
- tab_out = 3;
- tab_unit = 'f';
- at_least_one_file = FALSE;
- headers_option = TRUE;
- font_option = size_option = line_option =
- tabin_option = tabout_option = (char *) NULL;
- for( i = 1; i < argc; i++ )
- { if( *argv[i] == '-' ) switch( *(argv[i]+1) )
- {
- case 'r':
-
- if( i > 1 )
- { Error0("-r must be first if it occurs at all");
- exit(1);
- }
- raw_seen = TRUE;
- break;
-
-
- case 'i':
-
- /* read name of input file */
- if( !raw_seen )
- { Error0("-i illegal without -r");
- exit(1);
- }
- if( in_fp != NULL )
- { Error0("-i seen twice");
- exit(1);
- }
- GetArg(infilename, "usage: -i<filename>", FALSE);
-
- /* open the file */
- in_fp = fopen(infilename, "r");
- if( in_fp == NULL )
- { Error1("cannot open input file %s", infilename);
- exit(1);
- }
-
- /* initialize file position */
- strcpy(file_name, infilename);
- line_num = 1;
- line_pos = 0;
- break;
-
-
- case 'o':
-
- /* read name of output file */
- if( out_fp != NULL )
- { Error0("-o seen twice");
- exit(1);
- }
- GetArg(outfilename, "usage: -o<filename>", FALSE);
- out_fp = fopen(outfilename, "w");
- if( out_fp == NULL )
- { Error1("cannot open output file %s", outfilename);
- exit(1);
- }
- break;
-
-
- case 'e':
-
- /* read name of error file */
- GetArg(errfilename, "usage: -e<filename>", FALSE);
- err_fp = fopen(errfilename, "w");
- if( err_fp == NULL )
- { Error1("cannot open error file %s", errfilename);
- exit(1);
- }
- break;
-
-
- case 'p':
-
- /* read print style */
- if( raw_seen )
- { Error0("-p illegal with -r option");
- exit(1);
- }
- GetArg(str, "usage: -p<printstyle>", FALSE);
- if( style_option != NO_STYLE )
- { Error0("-p option appears twice");
- exit(1);
- }
- else if( strcmp(str, "fixed") == 0 )
- { style_option = FIXED_STYLE;
- }
- else if( strcmp(str, "varying") == 0 )
- { style_option = VARYING_STYLE;
- tab_by_spacing = FALSE;
- }
- else if( strcmp(str, "symbol") == 0 )
- { style_option = SYMBOL_STYLE;
- tab_by_spacing = FALSE;
- }
- else
- { Error1("unknown -p option %s", str);
- exit(1);
- }
- break;
-
-
- case 'f':
-
- /* read font family */
- if( raw_seen )
- { Error0("-f illegal with -r option");
- exit(1);
- }
- GetArg(font_option, "usage: -f<font>", FALSE);
- break;
-
-
- case 's':
-
- /* read font size */
- if( raw_seen )
- { Error0("-s illegal with -r option");
- exit(1);
- }
- GetArg(size_option, "usage: -s<size>", FALSE);
- break;
-
-
- case 'v':
-
- /* read line spacing */
- if( raw_seen )
- { Error0("-v illegal with -r option");
- exit(1);
- }
- GetArg(line_option, "usage: -v<vsize>", FALSE);
- break;
-
-
- case 't':
-
- /* read tab interval */
- GetArg(tabin_option, "usage: -t<number>", TRUE);
- if( tabin_option != NULL && sscanf(tabin_option,"%d",&tab_in) != 1 )
- { Error0("usage: -t<number>\n");
- exit(1);
- }
- if( tab_in <= 0 )
- { Error0("-t: tab interval must be greater than 0\n");
- exit(1);
- }
- break;
-
-
- case 'T':
-
- /* read tab_out and tab_unit */
- GetArg(tabout_option, "usage: -T<number><unit>", TRUE);
- if( tabout_option != NULL )
- { if( sscanf(tabout_option, "%f%c",&tab_out,&tab_unit) != 2 )
- { Error0("usage: -T<number><unit>\n");
- exit(1);
- }
- if( tab_out <= 0 || tab_out >= 50 )
- { Error0("-T: unreasonably large or small tab interval");
- exit(1);
- }
- if( tab_unit != 'c' && tab_unit != 'i' && tab_unit != 'p' &&
- tab_unit != 'm' && tab_unit != 'f' && tab_unit != 's' &&
- tab_unit != 'v' )
- { Error0("-T: tab unit must be one of cipmfsv\n");
- exit(1);
- }
- tab_by_spacing = FALSE;
- }
- break;
-
-
- case 'n':
-
- if( raw_seen )
- { Error0("-n illegal with -r option");
- exit(1);
- }
- headers_option = FALSE;
- break;
-
-
- case 'V':
-
- if( raw_seen )
- { Error0("-V illegal with -r option");
- exit(1);
- }
- Error1("%s", C2LOUT_VERSION);
- exit(0);
- break;
-
-
- case 'u':
-
- if( raw_seen )
- { Error0("-u illegal with -r option");
- exit(1);
- }
- Error0("usage: c2lout C-files or c2lout -r Lout-files");
- exit(0);
- break;
-
-
- default:
-
- Error1("unknown command line flag %s", argv[i]);
- exit(1);
- break;
-
- }
- else
- {
- /* argument is source file, so open it */
- if( raw_seen )
- { Error0("file parameter illegal with -r flag!");
- exit(1);
- }
- at_least_one_file = TRUE;
- in_fp = fopen(argv[i], "r");
- if( in_fp == NULL )
- { Error1("cannot open input file %s", argv[i]);
- exit(1);
- }
-
- /* initialize file position */
- strcpy(file_name, argv[i]);
- line_num = 1;
- line_pos = 0;
-
- ProcessStandAlone(argv[i], in_fp, out_fp == NULL ? stdout : out_fp);
- }
- } /* for */
-
- /* raw case: filter in_fp to out_fp using Scan() */
- if( raw_seen )
- {
- /* check that input and output files are open */
- if( in_fp == NULL )
- { Error0("-r: missing -i option");
- exit(1);
- }
- if( out_fp == NULL )
- { Error0("-r: missing -o option");
- exit(1);
- }
-
- /* scan the file and leave unchanged if an error occurred */
- if( !Scan(in_fp, out_fp) ) exit(1);
- }
-
- /* finish of non-raw case with end text */
- else if( at_least_one_file )
- fprintf(out_fp == NULL ? stdout : out_fp, "@End @Text\n");
-
- return 0;
-} /* end main */
-
-
-/*****************************************************************************/
-/* */
-/* ProcessStandAlone(fname, in_fp, out_fp) */
-/* */
-/* Process one file consisting completely of C code. */
-/* */
-/*****************************************************************************/
-
-void ProcessStandAlone(char *fname, FILE *in_fp, FILE *out_fp)
-{ static BOOLEAN first = TRUE;
- char *style_str, *font_str, *size_str, *line_str, *face_str,
- *tabin_str, *tabout_str;
-
- /* print heading information on out_fp */
- if( first )
- {
- /* sort out the options' values */
- switch( style_option )
- {
-
- case NO_STYLE:
- case FIXED_STYLE:
-
- style_str = "fixed";
- face_str = "Base";
- font_str = font_option != NULL ? font_option : "Courier";
- size_str = size_option != NULL ? size_option : "9p";
- line_str = line_option != NULL ? line_option : "1.1fx";
- tabin_str = tabin_option != NULL ? tabin_option : "8";
- tabout_str = tabout_option != NULL ? tabout_option : "8s";
- break;
-
-
- case VARYING_STYLE:
-
- style_str = "varying";
- face_str = "Slope";
- font_str = font_option != NULL ? font_option : "Times";
- size_str = size_option != NULL ? size_option : "10p";
- line_str = line_option != NULL ? line_option : "1.1fx";
- tabin_str = tabin_option != NULL ? tabin_option : "8";
- tabout_str = tabout_option != NULL ? tabout_option : "3f";
- break;
-
-
- case SYMBOL_STYLE:
-
- style_str = "symbol";
- face_str = "Slope";
- font_str = font_option != NULL ? font_option : "Times";
- size_str = size_option != NULL ? size_option : "10p";
- line_str = line_option != NULL ? line_option : "1.1fx";
- tabin_str = tabin_option != NULL ? tabin_option : "8";
- tabout_str = tabout_option != NULL ? tabout_option : "3f";
- break;
-
-
- default:
-
- Error0("internal error in -p option");
- exit(1);
- break;
- }
-
-
- /* now print the initial @Use clauses etc.*/
- fprintf(out_fp, "@SysInclude { cprint }\n");
- fprintf(out_fp, "@SysInclude { doc }\n");
- fprintf(out_fp, "@Use { @CP\n");
- fprintf(out_fp, " style { %s }\n", style_str);
- fprintf(out_fp, " font { %s }\n", font_str);
- fprintf(out_fp, " size { %s }\n", size_str);
- fprintf(out_fp, " line { %s }\n", line_str);
- fprintf(out_fp, " tabin { %s }\n", tabin_str);
- fprintf(out_fp, " tabout { %s }\n", tabout_str);
- fprintf(out_fp, "{}\n");
- fprintf(out_fp, "}\n");
- fprintf(out_fp, "@Document\n");
- fprintf(out_fp, " @InitialFont { \"%s\" \"%s\" \"%s\" }\n",
- font_str, face_str, size_str);
- fprintf(out_fp, " @InitialBreak { lines \"%s\" nohyphen }\n", line_str);
- fprintf(out_fp, "//\n");
- fprintf(out_fp, "@Text @Begin\n\n");
- first = FALSE;
- }
- else fprintf(out_fp, "@NP\n\n");
-
- /* print file name and contents */
- if( headers_option )
- fprintf(out_fp, "{ Times Bold \"+3p\" } @Font \"%s\"\n@DP\n", fname);
- if( !Scan(in_fp, out_fp) ) exit(1);
-
-} /* end ProcessStandAlone */
-
-
-/*****************************************************************************/
-/* */
-/* EmitTab(out_fp) */
-/* */
-/* Emit the equivalent of one tab character, depending on whether we */
-/* are using spaces or Lout tab operators to simulate it. */
-/* */
-/*****************************************************************************/
-
-void EmitTab(FILE *out_fp)
-{
- if( tab_by_spacing )
- { putc(' ', out_fp);
- while( line_pos % tab_in != 0 )
- { putc(' ', out_fp);
- line_pos++;
- }
- }
- else
- { while( line_pos % tab_in != 0 )
- { line_pos++;
- }
- fprintf(out_fp, " $>%.1f%ct ",
- (line_pos/tab_in) * tab_out, tab_unit);
- }
-} /* end EmitTab */
-
-
-/*****************************************************************************/
-/* */
-/* BOOLEAN Scan(in_fp, out_fp) */
-/* */
-/* Scan the C source beginning in file in_fp and write it in modified */
-/* Lout source form onto out_fp. Return TRUE if successful. */
-/* */
-/*****************************************************************************/
-
-/* states of scanner */
-#define C_REGULAR 1
-#define C_SLASH 2
-#define C_COMMENT 3
-#define CPP_COMMENT 4
-#define LOUT_INSERT 5
-#define CPP_LOUT_INSERT 6
-#define LOUT_INSERT_STAR 7
-#define C_COMMENT_STAR 8
-#define C_STRING 9
-#define C_STRING_BACKSLASH 10
-#define C_CHAR 11
-#define C_CHAR_BACKSLASH 12
-
-static BOOLEAN Scan(FILE *in_fp, FILE *out_fp)
-{ int state, ch;
- state = C_REGULAR;
- while( (ch = getc(in_fp)) != EOF )
- {
- if( ch == '\n' )
- { line_num++;
- line_pos = 0;
- }
- else line_pos++;
-
- switch( state )
- {
-
- case C_REGULAR: /* in ordinary C code */
-
- if( ch == '\f' )
- { fprintf(out_fp, "\n@NP\n");
- }
- else if( ch == '\t' )
- { EmitTab(out_fp);
- }
- else if( ch == '#' )
- { fputs("$$", out_fp);
- }
- else if( ch == '\\' )
- { fputs("\"\\\\\"", out_fp);
- }
- else if( ch == '{' ) /*}*/
- { fputs("${", out_fp); /*}*/
- }
- else if( ch == /*{*/ '}' )
- { /*{*/ fputs("$}", out_fp);
- }
- else if( ch == '@' )
- { Error0("@ character in C program text");
- return FALSE;
- }
- else if( ch == '/' )
- { state = C_SLASH;
- }
- else if( ch == '\'' )
- { fputs("{@L \"", out_fp);
- state = C_CHAR;
- }
- else if( ch == '"' )
- { fputs("{@S \"", out_fp); /*}*/
- state = C_STRING;
- }
- else
- { putc(ch, out_fp);
- }
- break;
-
-
- case C_SLASH: /* in ordinary C code just after / */
-
- if( ch == '*' )
- { int nextch = getc(in_fp);
- if( nextch == EOF )
- { Error0("unexpected end-of-file");
- return FALSE;
- }
- else if( nextch == '@' )
- { state = LOUT_INSERT;
- }
- else
- { ungetc(nextch, in_fp);
- if( nextch == '\n' ) line_num--;
- fputs("{@C \"/*", out_fp);
- state = C_COMMENT;
- }
- }
- else if( ch == '/' ) /* C++ comment */
- { int nextch = getc(in_fp);
- if( nextch == EOF )
- { Error0("unexpected end-of-file");
- return FALSE;
- }
- else if( nextch == '@' )
- { state = CPP_LOUT_INSERT;
- }
- else
- { ungetc(nextch, in_fp);
- if( nextch == '\n' ) line_num--;
- fputs("{@C \"//", out_fp);
- state = CPP_COMMENT;
- }
- }
- else
- { putc('/', out_fp);
- ungetc(ch, in_fp);
- if( ch == '\n' ) line_num--;
- state = C_REGULAR;
- }
- break;
-
-
- case C_COMMENT: /* inside a C comment */
-
- if( ch == '\t' )
- { fputs("\"}", out_fp);
- EmitTab(out_fp);
- fputs("{@C \"", out_fp);
- }
- else if( ch == '\n' )
- { int nextch = getc(in_fp);
- if( nextch != EOF )
- { fputs("\"}\n{@C \"", out_fp);
- }
- ungetc(nextch, in_fp);
- if( ch == '\n' ) line_num--;
- }
- else if( ch == '\\' )
- { fputs("\\\\", out_fp);
- }
- else if( ch == '"' )
- { fputs("\\\"", out_fp);
- }
- else if( ch == '*' )
- { putc(ch, out_fp);
- state = C_COMMENT_STAR;
- }
- else
- { putc(ch, out_fp);
- }
- break;
-
-
- case CPP_COMMENT: /* inside a C++ comment */
-
- if( ch == '\t' )
- { fputs("\"}", out_fp);
- EmitTab(out_fp);
- fputs("{@C \"", out_fp);
- }
- else if( ch == '\n' )
- { fputs("\"}\n", out_fp);
- state = C_REGULAR;
- }
- else if( ch == '\\' )
- { fputs("\\\\", out_fp);
- }
- else if( ch == '"' )
- { fputs("\\\"", out_fp);
- }
- else
- { putc(ch, out_fp);
- }
- break;
-
-
- case LOUT_INSERT: /* inside C comment which is a Lout insert */
-
- if( ch == '*' )
- { state = LOUT_INSERT_STAR;
- }
- else
- { putc(ch, out_fp);
- }
- break;
-
-
- case LOUT_INSERT_STAR: /* inside Lout insert comment just after * */
-
- if( ch == '/' )
- { state = C_REGULAR;
- }
- else if( ch == '*' )
- { putc('*', out_fp);
- }
- else
- { putc('*', out_fp);
- putc(ch, out_fp);
- state = LOUT_INSERT;
- }
- break;
-
-
- case CPP_LOUT_INSERT: /* inside C++ comment which is a Lout insert */
-
- if( ch == '\n' )
- { putc(ch, out_fp);
- state = C_REGULAR;
- }
- else
- { putc(ch, out_fp);
- }
- break;
-
-
- case C_COMMENT_STAR: /* inside C comment just after * */
-
- if( ch == '/' )
- { fputs("/\"}", out_fp);
- state = C_REGULAR;
- }
- else if( ch == '*' )
- { putc(ch, out_fp);
- }
- else if( ch == '\t' )
- { fputs("\"}", out_fp);
- EmitTab(out_fp);
- fputs("{@C \"", out_fp);
- state = C_COMMENT;
- }
- else if( ch == '\n' )
- { fputs("\"}\n{@C \"", out_fp);
- state = C_COMMENT;
- }
- else if( ch == '\\' )
- { fputs("\\\\", out_fp);
- state = C_COMMENT;
- }
- else if( ch == '"' )
- { fputs("\\\"", out_fp);
- state = C_COMMENT;
- }
- else
- { putc(ch, out_fp);
- state = C_COMMENT;
- }
- break;
-
-
- case C_STRING: /* inside a C string */
-
- if( ch == '\t' )
- { Error0("replaced tab character in string by \\t");
- fputs("\\\\t", out_fp);
- }
- else if( ch == '\\' )
- { fputs("\\\\", out_fp);
- state = C_STRING_BACKSLASH;
- }
- else if( ch == '"' )
- { /*{*/ fputs("\"}", out_fp);
- state = C_REGULAR;
- }
- else if( ch == '\n' )
- { Error0("unterminated C string");
- /*{*/ fputs("\"}\n", out_fp);
- state = C_REGULAR;
- }
- else putc(ch, out_fp);
- break;
-
-
- case C_STRING_BACKSLASH: /* inside a C string just after \ */
-
- if( ch == '\t' )
- { Error0("replacing literal tab character after \\ by t");
- putc('t', out_fp);
- state = C_STRING;
- }
- else if( ch == '\\' )
- { fputs("\\\\", out_fp);
- state = C_STRING;
- }
- else if( ch == '"' )
- { fputs("\\\"", out_fp);
- state = C_STRING;
- }
- else if( ch == '\n' )
- { Error0("multi-line string printed as two strings, sorry");
- fputs("\"}\n{@S \"", out_fp);
- state = C_STRING;
- }
- else
- { putc(ch, out_fp);
- state = C_STRING;
- }
- break;
-
-
- case C_CHAR: /* inside char literal */
-
- if( ch == '\t' )
- { Error0("replacing literal tab character by \\t");
- fputs("\\\\t", out_fp);
- }
- else if( ch == '\\' )
- { fputs("\\\\", out_fp);
- state = C_CHAR_BACKSLASH;
- }
- else if( ch == '"' )
- { fputs("\\\"", out_fp);
- }
- else if( ch == '\n' )
- { Error0("unterminated C character constant");
- fputs("\"}\n", out_fp);
- state = C_REGULAR;
- }
- else if( ch == '\'' )
- { /*{*/ fputs("\"}", out_fp);
- state = C_REGULAR;
- }
- else putc(ch, out_fp);
- break;
-
-
-
- case C_CHAR_BACKSLASH: /* inside quoted char just after \ */
-
- if( ch == '"' )
- { fputs("\\\"", out_fp);
- state = C_CHAR;
- }
- else if( ch == '\\' )
- { fputs("\\\\", out_fp);
- state = C_CHAR;
- }
- else if( ch == '\n' )
- { Error0("unterminated C character constant");
- /*{*/ fputs("\"}\n", out_fp);
- state = C_REGULAR;
- }
- else
- { putc(ch, out_fp);
- state = C_CHAR;
- }
- break;
-
-
- default:
-
- Error1("unknown case %d", state);
- exit(1);
- break;
-
- }
- }
-
- /* check that final state is reasonable */
- switch( state )
- {
- case C_REGULAR: /* in ordinary C code */
-
- break;
-
-
- case C_SLASH: /* in ordinary C code just after / */
-
- fputs("/\n", out_fp);
- break;
-
-
- case C_COMMENT: /* inside a C comment */
- case CPP_COMMENT: /* inside a C++ comment */
- case C_COMMENT_STAR: /* inside C comment just after * */
-
- /*{*/ fputs("\"}\n", out_fp);
- Error0("C text ended inside a comment");
- break;
-
-
- case LOUT_INSERT: /* inside C comment which is a Lout insert */
- case CPP_LOUT_INSERT: /* inside C++ comment which is a Lout insert */
- case LOUT_INSERT_STAR: /* inside Lout insert comment just after * */
-
- Error0("C text ended inside a Lout inclusion");
- exit(1);
- break;
-
-
- case C_STRING: /* inside a C string */
- case C_STRING_BACKSLASH: /* inside a C string just after \ */
-
- /*{*/ fputs("\"}\n", out_fp);
- Error0("C text ended inside a string literal");
- break;
-
-
- case C_CHAR: /* inside char literal (has been quoted) */
- case C_CHAR_BACKSLASH: /* inside quoted char just after \ */
-
- /*{*/ fputs("\"}\n", out_fp);
- Error0("C text ended inside a character literal");
- break;
-
-
- default:
-
- Error0("unknown final state");
- exit(1);
- break;
- }
-
- return TRUE;
-} /* end Scan */
diff --git a/data/standard.ld b/data/standard.ld
index c003905..e56d469 100644
--- a/data/standard.ld
+++ b/data/standard.ld
@@ -36,6 +36,7 @@
Italian @Yield { Contenuto }
Norwegian @Yield { Innhold }
Polish @Yield { Spis tre{@Char sacute}ci }
+ Portuguese @Yield { Conte{@Char uacute}do }
Russian @Yield { "\363\317\304\305\322\326\301\316\311\305" }
Slovenian @Yield { Vsebina }
Spanish @Yield { Contenidos }
@@ -56,6 +57,7 @@
Italian @Yield { Riferimenti }
Norwegian @Yield { Referanser }
Polish @Yield { Odno{@Char sacute}niki }
+ Portuguese @Yield { Refer{@Char ecircumflex}ncias }
Russian @Yield { "\354\311\324\305\322\301\324\325\322\301" }
Slovenian @Yield { Reference }
Spanish @Yield { Referencias }
@@ -76,6 +78,7 @@
Italian @Yield { Bibliografia }
Norwegian @Yield { Litteratur }
Polish @Yield { Literatura }
+ Portuguese @Yield { Bibliografia }
Russian @Yield { "\354\311\324\305\322\301\324\325\322\301" }
Slovenian @Yield { Literatura }
Spanish @Yield { Bibliograf{@Char iacute}a }
@@ -96,6 +99,7 @@
Italian @Yield { Figura }
Norwegian @Yield { Figur }
Polish @Yield { Rysunek }
+ Portuguese @Yield { Figura }
Russian @Yield { "\362\311\323\325\316\317\313" }
Slovenian @Yield { Slika }
Spanish @Yield { Figura }
@@ -116,6 +120,7 @@
Italian @Yield { Elenco delle Figure }
Norwegian @Yield { ?? }
Polish @Yield { Spis rysunk{@Char oacute}w }
+ Portuguese @Yield { Lista de Figuras }
Russian @Yield { "\363\320\311\323\317\313 \311\314\314\300\323\324\322\301\303\311\312" }
Slovenian @Yield { Seznam slik }
Spanish @Yield { ?? }
@@ -136,6 +141,7 @@
Italian @Yield { Tabella }
Norwegian @Yield { Tabell }
Polish @Yield { Tabela }
+ Portuguese @Yield { Tabela }
Russian @Yield { "\364\301\302\314\311\303\301" }
Slovenian @Yield { Tabela }
Spanish @Yield { Tabla }
@@ -156,6 +162,7 @@
Italian @Yield { Elenco delle Tabelle }
Norwegian @Yield { ?? }
Polish @Yield { Spis tabel }
+ Portuguese @Yield { Lista de Tabelas }
Russian @Yield { "\363\320\311\323\317\313 \324\301\302\314\311\303" }
Slovenian @Yield { Seznam tabel }
Spanish @Yield { ?? }
@@ -176,6 +183,7 @@
Italian @Yield { Definizione }
Norwegian @Yield { ?? }
Polish @Yield { Definicja }
+ Portuguese @Yield { Defini{@Char ccedila}{@Char atilde}o }
Russian @Yield { "\357\320\322\305\304\305\314\305\316\311\305" }
Slovenian @Yield { Definicija }
Spanish @Yield { ?? }
@@ -196,6 +204,7 @@
Italian @Yield { Lemma }
Norwegian @Yield { ?? }
Polish @Yield { Lemat }
+ Portuguese @Yield { Lema }
Russian @Yield { "\354\305\315\315\301" }
Slovenian @Yield { Lema }
Spanish @Yield { ?? }
@@ -216,6 +225,7 @@
Italian @Yield { Teorema }
Norwegian @Yield { ?? }
Polish @Yield { Twierdzenie }
+ Portuguese @Yield { Teorema }
Russian @Yield { "\364\305\317\322\305\315\301" }
Slovenian @Yield { Teorem }
Spanish @Yield { ?? }
@@ -236,6 +246,7 @@
Italian @Yield { Proposizione }
Norwegian @Yield { ?? }
Polish @Yield { Za{@Char lslash}o{@Char zdotabove}enie }
+ Portuguese @Yield { Proposi{@Char ccedilla}{@Char atilde}o }
Russian @Yield { "\360\322\305\304\314\317\326\305\316\311\305" }
Slovenian @Yield { Predpostavka }
Spanish @Yield { ?? }
@@ -256,6 +267,7 @@
Italian @Yield { Corollario }
Norwegian @Yield { ?? }
Polish @Yield { Wniosek }
+ Portuguese @Yield { Corol{@Char aacute}rio }
Russian @Yield { "\363\314\305\304\323\324\327\311\305" }
Slovenian @Yield { Sklep }
Spanish @Yield { ?? }
@@ -276,6 +288,7 @@
Italian @Yield { Esempio }
Norwegian @Yield { ?? }
Polish @Yield { Przyk{@Char lslash}ad }
+ Portuguese @Yield { Exemplo }
Russian @Yield { "\360\322\311\315\305\322" }
Slovenian @Yield { Primer }
Spanish @Yield { ?? }
@@ -296,6 +309,7 @@
Italian @Yield { Affermazione }
Norwegian @Yield { ?? }
Polish @Yield { Stwierdzenie }
+ Portuguese @Yield { Crédito }
Russian @Yield { "\365\324\327\305\322\326\304\305\316\311\305" }
Slovenian @Yield { Trditev }
Spanish @Yield { ?? }
@@ -316,6 +330,7 @@
Italian @Yield { Dimostrazione }
Norwegian @Yield { ?? }
Polish @Yield { Dow{@Char oacute}d }
+ Portuguese @Yield { Prova }
Russian @Yield { "\344\317\313\301\332\301\324\305\314\330\323\324\327\317" }
Slovenian @Yield { Dokaz }
Spanish @Yield { ?? }
@@ -336,6 +351,7 @@
Italian @Yield { Riassunto }
Norwegian @Yield { Sammendrag }
Polish @Yield { Abstrakt }
+ Portuguese @Yield { Resumo }
Russian @Yield { "\341\302\323\324\322\301\313\324" } #correct!
Slovenian @Yield { Povzetek }
Spanish @Yield { Sinopsis }
@@ -356,6 +372,7 @@
Italian @Yield { Prefazione }
Norwegian @Yield { Forord }
Polish @Yield { Przedmowa }
+ Portuguese @Yield { Pref{@Char aacute}cio }
Russian @Yield { "\360\322\305\304\311\323\314\317\327\311\305" }
Slovenian @Yield { Predgovor }
Spanish @Yield { Prefacio }
@@ -376,6 +393,7 @@
Italian @Yield { ?? }
Norwegian @Yield { ?? }
Polish @Yield { ?? }
+ Portuguese @Yield { Abrevia{@Char ccedilla}{@Char otilde}es }
Russian @Yield { ?? }
Slovenian @Yield { ?? }
Spanish @Yield { ?? }
@@ -396,6 +414,7 @@
Italian @Yield { Introduzione }
Norwegian @Yield { Innledning }
Polish @Yield { Wst{@Char eogonek}p }
+ Portuguese @Yield { Introdu{@Char ccedilla}{@Char atilde}o }
Russian @Yield { "\367\327\305\304\305\316\311\305" }
Slovenian @Yield { Uvod }
Spanish @Yield { Introducci{@Char oacute}n }
@@ -416,6 +435,7 @@
Italian @Yield { Capitolo }
Norwegian @Yield { Kapittel }
Polish @Yield { Rozdzia{@Char lslash} }
+ Portuguese @Yield { Cap{@Char iacute}tolo }
Russian @Yield { "\347\314\301\327\301" }
Slovenian @Yield { Poglavje }
Spanish @Yield { Cap{@Char iacute}tulo }
@@ -436,6 +456,7 @@
Italian @Yield { Appendice }
Norwegian @Yield { Tillegg }
Polish @Yield { Dodatek }
+ Portuguese @Yield { Apêndice }
Russian @Yield { "\360\322\311\314\317\326\305\316\311\305" }
Slovenian @Yield { Dodatek }
Spanish @Yield { Ap{@Char eacute}ndice }
@@ -456,6 +477,7 @@
Italian @Yield { Lecture }
Norwegian @Yield { Lecture }
Polish @Yield { Lecture }
+ Portuguese @Yield { Conferência }
Russian @Yield { Lecture }
Slovenian @Yield { Lecture }
Spanish @Yield { Lecture }
@@ -476,6 +498,7 @@
Italian @Yield { Indice }
Norwegian @Yield { Register }
Polish @Yield { Skorowidz }
+ Portuguese @Yield { {@Char Iacute}ndice Remissivo }
Russian @Yield { "\351\316\304\305\313\323" }
Slovenian @Yield { Indeks }
Spanish @Yield { Indice }
@@ -494,6 +517,7 @@
German @Yield { Ohne Titel }
Hungarian @Yield { C{@Char iacute}m n{@Char eacute}lk{@Char udieresis}l }
Polish @Yield { Bez tytu{@Char lslash}u }
+ Portuguese @Yield { Sem t{@Char iacute}tulo }
Italian @Yield { Senza titolo }
Norwegian @Yield { Utel tittel }
Russian @Yield { "\342\305\332 \316\301\332\327\301\316\311\321" }
@@ -516,6 +540,7 @@
Italian @Yield { pagine }
Norwegian @Yield { sider }
Polish @Yield { strony }
+ Portuguese @Yield { p{@Char aacute}ginas }
Russian @Yield { "\323\324\322\301\316\311\303\331" }
Slovenian @Yield { strani }
Spanish @Yield { p{@Char aacute}ginas }
@@ -536,6 +561,7 @@
Italian @Yield { pagina }
Norwegian @Yield { side }
Polish @Yield { strona }
+ Portuguese @Yield { p{@Char aacute}gina }
Russian @Yield { "\323\324\322\301\316\311\303\301" }
Slovenian @Yield { stran }
Spanish @Yield { p{@Char aacute}gina }
@@ -556,6 +582,7 @@
Italian @Yield { Senza editore }
Norwegian @Yield { Upublisert }
Polish @Yield { Bez wydawcy }
+ Portuguese @Yield { Sem editora }
Russian @Yield { "\302\305\332 \311\332\304\301\324\305\314\321" }
Slovenian @Yield { Brez zalo{@Char zcaron}nika }
Spanish @Yield { Sin editor }
@@ -577,6 +604,7 @@
Norwegian @Yield { Tekn. Rapp. }
Russian @Yield { "\324\305\310. \304\317\313\314\301\304" }
Polish @Yield { Sprawozdanie techniczne }
+ Portuguese @Yield { Relat{@Char oacute}rio t{@Char eacute}cnico }
Slovenian @Yield { Tehn. por. }
Spanish @Yield { ?? }
Swedish @Yield { Tekn. rap. }
@@ -596,6 +624,7 @@
Italian @Yield { Tesi di dottorato }
Norwegian @Yield { Doktorgradsavhandling }
Polish @Yield { Praca doktorska }
+ Portuguese @Yield { Tese de doutoramento }
Russian @Yield { "\313\301\316\304\311\304\301\324\323\313\301\321"
"\304\311\323\323\305\322\324\301\303\311\321" }
Slovenian @Yield { Doktorska disertacija }
@@ -617,6 +646,7 @@
Italian @Yield { Tesi di laurea }
Norwegian @Yield { Diplomoppgave }
Polish @Yield { Praca magisterska }
+ Portuguese @Yield { Disserta{@Char ccedilla}{@Char atilde}o de mestrado }
Russian @Yield { "\304\311\320\314\317\315\316\301\321"
"\322\301\302\317\324\301" }
Slovenian @Yield { Diploma }
@@ -638,6 +668,7 @@
Italian @Yield { In }
Norwegian @Yield { I }
Polish @Yield { W }
+ Portuguese @Yield { Em }
Russian @Yield { "\327" }
Slovenian @Yield { V }
Spanish @Yield { En }
@@ -653,7 +684,7 @@
EnglishUK @Yield { ctd. }
Finnish @Yield { ?? }
French @Yield { suite }
- German @Yield { ?? }
+ German @Yield { Fortsetzung }
Hungarian @Yield { folyt. }
Italian @Yield { cont. }
Norwegian @Yield { ?? }
@@ -679,6 +710,7 @@
Italian @Yield { a.m. }
Norwegian @Yield { a.m. }
Polish @Yield { a.m. }
+ Portuguese @Yield { a.m. }
Russian @Yield { a.m. }
Slovenian @Yield { a.m. }
Spanish @Yield { a.m. }
@@ -699,6 +731,7 @@
Italian @Yield { p.m. }
Norwegian @Yield { p.m. }
Polish @Yield { p.m. }
+ Portuguese @Yield { p.m. }
Russian @Yield { p.m. }
Slovenian @Yield { p.m. }
Spanish @Yield { p.m. }
@@ -719,6 +752,7 @@
Italian @Yield { am }
Norwegian @Yield { am }
Polish @Yield { am }
+ Portuguese @Yield { am }
Russian @Yield { am }
Slovenian @Yield { am }
Spanish @Yield { am }
@@ -739,6 +773,7 @@
Italian @Yield { pm }
Norwegian @Yield { pm }
Polish @Yield { pm }
+ Portuguese @Yield { pm }
Russian @Yield { pm }
Slovenian @Yield { pm }
Spanish @Yield { pm }
@@ -1193,6 +1228,7 @@
Italian @Yield { @Char ae }
Norwegian @Yield { @Char ae }
Polish @Yield { ?? }
+ Portuguese @Yield { ?? }
Russian @Yield { ?? }
Slovenian @Yield { ?? }
Spanish @Yield { ?? }
@@ -1212,6 +1248,7 @@
Italian @Yield { ?? }
Norwegian @Yield { @Char oslash }
Polish @Yield { ?? }
+ Portuguese @Yield { ?? }
Russian @Yield { ?? }
Slovenian @Yield { ?? }
Spanish @Yield { ?? }
@@ -1231,6 +1268,7 @@
Italian @Yield { ?? }
Norwegian @Yield { @Char aring }
Polish @Yield { ?? }
+ Portuguese @Yield { ?? }
Russian @Yield { ?? }
Slovenian @Yield { ?? }
Spanish @Yield { ?? }
@@ -1278,6 +1316,7 @@
Italian @Yield { @Char AE }
Norwegian @Yield { @Char AE }
Polish @Yield { ?? }
+ Portuguese @Yield { ?? }
Russian @Yield { ?? }
Slovenian @Yield { ?? }
Spanish @Yield { ?? }
@@ -1297,6 +1336,7 @@
Italian @Yield { ?? }
Norwegian @Yield { @Char Oslash }
Polish @Yield { ?? }
+ Portuguese @Yield { ?? }
Russian @Yield { ?? }
Slovenian @Yield { ?? }
Spanish @Yield { ?? }
@@ -1316,6 +1356,7 @@
Italian @Yield { ?? }
Norwegian @Yield { @Char Aring }
Polish @Yield { ?? }
+ Portuguese @Yield { ?? }
Russian @Yield { ?? }
Slovenian @Yield { ?? }
Spanish @Yield { ?? }
@@ -1336,6 +1377,7 @@
Italian @Yield { gennaio }
Norwegian @Yield { januar }
Polish @Yield { stycze{@Char nacute} }
+ Portuguese @Yield { janeiro }
Russian @Yield { "\321\316\327\301\322\321" }
Slovenian @Yield { januar }
Spanish @Yield { Enero }
@@ -1355,6 +1397,7 @@
Italian @Yield { febbraio }
Norwegian @Yield { februar }
Polish @Yield { luty }
+ Portuguese @Yield { fevereiro }
Russian @Yield { "\306\305\327\322\301\314\321" }
Slovenian @Yield { februar }
Spanish @Yield { Febrero }
@@ -1374,6 +1417,7 @@
Italian @Yield { marzo }
Norwegian @Yield { mars }
Polish @Yield { marzec }
+ Portuguese @Yield { mar{@Char ccedilla}o }
Russian @Yield { "\315\301\322\324\301" }
Slovenian @Yield { marec }
Spanish @Yield { Marzo }
@@ -1393,6 +1437,7 @@
Italian @Yield { aprile }
Norwegian @Yield { april }
Polish @Yield { kwiecie{@Char nacute} }
+ Portuguese @Yield { abril }
Russian @Yield { "\301\320\322\305\314\321" }
Slovenian @Yield { april }
Spanish @Yield { Abril }
@@ -1412,6 +1457,7 @@
Italian @Yield { maggio }
Norwegian @Yield { mai }
Polish @Yield { maj }
+ Portuguese @Yield { maio }
Russian @Yield { "\315\301\321" }
Slovenian @Yield { maj }
Spanish @Yield { Mayo }
@@ -1431,6 +1477,7 @@
Italian @Yield { giugno }
Norwegian @Yield { juni }
Polish @Yield { czerwiec }
+ Portuguese @Yield { junho }
Russian @Yield { "\311\300\316\321" }
Slovenian @Yield { junij }
Spanish @Yield { Junio }
@@ -1451,6 +1498,7 @@
Italian @Yield { luglio }
Norwegian @Yield { juli }
Polish @Yield { lipiec }
+ Portuguese @Yield { julho }
Russian @Yield { "\311\300\314\321" }
Slovenian @Yield { julij }
Spanish @Yield { Julio }
@@ -1470,6 +1518,7 @@
Italian @Yield { agosto }
Norwegian @Yield { august }
Polish @Yield { sierpie{@Char nacute} }
+ Portuguese @Yield { agosto }
Russian @Yield { "\301\327\307\325\323\324\301" }
Slovenian @Yield { avgust }
Spanish @Yield { Agosto }
@@ -1489,6 +1538,7 @@
Italian @Yield { settembre }
Norwegian @Yield { september }
Polish @Yield { wrzesie{@Char nacute} }
+ Portuguese @Yield { setembro }
Russian @Yield { "\323\305\316\324\321\302\322\321" }
Slovenian @Yield { september }
Spanish @Yield { Septiembre }
@@ -1508,6 +1558,7 @@
Italian @Yield { ottobre }
Norwegian @Yield { oktober }
Polish @Yield { pa{@Char zacute}dziernik }
+ Portuguese @Yield { outubro }
Russian @Yield { "\317\313\324\321\302\322\321" }
Slovenian @Yield { oktober }
Spanish @Yield { Octubre }
@@ -1527,6 +1578,7 @@
Italian @Yield { novembre }
Norwegian @Yield { november }
Polish @Yield { listopad }
+ Portuguese @Yield { novembro }
Russian @Yield { "\316\317\321\302\322\321" }
Slovenian @Yield { november }
Spanish @Yield { Noviembre }
@@ -1546,6 +1598,7 @@
Italian @Yield { dicembre }
Norwegian @Yield { desember }
Polish @Yield { grudzie{@Char nacute} }
+ Portuguese @Yield { dezembro }
Russian @Yield { "\304\305\313\301\302\322\321" }
Slovenian @Yield { december }
Spanish @Yield { Diciembre }
@@ -1566,6 +1619,7 @@
Italian @Yield { gen }
Norwegian @Yield { jan }
Polish @Yield { sty }
+ Portuguese @Yield { jan }
Russian @Yield { "\321\316\327" }
Slovenian @Yield { jan }
Spanish @Yield { Ene }
@@ -1585,6 +1639,7 @@
Italian @Yield { feb }
Norwegian @Yield { feb }
Polish @Yield { luty }
+ Portuguese @Yield { fev }
Russian @Yield { "\306\305\327" }
Slovenian @Yield { feb }
Spanish @Yield { Feb }
@@ -1604,6 +1659,7 @@
Italian @Yield { mar }
Norwegian @Yield { mar }
Polish @Yield { marz }
+ Portuguese @Yield { mar }
Russian @Yield { "\315\301\322" }
Slovenian @Yield { mar }
Spanish @Yield { Mar }
@@ -1623,6 +1679,7 @@
Italian @Yield { apr }
Norwegian @Yield { apr }
Polish @Yield { kwie }
+ Portuguese @Yield { abr }
Russian @Yield { "\301\320\322" }
Slovenian @Yield { apr }
Spanish @Yield { Abr }
@@ -1642,6 +1699,7 @@
Italian @Yield { mag }
Norwegian @Yield { mai }
Polish @Yield { maj }
+ Portuguese @Yield { mai }
Russian @Yield { "\315\301\321" }
Slovenian @Yield { maj }
Spanish @Yield { May }
@@ -1661,6 +1719,7 @@
Italian @Yield { giu }
Norwegian @Yield { jun }
Polish @Yield { czer }
+ Portuguese @Yield { jun }
Russian @Yield { "\311\300\316\321" }
Slovenian @Yield { jun }
Spanish @Yield { Jun }
@@ -1680,6 +1739,7 @@
Italian @Yield { lug }
Norwegian @Yield { jul }
Polish @Yield { lip }
+ Portuguese @Yield { jul }
Russian @Yield { "\311\300\314\321" }
Slovenian @Yield { jul }
Spanish @Yield { Jul }
@@ -1699,6 +1759,7 @@
Italian @Yield { ago }
Norwegian @Yield { aug }
Polish @Yield { sier }
+ Portuguese @Yield { ago }
Russian @Yield { "\301\327\307" }
Slovenian @Yield { avg }
Spanish @Yield { Ago }
@@ -1718,6 +1779,7 @@
Italian @Yield { set }
Norwegian @Yield { sep }
Polish @Yield { wrze }
+ Portuguese @Yield { set }
Russian @Yield { "\323\305\316" }
Slovenian @Yield { sep }
Spanish @Yield { Sep }
@@ -1737,6 +1799,7 @@
Italian @Yield { ott }
Norwegian @Yield { okt }
Polish @Yield { pa{@Char zacute} }
+ Portuguese @Yield { out }
Russian @Yield { "\317\313\324" }
Slovenian @Yield { okt }
Spanish @Yield { Oct }
@@ -1756,6 +1819,7 @@
Italian @Yield { nov }
Norwegian @Yield { nov }
Polish @Yield { list }
+ Portuguese @Yield { nov }
Russian @Yield { "\316\317\321" }
Slovenian @Yield { nov }
Spanish @Yield { Nov }
@@ -1775,6 +1839,7 @@
Italian @Yield { dic }
Norwegian @Yield { des }
Polish @Yield { gru }
+ Portuguese @Yield { dez }
Russian @Yield { "\304\305\313" }
Slovenian @Yield { dec }
Spanish @Yield { Dic }
@@ -1795,6 +1860,7 @@
Italian @Yield { domenica }
Norwegian @Yield { s{@Char oslash}ndag }
Polish @Yield { niedziela }
+ Portuguese @Yield { Domingo }
Russian @Yield { "\327\317\323\313\322\305\323\305\316\330\305" }
Slovenian @Yield { nedelja }
Spanish @Yield { Domingo }
@@ -1814,6 +1880,7 @@
Italian @Yield { luned{@Char igrave} }
Norwegian @Yield { mandag }
Polish @Yield { poniedzia{@Char lslash}ek }
+ Portuguese @Yield { Segunda }
Russian @Yield { "\320\317\316\305\304\305\314\330\316\311\313" }
Slovenian @Yield { ponedeljek }
Spanish @Yield { Lunes }
@@ -1833,6 +1900,7 @@
Italian @Yield { marted{@Char igrave} }
Norwegian @Yield { tirsdag }
Polish @Yield { wtorek }
+ Portuguese @Yield { Ter{@Char ccedilla}a }
Russian @Yield { "\327\324\317\322\316\311\313" }
Slovenian @Yield { torek }
Spanish @Yield { Martes }
@@ -1852,6 +1920,7 @@
Italian @Yield { mercoled{@Char igrave} }
Norwegian @Yield { onsdag }
Polish @Yield { {@Char sacute}roda }
+ Portuguese @Yield { Quarta }
Russian @Yield { "\323\322\305\304\301" }
Slovenian @Yield { sreda }
Spanish @Yield { Mi{@Char eacute}rcoles }
@@ -1871,6 +1940,7 @@
Italian @Yield { gioved{@Char igrave} }
Norwegian @Yield { torsdag }
Polish @Yield { czwartek }
+ Portuguese @Yield { Quinta }
Russian @Yield { "\336\305\324\327\305\322\307" }
Slovenian @Yield { {@Char ccaron}etrtek }
Spanish @Yield { Jueves }
@@ -1890,6 +1960,7 @@
Italian @Yield { venerd{@Char igrave} }
Norwegian @Yield { fredag }
Polish @Yield { pi{@Char aogonek}tek }
+ Portuguese @Yield { Sexta }
Russian @Yield { "\320\321\324\316\311\303\301" }
Slovenian @Yield { petek }
Spanish @Yield { Viernes }
@@ -1909,6 +1980,7 @@
Italian @Yield { sabato }
Norwegian @Yield { l{@Char oslash}rdag }
Polish @Yield { sobota }
+ Portuguese @Yield { S{@Char aacute}bado }
Russian @Yield { "\323\325\302\302\317\324\301" }
Slovenian @Yield { sobota }
Spanish @Yield { S{@Char aacute}bado }
@@ -1929,6 +2001,7 @@
Italian @Yield { dom }
Norwegian @Yield { s{@Char oslash}n }
Polish @Yield { niedz }
+ Portuguese @Yield { Dom }
Russian @Yield { "\327\323" }
Slovenian @Yield { ned }
Spanish @Yield { Dom }
@@ -1948,6 +2021,7 @@
Italian @Yield { lun }
Norwegian @Yield { man }
Polish @Yield { pon }
+ Portuguese @Yield { Seg }
Russian @Yield { "\320\316" }
Slovenian @Yield { pon }
Spanish @Yield { Lun }
@@ -1967,6 +2041,7 @@
Italian @Yield { mar }
Norwegian @Yield { tir }
Polish @Yield { wto }
+ Portuguese @Yield { Ter }
Russian @Yield { "\327\324" }
Slovenian @Yield { tor }
Spanish @Yield { Mar }
@@ -1986,6 +2061,7 @@
Italian @Yield { mer }
Norwegian @Yield { ons }
Polish @Yield { {@Char sacute}ro }
+ Portuguese @Yield { Qua }
Russian @Yield { "\323\322" }
Slovenian @Yield { sre }
Spanish @Yield { Mie }
@@ -2005,6 +2081,7 @@
Italian @Yield { gio }
Norwegian @Yield { tor }
Polish @Yield { czw }
+ Portuguese @Yield { Qui }
Russian @Yield { "\336\324" }
Slovenian @Yield { cet }
Spanish @Yield { Jue }
@@ -2024,6 +2101,7 @@
Italian @Yield { ven }
Norwegian @Yield { fre }
Polish @Yield { pi{@Char aogonek}t }
+ Portuguese @Yield { Sex }
Russian @Yield { "\320\324" }
Slovenian @Yield { pet }
Spanish @Yield { Vie }
@@ -2043,6 +2121,7 @@
Italian @Yield { sab }
Norwegian @Yield { l{@Char oslash}r }
Polish @Yield { sob }
+ Portuguese @Yield { S{@Char aacute}b }
Russian @Yield { "\323\302" }
Slovenian @Yield { sob }
Spanish @Yield { Sab }
@@ -2167,6 +2246,7 @@
Italian @Yield { @DayNum @Month @Year }
Norwegian @Yield { @DayNum @Month, @Year }
Polish @Yield { @DayNum @Month @Year }
+ Portuguese @Yield { @DayNum "de" @Month "de" @Year }
Russian @Yield { @DayNum @Month @Year }
Slovenian @Yield { @DayNum @Month @Year }
Spanish @Yield { @DayNum "de" @Month, @Year }
@@ -2187,11 +2267,10 @@
Italian @Yield { @ShortHour.@Minute }
Norwegian @Yield { @ShortHour.@Minute }
Polish @Yield { @ShortHour.@Minute }
+ Portuguese @Yield { @ShortHour:@Minute }
Russian @Yield { @ShortHour.@Minute }
Slovenian @Yield { @ShortHour.@Minute }
Spanish @Yield { @ShortHour:@Minute }
Swedish @Yield { @ShortHour.@Minute }
} }
}
-
-
diff --git a/doc/README b/doc/README
index 62f2260..791ceb2 100644
--- a/doc/README
+++ b/doc/README
@@ -15,4 +15,4 @@ slides A Practical Introduction to the Lout Document Formatting
user A User's Guide to the Lout Document Formatting System
Jeffrey H. Kingston
-17 November 1997
+8 April 2000
diff --git a/doc/design/README b/doc/design/README
index 1e7a8af..87c660d 100644
--- a/doc/design/README
+++ b/doc/design/README
@@ -22,4 +22,4 @@ messages (although changing the paper size might
produce one or two benign ones).
Jeffrey H. Kingston
-17 September 1999
+8 April 2000
diff --git a/doc/design/outfile.ps b/doc/design/outfile.ps
new file mode 100644
index 0000000..904d913
--- /dev/null
+++ b/doc/design/outfile.ps
@@ -0,0 +1,11703 @@
+%!PS-Adobe-3.0
+%%Creator: Basser Lout Version 3.20 (April 2000)
+%%CreationDate: Sat Apr 8 14:53:13 2000
+%%DocumentData: Binary
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%DocumentMedia: A4 595 842 0 white ()
+%%PageOrder: Ascend
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 842
+%%EndComments
+
+%%BeginProlog
+%%BeginResource: procset LoutStartUp
+/m { 3 1 roll moveto show } bind def
+/mo { 3 1 roll moveto true charpath stroke } bind def
+/s { exch currentpoint exch pop moveto show } bind def
+/so { exch currentpoint exch pop moveto true charpath stroke } bind def
+/k { exch neg 0 rmoveto show } bind def
+/ko { exch neg 0 rmoveto true charpath stroke } bind def
+/ul { gsave setlinewidth dup 3 1 roll
+ moveto lineto stroke grestore } bind def
+/in { 1440 mul } def
+/cm { 567 mul } def
+/pt { 20 mul } def
+/em { 120 mul } def
+/sp { louts mul } def
+/vs { loutv mul } def
+/ft { loutf mul } def
+/dg { } def
+
+/LoutGraphic {
+ /louts exch def
+ /loutv exch def
+ /loutf exch def
+ /ymark exch def
+ /xmark exch def
+ /ysize exch def
+ /xsize exch def
+} def
+
+/LoutGr2 { gsave translate LoutGraphic gsave } def
+
+/LoutFont
+{ findfont exch scalefont setfont
+} bind def
+
+/LoutRecode {
+ { findfont dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding exch def
+ currentdict end definefont pop
+ }
+ stopped pop
+} bind def
+
+/BeginEPSF {
+ /LoutEPSFState save def
+ /dict_count countdictstack def
+ /op_count count 1 sub def
+ userdict begin
+ /showpage { } def
+ 0 setgray 0 setlinecap
+ 1 setlinewidth 0 setlinejoin
+ 10 setmiterlimit [] 0 setdash newpath
+ /languagelevel where
+ { pop languagelevel
+ 1 ne
+ { false setstrokeadjust false setoverprint
+ } if
+ } if
+} bind def
+
+/EndEPSF {
+ count op_count sub { pop } repeat
+ countdictstack dict_count sub { end } repeat
+ LoutEPSFState restore
+} bind def
+%%EndResource
+
+%%BeginResource: encoding vec2
+/vec2 [
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
+/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /A /B /C /D /E /F /G
+/H /I /J /K /L /M /N /O
+/P /Q /R /S /T /U /V /W
+/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+/quoteleft /a /b /c /d /e /f /g
+/h /i /j /k /l /m /n /o
+/p /q /r /s /t /u /v /w
+/x /y /z /braceleft /bar /braceright /asciitilde /.notdef
+/quotesinglbase /quotedblbase /ellipsis /OE /oe /quotedblleft /quotedblright /fi
+/fl /endash /emdash /bullet /dagger /daggerdbl /florin /fraction
+/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
+/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
+] def
+%%EndResource
+
+%%BeginResource: procset LoutTabPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/tabf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Tab %
+% %
+% To assist in avoiding name clashes, the names %
+% of all these symbols begin with "ltab". %
+% %
+% Jeffrey H. Kingston %
+% 24 September 1991 %
+% 22 December 1992 %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% linewidth ltabhs -
+% horizontal single line
+/ltabhs
+{ 0 0 moveto xsize 0 lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhsp -
+% horizontal single line with projecting ends
+/ltabhsp
+{ 0 0 moveto xsize 0 lineto
+ setlinewidth 2 setlinecap stroke
+} def
+
+% linewidth ltabhd -
+% horizontal double line
+/ltabhd
+{ dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch 3 mul moveto xsize exch 3 mul lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhdb -
+% horizontal double line below mark
+/ltabhdb
+{ dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch -3 mul moveto xsize exch -3 mul lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhdnw -
+% horizontal double line with northwest corner
+/ltabhdnw
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ xsize exch 3 mul moveto
+ -3 mul exch 3 mul lineto
+ -3 mul 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdne -
+% horizontal double line with northeast corner
+/ltabhdne
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch 3 mul moveto
+ 3 mul xsize add exch 3 mul lineto
+ 3 mul xsize add 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdsw -
+% horizontal double line with southwest corner
+/ltabhdsw
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ xsize exch -3 mul moveto
+ -3 mul exch -3 mul lineto
+ -3 mul 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdse -
+% horizontal double line with southeast corner
+/ltabhdse
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch -3 mul moveto
+ 3 mul xsize add exch -3 mul lineto
+ 3 mul xsize add 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabvs -
+% vertical single line
+/ltabvs
+{ 0 0 moveto 0 ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabvd -
+% vertical double line
+/ltabvd
+{ dup dup
+ 0 0 moveto 0 ysize lineto
+ -3 mul 0 moveto -3 mul ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabvdr -
+% vertical double line to right of mark
+/ltabvdr
+{ dup dup
+ 0 0 moveto 0 ysize lineto
+ 3 mul 0 moveto 3 mul ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+%%EndResource
+
+%%BeginResource: procset LoutFigPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/figf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Fig Jeffrey H. Kingston %
+% Version 2.0 (includes CIRCUM label) January 1992 %
+% %
+% To assist in avoiding name clashes, the names of all symbols %
+% defined here begin with "lfig". However, this is not feasible %
+% with user-defined labels and some labels used by users. %
+% %
+% <point> is two numbers, a point. %
+% <length> is one number, a length %
+% <angle> is one number, an angle in degrees %
+% <dashlength> is one number, the preferred length of a dash %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+errordict begin
+ /handleerror
+ {
+ { /Times-Roman findfont 8 pt scalefont setfont
+ 0 setgray 4 pt 4 pt moveto
+ $error /errorname get
+ dup lfigdict exch known
+ { lfigdict exch get }
+ { 30 string cvs } ifelse
+ show
+ ( Command: ) show
+ $error /command get 30 string cvs show
+ } stopped {} if
+ showpage stop
+ } def
+end
+
+% concat strings: <string> <string> lfigconcat <string>
+% must be defined outside lfigdict since used in lfigpromotelabels
+/lfigconcat
+{ 2 copy length exch length add string
+ dup 0 4 index putinterval
+ dup 3 index length 3 index putinterval
+ 3 1 roll pop pop
+} def
+
+% <string> lfigdebugprint -
+% must be defined outside lfigdict since used in arbitrary places
+% /lfigdebugprint
+% { print
+% (; operand stack:\n) print
+% count copy
+% count 2 idiv
+% { ==
+% (\n) print
+% } repeat
+% (\n) print
+% } def
+
+/lfigdict 120 dict def
+lfigdict begin
+
+% error messages
+/dictfull (dictfull error: too many labels?) def
+/dictstackoverflow (dictstackoverflow error: labels nested too deeply?) def
+/execstackoverflow (execstackoverflow error: figure nested too deeply?) def
+/limitcheck (limitcheck error: figure nested too deeply or too large?) def
+/syntaxerror (syntaxerror error: syntax error in text of figure?) def
+/typecheck (typecheck error: syntax error in text of figure?) def
+/undefined (undefined error: unknown or misspelt label?) def
+/VMError (VMError error: run out of memory?) def
+
+% push pi onto stack: - lfigpi <num>
+/lfigpi 3.14159 def
+
+% arc directions
+/clockwise false def
+/anticlockwise true def
+
+% maximum of two numbers: <num> <num> lfigmax <num>
+/lfigmax { 2 copy gt { pop } { exch pop } ifelse } def
+
+% minimum of two numbers: <num> <num> lfigmin <num>
+/lfigmin { 2 copy lt { pop } { exch pop } ifelse } def
+
+% add two points: <point> <point> lfigpadd <point>
+/lfigpadd { exch 3 1 roll add 3 1 roll add exch } def
+
+% subtract first point from second: <point> <point> lfigpsub <point>
+/lfigpsub { 3 2 roll sub 3 1 roll exch sub exch } def
+
+% max two points: <point> <point> lfigpmax <point>
+/lfigpmax { exch 3 1 roll lfigmax 3 1 roll lfigmax exch } def
+
+% min two points: <point> <point> lfigpmin <point>
+/lfigpmin { exch 3 1 roll lfigmin 3 1 roll lfigmin exch } def
+
+% scalar multiplication: <point> <num> lfigpmul <point>
+/lfigpmul { dup 3 1 roll mul 3 1 roll mul exch } def
+
+% point at angle and distance: <point> <length> <angle> lfigatangle <point>
+/lfigatangle { 2 copy cos mul 3 1 roll sin mul lfigpadd } def
+
+% angle from one point to another: <point> <point> lfigangle <angle>
+/lfigangle { lfigpsub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+
+% distance between two points: <point> <point> lfigdistance <length>
+/lfigdistance { lfigpsub dup mul exch dup mul add sqrt } def
+
+% difference in x coords: <point> <point> lfigxdistance <length>
+/lfigxdistance { pop 3 1 roll pop sub } def
+
+%difference in y coords: <point> <point> lfigydistance <length>
+/lfigydistance { 3 1 roll pop sub exch pop } def
+
+% stroke a solid line: <length> <dashlength> lfigsolid -
+/lfigsolid
+{ pop pop [] 0 setdash stroke
+} def
+
+% stroke a lfigdashed line: <length> <dashlength> lfigdashed -
+/lfigdashed
+{ 2 copy div 2 le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch dup ] 0 setdash }
+ { dup [ exch 4 2 roll 2 copy div
+ 1 sub 2 div ceiling dup 4 1 roll
+ 1 add mul sub exch div ] 0 setdash
+ } ifelse stroke
+} def
+
+% stroke a lfigcdashed line: <length> <dashlength> lfigcdashed -
+/lfigcdashed
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch dup ] dup 0 get 2 div setdash }
+ { dup [ 4 2 roll exch 2 copy exch div
+ 2 div ceiling div 1 index sub
+ ] exch 2 div setdash
+ } ifelse stroke
+} def
+
+% stroke a dotted line: <length> <dashlength> lfigdotted -
+/lfigdotted
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch 0 exch ] 0 setdash }
+ { 1 index exch div ceiling div
+ [ 0 3 2 roll ] 0 setdash
+ } ifelse stroke
+} def
+
+% stroke a noline line: <length> <dashlength> lfignoline -
+/lfignoline
+{ pop pop
+} def
+
+% painting (i.e. filling): - lfigwhite - (etc.)
+/lfignopaint { } def
+/lfignochange { fill } def
+/lfigdarkblue { 0.0 0.0 0.5 setrgbcolor fill } def
+/lfigblue { 0.0 0.0 1.0 setrgbcolor fill } def
+/lfiglightblue { 0.5 0.5 1.0 setrgbcolor fill } def
+/lfigdarkgreen { 0.0 0.5 0.0 setrgbcolor fill } def
+/lfiggreen { 0.0 1.0 0.0 setrgbcolor fill } def
+/lfiglightgreen { 0.5 1.0 0.5 setrgbcolor fill } def
+/lfigdarkred { 0.5 0.0 0.0 setrgbcolor fill } def
+/lfigred { 1.0 0.0 0.0 setrgbcolor fill } def
+/lfiglightred { 1.0 0.5 0.5 setrgbcolor fill } def
+/lfigdarkcyan { 0.0 0.5 0.5 setrgbcolor fill } def
+/lfigcyan { 0.0 1.0 1.0 setrgbcolor fill } def
+/lfiglightcyan { 0.5 1.0 1.0 setrgbcolor fill } def
+/lfigdarkmagenta { 0.5 0.0 0.5 setrgbcolor fill } def
+/lfigmagenta { 1.0 0.0 1.0 setrgbcolor fill } def
+/lfiglightmagenta { 1.0 0.5 1.0 setrgbcolor fill } def
+/lfigdarkyellow { 0.5 0.5 0.0 setrgbcolor fill } def
+/lfigyellow { 1.0 1.0 0.0 setrgbcolor fill } def
+/lfiglightyellow { 1.0 1.0 0.5 setrgbcolor fill } def
+/lfigdarkgray { 0.2 0.2 0.2 setrgbcolor fill } def
+/lfiggray { 0.5 0.5 0.5 setrgbcolor fill } def
+/lfiglightgray { 0.8 0.8 0.8 setrgbcolor fill } def
+/lfigdarkgrey { 0.2 0.2 0.2 setrgbcolor fill } def
+/lfiggrey { 0.5 0.5 0.5 setrgbcolor fill } def
+/lfiglightgrey { 0.8 0.8 0.8 setrgbcolor fill } def
+/lfigblack { 0.0 0.0 0.0 setrgbcolor fill } def
+/lfigwhite { 1.0 1.0 1.0 setrgbcolor fill } def
+
+% line caps (and joins, not currently used)
+/lfigbutt 0 def
+/lfiground 1 def
+/lfigprojecting 2 def
+/lfigmiter 0 def
+/lfigbevel 2 def
+
+% shape and labels of the @Box symbol
+/lfigbox
+{
+ 0 0 /SW lfigpointdef
+ xsize 0 /SE lfigpointdef
+ xsize ysize /NE lfigpointdef
+ 0 ysize /NW lfigpointdef
+ SE 0.5 lfigpmul /S lfigpointdef
+ NW 0.5 lfigpmul /W lfigpointdef
+ W SE lfigpadd /E lfigpointdef
+ S NW lfigpadd /N lfigpointdef
+ NE 0.5 lfigpmul /CTR lfigpointdef
+ [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @CurveBox symbol
+/lfigcurvebox
+{
+
+ xsize 0.5 mul ysize 0.5 mul /CTR lfigpointdef
+ xsize 0.5 mul 0 /S lfigpointdef
+ xsize ysize 0.5 mul /E lfigpointdef
+ xsize 0.5 mul ysize /N lfigpointdef
+ 0 ysize 0.5 mul /W lfigpointdef
+
+ xmark 0.293 mul xmark 0.293 mul /SW lfigpointdef
+ xsize xmark 0.293 mul sub xmark 0.293 mul /SE lfigpointdef
+ xsize xmark 0.293 mul sub ysize xmark 0.293 mul sub /NE lfigpointdef
+ xmark 0.293 mul ysize xmark 0.293 mul sub /NW lfigpointdef
+
+ [ xsize ysize 0.5 lfigpmul xmark /lfigcurveboxcircum cvx ] lfigcircumdef
+
+ xmark 0
+ xsize xmark sub 0
+ [ xsize xmark sub xmark ]
+ xsize xmark
+ xsize ysize xmark sub
+ [ xsize xmark sub ysize xmark sub ]
+ xsize xmark sub ysize
+ xmark ysize
+ [ xmark ysize xmark sub ]
+ 0 ysize xmark sub
+ 0 xmark
+ [ xmark xmark ]
+ xmark 0
+} def
+
+% shadow of the @ShadowBox symbol
+% its shape and labels are done, somewhat inaccurately, with lfigbox
+/lfigshadow
+{ xmark 2 mul 0 moveto xsize 0 lineto
+ xsize ysize xmark 2 mul sub lineto
+ xsize xmark sub ysize xmark 2 mul sub lineto
+ xsize xmark sub xmark lineto
+ xmark 2 mul xmark lineto closepath fill
+} def
+
+% shape and labels of the @Square symbol
+/lfigsquare
+{
+ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ CTR xsize xsize ysize ysize lfigpmax 0.5 lfigpmul lfigpadd /NE lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+ SW 0.5 lfigpmul SE 0.5 lfigpmul lfigpadd /S lfigpointdef
+ NW 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /N lfigpointdef
+ SW 0.5 lfigpmul NW 0.5 lfigpmul lfigpadd /W lfigpointdef
+ SE 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /E lfigpointdef
+ [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @Diamond symbol
+/lfigdiamond
+{
+ xsize 0 0.5 lfigpmul /S lfigpointdef
+ 0 ysize 0.5 lfigpmul /W lfigpointdef
+ S W lfigpadd /CTR lfigpointdef
+ CTR W lfigpadd /N lfigpointdef
+ CTR S lfigpadd /E lfigpointdef
+ [ xsize ysize 0.5 lfigpmul /lfigdiamondcircum cvx ] lfigcircumdef
+ S E N W S
+} def
+
+% shape and labels of the @Ellipse symbol
+/lfigellipse
+{
+ xsize 0 0.5 lfigpmul /S lfigpointdef
+ 0 ysize 0.5 lfigpmul /W lfigpointdef
+ S W lfigpadd /CTR lfigpointdef
+ CTR W lfigpadd /N lfigpointdef
+ CTR S lfigpadd /E lfigpointdef
+ CTR xsize 0 0.3536 lfigpmul lfigpadd 0 ysize 0.3536 lfigpmul lfigpadd /NE lfigpointdef
+ 0 ysize 0.3536 lfigpmul CTR xsize 0 0.3536 lfigpmul lfigpadd lfigpsub /SE lfigpointdef
+ xsize 0 0.3536 lfigpmul CTR lfigpsub 0 ysize 0.3536 lfigpmul lfigpadd /NW lfigpointdef
+ 0 ysize 0.3536 lfigpmul xsize 0 0.3536 lfigpmul CTR lfigpsub lfigpsub /SW lfigpointdef
+ [ xsize ysize 0.5 lfigpmul /lfigellipsecircum cvx ] lfigcircumdef
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @Circle symbol
+/lfigcircle
+{
+ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ CTR xsize 0 ysize 0 lfigpmax 0.5 lfigpmul lfigpadd /E lfigpointdef
+ CTR 0 0 CTR E lfigdistance 45 lfigatangle lfigpadd /NE lfigpointdef
+ CTR 0 0 CTR E lfigdistance 90 lfigatangle lfigpadd /N lfigpointdef
+ CTR 0 0 CTR E lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+ CTR 0 0 CTR E lfigdistance 180 lfigatangle lfigpadd /W lfigpointdef
+ CTR 0 0 CTR E lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+ CTR 0 0 CTR E lfigdistance 270 lfigatangle lfigpadd /S lfigpointdef
+ CTR 0 0 CTR E lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+ [ S E lfigpsub /lfigellipsecircum cvx ] lfigcircumdef
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @HLine and @HArrow symbols
+/lfighline
+{
+ 0 ymark lfigprevious /FROM lfigpointdef
+ xsize ymark lfigprevious /TO lfigpointdef
+} def
+
+% shape and labels of the @VLine and @VArrow symbols
+/lfigvline
+{
+ xmark ysize lfigprevious /FROM lfigpointdef
+ xmark 0 lfigprevious /TO lfigpointdef
+} def
+
+% points of a polygon around base with given no of sides, vert init angle:
+% <sides> <angle> figpolygon <point> ... <point>
+/lfigpolygon
+{ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ 90 sub CTR 2 copy lfigmax 5 3 roll
+ [ 4 copy pop /lfigpolycircum cvx ] lfigcircumdef
+ exch dup 360 exch div exch
+ 1 1 3 2 roll
+ { 4 string cvs (P) exch lfigconcat cvn
+ 6 copy pop pop lfigatangle 2 copy 10 2 roll
+ 3 2 roll lfigpointdef
+ dup 3 1 roll add exch
+ } for
+ pop lfigatangle
+} def
+
+% next array element: <array> <index> lfiggetnext <array> <index> <any> true
+% or <array> <index> false
+/lfiggetnext
+{ 2 copy exch length ge
+ { false }
+ { 2 copy get exch 1 add exch true } ifelse
+} def
+
+% check whether thing is number: <any> lfigisnumbertype <any> <bool>
+/lfigisnumbertype
+{ dup type dup
+ /integertype eq exch /realtype eq or
+} def
+
+% check whether thing is an array: <any> lfigisarraytype <any> <bool>
+/lfigisarraytype { dup type /arraytype eq } def
+
+% get next item: <array> <index> lfiggetnextitem <array> <index> 0
+% or <array> <index> <array> 1
+% or <array> <index> <point> 2
+/lfiggetnextitem
+{ lfiggetnext
+ { lfigisarraytype
+ { 1
+ }
+ { lfigisnumbertype
+ { 3 1 roll
+ lfiggetnext
+ { lfigisnumbertype
+ { 4 3 roll exch 2
+ }
+ { pop 3 2 roll pop 0
+ } ifelse
+ }
+ { 3 2 roll pop 0
+ } ifelse
+ }
+ { pop 0
+ } ifelse
+ } ifelse
+ }
+ { 0
+ } ifelse
+} def
+
+% set arc path: bool x1 y1 x2 y2 x0 y0 lfigsetarc <angle> <angle> <dist>
+% the path goes from x1 y1 to x2 y2 about centre x0 y0,
+% anticlockwise if bool is true else clockwise.
+% The orientations of backwards pointing and forwards pointing
+% arrowheads are returned in the two angles, and
+% the length of the arc is returned in <dist>.
+/lfigsetarc
+{
+ 20 dict begin
+ matrix currentmatrix 8 1 roll
+ 2 copy translate 2 copy 8 2 roll
+ 4 2 roll lfigpsub 6 2 roll lfigpsub
+ dup /y1 exch def dup mul /y1s exch def
+ dup /x1 exch def dup mul /x1s exch def
+ dup /y2 exch def dup mul /y2s exch def
+ dup /x2 exch def dup mul /x2s exch def
+
+ y1s y2s eq
+ { -1
+ }
+ { y1s x2s mul y2s x1s mul sub y1s y2s sub div
+ } ifelse
+ /da exch def
+
+ x1s x2s eq
+ { -1
+ }
+ { x1s y2s mul x2s y1s mul sub x1s x2s sub div
+ } ifelse
+ /db exch def
+
+ da 0 gt db 0 gt and
+ { /LMax da sqrt db sqrt lfigmax def
+ /scalex da sqrt LMax div def
+ /scaley db sqrt LMax div def
+ scalex scaley scale
+ 0 0 LMax
+ 0 0 x1 scalex mul y1 scaley mul lfigangle
+ 0 0 x2 scalex mul y2 scaley mul lfigangle
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 5 2 roll % res1 res2 ang1 ang2 anticlockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if lfigpi mul LMax mul 180 div
+ }
+ { 0 0 x1 y1 lfigdistance 0 0 x2 y2 lfigdistance eq
+ 0 0 x1 y1 lfigdistance 0 gt and
+ { 0 0
+ 0 0 x1 y1 lfigdistance
+ 0 0 x1 y1 lfigangle
+ 0 0 x2 y2 lfigangle
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ 5 2 roll % res1 res2 ang1 ang2 clockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if lfigpi mul 0 0 x1 y1 lfigdistance mul 180 div
+ }
+ { x2 y2 lineto pop
+ x2 y2 x1 y1 lfigangle
+ x1 y1 x2 y2 lfigangle
+ x1 y1 x2 y2 lfigdistance
+ } ifelse
+ } ifelse
+ 4 -1 roll setmatrix
+ end
+} def
+
+% lfigsetcurve: set up a Bezier curve from x0 y0 to x3 y3
+% and return arrowhead angles and length of curve (actually 0)
+% x0 y0 x1 y1 x2 y2 x3 y3 lfigsetcurve <angle> <angle> <length>
+/lfigsetcurve
+{ 8 copy curveto pop pop
+ lfigangle
+ 5 1 roll
+ 4 2 roll lfigangle
+ exch
+ 0
+} def
+
+% lfigpaintpath: paint a path of the given shape
+% /paint [ shape ] lfigpaintpath -
+/lfigpaintpath
+{
+ 10 dict begin
+ 0 newpath
+ /prevseen false def
+ /curveseen false def
+ { lfiggetnextitem
+ dup 0 eq { pop exit }
+ { 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /curveseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr
+ lfigsetcurve pop pop pop
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ lfigsetarc pop pop pop
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ } ifelse
+ }
+ { xcurr ycurr moveto
+ } ifelse
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop pop pop cvx exec
+ end
+} def
+
+% stroke a path of the given shape in the given linestyle and dash length.
+% Return the origin and angle of the backward and forward arrow heads.
+% dashlength /linestyle [shape] lfigdopath [<point> <angle>] [<point> <angle>]
+/lfigdopath
+{
+ 10 dict begin
+ 0
+ /prevseen false def
+ /curveseen false def
+ /backarrow [] def
+ /fwdarrow [] def
+ {
+ lfiggetnextitem
+ dup 0 eq { pop exit }
+ {
+ 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /prevseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { newpath xprev yprev moveto
+ curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr lfigsetcurve
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ lfigsetarc
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ xcurr ycurr xprev yprev lfigangle dup 180 sub
+ xprev yprev xcurr ycurr lfigdistance
+ } ifelse
+ 6 index 6 index cvx exec
+ [ xprev yprev 5 -1 roll ]
+ backarrow length 0 eq
+ { /backarrow exch def }
+ { pop } ifelse
+ [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def
+ } if
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop
+ pop pop pop pop
+ backarrow length 0 eq { [ 0 0 0 ] } { backarrow } ifelse
+ fwdarrow length 0 eq { [ 0 0 0 ] } { fwdarrow } ifelse
+ end
+} def
+
+% lfigdoarrow: draw an arrow head of given form
+% dashlength /lstyle /pstyle hfrac height width [ <point> <angle> ] lfigdoarrow -
+/lfigdoarrow
+{ matrix currentmatrix 8 1 roll
+ dup 0 get 1 index 1 get translate
+ 2 get rotate
+ [ 2 index neg 2 index 0 0
+ 3 index 3 index neg
+ 1 index 10 index mul 0
+ 7 index 7 index ]
+ 4 1 roll pop pop pop
+ dup 3 1 roll
+ gsave lfigpaintpath grestore lfigdopath pop pop
+ setmatrix
+} def
+
+% arrow head styles
+/lfigopen 0.0 def
+/lfighalfopen 0.5 def
+/lfigclosed 1.0 def
+
+% stroke no arrows, forward, back, and both
+/lfignoarrow { pop pop pop pop pop pop pop pop } def
+/lfigforward { 7 -1 roll lfigdoarrow pop } def
+/lfigback { 8 -2 roll pop lfigdoarrow } def
+/lfigboth { 8 -1 roll 7 copy lfigdoarrow pop 7 -1 roll lfigdoarrow } def
+
+% lfigprevious: return previous point on path
+/lfigprevious
+{ lfigisnumbertype
+ { 2 copy }
+ { lfigisarraytype
+ { 2 index 2 index }
+ { 0 0 }
+ ifelse
+ } ifelse
+} def
+
+% label a point in 2nd top dictionary: <point> /name lfigpointdef -
+/lfigpointdef
+{
+ % (Entering lfigpointdef) lfigdebugprint
+ [ 4 2 roll transform
+ /itransform cvx ] cvx
+ currentdict end
+ 3 1 roll
+ % currentdict length currentdict maxlength lt
+ % { def }
+ % { exec moveto (too many labels) show stop }
+ % ifelse
+ def
+ begin
+ % (Leaving lfigpointdef) lfigdebugprint
+} def
+
+% promote labels from second top to third top dictionary
+% <string> lfigpromotelabels -
+/lfigpromotelabels
+{
+ % (Entering lfigpromotelabels) lfigdebugprint
+ currentdict end exch currentdict end
+ { exch 20 string cvs 2 index
+ (@) lfigconcat exch lfigconcat cvn exch def
+ } forall pop begin
+ % (Leaving lfigpromotelabels) lfigdebugprint
+} def
+
+% show labels (except CIRCUM): - lfigshowlabels -
+/lfigshowlabels
+{
+ % (Entering lfigshowlabels) lfigdebugprint
+ currentdict end
+ currentdict
+ { 1 index 20 string cvs (CIRCUM) search % if CIRCUM in key
+ { pop pop pop pop pop }
+ { pop cvx exec 2 copy
+ newpath 1.5 pt 0 360 arc
+ 0 setgray fill
+ /Times-Roman findfont 8 pt scalefont setfont
+ moveto 0.2 cm 0.1 cm rmoveto 20 string cvs show
+ }
+ ifelse
+ } forall
+ begin
+ % (Leaving lfigshowlabels) lfigdebugprint
+} def
+
+% fix an angle to 0 <= res < 360: <angle> lfigfixangle <angle>
+/lfigfixangle
+{
+ % (Entering lfigfixangle) lfigdebugprint
+ { dup 0 ge { exit } if
+ 360 add
+ } loop
+ { dup 360 lt { exit } if
+ 360 sub
+ } loop
+ % (Leaving lfigfixangle) lfigdebugprint
+} def
+
+% find point on circumference of box: alpha a b lfigboxcircum x y
+/lfigboxcircum
+{
+ % (Entering lfigboxcircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ 0 0 a b lfigangle /theta exch def
+
+ % if alpha <= theta, return (a, a*tan(alpha))
+ alpha theta le
+ { a a alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 180 - theta, return (b*cot(alpha), b)
+ alpha 180 theta sub le
+ { b alpha cos mul alpha sin div b }
+ {
+ % else if alpha <= 180 + theta, return (-a, -a*tan(alpha))
+ alpha 180 theta add le
+ { a neg a neg alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 360 - theta, return (-b*cot(alpha), -b)
+ alpha 360 theta sub le
+ { b neg alpha cos mul alpha sin div b neg }
+ {
+ % else 360 - theta <= alpha, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigboxcircum) lfigdebugprint
+} def
+
+% find quadratic roots (assume a != 0): a b c lfigqroots x1 x2 2
+% or x2 1
+% or 0
+/lfigqroots
+{
+ 4 dict begin
+ /c exch def
+ /b exch def
+ /a exch def
+ /disc b b mul 4 a c mul mul sub def
+ disc 0 lt
+ { 0
+ }
+ { disc 0 eq
+ { b neg 2 a mul div
+ 1
+ }
+ { b neg disc sqrt add 2 a mul div
+ b neg disc sqrt sub 2 a mul div
+ 2
+ }
+ ifelse
+ }
+ ifelse
+ end
+} def
+
+% work our which quadrant: <angle> lfigquadrant <0-3>
+/lfigquadrant
+{ dup 90 lt
+ { pop 0
+ }
+ { dup 180 lt
+ { pop 1
+ }
+ { 270 lt
+ { 2
+ }
+ { 3
+ } ifelse
+ } ifelse
+ } ifelse
+} def
+
+% find curvebox circum, assuming upper right quadrant: alpha a b xmk lfigcb x y
+/lfigcb
+{
+ 6 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ /alpha exch def
+ /theta1 0 0 a b xmk sub lfigangle def
+ /theta2 0 0 a xmk sub b lfigangle def
+ alpha theta1 le
+ { % if alpha <= theta1, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ }
+ { alpha theta2 ge
+ { % else if alpha > theta2, return (b*cot(alpha), b)
+ b alpha cos mul alpha sin div b
+ }
+ {
+ % else, return the intersection of line and circle
+ a xmk sub b xmk sub xmk 0 0 alpha lfigcircleintersect
+ dup 0 eq
+ { % should never happen, just return any reasonable point
+ pop
+ a b 0.5 lfigpmul
+ }
+ { 1 eq
+ { % should never happen, just return the point on top of stack
+ }
+ { % the usual case, two points on stack, return the larger
+ lfigpmax
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+} def
+
+% find point on circumference of curvebox: alpha a b xmk lfigcurveboxcircum x y
+/lfigcurveboxcircum
+{
+ % (Entering lfigcurveboxcircum) lfigdebugprint
+ 5 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+
+ % work out which quadrant we are in, and reflect accordingly
+ /quad alpha lfigquadrant def
+ quad 0 eq
+ { alpha a b xmk lfigcb
+ }
+ { quad 1 eq
+ { 180 alpha sub a b xmk lfigcb exch neg exch
+ }
+ { quad 2 eq
+ { alpha 180 sub a b xmk lfigcb neg exch neg exch
+ }
+ { 360 alpha sub a b xmk lfigcb neg
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigcurveboxcircum) lfigdebugprint
+} def
+
+% find point on circumference of diamond: alpha a b lfigdiamondcircum x y
+/lfigdiamondcircum
+{
+ % (Entering lfigdiamondcircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ b alpha cos abs mul a alpha sin abs mul add /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving lfigdiamondcircum) lfigdebugprint
+} def
+
+% find point on circumference of ellipse: alpha a b lfigellipsecircum x y
+/lfigellipsecircum
+{
+ % (Entering lfigellipsecircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ b alpha cos mul dup mul a alpha sin mul dup mul add sqrt /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving lfigellipsecircum) lfigdebugprint
+} def
+
+% find point of intersection of two lines each defined by two points
+% x1 y1 x2 y2 x3 y3 x4 y4 lfiglineintersect x y
+/lfiglineintersect
+{
+ % (Entering lfiglineintersect) lfigdebugprint
+ 13 dict begin
+ /y4 exch def
+ /x4 exch def
+ /y3 exch def
+ /x3 exch def
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ x2 x1 sub /x21 exch def
+ x4 x3 sub /x43 exch def
+ y2 y1 sub /y21 exch def
+ y4 y3 sub /y43 exch def
+ y21 x43 mul y43 x21 mul sub /det exch def
+
+ % calculate x
+ y21 x43 mul x1 mul
+ y43 x21 mul x3 mul sub
+ y3 y1 sub x21 mul x43 mul add
+ det div
+
+ % calculate y
+ x21 y43 mul y1 mul
+ x43 y21 mul y3 mul sub
+ x3 x1 sub y21 mul y43 mul add
+ det neg div
+
+ end
+ % (Leaving lfiglineintersect) lfigdebugprint
+} def
+
+% find point on circumference of polygon
+% alpha radius num theta lfigpolycircum x y
+/lfigpolycircum
+{
+ % (Entering lfigpolycircum) lfigdebugprint
+ 13 dict begin
+ /theta exch def
+ /num exch def
+ /radius exch def
+ /alpha exch def
+
+ % calculate delta, the angle from theta to alpha
+ alpha theta sub lfigfixangle
+
+ % calculate the angle which is the multiple of 360/num closest to delta
+ 360 num div div truncate 360 num div mul theta add /anglea exch def
+
+ % calculate the next multiple of 360/num after anglea
+ anglea 360 num div add /angleb exch def
+
+ % intersect the line through these two points with the alpha line
+ anglea cos anglea sin angleb cos angleb sin
+ 0 0 alpha cos 2 mul alpha sin 2 mul
+ lfiglineintersect radius lfigpmul
+
+ end
+ % (Leaving lfigpolycircum) lfigdebugprint
+} def
+
+% find point of intersection of a point and a circle
+% x0 y0 r x1 y1 theta lfigcircleintersect xa ya xb yb 2
+% or xb yb 1
+% or 0
+/lfigcircleintersect
+{
+ % (Entering lfigcircleintersect) lfigdebugprint
+ 15 dict begin
+ /theta exch def
+ /y1 exch def
+ /x1 exch def
+ /r exch def
+ /y0 exch def
+ /x0 exch def
+
+ % if sin(theta) = 0 then line is horizontal and y must be y1
+ theta sin abs 0.00001 lt
+ {
+ /a 1 def
+ /b -2 x0 mul def
+ /c x0 dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c lfigqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 1
+ }
+ { y1 exch y1 2
+ } ifelse
+ } ifelse
+ }
+ {
+ /ct theta cos theta sin div def
+ /a ct ct mul 1 add def
+ /b ct x1 x0 sub mul y1 add y0 sub 2 mul def
+ /c x1 x0 sub dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c lfigqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xb yb 1
+ }
+ { y1 add /ya exch def
+ ya y1 sub ct mul x1 add /xa exch def
+ y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xa ya xb yb 2
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigcircleintersect) lfigdebugprint
+} def
+
+% add CIRCUM operator with this body: <array> lfigcircumdef -
+/lfigcircumdef
+{ % (Entering lfigcircumdef) lfigdebugprint
+ /CIRCUM exch cvx
+ currentdict end
+ 3 1 roll
+ % currentdict length currentdict maxlength lt
+ % { def }
+ % { exec moveto (too many labels) show stop }
+ % ifelse
+ def
+ begin
+ % (Leaving lfigcircumdef) lfigdebugprint
+} def
+
+end
+%%EndResource
+
+%%BeginResource: procset LoutBasicSetup
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/bsf.lpg
+
+% width height linethickness louteuro -
+% draw a Euro symbol of this width and height with this line thickness
+/louteuro {
+ 20 dict begin
+ /eurothick exch def
+ /euroheight exch def
+ /eurowidth exch def
+ /eurostrokewidth euroheight 0.8 mul def
+ /eurostep eurothick 60 cos mul 60 sin div def
+ /eurotheta 40 def
+
+ % llx lly width thickness louteurobox -
+ % draw angled box starting at (llx, lly) with given width and thickness
+ /louteurobox
+ {
+ /euroboxthick exch def
+ /euroboxwidth exch def
+ newpath moveto euroboxwidth 0 rlineto
+ eurostep euroboxthick rlineto
+ euroboxwidth neg 0 rlineto closepath fill
+ } def
+
+ % lower cross stroke
+ 0 euroheight 2 div eurothick 1.5 mul sub
+ eurostrokewidth eurothick louteurobox
+
+ % upper cross stroke
+ 0 euroheight 2 div eurothick 0.5 mul add
+ eurostrokewidth eurostep 2 mul add eurothick louteurobox
+
+ % circular part
+ /eurohctr eurowidth euroheight 2 div eurotheta cos mul sub def
+ /eurovctr euroheight 2 div def
+ newpath
+ eurohctr eurovctr eurovctr eurotheta 350 eurotheta sub arc
+ eurohctr eurovctr eurovctr eurothick sub 365 eurotheta sub eurotheta arcn
+ closepath fill
+ end
+} def
+
+% path for @FullWidthRule symbol
+/LoutRule
+{ 0 0 moveto xsize 0 lineto
+} def
+
+% path for @Box symbol
+/LoutBox
+{ 0 0 moveto xsize 0 lineto
+ xsize ysize lineto 0 ysize lineto
+ closepath
+} def
+
+% path for @CurveBox symbol
+/LoutCurveBox
+{ xmark 0 moveto
+ xsize xmark sub xmark xmark 270 360 arc
+ xsize xmark sub ysize xmark sub xmark 0 90 arc
+ xmark ysize xmark sub xmark 90 180 arc
+ xmark xmark xmark 180 270 arc
+ closepath
+} def
+
+% path for @ShadowBox symbol
+/LoutShadowBox
+{ xmark 2 mul 0 moveto xsize 0 lineto
+ xsize ysize xmark 2 mul sub lineto
+ xsize xmark sub ysize xmark 2 mul sub lineto
+ xsize xmark sub xmark lineto
+ xmark 2 mul xmark lineto
+ closepath
+} def
+
+% set up dictionary containing margin note data: parity LoutMargSet -
+/LoutMargSet
+{ /LoutMargDict 12 dict def
+ LoutMargDict begin
+ /parity exch def
+ /matr matrix currentmatrix def
+ /rightx xsize def
+ /lefty ysize def % highest allowable point for top of next left note
+ /righty ysize def % highest allowable point for top of next right note
+ /max { 2 copy gt { pop } { exch pop } ifelse } def
+ /min { 2 copy lt { pop } { exch pop } ifelse } def
+ end
+} def
+
+%translate coordinate system for marginal notes: type LoutMargShift -
+% where type 0 is left margin, 1 is right margin, 2 is outer, 3 is inner
+/LoutMargShift
+{ LoutMargDict begin
+
+ % y coordinate of top of note, in margin coords, before vertical adjust
+ 0 ysize transform matr itransform exch pop
+
+ % decide whether left or right margin based on type and parity
+ exch [ 0 1 parity 1 parity sub ] exch get 0 eq
+ {
+ % left margin: adjust top of note downwards if overlaps previous note
+ lefty min
+
+ % bottom of note is new lefty position and also translate position
+ ysize sub dup /lefty exch def
+
+ % want right edge of note at coordinate zero
+ xsize neg exch
+ }
+ {
+ % right margin: adjust top of note downwards if overlaps previous note
+ righty min
+
+ % bottom of note is new righty position and also translate position
+ ysize sub dup /righty exch def
+
+ % want left edge of note at coordinate rightx
+ rightx exch
+ } ifelse
+
+ % stack now contains coord of bottom left corner in margin coordinates
+ matr setmatrix translate
+ end
+} def
+
+% create LoutPageDict with left, right, foot, top for @Place symbol users
+/LoutPageSet
+{
+ /LoutPageDict 5 dict def
+ LoutPageDict begin
+ /matr matrix currentmatrix def
+ /left 0 def
+ /right xsize def
+ /foot 0 def
+ /top ysize def
+ end
+
+} def
+
+%%EndResource
+
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Times-Roman
+/Times-Romanfnt82 vec2 /Times-Roman LoutRecode
+/fnt82 { /Times-Romanfnt82 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%EndSetup
+
+%%Page: i 1
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt84 2897 12401(The)m 3352(Design)s 4099(and)s 4540(Implementation)s
+4239 11998(of)m 4511(the)s 2589 11595(Lout)m 3141(Document)s 4250(F)s 6(ormatting)k
+5468(Language)s 240 fnt83 3630 11097(J)m 6(ef)k 4(fr)k 8(e)k 7(y)k
+4310(H.)s 4577(Kingston)s 240 fnt82 2551 10596(Basser)m 3248(Department)s
+4436(of)s 4707(Computer)s 5724(Science,)s 3007 10308(The)m 3435(Uni)s 6(v)k 3(ersity)k
+4489(of)s 4760(Sydne)s 3(y)k 5530(2006,)s 4095 10020(Australia)m
+3739 9568(27)m 4027(January)s 15(,)k 4863(1993)s 240 fnt84
+0 8775(SUMMAR)m 8(Y)k 240 fnt82 0 8320(Lout)m 543(is)s
+784(a)s 982(high-le)s 6(v)k 3(el)k 2028(language)s
+2979(for)s 3349(document)s 4384(formatting,)s 5530(whose)s 6230(ease)s
+6728(of)s 7030(use)s 7437(has)s 7838(permitted)s 8843(an)s
+0 8032(unprecedented)m 1501(number)s 2340(of)s 2659(adv)s 6(anced)k
+3663(features)s 4517(to)s 4804(be)s 5134(added)s 5812(quickly)s
+6632(and)s 7084(reliably)s 15(.)k 8010(This)s 8535(paper)s
+0 7744(charts)m 625(the)s 978(e)s 6(v)k 4(olution)k
+1933(of)s 2209(the)s 2561(design)s 3248(and)s 3656(implementation)s
+5218(of)s 5493(Lout)s 6010(from)s 6538(conception)s 7650(in)s
+7897(mid-1984)s 8887(to)s 0 7456(public)m 672(release)s 1412(in)s
+1677(October)s 2529(1991.)s 3194(It)s 3421(includes)s 4291(e)s 3(xtensi)k 6(v)k 3(e)k
+5260(discussions)s 6422(of)s 6715(remaining)s 7759(problems)s 8722(and)s
+0 7168(possible)m 840(solutions.)s 240 fnt84 0 6664(K)m 6(eyw)k 2(ords)k
+240 fnt82 1143 6665(document)m 2147(formatting)s 3208(typesetting)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 1 2
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt84 2897 12401(The)m 3352(Design)s 4099(and)s 4540(Implementation)s
+4239 11998(of)m 4511(the)s 2589 11595(Lout)m 3141(Document)s 4250(F)s 6(ormatting)k
+5468(Language)s 240 fnt83 3630 11097(J)m 6(ef)k 4(fr)k 8(e)k 7(y)k
+4310(H.)s 4577(Kingston)s 240 fnt82 2551 10596(Basser)m 3248(Department)s
+4436(of)s 4707(Computer)s 5724(Science,)s 3007 10308(The)m 3435(Uni)s 6(v)k 3(ersity)k
+4489(of)s 4760(Sydne)s 3(y)k 5530(2006,)s 4095 10020(Australia)m
+3739 9568(27)m 4027(January)s 15(,)k 4863(1993)s 240 fnt84
+0 8926(1.)m 291(Intr)s 4(oduction)k 240 fnt82 480 8495(Lout)m
+985([1,)s 1284(2])s 1515(is)s 1718(a)s 1877(high-le)s 6(v)k 3(el)k
+2885(language)s 3798(for)s 4129(document)s 5126(formatting,)s 6234(designed)s
+7136(and)s 7533(implemented)s 8832(by)s 0 8207(the)m 341(author)s 13(.)k
+1096(The)s 1517(implementation,)s 3117(kno)s 6(wn)k 3814(as)s
+4057(Basser)s 4747(Lout,)s 5299(is)s 5502(a)s 5661(fully)s
+6159(operational)s 7282(production)s 8368(v)s 3(ersion)k 0 7919(written)m
+736(in)s 983(C)s 1198(for)s 1540(the)s 1891(Unix)s
+2429(operating)s 3389(system,)s 153 fnt82 4100 8008(1)m 240 fnt82
+4223 7919(which)m 4869(translates)s 5824(Lout)s 6340(source)s 7023(code)s
+7535(into)s 7964(PostScript,)s 153 fnt82 8993 8008(2)m 240 fnt82
+0 7631(a)m 201(de)s 6(vice-independent)k 2164(graphics)s 3061(rendering)s
+4066(language)s 5021(accepted)s 5951(by)s 6281(man)s 3(y)k
+6900(high-resolution)s 8454(output)s 0 7343(de)m 6(vices,)k 833(including)s
+1805(most)s 2346(laser)s 2871(printers.)s 3779(Basser)s 4492(Lout)s
+5019(is)s 5244(a)s 4(v)k 6(ailable)k 6168(free)s
+6609(of)s 6895(char)s 4(ge)k 7600([3].)s 8057(It)s
+8278(includes)s 0 7055(installation)m 1118(instructions,)s 2339(C)s 2550(source,)s
+3281(se)s 6(v)k 3(en)k 3873(standard)s 4740(packages,)s
+5723(and)s 6127(complete)s 7058(documentation)s 8536(in)s 8778(the)s
+0 6767(form)m 524(of)s 795(six)s 1129(technical)s 2046(reports)s
+2760(and)s 3164(a)s 3330(manual)s 4089(page.)s 480 6393(The)m
+900(Lout)s 1404(project)s 2118(arose)s 2670(out)s 3027(of)s
+3290(the)s 3629(author')s 13(s)k 4442(desire)s 5060(to)s
+5290(bring)s 5840(to)s 6070(document)s 7066(formatting)s 8118(languages)s
+0 6105(the)m 343(ele)s 3(g)k 1(ance)k 1225(of)s
+1491(e)s 3(xpression)k 2562(found)s 3174(in)s 3411(programming)s
+4761(languages)s 5763(lik)s 2(e)k 6170(Algol-)s 6783(60)s
+7072(and)s 7471(P)s 3(ascal.)k 8236(This)s 8706(em)s
+8998(-)s 0 5817(phasis)m 638(on)s 924(e)s 3(xpressi)k 6(v)k 3(eness)k
+2373(has)s 2731(produced)s 3669(an)s 3941(order)s 4493(of)s
+4753(magnitude)s 5808(reduction)s 6757(in)s 6988(the)s 7325(cost)s
+7759(of)s 8018(de)s 6(v)k 3(eloping)k 0 5529(document)m
+998(formatting)s 2053(applications.)s 3366(F)s 3(or)k 3748(e)s 3(xample,)k
+4656(an)s 4933(equation)s 5807(formatting)s 6862(application,)s 8025(which)s
+8660(may)s 0 5241(be)m 282(dif\207cult)s 1098(or)s 1357(impossible)s
+2449(to)s 2688(add)s 3092(to)s 3331(other)s 3882(systems,)s
+4746(can)s 5135(be)s 5417(written)s 6150(in)s 6393(Lout)s
+6905(in)s 7148(a)s 7314(fe)s 6(w)k 7720(days.)s
+480 4867(When)m 1099(e)s 3(xpert)k 1742(users)s 2274(can)s
+2652(implement)s 3724(such)s 4209(applications)s 5405(quickly)s 15(,)k
+6204(non-)s 6632(e)s 3(xperts)k 7360(bene\207t.)s 8164(Although)s
+0 4579(Lout)m 509(itself)s 1053(pro)s 3(vides)k 1922(only)s
+2398(a)s 2560(small)s 3129(k)s 2(ernel)k 3775(of)s
+4042(carefully)s 4941(chosen)s 5659(primiti)s 6(v)k 3(es,)k
+6721(packages)s 7646(written)s 8375(in)s 8614(Lout)s 0 4291(and)m
+399(distrib)s 4(uted)k 1470(with)s 1946(Basser)s 2638(Lout)s
+3145(pro)s 3(vide)k 3923(an)s 4201(unprecedented)s 5649(array)s
+6187(of)s 6453(adv)s 6(anced)k 7404(features)s 8204(in)s
+8442(a)s 8602(form)s 0 4003(accessible)m 1035(to)s 1286(non-)s
+1714(e)s 3(xpert)k 2380(users.)s 3047(The)s 3487(features)s
+4305(include)s 5076(rotation)s 5888(and)s 6304(scaling,)s 7100(fonts,)s
+7697(paragraph)s 8722(and)s 0 3715(page)m 500(breaking,)s 1436(displays)s
+2263(and)s 2659(lists,)s 3141(\210oating)s 3917(\207gures)s 4611(and)s
+5007(tables,)s 5662(footnotes,)s 6651(chapters)s 7490(and)s 7886(sections)s
+8698(\(au)s 8998(-)s 0 3427(tomatically)m 1128(numbered\),)s 2272(running)s
+3070(page)s 3579(headers)s 4361(and)s 4765(footers,)s 5536(odd-)s
+5964(e)s 6(v)k 3(en)k 6464(page)s 6973(layouts,)s
+7772(automatically)s 0 3139(generated)m 975(tables)s 1570(of)s 1829(contents,)s
+2720(sorted)s 3350(inde)s 3(x)k 3(es)k 4113(and)s
+4505(reference)s 5435(lists,)s 5914(bibliographic)s 7229(and)s 7621(other)s
+8159(databases)s 0 2851(\(including)m 1038(databases)s 2008(of)s 2281(formats)s
+3064(for)s 3405(printing)s 4217(references\),)s 5386(equations,)s 6412(tables,)s
+7079(diagrams,)s 8065(formatting)s 0 2563(of)m 271(P)s 3(ascal)k
+933(programs,)s 1943(and)s 2347(automatically)s 3701(maintained)s 4821(cross)s
+5363(references.)s 480 2189(This)m 1015(paper)s 1666(charts)s 2347(the)s
+2755(e)s 6(v)k 4(olution)k 3766(of)s 4097(Lout)s
+4669(from)s 5253(conception)s 6420(in)s 6723(mid-1984)s 7768(to)s
+8067(the)s 8475(public)s 0 1901(release)m 722(of)s 997(Basser)s
+1699(Lout)s 2215(in)s 2462(October)s 3297(1991.)s 3945(Lout)s
+4461(is)s 4676(or)s 4(g)k 1(anized)k 5676(around)s
+6403(four)s 6866(k)s 2(e)k 3(y)k 7265(concepts)s
+8157(\211)s 8342(objects,)s 0 1613(de\207nitions,)m 1131(g)s 1(alle)k 3(ys,)k
+1925(and)s 2343(cross)s 2899(references)s 3944(\211)s 4138(and)s
+4556(the)s 3(y)k 5033(were)s 5567(de)s 6(v)k 3(eloped)k
+6614(in)s 6871(the)s 7233(order)s 7811(listed,)s 8449(so)s
+8730(this)s 0 1325(paper)m 593(will)s 1022(treat)s 1508(each)s
+2006(in)s 2252(turn,)s 2747(discussing)s 3800(its)s 4079(design,)s
+4814(implementation,)s 6424(problems,)s 7424(and)s 7831(prospects)s 8788(for)s
+1134 0 0 0 240 288 60 0 574 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+122 fnt82 0 379(1)m 192 fnt82 58 309(Unix)m 485(is)s
+653(a)s 786(trademark)s 1609(of)s 1825(A)s 21(T&T)k
+2370(Bell)s 2733(Laboratories.)s 122 fnt82 0 112(2)m 192 fnt82
+67 42(PostScript)m 900(is)s 1068(a)s 1201(trademark)s 2024(of)s
+2240(Adobe)s 2796(Systems,)s 3519(Incorporated.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 2 3
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Symbol
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4348 13844(-)m 4476(2)s 4650(-)s 0 13256(further)m 709(impro)s 3(v)k 3(ement.)k
+240 fnt84 0 12463(2.)m 291(Objects)s 240 fnt82 480 11987(The)m
+923(essence)s 1725(of)s 2011(an)s 3(y)k 2424(mo)s 3(v)k 3(e)k
+3021(to)s 3276(a)s 3457(higher)s 4144(le)s 6(v)k 3(el)k
+4669(is)s 4895(the)s 5258(introduction)s 6500(of)s 6786(some)s
+7363(abstraction)s 8484(which)s 0 11699(serv)m 3(es)k 639(to)s
+872(or)s 4(g)k 1(anize)k 1740(the)s 2082(lo)s 6(w-)k
+2503(le)s 6(v)k 3(el)k 3006(operations,)s 4103(resulting)s
+4986(in)s 5223(a)s 5383(more)s 5923(succinct)s 6760(e)s 3(xpression)k
+7831(of)s 8096(their)s 8586(com)s 8998(-)s 0 11411(mon)m
+475(combinations)s 1806(at)s 2030(the)s 2369(cost)s 2805(of)s
+3068(some)s 3620(loss)s 4034(of)s 4297(detailed)s 5102(control.)s
+5934(The)s 6354(early)s 6876(part)s 7298(of)s 7561(the)s
+7900(Lout)s 8403(project)s 0 11123(w)m 2(as)k 426(spent)s
+996(in)s 1245(the)s 1598(de)s 6(v)k 3(elopment)k
+2891(of)s 3167(such)s 3668(an)s 3957(abstraction)s 5067(for)s
+5411(the)s 5764(b)s 4(uilding)k 6616(blocks)s 7298(of)s
+7574(documents,)s 8724(one)s 0 10835(which)m 635(could)s 1217(e)s 3(xplain,)k
+2017(not)s 2375(just)s 2772(the)s 3113(simple)s 3798(phenomena)s
+4954(of)s 5217(w)s 2(ords,)k 5899(lines,)s 6450(and)s
+6846(paragraphs,)s 7994(b)s 4(ut)k 8348(also)s 8778(the)s
+0 10547(alignment)m 1016(of)s 1287(columns)s 2149(in)s 2392(tables,)s
+3056(and)s 3460(the)s 3808(comple)s 3(x)k 4684(nested)s
+5353(structures)s 6332(of)s 6603(equations.)s 240 fnt84 0 9898(2.1.)m
+471(The)s 926(genesis)s 1697(of)s 1969(the)s 2343(object)s
+3026(abstraction)s 240 fnt82 480 9421(When)m 1163(one)s 1620(e)s 3(xamines)k
+2626(pre)s 6(vious)k 3549(document)s 4608(formatting)s 5724(systems)s
+6587([4])s 6958(looking)s 7798(for)s 8191(ideas)s 8788(for)s
+0 9133(abstractions,)m 1245(as)s 1492(the)s 1837(author)s 2505(did)s
+2866(in)s 3106(1984,)s 3690(the)s 4035(Eqn)s 4475(formatting)s
+5533(language)s 6450([5])s 6764(stands)s 7410(out)s 7773(lik)s 2(e)k
+8182(a)s 8344(beacon.)s 0 8845(In)m 256(Eqn,)s 749(a)s
+915(mathematical)s 2256(formula)s 3072(such)s 3568(as)s 168 fnt78
+586 8390(2)m 240 fnt83 480 8330(x)m 240 fnt78 738 8322(+)m
+939(1)s gsave
+480 8274 translate
+240 fnt83 553 0 0 0 240 288 12 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+700 8046(4)m 240 fnt82 0 7535(is)m 210(produced)s
+1159(by)s 1453(typing)s 220 fnt35 480 7037({ x sup 2 + 1 } o)m 3(v)k 5(er 4)k
+240 fnt82 0 6541(in)m 261(the)s 627(input)s 1197(\207le;)s
+220 fnt35 1632 6538(sup)m 240 fnt82 2056 6541(and)m 220 fnt35
+2478 6538(o)m 3(v)k 5(er)k 240 fnt82 2975 6541(are)m
+3340(binary)s 4023(operators,)s 5037(and)s 5459(braces)s 6138(are)s
+6503(used)s 7018(for)s 7374(grouping.)s 8421(This)s 8916(is)s
+0 6253(document)m 1017(formatting)s 2091(at)s 2337(a)s 2516(v)s 3(ery)k
+3006(high)s 3502(le)s 6(v)k 3(el,)k 4077(close)s
+4638(to)s 4890(the)s 5252(language)s 6185(of)s 6469(mathematics)s
+7741(itself,)s 8337(with)s 8833(all)s 0 5965(reference)m 943(to)s
+1182(font)s 1627(changes)s 2449(and)s 2853(spacing)s 3637(suppressed.)s
+480 5591(Eqn)m 916(pro)s 3(vides)k 1780(a)s 1938(single)s
+2557(data)s 3008(type)s 3468(\(let)s 3837(us)s 4093(call)s
+4485(it)s 4669(the)s 240 fnt83 5009 5593(e)m 4(xpr)k 8(ession)k
+240 fnt82 6014 5591(\),)m 6192(b)s 4(uilt)k 6679(up)s
+6964(recursi)s 6(v)k 3(ely)k 8062(in)s 8297(conte)s 3(xt-)k
+0 5303(free)m 457(style:)s 1106(where)s 1778(one)s 2212(e)s 3(xpression)k
+3321(may)s 3819(appear)s 9(,)k 4586(an)s 3(y)k
+5015(e)s 3(xpression)k 6124(may)s 6622(appear)s 13(.)k
+7442(This)s 7950(approach)s 8916(is)s 0 5015(common)m 905(in)s
+1158(algebra)s 1931(and)s 2345(programming)s 3710(languages,)s 4785(where)s
+5435(its)s 5721(simplicity)s 6740(and)s 7154(e)s 3(xpressi)k 6(v)k 3(eness)k
+8625(ha)s 4(v)k 3(e)k 0 4727(long)m 478(been)s
+986(appreciated;)s 2198(b)s 4(ut)k 2559(Eqn)s 3001(w)s 2(as)k
+3421(the)s 3768(\207rst)s 4198(language)s 5117(to)s 5355(demonstrate)s
+6578(its)s 6853(utility)s 7476(in)s 7718(document)s 8720(for)s
+8998(-)s 0 4439(matting.)m 480 4065(Each)m 1015(e)s 3(xpression)k
+2092(is)s 2302(treated)s 3009(by)s 3304(Eqn)s 3747(as)s
+3997(a)s 4163(rectangle)s 5094(with)s 5577(a)s 240 fnt83
+5743 4067(horizontal)m 6787(axis)s 240 fnt82 7167 4065(,)m 7274(used)s
+7771(for)s 8110(alignment)s 0 3777(with)m 482(adjacent)s 1338(e)s 3(xpressions:)k
+553 519 0 288 240 288 60 480 2918 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+553 519 0 288 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+553 519 0 288 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+
+ ] lfigdopath
+pop pop
+grestore
+168 fnt78 106 404(2)m 240 fnt83 0 344(x)m 240 fnt78
+258 336(+)m 459(1)s gsave
+0 288 translate
+240 fnt83 553 0 0 0 240 288 12 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+220 60(4)m
+grestore
+
+grestore
+end end restore
+grestore
+0 2467(The)m 425(size)s
+848(and)s 1248(rendering)s 2213(of)s 2481(the)s 2825(e)s 3(xpression)k
+3898(on)s 4191(the)s 4536(printed)s 5267(page)s 5771(are)s
+6114(kno)s 6(wn)k 6815(only)s 7291(to)s 7526(the)s
+7870(implementa)s 8998(-)s 0 2179(tion,)m 481(ne)s 6(v)k 3(er)k
+1066(e)s 3(xplicitly)k 2022(calculated)s 3051(or)s 3313(accessed)s
+4209(by)s 4506(the)s 4857(user)s 13(.)k 5409(This)s
+5888(prohibition)s 7010(is)s 7223(crucial)s 7930(to)s 8172(the)s
+8523(main)s 8998(-)s 0 1891(tenance)m 785(of)s 1055(the)s
+1402(conte)s 3(xt-)k 2171(free)s 2596(property)s 3459(in)s
+3701(practice.)s 4619(In)s 4874(Lout,)s 5432(for)s 5769(e)s 3(xample,)k
+6682(equations,)s 7705(\207gures,)s 8462(tables,)s 0 1603(and)m 393(arbitrary)s
+1256(objects)s 1972(may)s 2427(be)s 2697(mix)s 3(ed)k
+3338(together)s 4169(freely)s 15(.)k 4863(This)s 5327(w)s 2(ould)k
+5970(be)s 6241(impossible)s 7321(if)s 7526(size)s 7941(information)s
+0 1315(w)m 2(as)k 421(hidden)s 1130(from)s 1654(the)s
+2002(implementation)s 3559(in)s 3802(user)s 4260(calculations.)s 480 941(The)m
+927(object)s 1591(abstraction)s 2715(of)s 3006(Lout)s 3537(is)s
+3767(a)s 3952(direct)s 4575(descendant)s 5717(of)s 6008(the)s
+6375(Eqn)s 6838(e)s 3(xpression.)k 8041(It)s 8266(emplo)s 2(ys)k
+0 653(the)m 385(same)s 969(conte)s 3(xt-free)k 2212(recursi)s 6(v)k 3(e)k
+3171(style)s 3715(of)s 4023(construction,)s 5350(and)s 5791(each)s
+6323(object)s 7004(is)s 7251(treated)s 7995(by)s 8326(Lout)s
+8876(as)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 3 4
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Symbol
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4353 13844(-)m 4481(3)s 4645(-)s 0 13253(a)m 166(rectangle:)s
+1701 453 567 198 240 288 60 480 12460 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1701 453 567 198 240 288 60 0 0 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1701 453 567 198 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1701 453 567 198 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+end end restore
+grestore
+end end restore
+grestore
+0 12007(The)m 442(horizontal)s 1481(axis,)s 1987(called)s 2630(a)s
+240 fnt83 2810 12009(r)m 10(ow)k 3244(mark)s 240 fnt82
+3814 12007(in)m 4072(Lout,)s 4645(has)s 5030(a)s 5210(v)s 3(ertical)k
+5992(analogue)s 6926(called)s 7569(a)s 240 fnt83 7749 12009(column)m
+8523(mark)s 240 fnt82 9019 12007(,)m 0 11719(creating)m 822(a)s
+988(v)s 6(aluable)k 1848(symmetry)s 2857(between)s 3711(horizontal)s
+4735(and)s 5139(v)s 3(ertical.)k 6014(Multiple)s 6893(column)s
+7668(and)s 8072(ro)s 6(w)k 8491(marks)s 0 11431(are)m
+347(permitted:)s 1984 1189 0 1189 240 288 60 480 9902 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+680 453 0 453 240 288 60 0 736 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+680 453 0 453 240 288 60 0 0 LoutGr2
+/lfiggrey [ lfigbox ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(A) lfigpromotelabels
+grestore
+737 453 0 453 240 288 60 1247 736 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+567 453 0 453 240 288 60 0 0 LoutGr2
+/lfiggrey [ lfigbox ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(B) lfigpromotelabels
+grestore
+680 453 0 453 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+396 453 0 453 240 288 60 0 0 LoutGr2
+/lfiggrey [ lfigbox ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(C) lfigpromotelabels
+grestore
+737 453 0 453 240 288 60 1247 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+737 453 0 453 240 288 60 0 0 LoutGr2
+/lfiggrey [ lfigbox ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(D) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ 0.3 cm 0 A@W lfigpsub lfigprevious /FROM lfigpointdef
+B@W 1.6 cm 0 lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ 0.3 cm 0 C@W lfigpsub lfigprevious /FROM lfigpointdef
+D@W 1.6 cm 0 lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ A@NW 0 0.3 cm lfigpadd lfigprevious /FROM lfigpointdef
+0 0.3 cm C@SW lfigpsub lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ B@NW 0.3 cm 0.3 cm lfigpadd lfigprevious /FROM lfigpointdef
+D@SW 0.3 cm -0.3 cm lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 9451(so)m 266(that)s 684(objects)s 1412(are)s
+1759(able)s 2213(to)s 2452(represent)s 3387(tables.)s 480 9077(This)m
+946(abstraction)s 2041(has)s 2401(some)s 2952(limitations,)s 4069(the)s
+4407(most)s 4922(ob)s 3(vious)k 5719(being)s 6293(the)s
+6631(restriction)s 7645(of)s 7906(size)s 8322(calcula)s 8998(-)s
+0 8789(tions)m 507(to)s 736(rectangular)s 1860(bounding)s 2809(box)s 3(es.)k
+3519(Non-)s 4000(rectangular)s 5124(and)s 5518(disconnected)s 6815(shapes)s
+7494(arise)s 7990(naturally)s 8883(in)s 0 8501(\207gures)m 704(and)s
+1111(in)s 1356(the)s 1707(characters)s 2727(of)s 3001(fonts;)s
+3594(the)s 3944(e)s 3(xtension)k 4918(to)s 5159(them)s
+5700(is)s 5912(conceptually)s 7191(straightforw)s 2(ard)k 8722(and)s
+0 8213(might)m 615(help)s 1076(to)s 1311(e)s 3(xplain)k
+2066(some)s 2623(\207ne)s 3034(points)s 3667(of)s 3934(layout)s
+4588(such)s 5081(as)s 5327(k)s 2(erning.)k 6216(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+7173(there)s 7702(are)s 8045(implemen)s 8998(-)s 0 7925(tation)m
+599(and)s 1001(language)s 1918(design)s 2598(problems,)s 3592(particularly)s
+4744(when)s 5317(\207lling)s 5939(non-)s 6367(rectangular)s 7498(shapes)s
+8185(with)s 8664(te)s 3(xt,)k 0 7637(and)m 404(so)s
+670(the)s 1018(author)s 1689(chose)s 2290(to)s 2529(k)s 2(eep)k
+3032(to)s 3271(Eqn')s 13(s)k 3867(rectangles.)s 480 7263(A)m
+766(more)s 1370(fundamental)s 2676(limitation)s 3718(of)s 4045(the)s
+4450(object)s 5151(abstraction)s 6312(arises)s 6963(from)s 7543(the)s
+7948(inability)s 8855(of)s 0 6975(recursi)m 6(v)k 3(e)k
+936(data)s 1408(types)s 1978(to)s 2231(describe)s 3097(cross-link)s 2(ed)k
+4335(structures,)s 5384(which)s 6040(seem)s 6605(to)s 6858(require)s
+7604(some)s 8179(means)s 8855(of)s 0 6687(naming)m 756(the)s
+1089(multiply)s 1938(referenced)s 2988(parts.)s 3601(Lout)s 4098(is)s
+4293(obliged)s 5054(to)s 5278(introduce)s 6222(additional)s 7218(abstractions)s
+8395(to)s 8618(cope)s 0 6399(with)m 490(cross)s 1040(linking:)s
+1892(g)s 1(alle)k 3(ys)k 2624(for)s 2970(inserting)s
+3867(te)s 3(xt)k 4291(into)s 4724(pages)s 5328(\(Section)s
+6189(5.1\),)s 6683(cross)s 7233(references)s 8273(\(Section)s 0 6111(6.1\),)m
+490(and)s 898(labelled)s 1716(points)s 2356(in)s 2603(\207gure)s
+3221(dra)s 3(wing)k 4059([6].)s 4506(An)s 4860(abstraction)s
+5969(closer)s 6603(to)s 6846(h)s 1(yperte)k 3(xt)k
+7809(might)s 8431(form)s 8960(a)s 0 5823(more)m 547(uni\207ed)s
+1270(basis)s 1799(for)s 2137(these)s 2684(features.)s 240 fnt84
+0 5224(2.2.)m 471(Grammatical)s 1893(and)s 2334(lexical)s 3039(structur)s 4(e)k
+240 fnt82 480 4792(If)m 700(objects)s 1418(are)s 1755(to)s
+1984(be)s 2256(constructed)s 3406(lik)s 2(e)k 3807(mathematical)s
+5138(e)s 3(xpressions,)k 6348(the)s 6686(natural)s 7394(notation)s
+8225(is)s 8425(a)s 8580(func)s 8998(-)s 0 4504(tional)m
+599(language)s 1519(based)s 2122(on)s 2419(operators,)s 3415(as)s
+3665(in)s 3908(Eqn.)s 4458(The)s 4886(grammar)s 5808(of)s
+6079(Lout)s 6591(objects)s 7319(is)s 7529(accordingly)s 240 fnt78
+1332 3945(\256)m 1332 3612(\256)m 1332 3279(\256)m 1332 2995(\256)m 1332 2662(\256)m
+1332 2368(\256)m 1332 2035(\256)m 1332 1751(\256)m 240 fnt83 480 3953(object)m
+1826(object)s 2498(in\207xop)s 3227(object)s 1826 3620(pr)m 8(e\207xop)k
+2680(object)s 1826 3287(object)m 2498(post\207xop)s 1826 3003(nopar)m 2(sop)k
+1826 2670(liter)m 3(alwor)k 8(d)k 220 fnt35 1826 2371({)m
+240 fnt83 1974 2376(object)m 220 fnt35 2646 2371(})m 240 fnt83
+1826 2043(object)m 2498(object)s 240 fnt82 0 1248(where)m 240 fnt83
+640 1250(in\207xop)m 240 fnt82 1285 1248(,)m 240 fnt83 1391 1250(pr)m 8(e\207xop)k
+240 fnt82 2161 1248(,)m 240 fnt83 2267 1250(post\207xop)m 240 fnt82
+3125 1248(,)m 3232(and)s 240 fnt83 3635 1250(nopar)m 2(sop)k
+240 fnt82 4591 1248(are)m 4938(identi\207ers)s 5943(naming)s 6713(operators)s
+7653(which)s 8294(tak)s 2(e)k 8745(0,)s 8971(1)s
+0 960(or)m 255(2)s 424(parameters,)s 1573(as)s 1819(sho)s 6(wn,)k
+2541(and)s 240 fnt83 2940 962(liter)m 3(alwor)k 8(d)k
+240 fnt82 4067 960(is)m 4272(a)s 4433(sequence)s 5362(of)s
+5628(non-space)s 6649(characters,)s 7719(or)s 7973(an)s 8251(arbitrary)s
+0 672(sequence)m 969(of)s 1276(characters)s 2330(enclosed)s 3262(in)s
+3541(double)s 4285(quotes.)s 5110(Ambiguities)s 6380(are)s 6763(resolv)s 3(ed)k
+7664(by)s 7995(precedence)s 0 384(and)m 404(associati)s 6(vity)k 15(.)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 4 5
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4348 13844(-)m 4476(4)s 4650(-)s 480 13256(The)m 941(last)s
+1366(production)s 2494(allo)s 6(ws)k 3197(a)s 3397(meaning)s
+4307(for)s 4679(e)s 3(xpressions)k 5877(such)s 6407(as)s
+220 fnt35 6691 13253({})m 240 fnt82 6828 13256(,)m 6968(in)s
+7245(which)s 7921(an)s 8238(object)s 8916(is)s 0 12968(missing.)m
+907(The)s 1333(v)s 6(alue)k 1899(of)s 2168(this)s
+240 fnt83 2562 12970(empty)m 3187(object)s 240 fnt82 3833 12968(is)m
+4041(a)s 4205(rectangle)s 5135(of)s 5404(size)s 5829(0)s
+6002(by)s 6294(0,)s 6519(with)s 6999(one)s 7399(column)s
+8172(mark)s 8722(and)s 0 12680(one)m 402(ro)s 6(w)k
+822(mark,)s 1420(that)s 1838(prints)s 2433(as)s 2683(nothing.)s
+480 12306(The)m 938(second-last)s 2103(production)s 3227(generates)s 4210(sequences)s
+5261(of)s 5562(arbitrary)s 6467(objects)s 7225(separated)s 8215(by)s
+8539(white)s 0 12018(space,)m 671(called)s 240 fnt83 1333 12020(par)m 3(a)k 2(gr)k 3(aphs)k
+240 fnt82 2439 12018(.)m 2636(Ignoring)s 3547(paragraph)s 4593(breaking)s
+5517(for)s 5888(no)s 6(w)k 15(,)k 6421(the)s
+6802(natural)s 7554(meaning)s 8464(is)s 8708(that)s 0 11730(the)m
+361(tw)s 2(o)k 784(objects)s 1525(should)s 2235(appear)s
+2946(side)s 3400(by)s 3707(side,)s 4212(and)s 4629(Lout')s 13(s)k
+5305(parser)s 5961(accordingly)s 7157(interpolates)s 8335(an)s 8632(in\207x)s
+0 11442(horizontal)m 1017(concatenation)s 2395(operator)s 3244(\(see)s 3677(belo)s 6(w\))k
+4377(between)s 5224(them.)s 5859(This)s 6328(operator)s 7177(is)s
+7380(associati)s 6(v)k 3(e,)k 8519(so)s 8778(the)s
+0 11154(grammatical)m 1262(ambiguity)s 2301(does)s 2806(no)s 3113(harm.)s
+3783(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+4758(the)s 5120(Algol-60)s 6054(rule)s 6496(that)s 6928(white)s
+7530(space)s 8132(should)s 8844(be)s 0 10866(signi\207cant)m 1056(only)s
+1536(as)s 1786(a)s 1952(separator)s 2887(is)s 3097(necessarily)s
+4212(brok)s 2(en)k 4932(by)s 5226(Lout)s 5738(in)s
+5981(just)s 6386(this)s 6782(one)s 7184(place.)s 480 10492(Algol-lik)m 2(e)k
+1506(languages)s 2504(distinguish)s 3601(literal)s 4201(strings)s 4879(from)s
+5393(identi\207ers)s 6389(by)s 6673(enclosing)s 7633(them)s 8161(in)s
+8394(quotes,)s 0 10204(b)m 4(ut)k 372(literals)s 1082(are)s
+1440(f)s 2(ar)k 1773(too)s 2143(frequent)s 3010(in)s
+3264(document)s 4278(formatting)s 5350(for)s 5699(this)s 6106(to)s
+6356(be)s 6649(viable.)s 7408(The)s 7847(con)s 9(v)k 3(entional)k
+0 9916(solution)m 829(is)s 1041(to)s 1282(be)s 3(gin)k
+1870(identi\207ers)s 2878(with)s 3362(a)s 3530(special)s 4250(character)s 9(,)k
+5224(and)s 5630(Lout)s 6144(follo)s 6(ws)k 6908(Scribe)s
+7576([7])s 7895(in)s 8140(using)s 8714(`@')s 0 9628(rather)m
+616(than)s 1085(the)s 1433(`\\')s 1690(of)s 1961(trof)s 6(f)k
+2450([8])s 2767(and)s 3171(T)s 3313 9580(E)m 3456 9628(X)m
+3685([9].)s 480 9254(Ho)m 6(we)k 6(v)k 3(er)k 9(,)k
+1447(Lout)s 1966(tak)s 2(es)k 2513(the)s 2868(unusual)s
+3675(step)s 4120(of)s 4398(making)s 5176(an)s 5466(initial)s
+6084(`@')s 6503(optional.)s 7458(The)s 7893(designers)s 8855(of)s
+0 8966(Eqn)m 449(apparently)s 1519(considered)s 2620(such)s 3122(characters)s
+4147(dis\207guring)s 5244(in)s 5494(\207ne-grained)s 6713(input)s 7272(lik)s 2(e)k
+7691(equations,)s 8722(and)s 0 8678(this)m 401(author)s 1077(agrees.)s
+1856(The)s 2289(implementation)s 3851(is)s 4066(straightforw)s 2(ard:)k
+5707(`@')s 6124(is)s 6339(classed)s 7092(as)s 7347(just)s
+7757(another)s 8539(letter)s 9(,)k 0 8390(and)m 407(e)s 6(v)k 3(ery)k
+986(w)s 2(ord)k 1537(is)s 1750(searched)s 2647(for)s
+2988(in)s 3234(the)s 3585(symbol)s 4348(table.)s 4979(If)s
+5212(it)s 5407(is)s 5620(found,)s 6289(it)s 6484(is)s
+6697(an)s 6983(identi\207er)s 9(,)k 7946(otherwise)s 8934(it)s
+0 8102(is)m 214(a)s 384(literal.)s 1107(A)s 1341(w)s 2(arning)k
+2181(message)s 3051(is)s 3265(printed)s 4004(when)s 4585(a)s
+4755(literal)s 5369(be)s 3(ginning)k 6381(with)s 6867(`@')s
+7284(is)s 7498(found,)s 8168(since)s 8719(it)s 8916(is)s
+0 7814(probably)m 905(a)s 1071(mis-spelt)s 2006(identi\207er)s 13(.)k
+3019(No)s 3365(such)s 3861(safety)s 4485(net)s 4837(is)s
+5047(possible)s 5887(for)s 6225(identi\207ers)s 7231(without)s 8022(`@'.)s
+480 7440(Equation)m 1418(formatting)s 2496(also)s 2951(demands)s 3871(symbols)s
+4737(made)s 5328(from)s 5869(punctuation)s 7074(characters,)s 8165(such)s
+8678(as)s 220 fnt35 8946 7437(+)m 240 fnt82 0 7152(and)m
+220 fnt35 404 7149(<=)m 240 fnt82 652 7152(.)m 816(It)s
+1021(is)s 1231(traditional)s 2267(to)s 2506(allo)s 6(w)k
+3085(such)s 3581(symbols)s 4430(to)s 4669(be)s 4951(juxtaposed,)s
+6095(which)s 6737(means)s 7399(that)s 7817(the)s 8165(input)s
+220 fnt35 480 6702(<=++)m 240 fnt82 0 6251(for)m 354(e)s 3(xample)k
+1234(must)s 1776(be)s 2075(interpreted)s 3184(within)s 3869(the)s
+4234(le)s 3(xical)k 4939(analyser)s 5812(by)s 6123(searching)s
+7109(the)s 7474(symbol)s 8251(table)s 8788(for)s 0 5963(its)m
+306(pre\207x)s 3(es)k 1142(in)s 1416(the)s 1795(order)s
+220 fnt35 2390 5960(<=++)m 240 fnt82 2894 5963(,)m 220 fnt35
+3032 5960(<=+)m 240 fnt82 3408 5963(,)m 220 fnt35 3546 5960(<=)m
+240 fnt82 3794 5963(.)m 3988(Although)s 4981(this)s 5408(tak)s 2(es)k
+5979(quadratic)s 6952(time,)s 7514(in)s 7788(practice)s 8630(such)s
+0 5675(sequences)m 1021(are)s 1368(too)s 1727(short)s 2265(to)s
+2504(mak)s 2(e)k 3076(a)s 3242(more)s 3789(sophisticated)s
+5095(linear)s 5698(method)s 6474(lik)s 2(e)k 6886(tries)s
+7347(w)s 2(orthwhile.)k 240 fnt84 0 5026(2.3.)m 471(Basic)s
+1073(structural)s 2149(operators)s 240 fnt82 480 4549(A)m 696(programming)s
+2036(language)s 2941(may)s 3393(be)s 3660(considered)s 4739(complete)s
+5656(when)s 6218(it)s 6395(attains)s 7054(the)s 7388(po)s 6(wer)k
+8025(of)s 8281(a)s 8432(T)s 10(uring)k 0 4261(machine,)m
+917(b)s 4(ut)k 1280(no)s 1574(such)s 2071(criterion)s
+2937(seems)s 3573(rele)s 6(v)k 6(ant)k 4390(to)s
+4630(document)s 5635(formatting.)s 6808(Instead,)s 7606(as)s 7857(the)s
+8206(language)s 0 3973(de)m 6(v)k 3(elops)k 913(and)s
+1338(ne)s 6(w)k 1806(applications)s 3033(are)s 3401(attempted,)s
+4471(de\207ciencies)s 5670(are)s 6038(e)s 3(xposed)k 6899(and)s
+7324(the)s 7693(operator)s 8570(set)s 8916(is)s 0 3685(re)m 6(vised)k
+742(to)s 981(o)s 3(v)k 3(ercome)k 1974(them.)s
+480 3311(Lout)m 1025(has)s 1429(a)s 1629(repertoire)s 2646(of)s
+2950(23)s 3268(primiti)s 6(v)k 3(e)k 4224(operators)s
+5198(\(Figure)s 5990(1\),)s 6390(which)s 7066(has)s 7470(pro)s 3(v)k 3(en)k
+8220(adequate)s 0 3023(for)m 348(a)s 525(wide)s 1056(v)s 6(ariety)k
+1778(of)s 2059(features,)s 2932(including)s 3899(equations,)s 4934(tables,)s
+5609(and)s 6023(page)s 6542(layout,)s 7257(and)s 7672(so)s
+7948(seems)s 8594(to)s 8844(be)s 0 2735(reasonably)m 1077(complete)s
+1995(in)s 2225(this)s 2607(pragmatic)s 3602(sense.)s 4270(In)s
+4513(this)s 4895(section)s 5616(we)s 5937(introduce)s 6883(the)s
+7217(eight)s 7741(concatenation)s 0 2447(and)m 424(mark-hiding)s 1680(operators.)s
+2754(T)s 19(o)k 3075(them)s 3634(f)s 2(alls)k
+4114(the)s 4482(basic)s 5047(task)s 5514(of)s 5806(assembling)s
+6956(comple)s 3(x)k 7853(objects)s 8602(from)s 0 2159(simple)m
+693(ones,)s 1239(and)s 1643(the)s 3(y)k 2106(were)s
+2626(the)s 2974(\207rst)s 3405(to)s 3644(be)s 3926(designed)s
+4835(and)s 5239(implemented.)s 480 1785(Man)m 3(y)k 1094(of)s
+1370(the)s 1723(operators)s 2668(of)s 2944(Eqn)s 3392(can)s
+3786(be)s 4073(vie)s 6(wed)k 4821(as)s 5076(b)s 4(uilding)k
+5928(small)s 6505(tables.)s 7231(A)s 7466(b)s 4(uilt-up)k
+8277(fraction,)s 0 1497(for)m 367(e)s 3(xample,)k 1310(has)s
+1710(one)s 2141(column)s 2945(and)s 3379(three)s 3941(ro)s 6(ws)k
+4480(\(numerator)s 9(,)k 5669(line,)s 6163(and)s 6596(denominator\).)s
+8078(Numerous)s 0 1209(in)m 9(v)k 3(estig)k 1(ations)k
+1377(of)s 1660(this)s 2068(kind)s 2564(con)s 9(vinced)k
+3609(the)s 3969(author)s 4652(that)s 5082(operators)s 6034(capable)s
+6832(of)s 7115(assembling)s 8256(the)s 8616(ro)s 6(ws)k
+0 921(and)m 404(columns)s 1266(of)s 1537(tables)s 2145(w)s 2(ould)k
+2800(suf\207ce)s 3493(for)s 3831(b)s 4(uilding)k 4678(all)s
+4971(kinds)s 5541(of)s 5812(objects.)s 480 547(The)m 906(simplest)s
+1759(objects)s 2485(are)s 2829(empty)s 3479(objects)s 4204(and)s
+4605(literal)s 5213(w)s 2(ords)k 5844(lik)s 2(e)k
+220 fnt35 6254 544(metempsychosis)m 240 fnt82 7882 547(,)m 7986(which)s
+8625(ha)s 4(v)k 3(e)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 5 6
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4352 13841(-)m 4480(5)s 4646(-)s 240 fnt83 266 13217(object)m
+220 fnt35 974 13212(/)m 240 fnt83 1038 13217(gap)m 1511(object)s
+240 fnt82 3816 13215(V)m 26(ertical)k 4613(concatenation)s 5998(with)s
+6480(mark)s 7032(alignment)s 240 fnt83 266 12929(object)m 220 fnt35
+974 12924(//)m 240 fnt83 1099 12929(gap)m 1572(object)s 240 fnt82
+3816 12927(V)m 26(ertical)k 4613(concatenation)s 5998(with)s 6480(left)s
+6857(justi\207cation)s 240 fnt83 266 12641(object)m 220 fnt35 974 12636(|)m
+240 fnt83 1011 12641(gap)m 1484(object)s 240 fnt82 3816 12639(Horizontal)m
+4893(concatenation)s 6278(with)s 6760(mark)s 7312(alignment)s 240 fnt83
+266 12353(object)m 220 fnt35 974 12348(||)m 240 fnt83 1068 12353(gap)m
+1541(object)s 240 fnt82 3816 12351(Horizontal)m 4893(concatenation)s 6278(with)s
+6760(top-justi\207cation)s 240 fnt83 266 12065(object)m 220 fnt35 974 12060(&)m
+240 fnt83 1116 12065(gap)m 1589(object)s 240 fnt82 3816 12063(Horizontal)m
+4893(concatenation)s 6278(within)s 6946(paragraphs)s 220 fnt35 266 11772(@OneCol)m
+240 fnt83 1338 11777(object)m 240 fnt82 3816 11775(Hide)m 4337(all)s
+4630(b)s 4(ut)k 4992(one)s 5394(column)s 6169(mark)s
+6721(of)s 240 fnt83 6992 11777(object)m 220 fnt35 266 11484(@OneRo)m 3(w)k
+240 fnt83 1457 11489(object)m 240 fnt82 3816 11487(Hide)m 4337(all)s
+4630(b)s 4(ut)k 4992(one)s 5394(ro)s 6(w)k
+5814(mark)s 6366(of)s 240 fnt83 6637 11489(object)m 266 11201(font)m
+220 fnt35 762 11196(@F)m 6(ont)k 240 fnt83 1534 11201(object)m
+240 fnt82 3816 11199(Render)m 240 fnt83 4567 11201(object)m 240 fnt82
+5215 11199(in)m 5458(nominated)s 6526(font)s 240 fnt83 266 10913(br)m 8(eakstyle)k
+220 fnt35 1353 10908(@Break)m 240 fnt83 2269 10913(object)m 240 fnt82
+3816 10911(Break)m 4448(paragraphs)s 5548(of)s 240 fnt83 5819 10913(object)m
+240 fnt82 6467 10911(in)m 6710(nominated)s 7778(style)s 240 fnt83
+266 10625(spacestyle)m 220 fnt35 1361 10620(@Space)m 240 fnt83 2318 10625(object)m
+240 fnt82 3816 10623(Render)m 4567(spaces)s 5242(between)s 6096(w)s 2(ords)k
+6730(in)s 6973(nominated)s 8041(style)s 240 fnt83 266 10337(length)m
+220 fnt35 979 10332(@Wide)m 240 fnt83 1813 10337(object)m 240 fnt82
+3816 10335(Render)m 240 fnt83 4567 10337(object)m 240 fnt82 5215 10335(to)m
+5454(width)s 240 fnt83 6056 10337(length)m 266 10049(length)m 220 fnt35
+979 10044(@High)m 240 fnt83 1758 10049(object)m 240 fnt82 3816 10047(Render)m
+240 fnt83 4567 10049(object)m 240 fnt82 5215 10047(to)m 5454(height)s
+240 fnt83 6112 10049(length)m 220 fnt35 266 9756(@HExpand)m 240 fnt83
+1499 9761(object)m 240 fnt82 3816 9759(Expand)m 4606(horizontal)s 5630(g)s 1(aps)k
+6119(to)s 6358(\207ll)s 6678(a)s 4(v)k 6(ailable)k
+7586(space)s 220 fnt35 266 9468(@VExpand)m 240 fnt83 1487 9473(object)m
+240 fnt82 3816 9471(Expand)m 4606(v)s 3(ertical)k 5373(g)s 1(aps)k
+5862(to)s 6101(\207ll)s 6421(a)s 4(v)k 6(ailable)k
+7329(space)s 220 fnt35 266 9180(@HScale)m 240 fnt83 1307 9185(object)m
+240 fnt82 3816 9183(Horizontal)m 4893(geometrical)s 6075(scaling)s 6805(to)s
+7044(\207ll)s 7364(a)s 4(v)k 6(ailable)k 8272(space)s
+220 fnt35 266 8892(@VScale)m 240 fnt83 1295 8897(object)m 240 fnt82
+3816 8895(V)m 26(ertical)k 4613(geometrical)s 5795(scaling)s 6525(to)s
+6764(\207ll)s 7084(a)s 4(v)k 6(ailable)k 7992(space)s
+240 fnt83 266 8609(angle)m 220 fnt35 911 8604(@Rotate)m 240 fnt83
+1892 8609(object)m 240 fnt82 3816 8607(Rotate)m 240 fnt83 4496 8609(object)m
+240 fnt82 5144 8607(by)m 240 fnt83 5438 8609(angle)m 266 8321(P)m 19(ostScript)k
+220 fnt35 1367 8316(@Gr)m 2(aphic)k 240 fnt83 2471 8321(object)m
+240 fnt82 3816 8319(Escape)m 4549(to)s 4788(graphics)s 5649(language)s
+220 fnt35 266 8028(@Ne)m 6(xt)k 240 fnt83 1050 8033(object)m
+240 fnt82 3816 8031(Add)m 4287(1)s 4442(to)s 4681(an)s
+4964(object)s 5608(denoting)s 6499(a)s 6665(number)s 240 fnt83
+266 7745(object)m 220 fnt35 974 7740(@Case)m 240 fnt83 1821 7745(alternatives)m
+240 fnt82 3816 7743(Select)m 4459(from)s 4983(a)s 5149(set)s
+5474(of)s 5745(alternati)s 6(v)k 3(e)k 6799(objects)s
+240 fnt83 266 7457(identi\207er)m 220 fnt35 1254 7452(&&)m 240 fnt83
+1662 7457(object)m 240 fnt82 3816 7455(Cross)m 4412(reference)s 240 fnt83
+266 7169(cr)m 10(oss-r)k 8(efer)k 8(ence)k 220 fnt35
+1839 7164(@Open)m 240 fnt83 2705 7169(object)m 240 fnt82 3816 7167(Retrie)m 6(v)k 3(e)k
+4672(v)s 6(alue)k 5240(from)s 5764(cross)s 6306(reference)s
+240 fnt83 266 6881(cr)m 10(oss-r)k 8(efer)k 8(ence)k
+220 fnt35 1839 6876(@T)m 26(agged)k 240 fnt83 2888 6881(object)m
+240 fnt82 3816 6879(Attach)m 4510(cross)s 5052(referencing)s 6192(tag)s
+6537(to)s 6776(object)s 200 fnt84 1346 6226(Figur)m 3(e)k
+1954(1.)s 200 fnt82 2196 6227(The)m 2552(23)s 2789(primiti)s 5(v)k 3(e)k
+3556(operators)s 4338(of)s 4564(Lout,)s 5030(in)s 5232(order)s
+5702(of)s 5928(increasing)s 6789(precedence.)s 240 fnt82 0 5596(one)m
+402(column)s 1177(mark)s 1729(and)s 2133(one)s 2535(ro)s 6(w)k
+2955(mark:)s 1572 215 0 106 240 288 60 480 5090 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1572 215 0 106 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1572 215 0 106 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 52(metempsychosis)m
+grestore
+
+grestore
+end end restore
+grestore
+0 4639(T)m 19(o)k 337(place)s
+934(tw)s 2(o)k 1381(arbitrary)s 2294(objects)s 3059(side)s
+3537(by)s 3868(side,)s 4398(we)s 4770(use)s 5182(the)s
+5567(in\207x)s 6099(operator)s 220 fnt35 6992 4636(|)m 240 fnt82
+7029 4639(,)m 7173(denoting)s 8102(horizontal)s 0 4351(concatenation.)m 1492(F)s 3(or)k
+1881(e)s 3(xample,)k 220 fnt35 480 3850(USA |0.2i A)m 6(ustr)k 2(alia)k
+240 fnt82 0 3395(produces)m 915(the)s 1263(object)s 476 166 0 57 240 288 60 480 2889 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(USA)m
+
+grestore
+
+grestore
+end end restore
+grestore
+875 166 0 57 240 288 60 1244 2889 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+875 165 0 56 240 288 60 0 1 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 2(Australia)m
+grestore
+
+grestore
+end end restore
+grestore
+0 2438(The)m 443(ro)s 6(w)k 879(marks)s
+1529(are)s 1892(mer)s 4(ged)k 2678(into)s 3119(one,)s
+3587(\207xing)s 4215(the)s 4579(v)s 3(ertical)k 5361(position)s
+6205(of)s 6491(the)s 6855(objects)s 7598(relati)s 6(v)k 3(e)k
+8376(to)s 8631(each)s 0 2150(other;)m 611(their)s 1116(horizontal)s
+2148(separation)s 3196(is)s 3414(determined)s 4555(by)s 4857(the)s
+240 fnt83 5214 2152(gap)m 240 fnt82 5635 2150(attached)m 6497(to)s
+6744(the)s 7101(operator)s 9(,)k 8003(in)s 8254(this)s
+8659(case)s 0 1862(0.2)m 361(inches.)s 1143(W)s 19(e)k
+1519(think)s 2080(of)s 2358(the)s 2713(g)s 1(ap)k
+3118(as)s 3376(part)s 3814(of)s 4092(the)s 4448(operator)s 9(,)k
+5349(although)s 6251(strictly)s 6974(it)s 7174(is)s 7391(a)s
+7564(third)s 8081(parameter)s 13(.)k 0 1574(It)m 205(may)s
+671(be)s 953(omitted,)s 1790(def)s 2(aulting)k 2810(to)s
+220 fnt35 3049 1571(0i)m 240 fnt82 3205 1574(.)m 240 fnt83
+480 1202(V)m 26(ertical)k 1294(concatenation)s 240 fnt82 2644 1200(,)m
+2762(denoted)s 3590(by)s 3895(the)s 4254(in\207x)s 4760(operator)s
+220 fnt35 5627 1197(/)m 240 fnt82 5691 1200(,)m 5809(is)s
+6031(the)s 6390(same)s 6948(apart)s 7497(from)s 8032(the)s
+8392(change)s 0 912(of)m 271(direction:)s 220 fnt35 480 461(A)m 6(ustr)k 2(alia /0.1i USA)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 6 7
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4348 13842(-)m 4476(6)s 4649(-)s 0 13251(produces)m 915(the)s
+1263(object)s 875 165 0 56 240 288 60 480 12746 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 2(Australia)m
+grestore
+
+grestore
+end end restore
+grestore
+875 165 0 57 240 288 60 480 12437 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(USA)m
+grestore
+
+grestore
+end end restore
+grestore
+0 11986(with)m 482(column)s
+1257(marks)s 1892(mer)s 4(ged)k 2663(and)s 3067(a)s
+3233(0.1)s 3568(inch)s 4037(g)s 1(ap.)k 480 11612(Consider)m
+1404(no)s 6(w)k 1865(what)s 2390(happens)s 3226(when)s
+3802(horizontal)s 4826(and)s 5230(v)s 3(ertical)k 5997(are)s
+6344(combined:)s 220 fnt35 1000 11111({)m 1186(USA)s 2442(|0.2i)s
+2958(A)s 6(ustr)k 2(alia)k 3919(})s 480 10823(/0.1i)m
+1000({)s 1186(W)s 8(ashington)k 2442(|)s 2958(Canberr)s 2(a)k
+3987(})s 240 fnt82 0 10324(The)m 445(tw)s 2(o)k
+872(parameters)s 1987(of)s 220 fnt35 2275 10321(/)m 240 fnt82
+2416 10324(no)m 6(w)k 2895(ha)s 4(v)k 3(e)k
+3413(tw)s 2(o)k 3840(column)s 4632(marks)s 5284(each,)s
+5846(and)s 6268(the)s 3(y)k 6748(will)s 7191(be)s
+7490(mer)s 4(ged)k 8278(with)s 8778(the)s 0 10036(corresponding)m
+1422(marks)s 2057(in)s 2300(the)s 2648(other)s 3199(parameter)s 9(,)k
+4251(yielding)s 5088(the)s 5436(object)s 476 166 0 57 240 288 60 480 9530 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(USA)m
+grestore
+
+grestore
+end end restore
+grestore
+659 166 0 57 240 288 60 956 9530 LoutGr2
+0 ymark moveto xsize 10 pt add ymark lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+876 166 0 57 240 288 60 1903 9530 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+875 165 0 56 240 288 60 0 1 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 2(Australia)m
+
+grestore
+
+grestore
+end end restore
+grestore
+1135 215 0 106 240 288 60 480 9171 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1135 215 0 106 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1135 215 0 106 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 52(W)m 19(ashington)k
+grestore
+
+grestore
+end end restore
+grestore
+876 215 0 106 240 288 60 1903 9171 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+876 166 0 57 240 288 60 0 49 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+876 166 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(Canberra)m
+grestore
+
+grestore
+end end restore
+grestore
+0 8720(The)m 220 fnt35
+425 8717(0.2i)m 240 fnt82 821 8720(g)m 1(ap)k 1216(separates)s
+2139(columns,)s 3054(not)s 3416(indi)s 6(vidual)k 4432(items)s
+4997(in)s 5237(columns,)s 6152(so)s 6414(a)s 6577(g)s 1(ap)k
+6972(attached)s 7823(to)s 8059(the)s 8403(second)s 220 fnt35
+0 8429(|)m 240 fnt82 96 8432(w)m 2(ould)k 749(serv)s 3(e)k
+1304(no)s 1595(purpose;)s 2464(an)s 3(y)k 2859(such)s
+3353(g)s 1(ap)k 3749(is)s 3957(ignored.)s 4851(If)s
+5079(the)s 5425(number)s 6214(of)s 6484(marks)s 7117(to)s
+7354(be)s 7634(mer)s 4(ged)k 8403(dif)s 6(fers,)k
+0 8144(empty)m 638(columns)s 1485(are)s 1818(added)s 2433(at)s
+2651(the)s 2984(right)s 3481(to)s 3705(equalize)s 4542(the)s
+4876(number)s 13(.)k 5743(The)s 6157(four)s 6600(marks)s
+7221(protruding)s 8269(from)s 8778(the)s 0 7856(result)m 601(are)s
+959(all)s 1263(a)s 4(v)k 6(ailable)k 2182(for)s
+2531(mer)s 4(ging)k 3389(with)s 3882(neighbouring)s 5223(marks)s
+5869(by)s 6174(other)s 6736(concatenation)s 8133(operators.)s 0 7568(The)m
+428(precedence)s 1559(of)s 220 fnt35 1830 7565(|)m 240 fnt82
+1927 7568(is)m 2137(higher)s 2808(than)s 3277(the)s 3625(precedence)s
+4756(of)s 220 fnt35 5027 7565(/)m 240 fnt82 5091 7568(,)m
+5198(so)s 5464(the)s 5812(braces)s 6473(could)s 7063(be)s
+7345(omitted.)s 480 7194(When)m 1131(lines)s 1656(of)s 1950(te)s 3(xt)k
+2387(are)s 2757(concatenated,)s 4135(it)s 4349(is)s 4582(con)s 9(v)k 3(entional)k
+5884(to)s 6145(measure)s 7020(their)s 7540(separation)s 8602(from)s
+0 6906(baseline)m 832(to)s 1063(baseline)s 1894(\(mark)s 2517(to)s
+2748(mark)s 3292(in)s 3527(Lout\),)s 4157(rather)s 4765(than)s
+5226(from)s 5742(edge)s 6242(to)s 6473(edge)s 6973(as)s
+7215(abo)s 3(v)k 3(e.)k 7937(This)s 8405(idea)s
+8855(of)s 0 6618(dif)m 6(ferent)k 863(reference)s 1794(points)s
+2417(for)s 2743(measurement)s 4065(e)s 6(v)k 4(olv)k 3(ed)k
+4855(o)s 3(v)k 3(er)k 5322(the)s 5658(years)s
+6200(into)s 6613(a)s 6767(system)s 7478(of)s 7737(six)s
+240 fnt83 8059 6620(gap)m 8459(modes)s 240 fnt82 0 6330(\(Figure)m
+769(2\),)s 1085(e)s 3(xpressed)k 2094(by)s 2398(appending)s
+3460(a)s 3636(letter)s 4195(to)s 4445(the)s 4803(length.)s
+5576(F)s 3(or)k 5975(e)s 3(xample,)k 220 fnt35
+6899 6327(|0.2i)m 240 fnt82 7366 6330(is)m 7586(an)s 7880(abbre)s 6(viation)k
+0 6042(for)m 220 fnt35 377 6039(|0.2ie)m 240 fnt82 901 6042(,)m
+1047(meaning)s 1963(0.2)s 2356(inches)s 3057(measured)s 4070(from)s
+4633(edge)s 5180(to)s 5458(edge;)s 220 fnt35 6061 6039(|0.3ix)m
+240 fnt82 6678 6042(produces)m 7632(a)s 7837(0.3)s 8220(inch)s
+8728(g)s 1(ap)k 0 5754(measured)m 972(from)s 1493(mark)s
+2043(to)s 2279(mark)s 2829(and)s 3230(widened)s 4097(if)s
+4311(necessary)s 5292(to)s 5528(pre)s 6(v)k 3(ent)k
+6294(o)s 3(v)k 3(erstriking;)k 7552(and)s 220 fnt35
+7954 5751(|2.5it)m 240 fnt82 8478 5754(places)m 0 5466(its)m 273(right)s
+781(parameter)s 1792(2.5)s 2135(inches)s 2794(from)s 3314(the)s
+3659(current)s 4392(left)s 4766(mar)s 4(gin,)k 5543(irrespecti)s 6(v)k 3(e)k
+6699(of)s 6967(the)s 7312(position)s 8137(of)s 8405(the)s
+8749(left)s 0 5178(parameter)m 13(.)k 1098(There)s 1704(is)s
+1907(also)s 2338(a)s 2496(choice)s 3169(of)s 3433(ele)s 6(v)k 3(en)k
+4098(units)s 4606(of)s 4870(measurement)s 6197(\(inches,)s 6987(centimetres,)s
+8186(multiples)s 0 4890(of)m 288(the)s 654(current)s 1407(font)s
+1870(size,)s 2365(etc.\),)s 2907(the)s 3272(most)s 3815(interesting)s
+4894(being)s 5496(the)s 220 fnt35 5862 4887(r)m 240 fnt82
+6012 4890(unit:)m 6568(one)s 220 fnt35 6987 4887(r)m 240 fnt82
+7138 4890(is)m 7365(the)s 7731(column)s 8524(width)s 0 4602(minus)m
+635(the)s 982(width)s 1583(of)s 1852(the)s 2199(follo)s 6(wing)k
+3175(object,)s 3864(so)s 4129(that)s 220 fnt35 4546 4599(|1r)m -8(t)k
+240 fnt82 4921 4602(produces)m 5835(suf\207cient)s 6783(space)s 7368(to)s
+7606(right)s 8116(justify)s 8778(the)s 0 4314(follo)m 6(wing)k
+987(object,)s 1688(and)s 220 fnt35 2103 4311(|0.5r)m -8(t)k
+240 fnt82 2673 4314(to)m 2923(center)s 3576(it.)s 3883(These)s
+4520(features)s 5337(implement)s 6429(spacings)s 7315(needed)s 8061(in)s
+8315(practice)s 0 4026(rather)m 608(than)s 1069(suggested)s 2063(by)s
+2349(theory)s 15(.)k 3101(The)s 3(y)k 3636(w)s 2(ork)k
+4179(with)s 4653(all)s 4938(\207v)s 3(e)k 5342(concatenation)s
+6719(operators,)s 7707(horizontal)s 8722(and)s 0 3738(v)m 3(ertical.)k
+480 3364(When)m 1113(we)s 1452(construct)s 2392(a)s 2562(b)s 4(uilt-up)k
+3372(fraction,)s 4225(the)s 4577(result)s 5171(has)s 5545(three)s
+6082(ro)s 6(w)k 6506(marks,)s 7201(b)s 4(ut)k
+7567(only)s 8051(the)s 8403(second)s 0 3076(should)m 697(be)s
+979(visible)s 1672(outside)s 2419(the)s 2767(object:)s gsave
+480 2245 translate
+240 fnt83 156 491 0 288 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+156 491 0 288 240 288 12 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+156 491 0 288 240 288 12 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 336(X)m
+156 0 0 0 240 288 12 0 288 LoutGr2
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+2 68(Y)m
+grestore
+
+grestore
+end end restore
+grestore
+0 1794(This)m 493(is)s 721(a)s 905(common)s
+1817(problem,)s 2739(and)s 3161(accordingly)s 4361(a)s 220 fnt35
+4545 1791(@OneRo)m 3(w)k 240 fnt82 5694 1794(operator)m 6567(w)s 2(as)k
+7006(introduced)s 8105(for)s 8461(hiding)s 0 1506(all)m 291(b)s 4(ut)k
+650(one)s 1050(of)s 1318(the)s 1663(ro)s 6(w)k
+2081(marks)s 2713(of)s 2981(its)s 3255(parameter)s 13(.)k
+4357(Normally)s 15(,)k 5363(the)s 5708(\207rst)s 6136(mark)s
+6686(is)s 6893(the)s 7238(survi)s 6(v)k 4(or)k 9(,)k
+8121(b)s 4(ut)k 8480(a)s 8643(later)s 0 1218(mark)m
+552(can)s 941(be)s 1223(chosen)s 1945(by)s 2239(pre\207xing)s
+220 fnt35 3156 1215(^)m 240 fnt82 3322 1218(to)m 3561(the)s
+3909(preceding)s 4905(concatenation)s 6290(operator:)s 220 fnt35 480 717(@OneRo)m 3(w { X ^/2p @HLine /2p )k 19(Y })k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 7 8
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4351 13848(-)m 4479(7)s 4647(-)s 6693 8221 0 8221 240 288 60 1186 5201 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+0 7447(Edge-to-edge)m 220 fnt35
+1786 7444(|)m 240 fnt83 1843 7449(length)m 220 fnt35 2456 7444(e)m
+240 fnt82 0 6238(Hyphenation)m 220 fnt35 1786 6235(|)m 240 fnt83
+1843 6240(length)m 220 fnt35 2456 6235(h)m 240 fnt82 0 5029(Ov)m 3(erstrik)k 2(e)k
+220 fnt35 1786 5026(|)m 240 fnt83 1843 5031(length)m 220 fnt35
+2456 5026(o)m 240 fnt82 0 3820(Mark-to-mark)m 220 fnt35 1786 3817(|)m
+240 fnt83 1843 3822(length)m 220 fnt35 2456 3817(x)m 240 fnt82
+0 2611(K)m 6(erning)k 220 fnt35 1786 2608(|)m 240 fnt83
+1843 2613(length)m 220 fnt35 2456 2608(k)m 240 fnt82 0 1402(T)m 19(ab)k 4(ulation)k
+220 fnt35 1786 1399(|)m 240 fnt83 1843 1404(length)m 220 fnt35
+2456 1399(t)m gsave
+3291 0 translate
+240 fnt82 3402 8221 0 8221 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+567 7485 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 7371 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 7485 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 7371 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2267 7395 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+1247 7395 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+1247 7395 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+1247 7395 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt83 1534 7192(length)m gsave
+567 6304 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 6190 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 6304 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 6190 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2267 6214 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+1247 6214 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+1247 6214 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+1247 6214 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1534 6011(length)m gsave
+567 5123 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 5009 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 5123 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 5009 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 4976 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 4976 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 4976 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 4976 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1392 4774(length)m
+gsave
+567 3886 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 3772 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 3886 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 3772 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 3739 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 3739 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 3739 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 3739 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt82 941 3536(max)m 180 fnt78 1256 3531(\()m 180 fnt83
+1319 3537(length)m 180 fnt78 1774 3531(,)m 180 fnt83 1854 3537(a)m
+180 fnt78 1994 3531(+)m 180 fnt83 2145 3537(b)m 180 fnt78
+2240 3531(\))m gsave
+1247 4363 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 567 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 4363 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 4363 translate
+180 fnt82 567 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 4363 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt83 920 4431(a)m gsave
+2551 4363 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+2268 4363 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+2268 4363 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+2268 4363 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+2366 4387(b)m gsave
+567 2590 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 2476 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 2590 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 2476 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 2443 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 2443 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 2443 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 2443 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt82
+999 2240(max)m 180 fnt78 1314 2235(\()m 180 fnt83 1377 2241(length)m
+180 fnt78 1832 2235(,)m 180 fnt83 1912 2241(a)m 180 fnt78
+2007 2235(,)m 180 fnt83 2087 2241(b)m 180 fnt78 2182 2235(\))m
+gsave
+1247 3067 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 567 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 3067 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 3067 translate
+180 fnt82 567 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 3067 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt83 920 3135(a)m gsave
+2551 3067 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+2268 3067 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+2268 3067 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+2268 3067 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+2366 3091(b)m gsave
+567 1438 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 1324 translate
+180 fnt82 2722 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 1438 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 1324 translate
+180 fnt82 851 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 1234 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 2268 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+0 1234 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 1234 translate
+180 fnt82 2268 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 1234 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1587 1032(length)m gsave
+3402 734 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 3402 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+0 734 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 734 translate
+180 fnt82 3402 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 734 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1189 523(curr)m 6(ent)k
+1759(bound)s
+grestore
+end end restore
+grestore
+200 fnt84 180 4638(Figur)m 3(e)k 788(2.)s
+200 fnt82 1030 4639(The)m 1386(six)s 1664(g)s 1(ap)k
+1995(modes)s 2557(\()s 200 fnt83 2618 4640(length)m 200 fnt82
+3162 4639(is)m 3336(an)s 3(y)k 3666(length\).)s 4367(Hyphenation)s
+5444(mode)s 5933(has)s 6240(an)s 6475(e)s 3(xtra)k
+6919(property)s 7639(not)s 7944(sho)s 5(wn)k 8507(here.)s
+240 fnt82 0 4008(has)m 396(the)s 770(desired)s 1545(result,)s
+2208(where)s 220 fnt35 2874 4005(2p)m 240 fnt82 3197 4008(is)m
+3433(tw)s 2(o)k 3870(points)s 4532(and)s 220 fnt35
+4962 4005(@HLine)m 240 fnt82 5836 4008(is)m 6072(an)s 6381(easy)s
+6887(combination)s 8166(of)s 8464(Lout')s 13(s)k 0 3720(graphics)m
+861(operators.)s 1914(A)s 2144(similar)s 2866(operator)s 9(,)k
+220 fnt35 3760 3717(@OneCol)m 240 fnt82 4712 3720(,)m 4819(hides)s
+5375(column)s 6150(marks.)s 480 3346(A)m 728(v)s 6(ariant)k
+1463(of)s 220 fnt35 1753 3343(/)m 240 fnt82 1895 3346(called)m
+220 fnt35 2542 3343(//)m 240 fnt82 2745 3346(is)m 2974(pro)s 3(vided)k
+3898(which)s 4558(performs)s 5490(v)s 3(ertical)k 6275(concatenation)s
+7679(b)s 4(ut)k 8059(ignores)s 8833(all)s 0 3058(column)m
+775(marks)s 1410(and)s 1814(simply)s 2519(left-justi\207es)s 3709(its)s
+3985(tw)s 2(o)k 4395(parameters:)s 220 fnt35 480 2557(Heading //0.1i)m
+480 2269(A |0.2i B /0.1i)m 480 1981(C | D)m 240 fnt82 0 1526(has)m 370(result)s
+480 1073(Heading)m 480 716(A)m 938(B)s 480 410(C)m 938(D)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 8 9
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4351 13844(-)m 4479(8)s 4646(-)s 0 13253(sho)m 6(wing)k
+883(that)s 1325(spanning)s 2267(columns)s 3153(in)s 3420(tables)s
+4052(moti)s 6(v)k 6(ate)k 4956(the)s 5328(inclusion)s
+6286(of)s 6581(this)s 7001(operator)s 13(.)k 7972(There)s
+8609(is)s 8843(an)s 0 12965(analogous)m 220 fnt35 1029 12962(||)m
+240 fnt82 1191 12965(operator)m 13(.)k 2145(The)s 2581(author)s
+3259(w)s 2(ould)k 3922(ha)s 4(v)k 3(e)k
+4430(preferred)s 5370(to)s 5616(lea)s 4(v)k 3(e)k
+6177(out)s 6550(these)s 7105(operators,)s 8108(since)s 8663(the)s 3(y)k
+0 12677(complicate)m 1104(the)s 1452(implementation,)s 3059(and)s 3463(it)s
+3655(is)s 3865(interesting)s 4926(to)s 5165(e)s 3(xamine)k
+6028(the)s 6376(prospects)s 7330(of)s 7601(doing)s 8200(so.)s
+480 12303(The)m 220 fnt35 953 12300(//)m 240 fnt82 1184 12303(operator)m
+2086(is)s 2342(formally)s 3263(redundant,)s 4373(because)s 5232(in)s
+5521(general)s 6324(the)s 6718(e)s 3(xpression)k 220 fnt35
+7841 12300(x // y)m 240 fnt82 8409 12303(can)m 8844(be)s 0 12015(replaced)m
+867(by)s 220 fnt35 480 11514(@OneCol { | x } /)m 480 11226(@OneCol { | y })m 240 fnt82
+0 10728(for)m 338(an)s 3(y)k 734(objects)s 220 fnt35
+1462 10725(x)m 240 fnt82 1629 10728(and)m 220 fnt35 2032 10725(y)m
+240 fnt82 2140 10728(.)m 2304(By)s 2637(concatenating)s 4017(an)s
+4300(empty)s 4951(object)s 5594(at)s 5826(the)s 6173(left)s
+6549(of)s 220 fnt35 6820 10725(x)m 240 fnt82 6987 10728(and)m
+7390(hiding)s 8055(all)s 8347(b)s 4(ut)k 8708(that)s
+0 10440(empty)m 641(object')s 13(s)k 1423(column)s 2186(mark,)s
+2772(we)s 3095(ef)s 6(fecti)k 6(v)k 3(ely)k
+4143(shift)s 220 fnt35 4615 10437(x)m 240 fnt82 4723 10440(')m 13(s)k
+4921(column)s 5684(mark)s 6224(to)s 6452(its)s 6716(left)s
+7081(edge.)s 7685(The)s 8101(same)s 8636(goes)s 0 10152(for)m
+220 fnt35 349 10149(y)m 240 fnt82 457 10152(,)m 575(so)s
+852(the)s 220 fnt35 1211 10149(/)m 240 fnt82 1347 10152(operator)m
+2214(has)s 2595(just)s 3011(one)s 3424(column)s 4211(mark)s
+4774(to)s 5024(mer)s 4(ge,)k 5735(at)s 5978(the)s
+6338(e)s 3(xtreme)k 7171(left,)s 7606(and)s 8021(its)s
+8308(ef)s 6(fect)k 8916(is)s 0 9864(indistinguishable)m 1690(from)s
+220 fnt35 2214 9861(//)m 240 fnt82 2339 9864(.)m 480 9490(Unfortunately)m 15(,)k
+1915(if)s 220 fnt35 2134 9487(y)m 240 fnt82 2304 9490(consists)m
+3114(of)s 3387(tw)s 2(o)k 3799(ro)s 6(ws)k
+4311(separated)s 5274(by)s 220 fnt35 5570 9487(/)m 240 fnt82
+5634 9490(,)m 5743(as)s 5995(in)s 6240(the)s 6590(e)s 3(xample)k
+7455(abo)s 3(v)k 3(e,)k 8130(both)s 8616(ro)s 6(ws)k
+0 9202(must)m 533(be)s 823(placed)s 1513(inside)s 2148(the)s
+220 fnt35 2504 9199(@OneCol)m 240 fnt82 3456 9202(,)m 3571(and)s
+3983(the)s 4340(table)s 4868(cannot)s 5574(be)s 5864(entered)s
+6633(in)s 6884(the)s 7240(simple)s 7942(ro)s 6(w-by-ro)k 6(w)k
+0 8914(manner)m 777(that)s 1194(non-e)s 3(xpert)k 2287(users)s
+2828(naturally)s 3731(e)s 3(xpect.)k 4515(Another)s 5359(adv)s 6(antage)k
+6378(of)s 220 fnt35 6649 8911(//)m 240 fnt82 6833 8914(is)m
+7043(that)s 7460(its)s 7736(left)s 8112(parameter)s 0 8626(can)m
+382(be)s 657(printed)s 1385(before)s 2044(its)s 2313(right)s
+2817(parameter)s 3824(is)s 4027(kno)s 6(wn;)k 4779(this)s
+5168(is)s 5371(important)s 6353(when)s 6922(the)s 7263(left)s
+7633(parameter)s 8640(is)s 8843(an)s 0 8338(entire)m 599(page.)s
+480 7964(The)m 960(\207fth)s 1468(and)s 1924(\207nal)s 2457(concatenation)s
+3895(operator)s 9(,)k 220 fnt35 4841 7961(&)m 240 fnt82
+4983 7964(,)m 5143(is)s 5405(an)s 5741(e)s 3(xplicit)k
+6567(v)s 3(ersion)k 7377(of)s 7701(the)s 8102(horizontal)s
+0 7676(concatenation)m 1402(operator)s 2275(interpolated)s 3492(when)s 4085(objects)s
+4830(are)s 5195(separated)s 6172(by)s 6483(white)s 7088(space.)s
+7800(It)s 8022(is)s 8250(formally)s 0 7388(identical)m 907(to)s
+220 fnt35 1177 7385(|)m 240 fnt82 1305 7388(e)m 3(xcept)k
+2017(for)s 2386(taking)s 3068(higher)s 3770(precedence)s 4932(and)s
+5367(being)s 5983(subject)s 6751(to)s 7021(replacement)s 8279(by)s
+220 fnt35 8604 7385(//1vx)m 240 fnt82 0 7100(during)m 678(paragraph)s
+1691(breaking)s 2581(\(Section)s 3434(2.5\).)s 240 fnt84 0 6451(2.4.)m
+471(Implementation)s 2159(of)s 2431(objects)s 3201(and)s 3642(concatenation)s
+240 fnt82 480 5974(In)m 738(this)s 1136(section)s 1872(we)s
+2210(discuss)s 2954(the)s 3304(implementation)s 4863(of)s 5137(objects)s
+5867(and)s 6273(concatenation,)s 7710(and)s 8117(especially)s 0 5686(mark)m
+552(alignment.)s 1672(The)s 2100(\207rst)s 2531(step)s 2969(is)s
+3179(to)s 3418(use)s 3793(an)s 4076(operator)s 4932(precedence)s
+6063(parser)s 6706(to)s 6945(con)s 9(v)k 3(ert)k
+7710(input)s 8262(such)s 8758(as)s 220 fnt35 480 5185(a |0.5i b /0.2i c | d)m
+240 fnt82 0 4730(into)m 425(parse)s 985(trees)s 1486(such)s
+1982(as)s gsave
+480 3036 translate
+240 fnt83 3396 1354 0 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1867 338 56 282 240 288 12 1529 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 136 106(\244)m
+grestore
+(T) lfigpromotelabels
+grestore
+1413 846 0 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+876 338 56 282 240 288 12 537 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+511 338 56 282 240 288 12 451 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+511 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+511 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78 56 105(0)m 192 fnt83
+195 111(.)m 192 fnt78 270 105(5)m 192 fnt83 404 111(i)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 962 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 1075 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1413 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1413 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+517 846 56 790 240 288 12 1526 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78 56 105(0)m 192 fnt83
+195 111(.)m 192 fnt78 270 105(2)m 192 fnt83 410 111(i)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2043 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1240 846 0 790 240 288 12 2156 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+789 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 451 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 789 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 902 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1240 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3396 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 2585(Missing)m 879(objects)s 1662(are)s 2065(replaced)s
+2987(by)s 3336(empty)s 4044(objects,)s 4883(and)s 5342(sequences)s
+6419(of)s 6745(concatenation)s 8186(operators)s 0 2297(are)m 347(consolidated:)s
+gsave
+480 648 translate
+240 fnt83 2492 1359 0 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1415 338 56 282 240 288 12 1077 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+517 846 56 790 240 288 12 451 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78
+56 105(0)m 192 fnt83 195 111(.)m 192 fnt78 270 105(2)m
+192 fnt83 410 111(i)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 968 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1411 846 0 790 240 288 12 1081 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+875 338 56 282 240 288 12 536 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+509 338 56 282 240 288 12 451 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+509 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+509 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78 56 105(0)m 192 fnt83 195 111(.)m
+192 fnt78 270 105(3)m 192 fnt83 402 111(i)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 960 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 1073 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1411 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2492 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+240 fnt78 3284 1886(\336)m gsave
+3825 648 translate
+240 fnt83 2492 1359 0 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1415 338 56 282 240 288 12 1077 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+517 846 56 790 240 288 12 451 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+517 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78 56 105(0)m 192 fnt83
+195 111(.)m 192 fnt78 270 105(2)m 192 fnt83 410 111(i)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 968 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 846 56 790 240 288 12 1081 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1419 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+509 846 56 790 240 288 12 1532 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+509 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+509 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt78 56 105(0)m 192 fnt83
+195 111(.)m 192 fnt78 270 105(3)m 192 fnt83 402 111(i)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2041 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 846 56 790 240 288 12 2154 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2492 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 9 10
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4349 13844(-)m 4477(9)s 4648(-)s 0 13251(to)m 239(mak)s 2(e)k
+811(manifest)s 1693(their)s 2190(associati)s 6(vity)k 3432(and)s
+3836(reduce)s 4529(the)s 4877(depth)s 5466(of)s 5737(the)s
+6085(tree)s 6498(for)s 6836(ef\207cienc)s 3(y)k 7829(later)s 13(.)k
+480 12877(The)m 970(required)s 1887(semantic)s 2851(information)s 4099(is)s
+4371(the)s 4782(size)s 5271(of)s 5605(each)s 6162(subobject,)s
+7249(consisting)s 8334(of)s 8668(four)s 0 12589(inte)m 3(gers:)k
+920(width)s 1524(to)s 1765(left)s 2144(and)s 2550(right)s
+3062(of)s 3335(the)s 3685(distinguished)s 5021(column)s 5798(mark,)s
+6397(and)s 6803(height)s 7463(abo)s 3(v)k 3(e)k
+8087(and)s 8493(belo)s 6(w)k 0 12301(the)m 368(distinguished)s
+1722(ro)s 6(w)k 2162(mark.)s 2837(These)s 3484(numbers)s
+4379(are)s 4746(al)s 2(w)k 2(ays)k 5477(non-ne)s 3(g)k 1(ati)k 6(v)k 3(e)k
+6789(in)s 7052(Basser)s 7769(Lout,)s 8348(b)s 4(ut)k
+8730(this)s 0 12013(restriction)m 1024(is)s 1234(unnecessary)s 2457(and)s
+2861(should)s 3558(be)s 3840(dropped.)s 480 11639(F)m 3(or)k
+867(the)s 1212(lea)s 4(v)k 3(es,)k 1907(which)s
+2546(are)s 2890(simple)s 3581(w)s 2(ords,)k 4268(the)s
+4614(numbers)s 5486(are)s 5830(obtained)s 6710(from)s 7231(font)s
+7674(tables.)s 8392(F)s 3(or)k 8778(the)s 0 11351(higher)m
+678(le)s 6(v)k 3(els)k 1285(we)s 1628(apply)s
+2222(recursi)s 6(v)k 3(e)k 3152(rules.)s 3788(Suppose)s
+4664(that)s 240 fnt83 5090 11353(hgap)m 240 fnt78 5583 11345(\()m
+240 fnt83 5675 11353(x)m 240 fnt78 5801 11345(,)m 240 fnt83
+5932 11353(g)m 240 fnt78 6066 11345(,)m 240 fnt83 6197 11353(y)m
+240 fnt78 6319 11345(\))m 240 fnt82 6453 11351(returns)m 7175(the)s
+7531(desired)s 8287(distance)s 0 11063(between)m 846(the)s 1186(column)s
+1952(marks)s 2579(of)s 2841(objects)s 240 fnt83 3561 11065(x)m
+240 fnt82 3719 11063(and)m 240 fnt83 4114 11065(y)m 240 fnt82
+4268 11063(when)m 4835(the)s 3(y)k 5290(are)s 5629(separated)s
+6580(by)s 6866(g)s 1(ap)k 240 fnt83 7255 11065(g)m
+240 fnt82 7369 11063(:)m 240 fnt83 7527 11065(right)m 240 fnt78
+8000 11057(\()m 240 fnt83 8075 11065(x)m 240 fnt78 8185 11057(\))m
+8298(+)s 240 fnt83 8473 11065(length)m 240 fnt78 0 10769(\()m
+240 fnt83 89 10777(g)m 240 fnt78 221 10769(\))m 376(+)s
+240 fnt83 594 10777(left)m 240 fnt78 920 10769(\()m 240 fnt83
+1009 10777(y)m 240 fnt78 1129 10769(\))m 240 fnt82 1261 10775(when)m
+1842(the)s 2196(g)s 1(ap)k 2600(mode)s 3193(is)s
+3409(edge-to-edge,)s 4770(the)s 5124(lar)s 4(ger)k 5741(of)s
+240 fnt83 6018 10777(length)m 240 fnt78 6629 10769(\()m 240 fnt83
+6718 10777(g)m 240 fnt78 6850 10769(\))m 240 fnt82 6982 10775(and)m
+240 fnt83 7391 10777(right)m 240 fnt78 7878 10769(\()m 240 fnt83
+7968 10777(x)m 240 fnt78 8091 10769(\))m 8246(+)s 240 fnt83
+8464 10777(left)m 240 fnt78 8790 10769(\()m 240 fnt83 8880 10777(y)m
+240 fnt78 9000 10769(\))m 240 fnt82 0 10487(when)m 576(the)s
+924(mode)s 1512(is)s 1722(mark-to-mark,)s 3155(and)s 3559(so)s
+3825(on.)s 4229(Gi)s 6(v)k 3(en)k 4862(an)s
+5145(object)s 240 fnt83 480 9992(X)m 240 fnt78 720 9984(=)m
+240 fnt83 933 9992(x)m 168 fnt78 1039 9899(1)m 240 fnt78
+1249 9984(|)m 240 fnt83 1294 9992(g)m 168 fnt78 1405 9899(1)m
+240 fnt78 1615 9984(\274)m 200 fnt83 1973 10000(^)m 240 fnt78
+2069 9984(|)m 240 fnt83 2114 9992(g)m 168 fnt83 2225 9905(i)m
+168 fnt78 2291 9899(-)m 2403(1)s 240 fnt83 2613 9992(x)m
+168 fnt83 2719 9905(i)m 240 fnt78 2907 9984(\274)m 3265(|)s
+240 fnt83 3310 9992(g)m 168 fnt83 3421 9905(n)m 168 fnt78
+3523 9899(-)m 3635(1)s 240 fnt83 3845 9992(x)m 168 fnt83
+3951 9905(n)m 240 fnt82 0 9448(we)m 335(may)s 801(calculate)s
+1705(its)s 1981(size)s 2408(as)s 2658(follo)s 6(ws:)k
+240 fnt83 740 8945(left)m 240 fnt78 1060 8937(\()m 240 fnt83
+1144 8945(X)m 240 fnt78 1312 8937(\))m 1474(=)s 240 fnt83
+1687 8945(left)m 240 fnt78 2007 8937(\()m 240 fnt83 2091 8945(x)m
+168 fnt78 2197 8852(1)m 240 fnt78 2275 8937(\))m 2413(+)s
+240 fnt83 2614 8945(hgap)m 240 fnt78 3099 8937(\()m 240 fnt83
+3183 8945(x)m 168 fnt78 3289 8852(1)m 240 fnt78 3367 8937(,)m
+240 fnt83 3474 8945(g)m 168 fnt78 3585 8852(1)m 240 fnt78
+3663 8937(,)m 240 fnt83 3770 8945(x)m 168 fnt78 3876 8852(2)m
+240 fnt78 3968 8937(\))m 4106(+)s 4307(\274)s 4593(+)s
+240 fnt83 4794 8945(hgap)m 240 fnt78 5279 8937(\()m 240 fnt83
+5363 8945(x)m 168 fnt83 5469 8858(i)m 168 fnt78 5535 8852(-)m
+5647(1)s 240 fnt78 5725 8937(,)m 240 fnt83 5832 8945(g)m
+168 fnt83 5943 8858(i)m 168 fnt78 6009 8852(-)m 6121(1)s
+240 fnt78 6199 8937(,)m 240 fnt83 6306 8945(x)m 168 fnt83
+6412 8858(i)m 240 fnt78 6468 8937(\))m 240 fnt83 579 8542(right)m
+240 fnt78 1060 8534(\()m 240 fnt83 1144 8542(X)m 240 fnt78
+1312 8534(\))m 1474(=)s 240 fnt83 1687 8542(hgap)m 240 fnt78
+2172 8534(\()m 240 fnt83 2256 8542(x)m 168 fnt83 2362 8455(i)m
+240 fnt78 2418 8534(,)m 240 fnt83 2525 8542(g)m 168 fnt83
+2636 8455(i)m 240 fnt78 2692 8534(,)m 240 fnt83 2799 8542(x)m
+168 fnt83 2905 8455(i)m 168 fnt78 2971 8449(+)m 3084(1)s
+240 fnt78 3162 8534(\))m 3300(+)s 3501(\274)s 3787(+)s
+240 fnt83 3988 8542(hgap)m 240 fnt78 4473 8534(\()m 240 fnt83
+4557 8542(x)m 168 fnt83 4663 8455(n)m 168 fnt78 4765 8449(-)m
+4877(1)s 240 fnt78 4955 8534(,)m 240 fnt83 5062 8542(g)m
+168 fnt83 5173 8455(n)m 168 fnt78 5275 8449(-)m 5387(1)s
+240 fnt78 5465 8534(,)m 240 fnt83 5572 8542(x)m 168 fnt83
+5678 8455(n)m 240 fnt78 5770 8534(\))m 5908(+)s 240 fnt83
+6109 8542(right)m 240 fnt78 6590 8534(\()m 240 fnt83 6674 8542(x)m
+168 fnt83 6780 8455(n)m 240 fnt78 6872 8534(\))m 240 fnt83
+485 8139(abo)m 2(ve)k 240 fnt78 1060 8131(\()m 240 fnt83
+1144 8139(X)m 240 fnt78 1312 8131(\))m 1474(=)s 240 fnt83
+1687 8139(abo)m 2(ve)k 240 fnt78 2262 8131(\()m 240 fnt83
+2346 8139(x)m 168 fnt78 2452 8044(1)m 240 fnt78 2530 8131(\))m
+2680(\255)s 2901(\274)s 3199(\255)s 240 fnt83 3420 8139(abo)m 2(ve)k
+240 fnt78 3995 8131(\()m 240 fnt83 4079 8139(x)m 168 fnt83
+4185 8050(n)m 240 fnt78 4277 8131(\))m 240 fnt83 480 7736(below)m
+240 fnt78 1060 7728(\()m 240 fnt83 1144 7736(X)m 240 fnt78
+1312 7728(\))m 1474(=)s 240 fnt83 1687 7736(below)m 240 fnt78
+2267 7728(\()m 240 fnt83 2351 7736(x)m 168 fnt78 2457 7641(1)m
+240 fnt78 2535 7728(\))m 2685(\255)s 2906(\274)s 3204(\255)s
+240 fnt83 3425 7736(below)m 240 fnt78 4005 7728(\()m 240 fnt83
+4089 7736(x)m 168 fnt83 4195 7647(n)m 240 fnt78 4287 7728(\))m
+240 fnt82 0 7141(where)m 240 fnt78 693 7135(\255)m 240 fnt82
+943 7141(returns)m 1678(the)s 2046(lar)s 4(ger)k 2679(of)s
+2971(its)s 3267(tw)s 2(o)k 3698(parameters.)s 4930(Similar)s
+5712(formulas)s 6633(are)s 7001(easily)s 7632(deri)s 6(v)k 3(ed)k
+8419(for)s 8778(the)s 0 6853(other)m 551(operators.)s 480 6479(F)m 3(or)k
+866(purposes)s 1765(of)s 2033(e)s 3(xposition)k 3081(we)s
+3412(will)s 3835(no)s 6(w)k 4293(mak)s 2(e)k
+4862(the)s 5207(simplifying)s 6358(assumptions)s 7589(that)s 8004(all)s
+8294(g)s 1(aps)k 8779(are)s 220 fnt35 0 6188(0i)m
+240 fnt82 156 6191(,)m 248(all)s 525(column)s 1285(marks)s
+1904(lie)s 2183(at)s 2399(the)s 2732(left)s 3093(edge,)s
+3637(and)s 4025(all)s 4303(ro)s 6(w)k 4707(marks)s
+5327(lie)s 5605(at)s 5822(the)s 6154(top)s 6498(edge.)s
+7098(Then)s 7632(the)s 7964(size)s 8376(of)s 8631(each)s
+0 5903(object)m 644(can)s 1033(be)s 1315(e)s 3(xpressed)k
+2313(by)s 2607(just)s 3012(tw)s 2(o)k 3422(numbers,)s
+4353(width)s 4955(and)s 5359(height,)s 6064(and)s 6468(the)s
+6816(four)s 7274(formulas)s 8174(reduce)s 8867(to)s 240 fnt83
+555 5400(width)m 240 fnt78 1094 5392(\()m 240 fnt83 1178 5400(x)m
+168 fnt78 1284 5307(1)m 240 fnt78 1434 5392(|)m 1551(\274)s
+1849(|)s 240 fnt83 1966 5400(x)m 168 fnt83 2072 5313(n)m
+240 fnt78 2164 5392(\))m 2326(=)s 240 fnt83 2539 5400(width)m
+240 fnt78 3078 5392(\()m 240 fnt83 3162 5400(x)m 168 fnt78
+3268 5307(1)m 240 fnt78 3346 5392(\))m 3484(+)s 3685(\274)s
+3971(+)s 240 fnt83 4172 5400(width)m 240 fnt78 4711 5392(\()m
+240 fnt83 4795 5400(x)m 168 fnt83 4901 5313(n)m 240 fnt78
+4993 5392(\))m 240 fnt83 480 4997(height)m 240 fnt78 1094 4989(\()m
+240 fnt83 1178 4997(x)m 168 fnt78 1284 4904(1)m 240 fnt78
+1434 4989(|)m 1551(\274)s 1849(|)s 240 fnt83 1966 4997(x)m
+168 fnt83 2072 4910(n)m 240 fnt78 2164 4989(\))m 2326(=)s
+240 fnt83 2539 4997(height)m 240 fnt78 3153 4989(\()m 240 fnt83
+3237 4997(x)m 168 fnt78 3343 4904(1)m 240 fnt78 3421 4989(\))m
+3571(\255)s 3792(\274)s 4090(\255)s 240 fnt83 4311 4997(height)m
+240 fnt78 4925 4989(\()m 240 fnt83 5009 4997(x)m 168 fnt83
+5115 4910(n)m 240 fnt78 5207 4989(\))m 240 fnt82 0 4453(The)m
+428(corresponding)s 1850(formulas)s 2750(for)s 3088(v)s 3(ertical)k
+3855(concatenation)s 5240(are)s 240 fnt83 555 3903(width)m 240 fnt78
+1094 3895(\()m 240 fnt83 1178 3903(x)m 168 fnt78 1284 3810(1)m
+240 fnt83 1434 3903(/)m 240 fnt78 1609 3895(\274)m 240 fnt83
+1907 3903(/)m 2082(x)s 168 fnt83 2188 3816(n)m 240 fnt78
+2280 3895(\))m 2442(=)s 240 fnt83 2655 3903(width)m 240 fnt78
+3194 3895(\()m 240 fnt83 3278 3903(x)m 168 fnt78 3384 3810(1)m
+240 fnt78 3462 3895(\))m 3612(\255)s 3833(\274)s 4131(\255)s
+240 fnt83 4352 3903(width)m 240 fnt78 4891 3895(\()m 240 fnt83
+4975 3903(x)m 168 fnt83 5081 3816(n)m 240 fnt78 5173 3895(\))m
+240 fnt83 480 3500(height)m 240 fnt78 1094 3492(\()m 240 fnt83
+1178 3500(x)m 168 fnt78 1284 3407(1)m 240 fnt83 1434 3500(/)m
+240 fnt78 1609 3492(\274)m 240 fnt83 1907 3500(/)m 2082(x)s
+168 fnt83 2188 3413(n)m 240 fnt78 2280 3492(\))m 2442(=)s
+240 fnt83 2655 3500(height)m 240 fnt78 3269 3492(\()m 240 fnt83
+3353 3500(x)m 168 fnt78 3459 3407(1)m 240 fnt78 3537 3492(\))m
+3675(+)s 3876(\274)s 4162(+)s 240 fnt83 4363 3500(height)m
+240 fnt78 4977 3492(\()m 240 fnt83 5061 3500(x)m 168 fnt83
+5167 3413(n)m 240 fnt78 5259 3492(\))m 240 fnt82 0 2956(According)m
+1063(to)s 1302(these)s 1849(formulas,)s 2805(the)s 3153(height)s
+3811(of)s gsave
+480 1262 translate
+240 fnt83 3044 1354 56 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1240 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 789 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 902 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1240 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 1353 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 136 106(\244)m
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1691 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1240 846 56 790 240 288 12 1804 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 789 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 902 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1240 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3044 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 10 11
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Symbol
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4287 13844(-)m 4415(10)s 4710(-)s 0 13253(is)m 240 fnt78
+480 12745([)m 240 fnt83 563 12753(height)m 240 fnt78 1177 12745(\()m
+240 fnt83 1261 12753(a)m 240 fnt78 1388 12745(\))m 1538(\255)s
+240 fnt83 1759 12753(height)m 240 fnt78 2373 12745(\()m 240 fnt83
+2457 12753(b)m 240 fnt78 2583 12745(\))m 2661(])s 2792(+)s
+2993([)s 240 fnt83 3076 12753(height)m 240 fnt78 3690 12745(\()m
+240 fnt83 3774 12753(c)m 240 fnt78 3888 12745(\))m 4038(\255)s
+240 fnt83 4259 12753(height)m 240 fnt78 4873 12745(\()m 240 fnt83
+4957 12753(d)m 240 fnt78 5095 12745(\))m 5173(])s 240 fnt82
+0 12249(which)m 642(is)s 852(correct,)s 1621(b)s 4(ut)k
+1983(for)s 2321(width)s 2923(the)s 3(y)k 3386(yield)s
+240 fnt78 480 11691([)m 240 fnt83 563 11699(width)m 240 fnt78
+1102 11691(\()m 240 fnt83 1186 11699(a)m 240 fnt78 1313 11691(\))m
+1451(+)s 240 fnt83 1652 11699(width)m 240 fnt78 2191 11691(\()m
+240 fnt83 2275 11699(b)m 240 fnt78 2401 11691(\))m 2479(])s
+2622(\255)s 2843([)s 240 fnt83 2926 11699(width)m 240 fnt78
+3465 11691(\()m 240 fnt83 3549 11699(c)m 240 fnt78 3663 11691(\))m
+3801(+)s 240 fnt83 4002 11699(width)m 240 fnt78 4541 11691(\()m
+240 fnt83 4625 11699(d)m 240 fnt78 4763 11691(\))m 4841(])s
+240 fnt82 0 11195(which)m 645(is)s 859(not,)s 1276(since)s
+1827(it)s 2023(does)s 2517(not)s 2887(tak)s 2(e)k
+3343(the)s 3694(mer)s 4(ging)k 4544(of)s 4819(column)s
+5598(marks)s 6237(into)s 6666(account.)s 7578(The)s 8010(asymmetry)s
+0 10907(between)m 874(horizontal)s 1918(and)s 2342(v)s 3(ertical)k
+3130(has)s 3520(come)s 4114(about)s 4726(because)s 5560(the)s
+5928(ro)s 6(w)k 6368(entries,)s 7131(such)s 7648(as)s
+240 fnt83 7918 10909(a)m 240 fnt82 8113 10907(and)m 240 fnt83
+8537 10909(b)m 240 fnt82 8651 10907(,)m 8779(are)s 0 10619(adjacent)m
+849(in)s 1085(the)s 1426(tree,)s 1883(b)s 4(ut)k
+2238(the)s 2579(column)s 3346(entries,)s 4082(such)s 4571(as)s
+240 fnt83 4814 10621(a)m 240 fnt82 4982 10619(and)m 240 fnt83
+5379 10621(c)m 240 fnt82 5481 10619(,)m 5581(are)s 5920(not.)s
+6383(It)s 6581(w)s 2(ould)k 7229(be)s 7504(possible)s
+8337(to)s 8568(solv)s 3(e)k 0 10331(this)m 395(cross-linking)s
+1694(problem)s 2550(by)s 2842(augmenting)s 4024(the)s 4370(size)s
+4795(information)s 5979(stored)s 6619(in)s 6861(each)s 7354(node)s
+7875(to)s 8112(record)s 8778(the)s 0 10043(number)m 791(of)s
+1063(marks)s 1698(and)s 2103(the)s 2451(size)s 2879(of)s
+3150(each,)s 3696(b)s 4(ut)k 4058(the)s 4407(author)s
+5078(has)s 5449(preferred)s 6381(the)s 6730(follo)s 6(wing)k
+7707(method)s 8484(which)s 0 9755(mak)m 2(es)k 660(structural)s
+1616(changes)s 2438(to)s 2677(the)s 3025(tree)s 3438(instead.)s
+480 9381(If)m 240 fnt83 715 9383(a)m 240 fnt82 896 9381(and)m
+240 fnt83 1305 9383(c)m 240 fnt82 1473 9381(share)m 2038(a)s
+2210(column)s 2990(mark,)s 3594(the)s 3(y)k 4063(each)s
+4563(might)s 5187(as)s 5442(well)s 5914(ha)s 4(v)k 3(e)k
+6420(width)s 240 fnt83 7028 9383(width)m 240 fnt78 7572 9375(\()m
+240 fnt83 7662 9383(a)m 240 fnt78 7795 9375(\))m 7961(\255)s
+240 fnt83 8199 9383(width)m 240 fnt78 8743 9375(\()m 240 fnt83
+8833 9383(c)m 240 fnt78 8953 9375(\))m 240 fnt82 9019 9381(,)m
+0 9093(since)m 547(all)s 840(width)s 1442(calculations)s 2635(apply)s
+3221(to)s 3460(entire)s 4060(columns.)s 5035(Accordingly)s 15(,)k
+6323(we)s 6659(introduce)s 7618(a)s 7784(ne)s 6(w)k
+8232(operator)s 9(,)k 240 fnt83 0 8807(COL)m 240 fnt82
+466 8805(,)m 573(de\207ned)s 1336(by)s 240 fnt83 480 8255(width)m
+240 fnt78 1019 8247(\()m 240 fnt83 1103 8255(x)m 168 fnt78
+1209 8162(1)m 240 fnt83 1347 8255(COL)m 240 fnt78 1885 8247(\274)m
+240 fnt83 2171 8255(COL)m 2709(x)s 168 fnt83 2815 8168(n)m
+240 fnt78 2907 8247(\))m 3057(=)s 240 fnt83 3270 8255(width)m
+240 fnt78 3809 8247(\()m 240 fnt83 3893 8255(x)m 168 fnt78
+3999 8162(1)m 240 fnt78 4077 8247(\))m 4227(\255)s 4448(\274)s
+4746(\255)s 240 fnt83 4967 8255(width)m 240 fnt78 5506 8247(\()m
+240 fnt83 5590 8255(x)m 168 fnt83 5696 8168(n)m 240 fnt78
+5788 8247(\))m 240 fnt82 0 7711(and)m 440(replace)s 1221(both)s
+240 fnt83 1741 7713(a)m 240 fnt82 1952 7711(and)m 240 fnt83
+2393 7713(c)m 240 fnt82 2591 7711(by)m 240 fnt83 2922 7713(a)m
+3218(COL)s 3865(c)s 240 fnt82 3967 7711(.)m 4168(T)s 19(o)k
+4504(pre)s 6(v)k 3(ent)k 240 fnt83 5309 7713(COL)m
+240 fnt82 5871 7711(operators)m 6848(from)s 7408(disturbing)s 8468(height)s
+0 7423(calculations,)m 1248(we)s 1583(de\207ne)s 2224(a)s 2390(binary)s
+3055(operator)s 3911(called)s 240 fnt83 4539 7425(SPLIT)m 240 fnt82
+5228 7423(by)m 240 fnt83 555 6920(width)m 240 fnt78 1094 6912(\()m
+240 fnt83 1178 6920(x)m 1356(SPLIT)s 2057(y)s 240 fnt78
+2171 6912(\))m 2333(=)s 240 fnt83 2546 6920(width)m 240 fnt78
+3085 6912(\()m 240 fnt83 3169 6920(x)m 240 fnt78 3287 6912(\))m
+240 fnt83 480 6517(height)m 240 fnt78 1094 6509(\()m 240 fnt83
+1178 6517(x)m 1356(SPLIT)s 2057(y)s 240 fnt78 2171 6509(\))m
+2333(=)s 240 fnt83 2546 6517(height)m 240 fnt78 3160 6509(\()m
+240 fnt83 3244 6517(y)m 240 fnt78 3358 6509(\))m 240 fnt82
+0 6013(which)m 642(switches)s 1516(height)s 2174(and)s 2578(width)s
+3180(calculations)s 4372(onto)s 4851(dif)s 6(ferent)k 5726(subtrees.)s
+6673(Then)s 7222(the)s 7570(transformation)s gsave
+480 4314 translate
+240 fnt83 338 1359 56 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+338 1359 56 1298 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 1016 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+end end restore
+grestore
+240 fnt78 1130 5552(\336)m gsave
+1671 4314 translate
+240 fnt83 2564 1359 56 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1386 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+484 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+484 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83
+56 107(COL)m
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 935 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 1048 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1386 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(L) lfigpromotelabels
+grestore
+614 338 56 282 240 288 12 1499 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+614 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(SPLIT)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2113 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 846 56 790 240 288 12 2226 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 508 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 2564 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+240 fnt82 0 3814(widens)m 240 fnt83
+740 3816(a)m 240 fnt82 926 3814(to)m 240 fnt83 1176 3816(width)m
+240 fnt78 1726 3808(\()m 240 fnt83 1821 3816(a)m 240 fnt78
+1959 3808(\))m 2142(\255)s 240 fnt83 2396 3816(width)m 240 fnt78
+2946 3808(\()m 240 fnt83 3041 3816(c)m 240 fnt78 3166 3808(\))m
+240 fnt82 3303 3814(without)m 4105(af)s 6(fecting)k 5011(its)s
+5298(height;)s 6019(it)s 6222(is)s 6443(applied)s 7216(to)s
+7466(e)s 6(v)k 3(ery)k 8053(object)s 8708(that)s
+0 3526(shares)m 638(its)s 904(column)s 1669(mark)s 2211(with)s
+2683(at)s 2905(least)s 3392(one)s 3784(other)s 4325(object.)s
+5063(A)s 5283(similar)s 5995(transformation)s 7448(in)s 9(v)k 4(olving)k
+8396(a)s 240 fnt83 8552 3528(R)m 9(O)k 12(W)k
+240 fnt82 0 3238(operator)m 856(deals)s 1398(with)s 1880(shared)s
+2562(ro)s 6(w)k 2982(marks.)s 3730(The)s 4158(ef)s 6(fect)k
+4754(on)s 5051(our)s 5430(little)s 5922(table)s 6442(is)s
+6652(to)s 6891(replace)s gsave
+480 1544 translate
+240 fnt83 3044 1354 56 1298 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1240 846 56 790 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78
+156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 789 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 902 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1240 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 1353 1016 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 136 106(\244)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1691 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1240 846 56 790 240 288 12 1804 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 451 508 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 789 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 902 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1240 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3044 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 1093(by)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 11 12
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4297 13844(-)m 4425(11)s 4700(-)s gsave
+480 11049 translate
+240 fnt83 6248 2370 0 2314 240 288 12 LoutGraphic
+gsave
+grestore save gsave 70 dict begin lfigdict begin
+grestore
+3293 338 56 282 240 288 12 2955 2032 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 136 106(\244)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+3096 1862 0 1806 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1717 338 56 282 240 288 12 1379 1524 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78 156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+1520 1354 0 1298 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1067 338 56 282 240 288 12 453 1016 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+614 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(SPLIT)m
+grestore
+(T) lfigpromotelabels
+grestore
+732 846 0 790 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+608 338 56 282 240 288 12 124 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+484 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83
+56 107(COL)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+732 846 0 790 240 288 12 788 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+628 338 56 282 240 288 12 104 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+524 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(R)m 7(O)k 9(W)k
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1520 1354 0 1298 240 288 12 1576 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1067 338 56 282 240 288 12 453 1016 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+614 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(SPLIT)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+732 846 0 790 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+608 338 56 282 240 288 12 124 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+484 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(COL)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+732 846 0 790 240 288 12 788 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+628 338 56 282 240 288 12 104 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+524 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(R)m 7(O)k 9(W)k
+
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3096 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3096 1806 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+3096 1862 0 1806 240 288 12 3152 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1717 338 56 282 240 288 12 1379 1524 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt78
+156 121(|)m
+grestore
+(T) lfigpromotelabels
+grestore
+1520 1354 0 1298 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1067 338 56 282 240 288 12 453 1016 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+614 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(SPLIT)m
+grestore
+(T) lfigpromotelabels
+grestore
+732 846 0 790 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+608 338 56 282 240 288 12 124 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+484 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(COL)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+732 846 0 790 240 288 12 788 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+628 338 56 282 240 288 12 104 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+524 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83
+56 107(R)m 7(O)k 9(W)k
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1520 1354 0 1298 240 288 12 1576 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+1067 338 56 282 240 288 12 453 1016 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+614 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(SPLIT)m
+grestore
+(T) lfigpromotelabels
+grestore
+732 846 0 790 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+608 338 56 282 240 288 12 124 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+484 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83
+56 107(COL)m
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 105(b)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+732 846 0 790 240 288 12 788 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+628 338 56 282 240 288 12 104 508 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+524 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+192 fnt83 56 107(R)m 7(O)k 9(W)k
+grestore
+(T) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+128 128(c)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 338 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+338 338 56 282 240 288 12 394 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 70 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 732 282 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 1520 790 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 3096 1298 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 6248 1806 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 10598(In)m 244(f)s 2(act,)k
+693(common)s 1576(sube)s 3(xpressions)k 3060(are)s 3395(identi\207ed)s
+4343(\(tri)s 6(vially\))k 5286(and)s 5678(the)s 6013(result)s
+6591(is)s 6788(a)s 6942(directed)s 7756(ac)s 3(yclic)k
+8469(graph;)s 0 10310(each)m 486(af)s 6(fected)k 1296(leaf)s
+1716(has)s 2076(tw)s 2(o)k 2477(parents,)s 3264(one)s
+3657(for)s 3985(width)s 4578(and)s 4972(one)s 5365(for)s
+5693(height;)s 6394(and)s 6788(each)s 240 fnt83 7274 10312(COL)m
+240 fnt82 7790 10310(or)m 240 fnt83 8040 10312(R)m 9(O)k 12(W)k
+240 fnt82 8604 10310(node)m 0 10022(has)m 360(one)s 752(parent)s
+1398(and)s 1792(one)s 2184(child)s 2709(for)s 3037(each)s
+3521(object)s 4155(lying)s 4690(on)s 4976(the)s 5314(corresponding)s
+6726(mark.)s 7370(The)s 7788(data)s 8235(structure)s 0 9734(roughly)m
+799(doubles)s 1595(in)s 1838(size,)s 2316(and)s 2720(this)s
+3116(occurs)s 3791(only)s 4271(rarely)s 4881(in)s 5124(practice.)s
+480 9360(This)m 956(method)s 1732(can)s 2121(cope)s 2629(with)s
+3111(an)s 3(y)k 3508(le)s 3(g)k 1(al)k
+4023(input,)s 4622(including)s 220 fnt35 480 8859({ a // c | d } | { b / e })m 480 8571(/ { f / i } | { g | h // j })m
+240 fnt82 0 8072(which)m 642(produces)s 1557(o)s 3(v)k 3(erlapping)k
+2747(spanning)s 3665(columns:)s gsave
+480 5924 translate
+240 fnt83 1699 1808 0 1695 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1133 452 113 339 240 288 60 0 1356 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 511 178(a)m
+grestore
+566 452 113 339 240 288 60 1133 1356 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83
+228 150(b)m
+grestore
+566 452 113 339 240 288 60 0 904 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 234 178(c)m
+grestore
+566 452 113 339 240 288 60 566 904 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 222 150(d)m
+
+grestore
+566 452 113 339 240 288 60 1132 904 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 235 178(e)m
+grestore
+566 452 113 339 240 288 60 0 452 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 235 173(f)m
+grestore
+566 452 113 339 240 288 60 566 452 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83
+228 200(g)m
+grestore
+566 452 113 339 240 288 60 1132 452 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 228 149(h)m
+grestore
+566 452 113 339 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 253 153(i)m
+
+grestore
+1133 452 113 339 240 288 60 566 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+230 fnt83 535 176(j)m
+grestore
+end end restore
+grestore
+0 5473(The)m 428(box)s 3(es)k
+1035(ha)s 4(v)k 3(e)k 1536(been)s 2045(added)s
+2675(to)s 2914(clarify)s 3590(the)s 3938(structure.)s 4937(The)s
+5365(width)s 5967(of)s 6238(this)s 6634(object)s 7278(is)s
+7488(formally)s 240 fnt78 480 4915(\()m 564(\()s 240 fnt83
+648 4923(width)m 240 fnt78 1187 4915(\()m 240 fnt83 1271 4923(a)m
+240 fnt78 1398 4915(\))m 1548(\255)s 1769(\()s 240 fnt83
+1853 4923(x)m 240 fnt78 2031 4915(+)m 240 fnt83 2232 4923(y)m
+240 fnt78 2346 4915(\))m 2424(\))s 2562(+)s 240 fnt83
+2763 4923(z)m 240 fnt78 2866 4915(\))m 3016(\255)s 3237(\()s
+240 fnt83 3321 4923(x)m 240 fnt78 3499 4915(+)m 3700(\()s
+3784(\()s 240 fnt83 3868 4923(y)m 240 fnt78 4042 4915(+)m
+240 fnt83 4243 4923(z)m 240 fnt78 4346 4915(\))m 4496(\255)s
+240 fnt83 4717 4923(width)m 240 fnt78 5256 4915(\()m 240 fnt83
+5340 4923(j)m 240 fnt78 5418 4915(\))m 5496(\))s 5574(\))s
+240 fnt82 0 4419(where)m 240 fnt83 480 3918(x)m 240 fnt78
+670 3910(=)m 240 fnt83 883 3918(width)m 240 fnt78 1422 3910(\()m
+240 fnt83 1506 3918(c)m 240 fnt78 1620 3910(\))m 1770(\255)s
+240 fnt83 1991 3918(width)m 240 fnt78 2530 3910(\()m 240 fnt83
+2662 3918(f)m 240 fnt78 2823 3910(\))m 2973(\255)s 240 fnt83
+3194 3918(width)m 240 fnt78 3733 3910(\()m 240 fnt83 3817 3918(i)m
+240 fnt78 3892 3910(\))m 240 fnt83 480 3367(y)m 240 fnt78
+666 3359(=)m 240 fnt83 879 3367(width)m 240 fnt78 1418 3359(\()m
+240 fnt83 1502 3367(d)m 240 fnt78 1688 3359(\))m 1838(\255)s
+240 fnt83 2059 3367(width)m 240 fnt78 2598 3359(\()m 240 fnt83
+2682 3367(g)m 240 fnt78 2808 3359(\))m 240 fnt83 480 2816(z)m
+240 fnt78 655 2808(=)m 240 fnt83 868 2816(width)m 240 fnt78
+1407 2808(\()m 240 fnt83 1491 2816(b)m 240 fnt78 1617 2808(\))m
+1767(\255)s 240 fnt83 1988 2816(width)m 240 fnt78 2527 2808(\()m
+240 fnt83 2611 2816(e)m 240 fnt78 2722 2808(\))m 2872(\255)s
+240 fnt83 3093 2816(width)m 240 fnt78 3632 2808(\()m 240 fnt83
+3716 2816(h)m 240 fnt78 3843 2808(\))m 240 fnt82 0 2312(It)m
+224(seems)s 878(clear)s 1420(that)s 240 fnt83 1857 2314(y)m
+240 fnt82 2038 2312(at)m 2289(least)s 2805(must)s 3349(appear)s
+4065(twice)s 4657(in)s 4919(an)s 3(y)k 5335(e)s 3(xpression)k
+6431(for)s 6788(the)s 7155(width)s 7776(of)s 8066(this)s
+8482(object)s 0 2024(made)m 602(out)s 997(of)s 1297(simple)s
+2019(addition)s 2889(and)s 3322(maxing)s 4121(operations,)s 5253(sho)s 6(wing)k
+6141(that)s 6588(an)s 6900(ordinary)s 7793(tree)s 8235(structure)s
+0 1736(is)m 227(insuf\207cient)s 1379(for)s 1734(o)s 3(v)k 3(erlapping)k
+2941(spanning)s 3876(columns.)s 4868(The)s 5313(Basser)s 6027(Lout)s
+6556(interpreter)s 7626(actually)s 8453(rejects)s 0 1448(such)m 521(structures,)s
+1581(o)s 6(wing)k 2252(to)s 2517(the)s 2890(author')s 13(s)k
+3736(doubts)s 4451(about)s 5069(the)s 5442(implementability)s 7153(of)s
+240 fnt83 7449 1450(Constr)m 3(ained)k 240 fnt82 8722 1448(and)m
+240 fnt83 0 1162(AdjustSize)m 240 fnt82 1049 1160(\(Section)m 1902(5.3\))s
+2330(on)s 2627(them;)s 3217(b)s 4(ut)k 3579(with)s
+4061(hindsight)s 5012(this)s 5408(caution)s 6169(w)s 2(as)k
+6590(unnecessary)s 15(.)k 480 786(The)m 915(directed)s 1749(ac)s 3(yclic)k
+2482(graph)s 3091(is)s 3308(ordered)s 4104(in)s 4354(the)s
+4709(sense)s 5290(that)s 5715(the)s 6071(order)s 6642(of)s
+6920(the)s 7275(edges)s 7878(entering)s 8722(and)s 0 498(lea)m 4(ving)k
+746(each)s 1234(node)s 1748(matters.)s 2607(The)s 3028(structure)s
+3911(is)s 4114(highly)s 4773(dynamic,)s 5696(and)s 6093(tra)s 4(v)k 3(ersals)k
+7044(both)s 7519(with)s 7994(and)s 8390(ag)s 1(ainst)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 12 13
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(12)s 4710(-)s 0 13256(the)m 349(arro)s 6(ws)k
+1045(are)s 1394(required.)s 2355(After)s 2920(a)s 3087(fe)s 6(w)k
+3494(ad-)s 3788(hoc)s 4189(attempts)s 5050(to)s 5291(e)s 3(xtend)k
+5985(the)s 6334(usual)s 6896(tree)s 7310(representation)s 8722(had)s
+0 12968(f)m 2(ailed,)k 665(the)s 1030(author)s 1718(de)s 6(v)k 3(eloped)k
+2769(a)s 2952(representation)s 4379(based)s 5000(on)s 5314(doubly)s
+6051(link)s 2(ed)k 6723(lists)s 7175(of)s 7463(records)s
+8235(denoting)s 0 12680(links,)m 578(whose)s 1253(\210e)s 3(xibility)k
+2240(more)s 2794(than)s 3270(compensated)s 4584(for)s 4929(the)s
+5284(some)s 6(what)k 6315(e)s 3(xcessi)k 6(v)k 3(e)k
+7282(memory)s 8140(consump)s 8998(-)s 0 12392(tion.)m 536(F)s 3(or)k
+925(e)s 3(xample,)k gsave
+480 10526 translate
+240 fnt83 3282 1526 0 1470 240 288 12 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+338 338 56 282 240 288 12 0 1188 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 123 128(a)m
+grestore
+(A) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 2944 1188 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83
+123 105(b)m
+grestore
+(B) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 128 128(c)m
+grestore
+(C) lfigpromotelabels
+grestore
+338 338 56 282 240 288 12 1472 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+338 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+192 fnt83 118 105(d)m
+
+grestore
+(D) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR C@CTR lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+C@CTR C@CTR A@CTR lfigangle C@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR D@CTR lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+D@CTR D@CTR A@CTR lfigangle D@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ B@CTR B@CTR D@CTR lfigangle B@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+D@CTR D@CTR B@CTR lfigangle D@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+0 10075(is)m 210(represented)s 1369(by)s gsave
+1135 5559 translate
+240 fnt83 6796 4176 0 4120 240 288 12 LoutGraphic
+gsave
+grestore save gsave 300 dict begin lfigdict begin
+grestore
+452 1014 0 958 240 288 12 0 3162 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 180 128(a)m
+
+grestore
+(BASE) lfigpromotelabels
+grestore
+(A) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 6344 3162 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 180 105(b)m
+grestore
+(BASE) lfigpromotelabels
+grestore
+(B) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 0 1581 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 104 107(LK)m
+grestore
+(BASE) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 1586 1581 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83
+104 107(LK)m
+grestore
+(BASE) lfigpromotelabels
+grestore
+(M) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 4758 1581 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 104 107(LK)m
+grestore
+(BASE) lfigpromotelabels
+grestore
+(N) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 185 128(c)m
+
+grestore
+(BASE) lfigpromotelabels
+grestore
+(C) lfigpromotelabels
+grestore
+452 1014 0 958 240 288 12 3172 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 676 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+206 150 translate
+192 fnt83 39 39 0 39 192 288 48 LoutGraphic
+gsave
+/lfigblack [ lfigcircle ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigcircle ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+(TOP) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 338 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(MID) lfigpromotelabels
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+currentdict end 300 dict begin begin
+grestore
+452 338 56 282 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+192 fnt83 175 105(d)m
+grestore
+(BASE) lfigpromotelabels
+grestore
+(D) lfigpromotelabels
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ 0.5 cm 0 A@MID@CTR L@MID@CTR A@MID@CTR M@MID@CTR lfigpmin lfigpmin lfigpmin lfigpsub /BL lfigpointdef
+A@MID@CTR L@MID@CTR A@MID@CTR M@MID@CTR lfigpmax lfigpmax lfigpmax 0.5 cm 0 lfigpadd /TR lfigpointdef
+BL 0 BL TR lfigydistance lfigpadd /TL lfigpointdef
+BL BL TR lfigxdistance 0 lfigpadd /BR lfigpointdef
+BL
+BR [ BR 0 0.5 cm lfigpadd ]
+BR 0.5 cm 0.5 cm lfigpadd
+TR 0.5 cm -0.5 cm lfigpadd [ 0 0.5 cm TR lfigpsub ]
+TR
+TL [ 0 0.5 cm TL lfigpsub ]
+0.5 cm 0.5 cm TL lfigpsub
+BL -0.5 cm 0.5 cm lfigpadd [ BL 0 0.5 cm lfigpadd ]
+BL ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ 0.5 cm 0 L@TOP@CTR C@TOP@CTR L@TOP@CTR C@TOP@CTR lfigpmin lfigpmin lfigpmin lfigpsub /BL lfigpointdef
+L@TOP@CTR C@TOP@CTR L@TOP@CTR C@TOP@CTR lfigpmax lfigpmax lfigpmax 0.5 cm 0 lfigpadd /TR lfigpointdef
+BL 0 BL TR lfigydistance lfigpadd /TL lfigpointdef
+BL BL TR lfigxdistance 0 lfigpadd /BR lfigpointdef
+BL
+BR [ BR 0 0.5 cm lfigpadd ]
+BR 0.5 cm 0.5 cm lfigpadd
+TR 0.5 cm -0.5 cm lfigpadd [ 0 0.5 cm TR lfigpsub ]
+TR
+TL [ 0 0.5 cm TL lfigpsub ]
+0.5 cm 0.5 cm TL lfigpsub
+BL -0.5 cm 0.5 cm lfigpadd [ BL 0 0.5 cm lfigpadd ]
+BL ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ 0.5 cm 0 M@TOP@CTR D@TOP@CTR N@TOP@CTR D@TOP@CTR lfigpmin lfigpmin lfigpmin lfigpsub /BL lfigpointdef
+M@TOP@CTR D@TOP@CTR N@TOP@CTR D@TOP@CTR lfigpmax lfigpmax lfigpmax 0.5 cm 0 lfigpadd /TR lfigpointdef
+BL 0 BL TR lfigydistance lfigpadd /TL lfigpointdef
+BL BL TR lfigxdistance 0 lfigpadd /BR lfigpointdef
+BL
+BR [ BR 0 0.5 cm lfigpadd ]
+BR 0.5 cm 0.5 cm lfigpadd
+TR 0.5 cm -0.5 cm lfigpadd [ 0 0.5 cm TR lfigpsub ]
+TR
+TL [ 0 0.5 cm TL lfigpsub ]
+0.5 cm 0.5 cm TL lfigpsub
+BL -0.5 cm 0.5 cm lfigpadd [ BL 0 0.5 cm lfigpadd ]
+BL ] lfigdopath
+pop pop
+grestore
+
+grestore
+0 0 0 0 240 288 12 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ 0.5 cm 0 B@MID@CTR N@MID@CTR B@MID@CTR N@MID@CTR lfigpmin lfigpmin lfigpmin lfigpsub /BL lfigpointdef
+B@MID@CTR N@MID@CTR B@MID@CTR N@MID@CTR lfigpmax lfigpmax lfigpmax 0.5 cm 0 lfigpadd /TR lfigpointdef
+BL 0 BL TR lfigydistance lfigpadd /TL lfigpointdef
+BL BL TR lfigxdistance 0 lfigpadd /BR lfigpointdef
+BL
+BR [ BR 0 0.5 cm lfigpadd ]
+BR 0.5 cm 0.5 cm lfigpadd
+TR 0.5 cm -0.5 cm lfigpadd [ 0 0.5 cm TR lfigpsub ]
+TR
+TL [ 0 0.5 cm TL lfigpsub ]
+0.5 cm 0.5 cm TL lfigpsub
+BL -0.5 cm 0.5 cm lfigpadd [ BL 0 0.5 cm lfigpadd ]
+BL ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 5108(where)m 240 fnt83 645 5110(LK)m
+240 fnt82 1017 5108(tags)m 1458(a)s 1630(record)s 2304(representing)s
+3543(a)s 3715(link.)s 4257(The)s 4690(\207rst)s 5127(list)s
+5484(in)s 5732(an)s 3(y)k 6135(node)s 6663(contains)s
+7516(all)s 7815(the)s 8169(incoming)s 0 4820(links,)m 577(the)s
+931(second)s 1660(contains)s 2514(the)s 2867(outgoing)s 3778(ones.)s
+4387(The)s 4821(node)s 5348(serv)s 3(es)k 5999(as)s
+6255(the)s 6609(header)s 7311(for)s 7655(both)s 8144(lists.)s
+8698(The)s 0 4532(required)m 890(operations)s 1974(reduce)s 2704(to)s
+2979(simple)s 3709(appends,)s 4638(deletes,)s 5444(and)s 5885(tra)s 4(v)k 3(ersals)k
+6880(of)s 7187(doubly)s 7944(link)s 2(ed)k 8635(lists,)s
+0 4244(all)m 325(ha)s 4(ving)k 1058(small)s 1663(constant)s
+2552(cost.)s 3133(There)s 3779(is)s 4021(a)s 4219(highly)s
+4918(tuned)s 5540(memory)s 6423(allocator)s 9(,)k 7389(and)s
+7825(care)s 8310(is)s 8553(tak)s 2(en)k 0 3956(to)m
+269(dispose)s 1073(of)s 1374(each)s 1900(node)s 2452(when)s
+3058(the)s 3436(last)s 3858(incoming)s 4845(link)s 5308(is)s
+5549(deleted,)s 6376(so)s 6672(that)s 7120(there)s 7684(is)s
+7924(no)s 8247(need)s 8788(for)s 0 3668(g)m 1(arbage)k
+812(collection.)s 480 3294(In)m 739(normal)s 1475(use)s 1854(the)s
+2205(number)s 3000(of)s 3275(nodes)s 3888(at)s 4124(higher)s
+4799(le)s 6(v)k 3(els)k 5402(of)s 5676(the)s
+6028(dag)s 6431(is)s 6644(small)s 7220(in)s 7467(comparison)s
+8644(with)s 0 3006(the)m 351(lea)s 4(v)k 3(es)k
+995(and)s 1402(their)s 1903(incoming)s 2863(links,)s 3438(so)s
+3707(we)s 4046(may)s 4515(estimate)s 5369(the)s 5720(space)s
+6311(comple)s 3(xity)k 7441(at)s 7676(about)s 8271(60)s
+8570(bytes)s 0 2718(per)m 355(input)s 896(w)s 2(ord)k
+1433(\(20)s 1797(bytes)s 2342(per)s 2696(link,)s 3165(40)s
+3449(per)s 3803(leaf)s 4222(node\).)s 4920(Careful)s 5680(optimization)s
+6935(could)s 7514(easily)s 8114(halv)s 3(e)k 8674(this,)s
+0 2430(b)m 4(ut)k 362(since)s 909(memory)s 1760(is)s
+1970(reclaimed)s 2969(after)s 3465(printing)s 4275(each)s 4770(page)s
+5278(there)s 5811(is)s 6021(little)s 6513(need.)s 240 fnt84
+0 1781(2.5.)m 471(Context-sensiti)s 2(v)k 2(e)k 2274(attrib)s 4(utes)k
+3318(of)s 3590(objects)s 240 fnt82 480 1305(Although)m 1466(we)s
+1826(are)s 2198(free)s 2649(to)s 2913(place)s 3498(an)s 3(y)k
+3920(object)s 4588(in)s 4856(an)s 3(y)k 5278(conte)s 3(xt,)k
+6111(the)s 6484(conte)s 3(xt)k 7270(must)s 7820(in\210uence)s
+8778(the)s 0 1017(appearance)m 1131(of)s 1402(the)s 1750(object,)s
+2441(since)s 2988(otherwise)s 220 fnt35 480 518(A shor)m -8(t par)k 2(ag)k 2(r)k 2(aph of te)k 6(xt.)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 13 14
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4293 13844(-)m 4421(13)s 4705(-)s 0 13253(could)m 588(not)s
+952(appear)s 1647(in)s 1887(a)s 2051(v)s 6(ariety)k
+2760(of)s 3028(fonts,)s 3611(column)s 4384(widths,)s 5126(etc.)s
+5566(This)s 6040(in\210uence)s 6970(cannot)s 7666(tak)s 2(e)k
+8116(the)s 8461(purely)s 0 12965(static)m 569(form)s 1106(that)s
+1538(block-structured)s 3175(languages)s 4196(use)s 4585(to)s 4837(associate)s
+5769(v)s 6(alues)k 6438(with)s 6933(identi\207ers,)s 8009(for)s
+8360(then)s 8843(an)s 0 12677(operator)m 850(could)s 1434(not)s
+1794(in\210uence)s 2721(the)s 3063(appearance)s 4188(of)s 4453(its)s
+4723(parameters;)s 5876(and)s 6274(a)s 6434(state)s 6921(v)s 6(ariable)k
+7734(solution)s 8556(is)s 8760(not)s 0 12389(compatible)m 1118(with)s
+1600(the)s 1948(o)s 3(v)k 3(erall)k 2660(functional)s
+3684(design.)s 480 12015(The)m 914(information)s 2105(needed)s 2848(from)s
+3378(the)s 3733(conte)s 3(xt)k 4500(seems)s 5141(quite)s
+5682(limited,)s 6471(comprising)s 7607(the)s 7961(font)s 8413(f)s 2(amily)k 15(,)k
+0 11727(f)m 2(ace,)k 525(and)s 952(size)s 1402(to)s
+1664(use,)s 2114(the)s 2485(style)s 3015(of)s 3309(paragraph)s
+4345(breaking)s 5259(required,)s 6185(ho)s 6(w)k 6669(much)s
+7281(space)s 7891(to)s 8154(substitute)s 0 11439(between)m 873(the)s
+1240(w)s 2(ords)k 1893(of)s 2184(paragraphs,)s 3359(and)s
+3782(ho)s 6(w)k 4263(much)s 4871(horizontal)s 5914(and)s
+6337(v)s 3(ertical)k 7124(space)s 7730(is)s 7959(a)s 4(v)k 6(ailable)k
+8887(to)s 0 11151(recei)m 6(v)k 3(e)k 763(the)s
+1139(object.)s 1914(These)s 2569(four)s 3054(items)s 3650(constitute)s
+4662(the)s 5038(so-called)s 5985(`style)s 6599(information')s 7866(of)s
+8165(Lout.)s 8809(As)s 0 10863(graphics)m 902(rendering)s 1912(hardw)s 2(are)k
+2896(impro)s 3(v)k 3(es,)k 3928(the)s 4317(style)s
+4865(information)s 6091(will)s 6558(probably)s 7504(gro)s 6(w)k
+8085(to)s 8366(include)s 0 10575(colour)m 671(and)s 1075(te)s 3(xture)k
+1791(information.)s 480 10201(The)m 908(w)s 2(ay)k 1359(to)s
+1598(deal)s 2051(with)s 2533(fonts)s 3062(at)s 3294(least)s
+3791(is)s 4001(v)s 3(ery)k 4477(clear:)s 220 fnt35
+480 9700({ )m 11(Times Slope 12p } @F)k 6(ont { Hello)k 8(, w)k 2(or)k -3(ld })k
+240 fnt82 0 9204(should)m 697(ha)s 4(v)k 3(e)k
+1198(result)s 240 fnt83 480 8750(Hello,)m 1104(world)s 240 fnt82
+0 8268(Lout)m 528(also)s 983(pro)s 3(vides)k 220 fnt35
+1872 8265(@Break)m 240 fnt82 2745 8268(and)m 220 fnt35 3166 8265(@Space)m
+240 fnt82 4080 8268(symbols)m 4946(for)s 5301(controlling)s 6420(the)s
+6785(paragraph)s 7815(breaking)s 8722(and)s 0 7980(space)m 610(styles)s
+1229(mentioned)s 2320(abo)s 3(v)k 3(e.)k 3074(These)s
+3724(w)s 2(ork)k 4299(in)s 4565(the)s 4937(same)s
+5507(w)s 2(ay)k 15(,)k 6020(returning)s 6972(their)s
+7493(right)s 8028(parameters)s 0 7692(in)m 261(the)s 627(style)s
+1152(of)s 1441(their)s 1956(left.)s 2455(The)s 2901(implementation)s
+4476(is)s 4704(v)s 3(ery)k 5198(simple:)s 6019(one)s
+6439(merely)s 7174(broadcasts)s 8252(the)s 8619(style)s 0 7404(information)m
+1183(do)s 6(wn)k 1765(into)s 2188(the)s 2533(parse)s
+3091(tree)s 3502(of)s 3771(the)s 4116(right)s 4625(parameter)s 13(.)k
+5728(A)s 5956(font,)s 6445(for)s 6781(e)s 3(xample,)k
+7693(is)s 7901(con)s 9(v)k 3(erted)k 8887(to)s
+0 7116(an)m 278(8-bit)s 783(internal)s 1562(name)s 2130(and)s
+2529(stored)s 3165(in)s 3403(each)s 3892(leaf,)s 4351(while)s
+4932(a)s 5093(breaking)s 5977(style)s 6479(is)s 6683(stored)s
+7320(in)s 7557(the)s 7900(root)s 8339(node)s 8855(of)s
+0 6828(each)m 495(paragraph.)s 480 6454(The)m 954(same)s 1547(language)s
+2514(design)s 3242(can)s 3677(be)s 4006(used)s 4549(for)s
+4933(a)s 4(v)k 6(ailable)k 5888(width)s 6536(and)s
+6986(height,)s 7738(only)s 8264(here)s 8778(the)s 0 6166(implementation)m
+1557(is)s 1767(much)s 2356(more)s 2903(demanding:)s 220 fnt35
+480 5665(2i @Wide {)m 480 5377(\(1\) |0.1i An e)m 6(xample)k 480 5089(containing a small)m 480 4801(par)m 2(ag)k 2(r)k 2(aph of \207lled te)k 6(xt.)k
+480 4513(})m 240 fnt82 0 4019(is)m 210(guaranteed)s 1317(to)s
+1556(be)s 1838(tw)s 2(o)k 2248(inches)s 2910(wide:)s
+480 3516(\(1\))m 891(An)s 1270(e)s 3(xample)k 2162(containing)s
+3254(a)s 891 3228(small)m 1504(paragraph)s 2558(of)s 2871(\207lled)s
+891 2940(te)m 3(xt.)k 0 2487(One)m 448(must)s 966(calculate)s
+1863(that)s 2273(1.9)s 2617(inches)s 3272(minus)s 3900(the)s
+4241(width)s 4836(of)s 220 fnt35 5100 2484(\(1\))m 240 fnt82
+5406 2487(is)m 5609(a)s 4(v)k 6(ailable)k 6510(to)s
+6741(the)s 7082(paragraph,)s 8138(and)s 8534(break)s 0 2199(it)m
+186(accordingly;)s 1421(Basser)s 2111(Lout)s 2617(does)s 3100(this)s
+3490(in)s 3727(tw)s 2(o)k 4130(stages.)s 4872(In)s
+5121(the)s 5463(\207rst,)s 5935(upw)s 2(ard-mo)k 3(ving)k
+7505(stage,)s 8097(widths)s 8779(are)s 0 1911(calculated)m 1018(using)s
+1581(the)s 1920(formulae)s 2829(of)s 3091(Section)s 3856(2.3,)s
+4254(which)s 4887(assume)s 5638(that)s 6047(a)s 4(v)k 6(ailable)k
+6946(space)s 7524(is)s 7725(in\207nite.)s 8557(If)s 8778(the)s
+0 1623(upw)m 2(ard)k 763(mo)s 3(v)k 3(ement)k
+1815(reaches)s 2570(a)s 240 fnt83 2724 1625(WIDE)m 240 fnt82
+3375 1623(node,)m 3936(corresponding)s 5346(to)s 5573(a)s 220 fnt35
+5728 1620(@Wide)m 240 fnt82 6490 1623(operator)m 9(,)k 7372(and)s
+7764(the)s 8100(calculated)s 0 1335(width)m 627(e)s 3(xceeds)k
+1457(that)s 1900(allo)s 6(wed,)k 2784(a)s 2975(second,)s
+3772(do)s 6(wnw)k 2(ard-mo)k 3(ving)k 5661(stage)s
+6234(is)s 6469(initiated)s 7334(which)s 8001(attempts)s 8887(to)s
+0 1047(reduce)m 681(the)s 1017(width)s 1606(by)s 1888(\207nding)s
+2607(and)s 2999(breaking)s 3877(paragraphs.)s 5077(This)s 5541(second)s
+6251(stage)s 6786(is)s 6984(quite)s 7505(routine)s 8226(e)s 3(xcept)k
+8894(at)s 220 fnt35 0 756(|)m 240 fnt82 84 759(nodes,)m
+736(whose)s 1390(children)s 2216(are)s 2549(the)s 2883(columns)s
+3731(of)s 3988(a)s 4141(table.)s 4755(It)s 4946(is)s
+5142(necessary)s 6111(to)s 6336(apportion)s 7296(the)s 7630(a)s 4(v)k 6(ailable)k
+8524(width)s 0 471(\(minus)m 727(inter)s 4(-column)k 2026(g)s 1(aps\))k
+2604(among)s 3321(the)s 3681(columns.)s 4668(Basser)s 5377(Lout)s
+5901(lea)s 4(v)k 3(es)k 6554(narro)s 6(w)k
+7291(columns)s 8166(unbrok)s 2(en)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 14 15
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Bold
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(14)s 4710(-)s 0 13256(and)m 404(breaks)s
+1079(the)s 1427(remaining)s 2449(columns)s 3311(to)s 3550(equal)s
+4123(width,)s 4775(using)s 5347(up)s 5640(all)s 5933(of)s
+6204(the)s 6552(a)s 4(v)k 6(ailable)k 7460(space.)s
+480 12882(The)m 897(size)s 1313(of)s 1572(an)s 1844(object)s
+2476(is)s 2675(not)s 3029(clearly)s 3721(determined)s 4843(when)s
+5407(the)s 5744(upw)s 2(ard-mo)k 3(ving)k 7309(size)s
+7725(is)s 7923(less)s 8321(than)s 8778(the)s 0 12594(do)m 6(wnw)k 2(ard-mo)k 3(ving)k
+1871(a)s 4(v)k 6(ailable)k 2786(space,)s 3431(and)s
+3842(the)s 4197(object)s 4849(contains)s 5704(constructs)s 6731(that)s
+7156(depend)s 7913(on)s 8218(a)s 4(v)k 6(ailable)k
+0 12306(space)m 587(\(e.g.)s 1056(right)s 1567(justi\207cation\).)s 2938(F)s 3(or)k
+3327(e)s 3(xample,)k 4241(in)s 220 fnt35 480 11805(2i @Wide { Heading // a |1r)m -8(t b })k
+240 fnt82 0 11306(it)m 211(seems)s 865(natural)s 1603(to)s
+1861(assign)s 2536(a)s 2721(width)s 3342(of)s 3633(tw)s 2(o)k
+4062(inches)s 4744(to)s 5002(the)s 5369(subobject)s 220 fnt35
+6366 11303(a |1r)m -8(t b)k 240 fnt82 7124 11306(because)m 7957(of)s
+8247(the)s 8615(right)s 0 11018(justi\207cation,)m 1270(b)s 4(ut)k
+1667(it)s 1895(w)s 2(ould)k 2585(be)s 2903(equally)s
+3696(plausible)s 4650(if)s 4903(the)s 5286(width)s 5924(of)s
+220 fnt35 6230 11015(Heading)m 240 fnt82 7129 11018(w)m 2(as)k
+7586(assigned)s 8503(to)s 8778(the)s 0 10730(subobject)m 989(instead.)s
+1843(The)s 2284(author)s 2968(is)s 3191(conscious)s 4199(of)s
+4483(ha)s 4(ving)k 5197(f)s 2(ailed)k 5809(to)s
+6061(resolv)s 3(e)k 6817(this)s 7226(matter)s 7908(properly;)s
+8843(an)s 0 10442(e)m 3(xtra)k 534(operator)s 1390(for)s
+1728(controlling)s 2830(a)s 4(v)k 6(ailable)k 3738(space)s
+4325(is)s 4535(probably)s 5440(necessary)s 15(.)k 480 10068(The)m
+930(actual)s 1578(paragraph)s 2614(breaking)s 3527(is)s 3759(just)s
+4187(a)s 4376(simple)s 5092(transformation)s 6578(on)s 6897(the)s
+7268(parse)s 7851(tree;)s 8343(the)s 8714(real)s 0 9780(issue)m
+544(is)s 764(ho)s 6(w)k 1235(to)s 1484(describe)s
+2346(the)s 2704(v)s 6(arious)k 3463(styles:)s 4183(ragged)s
+4902(right,)s 5470(adjusted,)s 6384(outdented,)s 7445(and)s 7859(so)s
+8135(on.)s 8549(Their)s 0 9492(di)m 6(v)k 3(ersity)k
+874(suggests)s 1729(that)s 2140(the)s 3(y)k 2596(should)s
+3286(someho)s 6(w)k 4245(be)s 4519(de\207ned)s 5275(using)s
+5840(more)s 6380(basic)s 6917(features;)s 7777(b)s 4(ut)k
+8132(then)s 8593(there)s 0 9204(are)m 367(algorithms)s 1461(for)s
+1820(high-quality)s 3064(paragraph)s 4098(breaking,)s 5063(which)s 5726(presumably)s
+6917(must)s 7463(be)s 7766(b)s 4(uilt-in.)k 8650(This)s
+0 8916(dilemma)m 915(w)s 2(as)k 1355(not)s 1741(clearly)s
+2463(grasped)s 3285(by)s 3598(the)s 3966(author)s 4656(in)s
+4919(1985,)s 5525(and)s 5949(he)s 6250(included)s 7152(a)s
+7337(b)s 4(uilt-in)k 8113(paragraph)s 0 8628(break)m 2(er)k 9(,)k
+818(with)s 1306(the)s 220 fnt35 1660 8625(@Break)m 240 fnt82
+2522 8628(operator)m 3384(selecting)s 4292(from)s 4822(a)s 4995(\207x)s 3(ed)k
+5535(set)s 5866(of)s 6143(styles.)s 6857(A)s 7093(much)s
+7688(better)s 8298(solution)s 0 8340(based)m 603(on)s 900(g)s 1(alle)k 3(ys)k
+1624(will)s 2050(be)s 2332(gi)s 6(v)k 3(en)k
+2912(in)s 3155(Section)s 3929(5.5,)s 4336(b)s 4(ut,)k
+4745(re)s 3(grettably)k 15(,)k 5868(it)s 6060(is)s
+6270(not)s 6636(implemented.)s 240 fnt84 0 7547(3.)m 291(De\207nitions)s
+240 fnt82 480 7116(The)m 936(need)s 1474(to)s 1741(pro)s 3(vide)k
+2554(a)s 2748(means)s 3438(of)s 3737(packaging)s 4803(useful)s
+5470(pieces)s 6146(of)s 6445(code)s 6982(for)s 7348(easy)s
+7855(repeated)s 8751(use)s 0 6828(w)m 2(as)k 440(recognised)s
+1554(in)s 1816(the)s 2184(v)s 3(ery)k 2679(earliest)s
+3447(programming)s 4822(languages.)s 5962(This)s 6458(need)s 6987(is)s
+7217(e)s 6(v)k 3(en)k 7736(more)s 8303(acute)s
+8883(in)s 0 6540(document)m 1004(formatting,)s 2118(if)s 2335(that)s
+2752(is)s 2962(possible,)s 3852(because)s 4664(the)s 5012(majority)s
+5874(of)s 6145(users)s 6686(are)s 7033(not)s 7398(programmers)s
+8722(and)s 0 6252(do)m 293(not)s 659(understand)s 1767(the)s
+2115(code)s 2623(the)s 3(y)k 3086(in)s 9(v)k 4(ok)k 2(e.)k
+240 fnt84 0 5603(3.1.)m 471(Operators)s 240 fnt82 480 5126(It)m
+680(is)s 885(e)s 6(vident)k 1637(from)s 2156(the)s
+2498(e)s 3(xample)k 3356(of)s 3621(Eqn)s 4059(that)s
+4471(user)s 4(-de\207ned)k 5702(operators)s 6636(are)s 6978(needed)s
+7708(that)s 8121(mimic)s 8778(the)s 0 4838(primiti)m 6(v)k 3(e)k
+929(ones)s 1426(in)s 1677(taking)s 2335(objects)s 3071(as)s
+3328(parameters)s 4434(and)s 4845(returning)s 5781(objects)s 6517(as)s
+6774(results.)s 7569(F)s 3(or)k 7965(e)s 3(xample,)k
+8887(to)s 0 4550(de\207ne)m 641(a)s 807(superscript)s 1915(operator)s
+2771(so)s 3037(that)s 220 fnt35 480 4056(2 sup n)m 240 fnt82
+0 3531(appears)m 781(as)s 168 fnt82 1145 3647(n)m 240 fnt78
+1031 3525(2)m 240 fnt82 1227 3531(,)m 1334(the)s 1682(follo)s 6(wing)k
+2659(operator)s 3515(de\207nition)s 4489(may)s 4955(be)s 5237(used:)s
+220 fnt35 480 3032(def sup)m 480 2744( precedence 50)m 480 2456( associativity r)m -3(ight)k
+480 2168( left x)m 480 1880( r)m -3(ight y)k 480 1592({)m 480 1304( @OneRo)m 3(w { | {-2p @F)k 6(ont y} ^/0.5fk x })k
+480 1016(})m 240 fnt82 0 520(The)m 220 fnt35 481 517(sup)m
+240 fnt82 940 520(operator)m 1850(has)s 2273(precedence)s 3458(50,)s
+3858(is)s 4122(right)s 4686(associati)s 6(v)k 3(e,)k
+5886(tak)s 2(es)k 6479(tw)s 2(o)k 6943(objects)s
+7724(as)s 8028(parameters)s 0 232(passed)m 720(on)s 1041(the)s
+1413(left)s 1814(and)s 2242(right,)s 2825(and)s 3253(returns)s
+3991(the)s 4363(object)s 5031(between)s 5910(braces)s 6595(as)s
+6869(result.)s 7587(This)s 8087(object)s 8756(has)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 15 16
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4292 13841(-)m 4420(15)s 4706(-)s 0 13250(the)m 348(structure)s
+gsave
+608 12769 translate
+280 fnt83 128 191 0 123 280 288 70 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+128 191 0 123 280 288 70 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+128 191 0 123 280 288 70 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+260 fnt35 0 56(y)m
+grestore
+
+grestore
+end end restore
+grestore
+gsave
+480 12634 translate
+280 fnt83 128 135 0 67 280 288 70 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+128 135 0 67 280 288 70 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+128 135 0 67 280 288 70 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+260 fnt35 0 0(x)m
+grestore
+
+grestore
+end end restore
+grestore
+0 12183(b)m 4(ut)k
+381(with)s 882(the)s 1249(\207rst)s 1699(ro)s 6(w)k
+2138(mark)s 2709(hidden)s 3437(by)s 3751(the)s 220 fnt35
+4118 12180(@OneRo)m 3(w)k 240 fnt82 5268 12183(operator)m 9(,)k
+6181(and)s 220 fnt35 6604 12180(y)m 240 fnt82 6791 12183(tw)m 2(o)k
+7220(points)s 7875(smaller)s 8657(than)s 0 11895(it)m 220(w)s 2(ould)k
+904(otherwise)s 1917(ha)s 4(v)k 3(e)k 2447(been.)s
+3091(The)s 3548(length)s 220 fnt35 4231 11892(0.5f)m 240 fnt82
+4683 11895(speci\207es)m 5585(half)s 6057(the)s 6433(current)s 7198(font)s
+7671(size;)s 8243(Figure)s 8952(2)s 0 11607(describes)m 936(the)s
+220 fnt35 1280 11604(k)m 240 fnt82 1446 11607(g)m 1(ap)k
+1840(mode.)s 2532(In)s 2784(the)s 3128(Eq)s 3448(equation)s
+4325(formatting)s 5382(package)s 6218([10])s 6651(the)s 6995(equation)s
+7872(as)s 8118(a)s 8280(whole)s 8916(is)s 0 11319(set)m
+331(in)s 580(italic)s 1116(font,)s 1614(and)s 220 fnt35
+2024 11316(2)m 240 fnt82 2203 11319(is)m 2419(an)s 2709(identi\207er)s
+3637(whose)s 4311(body)s 4852(contains)s 5706(a)s 5879(font)s
+6330(change)s 7070(back)s 7590(to)s 7835(Roman.)s 8698(The)s
+0 11031(digits)m 220 fnt35 586 11028(0)m 240 fnt82 765 11031(to)m
+220 fnt35 1009 11028(9)m 240 fnt82 1186 11031(are)m 1538(classed)s
+2291(as)s 2546(punctuation)s 3737(characters,)s 4816(permitting)s 220 fnt35
+5869 11028(234)m 240 fnt82 6293 11031(for)m 6635(e)s 3(xample)k
+7503(to)s 7747(be)s 8034(interpreted)s 0 10743(as)m 250(a)s
+416(sequence)s 1349(of)s 1620(three)s 2153(identi\207ers.)s 480 10369(These)m
+1152(de\207nitions)s 2258(are)s 2650(easily)s 3307(implemented)s 4658(by)s
+4997(a)s 5208(standard)s 6122(symbol)s 6927(table)s 7492(and)s
+7941(an)s 8270(operator)s 0 10081(precedence)m 1155(parser)s 13(.)k
+1914(Algol)s 2539(block)s 3157(structure)s 4073(with)s 4580(the)s
+4953(usual)s 5538(scope)s 6164(rules)s 6704(w)s 2(as)k
+7150(adopted)s 7991(as)s 8266(a)s 8457(matter)s 0 9793(of)m
+271(course.)s 480 9419(Operators)m 1481(are)s 1837(limited)s 2580(to)s
+2828(at)s 3069(most)s 3603(tw)s 2(o)k 4022(parameters,)s
+5185(left)s 5571(and)s 5984(right,)s 6551(and)s 6964(the)s
+7321(parameters)s 8428(cannot)s 0 9131(be)m 282(gi)s 6(v)k 3(en)k
+862(def)s 2(ault)k 1583(v)s 6(alues.)k 240 fnt83
+2352 9133(Named)m 240 fnt82 3097 9131(parameters)m 4195(solv)s 3(e)k
+4753(both)s 5236(problems:)s 220 fnt35 480 8630(def @Pref)m 6(ace)k
+480 8342( named @T)m 26(ag {})k 480 8054( named @Title { Pref)m 6(ace })k 480 7766( r)m -3(ight @Body)k
+480 7478({)m 480 7190( Bold @F)m 6(ont @Title)k 480 6902( //0.3v @Body)m 480 6614(})m
+240 fnt82 0 6120(The)m 452(def)s 2(ault)k 1197(v)s 6(alue)k
+1789(appears)s 2594(just)s 3023(after)s 3543(the)s 3915(parameter')s 13(s)k
+5103(declaration,)s 6295(between)s 7173(braces.)s 7972(In)s 9(v)k 4(ocations)k
+0 5832(ha)m 4(v)k 3(e)k 501(a)s 667(natural)s
+1385(syntax:)s 220 fnt35 480 5331(@Pref)m 6(ace)k 480 5043( @Title { About this book })m
+480 4755({)m 480 4467( F)m 6(e)k 4(w obser)k -6(v)k 5(ers w)k 2(ould ha)k 4(v)k 5(e supposed in 1984, that ...)k
+480 4179(})m 240 fnt82 0 3685(with)m 481(the)s 827(actual)s
+1450(named)s 2145(parameters)s 3241(follo)s 6(wing)k 4216(directly)s
+4998(after)s 5492(the)s 5838(operator)s 9(,)k 6731(before)s
+7395(an)s 3(y)k 7790(right)s 8299(parame)s 8998(-)s
+0 3397(ter)m 13(.)k 400(In)s 653(this)s 1046(e)s 3(xample,)k
+220 fnt35 1958 3394(@T)m 26(ag)k 240 fnt82 2578 3397(will)m
+3001(recei)s 6(v)k 3(e)k 3735(its)s 4008(def)s 2(ault)k
+4726(v)s 6(alue,)k 5342(and)s 5744(a)s 5907(less)s
+6313(e)s 3(xpert)k 6965(user)s 7420(could)s 8007(safely)s
+8628(omit)s 0 3109(the)m 220 fnt35 348 3106(@Title)m 240 fnt82
+1036 3109(parameter)m 2050(as)s 2300(well.)s 480 2735(Lout)m 1007(permits)s
+1790(named)s 2502(parameters)s 3616(to)s 3870(ha)s 4(v)k 3(e)k
+4387(parameters,)s 5557(a)s 5739(feature)s 6472(with)s 6970(applications)s
+8192(to)s 8447(biblio)s 8998(-)s 0 2447(graphic)m 781(databases,)s
+1816(running)s 2626(headers,)s 3475(and)s 3891(other)s 4454(places)s
+5114(where)s 5766(a)s 5944(format)s 6652(has)s 7034(to)s
+7285(be)s 7579(supplied)s 8460(before)s 0 2159(content)m 760(is)s
+965(kno)s 6(wn.)k 1771(One)s 2221(could)s 2806(go)s
+3094(further)s 3798(and)s 4197(pro)s 3(vide)k 4976(a)s
+5137(complete)s 6064(lambda)s 6823(calculus,)s 7708(with)s 8185(functions)s
+0 1871(as)m 250(\207rst-)s 689(class)s 1204(objects,)s 1988(pro)s 3(vided)k
+2894(care)s 3347(w)s 2(as)k 3768(tak)s 2(en)k
+4341(not)s 4707(to)s 4946(intimidate)s 5970(the)s 6318(non-)s
+6746(e)s 3(xpert)k 7400(user)s 13(.)k 240 fnt84
+0 1222(3.2.)m 471(Recursion)s 1563(and)s 2004(page)s 2539(lay)s 6(out)k
+240 fnt82 480 745(Design)m 1302(and)s 1794(implementation)s 3439(should)s
+4223(proceed)s 5126(together)s 6057(in)s 6387(e)s 3(xploratory)k
+7628(projects,)s 8579(since)s 0 457(otherwise)m 988(the)s 1340(design)s
+2025(too)s 2388(easily)s 3003(becomes)s 3894(unrealistic.)s 5056(Sometimes)s
+6173(the)s 6524(implementation)s 8085(does)s 8579(more)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 16 17
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13842(-)m 4416(16)s 4709(-)s 0 13251(than)m 469(its)s
+745(designer)s 1615(intended.)s 2603(The)s 3031(author)s 3702(wrote)s
+4302(the)s 4650(follo)s 6(wing)k 5627(purely)s 6292(as)s
+6542(a)s 6708(testing)s 7398(scaf)s 6(fold:)k 220 fnt35
+480 12750(def @P)m 8(age r)k -3(ight x)k 480 12462({)m 480 12174( 8i @Wide 11i @High)m
+480 11886( {)m 480 11598( //1i ||1i x ||1i)m 480 11310( //1i)m 480 11022( })m 480 10734(})m
+240 fnt82 0 10240(Only)m 518(afterw)s 2(ards)k 1558(did)s
+1906(he)s 2172(realize)s 2848(its)s 3108(signi\207cance:)s 4400(the)s
+4732(concept)s 5521(of)s 5776(a)s 5926(page)s 6418(had)s
+6807(been)s 7300(de\207ned)s 8047(outside)s 8778(the)s 0 9952(implementation,)m
+1619(remo)s 3(ving)k 2598(the)s 2959(need)s 3481(for)s
+3831(commands)s 4932(for)s 5282(setting)s 5984(page)s 6505(width)s
+7119(and)s 7535(height,)s 8253(mar)s 4(gins,)k 0 9664(and)m
+404(so)s 670(on.)s 480 9290(De\207ning)m 1393(a)s 1582(sequence)s
+2538(of)s 2831(pages)s 3450(is)s 3683(harder)s 9(,)k
+4414(since)s 4983(their)s 5503(number)s 6317(is)s 6550(not)s
+6938(kno)s 6(wn)k 7665(in)s 7931(adv)s 6(ance.)k
+8896(A)s 0 9002(simple)m 693(v)s 3(ersion)k 1451(of)s
+1722(this)s 2118(same)s 2665(problem)s 3522(is)s 3732(af)s 6(forded)k
+4593(by)s 4887(the)s 5235(leaders)s 5962(found)s 6579(in)s
+6822(tables)s 7430(of)s 7701(contents:)s 480 8497(Chapter)m 1297(7)s
+1525(..)s 1809(..)s 2093(..)s 2377(..)s 2661(..)s
+2945(..)s 3229(..)s 3513(..)s 3797(..)s 4081(..)s
+4365(..)s 4649(..)s 4933(..)s 5217(..)s 5501(..)s
+5785(..)s 6009(53)s 0 7994(This)m 476(seemed)s 1251(to)s
+1490(require)s 2222(recursion,)s 3218(speci\207cally)s 4360(the)s 4708(de\207nition)s
+220 fnt35 480 7493(def @Leaders { ..)m 13( @Leaders })k 240 fnt82 0 6999(Note)m
+535(that)s 968(both)s 220 fnt35 1465 6996(..)m 240 fnt82
+1643 6999(and)m 220 fnt35 2061 6996(@Leaders)m 240 fnt82 3145 6999(are)m
+3506(objects,)s 4305(so)s 4585(the)s 4948(tw)s 2(o)k
+5372(spaces)s 6062(separating)s 7111(them)s 7664(are)s 8026(signi\207cant.)s
+0 6711(No)m 361(base)s 858(case)s 1341(is)s 1567(gi)s 6(v)k 3(en,)k
+2213(and)s 2633(indeed)s 3345(we)s 3696(ha)s 4(v)k 3(e)k
+4213(no)s 4522(boolean)s 5353(or)s 5628(conditional)s 6775(operators)s
+7731(with)s 8229(which)s 8887(to)s 0 6423(e)m 3(xpress)k
+757(it;)s 993(b)s 4(ut)k 1346(we)s 1673(can)s
+2053(adopt)s 2637(the)s 2977(implicit)s 3770(base)s 4243(`if)s
+4530(space)s 5109(is)s 5311(not)s 5668(suf\207cient,)s 6656(delete)s
+220 fnt35 7273 6420(@Leaders)m 240 fnt82 8334 6423(and)m 8729(an)s 3(y)k
+0 6135(preceding)m 996(space'.)s 1770(Then)s 2319(the)s 2667(e)s 3(xpression)k
+220 fnt35 480 5634(4i @Wide { Chapter 7 @Leaders 53 })m 240 fnt82 0 5138(will)m 417(produce)s
+1234(the)s 1572(object)s 2206(sho)s 6(wn)k 2873(abo)s 3(v)k 3(e.)k
+3593(It)s 3788(is)s 3988(hard)s 4461(to)s 4691(see)s
+5042(ho)s 6(w)k 5493(this)s 5879(base)s 6350(could)s
+6930(be)s 7202(made)s 7766(e)s 3(xplicit,)k 8576(with)s
+8998(-)s 0 4850(out)m 348(violating)s 1232(the)s 1561(general)s
+2301(principle)s 3187(of)s 3439(k)s 2(eeping)k 4230(all)s
+4504(size)s 4912(information)s 6079(internal.)s 6953(In)s 7190(the)s
+7519(implementation,)s 220 fnt35 0 4559(@Leaders)m 240 fnt82 1071 4562(remains)m
+1881(une)s 3(xpanded)k 3097(while)s 3686(sizes)s 4204(are)s
+4554(being)s 5142(calculated;)s 6224(then)s 6696(it)s 6891(is)s
+7103(treated)s 7813(similarly)s 8718(to)s 8960(a)s 0 4274(recepti)m 6(v)k 3(e)k
+922(symbol,)s 1734(with)s 2216(its)s 2492(body)s 3026(as)s
+3276(an)s 3559(incoming)s 4516(g)s 1(alle)k 3(y)k
+5150(\(Section)s 6003(5.2\).)s 480 3900(W)m 9(ith)k 1014(this)s
+1418(settled,)s 2156(it)s 2356(is)s 2574(no)s 6(w)k
+3044(clear)s 3575(ho)s 6(w)k 4044(to)s 4291(de\207ne)s
+4940(a)s 5115(document)s 6127(which)s 6777(is)s 6995(a)s
+7169(numbered)s 8193(sequence)s 0 3612(of)m 271(pages.)s 980(Let)s
+220 fnt35 1358 3609(@Ne)m 6(xt)k 240 fnt82 2082 3612(be)m
+2364(a)s 2530(pre\207x)s 3143(operator)s 3999(which)s 4641(returns)s
+5355(its)s 5631(parameter)s 6645(plus)s 7095(one.)s 7605(Then)s
+220 fnt35 480 3111(def @P)m 8(ageList)k 480 2823( r)m -3(ight @P)k 8(ageNum)k
+480 2535({)m 480 2247( @P)m 8(age {)k 480 1959( |0.5r)m -8(t - @P)k 8(ageNum -)k
+480 1671( //1v @T)m 26(e)k 6(xtPlace)k 480 1383( //1r)m -8(t @F)k 6(ootSect)k
+480 1095( })m 480 807( //)m 480 519( @P)m 8(ageList @Ne)k 6(xt @P)k 8(ageNum)k
+480 231(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 17 18
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4291 13844(-)m 4419(17)s 4707(-)s 0 13255(when)m 576(in)s 9(v)k 4(ok)k 2(ed)k
+1391(in)s 1634(the)s 1982(e)s 3(xpression)k 220 fnt35
+3059 13252(@P)m 8(ageList 1)k 240 fnt82 4267 13255(,)m 4374(has)s
+4744(for)s 5082(its)s 5358(result)s 5948(the)s 6296(potentially)s
+7372(in\207nite)s 8105(object)s 1927 2494 0 2494 240 288 60 480 10421 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82 845 2216(-)m 931(1)s
+1035(-)s 140 fnt35 170 2000(@T)m 16(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+1927 2494 0 2494 240 288 60 480 7927 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82 839 2216(-)m 925(2)s
+1041(-)s 140 fnt35 170 2000(@T)m 16(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+140 fnt35 480 7712(@P)m 5(ageList 3)k
+240 fnt82 0 7230(Similarly)m 15(,)k 980(we)s 1315(may)s
+1781(de\207ne)s 220 fnt35 2422 7227(@F)m 6(ootSect)k 240 fnt82
+3573 7230(lik)m 2(e)k 3985(this:)s 220 fnt35 480 6729(def @F)m 6(ootSect)k
+480 6441({)m 480 6153( def @F)m 6(ootList)k 480 5865( r)m -3(ight @Num)k
+480 5577( {)m 480 5289( @F)m 6(ootPlace)k 480 5001( //1v)m 480 4713( @F)m 6(ootList @Ne)k 6(xt @Num)k
+480 4425( })m 480 3849( 1i @Wide @HLine)m 480 3561( //1v)m 480 3273( @F)m 6(ootList 1)k
+480 2985(})m 240 fnt82 0 2491(so)m 266(that)s 684(an)s
+967(in)s 9(v)k 4(ocation)k 2021(of)s 220 fnt35
+2292 2488(@F)m 6(ootSect)k 240 fnt82 3443 2491(produces)m gsave
+480 2151 translate
+220 fnt35 1440 0 0 0 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+220 fnt35
+480 1806(@F)m 6(ootPlace)k 480 1518(@F)m 6(ootPlace)k 480 1230(@F)m 6(ootPlace)k
+480 942(...)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 18 19
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4291 13844(-)m 4419(18)s 4706(-)s 0 13253(The)m 476(e)s 3(xpansion)k
+1550(process)s 2367(is)s 2626(v)s 3(ery)k 3150(similar)s
+3921(to)s 4209(a)s 4424(BNF)s 4997(deri)s 6(v)k 6(ation,)k
+6109(and)s 6562(w)s 2(ould)k 7266(be)s 7597(attempted)s
+8646(only)s 0 12965(on)m 297(demand.)s 480 12591(Clearly)m 15(,)k
+1276(deciding)s 2154(which)s 2797(e)s 3(xpansions)k 3910(to)s
+4150(tak)s 2(e)k 4603(and)s 5008(replacing)s 220 fnt35
+5951 12588(@T)m 26(e)k 6(xtPlace)k 240 fnt82 7170 12591(and)m
+220 fnt35 7575 12588(@F)m 6(ootPlace)k 240 fnt82 8832 12591(by)m
+0 12303(the)m 338(appropriate)s 1471(actual)s 2085(te)s 3(xt)k
+2489(will)s 2904(not)s 3259(be)s 3530(easy;)s 4056(this)s
+4441(is)s 4640(the)s 4977(subject)s 5703(of)s 5963(Section)s
+6726(5.1.)s 7179(The)s 7596(important)s 8574(point)s 0 12015(for)m
+331(no)s 6(w)k 784(is)s 986(that)s 1397(we)s
+1724(ha)s 4(v)k 3(e)k 2217(here)s 2677(a)s
+2835(v)s 3(ery)k 3303(simple)s 3989(and)s 4385(\210e)s 3(xible)k
+5147(method)s 5916(of)s 6179(specifying)s 7220(the)s 7561(layout)s
+8211(of)s 8474(pages,)s 0 11727(which)m 642(requires)s 1462(no)s
+1755(specialized)s 2874(language)s 3794(features.)s 240 fnt84 0 11079(3.3.)m
+471(Modules)s 240 fnt82 480 10648(It)m 679(is)s 882(well)s
+1342(accepted)s 2229(that)s 2641(the)s 2982(visibility)s 3879(of)s
+4143(symbols)s 4986(is)s 5189(not)s 5549(adequately)s 6632(controlled)s
+7653(by)s 7940(Algol)s 8533(block)s 0 10360(structure.)m 999(The)s
+1427(author)s 2098(is)s 2308(a)s 3(w)k 2(are)k
+2929(of)s 3200(se)s 6(v)k 3(eral)k 3922(major)s
+4539(problems)s 5480(of)s 5751(this)s 6147(kind)s 6631(in)s
+6874(document)s 7878(formatting.)s 480 9986(One)m 976(problem)s 1874(is)s
+2126(that)s 2585(some)s 3187(symbols)s 4078(should)s 4816(be)s
+5139(visible)s 5874(only)s 6395(within)s 7104(restricted)s 8091(parts)s
+8647(of)s 8960(a)s 0 9698(document.)m 1108(F)s 3(or)k
+1497(e)s 3(xample,)k 2411(we)s 2746(naturally)s 3649(e)s 3(xpect)k
+4330(equation)s 5211(formatting)s 6272(to)s 6511(be)s 6793(accomplished)s
+8166(lik)s 2(e)k 8578(this:)s 220 fnt35 480 9201(surrounding te)m 6(xt)k
+480 8913(@Eq { {x sup 2 + 1} o)m 3(v)k 5(er 4 })k 480 8625(surrounding te)m 6(xt)k
+240 fnt82 0 8126(with)m 482(the)s 830(symbols)s 220 fnt35
+1679 8123(sup)m 240 fnt82 2025 8126(,)m 220 fnt35 2132 8123(o)m 3(v)k 5(er)k
+240 fnt82 2551 8126(,)m 2658(etc.,)s 3103(visible)s 3796(only)s
+4276(within)s 4944(the)s 5292(equation,)s 6223(not)s 6589(in)s
+6832(the)s 7180(surrounding)s 8390(te)s 3(xt.)k 480 7752(It)m
+695(seems)s 1341(natural)s 2069(to)s 2319(de\207ne)s 2970(these)s
+3528(symbols)s 4387(within)s 220 fnt35 5066 7749(@Eq)m 240 fnt82
+5544 7752(,)m 5661(since)s 6219(the)s 3(y)k 6692(are)s
+7050(local)s 7579(to)s 7829(equations.)s 8921(It)s 0 7464(only)m
+494(remains)s 1316(then)s 1799(to)s 2053(decree)s 2746(that)s
+3179(symbols)s 4043(local)s 4576(to)s 220 fnt35 4830 7461(@Eq)m
+240 fnt82 5382 7464(are)m 5744(to)s 5998(be)s 6294(visible)s
+7002(within)s 7684(its)s 7975(actual)s 8615(right)s 0 7176(parameter)m 9(,)k
+1052(and)s 1456(this)s 1852(is)s 2062(done)s 2584(by)s
+2878(replacing)s 3820(the)s 4168(right)s 4679(formal)s 5370(parameter)s
+6384(with)s 6866(a)s 240 fnt83 7032 7178(body)m 240 fnt82
+7554 7176(parameter:)m 220 fnt35 480 6690(e)m 6(xpor)k -8(t sup o)k 3(v)k 5(er)k
+480 6402(def @Eq)m 480 6114( body @Body)m 480 5826({)m 480 5538( def sup ...)m 480 5250( def o)m 3(v)k 5(er ...)k
+480 4674( Slope @F)m 6(ont @Body)k 480 4386(})m 240 fnt82 0 3892(The)m
+220 fnt35 426 3889(e)m 6(xpor)k -8(t)k 240 fnt82
+1092 3892(clause)m 1743(lists)s 2176(the)s 2522(identi\207ers)s 3526(which)s
+4166(are)s 4511(permitted)s 5482(to)s 5719(be)s 5999(visible)s
+6690(outside)s 7435(their)s 7930(usual)s 8488(range,)s 0 3604(the)m
+359(body)s 905(of)s 220 fnt35 1188 3601(@Eq)m 240 fnt82
+1666 3604(;)m 1790(and)s 2206(the)s 220 fnt35 2566 3601(body)m
+240 fnt82 3112 3604(declaration)m 4241(imports)s 5034(them)s 5584(into)s
+6021(\(mak)s 2(es)k 6772(them)s 7322(visible)s 8027(within\))s
+8778(the)s 0 3316(actual)m 614(right)s 1114(parameter)s 2117(of)s
+2376(each)s 2860(in)s 9(v)k 4(ocation)k 3903(of)s
+220 fnt35 4162 3313(@Eq)m 240 fnt82 4640 3316(.)m 4793(This)s
+5258(arrangement)s 6500(has)s 6859(pro)s 3(v)k 3(en)k
+7564(v)s 3(ery)k 8028(con)s 9(v)k 3(enient)k
+0 3028(for)m 338(de\207ning)s 1176(a)s 1342(v)s 6(ariety)k
+2053(of)s 2324(special-purpose)s 3880(packages.)s 480 2654(Another)m 1361(problem)s
+2256(arises)s 2888(when)s 3502(global)s 4193(symbols,)s 5136(such)s
+5669(as)s 5957(the)s 6343(ones)s 6871(used)s 7406(for)s
+7782(headings)s 8722(and)s 0 2366(paragraph)m 1034(separators,)s 2130(call)s
+2550(on)s 2868(v)s 6(alues)k 3545(that)s 3984(the)s
+4353(non-e)s 3(xpert)k 5468(user)s 5947(will)s 6394(need)s
+6925(to)s 7185(modify)s 15(,)k 7989(such)s 8506(as)s
+8778(the)s 0 2078(initial)m 605(font)s 1044(or)s 1297(paragraph)s
+2303(indent.)s 3059(These)s 3680(v)s 6(alues)k 4329(are)s
+4670(lik)s 2(e)k 5076(parameters)s 6167(of)s 6432(the)s
+6774(document)s 7771(as)s 8015(a)s 8175(whole,)s 8860(so)s
+0 1790(it)m 192(is)s 402(natural)s 1120(to)s 1359(try)s
+1678(this:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 19 20
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4289 13844(-)m 4417(19)s 4708(-)s 220 fnt35 480 13253(e)m 6(xpor)k -8(t @Heading @PP ...)k
+480 12965(def @BookLa)m 6(y)k 4(out)k 480 12677( named @InitialF)m 6(ont { )k 11(Times Base 12p })k
+480 12389( named @InitialBreak { adjust 14p })m 480 12101( named @ColumnWidth { 6i })m 480 11813( ...)m 480 11525({)m 480 11237( def @Heading ...)m
+480 10949( def @PP ...)m 480 10661(})m 240 fnt82 0 10167(No)m 6(w)k
+220 fnt35 579 10164(@Heading)m 240 fnt82 1732 10167(and)m 220 fnt35
+2202 10164(@PP)m 240 fnt82 2833 10167(may)m 3365(in)s 9(v)k 4(ok)k 2(e)k
+220 fnt35 4124 10164(@InitialF)m 6(ont)k 240 fnt82 5411 10167(and)m
+5881(the)s 6295(other)s 6911(parameters.)s 8188(T)s 19(o)k
+8554(mak)s 2(e)k 220 fnt35 0 9876(@Heading)m 240 fnt82
+1100 9879(and)m 220 fnt35 1517 9876(@PP)m 240 fnt82 2096 9879(visible)m
+2802(throughout)s 3926(the)s 4287(document,)s 5352(we)s 5700(need)s
+6223(only)s 6716(add)s 7133(a)s 7312(body)s 7859(parameter)s
+8887(to)s 220 fnt35 0 9588(@BookLa)m 6(y)k 4(out)k
+240 fnt82 1428 9591(and)m 1832(present)s 2582(the)s 2930(entire)s
+3529(document)s 4533(as)s 220 fnt35 480 9090(@BookLa)m 6(y)k 4(out)k
+480 8802( @InitialF)m 6(ont { Helv)k 5(etica Base 10p })k 480 8514( @InitialBreak { adjust 12p })m 480 8226({)m
+480 7938( )m 11(The document.)k 480 7650(})m 240 fnt82 0 7156(b)m 4(ut)k
+383(for)s 742(practical)s 1639(reasons)s 2429(gi)s 6(v)k 3(en)k
+3030(belo)s 6(w)k 3684(we)s 4040(prefer)s 4691(not)s
+5078(to)s 5338(enclose)s 6132(the)s 6502(entire)s 7122(document)s
+8147(in)s 8412(braces.)s 0 6868(Instead,)m 797(we)s 1132(write)s
+220 fnt35 480 6386(@Use { @BookLa)m 6(y)k 4(out)k 480 6098( @InitialF)m 6(ont { Helv)k 5(etica Base 10p })k
+480 5810( @InitialBreak { adjust 12p })m 480 5522(})m 480 5234(The document.)m 240 fnt82 0 4780(which)m
+643(has)s 1015(the)s 1365(same)s 1914(ef)s 6(fect:)k
+220 fnt35 2617 4777(@Use)m 240 fnt82 3284 4780(mak)m 2(es)k
+3946(the)s 4296(e)s 3(xported)k 5190(symbols)s 6040(of)s
+220 fnt35 6313 4777(@BookLa)m 6(y)k 4(out)k 240 fnt82
+7743 4780(visible)m 8438(for)s 8778(the)s 0 4492(remainder)m 1028(of)s
+1299(the)s 1647(document,)s 2698(and)s 3102(is)s 3312(permitted)s
+4285(only)s 4765(at)s 4997(the)s 5345(be)s 3(ginning.)k
+480 4118(The)m 925(third)s 1451(feature)s 2187(that)s 2622(af)s 6(fects)k
+3319(visibility)s 15(,)k 4278(and)s 4699(which)s 5359(will)s
+5802(pro)s 3(v)k 3(e)k 6414(useful)s 7071(for)s
+7426(cross)s 7986(referencing)s 0 3830(\(Section)m 851(6.1\),)s 1335(is)s
+1543(the)s 220 fnt35 1889 3827(@Open)m 240 fnt82 2693 3830(symbol.)m
+3560(It)s 3763(mak)s 2(es)k 4421(the)s 4767(e)s 3(xported)k
+5657(symbols)s 6504(of)s 6773(its)s 7047(left)s 7422(parameter)s
+8433(visible)s 0 3542(within)m 668(its)s 944(right)s 1455(parameter)s 9(,)k
+2507(and)s 2911(is)s 3121(therefore)s 4038(similar)s 4760(to)s
+4999(the)s 5347(P)s 3(ascal)k 220 fnt35 6009 3539(with)m
+240 fnt82 6444 3542(statement.)m 480 3168(It)m 698(could)s 1301(be)s
+1596(ar)s 4(gued)k 2314(that)s 2745(Lout)s 3270(is)s
+3493(o)s 3(v)k 3(er)k 4(-supplied)k 4869(with)s
+5364(these)s 5924(visibility)s 6840(modifying)s 7903(features:)s 8778(the)s
+0 2880(body)m 544(parameter)s 9(,)k 220 fnt35 1606 2877(@Use)m
+240 fnt82 2282 2880(and)m 220 fnt35 2696 2877(@Open)m 240 fnt82
+3513 2880(do)m 3816(not)s 4193(seem)s 4754(suf\207ciently)s 5894(dif)s 6(ferent)k
+6779(from)s 7314(each)s 7819(another)s 13(.)k 8698(The)s
+220 fnt35 0 2589(@Open)m 240 fnt82 806 2592(symbol)m 1566(is)s
+1776(the)s 2124(most)s 2649(general,)s 3459(being)s 4044(capable)s
+4830(of)s 5101(replacing)s 6043(the)s 6391(other)s 6942(tw)s 2(o.)k
+7463(F)s 3(or)k 7852(e)s 3(xample,)k 220 fnt35
+480 2091(@Use { x })m 480 1803(@Use { y })m 480 1515(Body of document)m 240 fnt82 0 1017(can)m
+389(be)s 671(replaced)s 1538(by)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 20 21
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4287 13844(-)m 4415(20)s 4710(-)s 220 fnt35 480 13255(x @Open {)m
+480 12967(y @Open {)m 480 12679(Body of document)m 480 12391(}})m 240 fnt82 0 11897(and,)m
+453(taking)s 1104(the)s 220 fnt35 1452 11894(@Eq)m 240 fnt82
+1990 11897(symbol)m 2750(abo)s 3(v)k 3(e)k 3372(as)s
+3622(e)s 3(xample,)k 4536(we)s 4871(could)s 5461(eliminate)s
+6405(its)s 6681(body)s 7215(parameter)s 9(,)k 8267(add)s
+220 fnt35 480 11396(def @Body r)m -3(ight x { Slope @F)k 6(ont x })k 240 fnt82
+0 10897(to)m 239(the)s 587(e)s 3(xported)k 1479(de\207nitions)s
+2540(of)s 220 fnt35 2811 10894(@Eq)m 240 fnt82 3289 10897(,)m
+3396(and)s 3800(replace)s 220 fnt35 480 10396(@Eq { object })m 240 fnt82
+0 9899(by)m 220 fnt35 480 9398(@Eq @Open { @Body { object } })m 240 fnt82 0 8898(If)m
+220 fnt35 232 8895(@Eq)m 240 fnt82 772 8898(is)m 985(a)s
+1153(g)s 1(alle)k 3(y)k 1790(\(Section)s 2645(5.1\),)s
+220 fnt35 3133 8895(@Body)m 240 fnt82 3917 8898(must)m 4444(tak)s 2(e)k
+4899(o)s 3(v)k 3(er)k 5380(that)s 5800(function.)s
+6764(But)s 7172(one)s 7577(w)s 2(ould)k 8234(not)s
+8603(w)s 2(ant)k 0 8610(to)m 253(write)s 813(these)s
+1374(clumsy)s 2133(e)s 3(xpressions)k 3311(in)s 3568(practice,)s
+4444(and)s 4862(the)s 5224(enclosure)s 6210(of)s 6495(lar)s 4(ge)k
+7038(quantities)s 8032(of)s 8317(input)s 8883(in)s 0 8322(e)m 3(xtra)k
+534(braces)s 1195(could)s 1785(cause)s 2372(Basser)s 3069(Lout)s
+3581(to)s 3820(run)s 4196(out)s 4562(of)s 4833(memory)s
+5684(\(Section)s 6537(5.4\).)s 480 7948(A)m 700(quite)s 1224(separate)s
+2052(kind)s 2526(of)s 2786(visibility)s 3679(problem)s 4526(arises)s
+5110(when)s 5676(e)s 3(xpert)k 6319(users)s 6851(wish)s
+7350(to)s 7579(de\207ne)s 8210(an)s 8482(object)s 0 7660(or)m
+259(operator)s 1115(for)s 1453(repeated)s 2320(use)s 2695(within,)s
+3413(say)s 15(,)k 3824(equations:)s 220 fnt35 480 7161(def isum { sum from i=1 to n })m
+240 fnt82 0 6667(As)m 338(it)s 551(stands)s 1221(this)s
+1638(can)s 2048(only)s 2549(be)s 2852(placed)s 3555(within)s
+4244(the)s 220 fnt35 4613 6664(@Eq)m 240 fnt82 5172 6667(package)m
+6033(itself,)s 6637(where)s 220 fnt35 7298 6664(sum)m 240 fnt82
+7780 6667(and)m 8205(the)s 8575(other)s 0 6379(symbols)m 841(are)s
+1179(visible,)s 1915(b)s 4(ut)k 2268(it)s 2451(is)s
+2653(not)s 3010(desirable)s 3919(to)s 4150(modify)s 4886(the)s
+5225(source)s 5897(code)s 6396(of)s 6658(a)s 6816(standard)s
+7675(package.)s 8614(Lout)s 0 6091(pro)m 3(vides)k 872(an)s
+220 fnt35 1155 6088(impor)m -8(t)k 240 fnt82 1828 6091(clause)m
+2481(to)s 2720(solv)s 3(e)k 3278(this)s 3674(problem:)s
+220 fnt35 480 5590(impor)m -8(t @Eq)k 480 5302(def isum { sum from i=1 to n })m 240 fnt82
+0 4808(may)m 469(appear)s 1169(after)s 220 fnt35 1669 4805(@Eq)m
+240 fnt82 2210 4808(is)m 2423(de\207ned,)s 3239(and)s 3646(it)s
+3842(will)s 4271(mak)s 2(e)k 4846(the)s 5198(e)s 3(xported)k
+6093(symbols)s 6945(of)s 220 fnt35 7220 4805(@Eq)m 240 fnt82
+7761 4808(visible)m 8458(within)s 0 4520(the)m 335(body)s 855(of)s
+220 fnt35 1112 4517(isum)m 240 fnt82 1561 4520(.)m 1711(This)s
+2174(feature)s 2878(complicates)s 4056(the)s 4390(treatment)s 5337(of)s
+5595(en)s 9(vironments)k 6925(\(Section)s 7764(3.4\),)s 8236(and)s
+8626(e)s 6(v)k 3(en)k 0 4232(introduces)m 1050(an)s
+1336(insecurity)s 15(,)k 2373(when)s 220 fnt35 2952 4229(isum)m
+240 fnt82 3464 4232(is)m 3677(in)s 9(v)k 4(ok)k 2(ed)k
+4495(outside)s 5245(an)s 5531(equation.)s 6522(A)s 6755(simpler)s
+7534(approach)s 8471(w)s 2(ould)k 0 3944(be)m 290(to)s
+538(allo)s 6(w)k 1126(only)s 1615(one)s 2026(symbol)s
+2795(in)s 3047(an)s 220 fnt35 3339 3941(impor)m -8(t)k
+240 fnt82 4020 3944(clause,)m 4733(and)s 5146(treat)s 5638(the)s
+5995(follo)s 6(wing)k 6981(de\207nition)s 7964(e)s 3(xactly)k
+8714(lik)s 2(e)k 0 3656(a)m 174(local)s 702(de\207nition)s
+1684(of)s 1964(that)s 2390(symbol;)s 3216(b)s 4(ut)k
+3587(then)s 4064(it)s 4265(w)s 2(ould)k 4928(not)s
+5303(be)s 5594(possible)s 6442(to)s 6690(de\207ne)s 7339(symbols)s
+8197(using)s 8778(the)s 0 3368(resources)m 953(of)s 1224(more)s
+1771(than)s 2240(one)s 2642(of)s 2913(the)s 3261(standard)s
+4129(packages.)s 240 fnt84 0 2719(3.4.)m 471(Implementation)s 2159(of)s
+2431(de\207nitions)s 240 fnt82 480 2242(Input)m 1089(is)s 1343(processed)s
+2388(by)s 2726(a)s 2936(h)s 1(ybrid)k 3663(parser)s
+4350(which)s 5036(emplo)s 2(ys)k 5940(operator)s 6840(precedence)s
+8015(for)s 8398(objects)s 0 1954(and)m 433(simple)s 1156(recursi)s 6(v)k 3(e)k
+2108(descent)s 2915(for)s 3283(the)s 3661(headers)s 4472(of)s
+4772(de\207nitions.)s 5976(A)s 6236(symbol)s 7026(table)s 7576(stores)s
+8214(the)s 8592(body)s 0 1666(of)m 278(each)s 780(de\207nition)s
+1761(as)s 2018(a)s 2191(parse)s 2758(tree,)s 3229(e)s 3(xcept)k
+3917(for)s 4263(macros)s 5011(which)s 5660(are)s 6014(lists)s
+6456(of)s 6734(tok)s 2(ens,)k 7471(and)s 7882(manages)s
+8778(the)s 0 1378(usual)m 564(stack)s 1121(of)s 1397(static)s
+1958(scopes,)s 2708(accepting)s 240 fnt83 3682 1380(PushScope)m 240 fnt82
+4791 1378(and)m 240 fnt83 5200 1380(P)m 19(opScope)k 240 fnt82
+6197 1378(operations)m 7249(as)s 7504(the)s 7857(parser)s 8505(enters)s
+0 1090(and)m 447(lea)s 4(v)k 3(es)k 1131(scope)s
+1775(re)s 3(gions,)k 2626(including)s 3627(actual)s 4295(body)s
+4872(parameters)s 6013(and)s 6461(the)s 6852(right)s 7406(parameter)s
+8463(of)s 8778(the)s 220 fnt35 0 799(@Open)m 240 fnt82
+806 802(operator)m 13(.)k 480 428(As)m 818(the)s 1187(parse)s
+1769(proceeds,)s 2747(a)s 2934(complete)s 3888(call)s 4308(graph)s
+4932(is)s 5163(constructed,)s 6393(recording,)s 7438(for)s 7797(each)s
+8314(symbol,)s 0 140(which)m 633(symbols)s 1473(are)s 1810(in)s 9(v)k 4(ok)k 2(ed)k
+2616(within)s 3274(its)s 3541(body)s 15(.)k 4160(Immediately)s
+5412(after)s 5898(the)s 6237(last)s 6618(de\207nition)s 7583(is)s
+7783(read,)s 8292(the)s 8630(tran)s 8998(-)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 21 22
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4297 13844(-)m 4425(21)s 4700(-)s 0 13256(siti)m 6(v)k 3(e)k
+565(closure)s 1312(of)s 1584(the)s 1933(call)s 2334(graph)s
+2937(is)s 3148(computed,)s 4200(and)s 4605(used)s 5104(to)s
+5344(determine)s 6356(whether)s 7187(each)s 7684(non-)s 8112(parameter)s
+0 12968(symbol)m 775(is)s 1001(recursi)s 6(v)k 3(e)k
+1939(or)s 2214(recepti)s 6(v)k 3(e)k 3151(\(Section)s
+4020(5.1\),)s 4522(and)s 4942(whether)s 5787(each)s 6298(parameter)s
+7328(is)s 7554(in)s 9(v)k 4(ok)k 2(ed)k
+8385(e)s 3(xactly)k 0 12680(once)m 508(or)s 767(not.)s
+480 12306(Purely)m 1188(functional)s 2243(systems)s 3082(may)s 3579(e)s 6(v)k 6(aluate)k
+4450(symbol)s 5240(in)s 9(v)k 4(ocations)k 6412(in)s
+6686(applicati)s 6(v)k 3(e)k 7812(order)s 8407(\(where)s
+0 12018(parameters)m 1092(are)s 1433(e)s 6(v)k 6(aluated)k
+2389(before)s 3049(substitution)s 4216(into)s 4635(bodies\),)s 5440(or)s
+5693(in)s 5930(normal)s 6656(order)s 7214(\(substitution)s 8460(before)s
+0 11730(e)m 6(v)k 6(aluation\),)k 1164(and)s 1562(the)s 3(y)k
+2018(may)s 2478(also)s 2909(share)s 3463(the)s 3804(v)s 6(alue)k
+4366(of)s 4630(a)s 4790(parameter)s 5798(among)s 6496(all)s
+6783(uses)s 7239(of)s 7504(it.)s 7793(But)s 8193(in)s
+8429(Basser)s 0 11442(Lout,)m 603(the)s 996(presence)s 1932(of)s
+2248(conte)s 3(xt-sensiti)k 6(v)k 3(e)k 3955(style)s
+4507(information)s 5736(\(Section)s 6634(2.5\))s 7106(forces)s 7785(normal)s
+8562(order)s 0 11154(e)m 6(v)k 6(aluation)k 1041(and)s
+1445(pre)s 6(v)k 3(ents)k 2297(sharing)s 3054(of)s
+3325(parameter)s 4339(v)s 6(alues.)k 480 10780(T)m 19(o)k
+780(e)s 6(v)k 6(aluate)k 1620(an)s 1903(unsized)s
+2692(object)s 3336(\(pure)s 3896(parse)s 4456(tree\),)s 4999(its)s
+240 fnt83 5275 10782(en)m 9(vir)k 10(onment)k 240 fnt82
+6456 10780(,)m 6563(the)s 6911(equi)s 6(v)k 6(alent)k
+7955(of)s 8226(the)s 8574(stack)s 0 10492(frames)m 728(in)s
+999(Algol-lik)s 2(e)k 2064(languages,)s 3156(must)s 3710(be)s
+4020(a)s 4(v)k 6(ailable,)k 5008(containing)s 6099(the)s
+6476(actual)s 7129(v)s 6(alues)k 7814(of)s 8113(all)s
+8435(formal)s 0 10204(parameters)m 1119(that)s 1558(are)s 1927(visible)s
+2641(within)s 3330(the)s 3700(unsized)s 4510(object.)s 5279(En)s 9(vironment)k
+6601(handling)s 7513(is)s 7744(a)s 7932(well-kno)s 6(wn)k
+0 9916(implementation)m 1557(technique,)s 2594(so)s 2860(it)s 3052(will)s
+3478(be)s 3760(discussed)s 4735(only)s 5215(brie\210y)s 5893(here.)s
+480 9542(En)m 9(vironments)k 1894(are)s 2272(e)s 3(xtra)k
+2837(subtrees)s 3702(hung)s 4265(from)s 4820(the)s 5199(objects)s
+5958(the)s 3(y)k 6451(refer)s 6991(to.)s 7372(This)s
+7879(or)s 4(g)k 1(anization)k 0 9254(mak)m 2(es)k
+668(e)s 3(xcellent)k 1595(use)s 1978(of)s 2257(the)s
+2613(ordered)s 3409(dag)s 3816(to)s 4063(permit)s 4754(en)s 9(vironments)k
+6106(to)s 6353(be)s 6643(shared,)s 7382(and)s 7794(deleted)s
+8550(when)s 0 8966(the)m 339(last)s 721(reference)s 1655(to)s
+1885(them)s 2413(is)s 2614(remo)s 3(v)k 3(ed.)k
+3600(Se)s 6(v)k 3(eral)k 4353(optimizations)s 5695(ha)s 4(v)k 3(e)k
+6187(been)s 6687(implemented.)s 8090(Actual)s 8772(pa)s 8998(-)s
+0 8678(rameters)m 860(kno)s 6(wn)k 1552(to)s 1778(be)s
+2048(in)s 9(v)k 4(ok)k 2(ed)k 2850(only)s
+3318(once)s 3814(are)s 4148(mo)s 3(v)k 3(ed)k
+4840(in)s 5070(from)s 5582(the)s 5918(en)s 9(vironment,)k
+7212(not)s 7566(copied;)s 8303(cop)s 2(ying)k 0 8390(could)m
+581(lead)s 1028(to)s 1258(quadratic)s 2191(time)s 2662(comple)s 3(xity)k 15(.)k
+3875(Actual)s 4558(parameters)s 5647(of)s 5909(the)s 6248(form)s
+220 fnt35 6763 8387(@Ne)m 6(xt)k 240 fnt83 7478 8392(object)m
+240 fnt82 8117 8390(recei)m 6(v)k 3(e)k 8843(an)s
+0 8102(applicati)m 6(v)k 3(e)k 1105(pre-)s 1478(e)s 6(v)k 6(aluation)k
+2529(which)s 3181(pre)s 6(v)k 3(ents)k 4044(long)s
+4533(chains)s 5205(of)s 220 fnt35 5486 8099(@Ne)m 6(xt)k
+240 fnt82 6221 8102(symbols)m 7080(from)s 7614(forming)s 8448(during)s
+0 7814(the)m 359(generation)s 1437(of)s 1719(lar)s 4(ge)k
+2260(page)s 2779(numbers.)s 3779(Some)s 4391(en)s 9(vironments)k
+5747(which)s 6400(pro)s 3(v)k 6(ably)k 7308(contrib)s 4(ute)k
+8341(nothing)s 0 7526(are)m 344(deleted,)s 1137(most)s 1659(notably)s
+2427(when)s 3000(a)s 3162(symbol)s 3918(in)s 9(v)k 4(ocation)k
+4969(has)s 5335(no)s 5625(symbols)s 6470(within)s 7135(its)s
+7407(actual)s 8028(parameters)s 0 7238(and)m 406(no)s 702(import)s
+1402(list,)s 1803(so)s 2071(that)s 2492(only)s 2975(the)s
+3326(en)s 9(vironment)k 4589(of)s 4862(its)s 5141(body)s
+5678(need)s 6191(be)s 6476(k)s 2(ept;)k 7000(this)s
+7399(sa)s 4(v)k 3(es)k 7964(a)s 8133(great)s
+8673(deal)s 0 6950(of)m 271(space)s 858(when)s 1434(objects)s
+2162(with)s 2644(en)s 9(vironments)k 3988(are)s 4335(written)s
+5068(to)s 5307(auxiliary)s 6210(\207les)s 6659(\(Section)s 7512(6.1\).)s
+240 fnt84 0 6157(4.)m 291(Implementation)s 1979(of)s 2251(the)s
+2625(functional)s 3715(subset)s 240 fnt82 480 5680(The)m 941(objects)s
+1702(and)s 2139(de\207nitions)s 3233(of)s 3537(Lout)s 4082(are)s
+4462(v)s 3(ery)k 4971(similar)s 5726(to)s 5998(those)s
+6592(found)s 7242(in)s 7518(other)s 8102(functional)s 0 5392(languages,)m
+1085(and)s 1510(the)s 3(y)k 1994(form)s 2539(a)s
+2726(natural)s 3465(subset)s 4144(of)s 4436(the)s 4805(language.)s
+5854(So)s 6181(we)s 6537(pause)s 7159(here)s 7647(and)s
+8072(present)s 8843(an)s 0 5104(o)m 3(v)k 3(ervie)k 6(w)k
+932(of)s 1203(the)s 1551(Basser)s 2248(Lout)s 2760(object)s
+3404(e)s 6(v)k 6(aluation)k 4445(algorithm.)s 480 4730(The)m
+922(problem)s 1794(is)s 2019(to)s 2272(tak)s 2(e)k
+2739(an)s 3037(unsized)s 3841(object)s 4499(\(pure)s 5074(parse)s
+5649(tree\),)s 6206(its)s 6497(en)s 9(vironment)k 7772(\(Section)s
+8640(3.4\),)s 0 4442(and)m 404(its)s 681(style)s 1188(\(Section)s
+2042(2.5\),)s 2528(and)s 2933(to)s 3173(produce)s 4000(a)s
+4167(PostScript)s 5209(\207le)s 5571(for)s 5910(rendering)s 6879(the)s
+7228(object)s 7872(on)s 8170(an)s 8454(output)s 0 4154(de)m 6(vice.)k
+786(This)s 1267(\207le)s 1632(is)s 1847(essentially)s 2914(a)s
+3084(sequence)s 4022(of)s 4298(instructions)s 5468(to)s 5712(print)s
+6227(a)s 6398(gi)s 6(v)k 3(en)k 6983(string)s
+7584(of)s 7860(characters)s 8883(in)s 0 3866(a)m 166(gi)s 6(v)k 3(en)k
+746(font)s 1191(at)s 1423(a)s 1589(gi)s 6(v)k 3(en)k
+2169(point.)s 480 3492(Before)m 1189(the)s 1541(algorithm)s 2534(be)s 3(gins,)k
+3266(the)s 3618(parse)s 4182(tree)s 4599(must)s 5127(be)s
+5413(obtained,)s 6348(either)s 6955(by)s 7252(parsing)s 8013(input)s
+8569(or)s 8832(by)s 0 3204(cop)m 2(ying)k 823(from)s
+1347(the)s 1695(symbol)s 2455(table.)s 3082(Afterw)s 2(ards)k
+4205(the)s 4553(data)s 5011(structure)s 5901(must)s 6426(be)s
+6708(disposed.)s 7710(The)s 8137(algorithm)s 0 2916(proper)m 692(consists)s
+1508(of)s 1787(\207v)s 3(e)k 2207(passes,)s 2933(each)s
+3437(a)s 3611(recursi)s 6(v)k 3(e)k 4541(tra)s 4(v)k 3(ersal)k
+5418(of)s 5697(the)s 6054(structure)s 6953(from)s 7485(the)s
+7841(root)s 8294(do)s 6(wn)k 8887(to)s 0 2628(the)m
+348(lea)s 4(v)k 3(es)k 989(and)s 1393(back.)s
+240 fnt83 0 2174(1.)m 330(Evaluation)s 1490(of)s 1827(unsized)s
+2667(objects.)s 240 fnt82 3554 2172(On)m 3960(the)s 4364(w)s 2(ay)k
+4871(do)s 6(wn,)k 5561(calculate)s 6521(en)s 9(vironments)k
+7921(and)s 8381(replace)s 0 1884(non-recursi)m 6(v)k 3(e,)k
+1404(non-recepti)s 6(v)k 3(e)k 2757(symbols)s 3598(by)s
+3884(their)s 4373(bodies)s 5041(\(Section)s 5886(3.4\);)s 6369(broadcast)s
+7337(fonts)s 7858(to)s 8089(the)s 8429(lea)s 4(v)k 3(es,)k
+0 1596(and)m 409(paragraph)s 1427(breaking)s 2322(and)s 2731(spacing)s
+3521(styles)s 4121(to)s 4365(the)s 4718(paragraph)s 5736(nodes.)s
+6465(On)s 6820(the)s 7173(w)s 2(ay)k 7629(back)s
+8147(up,)s 8500(delete)s 240 fnt83 0 1310(FONT)m 240 fnt82
+630 1308(,)m 240 fnt83 737 1310(BREAK)m 240 fnt82 1494 1308(,)m
+1601(and)s 240 fnt83 2005 1310(SP)m 21(A)k 7(CE)k
+240 fnt82 2760 1308(nodes,)m 3426(and)s 3830(insert)s 240 fnt83
+4420 1310(SPLIT)m 240 fnt82 5049 1308(,)m 240 fnt83 5156 1310(COL)m
+240 fnt82 5622 1308(,)m 5729(and)s 240 fnt83 6133 1310(R)m 9(O)k 12(W)k
+240 fnt82 6707 1308(nodes)m 7317(\(Section)s 8170(2.3\).)s 240 fnt83
+0 815(2.)m 293(W)s 13(idth)k 925(calculations)s 2169(and)s
+2614(br)s 8(eaking)k 3(.)k 240 fnt82 3628 813(Calculate)m
+4605(the)s 4973(width)s 5594(of)s 5885(e)s 6(v)k 3(ery)k
+6480(subobject)s 7477(from)s 8020(the)s 8388(bottom)s 0 525(up.)m
+404(As)s 720(described)s 1693(in)s 1936(Section)s 2709(2.3,)s
+240 fnt83 3115 527(WIDE)m 240 fnt82 3777 525(nodes)m 4386(may)s
+4851(trigger)s 5547(object)s 6190(breaking)s 7079(sub-tra)s 4(v)k 3(ersals)k
+8448(during)s 0 237(this)m 396(pass.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 22 23
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(22)s 4710(-)s 240 fnt83 0 13256(3.)m
+274(Height)s 989(calculations.)s 240 fnt82 2312 13254(Calculate)m 3270(the)s
+3618(height)s 4276(of)s 4547(e)s 6(v)k 3(ery)k
+5123(subobject,)s 6147(from)s 6671(the)s 7019(bottom)s 7757(up.)s
+240 fnt83 0 12751(4.)m 283(Horizontal)s 1389(coor)s 8(dinates.)k
+240 fnt82 2674 12749(Calculate)m 3641(the)s 3998(horizontal)s 5032(coordinate)s
+6106(of)s 6386(each)s 6890(subobject)s 7876(from)s 8409(the)s
+8767(top)s 0 12461(do)m 6(wn,)k 634(and)s 1038(store)s
+1558(each)s 2053(leaf)s -13(')k 13(s)k 2633(coordinate)s
+3698(in)s 3941(the)s 4289(leaf.)s 240 fnt83 0 11977(5.)m
+295(V)s 26(ertical)k 1119(coor)s 8(dinates)k 2317(and)s
+2765(P)s 19(ostScript)k 3827(g)s 2(ener)k 3(ation.)k
+240 fnt82 5034 11975(Calculate)m 6013(the)s 6383(v)s 3(ertical)k
+7171(coordinate)s 8257(of)s 8550(e)s 6(v)k 3(ery)k
+0 11687(subobject)m 981(from)s 1509(the)s 1861(top)s 2224(do)s 6(wn,)k
+2862(and)s 3270(at)s 3506(each)s 4005(leaf,)s 4473(retrie)s 6(v)k 3(e)k
+5252(the)s 5604(character)s 6542(string,)s 7197(font,)s 7693(and)s
+8102(horizontal)s 0 11399(coordinate,)m 1116(and)s 1520(print)s 2031(the)s
+2379(PostScript)s 3421(instruction)s 4500(for)s 4838(rendering)s 5807(that)s
+6225(leaf.)s 0 10896(Figure)m 692(3)s 869(gi)s 6(v)k 3(es)k
+1428(the)s 1789(amount)s 2579(of)s 2863(code)s 3383(required)s
+4250(for)s 4600(each)s 5168(pass.)s 5756(Symmetry)s 6819(between)s
+7685(horizontal)s 8722(and)s 0 10608(v)m 3(ertical)k 764(is)s
+971(e)s 3(xploited)k 1913(throughout)s 3021(Basser)s 3715(Lout,)s
+4271(and)s 4672(passes)s 5331(2)s 5502(and)s 5903(3,)s
+6127(as)s 6374(well)s 6837(as)s 7084(4)s 7255(and)s
+7656(5,)s 7880(are)s 8224(e)s 3(x)k 3(ecuted)k
+0 10320(on)m 297(shared)s 979(code.)s 480 9946(The)m 929(author)s
+1621(can)s 2031(see)s 2413(no)s 2728(simple)s 3442(w)s 2(ay)k
+3914(to)s 4174(reduce)s 4888(the)s 5258(number)s 6070(of)s
+6362(passes.)s 7158(The)s 7607(introduction)s 8855(of)s 0 9658(horizontal)m
+1027(g)s 1(alle)k 3(ys)k 1755(\(Section)s 2612(5.5\))s
+3044(w)s 2(ould)k 3703(remo)s 3(v)k 3(e)k
+4474(the)s 4826(need)s 5340(for)s 5682(the)s 6034(object)s
+6682(breaking)s 7576(transformations)s 0 9370(within)m 700(this)s 1128(algorithm)s
+2149(that)s 2599(are)s 2978(the)s 3359(principal)s 4295(obstacles)s
+5254(in)s 5529(the)s 5909(w)s 2(ay)k 6393(of)s
+6696(the)s 7076(mer)s 4(ging)k 7954(of)s 8257(passes)s
+8952(2)s 0 9082(and)m 404(3.)s 240 fnt84 0 8338(5.)m
+291(Galleys)s 240 fnt82 480 7861(W)m 9(ith)k 1022(objects)s
+1767(and)s 2188(de\207nitions)s 3266(under)s 3888(control,)s 4689(the)s
+5053(author)s 5741(f)s 2(aced)k 6331(the)s 6696(problem)s
+7570(of)s 7858(getting)s 8592(body)s 0 7573(te)m 3(xt,)k
+478(footnotes,)s 1491(\210oating)s 2291(\207gures)s 3009(and)s 3429(tables,)s
+4109(references,)s 5213(inde)s 3(x)k 5813(entries,)s 6572(and)s
+6992(entries)s 7695(in)s 7954(the)s 8318(table)s 8855(of)s
+0 7285(contents)m 844(into)s 1264(their)s 1757(places.)s 2513(The)s
+2937(resulting)s 3821(in)s 9(v)k 3(estig)k 1(ation)k
+5095(occupied)s 6013(three)s 6541(months)s 7293(of)s 7559(full-time)s
+8444(design)s 0 6997(w)m 2(ork,)k 612(and)s 1031(proceeded)s
+2088(approximately)s 3538(as)s 3803(described)s 4793(in)s 5051(Section)s
+5840(5.1;)s 6268(the)s 6631(implementation)s 8204(occupied)s 0 6709(the)m
+348(years)s 903(1987-89.)s 240 fnt84 0 6060(5.1.)m 471(The)s
+926(galley)s 1580(abstraction)s 240 fnt82 480 5583(Let)m 870(us)s
+1147(tak)s 2(e)k 1611(the)s 1972(footnote)s 2838(as)s
+3100(a)s 3279(representati)s 6(v)k 3(e)k 4677(e)s 3(xample.)k
+5661(At)s 5973(some)s 6546(point)s 7111(in)s 7366(the)s
+7727(document,)s 8791(we)s 0 5295(wish)m 509(to)s 748(write)s
+220 fnt35 480 4847(preceding te)m 6(xt)k 480 4559(@F)m 6(ootNote { f)k 6(ootnote te)k 6(xt })k
+480 4271(f)m 6(ollo)k 3(wing te)k 6(xt)k 240 fnt82
+0 3772(and)m 406(we)s 744(e)s 3(xpect)k 1428(the)s
+1779(formatter)s 2729(to)s 2971(remo)s 3(v)k 3(e)k
+3741(the)s 4092(footnote)s 4947(from)s 5474(this)s 5873(conte)s 3(xt)k
+6637(and)s 7044(place)s 7607(it)s 7802(at)s 8037(the)s
+8388(bottom)s 0 3484(of)m 281(the)s 639(current)s 1386(page,)s
+1955(possibly)s 2817(splitting)s 3664(some)s 4235(or)s 4504(all)s
+4808(of)s 5089(it)s 5291(onto)s 5781(a)s 5957(follo)s 6(wing)k
+6944(page)s 7463(if)s 7690(space)s 8287(is)s 8508(insuf)s
+8998(-)s 0 3196(\207cient.)m 480 2822(An)m 844(object)s 1503(appears)s
+2298(in)s 2556(the)s 2918(\207nal)s 3413(document)s 4431(at)s
+4678(the)s 5040(point)s 5607(it)s 5813(is)s 6038(in)s 9(v)k 4(ok)k 2(ed,)k
+6916(b)s 4(ut)k 7293(this)s 7703(basic)s 8262(property)s
+0 2534(does)m 503(not)s 882(hold)s 1379(for)s 1730(footnotes:)s
+2799(the)s 3160(point)s 3725(of)s 4009(in)s 9(v)k 4(ocation)k
+5076(and)s 5493(the)s 5854(point)s 6419(of)s 6703(appearance)s
+7847(are)s 8207(dif)s 6(ferent.)k 0 2246(In)m 254(some)s
+813(w)s 2(ay)k 15(,)k 1299(the)s 1645(footnote)s
+2496(is)s 2703(attached)s 3555(to)s 3791(the)s 4137(document)s
+5139(at)s 5368(both)s 5849(points,)s 6539(introducing)s 7692(a)s
+7856(cross)s 8395(linking)s 0 1958(\(Section)m 853(2.1\))s 1281(that)s
+1699(cannot)s 2397(be)s 2679(described)s 3653(in)s 3896(purely)s
+4561(functional)s 5585(terms.)s 480 1584(Since)m 1069(the)s 1420(interpretation)s
+2766(of)s 3040(an)s 3(y)k 3440(object)s 4087(depends)s
+4926(on)s 5226(an)s 5512(en)s 9(vironment)k 6775(and)s
+7182(style)s 7692(inherited)s 8602(from)s 0 1296(the)m 347(conte)s 3(xt,)k
+1153(the)s 1499(\207rst)s 1929(question)s 2795(must)s 3318(be)s
+3598(whether)s 4427(the)s 4773(footnote)s 5624(inherits)s 6390(them)s
+6926(through)s 7726(the)s 8072(in)s 9(v)k 4(ocation)k
+0 1008(point)m 552(or)s 811(through)s 1613(the)s 1961(point\(s\))s
+2753(of)s 3024(appearance.)s 480 634(If)m 697(symbols)s 1533(are)s
+1867(to)s 2092(be)s 2361(interpreted)s 3440(statically)s 4341(as)s
+4578(heretofore,)s 5653(then)s 6108(en)s 9(vironments)k 7439(must)s
+7951(be)s 8219(inherited)s 0 346(through)m 829(the)s 1204(in)s 9(v)k 4(ocation)k
+2285(point)s 2865(alone.)s 3574(Dynamic)s 4531(inheritance)s 5675(through)s
+6505(the)s 6880(point)s 7459(of)s 7757(appearance)s 8916(is)s
+0 58(enticing)m 836(in)s 1092(some)s 1666(w)s 2(ays:)k
+2335(it)s 2541(might)s 3172(replace)s 3930(the)s 4291(body)s
+4838(parameter)s 9(,)k 5904(and)s 6321(it)s 6526(might)s
+7157(help)s 7635(with)s 8131(automatic)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 23 24
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4293 13844(-)m 4421(23)s 4705(-)s 1659 13218(1.)m 2163(Initialization)s
+7172(200)s 1659 12930(2.)m 2163(Memory)s 3041(allocation,)s 4090(ordered)s
+4878(dag)s 5277(operations)s 7172(400)s 1659 12642(3.)m 2163(Le)s 3(xical)k
+2931(analysis,)s 3808(macros,)s 4605(\207le)s 4966(handling)s 6992(1,350)s
+1659 12354(4.)m 2163(P)s 3(arsing)k 2930(of)s 3201(objects)s
+3929(and)s 4333(de\207nitions)s 6992(1,150)s 1659 12066(5.)m 2163(Symbol)s
+2963(table)s 3483(and)s 3887(call)s 4286(graph)s 7172(600)s
+1659 11778(6.)m 2163(Ev)s 6(aluation)k 3250(of)s 3521(pure)s
+4002(parse)s 4562(trees)s 6992(1,650)s 1659 11490(7.)m 2163(Reading,)s
+3068(storing,)s 3839(and)s 4243(scaling)s 4973(of)s 5244(fonts)s
+7172(600)s 1659 11202(8.)m 2163(Cross)s 2759(references)s 3790(and)s
+4194(databases)s 6992(1,000)s 1659 10914(9.)m 2163(W)s 9(idth)k
+2809(and)s 3213(height)s 3871(calculations,)s 5119(and)s 5523(breaking)s
+7172(700)s 1539 10626(10.)m 240 fnt83 2163 10628(Constr)m 3(ained)k
+240 fnt82 3410 10626(and)m 240 fnt83 3814 10628(AdjustSize)m 240 fnt82
+7172 10626(700)m 1539 10338(11.)m 2163(T)s 8(ransfer)k 3023(of)s
+3294(sized)s 3843(objects)s 4571(into)s 4996(g)s 1(alle)k 3(y)k
+5630(tree)s 7172(450)s 1539 10050(12.)m 2163(Galle)s 3(y)k
+2851(\210ushing)s 3676(algorithm)s 6992(1,500)s 1539 9762(13.)m 2163(Coordinate)s
+3282(calculations)s 4474(and)s 4878(PostScript)s 5920(output)s 7172(700)s
+1539 9474(14.)m 2163(Deb)s 4(ugging)k 3277(and)s 3681(error)s
+4204(handling)s 6992(1,200)s 655 0 0 0 240 288 60 6872 9328 LoutGr2
+0.5 pt ltabhs
+grestore
+
+grestore
+6872 9074(12,200)m 200 fnt84 41 8421(Figur)m 3(e)k
+649(3.)s 200 fnt82 891 8422(Major)m 1427(components)s 2432(of)s
+2658(the)s 2947(Basser)s 3526(Lout)s 3953(interpreter)s 8(,)k
+4861(sho)s 5(wing)k 5576(the)s 5865(approximate)s 6906(number)s
+7565(of)s 7791(lines)s 8208(of)s 8434(C)s 8611(code.)s
+240 fnt82 0 7791(numbering,)m 1163(since)s 1730(the)s 2097(number)s
+2908(of)s 3198(a)s 3384(footnote)s 4256(is)s 4486(kno)s 6(wn)k
+5209(only)s 5709(at)s 5960(the)s 6328(point)s 6899(of)s
+7190(appearance;)s 8396(b)s 4(ut)k 8778(the)s 0 7503(implementation)m
+1606(problems)s 2597(are)s 2993(se)s 6(v)k 3(ere,)k
+3751(and)s 4204(static)s 4810(inheritance)s 5976(seems)s 6661(much)s
+7299(simpler)s 8125(and)s 8579(more)s 0 7215(comprehensible)m 1572(to)s
+1814(the)s 2165(user)s 13(.)k 2716(Style,)s 3317(at)s
+3552(least)s 4052(its)s 4330(a)s 4(v)k 6(ailable)k
+5241(width)s 5846(and)s 6253(height)s 6913(part,)s 7394(must)s
+7922(of)s 8196(necessity)s 0 6927(be)m 268(inherited)s 1160(through)s
+1947(the)s 2280(point)s 2817(of)s 3073(appearance.)s 4297(F)s 3(or)k
+4671(consistenc)s 3(y)k 15(,)k 5861(the)s 6194(entire)s
+6778(style)s 7270(should)s 7952(be)s 8219(inherited)s 0 6639(in)m
+256(this)s 666(w)s 2(ay)k 15(.)k 1226(There)s
+1853(is)s 2077(a)s 2257(suggesti)s 6(v)k 3(e)k
+3328(analogy)s 4154(here)s 4635(with)s 5131(actual)s 5770(parameters,)s
+6938(which)s 7594(ha)s 4(v)k 3(e)k 8109(a)s
+8289(point)s 8855(of)s 0 6351(in)m 9(v)k 4(ocation)k
+1060(from)s 1591(which)s 2240(the)s 3(y)k 2710(inherit)s
+3400(an)s 3690(en)s 9(vironment,)k 5004(and)s 5414(a)s
+5587(point)s 6146(of)s 6424(appearance)s 7562(within)s 8237(the)s
+8592(body)s 0 6063(of)m 265(the)s 606(enclosing)s 1569(de\207nition,)s
+2587(from)s 3104(which)s 3739(the)s 3(y)k 4196(inherit)s
+4872(a)s 5031(style.)s 5639(It)s 5838(may)s 6297(be)s
+6572(possible)s 7406(to)s 7638(treat)s 8114(a)s 8273(footnote)s
+0 5775(as)m 250(the)s 598(actual)s 1223(parameter)s 2237(of)s
+2508(some)s 3069(symbol,)s 3881(therefore,)s 4849(although)s 5744(the)s
+6092(details)s 6766(seem)s 7317(v)s 3(ery)k 7793(obscure.)s
+480 5401(But)m 881(the)s 1224(most)s 1744(profound)s 2674(consequence)s
+3948(of)s 4214(ha)s 4(ving)k 4910(tw)s 2(o)k
+5314(types)s 5865(of)s 6131(attachment)s 7234(point)s 7780(is)s
+7985(that)s 8398(it)s 8584(leads)s 0 5113(to)m 261(tw)s 2(o)k
+693(distincti)s 6(v)k 3(e)k 1757(tree)s 2192(structures.)s
+3306(Considering)s 4551(in)s 9(v)k 4(ocation)k 5627(points)s
+6285(only)s 6787(leads)s 7351(to)s 7612(static)s 8190(trees)s
+8714(lik)s 2(e)k 0 4825(this)m 396(one:)s gsave
+480 2539 translate
+240 fnt83 3666 1996 170 1715 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1117 1273 170 993 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 1273 170 993 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 551 170 272 240 288 60 0 721 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(footnote)m
+
+grestore
+(T) lfigpromotelabels
+grestore
+(L) lfigpromotelabels
+grestore
+1206 553 170 272 240 288 60 1230 1443 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1206 553 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(body)m 692(te)s 4(xt)k
+grestore
+(T) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 2436 1715 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ L@T@CTR L@T@CTR T@CTR lfigangle L@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR L@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1117 1273 0 993 240 288 60 2549 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1001 552 170 272 240 288 60 116 721 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+884 552 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(\207gur)m 8(e)k
+
+grestore
+(T) lfigpromotelabels
+grestore
+1117 551 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 551 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 551 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(footnote)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 1117 272 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+(R) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 3666 1715 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ R@T@CTR R@T@CTR T@CTR lfigangle R@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR R@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 2088(which)m 663(sho)s 6(ws)k 1329(that)s
+1769(the)s 2139(body)s 2695(te)s 3(xt)k 3131(contains)s
+4001(a)s 4189(footnote)s 5064(and)s 5490(a)s 5677(\207gure,)s
+6364(the)s 6734(latter)s 7305(itself)s 7875(containing)s 8960(a)s
+0 1800(footnote.)m 961(Considering)s 2184(points)s 2820(of)s 3091(appearance)s
+4222(only)s 4702(gi)s 6(v)k 3(es)k 5249(a)s
+5415(completely)s 6531(dif)s 6(ferent,)k 7453(dynamic)s 8330(tree:)s
+gsave
+480 186 translate
+240 fnt83 4663 1274 0 995 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+3382 551 170 272 240 288 60 1281 723 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+2101 551 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(sequence)m 1100(of)s 1381(pa)s 2(g)k 2(es)k
+
+grestore
+(T) lfigpromotelabels
+grestore
+1206 553 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1206 553 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1206 553 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(body)m 692(te)s 4(xt)k
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 1206 272 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1117 553 170 272 240 288 60 1319 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 553 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 551 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(footnote)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 2436 272 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+884 553 170 272 240 288 60 2549 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+884 553 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+884 552 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(\207gur)m 8(e)k
+
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 3433 272 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+1117 553 170 272 240 288 60 3546 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 553 170 272 240 288 60 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1117 551 170 272 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+170 220(footnote)m
+grestore
+(T) lfigpromotelabels
+grestore
+(S) lfigpromotelabels
+grestore
+0 0 0 0 240 288 60 4663 272 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ S@T@CTR S@T@CTR T@CTR lfigangle S@T@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+T@CTR T@CTR S@T@CTR lfigangle T@CIRCUM lfigpadd lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 24 25
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(24)s 4710(-)s 0 13256(The)m 468(tree)s
+921(can)s 1351(be)s 1673(deeper)s 9(,)k 2448(for)s
+2827(e)s 3(xample)k 3730(with)s 4253(sections)s 5114(appearing)s
+6150(within)s 6859(chapters)s 7746(which)s 8429(appear)s 0 12968(within)m
+680(the)s 1041(body)s 1587(te)s 3(xt,)k 2062(which)s
+2717(appears)s 3510(within)s 4191(the)s 4551(\207nal)s 5044(sequence)s
+5990(of)s 6273(pages.)s 6995(Document)s 8065(formatting)s 0 12680(languages)m
+1024(generally)s 1984(shirk)s 2540(the)s 2905(issues)s 3544(raised)s
+4189(by)s 4500(this)s 4912(dual)s 5396(tree)s 5826(structure,)s
+6785(by)s 7096(making)s 7884(the)s 8249(dynamic)s 0 12392(tree)m
+421(b)s 4(uilt-in,)k 1235(by)s 1537(limiting)s 2354(one)s
+2764(or)s 3032(both)s 3523(trees)s 4032(to)s 4279(tw)s 2(o)k
+4697(le)s 6(v)k 3(els,)k 5360(and)s 5773(so)s
+6047(on,)s 6402(pro)s 3(viding)k 7391(a)s 7565(classic)s
+8263(e)s 3(xample)k 0 12104(of)m 295(the)s 667(impo)s 3(v)k 3(erishing)k
+2120(ef)s 6(fect)k 2740(of)s 3035(f)s 2(ailing)k
+3733(to)s 3997(permit)s 4704(language)s 5648(features)s 6478(to)s
+6741(attain)s 7352(their)s 7873(natural)s 8616(le)s 6(v)k 3(el)k
+0 11816(of)m 271(generality)s 15(.)k 480 11442(W)m 19(e)k
+854(are)s 1206(thus)s 1662(led)s 2017(to)s 2261(propose)s
+3081(a)s 3252(second)s 3980(abstraction)s 5091(for)s 5434(document)s
+6443(formatting,)s 7564(which)s 8211(we)s 8552(name)s 0 11154(the)m
+240 fnt83 371 11156(galle)m 7(y)k 240 fnt82 1028 11154(in)m
+1294(recognition)s 2464(of)s 2759(its)s 3058(similarity)s 4050(to)s
+4312(the)s 4684(g)s 1(alle)k 3(ys)k 5432(used)s
+5952(in)s 6219(manual)s 7001(typesetting.)s 8238(A)s 8492(g)s 1(alle)k 3(y)k
+0 10866(consists)m 817(of)s 1098(an)s 1391(object)s 2045(\(such)s
+2630(as)s 2890(a)s 3066(footnote\))s 4001(together)s 4854(with)s
+5346(a)s 5522(sequence)s 6465(of)s 6746(places)s 7404(where)s
+8054(that)s 8482(object)s 0 10578(may)m 491(appear)s 1214(\(such)s
+1814(as)s 2090(the)s 2464(bottoms)s 3311(of)s 3608(the)s
+3982(current)s 4743(and)s 5173(follo)s 6(wing)k 6176(pages\).)s
+6989(Splitting)s 7891(occurs)s 8592(quite)s 0 10290(naturally)m 903(when)s
+1479(space)s 2066(at)s 2298(an)s 3(y)k 2695(place)s
+3255(is)s 3465(insuf\207cient)s 4600(to)s 4839(hold)s 5323(the)s
+5671(entire)s 6270(object.)s 480 9916(In)m 736(Lout,)s 1295(a)s
+1461(footnote)s 2314(g)s 1(alle)k 3(y)k 2948(and)s
+3352(its)s 3628(place)s 4188(of)s 4459(appearance)s 5590(are)s
+5937(de\207ned)s 6700(as)s 6950(follo)s 6(ws:)k 220 fnt35
+480 9415(def @F)m 6(ootPlace { @Galle)k 4(y })k 480 8839(def @F)m 6(ootNote into { @F)k 6(ootPlace&&f)k 6(ollo)k 3(wing })k
+480 8551( r)m -3(ight x)k 480 8263({ x })m 240 fnt82 0 7769(The)m
+220 fnt35 445 7766(@F)m 6(ootPlace)k 240 fnt82 1719 7769(symbol)m
+2496(contains)s 3362(the)s 3727(special)s 4463(symbol)s 220 fnt35
+5240 7766(@Galle)m 4(y)k 240 fnt82 6078 7769(,)m 6203(indicating)s
+7229(that)s 7665(it)s 7874(is)s 8102(a)s 8285(point)s
+8855(of)s 0 7481(appearance)m 1143(for)s 1493(a)s 1672(g)s 1(alle)k 3(y)k 15(.)k
+2413(By)s 2759(placing)s 3529(in)s 9(v)k 4(ocations)k
+4682(of)s 220 fnt35 4965 7478(@F)m 6(ootPlace)k 240 fnt82
+6234 7481(at)m 6478(the)s 6838(bottoms)s 7673(of)s 7956(pages,)s
+8620(as)s 8883(in)s 0 7193(Section)m 801(3.2,)s 1235(we)s
+1597(de\207ne)s 2265(the)s 2640(desired)s 3415(points)s 4078(of)s
+4376(appearance)s 5534(for)s 5899(footnotes.)s 6980(Symbols)s 7896(whose)s
+8592(body)s 0 6905(contains)m 220 fnt35 863 6902(@Galle)m 4(y)k
+240 fnt82 1776 6905(either)m 2394(directly)s 3192(or)s 3466(indirectly)s
+4450(are)s 4812(called)s 5455(recepti)s 6(v)k 3(e)k
+6392(symbols,)s 7312(meaning)s 8204(recepti)s 6(v)k 3(e)k
+0 6617(to)m 239(g)s 1(alle)k 3(ys,)k 1019(and)s
+1423(the)s 3(y)k 1886(are)s 2233(e)s 3(xpanded)k
+3207(only)s 3687(on)s 3984(demand.)s 4906(The)s 5334(ef)s 6(fect)k
+5930(of)s 6202(the)s 220 fnt35 6550 6614(into)m 240 fnt82
+6956 6617(clause)m 7609(is)s 7819(to)s 8058(mak)s 2(e)k
+8631(each)s 0 6329(in)m 9(v)k 4(ocation)k 1057(of)s
+220 fnt35 1332 6326(@F)m 6(ootNote)k 240 fnt82 2506 6329(a)m
+2676(g)s 1(alle)k 3(y)k 3313(whose)s 3985(object)s
+4632(is)s 4846(the)s 5198(result)s 5791(of)s 6066(the)s
+6417(in)s 9(v)k 4(ocation)k 7475(in)s 7721(the)s
+8073(usual)s 8637(w)s 2(ay)k 15(,)k 0 6041(and)m
+406(whose)s 1076(sequence)s 2011(of)s 2285(points)s 2923(of)s
+3196(appearance)s 4329(is)s 4542(speci\207ed)s 5452(by)s 5748(the)s
+220 fnt35 6098 6038(into)m 240 fnt82 6507 6041(clause;)m 7218(in)s
+7463(this)s 7861(e)s 3(xample,)k 8778(the)s 0 5753(sequence)m
+933(of)s 1204(all)s 220 fnt35 1497 5750(@F)m 6(ootPlace)k
+240 fnt82 2753 5753(symbols)m 3602(follo)s 6(wing)k 4579(the)s
+4927(in)s 9(v)k 4(ocation)k 5981(point.)s 480 5379(Lout)m
+995(permits)s 1766(g)s 1(alle)k 3(ys)k 2494(to)s
+2737(be)s 3023(in)s 9(v)k 4(ok)k 2(ed)k
+3842(within)s 4514(other)s 5069(g)s 1(alle)k 3(ys)k
+5797(to)s 6040(arbitrary)s 6919(depth,)s 7562(so)s 7832(that)s
+8254(one)s 8660(may)s 0 5091(ha)m 4(v)k 3(e)k
+514(footnotes)s 1468(within)s 2149(\207gures)s 2864(within)s 3546(the)s
+3907(body)s 4454(te)s 3(xt)k 4882(g)s 1(alle)k 3(y)k 15(,)k
+5568(for)s 5919(e)s 3(xample,)k 6846(creating)s 7681(arbitrary)s
+8570(static)s 0 4803(trees.)m 649(Recepti)s 6(v)k 3(e)k
+1688(symbols)s 2573(lik)s 2(e)k 220 fnt35 3021 4800(@F)m 6(ootPlace)k
+240 fnt82 4313 4803(may)m 4815(appear)s 5548(within)s 6252(an)s 3(y)k
+6685(g)s 1(alle)k 3(y)k 15(,)k 7393(creating)s
+8251(arbitrary)s 0 4515(dynamic)m 912(trees)s 1449(as)s 1734(well.)s
+2345(The)s 2808(root)s 3289(of)s 3595(the)s 3979(dynamic)s
+4891(tree,)s 5391(which)s 6068(w)s 2(ould)k 6759(normally)s
+7711(consist)s 8471(of)s 8778(the)s 0 4227(sequence)m 959(of)s
+1257(pages)s 1880(of)s 2178(the)s 2553(complete)s 3512(assembled)s
+4593(document,)s 5671(is)s 5908(considered)s 7029(to)s 7295(be)s
+7604(a)s 7797(g)s 1(alle)k 3(y)k 8458(whose)s
+0 3939(point)m 563(of)s 845(appearance)s 1987(is)s 2208(the)s
+2567(output)s 3250(\207le.)s 3730(Points)s 4390(of)s 4672(appearance)s
+5814(may)s 6291(be)s 220 fnt35 6584 3936(preceding)m 240 fnt82
+7606 3939(or)m 220 fnt35 7876 3936(f)m 6(ollo)k 3(wing)k
+240 fnt82 8778 3939(the)m 0 3651(in)m 9(v)k 4(ocation)k
+1054(point;)s 1658(entries)s 2345(in)s 2588(tables)s 3196(of)s
+3467(contents)s 4315(are)s 4662(the)s 5010(main)s 5545(users)s
+6087(of)s 220 fnt35 6358 3648(preceding)m 240 fnt82 7309 3651(.)m
+480 3277(The)m 913(g)s 1(alle)k 3(y)k 1552(abstraction)s
+2662(is)s 2877(adequate)s 3788(for)s 4131(all)s 4429(of)s
+4706(the)s 5059(applications)s 6270(listed)s 6850(at)s 7087(the)s
+7440(be)s 3(ginning)k 8453(of)s 8730(this)s 0 2989(section,)m
+808(e)s 3(xcept)k 1514(that)s 1957(there)s 2515(is)s
+2749(no)s 3067(pro)s 3(vision)k 4050(for)s 4413(sorting)s
+5155(inde)s 3(x)k 5763(entries)s 6475(and)s 6904(references.)s
+8073(Sorting)s 8855(of)s 0 2701(g)m 1(alle)k 3(ys)k
+715(has)s 1075(been)s 1574(added)s 2194(to)s 2423(Lout)s
+2925(as)s 3165(a)s 3321(b)s 4(uilt-in)k 4068(feature,)s
+4827(in)s 9(v)k 4(ok)k 2(ed)k 5632(by)s
+5916(adding)s 6611(a)s 6767(special)s 220 fnt35 7475 2698(@K)m 8(e)k 4(y)k
+240 fnt82 8112 2701(parameter)m 0 2413(to)m 227(the)s 563(g)s 1(alle)k 3(ys,)k
+1330(and)s 1722(using)s 2281(its)s 2545(v)s 6(alue)k
+3100(as)s 3338(the)s 3673(sort)s 4079(k)s 2(e)k 3(y)k 15(.)k
+4556(The)s 4972(author)s 5631(w)s 2(as)k 6039(at)s
+6259(a)s 6412(loss)s 6823(to)s 7049(\207nd)s 7468(an)s 3(y)k
+7852(other)s 8391(w)s 2(ay)k 15(,)k 8867(or)s
+0 2125(an)m 3(y)k 397(useful)s 1036(generalization)s 2446(of)s
+2717(this)s 3113(feature.)s 3939(Its)s 4228(implementation)s 5785(will)s
+6211(be)s 6493(discussed)s 7468(in)s 7711(Section)s 8485(6.2.)s
+240 fnt84 0 1476(5.2.)m 471(The)s 926(galley)s 1580(\210ushing)s
+2447(algorithm)s 240 fnt82 480 999(Galle)m 3(y)k 1177(components)s
+2395(are)s 2751(promoted)s 3736(one)s 4148(by)s 4451(one)s
+4863(into)s 5298(the)s 5655(point)s 6217(of)s 6498(appearance)s
+7638(in)s 7891(the)s 8249(dynamic)s 0 711(parent)m 672(g)s 1(alle)k 3(y)k 15(,)k
+1359(then)s 1843(carried)s 2579(along)s 3179(with)s 3676(it,)s
+3931(ultimately)s 4968(to)s 5222(the)s 5586(root)s 6046(g)s 1(alle)k 3(y)k
+6695(and)s 7115(the)s 7478(output)s 8165(\207le.)s 8650(This)s
+0 423(process)m 800(is)s 1042(called)s 240 fnt83 1703 425(galle)m 7(y)k
+2368(\210ushing)s 240 fnt82 3121 423(:)m 3259(the)s 3640(g)s 1(alle)k 3(ys)k
+4396(are)s 4775(ri)s 6(v)k 3(ers)k 5393(running)s
+6223(together)s 7098(to)s 7370(the)s 7750(sea,)s 8194(and)s
+8631(each)s 0 135(component)m 1124(is)s 1334(a)s 1500(drop)s
+1992(of)s 2263(w)s 2(ater)k 13(.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 25 26
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4292 13841(-)m 4420(25)s 4706(-)s 480 13250(Here)m 1057(is)s
+1324(a)s 1547(snapshot)s 2502(of)s 2830(a)s 3053(small)s
+3682(dynamic)s 4616(tree,)s 5137(based)s 5797(on)s 6151(the)s
+220 fnt35 6556 13247(@P)m 8(ageList)k 240 fnt82 7737 13250(de\207nitions)m
+8855(of)s 0 12962(Section)m 774(3.2:)s 6982 3257 0 3257 240 288 60 480 9414 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+200 fnt83 0 3121(output)m
+563(\207le)s gsave
+860 0 translate
+240 fnt82 0 3257 0 3165 240 288 60 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+0 0 0 0 240 288 60 0 3165 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(A) lfigpromotelabels
+grestore
+1994(r)s 9(oot)k 2370(galle)s 6(y)k
+gsave
+1994 2967 translate
+240 fnt82 1927 0 0 0 240 288 60 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+0 0 0 0 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(B) lfigpromotelabels
+grestore
+gsave
+1994 473 translate
+240 fnt82 1927 2494 0 2494 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82 845 2216(-)m 931(1)s 1035(-)s 410 2000(A)m
+563(small)s 140 fnt35 170 1784(@Galle)m 2(y)k 160 fnt82
+743(*)s 904 1617 5 1545 160 180 40 853 275 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+10 10 5 5 160 180 40 0 1540 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(C) lfigpromotelabels
+grestore
+140 fnt35 170 173(@F)m 4(ootSect)k
+grestore
+gsave
+1994 0 translate
+240 fnt82 1927 473 170 237 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+140 fnt35
+170 201(@P)m 5(ageList 2)k
+grestore
+5055 2611(body)m 5490(te)s 4(xt)k
+gsave
+5055 1974 translate
+240 fnt82 1927 483 170 240 240 288 60 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+1927 483 170 240 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+160 fnt82 170 204(paragraph)m
+grestore
+(D) lfigpromotelabels
+grestore
+gsave
+5055 1524 translate
+240 fnt82 1927 450 170 207 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+160 fnt82 170 171(of)m 351(te)s 2(xt.)k
+
+grestore
+gsave
+5055 1034 translate
+240 fnt82 1927 490 170 244 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+160 fnt35 170 203(@Input)m
+grestore
+gsave
+0 0 translate
+240 fnt82 0 0 0 0 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ B@W lfigprevious /FROM lfigpointdef
+A@E lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 0 0 0 0 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ D@W lfigprevious /FROM lfigpointdef
+C@E lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+0 8963(The)m 472(components)s 1724(of)s
+2039(the)s 2431(body)s 3009(te)s 3(xt)k 3468(g)s 1(alle)k 3(y)k
+4146(are)s 4537(lines,)s 5139(e)s 3(xcept)k 5864(for)s
+6246(the)s 6638(special)s 7400(recepti)s 6(v)k 3(e)k
+8366(symbol)s 220 fnt35 0 8672(@Input)m 240 fnt82 759 8675(which)m
+1393(is)s 1595(a)s 1753(placeholder)s 2920(for)s 3249(as)s
+3491(yet)s 3835(unread)s 4536(input)s 5080(\(Section)s 5924(5.4\).)s
+6459(The)s 6879(components)s 8079(of)s 8342(the)s 8681(root)s
+0 8387(g)m 1(alle)k 3(y)k 646(are)s 1006(pages,)s
+1671(e)s 3(xcept)k 2364(for)s 2715(the)s 3076(concluding)s
+4205(une)s 3(xpanded)k 5431(in)s 9(v)k 4(ocation)k
+6498(of)s 220 fnt35 6781 8384(@P)m 8(ageList)k 240 fnt82
+7845 8387(,)m 7965(which)s 8620(is)s 8843(an)s 0 8099(ine)m 3(xhaustible)k
+1328(source)s 2008(of)s 2279(more)s 2826(pages,)s 3478(e)s 3(xpanded)k
+4451(on)s 4748(demand.)s 480 7725(The)m 923(concrete)s 1804(data)s
+2277(structure)s 3184(used)s 3696(by)s 4006(Basser)s 4718(Lout)s
+5246(permits)s 6028(the)s 6392(g)s 1(alle)k 3(y)k
+7041(\210ushing)s 7882(algorithm)s 8887(to)s 0 7437(na)m 4(vig)k 1(ate)k
+861(the)s 1209(dynamic)s 2086(tree)s 2499(and)s 2903(\207nd)s
+3334(signi\207cant)s 4390(features)s 5196(quickly:)s gsave
+480 78 translate
+200 fnt82 8081 7019 226 7019 200 288 50 LoutGraphic
+gsave
+grestore save gsave 100 dict begin lfigdict begin
+grestore
+980 7019 226 6704 200 288 50 0 0 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+980 585 226 270 200 288 50 0 6434 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 226(HEAD)m
+
+grestore
+(A) lfigpromotelabels
+grestore
+1927 588 226 273 200 288 50 1830 6431 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1631 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 229(RECEIVING)m 1306(*)s
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 6431 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 1830 5503 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1498 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 229(RECEPTIVE)m
+
+grestore
+(C) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 5503 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR C@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+C@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 0 0 0 200 288 50 1830 5163 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+0 0 0 0 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(D) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 5163 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR D@NW lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+D@NW lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 2494 0 2494 200 288 50 1830 2669 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82 845 2216(-)m 931(1)s 1035(-)s 410 2000(A)m
+563(small)s 1587 1611 0 1545 160 180 40 170 275 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+572 132 0 66 160 180 40 0 1479 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+140 fnt35 0 30(@Galle)m 2(y )k
+grestore
+(E) lfigpromotelabels
+grestore
+1587 105 0 39 160 180 40 170 170 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+731 105 0 39 160 180 40 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+140 fnt35
+0 3(@F)m 4(ootSect )k
+grestore
+(F) lfigpromotelabels
+grestore
+
+grestore
+0 0 0 0 200 288 50 1830 2669 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ B@E B@E 0 B@E E@E lfigydistance lfigpadd E@E ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+0 0 0 0 200 288 50 1830 2669 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ C@E C@E 0 C@E F@E lfigydistance lfigpadd F@E ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 1830 1741 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+839 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 229(GAP)m
+grestore
+(C) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 1741 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR C@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+C@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 1830 813 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1498 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83
+226 229(RECEPTIVE)m
+grestore
+(C) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 813 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR C@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+C@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 473 170 237 200 288 50 1830 0 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1927 473 170 237 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+140 fnt35 170 201(@P)m 5(ageList 2)k
+grestore
+(D) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 1830 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR D@NW lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+D@NW lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+0 0 0 0 200 288 50 1830 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ C@E C@E 0 C@E D@W 1.8 cm 0 lfigpadd lfigydistance lfigpadd D@W 1.8 cm 0 lfigpadd ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+980 7019 226 6704 200 288 50 4324 0 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+980 585 226 270 200 288 50 0 6434 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83
+226 226(HEAD)m
+grestore
+(A) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 5304 6704 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ B@E lfigprevious /FROM lfigpointdef
+A@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 483 170 240 200 288 50 6154 6536 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1927 483 170 240 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+160 fnt82 170 204(paragraph)m
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 6536 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 6154 5608 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+839 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 229(GAP)m
+
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 5608 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 450 170 207 200 288 50 6154 4818 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1927 450 170 207 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+160 fnt82 170 171(of)m 351(te)s 2(xt.)k
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 4818 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@NW lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@NW lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 6154 3890 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+839 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83
+226 229(GAP)m
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 3890 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 588 226 273 200 288 50 6154 2962 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1498 588 226 273 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+200 fnt83 226 229(RECEPTIVE)m
+grestore
+(B) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 2962 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR B@W lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+B@W lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+1927 471 170 235 200 288 50 6154 2151 LoutGr2
+currentdict end 100 dict begin begin
+grestore
+1927 471 170 235 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+140 fnt35 170 199(@Input)m
+
+grestore
+(C) lfigpromotelabels
+grestore
+0 0 0 0 200 288 50 6154 2151 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@CTR A@CTR C@NW lfigangle A@CIRCUM lfigpadd lfigprevious /FROM lfigpointdef
+C@NW lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+0 0 0 0 200 288 50 6154 2151 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ B@E B@E 0 B@E C@W 1.2 cm 0 lfigpadd lfigydistance lfigpadd C@W 1.2 cm 0 lfigpadd ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 26 27
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13842(-)m 4416(26)s 4709(-)s 0 13251(Each)m 521(g)s 1(alle)k 3(y)k
+1140(has)s 1495(a)s 240 fnt83 1647 13253(HEAD)m 240 fnt82
+2325 13251(node)m 2832(whose)s 3485(children)s 4311(are)s 4643(its)s
+4904(component)s 6013(objects,)s 6783(separated)s 7728(by)s 240 fnt83
+8007 13253(GAP)m 240 fnt82 8516 13251(nodes)m 0 12963(recording)m 969(the)s
+1317(inter)s 4(-component)k 2953(g)s 1(aps.)k 480 12589(Each)m
+1026(component)s 2161(is)s 2383(preceded)s 3315(by)s 3621(zero)s
+4096(or)s 4367(more)s 240 fnt83 4925 12591(galle)m 7(y)k
+5569(inde)s 4(x)k 6155(nodes)s 240 fnt82 6780 12589(of)m
+7063(v)s 6(arious)k 7823(types.)s 8504(Ev)s 3(ery)k
+0 12301(recepti)m 6(v)k 3(e)k 922(symbol)s 1681(has)s
+2051(a)s 240 fnt83 2216 12303(RECEPTIVE)m 240 fnt82 3529 12301(inde)m 3(x)k
+4112(pointing)s 4963(to)s 5201(it,)s 5440(so)s 5705(that)s
+6123(it)s 6314(can)s 6703(be)s 6984(found)s 7601(without)s
+8391(search)s 8998(-)s 0 12013(ing)m 355(through)s 1152(its)s
+1423(component.)s 2646(If)s 2871(the)s 3215(symbol)s 3970(is)s
+4175(currently)s 5086(the)s 5429(tar)s 4(get)k 6023(of)s
+6290(a)s 6451(g)s 1(alle)k 3(y)k 15(,)k
+7118(it)s 7305(has)s 7670(a)s 240 fnt83 7831 12015(RECEIVING)m
+240 fnt82 0 11725(inde)m 3(x)k 595(instead)s 1342(which)s
+1995(is)s 2217(also)s 2667(link)s 2(ed)k 3332(to)s
+3583(the)s 3942(incoming)s 4911(g)s 1(alle)k 3(y)k 15(.)k
+5652(Galle)s 3(ys)k 6441(that)s 6871(are)s 7229(currently)s
+8157(without)s 8960(a)s 0 11437(tar)m 4(get)k 586(are)s
+920(link)s 2(ed)k 1560(to)s 1786(the)s 2120(dynamic)s
+2984(tree)s 3383(by)s 240 fnt83 3664 11439(UN)m 6(A)k 8(TT)k 12(A)k 7(CHED)k
+240 fnt82 5215 11437(g)m 1(alle)k 3(y)k 5836(inde)s 3(x)k 3(es,)k
+6654(either)s 7244(just)s 7635(after)s 8118(their)s 8601(most)s
+0 11149(recent)m 643(tar)s 4(get)k 1242(if)s 1459(there)s
+1992(has)s 2362(been)s 2871(one,)s 3324(or)s 3583(else)s
+4010(at)s 4242(their)s 4739(point)s 5291(of)s 5562(in)s 9(v)k 4(ocation.)k
+480 10775(Each)m 1041(g)s 1(alle)k 3(y)k 1701(should)s
+2424(be)s 2732(thought)s 3550(of)s 3847(as)s 4123(a)s
+4315(concurrent)s 5423(process,)s 6273(although)s 7194(the)s 7569(implementation)s
+0 10487(in)m 268(C)s 506(uses)s 995(coroutines)s 2067(implemented)s
+3399(by)s 3719(procedures.)s 4957(A)s 5213(g)s 1(alle)k 3(y)k
+5873(may)s 6364(promote)s 7243(its)s 7545(\207rst)s 8002(component)s
+0 10199(only)m 499(if)s 735(it)s 946(has)s 1335(a)s
+1520(tar)s 4(get,)k 2185(suf\207cient)s 3153(space)s 3759(is)s
+3988(a)s 4(v)k 6(ailable)k 4915(at)s 5166(the)s
+5533(tar)s 4(get)k 6151(to)s 6409(recei)s 6(v)k 3(e)k
+7164(the)s 7531(component,)s 8722(and)s 0 9911(the)m 349(component)s
+1475(contains)s 2325(no)s 2620(recepti)s 6(v)k 3(e)k
+3544(symbols.)s 4508(This)s 4986(last)s 5379(condition)s 6342(seems)s
+6979(to)s 7220(be)s 7504(the)s 7854(k)s 2(e)k 3(y)k
+8251(to)s 8492(g)s 1(alle)k 3(y)k 0 9623(synchronization:)m
+1722(it)s 1943(forces)s 2606(a)s 2801(bottom-up)s 3880(promotion)s
+4963(re)s 3(gime,)k 5759(pre)s 6(v)k 3(enting)k
+6855(pages)s 7480(from)s 8033(\210ushing)s 8887(to)s 0 9335(output)m
+672(before)s 1338(te)s 3(xt)k 1753(\210ushes)s 2469(into)s
+2894(them,)s 3479(for)s 3817(e)s 3(xample.)k 480 8961(Each)m
+1022(g)s 1(alle)k 3(y)k 1663(contains)s 2519(a)s
+2692(number)s 3490(of)s 3769(binary)s 4441(semaphores,)s 5685(sho)s 6(wn)k
+6369(as)s 6626(asterisks)s 7507(in)s 7757(our)s 8144(snapshots)s
+0 8673(when)m 583(set.)s 1019(At)s 1325(an)s 3(y)k
+1730(gi)s 6(v)k 3(en)k 2317(moment,)s 3215(a)s
+3389(g)s 1(alle)k 3(y)k 4030(process)s 4805(is)s
+5022(either)s 5633(running)s 6438(or)s 6704(else)s 7139(is)s
+7356(suspended)s 8419(on)s 8724(one)s 0 8385(of)m 269(its)s
+543(o)s 6(wn)k 1005(semaphores.)s 2296(The)s 240 fnt83
+2722 8387(HEAD)m 240 fnt82 3413 8385(node)m 3933(contains)s 4779(a)s
+4943(semaphore)s 6033(which)s 6673(is)s 6881(set)s 7204(when)s
+7778(the)s 8124(g)s 1(alle)k 3(y)k 8756(has)s
+0 8097(tried)m 499(to)s 742(\207nd)s 1177(a)s 1347(tar)s 4(get)k
+1950(and)s 2359(f)s 2(ailed.)k 3068(Each)s 3607(recepti)s 6(v)k 3(e)k
+4533(symbol)s 5297(has)s 5671(a)s 5842(semaphore)s 6938(which)s
+7584(is)s 7798(set)s 8127(when)s 8708(that)s 0 7809(symbol)m
+760(is)s 970(pre)s 6(v)k 3(enting)k 2037(the)s
+2385(\207rst)s 2816(component)s 3940(from)s 4464(being)s 5049(promoted.)s
+480 7435(F)m 3(or)k 859(e)s 3(xample,)k 1762(in)s
+1994(the)s 2331(snapshot)s 3218(at)s 3439(the)s 3776(be)s 3(ginning)k
+4773(of)s 5033(this)s 5418(section,)s 6191(the)s 6528(root)s
+6962(g)s 1(alle)k 3(y)k 7585(is)s 7784(suspended)s
+8829(on)s 0 7147(the)m 220 fnt35 351 7144(@Galle)m 4(y)k
+240 fnt82 1253 7147(symbol,)m 2069(b)s 4(ut)k 2435(the)s
+2787(te)s 3(xt)k 3205(g)s 1(alle)k 3(y)k
+3843(is)s 4057(running.)s 4970(It)s 5179(will)s 5608(suspend)s
+6442(on)s 6743(the)s 220 fnt35 7095 7144(@Input)m 240 fnt82
+7866 7147(symbol)m 8630(after)s 0 6859(the)m 348(\207rst)s 779(tw)s 2(o)k
+1189(components)s 2397(are)s 2744(promoted.)s 480 6485(Ev)m 3(ery)k
+1145(g)s 1(alle)k 3(y)k 240 fnt83 1822 6487(G)m
+240 fnt82 1995 6485(,)m 2145(be)s 2470(it)s 2705(a)s
+2914(list)s 3308(of)s 3623(pages,)s 4318(body)s 4895(te)s 3(xt,)k
+5400(a)s 5609(footnote,)s 6556(or)s 6858(whate)s 6(v)k 3(er)k 9(,)k
+7866(e)s 3(x)k 3(ecutes)k 8778(the)s 0 6197(follo)m 6(wing)k
+977(algorithm)s 1966(in)s 2209(parallel)s 2979(with)s 3461(e)s 6(v)k 3(ery)k
+4037(other)s 4588(g)s 1(alle)k 3(y:)k 0 5694(1.)m
+303(Initially)s 240 fnt83 1132 5696(G)m 240 fnt82 1384 5694(is)m
+1614(unattached.)s 2834(Search)s 3560(forw)s 2(ards)k 4478(or)s
+4756(backw)s 2(ards)k 5848(from)s 6392(its)s 240 fnt83
+6687 5696(UN)m 6(A)k 8(TT)k 12(A)k 7(CHED)k
+240 fnt82 8272 5694(inde)m 3(x)k 8876(as)s 0 5406(required,)m
+903(to)s 1142(\207nd)s 1573(a)s 1739(recepti)s 6(v)k 3(e)k
+2661(symbol)s 240 fnt83 3421 5408(S)m 240 fnt82 3602 5406(which)m
+4244(can)s 4633(e)s 3(xpand)k 5380(to)s 5619(re)s 6(v)k 3(eal)k
+6248(a)s 6414(tar)s 4(get)k 7013(for)s 240 fnt83
+7351 5408(G)m 240 fnt82 7524 5406(.)m 0 4903(2.)m 284(If)s
+514(no)s 240 fnt83 807 4905(S)m 240 fnt82 988 4903(can)m
+1377(be)s 1659(found,)s 2325(suspend)s 3155(on)s 3452(the)s
+3800(attachment)s 4908(semaphore.)s 6108(Resume)s 6935(later)s 7418(from)s
+7942(step)s 8380(1.)s 0 4400(3.)m 281(Expand)s 240 fnt83
+1068 4402(S)m 240 fnt82 1246 4400(to)m 1482(re)s 6(v)k 3(eal)k
+2107(the)s 2452(tar)s 4(get)k 3048(of)s 240 fnt83
+3316 4402(G)m 240 fnt82 3489 4400(.)m 3649(Preserv)s 3(e)k
+240 fnt83 4521 4402(S)m 240 fnt82 4642 4400(')m 13(s)k
+4849(semaphore)s 5938(by)s 6229(mo)s 3(ving)k 7007(it)s
+7196(to)s 7432(the)s 7777(\207rst)s 8204(recepti)s 6(v)k 3(e)k
+0 4112(symbol)m 760(within)s 1428(the)s 1776(e)s 3(xpansion)k
+2801(of)s 240 fnt83 3072 4114(S)m 240 fnt82 3193 4112(.)m
+0 3609(4.)m 295(Calculate)s 1264(the)s 1624(a)s 4(v)k 6(ailable)k
+2543(width)s 3156(and)s 3572(height)s 4241(at)s 4484(the)s
+4844(tar)s 4(get,)k 5501(and)s 5917(if)s 240 fnt83
+6145 3611(G)m 240 fnt82 6389 3609(is)m 6611(still)s 7034(a)s
+7211(pure)s 7704(parse)s 8275(tree,)s 8751(use)s 0 3321(the)m
+377(en)s 9(vironment)k 1667(attached)s 2550(to)s 240 fnt83
+2819 3323(G)m 240 fnt82 3081 3321(and)m 3515(the)s 3892(style)s
+4429(information)s 5643(from)s 6197(the)s 6574(tar)s 4(get)k
+7203(to)s 7471(e)s 6(v)k 6(aluate)k 240 fnt83
+8341 3323(G)m 240 fnt82 8603 3321(as)m 8883(in)s 0 3033(Section)m
+774(4.)s 0 2577(5.)m 284(Examine)s 1190(the)s 1538(components)s
+2746(of)s 240 fnt83 3017 2579(G)m 240 fnt82 3250 2577(one)m
+3652(by)s 3946(one.)s 4456(F)s 3(or)k 4845(each)s
+5340(component)s 6464(there)s 6997(are)s 7344(three)s 7877(possibilities:)s
+240 fnt83 480 2205(A)m 7(CCEPT)k 17(.)k 240 fnt82
+1513 2203(If)m 1756(the)s 2116(component)s 3253(\207ts)s 3609(into)s
+4046(the)s 4407(a)s 4(v)k 6(ailable)k 5328(space,)s
+5978(and)s 6395(has)s 6778(no)s 7083(other)s 7647(problems,)s
+8657(then)s 0 1915(promote)m 875(it)s 1090(into)s 1538(the)s
+1909(tar)s 4(get.)k 2635(If)s 2888(this)s 3306(is)s
+3539(the)s 3910(\207rst)s 4364(component)s 5511(promoted)s 6509(into)s
+6956(this)s 7375(tar)s 4(get,)k 8044(and)s 240 fnt83
+8471 1917(G)m 240 fnt82 8727 1915(is)m 8960(a)s 0 1627(forcing)m
+768(g)s 1(alle)k 3(y)k 1428(\(Section)s 2307(5.4\),)s
+2819(delete)s 3470(e)s 6(v)k 3(ery)k 4072(recepti)s 6(v)k 3(e)k
+5020(symbol)s 5806(preceding)s 6827(the)s 7201(tar)s 4(get)k
+7826(in)s 8095(the)s 8469(parent)s 0 1339(g)m 1(alle)k 3(y)k 15(.)k
+729(If)s 240 fnt83 959 1341(G)m 240 fnt82 1192 1339(is)m
+1402(the)s 1750(root)s 2195(g)s 1(alle)k 3(y)k 15(,)k
+2867(render)s 3537(the)s 3885(component)s 5009(on)s 5306(the)s
+5654(output)s 6326(\207le)s 6687(and)s 7091(dispose)s 7865(it;)s
+240 fnt83 480 967(REJECT)m 17(.)k 240 fnt82 1490 965(If)m
+1756(the)s 2140(component)s 3300(is)s 3546(too)s 3941(lar)s 4(ge)k
+4506(for)s 4880(the)s 5264(a)s 4(v)k 6(ailable)k
+6208(space,)s 6882(or)s 7177(a)s 240 fnt83 7379 967(FOLLO)m 12(WS)k
+240 fnt82 8542 965(inde)m 3(x)k 0 677(\(described)m 1043(belo)s 6(w\))k
+1740(forbids)s 2458(its)s 2723(promotion)s 3767(into)s 4182(this)s
+4568(tar)s 4(get,)k 5203(then)s 5662(detach)s 240 fnt83
+6333 679(G)m 240 fnt82 6556 677(from)m 7069(the)s 7407(tar)s 4(get.)k
+8100(If)s 8320(this)s 8705(w)s 2(as)k 0 389(the)m
+338(\207rst)s 758(component)s 1872(at)s 2093(this)s 2479(tar)s 4(get,)k
+240 fnt83 3114 391(S)m 240 fnt82 3284 389(has)m 3644(been)s
+4142(a)s 4298(complete)s 5219(f)s 2(ailure,)k 5936(so)s
+6191(undo)s 6713(step)s 7141(3)s 7294(\(Basser)s 8060(Lout)s
+8561(is)s 8760(not)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 27 28
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4291 13844(-)m 4419(27)s 4707(-)s 0 13255(able)m 454(to)s
+693(undo)s 1226(step)s 1664(4\);)s 1975(otherwise)s 2960(delete)s
+3586(the)s 3934(tar)s 4(get.)k 4637(Return)s 5345(to)s
+5584(step)s 6022(1)s 6177(and)s 6581(continue)s 7461(immediately;)s
+240 fnt83 480 12883(SUSPEND.)m 240 fnt82 1685 12881(If)m 1928(the)s
+2289(component)s 3426(contains)s 4287(a)s 4466(recepti)s 6(v)k 3(e)k
+5402(symbol,)s 6227(it)s 6432(cannot)s 7143(be)s 7438(promoted)s
+8426(yet.)s 8896(If)s 0 12593(this)m 392(symbol)s 1148(is)s
+1354(the)s 1697(tar)s 4(get)k 2292(of)s 2559(a)s
+2720(g)s 1(alle)k 3(y)k 3350(that)s 3764(w)s 2(as)k
+4180(written)s 4909(to)s 5144(an)s 5423(auxiliary)s 6321(\207le)s
+6678(on)s 6971(a)s 7132(pre)s 6(vious)k 7997(run,)s
+8419(read)s 8883(in)s 0 12305(that)m 427(g)s 1(alle)k 3(y)k
+1071(and)s 1484(\210ush)s 2017(it.)s 2322(Otherwise)s 3370(suspend)s
+4209(on)s 4516(the)s 4873(recepti)s 6(v)k 3(e)k
+5805(symbol')s 13(s)k 6729(semaphore;)s 7887(resume)s 8643(later)s
+0 12017(from)m 524(step)s 962(4.)s 0 11513(6.)m 284(T)s 16(erminate)k
+1305(when)s 1881(the)s 2229(g)s 1(alle)k 3(y)k
+2863(is)s 3073(empty)s 15(.)k 0 11010(At)m 354(v)s 6(arious)k
+1158(points)s 1850(in)s 2148(this)s 2599(algorithm,)s 3691(recepti)s 6(v)k 3(e)k
+4668(symbols)s 5572(\(and)s 6111(their)s 6663(semaphores\))s 7975(are)s
+8378(deleted)s 0 10722(in)m 273(the)s 652(dynamic)s 1560(parent)s
+2247(g)s 1(alle)k 3(y)k 15(,)k 2950(possibly)s
+3833(permitting)s 4911(it)s 5134(to)s 5404(resume)s 6180(\210ushing.)s
+7147(When)s 7807(this)s 8234(happens,)s 0 10434(Basser)m 701(Lout)s
+1218(resumes)s 2057(the)s 2410(parent)s 3071(immediately)s 4324(after)s
+240 fnt83 4825 10436(G)m 240 fnt82 5063 10434(suspends)m 5983(or)s
+6247(terminates.)s 7410(Also,)s 7974(whene)s 6(v)k 3(er)k
+8960(a)s 0 10146(component)m 1140(is)s 1366(promoted,)s 2406(an)s 3(y)k
+2819(child)s 3371(g)s 1(alle)k 3(ys)k 4111(connected)s
+5156(to)s 5411(it)s 5619(by)s 240 fnt83 5929 10148(UN)m 6(A)k 8(TT)k 12(A)k 7(CHED)k
+240 fnt82 7510 10146(inde)m 3(x)k 3(es)k 8302(must)s
+8844(be)s 0 9858(resumed,)m 918(since)s 1466(these)s 2014(g)s 1(alle)k 3(ys)k
+2739(may)s 3206(be)s 3490(able)s 3945(to)s 4185(\207nd)s
+4617(a)s 4784(tar)s 4(get)k 5384(no)s 6(w)k 15(.)k
+5942(A)s 6173(good)s 6712(e)s 3(xample)k 7576(of)s
+7848(this)s 8246(situation)s 0 9570(occurs)m 664(when)s 1228(a)s
+1382(line)s 1785(of)s 2044(body)s 2566(te)s 3(xt)k
+2969(with)s 3440(one)s 3830(or)s 4077(more)s 4613(footnotes)s
+5542(is)s 5740(promoted)s 6703(onto)s 7171(a)s 7325(page.)s
+7929(Basser)s 8614(Lout)s 0 9282(gi)m 6(v)k 3(es)k
+547(priority)s 1317(to)s 1556(such)s 2052(children,)s 2942(suspending)s
+240 fnt83 4073 9284(G)m 240 fnt82 4306 9282(while)m 4893(each)s
+5388(is)s 5598(gi)s 6(v)k 3(en)k 6178(a)s
+6344(chance)s 7064(to)s 7303(\210ush.)s 480 8908(Basser)m 1211(Lout)s
+1758(searches)s 2653(for)s 3025(the)s 3408(\207rst)s 3874(tar)s 4(get)k
+4507(of)s 240 fnt83 4813 8910(G)m 240 fnt82 5081 8908(only)m
+5595(in)s 5873(re)s 3(gions)k 6660(of)s 6965(the)s
+7348(dynamic)s 8260(tree)s 8708(that)s 0 8620(will)m 437(clearly)s
+1152(precede)s 1963(or)s 2233(follo)s 6(w)k 240 fnt83
+2917 8622(G)m 240 fnt82 3090 8620(')m 13(s)k 3312(in)s 9(v)k 4(ocation)k
+4378(point)s 4941(in)s 5196(the)s 5556(\207nal)s 6047(printed)s
+6794(document,)s 7857(whiche)s 6(v)k 3(er)k 8916(is)s
+0 8332(speci\207ed)m 904(in)s 1142(the)s 220 fnt35 1486 8329(into)m
+240 fnt82 1887 8332(clause;)m 2591(subsequent)s 3711(tar)s 4(gets)k
+4389(are)s 4731(sought)s 5426(later)s 5904(in)s 6142(the)s
+6486(same)s 7028(g)s 1(alle)k 3(y)k 7657(as)s
+7903(the)s 8246(\207rst.)s 8776(An)s 0 8044(e)m 3(xception)k
+982(to)s 1219(this)s 1613(rule,)s 2089(whose)s 2755(necessity)s
+3683(will)s 4107(be)s 4387(made)s 4959(clear)s 5480(later)s 9(,)k
+5999(is)s 6207(that)s 6623(a)s 6787(\207rst)s 220 fnt35
+7216 8041(f)m 6(ollo)k 3(wing)k 240 fnt82 8104 8044(tar)m 4(get)k
+8700(will)s 0 7756(be)m 282(sought)s 981(within)s 1649(a)s
+1815(dynamic)s 2692(sibling)s 3396(g)s 1(alle)k 3(y)k
+4030(preceding)s 240 fnt83 5026 7758(G)m 240 fnt82 5199 7756(')m 13(s)k
+5409(in)s 9(v)k 4(ocation)k 6463(point:)s gsave
+480 2770 translate
+200 fnt82 5379 4646 0 4646 200 288 50 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+200 fnt83
+0 4510(dynamic)m 722(par)s 7(ent)k gsave
+0 1353 translate
+200 fnt82 2039 3003 226 2777 200 288 50 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1587 171 0 86 200 288 50 226 2323 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+796 171 0 86 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+180 fnt35 0 40(@XT)m 21(arget)k
+
+grestore
+(A) lfigpromotelabels
+grestore
+1587 136 0 47 200 288 50 226 1620 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+1254 136 0 47 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+200 fnt83 0 3(UN)m 5(A)k 7(TT)k 10(A)k 6(CHED)k
+
+grestore
+(C) lfigpromotelabels
+grestore
+180 fnt35 226 752(@XT)m 21(arget)k
+grestore
+gsave
+2889 4135 translate
+200 fnt82 2490 171 0 86 200 288 50 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+2450 171 0 86 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+180 fnt35 0 40(X into { @XT)m 21(arget&&f)k 5(ollo)k 2(wing })k
+
+grestore
+(B) lfigpromotelabels
+grestore
+gsave
+2889 2720 translate
+200 fnt82 2039 1302 226 1076 200 288 50 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+180 fnt35 226 492(@GT)m 21(arget)k
+grestore
+gsave
+2889 1982 translate
+200 fnt82 2490 171 0 86 200 288 50 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+2490 171 0 86 200 288 50 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+180 fnt35 0 40(G into { @GT)m 21(arget&&f)k 5(ollo)k 2(wing })k
+
+grestore
+(D) lfigpromotelabels
+grestore
+gsave
+2889 0 translate
+200 fnt82 2039 1869 226 1643 200 288 50 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+gsave
+0 0 translate
+200 fnt82 0 0 0 0 200 288 50 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@E 0.2 cm 0 lfigpadd lfigprevious /FROM lfigpointdef
+0.2 cm 0 B@W lfigpsub lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+gsave
+0 0 translate
+200 fnt82 0 0 0 0 200 288 50 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ C@E 0.2 cm 0 lfigpadd lfigprevious /FROM lfigpointdef
+0.2 cm 0 D@W lfigpsub lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+0 2319(Here)m 240 fnt83 524 2321(G)m 240 fnt82 762 2319(will)m
+1193(\207nd)s 1629(the)s 220 fnt35 1982 2316(@GT)m 26(arget)k
+240 fnt82 3045 2319(tar)m 4(get)k 3649(within)s 240 fnt83
+4322 2321(X)m 240 fnt82 4478 2319(.)m 4647(This)s 5128(is)s
+5343(dangerous,)s 6439(since)s 6991(if)s 7213(the)s 7566(\207rst)s
+8002(component)s 0 2031(of)m 240 fnt83 303 2033(G)m 240 fnt82
+568 2031(is)m 811(then)s 1312(promoted)s 2320(via)s 240 fnt83
+2704 2033(X)m 240 fnt82 2952 2031(into)m 3410(the)s 3790(\207rst)s
+220 fnt35 4254 2028(@XT)m 26(arget)k 240 fnt82 5319 2031(rather)m
+5967(than)s 6469(into)s 6926(the)s 7307(second,)s 240 fnt83
+8111 2033(G)m 240 fnt82 8284 2031(')m 13(s)k 8527(tar)s 4(get)k
+0 1743(will)m 438(not)s 817(appear)s 1526(later)s 2022(in)s
+2277(the)s 2638(\207nal)s 3130(printed)s 3878(document)s 4894(than)s
+5376(its)s 5664(in)s 9(v)k 4(ocation)k 6731(point,)s
+7342(as)s 7605(required)s 8471(by)s 8778(the)s 220 fnt35
+0 1452(into)m 240 fnt82 406 1455(clause.)m 480 1081(Accordingly)m 15(,)k
+1753(when)s 2313(such)s 2794(a)s 2944(tar)s 4(get)k
+3528(is)s 3722(chosen,)s 4478(tw)s 2(o)k 4873(special)s
+5575(g)s 1(alle)k 3(y)k 6194(inde)s 3(x)k 3(es)k
+6954(are)s 7286(inserted)s 8084(and)s 8472(link)s 2(ed)k
+0 793(together:)m 898(a)s 240 fnt83 1074 795(PRECEDES)m 240 fnt82
+2327 793(inde)m 3(x)k 2921(at)s 240 fnt83 3163 795(G)m
+240 fnt82 3336 793(')m 13(s)k 3555(in)s 9(v)k 4(ocation)k
+4619(point,)s 5227(and)s 5641(a)s 240 fnt83 5817 795(FOLLO)m 12(WS)k
+240 fnt82 6952 793(inde)m 3(x)k 7546(at)s 7787(the)s
+8145(\207rst)s 8586(com)s 8998(-)s 0 505(ponent)m 720(of)s
+240 fnt83 1000 507(G)m 240 fnt82 1173 505(.)m 1346(The)s
+1783(algorithm)s 2781(checks)s 3492(before)s 4167(promoting)s 5226(an)s 3(y)k
+240 fnt83 5632 507(FOLLO)m 12(WS)k 240 fnt82 6767 505(inde)m 3(x)k
+7360(that)s 7787(its)s 8072(promotion)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 28 29
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4291 13844(-)m 4419(28)s 4706(-)s 0 13253(w)m 2(ould)k
+661(not)s 1033(place)s 1600(it)s 1798(earlier)s 2472(than)s
+2948(the)s 3302(corresponding)s 240 fnt83 4730 13255(PRECEDES)m 240 fnt82
+5981 13253(inde)m 3(x)k 6571(in)s 6820(the)s 7175(same)s
+7728(g)s 1(alle)k 3(y)k 15(,)k 8406(and)s
+8817(re)s 8998(-)s 0 12965(jects)m 486(the)s 831(component)s
+1952(if)s 2166(it)s 2355(w)s 2(ould.)k 3113(Since)s
+240 fnt83 3697 12967(PRECEDES)m 240 fnt82 4939 12965(and)m 240 fnt83
+5340 12967(FOLLO)m 12(WS)k 240 fnt82 6463 12965(inde)m 3(x)k 3(es)k
+7236(are)s 7580(rarely)s 8187(used,)s 8730(this)s 0 12677(check)m
+619(can)s 1008(be)s 1290(implemented)s 2596(by)s 2890(linear)s
+3493(search.)s 480 12303(When)m 1114(tw)s 2(o)k 1529(components)s
+2742(are)s 3094(separated)s 4060(by)s 220 fnt35 4359 12300(/)m
+240 fnt82 4423 12303(,)m 4535(as)s 4790(opposed)s 5652(to)s
+5897(the)s 6250(more)s 6802(usual)s 220 fnt35 7367 12300(//)m
+240 fnt82 7492 12303(,)m 7604(each)s 8105(in\210uences)s 0 12015(the)m
+358(horizontal)s 1393(position)s 2232(of)s 2514(the)s 2872(other)s 13(.)k
+3525(Because)s 4389(of)s 4671(this,)s 5133(the)s 240 fnt83
+5492 12017(SUSPEND)m 240 fnt82 6596 12015(action)m 7248(is)s 7468(in)s
+7722(f)s 2(act)k 8148(tak)s 2(en)k 8732(if)s
+8960(a)s 0 11727(recepti)m 6(v)k 3(e)k 930(symbol)s
+1698(occurs)s 2382(in)s 2633(an)s 3(y)k 3039(component)s
+4171(separated)s 5140(from)s 5672(the)s 6028(\207rst)s 6468(by)s
+220 fnt35 6770 11724(/)m 240 fnt82 6903 11727(operators)m 7851(only)s 15(.)k
+8435(Ag)s 1(ain,)k 0 11439(linear)m 603(search)s 1270(forw)s 2(ards)k
+2168(to)s 2407(the)s 2755(\207rst)s 220 fnt35 3186 11436(//)m
+240 fnt82 3371 11439(suf\207ces)m 4152(for)s 4490(this)s 4886(check.)s
+480 11065(A)m 740(good)s 1308(illustration)s 2430(of)s 2731(these)s
+3308(unusual)s 4139(cases)s 4724(is)s 4964(af)s 6(forded)k
+5856(by)s 6180(the)s 220 fnt35 6558 11062(@Align)m 240 fnt82
+7344 11065(symbols)m 8223(from)s 8778(the)s 0 10777(standard)m 867(DocumentLayout)s
+2600(package.)s 3546(These)s 4171(are)s 4516(used)s 5012(to)s
+5249(produce)s 6074(displayed)s 7047(equations,)s 8069(aligned)s 8829(on)s
+0 10489(their)m 497(equals)s 1159(signs)s 1702(despite)s 2435(being)s
+3020(separated)s 3980(by)s 4274(arbitrary)s 5149(body)s 5683(te)s 3(xt.)k
+480 10115(The)m 220 fnt35 921 10112(@Align)m 240 fnt82 1689 10115(symbols)m
+2551(are)s 2911(packaged)s 3886(neatly)s 4537(for)s 4889(the)s
+5250(con)s 9(v)k 3(enience)k 6503(of)s 6787(the)s
+7148(non-e)s 3(xpert)k 8254(user)s 9(,)k 8764(b)s 4(ut)k
+0 9827(we)m 335(will)s 761(sho)s 6(w)k 1315(just)s
+1720(the)s 2067(essence)s 2853(of)s 3124(the)s 3472(implementation)s
+5029(here.)s 5603(First,)s 6147(an)s 220 fnt35 6430 9824(@AlignList)m
+240 fnt82 7536 9827(g)m 1(alle)k 3(y)k 8170(is)s
+8379(created)s 0 9539(which)m 642(contains)s 1490(an)s 1773(in\207nite)s
+2506(supply)s 3199(of)s 220 fnt35 3470 9536(@AlignPlace)m 240 fnt82
+4779 9539(recepti)m 6(v)k 3(e)k 5701(symbols)s 6550(separated)s
+7510(by)s 220 fnt35 7804 9536(/)m 240 fnt82 7928 9539(operators:)m
+4777 3207 0 3207 240 288 60 480 5992 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+240 fnt83 0 3044(body)m 522(te)s 4(xt)k 926(galle)s 7(y)k
+gsave
+0 161 translate
+240 fnt82 2039 2720 226 2494 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1587 1418 0 1314 240 288 60 226 226 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+838 208 0 104 240 288 60 0 1210 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+220 fnt35 0 47(@Galle)m 4(y)k
+grestore
+(A) lfigpromotelabels
+grestore
+
+grestore
+gsave
+2889 1638 translate
+240 fnt82 1888 209 0 105 240 288 60 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+1046 209 0 105 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+220 fnt35 0 48(@AlignList)m
+
+grestore
+(B) lfigpromotelabels
+grestore
+gsave
+2889 0 translate
+240 fnt82 1888 1525 226 1195 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+220 fnt35 226 1138(@AlignPlace)m 226 850(@AlignPlace)m 226 562(...)m 226 274(@EndAlignList)m
+
+grestore
+gsave
+0 0 translate
+240 fnt82 0 0 0 0 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@E 0.2 cm 0 lfigpadd lfigprevious /FROM lfigpointdef
+0.2 cm 0 B@W lfigpsub lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+0 5541(Then)m 549(equations)s 1517(lik)s 2(e)k 1471 214 393 105 240 288 60 480 4987 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1471 214 393 105 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1471 214 393 105 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark xsize ymark 0.3 cm 0 lfigpadd
+[]
+xmark -0.3 cm xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+240 fnt83
+0 53(f)m 240 fnt78 113 45(\()m 240 fnt83 197 53(x)m
+240 fnt78 315 45(\))m 477(=)s 240 fnt83 690 53(g)m
+240 fnt78 816 45(\()m 240 fnt83 900 53(x)m 240 fnt78
+1018 45(\))m 1156(+)s 1357(2)s
+grestore
+
+grestore
+end end restore
+grestore
+0 4536(are)m 358(created)s
+1117(and)s 1532(sent)s 1989(to)s 220 fnt35 2239 4533(@AlignPlace&&f)m 6(ollo)k 3(wing)k
+240 fnt82 4690 4536(tar)m 4(gets.)k 5498(The)s 3(y)k
+6052(collect)s 6760(in)s 7014(the)s 220 fnt35 7374 4533(@AlignList)m
+240 fnt82 8492 4536(g)m 1(alle)k 3(y)k 0 4248(and)m
+404(are)s 751(aligned)s 1513(there:)s 5836 3212 0 3212 240 288 60 480 696 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+240 fnt83 0 3049(body)m
+522(te)s 4(xt)k 926(galle)s 7(y)k gsave
+0 166 translate
+240 fnt82 2039 2720 226 2494 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1587 1418 0 1314 240 288 60 226 226 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+838 208 0 104 240 288 60 0 1210 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+220 fnt35
+0 47(@Galle)m 4(y)k
+grestore
+(A) lfigpromotelabels
+grestore
+
+grestore
+gsave
+2889 1643 translate
+240 fnt82 2947 209 0 105 240 288 60 LoutGraphic
+gsave
+currentdict end 200 dict begin begin
+grestore
+1046 209 0 105 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigbox ] lfigdopath
+pop pop
+grestore
+220 fnt35 0 48(@AlignList)m
+grestore
+(B) lfigpromotelabels
+grestore
+gsave
+2889 0 translate
+240 fnt82 2947 1530 1285 1195 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+2495 1078 1059 969 240 288 60 226 226 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ xmark ysize lfigprevious /FROM lfigpointdef
+xmark 0 lfigprevious /TO lfigpointdef ] lfigdopath
+pop pop
+grestore
+240 fnt83
+666 917(f)m 240 fnt78 779 909(\()m 240 fnt83 863 917(x)m
+240 fnt78 981 909(\))m 1143(=)s 240 fnt83 1356 917(g)m
+240 fnt78 1482 909(\()m 240 fnt83 1566 917(x)m 240 fnt78
+1684 909(\))m 1822(+)s 2023(2)s 240 fnt83 0 629(f)m
+240 fnt78 113 621(\()m 240 fnt83 197 629(x)m 240 fnt78
+315 621(\))m 453(-)s 240 fnt83 653 629(g)m 240 fnt78
+779 621(\()m 240 fnt83 863 629(x)m 240 fnt78 981 621(\))m
+1143(=)s 1356(2)s 220 fnt35 1059 336(...)m 1059 48(@EndAlignList)m
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 0 0 0 0 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ A@E 0.2 cm 0 lfigpadd lfigprevious /FROM lfigpointdef
+0.2 cm 0 B@W lfigpsub lfigprevious /TO lfigpointdef ] lfigdopath
+0.15 cm /lfigsolid /lfigblack
+lfigopen
+0.15 cm 0.05 cm lfigforward
+grestore
+
+grestore
+end end restore
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 29 30
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4289 13844(-)m 4417(29)s 4708(-)s 0 13251(The)m 220 fnt35
+450 13248(@AlignList)m 240 fnt82 1579 13251(g)m 1(alle)k 3(y)k
+2236(does)s 2749(not)s 3138(\210ush,)s 3734(because)s 4570(its)s
+4868(\207rst)s 5322(component)s 6469(is)s 6702(connected)s 7753(to)s
+8015(a)s 8204(recepti)s 6(v)k 3(e)k 0 12963(symbol)m
+760(by)s 220 fnt35 1054 12960(/)m 240 fnt82 1178 12963(operators.)m
+480 12589(After)m 1048(the)s 1402(last)s 1799(equation,)s 2736(an)s
+3025(empty)s 3683(forcing)s 4432(g)s 1(alle)k 3(y)k
+5072(is)s 5288(sent)s 5739(to)s 220 fnt35 5984 12586(@EndAlignList)m
+240 fnt82 7420 12589(,)m 7533(deleting)s 8362(the)s 8716(tw)s 2(o)k
+0 12301(remaining)m 1028(recepti)s 6(v)k 3(e)k 1957(symbols)s
+2813(from)s 3344(the)s 220 fnt35 3699 12298(@AlignList)m 240 fnt82
+4812 12301(g)m 1(alle)k 3(y)k 5452(and)s 5863(permitting)s
+6918(it)s 7117(to)s 7363(\210ush.)s 240 fnt83 8000 12303(FOLLO)m 12(WS)k
+240 fnt82 0 12013(inde)m 3(x)k 3(es)k 797(ensure)s
+1499(that)s 1939(each)s 2456(equation)s 3359(\207nds)s 3898(a)s
+4086(tar)s 4(get)k 4707(placed)s 5410(in)s 5675(the)s
+6045(body)s 6601(te)s 3(xt)k 7038(just)s 7465(after)s
+7983(its)s 8281(point)s 8855(of)s 0 11725(in)m 9(v)k 4(ocation,)k
+1090(so)s 1341(the)s 1675(equations)s 2628(return,)s 3290(aligned,)s
+4087(to)s 4311(approximately)s 5732(the)s 6065(points)s 6686(where)s
+7312(the)s 3(y)k 7760(were)s 8265(in)s 9(v)k 4(ok)k 2(ed.)k
+0 11437(Notice)m 703(that)s 1131(the)s 1489(\210ushing)s 2324(of)s
+2605(body)s 3149(te)s 3(xt)k 3574(is)s 3794(suspended)s
+4860(until)s 5363(the)s 5721(list)s 6082(of)s 6363(equations)s
+7341(is)s 7561(completed,)s 8674(as)s 8934(it)s 0 11149(must)m
+513(be,)s 833(since)s 1367(the)s 1702(horizontal)s 2713(position)s
+3528(of)s 3786(the)s 4121(\207rst)s 4539(equation)s 5407(cannot)s
+6092(be)s 6361(kno)s 6(wn)k 7052(until)s 7532(the)s
+7867(last)s 8245(equation)s 0 10861(is)m 210(added)s 840(to)s
+1079(the)s 1427(list.)s 480 10487(Layout)m 1262(quality)s 2025(can)s
+2459(occasionally)s 3753(be)s 4080(impro)s 3(v)k 3(ed)k
+5094(by)s 5433(rejecting)s 6366(a)s 6577(component)s 7746(that)s
+8209(could)s 8844(be)s 0 10199(promoted)m 978(\211)s 1161(for)s
+1502(e)s 3(xample,)k 2419(a)s 2588(component)s 3715(of)s
+3989(body)s 4526(te)s 3(xt)k 4944(that)s 5365(carries)s
+6054(a)s 6223(footnote)s 7079(too)s 7441(lar)s 4(ge)k
+7973(to)s 8215(\207t)s 8477(on)s 8778(the)s 0 9911(current)m
+747(page.)s 1374(Since)s 1972(Lout)s 2496(does)s 2997(not)s
+3374(specify)s 4130(ho)s 6(w)k 4602(breaking)s 5503(decisions)s
+6455(are)s 6814(made,)s 7450(be)s 3(yond)k 8222(the)s
+8582(basic)s 0 9623(constraints)m 1089(imposed)s 1961(by)s 2258(a)s 4(v)k 6(ailable)k
+3169(space)s 3759(and)s 220 fnt35 4166 9620(into)m 240 fnt82
+4575 9623(clauses,)m 5375(in)s 5621(principle)s 6529(such)s 7028(high)s
+7514(quality)s 8236(breaking)s 0 9335(could)m 592(be)s 877(added)s
+1510(to)s 1752(the)s 2102(implementation)s 3662(with)s 4147(no)s
+4443(change)s 5180(to)s 5421(the)s 5772(language.)s 6803(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+7766(the)s 8117(generality)s 0 9047(of)m 280(the)s 637(g)s 1(alle)k 3(y)k
+1280(\210ushing)s 2115(algorithm,)s 3160(and)s 3573(its)s 3859(already)s
+4625(considerable)s 5898(comple)s 3(xity)k 15(,)k 7073(mak)s 2(e)k
+7654(this)s 8059(a)s 8235(daunting)s 0 8759(problem)m 890(in)s
+1167(practice,)s 2062(although)s 2991(a)s 3190(f)s 2(ascinating)k
+4323(one.)s 4866(T)s 5008 8711(E)m 5151 8759(X)m 5414([9],)s
+5832(with)s 6348(its)s 6657(unnested)s 7600(set)s 7958(of)s
+8263(`\210oating)s 0 8471(insertions')m 1041(clearly)s 1744(identi\207able)s 2875(as)s
+3125(each)s 3620(page)s 4128(is)s 4338(be)s 3(gun,)k
+5028(has)s 5398(the)s 5746(adv)s 6(antage)k 6766(in)s
+7009(this)s 7405(respect.)s 240 fnt84 0 7822(5.3.)m 471(Size)s
+938(constraints)s 2120(and)s 2561(size)s 2988(adjustments)s 240 fnt82
+480 7346(The)m 893(g)s 1(alle)k 3(y)k 1512(\210ushing)s
+2321(algorithm)s 3295(needs)s 3876(to)s 4099(kno)s 6(w)k
+4665(the)s 4998(a)s 4(v)k 6(ailable)k 5890(width)s
+6477(and)s 6866(height)s 7508(at)s 7725(each)s 8204(recepti)s 6(v)k 3(e)k
+0 7058(symbol.)m 869(These)s 1496(symbols)s 2346(may)s 2812(lie)s
+3106(within)s 3775(arbitrarily)s 4782(comple)s 3(x)k 5659(objects,)s
+6443(and)s 6847(the)s 3(y)k 7311(may)s 7777(compete)s
+8644(with)s 0 6770(each)m 492(other)s 1040(for)s 1375(a)s 4(v)k 6(ailable)k
+2280(space)s 2864(\(as)s 3189(body)s 3720(te)s 3(xt)k
+4132(and)s 4533(footnote)s 5383(tar)s 4(gets)k 6062(do\),)s
+6485(so)s 6748(this)s 7141(information)s 8323(must)s 8844(be)s
+0 6482(e)m 3(xtracted)k 930(from)s 1454(the)s 1802(tree)s
+2215(structure)s 3106(when)s 3682(required.)s 480 6108(F)m 3(or)k
+869(e)s 3(xample,)k 1783(consider)s 2653(the)s 3001(object)s
+220 fnt35 480 5607(5i @Wide { a / b })m 240 fnt82 0 5113(and)m 406(suppose)s
+1236(that)s 1656(the)s 2006(width)s 2610(of)s 220 fnt35
+2883 5110(a)m 240 fnt82 3062 5113(is)m 240 fnt78 3274 5107(1)m
+240 fnt83 3382 5115(i)m 240 fnt78 3459 5107(,)m 3572(2)s
+240 fnt83 3700 5115(i)m 240 fnt82 3825 5113(\()m 240 fnt78
+3898 5107(1)m 240 fnt83 4006 5115(i)m 240 fnt82 4131 5113(to)m
+4372(the)s 4722(left)s 5101(of)s 5374(the)s 5724(mark,)s
+240 fnt78 6324 5107(2)m 240 fnt83 6452 5115(i)m 240 fnt82
+6577 5113(to)m 6818(the)s 7168(right\).)s 7864(What)s 8444(then)s
+8916(is)s 0 4825(the)m 348(a)s 4(v)k 6(ailable)k
+1256(width)s 1858(at)s 220 fnt35 2090 4822(b)m 240 fnt82
+2204 4825(?)m 2423(If)s 2653(we)s 2988(let)s 3286(the)s
+3634(width)s 4236(of)s 220 fnt35 4507 4822(b)m 240 fnt82
+4681 4825(be)m 240 fnt83 4963 4827(l)m 240 fnt78 5041 4819(,)m
+240 fnt83 5148 4827(r)m 240 fnt82 5246 4825(,)m 5353(we)s
+5688(must)s 6213(ha)s 4(v)k 3(e)k 240 fnt78
+480 4277(\()m 564(1)s 240 fnt83 670 4285(i)m 240 fnt78
+817 4277(\255)m 240 fnt83 1038 4285(l)m 240 fnt78 1116 4277(\))m
+1254(+)s 1455(\()s 1539(2)s 240 fnt83 1665 4285(i)m
+240 fnt78 1812 4277(\255)m 240 fnt83 2033 4285(r)m 240 fnt78
+2143 4277(\))m 2293(\243)s 2503(5)s 240 fnt83 2622 4285(i)m
+240 fnt82 0 3732(with)m 482(the)s 240 fnt78 842 3726(\255)m
+240 fnt82 1051 3732(\(i.e.)m 1466(max\))s 2006(operations)s 3053(arising)s
+3756(from)s 4280(mark)s 4832(alignment.)s 5952(Eliminating)s 7133(them)s
+7671(gi)s 6(v)k 3(es)k 240 fnt78 480 3180(1)m
+240 fnt83 586 3188(i)m 240 fnt78 721 3180(+)m 922(2)s
+240 fnt83 1048 3188(i)m 240 fnt78 1207 3180(\243)m 1417(5)s
+240 fnt83 1536 3188(i)m 583 2893(l)m 240 fnt78 721 2885(+)m
+922(2)s 240 fnt83 1048 2893(i)m 240 fnt78 1207 2885(\243)m
+1417(5)s 240 fnt83 1536 2893(i)m 240 fnt78 571 2597(1)m
+240 fnt83 677 2605(i)m 240 fnt78 812 2597(+)m 240 fnt83
+1013 2605(r)m 240 fnt78 1207 2597(\243)m 1417(5)s 240 fnt83
+1536 2605(i)m 674 2310(l)m 240 fnt78 812 2302(+)m 240 fnt83
+1013 2310(r)m 240 fnt78 1207 2302(\243)m 1417(5)s 240 fnt83
+1536 2310(i)m 240 fnt82 0 1799(and)m 428(since)s 1000(we)s
+1359(assume)s 2144(that)s 220 fnt35 2587 1796(a)m 240 fnt82
+2788 1799(\207ts)m 3156(into)s 3606(the)s 3978(a)s 4(v)k 6(ailable)k
+4911(space,)s 5573(the)s 5946(\207rst)s 6402(inequality)s 7436(may)s
+7927(be)s 8234(dropped,)s 0 1511(lea)m 4(ving)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 30 31
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4287 13844(-)m 4415(30)s 4710(-)s 240 fnt83 851 13205(l)m
+240 fnt78 1013 13197(\243)m 1223(3)s 240 fnt83 1340 13205(i)m
+480 12910(l)m 240 fnt78 618 12902(+)m 240 fnt83 819 12910(r)m
+240 fnt78 1013 12902(\243)m 1223(5)s 240 fnt83 1342 12910(i)m
+819 12622(r)m 240 fnt78 1013 12614(\243)m 1223(4)s 240 fnt83
+1348 12622(i)m 240 fnt82 0 12113(Object)m 220 fnt35 697 12110(b)m
+240 fnt82 871 12113(may)m 1337(ha)s 4(v)k 3(e)k
+1838(width)s 240 fnt83 2440 12115(l)m 240 fnt78 2518 12107(,)m
+240 fnt83 2625 12115(r)m 240 fnt82 2783 12113(for)m 3121(an)s 3(y)k
+240 fnt83 3518 12115(l)m 240 fnt82 3644 12113(and)m 240 fnt83
+4048 12115(r)m 240 fnt82 4206 12113(satisfying)m 5188(these)s 5735(inequalities,)s
+6943(and)s 7347(no)s 7640(others.)s 480 11739(Here)m 1000(is)s
+1210(another)s 1987(e)s 3(xample:)k 220 fnt35 480 11238(5i @High { a /2ix b })m
+240 fnt82 0 10737(Assuming)m 1024(that)s 220 fnt35 1442 10734(a)m
+240 fnt82 1619 10737(has)m 1989(height)s 240 fnt78 2647 10731(1)m
+240 fnt83 2753 10739(i)m 240 fnt78 2828 10731(,)m 2935(1)s
+240 fnt83 3041 10739(i)m 240 fnt82 3104 10737(,)m 3211(the)s
+3559(height)s 240 fnt83 4217 10739(l)m 240 fnt78 4295 10731(,)m
+240 fnt83 4402 10739(r)m 240 fnt82 4560 10737(of)m 220 fnt35
+4831 10734(b)m 240 fnt82 5005 10737(must)m 5530(satisfy)s 240 fnt78
+480 10179(1)m 240 fnt83 586 10187(i)m 240 fnt78 721 10179(+)m
+922(\()s 1006(\()s 1090(1)s 240 fnt83 1196 10187(i)m
+240 fnt78 1331 10179(+)m 240 fnt83 1532 10187(l)m 240 fnt78
+1610 10179(\))m 1760(\255)s 1981(2)s 240 fnt83 2107 10187(i)m
+240 fnt78 2182 10179(\))m 2320(+)s 240 fnt83 2521 10187(r)m
+240 fnt78 2703 10179(\243)m 2913(5)s 240 fnt83 3032 10187(i)m
+240 fnt82 0 9634(This)m 478(time)s 960(the)s 240 fnt78
+1325 9628(\255)m 240 fnt82 1539 9634(operation)m 2501(arises)s 3098(from)s
+3624(the)s 3975(mark-to-mark)s 5364(g)s 1(ap)k 5765(mode,)s
+6406(which)s 7050(will)s 7479(widen)s 8123(the)s 240 fnt78
+8474 9628(2)m 240 fnt83 8602 9636(i)m 240 fnt82 8728 9634(g)m 1(ap)k
+0 9346(if)m 217(necessary)s 1200(to)s 1439(pre)s 6(v)k 3(ent)k
+220 fnt35 2207 9343(a)m 240 fnt82 2384 9346(and)m 220 fnt35
+2788 9343(b)m 240 fnt82 2962 9346(from)m 3486(o)s 3(v)k 3(erlapping.)k
+4787(This)s 5263(inequality)s 6273(can)s 6662(be)s 6944(re)s 6(written)k
+7856(as)s 240 fnt83 851 8795(l)m 240 fnt78 1013 8787(\243)m
+288 fnt78 1223 8775(\245)m 240 fnt83 480 8504(l)m 240 fnt78
+618 8496(+)m 240 fnt83 819 8504(r)m 240 fnt78 1013 8496(\243)m
+1223(3)s 240 fnt83 1340 8504(i)m 819 8216(r)m 240 fnt78
+1013 8208(\243)m 1223(2)s 240 fnt83 1349 8216(i)m 240 fnt82
+0 7709(In)m 263(general,)s 1080(Lout)s 1599(is)s 1816(designed)s
+2732(so)s 3005(that)s 3430(the)s 3785(a)s 4(v)k 6(ailable)k
+4700(width)s 5309(or)s 5575(height)s 6240(at)s 6479(an)s 3(y)k
+6883(point)s 7442(can)s 7838(be)s 8128(e)s 3(xpressed)k
+0 7421(by)m 294(three)s 827(inequalities)s 1979(of)s 2250(the)s
+2598(form)s 240 fnt83 851 6870(l)m 240 fnt78 1013 6862(\243)m
+240 fnt83 1223 6870(x)m 480 6579(l)m 240 fnt78 618 6571(+)m
+240 fnt83 819 6579(r)m 240 fnt78 1013 6571(\243)m 240 fnt83
+1223 6579(y)m 819 6264(r)m 240 fnt78 1013 6256(\243)m 240 fnt83
+1223 6264(z)m 240 fnt82 0 5743(where)m 240 fnt83 641 5745(x)m
+240 fnt82 747 5743(,)m 240 fnt83 855 5745(y)m 240 fnt82
+1018 5743(and)m 240 fnt83 1423 5745(z)m 240 fnt82 1575 5743(may)m
+2042(be)s 288 fnt78 2325 5725(\245)m 240 fnt82 2523 5743(.)m
+2688(W)s 19(e)k 3058(abbre)s 6(viate)k 4104(these)s
+4652(three)s 5186(inequalities)s 6339(to)s 240 fnt83 6579 5745(l)m
+240 fnt78 6658 5737(,)m 240 fnt83 6768 5745(r)m 240 fnt78
+6953 5737(\243)m 240 fnt83 7166 5745(x)m 240 fnt78 7285 5737(,)m
+240 fnt83 7395 5745(y)m 240 fnt78 7510 5737(,)m 240 fnt83
+7620 5745(z)m 240 fnt82 7711 5743(,)m 7819(and)s 8224(we)s
+8560(call)s 240 fnt83 8960 5745(x)m 240 fnt78 0 5449(,)m
+240 fnt83 107 5457(y)m 240 fnt78 221 5449(,)m 240 fnt83
+328 5457(z)m 240 fnt82 479 5455(a)m 240 fnt83 645 5457(size)m
+1056(constr)s 3(aint)k 240 fnt82 2027 5455(.)m 480 5081(The)m
+920(tw)s 2(o)k 1343(e)s 3(xamples)k 2307(abo)s 3(v)k 3(e)k
+2942(sho)s 6(wed)k 3739(ho)s 6(w)k 4213(to)s
+4465(propag)s 1(ate)k 5475(the)s 5836(size)s 6276(constraint)s
+288 fnt78 7291 5063(\245)m 240 fnt78 7514 5075(,)m 7659(5)s
+240 fnt83 7791 5083(i)m 240 fnt78 7879 5075(,)m 288 fnt78
+8025 5063(\245)m 240 fnt82 8296 5081(for)m 220 fnt35 8647 5078(a / b)m
+240 fnt82 0 4793(do)m 6(wn)k 586(one)s 991(le)s 6(v)k 3(el)k
+1504(to)s 1746(the)s 2097(child)s 220 fnt35 2636 4790(b)m
+240 fnt82 2750 4793(.)m 2917(Basser)s 3617(Lout)s 4132(contains)s
+4982(a)s 5151(complete)s 6086(set)s 6414(of)s 6688(general)s
+7449(rules)s 7967(for)s 8308(all)s 8604(node)s 0 4505(types,)m
+627(too)s 1002(complicated)s 2244(to)s 2499(gi)s 6(v)k 3(e)k
+2974(here.)s 3565(Instead,)s 4378(we)s 4729(gi)s 6(v)k 3(e)k
+5203(just)s 5624(one)s 6042(e)s 3(xample)k 6921(of)s
+7208(ho)s 6(w)k 7685(these)s 8248(rules)s 8779(are)s
+0 4217(deri)m 6(v)k 3(ed,)k 815(using)s 1387(the)s
+1735(object)s 240 fnt83 480 3721(x)m 168 fnt78 586 3628(1)m
+220 fnt35 772 3716(/)m 240 fnt83 956 3721(x)m 168 fnt78
+1062 3628(2)m 220 fnt35 1262 3716(/)m 240 fnt83 1446 3721(.)m
+1552(.)s 1658(.)s 220 fnt35 1812 3716(/)m 240 fnt83
+1996 3721(x)m 168 fnt83 2102 3634(n)m 240 fnt82 0 3175(where)m
+240 fnt83 640 3177(x)m 168 fnt83 746 3090(j)m 240 fnt82
+852 3175(has)m 1222(width)s 240 fnt83 1824 3177(l)m 168 fnt83
+1890 3090(j)m 240 fnt78 1948 3169(,)m 240 fnt83 2055 3177(r)m
+168 fnt83 2127 3090(j)m 240 fnt82 2233 3175(for)m 2571(all)s
+240 fnt83 2864 3177(j)m 240 fnt82 2930 3175(.)m 480 2801(Suppose)m
+1345(the)s 1689(whole)s 2326(object)s 2966(has)s 3333(width)s
+3931(constraint)s 240 fnt83 4929 2803(X)m 240 fnt78 5097 2795(,)m
+240 fnt83 5204 2803(Y)m 240 fnt78 5367 2795(,)m 240 fnt83
+5474 2803(Z)m 240 fnt82 5619 2801(,)m 5722(and)s 6123(we)s
+6454(require)s 7182(the)s 7526(width)s 8124(constraint)s 0 2513(of)m
+240 fnt83 271 2515(x)m 168 fnt83 377 2428(i)m 240 fnt82
+421 2513(.)m 586(Let)s 240 fnt83 965 2515(L)m 240 fnt78
+1185 2507(=)m 240 fnt82 1401 2513(max)m 168 fnt83 1808 2428(j)m
+240 fnt83 1917 2515(l)m 168 fnt83 1983 2428(j)m 240 fnt82
+2090 2513(and)m 240 fnt83 2495 2515(R)m 240 fnt78 2723 2507(=)m
+240 fnt82 2939 2513(max)m 168 fnt83 3346 2428(j)m 240 fnt83
+3455 2515(r)m 168 fnt83 3527 2428(j)m 240 fnt82 3573 2513(,)m
+3681(so)s 3948(that)s 240 fnt83 4367 2515(L)m 240 fnt78
+4512 2507(,)m 240 fnt83 4619 2515(R)m 240 fnt82 4821 2513(is)m
+5032(the)s 5381(width)s 5984(of)s 6256(the)s 6605(whole)s
+7247(object.)s 7996(W)s 19(e)k 8366(assume)s 240 fnt83
+0 2202(L)m 240 fnt78 145 2194(,)m 240 fnt83 252 2202(R)m
+240 fnt78 477 2194(\243)m 240 fnt83 687 2202(X)m 240 fnt78
+855 2194(,)m 240 fnt83 962 2202(Y)m 240 fnt78 1125 2194(,)m
+240 fnt83 1232 2202(Z)m 240 fnt82 1377 2200(.)m 1541(Then)s
+240 fnt83 2090 2202(x)m 168 fnt83 2196 2115(i)m 240 fnt82
+2300 2200(can)m 2689(be)s 2971(enlar)s 4(ged)k 3848(to)s
+4087(an)s 3(y)k 4484(size)s 240 fnt83 4911 2202(l)m
+168 fnt83 4977 2115(i)m 240 fnt78 5081 2194(,)m 240 fnt83
+5188 2202(r)m 168 fnt83 5260 2115(i)m 240 fnt82 5364 2200(satisfying)m
+240 fnt78 480 1607(\()m 240 fnt83 564 1615(l)m 168 fnt83
+630 1528(i)m 240 fnt78 758 1607(\255)m 240 fnt83 979 1615(L)m
+240 fnt78 1124 1607(\))m 1202(,)s 1309(\()s 240 fnt83
+1393 1615(r)m 168 fnt83 1465 1528(i)m 240 fnt78 1593 1607(\255)m
+240 fnt83 1814 1615(R)m 240 fnt78 1967 1607(\))m 2117(\243)s
+240 fnt83 2327 1615(X)m 240 fnt78 2495 1607(,)m 240 fnt83
+2602 1615(Y)m 240 fnt78 2765 1607(,)m 240 fnt83 2872 1615(Z)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 31 32
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Symbol
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4297 13844(-)m 4425(31)s 4700(-)s 0 13253(which)m 642(e)s 3(xpands)k
+1475(to)s 1714(eight)s 2252(inequalities:)s 240 fnt83 917 12702(l)m
+168 fnt83 983 12615(i)m 240 fnt78 1123 12694(\243)m 240 fnt83
+1333 12702(X)m 894 12338(L)m 240 fnt78 1123 12330(\243)m 240 fnt83
+1333 12338(X)m 528 12047(l)m 168 fnt83 594 11960(i)m 240 fnt78
+710 12039(+)m 240 fnt83 911 12047(r)m 168 fnt83 983 11960(i)m
+240 fnt78 1123 12039(\243)m 240 fnt83 1333 12047(Y)m 503 11675(l)m
+168 fnt83 569 11588(i)m 240 fnt78 685 11667(+)m 240 fnt83
+886 11675(R)m 240 fnt78 1123 11667(\243)m 240 fnt83 1333 11675(Y)m
+505 11311(L)m 240 fnt78 710 11303(+)m 240 fnt83 911 11311(r)m
+168 fnt83 983 11224(i)m 240 fnt78 1123 11303(\243)m 240 fnt83
+1333 11311(Y)m 480 10947(L)m 240 fnt78 685 10939(+)m 240 fnt83
+886 10947(R)m 240 fnt78 1123 10939(\243)m 240 fnt83 1333 10947(Y)m
+911 10664(r)m 168 fnt83 983 10577(i)m 240 fnt78 1123 10656(\243)m
+240 fnt83 1333 10664(Z)m 886 10300(R)m 240 fnt78 1123 10292(\243)m
+240 fnt83 1333 10300(Z)m 240 fnt82 0 9793(Three)m 613(are)s
+960(already)s 1717(kno)s 6(wn,)k 2471(and)s 2875(slightly)s
+3646(rearranging)s 4800(the)s 5148(others)s 5783(gi)s 6(v)k 3(es)k
+240 fnt83 869 9242(l)m 168 fnt83 935 9155(i)m 240 fnt78
+1075 9234(\243)m 240 fnt83 1285 9242(X)m 869 8870(l)m 168 fnt83
+935 8783(i)m 240 fnt78 1075 8862(\243)m 240 fnt83 1285 8870(Y)m
+240 fnt78 1508 8862(-)m 240 fnt83 1708 8870(R)m 480 8498(l)m
+168 fnt83 546 8411(i)m 240 fnt78 662 8490(+)m 240 fnt83
+863 8498(r)m 168 fnt83 935 8411(i)m 240 fnt78 1075 8490(\243)m
+240 fnt83 1285 8498(Y)m 863 8134(r)m 168 fnt83 935 8047(i)m
+240 fnt78 1075 8126(\243)m 240 fnt83 1285 8134(Z)m 863 7770(r)m
+168 fnt83 935 7683(i)m 240 fnt78 1075 7762(\243)m 240 fnt83
+1285 7770(Y)m 240 fnt78 1508 7762(-)m 240 fnt83 1708 7770(L)m
+240 fnt82 0 7182(Therefore)m 997(the)s 1345(width)s 1947(constraint)s
+2949(of)s 240 fnt83 3220 7184(x)m 168 fnt83 3326 7097(i)m
+240 fnt82 3430 7182(is)m 480 6644(min)m 240 fnt78 861 6638(\()m
+240 fnt83 945 6646(X)m 240 fnt78 1113 6638(,)m 240 fnt83
+1220 6646(Y)m 240 fnt78 1443 6638(-)m 240 fnt83 1643 6646(R)m
+240 fnt78 1796 6638(\))m 1874(,)s 240 fnt83 1981 6646(Y)m
+240 fnt78 2144 6638(,)m 240 fnt82 2251 6644(min)m 240 fnt78
+2632 6638(\()m 240 fnt83 2716 6646(Z)m 240 fnt78 2873 6638(,)m
+240 fnt83 2980 6646(Y)m 240 fnt78 3203 6638(-)m 240 fnt83
+3403 6646(L)m 240 fnt78 3548 6638(\))m 240 fnt82 0 6142(The)m
+445(size)s 890(constraint)s 1909(of)s 2198(an)s 3(y)k
+2613(node)s 3152(can)s 3559(be)s 3858(found)s 4493(by)s
+4805(climbing)s 5725(the)s 6091(tree)s 6521(to)s 6778(a)s
+240 fnt83 6962 6144(WIDE)m 240 fnt82 7641 6142(or)m 240 fnt83
+7918 6144(HIGH)m 240 fnt82 8604 6142(node)m 0 5854(where)m 636(the)s
+980(constraint)s 1978(is)s 2184(tri)s 6(vial,)k 2850(then)s
+3315(propag)s 1(ating)k 4506(it)s 4694(back)s 5203(do)s 6(wn)k
+5783(to)s 6018(the)s 6362(node,)s 6931(and)s 7331(this)s
+7723(is)s 7929(the)s 8272(function)s 0 5566(of)m 271(procedure)s
+240 fnt83 1283 5568(Constr)m 3(ained)k 240 fnt82 2530 5566(in)m
+2773(Basser)s 3470(Lout.)s 480 5192(After)m 1043(some)s 1604(components)s
+2813(ha)s 4(v)k 3(e)k 3314(been)s 3824(promoted)s
+4799(into)s 5225(a)s 5391(tar)s 4(get,)k 6038(the)s
+6386(sizes)s 6902(stored)s 7544(in)s 7788(its)s 8064(parent)s
+8722(and)s 0 4904(higher)m 665(ancestors)s 1598(must)s 2117(be)s
+2392(adjusted)s 3241(to)s 3473(re\210ect)s 4122(the)s 4464(increased)s
+5417(size.)s 5946(This)s 6415(is)s 6618(done)s 7134(by)s
+7421(yet)s 7767(another)s 8537(set)s 8855(of)s 0 4616(recursi)m 6(v)k 3(e)k
+925(rules,)s 1500(upw)s 2(ard-mo)k 3(ving)k 3081(this)s
+3481(time,)s 4016(which)s 4662(cease)s 5239(as)s 5492(soon)s
+6006(as)s 6260(some)s 6825(ancestor')s 13(s)k 7835(size)s
+8266(does)s 8760(not)s 0 4328(change.)m 830(These)s 1445(rules)s
+1948(are)s 2283(embodied)s 3273(in)s 3504(procedure)s 240 fnt83
+4504 4330(AdjustSize)m 240 fnt82 5541 4328(of)m 5800(Basser)s 6485(Lout.)s
+7089(The)s 7505(adjustment)s 8601(must)s 0 4040(be)m 282(done)s
+804(before)s 1470(relinquishing)s 2785(control)s 3517(to)s 3756(an)s 3(y)k
+4153(other)s 4704(g)s 1(alle)k 3(y)k 15(,)k
+5376(b)s 4(ut)k 5738(not)s 6104(after)s 6600(e)s 6(v)k 3(ery)k
+7176(component.)s 240 fnt84 0 3391(5.4.)m 471(The)s 926(limited)s
+1696(lookahead)s 2802(pr)s 4(oblem)k 240 fnt82 480 2914(Basser)m
+1189(Lout)s 1714(assumes)s 2575(that)s 3006(there)s 3552(will)s
+3991(be)s 4286(enough)s 5062(internal)s 5859(memory)s 6723(to)s
+6975(hold)s 7472(the)s 7833(symbol)s 8606(table)s 0 2626(plus)m
+461(a)s 638(fe)s 6(w)k 1055(pages,)s 1719(b)s 4(ut)k
+2092(not)s 2469(an)s 2764(entire)s 3374(document.)s 4493(This)s
+4980(section)s 5726(describes)s 6677(the)s 7036(consequent)s 8185(problems)s
+0 2338(and)m 441(ho)s 6(w)k 940(the)s 3(y)k
+1441(were)s 1999(solv)s 3(ed.)k 2763(Other)s 3405(interpreters,)s
+4636(notably)s 5446(interacti)s 6(v)k 3(e)k 6538(editors)s
+7277(running)s 8113(on)s 8448(virtual)s 0 2050(memory)m 851(systems,)s
+1715(w)s 2(ould)k 2370(not)s 2736(necessarily)s 3851(need)s
+4361(this)s 4757(assumption.)s 480 1676(Although)m 1434(Basser)s 2122(Lout)s
+2625(can)s 3005(read)s 3466(and)s 3861(format)s 4548(an)s 3(y)k
+4936(le)s 3(g)k 1(al)k 5442(input,)s 6033(its)s
+6300(memory)s 7142(consumption)s 8427(will)s 8844(be)s 0 1388(optimized)m
+1004(when)s 1570(the)s 1908(b)s 4(ulk)k 2381(of)s
+2642(the)s 2980(document)s 3974(resides)s 4677(in)s 4910(g)s 1(alle)k 3(ys)k
+5624(whose)s 6282(tar)s 4(gets)k 6955(can)s 7334(be)s
+7606(identi\207ed)s 8557(at)s 8778(the)s 0 1100(moment)m 843(the)s 3(y)k
+1304(are)s 1650(encountered.)s 2981(Let)s 3358(us)s 3620(tak)s 2(e)k
+4071(the)s 4417(typical)s 5121(e)s 3(xample)k 5982(of)s
+6252(a)s 6416(root)s 6860(g)s 1(alle)k 3(y)k
+7492(which)s 8133(is)s 8341(a)s 8506(list)s 8855(of)s
+0 812(pages,)m 652(a)s 220 fnt35 818 809(@BodyT)m 26(e)k 6(xt)k
+240 fnt82 1991 812(g)m 1(alle)k 3(y)k 2625(tar)s 4(geted)k
+3448(into)s 3872(the)s 4220(pages,)s 220 fnt35 4872 809(@Chapter)m
+240 fnt82 5934 812(g)m 1(alle)k 3(ys)k 6658(tar)s 4(geted)k
+7481(into)s 220 fnt35 7905 809(@BodyT)m 26(e)k 6(xt)k
+240 fnt82 9019 812(,)m 0 524(and)m 220 fnt35 404 521(@Section)m
+240 fnt82 1404 524(g)m 1(alle)k 3(ys)k 2128(tar)s 4(geted)k
+2951(into)s 3376(the)s 220 fnt35 3724 521(@Chapter)m 240 fnt82
+4787 524(g)m 1(alle)k 3(ys:)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 32 33
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(32)s 4710(-)s 220 fnt35 480 13255(@P)m 8(ageList)k
+480 12967(//)m 480 12679(@BodyT)m 26(e)k 6(xt)k 480 12391(//)m
+480 12103(@Chapter {)m 480 11815( @Section { ...)m 13( })k 480 11527( @Section { ...)m 13( })k
+480 11239( ...)m 480 10951( @Section { ...)m 13( })k 480 10663(})m 480 10375(@Chapter {)m
+480 10087( ...)m 480 9799(})m 240 fnt82 0 9305(Basser)m 702(Lout)s
+1220(is)s 1436(able)s 1896(to)s 2141(read)s 2616(and)s
+3026(process)s 3800(such)s 4302(g)s 1(alle)k 3(ys)k
+5032(one)s 5440(paragraph)s 6459(at)s 6697(a)s 6869(time)s
+7355(\(strictly)s 15(,)k 8194(from)s 8724(one)s 220 fnt35
+0 9014(//)m 240 fnt82 185 9017(at)m 417(the)s 765(outer)s
+1316(le)s 6(v)k 3(el)k 1826(of)s 2097(a)s
+2263(g)s 1(alle)k 3(y)k 2897(to)s 3136(the)s
+3484(ne)s 3(xt\),)k 4079(as)s 4329(we)s 4664(no)s 6(w)k
+5125(describe.)s 480 8643(When)m 1147(the)s 1534(parser)s 2215(encounters)s
+3341(the)s 3727(be)s 3(ginning)k 4774(of)s 5083(a)s
+5288(g)s 1(alle)k 3(y)k 15(,)k 5998(lik)s 2(e)k
+220 fnt35 6449 8640(@Chapter)m 240 fnt82 7550 8643(or)m 220 fnt35
+7848 8640(@Section)m 240 fnt82 8788 8643(,)m 8934(it)s 0 8355(initiates)m
+831(a)s 1023(ne)s 6(w)k 1495(g)s 1(alle)k 3(y)k
+2155(process.)s 3061(The)s 3515(special)s 4258(recepti)s 6(v)k 3(e)k
+5206(symbol)s 220 fnt35 5991 8352(@Input)m 240 fnt82 6784 8355(is)m
+7019(substituted)s 8139(for)s 8502(the)s 8876(as)s 0 8067(yet)m
+357(unread)s 1071(right)s 1588(parameter)s 2607(of)s 2884(the)s
+3237(g)s 1(alle)k 3(y)k 15(.)k 3972(As)s
+4294(each)s 4795(paragraph)s 5813(of)s 6090(the)s 6443(right)s
+6960(parameter)s 7979(is)s 8195(read,)s 8718(it)s 8916(is)s
+0 7779(deleted)m 763(from)s 1302(the)s 1665(parse)s 2240(tree)s
+2668(and)s 3087(injected)s 3916(into)s 4356(the)s 4719(g)s 1(alle)k 3(y')k 13(s)k
+220 fnt35 5524 7776(@Input)m 240 fnt82 6231 7779(.)m 6410(The)s
+6853(g)s 1(alle)k 3(y)k 7502(is)s 7727(then)s
+8212(resumed.)s 0 7491(The)m 429(parser)s 1074(thus)s 1526(acts)s
+1950(as)s 2202(an)s 2487(e)s 3(xtra)k 3022(concurrent)s
+4106(process;)s 4937(it)s 5131(has)s 5503(lo)s 6(w)k
+5912(priority)s 15(,)k 6721(so)s 6989(that)s 7409(input)s
+7963(is)s 8175(read)s 8646(only)s 0 7203(when)m 597(there)s
+1151(is)s 1382(nothing)s 2188(else)s 2636(to)s 2897(do.)s
+3322(Since)s 3930(g)s 1(alle)k 3(ys)k 4675(may)s
+5162(be)s 5465(nested,)s 6205(a)s 6392(stack)s 6965(of)s
+220 fnt35 7257 7200(@Input)m 240 fnt82 8045 7203(symbols)m 8916(is)s
+0 6915(needed,)m 781(each)s 1271(with)s 1749(its)s 2020(o)s 6(wn)k
+2480(en)s 9(vironment)k 3735(and)s 4135(style.)s 4745(If)s
+4971(a)s 5132(g)s 1(alle)k 3(y)k 5762(is)s
+5967(encountered)s 7190(for)s 7523(which)s 8161(a)s 8322(tar)s 4(get)k
+8916(is)s 0 6627(not)m 370(immediately)s 1622(identi\207able)s 2757(\(a)s
+3006(footnote,)s 3914(for)s 4257(e)s 3(xample\),)k 5254(it)s
+5450(is)s 5664(read)s 6137(in)s 6385(its)s 6665(entirety)s
+7452(and)s 7860(hung)s 8397(in)s 8645(pure)s 0 6339(parse)m
+551(tree)s 954(form)s 1468(from)s 1983(an)s 240 fnt83
+2256 6341(UN)m 6(A)k 8(TT)k 12(A)k 7(CHED)k
+240 fnt82 3811 6339(inde)m 3(x)k 4386(in)s 4619(the)s
+4957(usual)s 5508(w)s 2(ay)k 15(,)k 5987(with)s
+6459(an)s 6733(en)s 9(vironment)k 7983(b)s 4(ut)k
+8335(without)s 0 6051(a)m 166(style.)s 781(It)s 986(will)s
+1412(be)s 1694(\210ushed)s 2444(later)s 2927(when)s 3503(its)s
+3779(component)s 4903(is)s 5113(promoted.)s 480 5677(In)m 735(addition)s
+1575(to)s 1813(producing)s 2836(a)s 3001(steady)s 3665(\210o)s 6(w)k
+4138(of)s 4407(components)s 5614(from)s 6137(input,)s 6735(we)s
+7069(must)s 7593(also)s 8030(ensure)s 8708(that)s 0 5389(recepti)m 6(v)k 3(e)k
+928(symbols)s 1783(do)s 2083(not)s 2455(unduly)s 3182(block)s
+3781(their)s 4285(promotion.)s 5452(The)s 220 fnt35 5886 5386(@F)m 6(ootSect)k
+240 fnt82 7044 5389(symbol)m 7810(at)s 8049(the)s 8403(foot)s
+8855(of)s 0 5101(each)m 495(page)s 1003(is)s 1213(a)s
+1379(typical)s 2084(e)s 3(xample:)k 3057(until)s 3550(it)s
+3742(is)s 3952(deleted)s 4700(the)s 5048(page)s 5556(cannot)s
+6254(be)s 6536(printed.)s 480 4727(Recepti)m 6(v)k 3(e)k
+1501(symbols)s 2368(are)s 2733(e)s 3(xpanded)k 3724(only)s
+4222(on)s 4537(demand,)s 5421(so)s 220 fnt35 5705 4724(@F)m 6(ootSect)k
+240 fnt82 6874 4727(can)m 7281(be)s 7581(deleted)s 8347(as)s
+8616(soon)s 0 4439(as)m 250(we)s 585(can)s 974(pro)s 3(v)k 3(e)k
+1570(that)s 1988(it)s 2180(is)s 2390(not)s 2757(w)s 2(anted.)k
+3610(The)s 4038(symbol)s 4799(table)s 5319(can)s 5708(tell)s
+6067(us)s 6332(that)s 6750(only)s 220 fnt35 7230 4436(@F)m 6(ootNote)k
+240 fnt82 8402 4439(g)m 1(alle)k 3(ys)k 0 4151(\(with)m
+220 fnt35 555 4148(@F)m 6(ootPlace&&f)k 6(ollo)k 3(wing)k
+240 fnt82 2935 4151(tar)m 4(gets\))k 3688(w)s 2(ant)k
+4205(it,)s 4438(so)s 4697(it)s 4883(might)s 5494(be)s
+5770(possible)s 6604(to)s 6836(deduce)s 7564(that)s 220 fnt35
+7975 4148(@F)m 6(ootSect)k 240 fnt82 0 3863(may)m 466(be)s
+748(deleted)s 1496(as)s 1746(soon)s 2256(as)s 2506(body)s
+3040(te)s 3(xt)k 3455(enters)s 4076(the)s 4424(follo)s 6(wing)k
+5401(page.)s 480 3489(The)m 904(author)s 1571(w)s 2(as)k
+1987(unable)s 2677(to)s 2912(mak)s 2(e)k 3479(this)s
+3871(w)s 2(ork,)k 4463(so)s 4725(Basser)s 5418(Lout)s
+5925(requires)s 6741(the)s 7085(user)s 7538(to)s 7773(identify)s
+8565(those)s 0 3201(g)m 1(alle)k 3(ys)k 715(which)s
+1348(will)s 1764(carry)s 2299(the)s 2637(b)s 4(ulk)k
+3111(of)s 3372(the)s 3711(document)s 4705(\()s 220 fnt35
+4778 3198(@Chapter)m 240 fnt82 5781 3201(,)m 220 fnt35 5879 3198(@Section)m
+240 fnt82 6819 3201(,)m 220 fnt35 6916 3198(@BodyT)m 26(e)k 6(xt)k
+240 fnt82 8030 3201(\))m 8149(as)s 240 fnt83 8389 3203(for)m 8(cing)k
+0 2915(galle)m 7(ys)k 240 fnt82 665 2913(,)m 792(by)s
+1107(writing)s 220 fnt35 1871 2910(f)m 6(orce into)k 240 fnt82
+2841 2913(instead)m 3596(of)s 220 fnt35 3888 2910(into)m 240 fnt82
+4315 2913(in)m 4579(their)s 5097(de\207nitions.)s 6291(As)s 6629(described)s
+7624(in)s 7888(the)s 8257(pre)s 6(vious)k 0 2625(section,)m
+790(when)s 1373(a)s 1546(forcing)s 2296(g)s 1(alle)k 3(y)k
+2937(attaches)s 3763(to)s 4009(a)s 4182(tar)s 4(get,)k
+4835(all)s 5135(recepti)s 6(v)k 3(e)k 6063(symbols)s
+6919(preceding)s 7922(the)s 8277(tar)s 4(get)k 8883(in)s
+0 2337(its)m 278(g)s 1(alle)k 3(y)k 914(are)s
+1263(deleted,)s 2062(remo)s 3(ving)k 3031(all)s 3326(impediments)s
+4614(to)s 4855(\210ushing.)s 5793(F)s 3(or)k 6184(e)s 3(xample,)k
+7100(when)s 7678(a)s 7846(forcing)s 8592(body)s 0 2049(te)m 3(xt)k
+421(g)s 1(alle)k 3(y)k 1062(enters)s 1690(a)s
+1863(ne)s 6(w)k 2317(page,)s 2882(the)s 220 fnt35
+3237 2046(@F)m 6(ootSect)k 240 fnt82 4395 2049(symbol)m 5162(on)s
+5466(the)s 5820(preceding)s 6823(page)s 7338(will)s 7771(be)s
+8060(deleted.)s 8921(It)s 0 1761(seems)m 629(lik)s 2(ely)k
+1219(that)s 1631(a)s 1791(system)s 2509(which)s 3145(could)s
+3729(af)s 6(ford)k 4358(to)s 4591(w)s 2(ait)k
+5054(until)s 5541(all)s 5828(input)s 6374(w)s 2(as)k
+6789(read)s 7252(before)s 7912(deleting)s 8729(an)s 3(y)k
+0 1473(recepti)m 6(v)k 3(e)k 922(symbols)s 1771(w)s 2(ould)k
+2426(not)s 2792(need)s 3302(forcing)s 4045(g)s 1(alle)k 3(ys.)k
+480 1099(Galle)m 3(ys)k 1258(whose)s 1925(tar)s 4(gets)k
+2607(are)s 2953(a)s 3118(long)s 3597(w)s 2(ay)k
+4047(from)s 4570(their)s 5066(in)s 9(v)k 4(ocation)k
+6119(points)s 6755(can)s 7143(be)s 7424(a)s 7589(problem.)s
+8549(If)s 8778(the)s 0 811(direction)m 917(is)s 220 fnt35
+1139 808(f)m 6(ollo)k 3(wing)k 240 fnt82 1969 811(,)m
+2087(such)s 2595(g)s 1(alle)k 3(ys)k 3330(are)s
+3689(held)s 4170(in)s 4425(internal)s 5221(memory)s 6083(for)s
+6433(a)s 6610(long)s 7101(time,)s 7643(unless)s 8304(the)s 3(y)k
+8779(are)s 0 523(to)m 248(be)s 539(sorted.)s 1296(If)s
+1535(the)s 1892(direction)s 2807(is)s 220 fnt35 3026 520(preceding)m
+240 fnt82 3977 523(,)m 4093(then)s 4571(either)s 5183(the)s
+5540(entire)s 6148(interv)s 3(ening)k 7296(document)s 8309(must)s
+8844(be)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 33 34
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4293 13844(-)m 4421(33)s 4705(-)s 0 13253(held)m 466(in)s
+704(memory)s 1551(\(pre)s 6(v)k 3(ented)k 2617(by)s
+2907(the)s 3250(tar)s 4(get)k 3844(from)s 4364(\210ushing\),)s
+5317(or)s 5572(else)s 5994(some)s 6551(forcing)s 7289(g)s 1(alle)k 3(y)k
+7918(prematurely)s 0 12965(deletes)m 714(the)s 1062(tar)s 4(get,)k
+1708(lea)s 4(ving)k 2461(the)s 2809(g)s 1(alle)k 3(y)k
+3443(bereft.)s 480 12591(The)m 929(typical)s 1655(e)s 3(xample)k
+2539(of)s 2832(the)s 3201(latter)s 3771(case)s 4260(occurs)s
+4956(when)s 5553(the)s 5922(g)s 1(alle)k 3(y)k
+6578(is)s 6809(an)s 7113(entry)s 7680(in)s 7944(the)s
+8313(table)s 8855(of)s 0 12303(contents,)m 907(launched)s 1832(backw)s 2(ards)k
+2907(from)s 3435(the)s 3786(be)s 3(ginning)k 4797(of)s
+5071(a)s 5241(chapter)s 6007(or)s 6269(section.)s 7113(Its)s
+7406(tar)s 4(get)k 8008(in)s 8254(the)s 8606(table)s
+0 12015(of)m 286(contents)s 1150(will)s 1592(ha)s 4(v)k 3(e)k
+2108(been)s 2633(deleted)s 3397(long)s 3891(before,)s 4624(to)s
+4879(permit)s 5578(the)s 5941(rest)s 6361(of)s 6648(the)s
+7011(document)s 8031(to)s 8286(print,)s 8860(so)s 0 11727(the)m
+349(g)s 1(alle)k 3(y)k 985(ultimately)s 2009(emer)s 4(ges)k
+2854(as)s 3106(an)s 3391(unattached)s 4487(g)s 1(alle)k 3(y)k
+5122(promoted)s 6099(out)s 6467(of)s 6740(the)s 7090(root)s
+7537(g)s 1(alle)k 3(y)k 15(.)k 8268(All)s
+8630(such)s 0 11439(g)m 1(alle)k 3(ys)k 717(are)s
+1056(written)s 1781(to)s 2013(an)s 2288(auxiliary)s 3183(\207le,)s
+3588(inde)s 3(x)k 3(ed)k 4390(by)s 4676(the)s
+5016(missing)s 5806(tar)s 4(get.)k 6501(On)s 6843(the)s
+7184(ne)s 3(xt)k 7645(run,)s 8063(just)s 8460(before)s
+0 11151(that)m 418(tar)s 4(get)k 1017(is)s 1227(deleted,)s
+2024(the)s 2372(auxiliary)s 3275(\207le)s 3636(is)s 3846(check)s 2(ed)k
+4686(and)s 5090(an)s 3(y)k 5487(g)s 1(alle)k 3(ys)k
+6211(for)s 6549(it)s 6741(are)s 7088(read)s 7557(in)s
+7800(and)s 8204(\210ushed.)s 240 fnt84 0 10502(5.5.)m 471(Horizontal)s
+1628(galleys)s 240 fnt82 480 10025(There)m 1108(is)s 1333(a)s
+1514(strong)s 2180(analogy)s 3007(between)s 3876(breaking)s 4781(a)s
+4962(column)s 5752(of)s 6038(te)s 3(xt)k 6468(into)s
+6908(page-sized)s 8003(pieces,)s 8722(and)s 0 9737(breaking)m 912(a)s
+1101(paragraph)s 2137(into)s 2585(line-sized)s 3594(pieces.)s 4378(In)s
+4657(f)s 2(act,)k 5142(the)s 5513(tw)s 2(o)k
+5946(dif)s 6(fer)k 6552(only)s 7055(in)s 7321(direction:)s
+8359(v)s 3(ertical)k 0 9449(for)m 343(body)s 883(te)s 3(xt,)k
+1351(horizontal)s 2381(for)s 2724(paragraphs.)s 3943(In)s 4205(this)s
+4607(section)s 5347(we)s 5687(de\207ne)s 240 fnt83 6334 9451(horizontal)m
+7384(galle)s 7(ys)k 240 fnt82 8049 9449(,)m 8162(and)s
+8572(sho)s 6(w)k 0 9161(ho)m 6(w)k 493(the)s 3(y)k
+989(pro)s 3(vide)k 1806(an)s 2122(unlimited)s 3129(number)s
+3953(of)s 4257(paragraph)s 5302(breaking)s 6225(styles,)s 6909(as)s
+7192(well)s 7691(as)s 7974(solv)s 3(e)k 8565(some)s
+0 8873(other)m 587(problems.)s 1677(Re)s 3(grettably)k 15(,)k
+2917(lack)s 3412(of)s 3719(time)s 4235(has)s 4641(pre)s 6(v)k 3(ented)k
+5669(their)s 6202(incorporation)s 7583(into)s 8044(the)s 8429(Basser)s
+0 8585(Lout)m 512(interpreter)s 13(.)k 480 8211(Imagine)m 1337(a)s
+1521(g)s 1(alle)k 3(y)k 2173(whose)s 2859(components)s
+4085(are)s 4450(separated)s 5428(by)s 5740(horizontal)s 6782(concatenation)s
+8186(operators)s 0 7923(instead)m 725(of)s 986(v)s 3(ertical)k
+1742(ones,)s 2278(perhaps)s 3062(indicated)s 3986(by)s 4269(a)s
+220 fnt35 4425 7920(hor)m -3(iz)k 3(ontally)k 5582(into)s
+240 fnt82 5977 7923(clause.)m 6728(Then)s 7266(all)s 7549(object)s
+8182(breaking,)s 0 7635(including)m 957(paragraph)s 1970(breaking,)s 2914(could)s
+3504(be)s 3786(replaced)s 4653(by)s 4947(g)s 1(alle)k 3(y)k
+5581(component)s 6705(promotion)s 7759(lik)s 2(e)k 8171(this:)s
+220 fnt35 480 7134(def @P)m 8(ar)k 2(ag)k 2(r)k 2(aph r)k -3(ight x)k
+480 6846({)m 480 6558( def @LinePlace { @Galle)m 4(y })k 480 5982( def @LineList)m 480 5694( {)m
+480 5406( @HExpand @LinePlace)m 480 5118( //1vx @LineList)m 480 4830( })m 480 4254( def @P)m 8(ar hor)k -3(iz)k 3(ontally into { @LinePlace&&preceding })k
+480 3966( r)m -3(ight x)k 480 3678( { x })m 480 3102( @LineList // @P)m 8(ar { 0.2i @Wide {} &0i x &1r)k -8(t })k
+480 2814(})m 240 fnt82 0 2320(The)m 220 fnt35 431 2317(@HExpand)m
+240 fnt82 1607 2320(operator)m 9(,)k 2504(which)s 3149(is)s
+3362(a)s 3531(primiti)s 6(v)k 3(e)k 4456(of)s
+4730(Basser)s 5430(Lout,)s 5992(horizontally)s 7204(e)s 3(xpands)k
+8040(the)s 8391(g)s 1(aps)k 8883(in)s 0 2032(its)m
+290(right)s 816(parameter)s 1844(until)s 2352(the)s 2715(result)s
+3319(\207lls)s 3743(the)s 4105(a)s 4(v)k 6(ailable)k
+5028(space,)s 5681(thus)s 6145(implementing)s 7541(line)s 7970(adjustment,)s
+0 1744(e)m 3(xcept)k 689(when)s 1274(the)s 1631(parameter)s
+2654(contains)s 3511(tab)s 4(ulation)k 4529(g)s 1(aps)k
+5027(lik)s 2(e)k 220 fnt35 5447 1741(&1r)m -8(t)k
+240 fnt82 5853 1744(,)m 5969(which)s 6620(cause)s 7216(the)s
+7573(parameter)s 8596(to)s 8844(be)s 0 1456(already)m 757(e)s 3(xpanded.)k
+1836(The)s 2264(result)s 2854(of)s 220 fnt35 480 955(@P)m 8(ar)k 2(ag)k 2(r)k 2(aph { A shor)k -8(t par)k 2(ag)k 2(r)k 2(aph of te)k 6(xt.)k 13( })k
+240 fnt82 0 456(w)m 2(ould)k 655(then)s 1124(be)s
+1406(something)s 2456(lik)s 2(e)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 34 35
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13844(-)m 4416(34)s 4710(-)s 768 13253(A)m 1073(short)s
+1687(paragraph)s 480 12965(of)m 751(te)s 3(xt.)k 0 12512(depending)m
+1061(on)s 1368(the)s 1726(a)s 4(v)k 6(ailable)k
+2645(horizontal)s 3679(space.)s 4384(An)s 4744(unlimited)s 5729(range)s
+6326(of)s 6607(paragraph)s 7630(breaking)s 8531(styles)s 0 12224(could)m
+590(be)s 872(de\207ned,)s 1684(including)s 2641(ragged)s 3350(right,)s
+3908(ragged)s 4617(left,)s 5041(break-and-center)s 9(,)k 6757(and)s
+7161(so)s 7427(on.)s 480 11850(In)m 765(Basser)s 1492(Lout,)s
+2081(indented)s 2992(paragraphs)s 4122(are)s 4499(produced)s 5477(by)s
+5801(preceding)s 6827(them)s 7394(with)s 7906(a)s 8102(horizontal)s
+0 11562(concatenation)m 1380(operator)s 9(,)k 2269(for)s 2602(e)s 3(xample)k
+220 fnt35 3459 11559(|0.5i)m 240 fnt82 3855 11562(.)m 4014(This)s
+4485(has)s 4849(the)s 5192(unfortunate)s 6345(ef)s 6(fect)k
+6935(of)s 7201(making)s 7967(an)s 8244(indented)s 0 11274(paragraph)m
+1007(into)s 1426(a)s 1586(single)s 2207(component)s 3325(of)s
+3590(the)s 3932(enclosing)s 4895(g)s 1(alle)k 3(y)k 15(,)k
+5561(so)s 5821(that)s 6233(it)s 6419(will)s 6839(al)s 2(w)k 2(ays)k
+7544(be)s 7820(k)s 2(ept)k 8283(together)s 0 10986(on)m
+297(one)s 699(page.)s 1315(Horizontal)s 2392(g)s 1(alle)k 3(ys)k
+3116(solv)s 3(e)k 3674(this)s 4070(problem)s 4927(with)s
+5409(a)s 5575(simple)s 6268(change)s 7002(to)s 220 fnt35
+7241 10983(@LineList)m 240 fnt82 8215 10986(:)m 220 fnt35 480 10485(def @LineList)m
+480 10197({)m 480 9909( |0.5i @HExpand @LinePlace)m 480 9621( //1vx @LineList)m 480 9333(})m 240 fnt82
+0 8839(sho)m 6(wing)k 860(the)s 1210(\210e)s 3(xibility)k
+2192(that)s 2611(comes)s 3275(from)s 3801(bringing)s 4666(the)s
+5016(full)s 5404(po)s 6(wer)k 6057(of)s 6330(the)s
+6680(Lout)s 7193(language)s 8115(to)s 8356(bear)s 8829(on)s
+0 8551(paragraph)m 1013(layout.)s 1775(It)s 1980(is)s 2190(easy)s
+2669(to)s 2908(mak)s 2(e)k 3480(pro)s 3(vision)k
+4438(for)s 4776(a)s 4942(tag)s 5287(on)s 5584(the)s
+5932(\207rst)s 6363(line.)s 480 8177(Although)m 1451(Basser)s 2158(Lout)s
+2679(permits)s 3456(recepti)s 6(v)k 3(e)k 4387(symbols)s
+5246(within)s 5923(paragraphs,)s 7089(the)s 3(y)k 7561(are)s
+7918(of)s 8198(little)s 8700(use,)s 0 7889(because)m 835(their)s
+1355(a)s 4(v)k 6(ailable)k 2286(width)s 2911(is)s
+3144(calculated)s 4193(after)s 4711(paragraph)s 5747(breaking,)s 6714(and)s
+7141(the)s 7512(incoming)s 8492(g)s 1(alle)k 3(y)k
+0 7601(cannot)m 736(spread)s 1456(o)s 3(v)k 3(er)k
+1973(more)s 2558(than)s 3065(one)s 3505(line.)s 4066(W)s 9(ith)k
+4630(horizontal)s 5692(g)s 1(alle)k 3(ys,)k 6510(such)s
+7044(symbols)s 7931(w)s 2(ould)k 8625(ha)s 4(v)k 3(e)k
+0 7313(in\207nite)m 733(a)s 4(v)k 6(ailable)k 1641(width,)s
+2293(and)s 2697(we)s 3032(could)s 3622(easily)s 4233(produce)s
+5060(a)s 5226(\207lled)s 5775(paragraph)s 6788(of)s 7059(footnotes)s
+8000(lik)s 2(e)k 8412(this:)s 200 fnt82 480 6838(1)m
+240 fnt82 559 6743(See)m 987(Jones)s 1597(and)s 2028(Saunders)s
+2983(\(1982\).)s 200 fnt82 3932 6838(2)m 240 fnt82 4027 6743(Or)m
+4366(so)s 4659(Jacobsen)s 480 6443(\(1973\))m 1167(asserts.)s 200 fnt82
+2087 6538(3)m 240 fnt83 2174 6445(ibid)m 240 fnt82 2552 6443(,)m
+2659(p.)s 2883(327.)s 0 5940(based)m 603(on)s 900(an)s
+1183(in\207nite)s 1916(horizontal)s 2940(sequence)s 3873(of)s 220 fnt35
+4144 5937(@F)m 6(ootPlace)k 240 fnt82 5400 5940(symbols)m 6249(inside)s
+6876(a)s 7042(horizontal)s 8066(g)s 1(alle)k 3(y)k 15(.)k
+480 5566(When)m 1133(body)s 1692(te)s 3(xt)k 2132(is)s
+2367(placed)s 3074(on)s 3395(pages,)s 4072(the)s 4445(length)s
+5125(of)s 5421(each)s 5940(column)s 6740(v)s 6(aries)k
+7380(depending)s 8456(on)s 8778(the)s 0 5278(a)m 4(v)k 6(ailable)k
+914(v)s 3(ertical)k 1687(space.)s 2389(Horizontal)s 3472(g)s 1(alle)k 3(ys)k
+4203(could)s 4799(analogously)s 6017(produce)s 6850(lines)s 7359(of)s
+7636(v)s 6(arying)k 8421(length,)s 0 4990(and)m 404(so)s
+670(could)s 1260(\207ll)s 1580(non-rectangular)s 3153(shapes.)s 480 4616(An)m
+835(important)s 1829(theoretical)s 2896(bene\207t)s 3612(of)s 3888(horizontal)s
+4918(g)s 1(alle)k 3(ys)k 5647(is)s 5862(that)s
+6285(the)s 3(y)k 6753(w)s 2(ould)k 7413(permit)s
+8102(horizontal)s 0 4328(and)m 403(v)s 3(ertical)k 1168(to)s
+1405(be)s 1685(treated)s 2390(in)s 2631(a)s 2795(perfectly)s
+3695(symmetrical)s 4928(w)s 2(ay)k 15(,)k 5415(whereas)s
+6247(at)s 6477(present)s 7225(paragraph)s 8236(breaking)s 0 4040(is)m
+243(horizontal)s 1300(only)s 15(,)k 1851(and)s 2288(g)s 1(alle)k 3(y)k
+2955(breaking)s 3878(is)s 4121(v)s 3(ertical)k 4921(only)s 15(.)k
+5529(This)s 6038(must)s 6596(simplify)s 7479(the)s 7860(treatment)s
+8855(of)s 0 3752(non-European)m 1432(languages)s 2459(which)s 3121(\207ll)s
+3460(in)s 3722(unusual)s 4542(directions,)s 5610(although)s 6525(it)s
+6736(is)s 6965(not)s 7351(itself)s 7918(suf\207cient)s 8887(to)s
+0 3464(implement)m 1082(them.)s 480 3090(There)m 1132(are)s 1519(a)s
+1725(fe)s 6(w)k 2170(minor)s 2841(problems)s 3822(with)s
+4343(horizontal)s 5407(g)s 1(alle)k 3(ys.)k 6284(First,)s
+6867(the)s 7255(syntactic)s 8197(o)s 3(v)k 3(erhead)k
+0 2802(of)m 319(enclosing)s 1337(each)s 1880(paragraph)s 2941(in)s
+220 fnt35 3233 2799(@P)m 8(ar)k 2(ag)k 2(r)k 2(aph { ...)k 13( })k
+240 fnt82 5064 2802(or)m 5371(whate)s 6(v)k 3(er)k
+6346(is)s 6604(unacceptable.)s 8065(Permitting)s 0 2514(user)m 4(-de\207ned)k
+1234(operators)s 2172(to)s 2409(ha)s 4(v)k 3(e)k
+2908(lo)s 6(wer)k 3504(precedence)s 4633(than)s 5100(the)s
+5446(white)s 6031(space)s 6616(between)s 7468(tw)s 2(o)k
+7876(w)s 2(ords)k 8508(might)s 0 2226(help)m 450(here.)s
+1009(Second,)s 1805(the)s 2137(b)s 4(uilt-in)k 2877(paragraph)s
+3874(break)s 2(er)k 4632(includes)s 5464(h)s 1(yphenation,)k
+6738(and)s 7126(it)s 7302(permits)s 8053(line)s 8451(breaks)s
+0 1938(in)m 246(the)s 598(input)s 1153(to)s 1396(determine)s
+2410(line)s 2828(breaks)s 3506(in)s 3753(the)s 4105(output,)s
+4827(if)s 5048(desired.)s 5905(These)s 6536(features)s 7345(must)s
+7874(someho)s 6(w)k 8844(be)s 0 1650(preserv)m 3(ed.)k
+1081(Finally)s 15(,)k 1841(we)s 2167(ha)s 4(v)k 3(e)k
+2659(e)s 3(xplained)k 3634(ho)s 6(w)k 4086(the)s
+4425(Basser)s 5113(Lout)s 5616(interpreter)s 6659(assigns)s 7392(equal)s
+7956(width)s 8549(to)s 8778(the)s 0 1362(wider)m 607(columns)s
+1473(of)s 1748(tables)s 2359(\(Section)s 3216(2.5\).)s 3763(The)s
+4194(equi)s 6(v)k 6(alent)k 5242(situation)s 6126(in)s
+6372(v)s 3(ertical)k 7143(g)s 1(alle)k 3(ys)k
+7871(occurs)s 8550(when)s 0 1074(tw)m 2(o)k 416(recepti)s 6(v)k 3(e)k
+1345(symbols)s 2201(compete)s 3074(for)s 3419(v)s 3(ertical)k
+4193(space)s 4786(\(e.g.)s 220 fnt35 5262 1071(@T)m 26(e)k 6(xtPlace)k
+240 fnt82 6487 1074(and)m 220 fnt35 6898 1071(@F)m 6(ootSect)k
+240 fnt82 7989 1074(\),)m 8182(and)s 8593(there)s 0 786(it)m
+187(is)s 392(con)s 9(v)k 3(entional)k 1666(to)s
+1900(grant)s 2446(as)s 2691(much)s 3274(as)s 3519(required)s
+4368(to)s 4602(the)s 4945(\207rst)s 5371(arri)s 6(v)k 6(al.)k
+6140(It)s 6339(is)s 6544(not)s 6905(clear)s 7423(to)s
+7657(the)s 8000(author)s 8665(ho)s 6(w)k 0 498(these)m
+547(dif)s 6(ferent)k 1422(approaches)s 2549(can)s 2938(be)s
+3220(reconciled.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 35 36
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4292 13841(-)m 4420(35)s 4706(-)s 240 fnt84 0 12672(6.)m
+291(Cr)s 4(oss)k 926(r)s 4(efer)k 4(ences)k
+240 fnt82 480 12240(Cross)m 1064(references,)s 2138(such)s 2622(as)s
+2859(`see)s 3286(page)s 3782(57')s 4121(and)s 4512(`see)s
+4940(Figure)s 5607(5,)s 16(')k 5871(are)s 6205(a)s
+6358(useful)s 6985(b)s 4(ut)k 7334(highly)s 7987(error)s 4(-prone)k
+0 11952(feature)m 716(of)s 985(documents.)s 2184(Scribe)s 2848([7])s
+3163(introduced)s 4242(a)s 4406(method)s 5180(of)s 5449(k)s 2(eeping)k
+6256(them)s 6792(up)s 7083(to)s 7320(date)s 7772(automatically)s
+0 11664(as)m 245(the)s 587(document)s 1585(changes:)s 2517(the)s
+2859(user)s 3311(gi)s 6(v)k 3(es)k 3852(each)s
+4342(referenced)s 5401(entity)s 5993(a)s 6153(tag,)s 6547(and)s
+6945(operators)s 7879(are)s 8220(pro)s 3(vided)k 0 11376(that)m
+418(return)s 1045(the)s 1393(page)s 1901(or)s 2160(sequence)s
+3093(number)s 3884(of)s 4155(the)s 4503(entity)s 5101(with)s
+5583(a)s 5749(gi)s 6(v)k 3(en)k 6329(tag.)s
+480 11002(A)m 712(cross)s 1256(reference)s 2201(tak)s 2(es)k
+2743(an)s 3028(object)s 3674(\(such)s 4251(as)s 4503(a)s
+4671(page)s 5181(number\))s 6042(from)s 6568(one)s 6972(point)s
+7526(in)s 7771(the)s 8122(document)s 0 10714(and)m 435(copies)s
+1128(it)s 1351(to)s 1621(another)s 9(,)k 2467(and)s
+2902(this)s 3329(generalization)s 4770(suggests)s 5663(other)s 6245(applications.)s
+7595(F)s 3(or)k 8015(e)s 3(xample,)k 8960(a)s
+0 10426(running)m 831(header)s 1562(is)s 1806(copied)s 2536(from)s
+3094(the)s 3475(title)s 3935(of)s 4240(a)s 4440(nearby)s
+5179(chapter)s 9(,)k 6013(and)s 6451(a)s 6651(reference)s
+7628(is)s 7872(copied)s 8602(from)s 0 10138(a)m 207(bibliographic)s
+1576(database.)s 2604(Making)s 3443(the)s 3832(unity)s 4419(of)s
+4731(these)s 5319(applications)s 6566(manifest)s 7489(is)s 7740(an)s
+8065(interesting)s 0 9850(language)m 920(design)s 1602(problem.)s 240 fnt84
+0 9201(6.1.)m 471(The)s 926(cr)s 4(oss)k 1494(r)s 4(efer)k 4(ence)k
+2496(abstraction)s 240 fnt82 480 8770(In)m 736(de)s 6(v)k 3(eloping)k
+1844(the)s 2192(cross)s 2734(reference)s 3677(abstraction,)s 4832(it)s
+5024(seemed)s 5799(best)s 6244(to)s 6483(be)s 3(gin)k
+7069(with)s 7551(the)s 7899(database)s 8779(ap)s 8998(-)s
+0 8482(plication,)m 943(since)s 1490(it)s 1682(is)s 1892(the)s
+2240(simplest.)s 3200(Database)s 4132(relations)s 5005(are)s 5352(naturally)s
+6255(mapped)s 7071(into)s 7496(Lout)s 8008(de\207nitions:)s 220 fnt35
+480 7981(def @Ref)m 6(erence)k 480 7693( named @T)m 26(ag {})k 480 7405( named @A)m 6(uthor {})k
+480 7117( named @Title {})m 480 6829( named @Jour)m -5(nal {})k 480 6541({})m 240 fnt82
+0 6047(The)m 434(set)s 766(of)s 1043(all)s 1343(in)s 9(v)k 4(ocations)k
+2490(of)s 220 fnt35 2768 6044(@Ref)m 6(erence)k 240 fnt82
+4055 6047(is)m 4272(a)s 4444(relation)s 5237(whose)s 5911(attrib)s 4(utes)k
+6853(are)s 7206(the)s 7561(parameters,)s 8722(and)s 0 5759(whose)m
+659(tuples)s 1271(are)s 1608(the)s 1946(in)s 9(v)k 4(ocations.)k
+3191(T)s 19(o)k 3481(complete)s 4403(the)s 4741(correspondence,)s
+6339(we)s 6665(need)s 7165(only)s 7635(declare)s 8370(that)s
+8778(the)s 220 fnt35 0 5468(@T)m 26(ag)k 240 fnt82
+623 5471(parameter)m 1637(is)s 1847(special,)s 2617(serving)s 3374(as)s
+3624(the)s 3972(k)s 2(e)k 3(y)k 4367(attrib)s 4(ute.)k
+480 5097(F)m 3(ollo)k 6(wing)k 1508(the)s 1856(database)s
+2735(model,)s 3440(we)s 3775(ne)s 3(xt)k 4244(need)s
+4755(a)s 4921(notation)s 5762(for)s 6100(retrie)s 6(ving)k
+7075(the)s 7423(in)s 9(v)k 4(ocation)k 8477(with)s
+8960(a)s 0 4809(gi)m 6(v)k 3(en)k 580(tag:)s
+220 fnt35 480 4308(@Ref)m 6(erence&&kingston91)k 240 fnt82 0 3809(This)m
+240 fnt83 534 3811(cr)m 10(oss)k 1143(r)s 8(efer)k 8(ence)k
+240 fnt82 2141 3809(is)m 2410(lik)s 2(e)k 2881(an)s
+3223(arro)s 6(w)k 3887(pointing)s 4796(to)s 5094(the)s
+5501(in)s 9(v)k 4(ocation.)k 6721(T)s 19(o)k
+7080(access)s 7800(its)s 8135(attrib)s 4(utes,)k 0 3521(we)m
+335(write)s 220 fnt35 480 3069(@Ref)m 6(erence&&kingston91 @Open { @A)k 6(uthor)k 11(, @Title })k
+240 fnt82 0 2570(The)m 220 fnt35 484 2567(@Open)m 240 fnt82
+1347 2570(operator)m 2260(e)s 6(v)k 6(aluates)k 3245(its)s
+3578(right)s 4146(parameter)s 5217(in)s 5517(an)s 5857(en)s 9(vironment)k
+7174(which)s 7873(includes)s 8778(the)s 0 2282(e)m 3(xported)k
+892(parameters)s 1990(of)s 2261(its)s 2537(left.)s 480 1908(An)m
+829(in)s 9(v)k 4(ocation)k 1882(is)s 2091(chosen)s
+2812(to)s 3050(be)s 3331(a)s 3496(running)s 4293(header)s
+4989(because)s 5801(of)s 6071(its)s 6346(proximity)s 7342(to)s
+7580(the)s 7927(place)s 8486(where)s 0 1620(it)m 223(is)s
+465(used,)s 1043(rather)s 1691(than)s 2192(by)s 2517(its)s
+2825(tag.)s 3313(Such)s 3881(proximity)s 4910(is)s 5151(naturally)s
+6086(e)s 3(xpressed)k 7116(by)s 7442(tw)s 2(o)k
+7884(special)s 8634(tags,)s 220 fnt35 0 1329(preceding)m 240 fnt82
+1049 1332(and)m 220 fnt35 1491 1329(f)m 6(ollo)k 3(wing)k
+240 fnt82 2321 1332(;)m 2471(for)s 2848(e)s 3(xample,)k
+220 fnt35 3800 1329(@Sym&&f)m 6(ollo)k 3(wing)k 240 fnt82
+5682 1332(will)m 6146(point)s 6737(to)s 7014(the)s 7400(closest)s
+8149(follo)s 6(wing)k 0 1044(in)m 9(v)k 4(ocation)k
+1083(of)s 220 fnt35 1383 1041(@Sym)m 240 fnt82 2121 1044(in)m
+2393(the)s 2771(\207nal)s 3280(printed)s 4045(document.)s 5182(This)s
+5688(is)s 5927(much)s 6546(simpler)s 7351(conceptually)s 8657(than)s
+0 756(reference)m 937(to)s 1169(the)s 1511(internal)s 2288(state)s
+2775(of)s 3039(the)s 3381(document)s 4378(formatter)s 5319(at)s
+5544(a)s 5704(critical)s 6413(moment,)s 7298(the)s 7639(usual)s
+8192(approach)s 0 468(to)m 239(running)s 1037(headers.)s 480 94(It)m
+691(turns)s 1227(out)s 1600(that)s 2025(the)s 2380(abo)s 3(v)k 3(e)k
+3009(design)s 3698(solv)s 3(es)k 4350(all)s 4650(the)s
+5005(cross)s 5554(referencing)s 6701(problems)s 7649(encountered)s 8883(in)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 36 37
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4288 13842(-)m 4416(36)s 4709(-)s 0 13251(practice)m 825(e)s 3(xcept)k
+1521(one,)s 1988(which)s 2645(may)s 3126(be)s 3422(typi\207ed)s
+4226(by)s 4535(the)s 4897(problem)s 5769(of)s 6054(\207nding)s
+6801(the)s 7164(number)s 7969(of)s 8255(the)s 8618(page)s
+0 12963(on)m 303(which)s 952(the)s 1306(chapter)s 2076(whose)s
+2750(tag)s 3102(is)s 220 fnt35 3318 12960(intro)m 240 fnt82
+3804 12963(be)m 3(gins.)k 4596(T)s 19(w)k 2(o)k
+5074(cross)s 5622(referencing)s 6769(steps)s 7304(are)s 7658(needed,)s
+8449(\207rst)s 8887(to)s 220 fnt35 0 12672(@Chapter&&intro)m 240 fnt82
+1714 12675(,)m 1821(then)s 2290(from)s 2814(there)s 3347(to)s
+220 fnt35 3586 12672(@P)m 8(age&&preceding)k 240 fnt82 5556 12675(,)m
+5663(where)s 6303(the)s 6651(page)s 7159(number)s 7950(is)s
+8160(kno)s 6(wn.)k 480 12301(Gi)m 6(v)k 3(en)k
+1113(our)s 1492(success)s 2260(so)s 2526(f)s 2(ar)k 9(,)k
+2886(this)s 3282(last)s 3673(problem)s 4530(pro)s 3(v)k 3(es)k
+5213(to)s 5452(be)s 5734(surprisingly)s 6930(dif\207cult.)s 7850(W)s 19(e)k
+8219(\207rst)s 8650(try)s 220 fnt35 480 11800(@Chapter&&intro @Open {)m 480 11512( @P)m 8(age&&preceding @Open { @P)k 8(ageNum })k
+480 11224(})m 240 fnt82 0 10730(b)m 4(ut)k 363(this)s
+761(f)s 2(ails)k 1222(because)s 220 fnt35 2037 10727(@P)m 8(age&&preceding)k
+240 fnt82 4069 10730(is)m 4281(e)s 6(v)k 6(aluated)k
+5245(in)s 5490(the)s 5840(present)s 6592(conte)s 3(xt,)k
+7402(not)s 7770(in)s 8015(the)s 8365(conte)s 3(xt)k
+0 10442(of)m 220 fnt35 271 10439(@Chapter&&intro)m 240 fnt82 2045 10442(as)m
+2295(required.)s 3255(So)s 3561(our)s 3940(ne)s 3(xt)k
+4409(attempt)s 5185(is)s 220 fnt35 480 9941(def @Chapter)m 480 9653( named @P)m 8(ageNum { @P)k 8(age&&preceding @Open { @P)k 8(ageNum } })k
+480 9365( ...)m 240 fnt82 0 8914(with)m 482(the)s 220 fnt35
+830 8911(@P)m 8(age&&preceding)k 240 fnt82 2860 8914(cross)m 3402(reference)s
+4345(attached)s 5199(to)s 5438(the)s 5786(chapter;)s 6601(we)s
+6936(write)s 220 fnt35 480 8413(@Chapter&&intro @Open { @P)m 8(ageNum })k 240 fnt82
+0 7914(This)m 604(also)s 1170(f)s 2(ails,)k 1813(because)s
+2754(parameters)s 3980(are)s 4456(e)s 6(v)k 6(aluated)k
+5546(after)s 6170(substitution,)s 7521(so)s 7915(once)s 8552(ag)s 1(ain)k
+220 fnt35 0 7623(@P)m 8(age&&preceding)k 240 fnt82 2015 7626(is)m
+2209(e)s 6(v)k 6(aluated)k 3156(in)s 3383(the)s
+3716(wrong)s 4365(conte)s 3(xt.)k 5215(W)s 19(e)k
+5568(could)s 6143(of)s 6398(course)s 7063(de\207ne)s 7688(a)s
+7839(ne)s 6(w)k 8270(operator)s 0 7338(speci\207cally)m 1142(for)s
+1480(this)s 1876(case:)s 220 fnt35 480 6837(@P)m 8(age&&{ @Preceding @Chapter&&intro })k
+240 fnt82 0 6338(or)m 267(some)s 836(such.)s 1448(This)s
+1932(is)s 2151(free)s 2585(of)s 2864(the)s 3221(anno)s 2(ying)k
+4172(conte)s 3(xt-sensiti)k 6(vity)k 15(,)k 6029(b)s 4(ut)k
+6399(it)s 6599(seems)s 7243(quite)s 7785(comple)s 3(x,)k
+8722(and)s 0 6050(the)m 348(e)s 3(xpected)k 1253(cross)s
+1795(reference)s 220 fnt35 2738 6047(@P)m 8(age&&preceding)k 240 fnt82
+4768 6050(does)m 5258(not)s 5624(appear)s 13(.)k 480 5676(The)m
+939(author)s 1642(w)s 2(as)k 2095(lost)s 2532(in)s
+2806(these)s 3385(obscurities)s 4503(for)s 4873(some)s 5465(time,)s
+6028(and)s 6464(ultimately)s 7518(rescued)s 8338(himself)s 0 5388(by)m
+306(looking)s 1103(ahead)s 1731(to)s 1982(the)s 2342(implementation)s
+3912(of)s 4195(the)s 220 fnt35 4555 5385(preceding)m 240 fnt82
+5578 5388(and)m 220 fnt35 5994 5385(f)m 6(ollo)k 3(wing)k
+240 fnt82 6897 5388(tags,)m 7401(to)s 7652(see)s 8025(if)s
+8254(a)s 8433(simple)s 0 5100(e)m 3(xtension)k 971(of)s
+1242(it)s 1434(w)s 2(ould)k 2089(solv)s 3(e)k
+2647(the)s 2995(problem.)s 3956(This)s 4432(led)s 4782(to)s
+5021(the)s 220 fnt35 5369 5097(@T)m 26(agged)k 240 fnt82
+6358 5100(operator:)m 220 fnt35 480 4599(@P)m 8(age&&preceding @T)k 26(agged intro)k
+240 fnt82 0 4100(placed)m 686(at)s 922(the)s 1274(be)s 3(ginning)k
+2286(of)s 2562(the)s 2914(body)s 3452(of)s 3727(the)s
+4079(chapter)s 4847(will)s 5277(attach)s 220 fnt35 5908 4097(intro)m
+240 fnt82 6391 4100(as)m 6645(an)s 6933(e)s 3(xtra)k
+7471(tag)s 7820(to)s 8063(the)s 8416(closest)s 0 3812(preceding)m
+996(in)s 9(v)k 4(ocation)k 2050(of)s 220 fnt35
+2321 3809(@P)m 8(age)k 240 fnt82 3040 3812(,)m 3147(so)s
+3413(that)s 220 fnt35 480 3311(@P)m 8(age&&intro @Open { @P)k 8(ageNum })k
+240 fnt82 0 2812(yields)m 635(the)s 996(desired)s 1758(page)s
+2279(number)s 13(.)k 3174(There)s 3801(is)s 4024(something)s
+5087(lo)s 6(w-le)k 6(v)k 3(el)k 6043(and)s
+6460(ad)s 6757(hoc)s 7170(about)s 7775(the)s 220 fnt35
+8137 2809(@T)m 26(agged)k 240 fnt82 0 2524(operator)m 9(,)k
+894(b)s 4(ut)k 1256(the)s 1604(tw)s 2(o)k
+2014(cross)s 2556(references)s 3587(do)s 3880(appear)s 4577(naturally)s 15(,)k
+5518(and)s 5922(it)s 6114(w)s 2(orks.)k 240 fnt84
+0 1875(6.2.)m 471(Implementation)s 2159(of)s 2431(cr)s 4(oss)k
+2999(r)s 4(efer)k 4(ences)k 240 fnt82 480 1398(Before)m
+1185(an)s 1466(object)s 2109(can)s 2496(be)s 2777(sized)s
+3324(and)s 3727(printed,)s 4509(the)s 4855(v)s 6(alues)k
+5510(of)s 5779(an)s 3(y)k 6175(cross)s 6715(references)s
+7745(within)s 8411(it)s 8601(must)s 0 1110(be)m 279(kno)s 6(wn.)k
+1086(If)s 1312(the)s 3(y)k 1772(refer)s 2277(to)s
+2512(in)s 9(v)k 4(ocations)k 3650(that)s 4064(ha)s 4(v)k 3(e)k
+4561(not)s 4924(yet)s 5272(been)s 5777(read,)s 6292(there)s
+6821(is)s 7027(a)s 7190(problem.)s 8147(Scribe)s 8809([7])s
+0 822(solv)m 3(es)k 649(it)s 844(by)s 1141(capitalizing)s
+2311(on)s 2611(the)s 2962(f)s 2(act)k 3381(that)s
+3802(documents)s 4893(are)s 5243(formatted)s 6232(repeatedly)s 7284(during)s
+7965(the)s 8317(drafting)s 0 534(process.)m 868(All)s 1214(tagged)s
+1897(in)s 9(v)k 4(ocations)k 3024(are)s 3358(copied)s
+4040(to)s 4266(an)s 4535(auxiliary)s 5425(\207le)s 5772(during)s
+6437(the)s 6771(\207rst)s 7189(run,)s 7601(and)s 7992(inde)s 3(x)k 3(ed)k
+8788(for)s 0 246(quick)m 593(retrie)s 6(v)k 6(al)k
+1429(on)s 1725(the)s 2072(second.)s 2901(A)s 3130(ne)s 6(w)k
+3576(auxiliary)s 4478(\207le)s 4839(is)s 5048(written)s 5780(during)s
+6457(the)s 6805(second)s 7527(run,)s 7952(for)s 8289(retrie)s 6(v)k 6(al)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 37 38
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4291 13844(-)m 4419(37)s 4707(-)s 0 13253(on)m 301(the)s
+654(third,)s 1217(and)s 1625(so)s 1896(on.)s 2305(Cross)s
+2906(references)s 3941(al)s 2(w)k 2(ays)k 4657(lag)s
+5007(one)s 5413(run)s 5794(behind)s 6509(the)s 6862(rest)s
+7270(of)s 7546(the)s 7899(document;)s 8960(a)s 0 12965(perfect)m
+711(cop)s 2(y)k 1217(may)s 1671(be)s 1942(produced)s
+2879(by)s 3161(formatting)s 4210(the)s 4547(same)s 5082(v)s 3(ersion)k
+5828(twice,)s 6440(e)s 3(xcept)k 7110(in)s 7341(a)s
+7495(fe)s 6(w)k 7889(pathological)s 0 12677(cases)m 555(that)s
+973(f)s 2(ail)k 1343(to)s 1582(con)s 9(v)k 3(er)k 4(ge.)k
+480 12303(Cross)m 1123(referencing)s 2310(in)s 2600(Lout)s 3159(is)s
+3416(implemented)s 4769(on)s 5113(top)s 5519(of)s 5837(a)s
+6050(simple)s 6790(database)s 7716(system.)s 8591(Each)s 0 12015(database)m
+879(is)s 1089(either)s 1692(writable)s 2530(or)s 2790(readable)s
+3655(b)s 4(ut)k 4017(not)s 4383(both)s 4867(at)s
+5099(once,)s 5658(and)s 6062(holds)s 6633(a)s 6799(set)s
+7124(of)s 7395(k)s 2(e)k 3(y-v)k 6(alue)k
+8384(entries:)s 0 11727(the)m 348(k)s 2(e)k 3(ys)k
+833(are)s 1180(ASCII)s 1861(strings,)s 2605(and)s 3009(the)s
+3358(v)s 6(alues)k 4014(are)s 4361(Lout)s 4873(objects,)s
+5658(possibly)s 6510(with)s 6992(en)s 9(vironments,)k 8393(written)s
+0 11439(in)m 290(Lout)s 850(source.)s 1685(Operations)s 2833(are)s
+3227(pro)s 3(vided)k 4181(for)s 4566(writing)s 5357(an)s
+5687(entry)s 15(,)k 6318(con)s 9(v)k 3(erting)k
+7429(from)s 8001(writable)s 8887(to)s 0 11151(readable,)m 916(retrie)s 6(v)k 6(al)k
+1753(by)s 2047(k)s 2(e)k 3(y)k 15(,)k
+2480(and)s 2884(sequential)s 3908(retrie)s 6(v)k 6(al)k
+4745(in)s 4988(k)s 2(e)k 3(y)k 5383(order)s 13(.)k
+480 10777(The)m 905(implementation,)s 2509(which)s 3148(is)s 3354(quite)s
+3885(unsophisticated,)s 5477(emplo)s 2(ys)k 6334(one)s 6732(or)s
+6988(more)s 7532(ASCII)s 240 fnt83 8208 10779(database)m 0 10491(\207les)m
+240 fnt82 380 10489(,)m 485(containing)s 1545(the)s 1891(v)s 6(alues,)k
+2600(and)s 3001(one)s 3401(ASCII)s 240 fnt83 4078 10491(inde)m 4(x)k
+4650(\207le)s 240 fnt82 4992 10489(per)m 5354(database,)s 6282(containing)s
+7342(the)s 7688(k)s 2(e)k 3(ys.)k 8283(T)s 19(o)k
+8580(write)s 0 10201(an)m 283(entry)s 15(,)k 866(the)s
+1214(v)s 6(alue)k 1782(is)s 1992(\207rst)s 2423(appended)s
+3399(to)s 3638(a)s 3804(database)s 4683(\207le,)s 5095(then)s
+5564(a)s 5730(line)s 6144(lik)s 2(e)k 220 fnt35
+480 9700(@Chapter&&intro ch1.ld 57)m 240 fnt82 0 9204(is)m 204(appended)s 1174(to)s
+1406(the)s 1748(inde)s 3(x)k 2326(\207le,)s 2731(gi)s 6(ving)k
+3384(the)s 3725(\207le)s 4080(and)s 4478(of)s 6(fset)k
+5068(where)s 5702(the)s 6043(v)s 6(alue)k 6605(is)s
+6809(stored.)s 7550(T)s 19(o)k 7844(con)s 9(v)k 3(ert)k
+8602(from)s 0 8916(writable)m 831(to)s 1062(readable,)s 1971(the)s
+2311(inde)s 3(x)k 2887(\207le)s 3241(is)s 3443(sorted.)s
+4183(Then)s 4725(retrie)s 6(v)k 6(al)k 5554(by)s
+5840(k)s 2(e)k 3(y)k 6228(requires)s 7040(a)s
+7198(binary)s 7856(search)s 8515(of)s 8778(the)s 0 8628(inde)m 3(x)k
+584(\207le)s 945(and)s 1349(one)s 1751(seek)s 2237(into)s
+2662(a)s 2828(database)s 3707(\207le,)s 4119(and)s 4523(sequential)s
+5547(retrie)s 6(v)k 6(al)k 6384(by)s 6678(k)s 2(e)k 3(y)k
+7073(is)s 7283(tri)s 6(vial.)k 480 8254(This)m 945(database)s
+1813(system)s 2526(is)s 2725(used)s 3211(in)s 3443(se)s 6(v)k 3(eral)k
+4154(w)s 2(ays.)k 4797(F)s 3(or)k 5175(an)s
+5447(e)s 3(xternal)k 6257(database,)s 7176(say)s 7538(of)s
+7798(bibliographic)s 0 7966(references,)m 1093(the)s 1447(user)s 1912(creates)s
+2631(the)s 2985(database)s 3871(\207le)s 4238(of)s 4516(v)s 6(alues)k
+5178(\(without)s 6054(en)s 9(vironments\),)k 7540(Lout)s 8058(creates)s
+8778(the)s 0 7678(inde)m 3(x)k 587(\207le)s 951(whene)s 6(v)k 3(er)k
+1935(it)s 2130(cannot)s 2831(\207nd)s 3265(one,)s 3721(and)s
+4128(retrie)s 6(v)k 6(als)k 5057(by)s 5354(k)s 2(e)k 3(y)k
+5752(proceed)s 6570(as)s 6823(usual.)s 7495(Cross)s 8095(references)s
+0 7390(with)m 476(tags)s 906(other)s 1451(than)s 220 fnt35
+1913 7387(preceding)m 240 fnt82 2918 7390(and)m 220 fnt35 3316 7387(f)m 6(ollo)k 3(wing)k
+240 fnt82 4200 7390(are)m 4540(treated)s 5241(as)s 5485(described)s
+6453(abo)s 3(v)k 3(e,)k 7119(by)s 7407(writing)s
+8144(all)s 8430(tagged)s 0 7102(in)m 9(v)k 4(ocations)k
+1131(\(with)s 1681(en)s 9(vironments\))k 3092(to)s 3320(a)s
+3475(single)s 4092(database,)s 5011(which)s 5643(is)s 5842(con)s 9(v)k 3(erted)k
+6820(to)s 7049(readable)s 7903(at)s 8125(the)s 8462(end)s
+8855(of)s 0 6814(the)m 334(run)s 695(for)s 1018(retrie)s 6(v)k 6(als)k
+1930(on)s 2212(the)s 2545(ne)s 3(xt)k 3000(run.)s
+3468(Sorted)s 4135(g)s 1(alle)k 3(ys,)k 4900(such)s
+5382(as)s 5617(inde)s 3(x)k 6186(entries,)s 6915(are)s
+7247(written)s 7965(out)s 8316(inde)s 3(x)k 3(ed)k
+0 6526(by)m 307(tar)s 4(get)k 920(and)s 1337(k)s 2(e)k 3(y)k
+1746(and)s 2163(retrie)s 6(v)k 3(ed)k 3074(sequentially)s
+4297(on)s 4607(the)s 4969(ne)s 3(xt)k 5451(run.)s
+5948(Unsorted)s 6896(g)s 1(alle)k 3(ys)k 7634(with)s
+8130(preceding)s 0 6238(tar)m 4(gets)k 684(which)s 1327(pop)s
+1741(of)s 6(f)k 2086(the)s 2435(top)s 2795(of)s
+3067(the)s 3416(root)s 3863(g)s 1(alle)k 3(y)k
+4498(without)s 5290(\207nding)s 6023(a)s 6190(tar)s 4(get,)k
+6837(such)s 7334(as)s 7585(entries)s 8273(in)s 8518(tables)s
+0 5950(of)m 274(contents,)s 1181(are)s 1532(treated)s 2242(similarly)s 15(,)k
+3186(e)s 3(xcept)k 3870(that)s 4291(the)s 3(y)k
+4758(are)s 5108(inde)s 3(x)k 3(ed)k 5922(by)s
+6219(tar)s 4(get)k 6821(and)s 7229(a)s 7398(sequence)s
+8335(number)s 0 5662(that)m 418(preserv)s 3(es)k 1368(their)s
+1865(relati)s 6(v)k 3(e)k 2627(order)s 3191(during)s
+3869(the)s 4217(sort.)s 480 5288(When)m 1107(Lout)s 1617(processes)s
+2581(a)s 2745(multi-\207le)s 3687(document,)s 4735(one)s 5135(cross)s
+5674(reference)s 6615(database)s 7492(\207le)s 7850(is)s 8058(written)s
+8788(for)s 0 5000(each)m 504(input)s 1065(\207le,)s 1486(b)s 4(ut)k
+1858(the)s 3(y)k 2330(share)s 2899(a)s 3074(common)s
+3979(inde)s 3(x)k 4572(\207le.)s 5050(At)s 5358(end)s
+5772(of)s 6052(run,)s 6487(the)s 6844(ne)s 6(w)k
+7301(inde)s 3(x)k 7894(\207le)s 8264(is)s 8484(sorted)s
+0 4712(and)m 404(mer)s 4(ged)k 1176(with)s 1658(the)s
+2007(old)s 2371(one)s 2774(in)s 3017(such)s 3514(a)s
+3680(w)s 2(ay)k 4132(as)s 4383(to)s 4622(preserv)s 3(e)k
+5485(entries)s 6172(relating)s 6955(to)s 7194(\207les)s 7644(not)s
+8010(read)s 8480(on)s 8778(the)s 0 4424(current)m 737(run.)s
+1221(This)s 1699(pro)s 3(vides)k 2572(some)s 3135(support)s
+3914(for)s 4254(piecemeal)s 5278(formatting,)s 6395(b)s 4(ut)k
+6758(e)s 6(v)k 3(entually)k 7801(the)s 8150(\207les)s
+8601(must)s 0 4136(all)m 293(be)s 575(formatted)s 1561(together)s 13(.)k
+480 3762(When)m 1120(a)s 220 fnt35 1297 3759(preceding)m 240 fnt82
+2319 3762(or)m 220 fnt35 2590 3759(f)m 6(ollo)k 3(wing)k
+240 fnt82 3491 3762(cross)m 4044(reference)s 4998(is)s 5220(found,)s
+5897(it)s 6100(is)s 6321(attached)s 7187(to)s 7437(a)s
+7614(g)s 1(alle)k 3(y)k 8259(inde)s 3(x)k
+8855(of)s 0 3474(type)m 240 fnt83 474 3476(CR)m 9(OSS_PREC)k
+240 fnt82 1973 3474(or)m 240 fnt83 2238 3476(CR)m 9(OSS_FOLL)k
+240 fnt82 3653 3474(,)m 3766(together)s 4615(with)s 5103(an)s
+5392(automatically)s 6752(generated)s 7745(tag)s 8097(composed)s 0 3186(of)m
+258(the)s 593(current)s 1316(\207le)s 1663(name)s 2224(and)s
+2615(a)s 2767(sequence)s 3687(number)s 13(.)k 4556(When)s
+5172(a)s 5324(tagged)s 6007(in)s 9(v)k 4(ocation)k
+7048(is)s 7244(found,)s 7897(it)s 8076(is)s 8272(attached)s
+0 2898(to)m 237(a)s 240 fnt83 401 2900(CR)m 9(OSS_T)k 12(ARG)k
+240 fnt82 1875 2898(inde)m 3(x.)k 2565(These)s 3190(g)s 1(alle)k 3(y)k
+3822(inde)s 3(x)k 3(es)k 4595(are)s 4940(carried)s
+5658(along)s 6241(through)s 7040(the)s 7386(dynamic)s 8261(tree,)s
+8722(and)s 0 2610(e)m 6(v)k 3(entually)k 1049(pop)s
+1470(of)s 6(f)k 1822(the)s 2178(top)s 2545(of)s
+2824(the)s 3180(root)s 3633(g)s 1(alle)k 3(y)k 15(,)k
+4313(at)s 4553(which)s 5203(point)s 5763(it)s 5963(is)s
+6181(easy)s 6668(to)s 6915(determine)s 7934(which)s 8584(cross)s
+0 2322(references)m 1029(refer)s 1536(to)s 1773(which)s 2413(in)s 9(v)k 4(ocations,)k
+3608(since)s 4153(the)s 4499(inde)s 3(x)k 3(es)k
+5273(are)s 5618(no)s 6(w)k 6077(in)s 6318(\207nal)s
+6796(printed)s 7529(document)s 8531(order)s 13(.)k 0 2034(Each)m
+541(referenced)s 1613(in)s 9(v)k 4(ocation)k 2674(is)s
+2891(then)s 3367(written)s 4107(to)s 4353(the)s 4708(cross)s
+5257(reference)s 6207(database,)s 7144(multiply)s 8015(inde)s 3(x)k 3(ed)k
+8832(by)s 0 1746(the)m 344(generated)s 1327(tags)s 1758(of)s
+2025(the)s 2369(associated)s 3404(cross)s 3942(references.)s 5082(On)s
+5427(the)s 5771(ne)s 3(xt)k 6236(run,)s 6657(when)s
+7229(the)s 7573(same)s 220 fnt35 8115 1743(preceding)m 240 fnt82
+0 1458(and)m 220 fnt35 408 1455(f)m 6(ollo)k 3(wing)k
+240 fnt82 1302 1458(cross)m 1848(references)s 2883(are)s 3234(found,)s
+3904(chances)s 4716(are)s 5067(good)s 5609(that)s 6031(the)s
+6383(same)s 6934(tags)s 7374(will)s 7804(be)s 8090(generated,)s
+0 1170(and)m 404(the)s 752(appropriate)s 1896(v)s 6(alues)k
+2552(can)s 2941(be)s 3223(retrie)s 6(v)k 3(ed)k
+4120(from)s 4644(the)s 4992(database)s 5871(immediately)s 15(.)k
+480 796(This)m 982(approach)s 1942(w)s 2(as)k 2389(the)s
+2763(genesis)s 3544(of)s 3842(the)s 220 fnt35 4216 793(@T)m 26(agged)k
+240 fnt82 5231 796(operator)m 9(,)k 6151(whose)s 6845(implementation)s
+8428(is)s 8665(no)s 6(w)k 0 508(immediate:)m 1106(for)s
+1436(each)s 220 fnt35 1923 505(@T)m 26(agged)k 240 fnt82
+2903 508(operator)m 3751(we)s 4078(produce)s 4897(one)s 240 fnt83
+5290 510(CR)m 9(OSS_PREC)k 240 fnt82 6775 508(or)m 240 fnt83
+7026 510(CR)m 9(OSS_FOLL)k 240 fnt82 8492 508(g)m 1(alle)k 3(y)k
+0 220(inde)m 3(x,)k 645(replacing)s 1596(the)s 1953(generated)s
+2949(tag)s 3304(with)s 3795(the)s 4152(right)s 4672(parameter)s
+5696(of)s 5976(the)s 220 fnt35 6333 217(@T)m 26(agged)k
+240 fnt82 7331 220(operator)m 13(.)k 8288(Nothing)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 38 39
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+4291 13844(-)m 4419(38)s 4706(-)s 0 13253(more)m 547(is)s
+757(required.)s 240 fnt84 0 12460(7.)m 291(Conclusion)s 240 fnt82
+480 12028(Since)m 1054(its)s 1316(public)s 1953(release)s 2657(in)s
+2886(October)s 3702(1991,)s 4275(the)s 4609(Basser)s 5292(Lout)s
+5790(interpreter)s 6829(has)s 7185(been)s 7680(ported)s 8335(without)s
+0 11740(incident)m 819(to)s 1047(a)s 1202(wide)s 1712(v)s 6(ariety)k
+2412(of)s 2672(Unix)s 3195(systems)s 3992(and)s 4385(hardw)s 2(are.)k
+5425(It)s 5619(w)s 2(as)k 6029(tested)s 6633(e)s 3(xtensi)k 6(v)k 3(ely)k
+7753(before)s 8408(release)s 0 11452(on)m 293(its)s 565(o)s 6(wn)k
+1025(documentation,)s 2549(and)s 2949(the)s 3293(fe)s 6(w)k
+3695(minor)s 4321(b)s 4(ugs)k 4817(which)s 5455(ha)s 4(v)k 3(e)k
+5952(emer)s 4(ged)k 6824(since)s 7367(then)s 7832(ha)s 4(v)k 3(e)k
+8329(all)s 8617(been)s 0 11164(\207x)m 3(ed)k 534(in)s
+777(the)s 1125(second)s 1848(release,)s 2617(scheduled)s 3632(to)s
+3871(appear)s 4568(in)s 4811(mid-1992.)s 480 10790(Se)m 6(v)k 3(en)k
+1105(substantial)s 2173(packages)s 3093(of)s 3355(de\207nitions)s 4407(are)s
+4746(distrib)s 4(uted)k 5813(with)s 6286(Basser)s 6975(Lout.)s
+7582(The)s 8001(Document)s 8998(-)s 0 10502(Layout)m 748(package,)s
+1649(and)s 2063(its)s 2349(v)s 6(ariants)k 3160(ReportLayout)s
+4560(and)s 4974(BookLayout,)s 6289(pro)s 3(vide)k 7083(the)s
+7441(standard)s 8320(features)s 0 10214(that)m 411(all)s 696(documents)s
+1776(require:)s 2610(pages,)s 3254(columns,)s 4165(paragraphs,)s 5313(headings,)s
+6263(footnotes,)s 7252(\210oating)s 8028(\207gures)s 8722(and)s 0 9926(tables,)m
+683(chapters)s 1550(and)s 1973(sections,)s 2870(displays)s 3724(and)s
+4148(lists,)s 4658(access)s 5339(to)s 5597(bibliographic)s 6945(databases,)s
+7987(cross)s 8549(refer)s 8998(-)s 0 9638(ences,)m 623(and)s
+1012(so)s 1263(on)s 1545([11].)s 2092(The)s 2505(BookLayout)s
+3748(package)s 4572(has)s 4927(e)s 3(xtra)k 5446(features)s
+6237(needed)s 6958(by)s 7237(books,)s 7902(including)s 8843(an)s
+0 9350(automatically)m 1355(generated)s 2343(table)s 2864(of)s 3136(contents,)s
+4041(Roman)s 4791(page)s 5300(numbers)s 6176(for)s 6515(the)s
+6864(pref)s 2(atory)k 7792(material,)s 8682(run)s 8998(-)s
+0 9062(ning)m 468(page)s 965(headers,)s 1790(odd)s 2197(and)s
+2589(e)s 6(v)k 3(en)k 3078(page)s 3574(layouts,)s
+4361(and)s 4754(a)s 4908(sorted)s 5539(inde)s 3(x.)k
+6220(The)s 6637(Eq)s 6949(package)s 7778(formats)s 8546(equa)s
+8998(-)s 0 8774(tions,)m 572(and)s 976(P)s 3(as)k
+1356(formats)s 2136(P)s 3(ascal)k 2798(programs)s 3752([10];)s
+4262(T)s 19(ab)k 4668(formats)s 5448(tables)s 6056([12];)s
+6566(and)s 6970(Fig)s 7342(dra)s 3(ws)k 7961(\207gures)s
+8663([6].)s 480 8400(The)m 899(non-e)s 3(xpert)k 1983(user)s
+2431(who)s 2888(uses)s 3341(these)s 3879(packages)s 4797(percei)s 6(v)k 3(es)k
+5732(a)s 5889(system)s 6603(of)s 6865(a)s 7021(standard)s
+7880(quite)s 8404(similar)s 0 8112(to)m 246(other)s 804(fully)s
+1317(de)s 6(v)k 3(eloped)k 2357(batch)s 2940(formatters,)s
+4034(although)s 4936(the)s 5292(interf)s 2(ace)k 6187(is)s
+6405(considerably)s 7688(more)s 8243(coherent)s 0 7824(than,)m 525(say)s 15(,)k
+942(the)s 1297(trof)s 6(f)k 1792(f)s 2(amily')k 13(s)k
+2630([8].)s 3078(The)s 3512(e)s 3(xpert)k 4173(user)s
+4637(percei)s 6(v)k 3(es)k 5588(a)s 5760(system)s
+6490(which)s 7139(is)s 7355(radically)s 8251(dif)s 6(ferent)k
+0 7536(from)m 547(pre)s 6(vious)k 1440(ones,)s 2009(in)s
+2276(which)s 2941(a)s 3131(great)s 3691(deal)s 4168(can)s
+4580(be)s 4886(achie)s 6(v)k 3(ed)k 5808(v)s 3(ery)k
+6308(quickly)s 15(.)k 7198(T)s 19(o)k 7522(tak)s 2(e)k
+7997(an)s 8304(e)s 3(xtreme)k 0 7248(e)m 3(xample,)k
+936(P)s 3(as)k 1338(w)s 2(as)k 1781(designed,)s
+2761(implemented,)s 4138(tested,)s 4825(and)s 5251(documented)s 6501(in)s
+6766(one)s 7190(afternoon.)s 8292(Eq)s 8639(took)s 0 6960(about)m
+587(a)s 747(week,)s 1353(b)s 4(ut)k 1709(most)s
+2229(of)s 2494(that)s 2906(time)s 3380(w)s 2(as)k
+3796(spent)s 4355(in)s 4592(marshalling)s 5767(the)s 6110(v)s 6(ast)k
+6543(repertoire)s 7520(of)s 7785(mathematical)s 0 6672(symbols,)m 934(and)s
+1367(\207ne-tuning)s 2499(the)s 2876(spacing.)s 3800(Most)s 4381(of)s
+4681(the)s 5059(ef)s 6(fort)k 5671(seems)s 6335(to)s
+6603(go)s 6925(into)s 7379(designing)s 8392(a)s 8588(good)s
+0 6384(interf)m 2(ace;)k 944(most)s 1469(symbols)s 2318(are)s
+2665(implemented)s 3971(in)s 4214(just)s 4619(one)s 5021(or)s
+5280(a)s 5446(fe)s 6(w)k 5852(lines)s 6354(of)s
+6625(Lout.)s 480 6010(A)m 698(group)s 1297(of)s 1556(about)s
+2135(20)s 2418(satis\207ed)s 3246(non-e)s 3(xpert)k 4327(users)s
+4856(has)s 5214(gro)s 6(wn)k 5864(up)s 6145(within)s
+6800(the)s 7136(author')s 13(s)k 7944(department,)s 0 5722(mainly)m
+703(Honours)s 1563(students)s 2383(with)s 2849(no)s 3127(in)s 9(v)k 3(estment)k
+4208(in)s 4436(older)s 4971(systems)s 5764(to)s 5987(hold)s
+6456(them)s 6978(back.)s 7579(Basser)s 8260(Lout)s 8756(has)s
+0 5434(been)m 511(adv)s 3(ertised)k 1550(on)s 1849(the)s
+2199(Internet)s 3003(ne)s 6(ws)k 3542(as)s 3794(a)s 4(v)k 6(ailable)k
+4704(via)s 5058(anon)s 3(ymous)k 240 fnt83 6213 5436(ftp)m
+240 fnt82 6458 5434(,)m 6567(so)s 6835(the)s 7185(e)s 3(xtent)k
+7828(of)s 8101(its)s 8379(outside)s 0 5146(user)m 469(community)s
+1624(is)s 1845(hard)s 2339(to)s 2589(g)s 1(auge.)k
+3335(About)s 4005(50)s 4311(people)s 5016(ha)s 4(v)k 3(e)k
+5528(mailed)s 6247(comments)s 7292(or)s 7562(questions)s 8528(to)s
+8778(the)s 0 4858(author;)m 733(man)s 3(y)k 1327(of)s
+1608(these)s 2166(people)s 2871(ha)s 4(v)k 3(e)k
+3382(ported)s 4062(the)s 4420(program,)s 5348(written)s 6092(small)s
+6674(de\207nitions,)s 7802(and)s 8217(modi\207ed)s 0 4570(the)m 348(standard)s
+1216(packages.)s 480 4196(Future)m 1160(w)s 2(ork)k 1711(could)s
+2301(usefully)s 3125(be)s 3(gin)k 3711(with)s 4194(the)s
+4542(impro)s 3(v)k 3(ements)k 5955(suggested)s 6957(in)s
+7200(this)s 7596(paper:)s 8294(o)s 3(v)k 3(erlap)k
+8998(-)s 0 3908(ping)m 489(spanning)s 1418(columns,)s 2346(better)s
+2960(semantics)s 3964(for)s 4312(a)s 4(v)k 6(ailable)k
+5231(space,)s 5880(and)s 6294(especially)s 7314(horizontal)s 8349(g)s 1(alle)k 3(ys.)k
+0 3620(Support)m 814(for)s 1147(non-)s 1575(European)s 2544(languages)s
+3547(is)s 3752(also)s 4185(needed.)s 5022(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+5977(the)s 6320(main)s 6850(task)s 7291(is)s 7496(the)s
+7839(de)s 6(v)k 3(elopment)k 0 3332(of)m 271(an)s
+553(interacti)s 6(v)k 3(e)k 1607(document)s 2610(editor)s
+3227(based)s 3829(on)s 4126(Lout.)s 4741(A)s 4971(structure)s
+5861(editor)s 6478(similar)s 7199(to)s 7438(Lilac)s 7980([13],)s
+8484(which)s 0 3044(already)m 753(has)s 1119(objects)s 1843(and)s
+2243(user)s 4(-)k 2705(de\207ned)s 3463(symbols,)s 4364(is)s
+4570(en)s 9(visaged;)k 5626(since)s 6168(cross)s 6706(references)s
+7733(are)s 8076(easy)s 8550(when)s 0 2756(the)m 343(whole)s
+979(document)s 1978(is)s 2182(a)s 4(v)k 6(ailable,)k
+3136(the)s 3479(only)s 3954(major)s 4565(ne)s 6(w)k
+5007(problem)s 5859(is)s 6064(the)s 6406(treatment)s 7362(of)s
+7628(g)s 1(alle)k 3(ys,)k 8402(includ)s 8998(-)s
+0 2468(ing)m 359(the)s 707(e)s 3(xpansion)k 1732(and)s
+2136(retraction)s 3107(of)s 3378(recepti)s 6(v)k 3(e)k
+4300(symbols.)s 240 fnt84 0 1719(Note.)m 240 fnt82 657 1720(Since)m
+1253(the)s 1610(abo)s 3(v)k 3(e)k 2240(w)s 2(as)k
+2670(written)s 3412(the)s 3768(author)s 4448(has)s 4827(completed)s
+5889(a)s 6064(re)s 6(vised)k 6815(v)s 3(ersion)k
+7581(of)s 7861(Basser)s 8567(Lout,)s 0 1432(in)m 243(which)s
+885(the)s 1233(problem)s 2090(concerning)s 3206(a)s 4(v)k 6(ailable)k
+4114(space)s 4701(mentioned)s 5769(in)s 6012(Section)s 6786(2.5)s
+7132(has)s 7502(been)s 8011(resolv)s 3(ed.)k 240 fnt84
+0 683(Ackno)m 2(wledgment.)k 240 fnt82 2027 684(The)m 2534(author)s
+3283(gratefully)s 4344(ackno)s 6(wledges)k 5824(man)s 3(y)k
+6485(v)s 6(aluable)k 7424(discussions)s 8644(with)s 0 396(Douglas)m
+862(W)s 22(.)k 1183(Jones,)s 1835(especially)s 2857(during)s
+3548(the)s 3909(de)s 6(v)k 3(elopment)k 5209(of)s
+5493(the)s 5854(g)s 1(alle)k 3(y)k 6501(abstraction;)s
+7674(and)s 8091(also)s 8543(man)s 3(y)k 0 108(helpful)m
+732(comments)s 1766(on)s 2063(presentation)s 3288(by)s 3582(the)s
+3930(anon)s 3(ymous)k 5083(referee.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 39 40
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+4289 13844(-)m 4417(39)s 4708(-)s 240 fnt84 0 12961(Refer)m 4(ences)k
+240 fnt82 0 12507(1.)m 480(Kingston,)s 1501(Jef)s 6(fre)k 3(y)k
+2244(H..)s 2677(Document)s 3770(F)s 3(ormatting)k 4918(with)s
+5436(Lout)s 5888(.)s 6088(T)s 16(ech.)k 6690(Rep.)s
+7216(408)s 7659(\(1991\))s 8286(,)s 8429(Basser)s 480 12219(Department)m
+1668(of)s 1939(Computer)s 2956(Science,)s 3806(The)s 4234(Uni)s 6(v)k 3(ersity)k
+5288(of)s 5559(Sydne)s 3(y)k 15(,)k 6367(Australia)s
+7242(.)s 0 11716(2.)m 480(Kingston,)s 1492(Jef)s 6(fre)k 3(y)k
+2227(H..)s 2652(A)s 2910(ne)s 6(w)k 3385(approach)s
+4347(to)s 4613(document)s 5645(formatting)s 6646(.)s 6838(T)s 16(ech.)k
+7432(Rep.)s 7950(412)s 8392(\(1991\))s 9019(,)s 480 11428(Basser)m
+1177(Department)s 2365(of)s 2636(Computer)s 3653(Science,)s 4503(The)s
+4931(Uni)s 6(v)k 3(ersity)k 5985(of)s 6256(Sydne)s 3(y)k 15(,)k
+7064(Australia)s 7939(.)s 0 10925(3.)m 480(Kingston,)s 1491(Jef)s 6(fre)k 3(y)k
+2224(H..)s 2647(The)s 3101(Basser)s 3824(Lout)s 4362(Document)s
+5445(F)s 3(ormatter)k 6383(,)s 6516(1991)s 6971(.)s
+7161(Computer)s 8204(program;)s 480 10637(V)m 26(ersion)k 1287(2)s
+1480(publicly)s 2337(a)s 4(v)k 6(ailable)k 3264(in)s
+3526(the)s 240 fnt83 3893 10639(pub)m 240 fnt82 4326 10637(subdirectory)m
+5595(of)s 5885(the)s 6252(home)s 6859(directory)s 7794(of)s
+240 fnt83 8084 10639(ftp)m 240 fnt82 8408 10637(to)m 8667(host)s
+240 fnt83 480 10351(ftp.cs.su.oz.au)m 240 fnt82 1924 10349(with)m 2439(login)s
+3021(name)s 240 fnt83 3628 10351(anonymous)m 240 fnt82 4808 10349(and)m
+5246(no)s 5572(passw)s 2(ord.)k 6671(Distrib)s 4(ution)k
+7912(via)s 8297(email)s 8916(is)s 480 10061(a)m 4(v)k 6(ailable)k
+1388(for)s 1726(non-)s 240 fnt83 2154 10063(ftp)m 240 fnt82
+2459 10061(sites.)m 3047(All)s 3407(enquiries)s 4334(to)s 4573(jef)s 6(f@cs.su.oz.au.)k
+0 9558(4.)m 480(Furuta,)s 1211(Richard,)s 2075(Sco\207eld,)s 2965(Jef)s 6(fre)k 3(y)k 15(,)k
+3710(and)s 4113(Sha)s 3(w)k 15(,)k 4734(Alan.)s
+5363(Document)s 6419(formatting)s 7480(systems:)s 8402(surv)s 3(e)k 3(y)k 15(,)k
+480 9270(concepts,)m 1424(and)s 1828(issues)s 2390(.)s 240 fnt83
+2554 9272(Computing)m 3673(Surve)s 7(ys)k 240 fnt84 4465 9269(14)m
+240 fnt82 4699 9270(,)m 4806(417\211472)s 5700(\(1982\))s 6327(.)s
+0 8765(5.)m 480(K)s 6(ernighan,)k 1645(Brian)s 2287(W)s 22(.)k
+2649(and)s 3107(Cherry)s 15(,)k 3917(Lorinda)s 4789(L..)s
+5213(A)s 5497(system)s 6275(for)s 6667(typesetting)s 7824(mathematics)s
+9022(.)s 240 fnt83 480 8479(Communications)m 2158(of)s 2439(the)s
+2784(A)s 7(CM)k 240 fnt84 3351 8476(18)m 240 fnt82
+3585 8477(,)m 3692(182\211193)s 4576(\(1975\))s 5203(.)s 0 7977(6.)m
+480(Kingston,)s 1488(Jef)s 6(fre)k 3(y)k 2218(H..)s
+2638(Fig)s 3033(\211)s 3236(a)s 3425(Lout)s 3961(package)s
+4824(for)s 5185(dra)s 3(wing)k 6042(\207gures)s 6684(.)s
+6871(T)s 16(ech.)k 7460(Rep.)s 7973(411)s 8392(\(1991\))s
+9019(,)s 480 7689(Basser)m 1177(Department)s 2365(of)s 2636(Computer)s
+3653(Science,)s 4503(The)s 4931(Uni)s 6(v)k 3(ersity)k
+5985(of)s 6256(Sydne)s 3(y)k 15(,)k 7064(Australia)s
+7939(.)s 0 7184(7.)m 480(Reid,)s 1042(Brian)s 1633(K..)s
+2033(A)s 2266(High-)s 2813(Le)s 6(v)k 3(el)k
+3406(Approach)s 4410(to)s 4652(Computer)s 5672(Document)s 6732(Production)s
+7779(.)s 7946(In)s 240 fnt83 8205 7186(Pr)m 10(oceed)k
+240 fnt82 8998 7184(-)m 240 fnt83 480 6898(ings)m 935(of)s
+1217(the)s 1564(7th)s 1926(Symposium)s 3074(on)s 3370(the)s
+3716(Principles)s 4755(of)s 5037(Pr)s 10(o)k 2(gr)k 3(amming)k
+6421(Langua)s 2(g)k 2(es)k 7526(\(POPL\),)s 8376(Las)s
+8779(V)s 26(e)k 240 fnt82 8998 6896(-)m 240 fnt83
+480 6610(gas)m 868(NV)s 240 fnt82 1192 6608(,)m 1299(pages)s
+1895(24\21131)s 2470(,)s 2577(1980)s 3052(.)s 0 6103(8.)m
+480(Joseph)s 1207(F)s 19(.)k 1443(Ossanna.)s 2436(Nrof)s 6(f/T)k 8(rof)k 6(f)k
+3605(User')s 13(s)k 4284(Manual)s 5010(.)s 5193(T)s 16(ech.)k
+5777(Rep.)s 6285(54)s 6597(\(1976\))s 7224(,)s 7349(Bell)s
+7821(Laboratories)s 9019(,)s 480 5815(Murray)m 1251(Hill,)s 1729(NJ)s
+2051(07974)s 2645(.)s 0 5310(9.)m 480(Knuth,)s 1186(Donald)s
+1949(E..)s 240 fnt83 2319 5312(The)m 2731(T)s 2882 5264(E)m
+3033 5312(XBook)m 240 fnt82 3675 5310(.)m 3839(Addison-W)s 19(esle)k 3(y)k
+5419(,)s 5526(1984)s 6000(.)s 0 4807(10.)m 480(Kingston,)s
+1485(Jef)s 6(fre)k 3(y)k 2212(H..)s 2629(Eq)s
+2973(\211)s 3173(a)s 3359(Lout)s 3892(package)s 4752(for)s
+5110(typesetting)s 6232(mathematics)s 7430(.)s 7614(T)s 16(ech.)k
+8200(Rep.)s 8711(410)s 480 4519(\(1991\))m 1107(,)s 1248(Basser)s
+1980(Department)s 3203(of)s 3509(Computer)s 4561(Science,)s 5446(The)s
+5909(Uni)s 6(v)k 3(ersity)k 6998(of)s 7304(Sydne)s 3(y)k 15(,)k
+8147(Australia)s 9022(.)s 480 4231(\(Contains)m 1461(an)s 1744(appendix)s
+2677(describing)s 3726(the)s 4074(P)s 3(as)k 4454(P)s 3(ascal)k
+5116(formatter)s 13(.\))k 0 3728(11.)m 480(Kingston,)s 1478(Jef)s 6(fre)k 3(y)k
+2198(H..)s 2608(A)s 2851(be)s 3(ginners')k 3903(guide)s
+4504(to)s 4756(Lout)s 5208(.)s 5385(T)s 16(ech.)k
+5964(Rep.)s 6467(409)s 6891(\(1991\))s 7518(,)s 7638(Basser)s
+8348(Depart)s 8998(-)s 480 3440(ment)m 1018(of)s 1289(Computer)s
+2306(Science,)s 3156(The)s 3584(Uni)s 6(v)k 3(ersity)k
+4638(of)s 4909(Sydne)s 3(y)k 15(,)k 5717(Australia)s
+6592(.)s 0 2937(12.)m 480(Kingston,)s 1475(Jef)s 6(fre)k 3(y)k
+2193(H..)s 2600(T)s 19(ab)k 3017(\211)s 3207(a)s
+3384(Lout)s 3907(package)s 4757(for)s 5106(formatting)s 6177(tables)s
+6725(.)s 6900(T)s 16(ech.)k 7476(Rep.)s 7977(413)s
+8392(\(1991\))s 9019(,)s 480 2649(Basser)m 1177(Department)s 2365(of)s
+2636(Computer)s 3653(Science,)s 4503(The)s 4931(Uni)s 6(v)k 3(ersity)k
+5985(of)s 6256(Sydne)s 3(y)k 15(,)k 7064(Australia)s
+7939(.)s 0 2146(13.)m 480(Brooks,)s 1279(K)s 6(enneth)k
+2141(P)s 26(..)k 2472(Lilac:)s 3068(a)s 3234(tw)s 2(o-vie)k 6(w)k
+4183(document)s 5187(editor)s 5744(.)s 240 fnt83 5908 2148(IEEE)m
+6490(Computer)s 240 fnt82 7453 2146(,)m 7560(7\21119)s 8091(\(1991\))s
+8718(.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Trailer
+%%DocumentNeededResources: font Helvetica
+%%+ font Symbol
+%%+ font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%DocumentSuppliedResources: procset LoutStartUp
+%%+ procset LoutTabPrependGraphic
+%%+ procset LoutFigPrependGraphic
+%%+ procset LoutBasicSetup
+%%+ encoding vec2
+%%Pages: 40
+%%EOF
diff --git a/doc/expert/README b/doc/expert/README
index a69bf2b..8bf70b6 100644
--- a/doc/expert/README
+++ b/doc/expert/README
@@ -16,4 +16,4 @@ copy of the final outfile.ps is included. There
should be no warning messages on the fifth run.
Jeffrey H. Kingston
-9 March 2000
+8 April 2000
diff --git a/doc/expert/all b/doc/expert/all
index e2a5a78..84b3ae7 100644
--- a/doc/expert/all
+++ b/doc/expert/all
@@ -10,8 +10,8 @@ Lout
Document Formatting System }
@Author { Jeffrey H. Kingston }
- @Edition { Version 3.18
-February, 2000 }
+ @Edition { Version 3.20
+April, 2000 }
@Publisher { @I { @CopyRight Copyright 1991, 2000, Jeffrey
H. Kingston, Basser Department of Computer Science, The University
of Sydney 2006, Australia.} }
diff --git a/doc/expert/exa_bibl b/doc/expert/exa_bibl
index f1e1930..9de5f26 100644
--- a/doc/expert/exa_bibl
+++ b/doc/expert/exa_bibl
@@ -65,7 +65,7 @@ The right parameter of @@Open may use the exported parameters of the
left, and so the result is
@ID {
@Reference&&strunk1979style @Open
-{ @Author, {Slope @Font @Title}. @Publisher, @Year. } &0io
+{ @Author, {Slope @Font @Title}. @Publisher, @Year. } |0io
}
Incidentally, we are not limited to just one database of references;
several @@Database symbols can nominate the same symbol, and invocations of
@@ -105,7 +105,7 @@ and so on. The following prints the reference whose tag is
}
It has result
@ID {
-@RefStyle&&Book @Open { @Style strunk1979style } &0io
+@RefStyle&&Book @Open { @Style strunk1979style } |0io
}
Notice how the @Code "@Style" parameter of @Code "@RefStyle" is given the
parameter {@Code strunk1979style}, which it uses to open the appropriate
diff --git a/doc/expert/outfile.ps b/doc/expert/outfile.ps
new file mode 100644
index 0000000..2f14b30
--- /dev/null
+++ b/doc/expert/outfile.ps
@@ -0,0 +1,16122 @@
+%!PS-Adobe-3.0
+%%Creator: Basser Lout Version 3.20 (April 2000)
+%%CreationDate: Sat Apr 8 14:58:34 2000
+%%DocumentData: Binary
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%DocumentMedia: A4 595 842 0 white ()
+%%PageOrder: Ascend
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 842
+%%EndComments
+
+%%BeginProlog
+%%BeginResource: procset LoutStartUp
+/m { 3 1 roll moveto show } bind def
+/mo { 3 1 roll moveto true charpath stroke } bind def
+/s { exch currentpoint exch pop moveto show } bind def
+/so { exch currentpoint exch pop moveto true charpath stroke } bind def
+/k { exch neg 0 rmoveto show } bind def
+/ko { exch neg 0 rmoveto true charpath stroke } bind def
+/ul { gsave setlinewidth dup 3 1 roll
+ moveto lineto stroke grestore } bind def
+/in { 1440 mul } def
+/cm { 567 mul } def
+/pt { 20 mul } def
+/em { 120 mul } def
+/sp { louts mul } def
+/vs { loutv mul } def
+/ft { loutf mul } def
+/dg { } def
+
+/LoutGraphic {
+ /louts exch def
+ /loutv exch def
+ /loutf exch def
+ /ymark exch def
+ /xmark exch def
+ /ysize exch def
+ /xsize exch def
+} def
+
+/LoutGr2 { gsave translate LoutGraphic gsave } def
+
+/LoutFont
+{ findfont exch scalefont setfont
+} bind def
+
+/LoutRecode {
+ { findfont dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding exch def
+ currentdict end definefont pop
+ }
+ stopped pop
+} bind def
+
+/BeginEPSF {
+ /LoutEPSFState save def
+ /dict_count countdictstack def
+ /op_count count 1 sub def
+ userdict begin
+ /showpage { } def
+ 0 setgray 0 setlinecap
+ 1 setlinewidth 0 setlinejoin
+ 10 setmiterlimit [] 0 setdash newpath
+ /languagelevel where
+ { pop languagelevel
+ 1 ne
+ { false setstrokeadjust false setoverprint
+ } if
+ } if
+} bind def
+
+/EndEPSF {
+ count op_count sub { pop } repeat
+ countdictstack dict_count sub { end } repeat
+ LoutEPSFState restore
+} bind def
+%%EndResource
+
+%%BeginResource: encoding vec2
+/vec2 [
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
+/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /A /B /C /D /E /F /G
+/H /I /J /K /L /M /N /O
+/P /Q /R /S /T /U /V /W
+/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+/quoteleft /a /b /c /d /e /f /g
+/h /i /j /k /l /m /n /o
+/p /q /r /s /t /u /v /w
+/x /y /z /braceleft /bar /braceright /asciitilde /.notdef
+/quotesinglbase /quotedblbase /ellipsis /OE /oe /quotedblleft /quotedblright /fi
+/fl /endash /emdash /bullet /dagger /daggerdbl /florin /fraction
+/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
+/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
+] def
+%%EndResource
+
+%%BeginResource: procset LoutTabPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/tabf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Tab %
+% %
+% To assist in avoiding name clashes, the names %
+% of all these symbols begin with "ltab". %
+% %
+% Jeffrey H. Kingston %
+% 24 September 1991 %
+% 22 December 1992 %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% linewidth ltabhs -
+% horizontal single line
+/ltabhs
+{ 0 0 moveto xsize 0 lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhsp -
+% horizontal single line with projecting ends
+/ltabhsp
+{ 0 0 moveto xsize 0 lineto
+ setlinewidth 2 setlinecap stroke
+} def
+
+% linewidth ltabhd -
+% horizontal double line
+/ltabhd
+{ dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch 3 mul moveto xsize exch 3 mul lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhdb -
+% horizontal double line below mark
+/ltabhdb
+{ dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch -3 mul moveto xsize exch -3 mul lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhdnw -
+% horizontal double line with northwest corner
+/ltabhdnw
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ xsize exch 3 mul moveto
+ -3 mul exch 3 mul lineto
+ -3 mul 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdne -
+% horizontal double line with northeast corner
+/ltabhdne
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch 3 mul moveto
+ 3 mul xsize add exch 3 mul lineto
+ 3 mul xsize add 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdsw -
+% horizontal double line with southwest corner
+/ltabhdsw
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ xsize exch -3 mul moveto
+ -3 mul exch -3 mul lineto
+ -3 mul 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdse -
+% horizontal double line with southeast corner
+/ltabhdse
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch -3 mul moveto
+ 3 mul xsize add exch -3 mul lineto
+ 3 mul xsize add 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabvs -
+% vertical single line
+/ltabvs
+{ 0 0 moveto 0 ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabvd -
+% vertical double line
+/ltabvd
+{ dup dup
+ 0 0 moveto 0 ysize lineto
+ -3 mul 0 moveto -3 mul ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabvdr -
+% vertical double line to right of mark
+/ltabvdr
+{ dup dup
+ 0 0 moveto 0 ysize lineto
+ 3 mul 0 moveto 3 mul ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+%%EndResource
+
+%%BeginResource: procset LoutFigPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/figf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Fig Jeffrey H. Kingston %
+% Version 2.0 (includes CIRCUM label) January 1992 %
+% %
+% To assist in avoiding name clashes, the names of all symbols %
+% defined here begin with "lfig". However, this is not feasible %
+% with user-defined labels and some labels used by users. %
+% %
+% <point> is two numbers, a point. %
+% <length> is one number, a length %
+% <angle> is one number, an angle in degrees %
+% <dashlength> is one number, the preferred length of a dash %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+errordict begin
+ /handleerror
+ {
+ { /Times-Roman findfont 8 pt scalefont setfont
+ 0 setgray 4 pt 4 pt moveto
+ $error /errorname get
+ dup lfigdict exch known
+ { lfigdict exch get }
+ { 30 string cvs } ifelse
+ show
+ ( Command: ) show
+ $error /command get 30 string cvs show
+ } stopped {} if
+ showpage stop
+ } def
+end
+
+% concat strings: <string> <string> lfigconcat <string>
+% must be defined outside lfigdict since used in lfigpromotelabels
+/lfigconcat
+{ 2 copy length exch length add string
+ dup 0 4 index putinterval
+ dup 3 index length 3 index putinterval
+ 3 1 roll pop pop
+} def
+
+% <string> lfigdebugprint -
+% must be defined outside lfigdict since used in arbitrary places
+% /lfigdebugprint
+% { print
+% (; operand stack:\n) print
+% count copy
+% count 2 idiv
+% { ==
+% (\n) print
+% } repeat
+% (\n) print
+% } def
+
+/lfigdict 120 dict def
+lfigdict begin
+
+% error messages
+/dictfull (dictfull error: too many labels?) def
+/dictstackoverflow (dictstackoverflow error: labels nested too deeply?) def
+/execstackoverflow (execstackoverflow error: figure nested too deeply?) def
+/limitcheck (limitcheck error: figure nested too deeply or too large?) def
+/syntaxerror (syntaxerror error: syntax error in text of figure?) def
+/typecheck (typecheck error: syntax error in text of figure?) def
+/undefined (undefined error: unknown or misspelt label?) def
+/VMError (VMError error: run out of memory?) def
+
+% push pi onto stack: - lfigpi <num>
+/lfigpi 3.14159 def
+
+% arc directions
+/clockwise false def
+/anticlockwise true def
+
+% maximum of two numbers: <num> <num> lfigmax <num>
+/lfigmax { 2 copy gt { pop } { exch pop } ifelse } def
+
+% minimum of two numbers: <num> <num> lfigmin <num>
+/lfigmin { 2 copy lt { pop } { exch pop } ifelse } def
+
+% add two points: <point> <point> lfigpadd <point>
+/lfigpadd { exch 3 1 roll add 3 1 roll add exch } def
+
+% subtract first point from second: <point> <point> lfigpsub <point>
+/lfigpsub { 3 2 roll sub 3 1 roll exch sub exch } def
+
+% max two points: <point> <point> lfigpmax <point>
+/lfigpmax { exch 3 1 roll lfigmax 3 1 roll lfigmax exch } def
+
+% min two points: <point> <point> lfigpmin <point>
+/lfigpmin { exch 3 1 roll lfigmin 3 1 roll lfigmin exch } def
+
+% scalar multiplication: <point> <num> lfigpmul <point>
+/lfigpmul { dup 3 1 roll mul 3 1 roll mul exch } def
+
+% point at angle and distance: <point> <length> <angle> lfigatangle <point>
+/lfigatangle { 2 copy cos mul 3 1 roll sin mul lfigpadd } def
+
+% angle from one point to another: <point> <point> lfigangle <angle>
+/lfigangle { lfigpsub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+
+% distance between two points: <point> <point> lfigdistance <length>
+/lfigdistance { lfigpsub dup mul exch dup mul add sqrt } def
+
+% difference in x coords: <point> <point> lfigxdistance <length>
+/lfigxdistance { pop 3 1 roll pop sub } def
+
+%difference in y coords: <point> <point> lfigydistance <length>
+/lfigydistance { 3 1 roll pop sub exch pop } def
+
+% stroke a solid line: <length> <dashlength> lfigsolid -
+/lfigsolid
+{ pop pop [] 0 setdash stroke
+} def
+
+% stroke a lfigdashed line: <length> <dashlength> lfigdashed -
+/lfigdashed
+{ 2 copy div 2 le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch dup ] 0 setdash }
+ { dup [ exch 4 2 roll 2 copy div
+ 1 sub 2 div ceiling dup 4 1 roll
+ 1 add mul sub exch div ] 0 setdash
+ } ifelse stroke
+} def
+
+% stroke a lfigcdashed line: <length> <dashlength> lfigcdashed -
+/lfigcdashed
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch dup ] dup 0 get 2 div setdash }
+ { dup [ 4 2 roll exch 2 copy exch div
+ 2 div ceiling div 1 index sub
+ ] exch 2 div setdash
+ } ifelse stroke
+} def
+
+% stroke a dotted line: <length> <dashlength> lfigdotted -
+/lfigdotted
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch 0 exch ] 0 setdash }
+ { 1 index exch div ceiling div
+ [ 0 3 2 roll ] 0 setdash
+ } ifelse stroke
+} def
+
+% stroke a noline line: <length> <dashlength> lfignoline -
+/lfignoline
+{ pop pop
+} def
+
+% painting (i.e. filling): - lfigwhite - (etc.)
+/lfignopaint { } def
+/lfignochange { fill } def
+/lfigdarkblue { 0.0 0.0 0.5 setrgbcolor fill } def
+/lfigblue { 0.0 0.0 1.0 setrgbcolor fill } def
+/lfiglightblue { 0.5 0.5 1.0 setrgbcolor fill } def
+/lfigdarkgreen { 0.0 0.5 0.0 setrgbcolor fill } def
+/lfiggreen { 0.0 1.0 0.0 setrgbcolor fill } def
+/lfiglightgreen { 0.5 1.0 0.5 setrgbcolor fill } def
+/lfigdarkred { 0.5 0.0 0.0 setrgbcolor fill } def
+/lfigred { 1.0 0.0 0.0 setrgbcolor fill } def
+/lfiglightred { 1.0 0.5 0.5 setrgbcolor fill } def
+/lfigdarkcyan { 0.0 0.5 0.5 setrgbcolor fill } def
+/lfigcyan { 0.0 1.0 1.0 setrgbcolor fill } def
+/lfiglightcyan { 0.5 1.0 1.0 setrgbcolor fill } def
+/lfigdarkmagenta { 0.5 0.0 0.5 setrgbcolor fill } def
+/lfigmagenta { 1.0 0.0 1.0 setrgbcolor fill } def
+/lfiglightmagenta { 1.0 0.5 1.0 setrgbcolor fill } def
+/lfigdarkyellow { 0.5 0.5 0.0 setrgbcolor fill } def
+/lfigyellow { 1.0 1.0 0.0 setrgbcolor fill } def
+/lfiglightyellow { 1.0 1.0 0.5 setrgbcolor fill } def
+/lfigdarkgray { 0.2 0.2 0.2 setrgbcolor fill } def
+/lfiggray { 0.5 0.5 0.5 setrgbcolor fill } def
+/lfiglightgray { 0.8 0.8 0.8 setrgbcolor fill } def
+/lfigdarkgrey { 0.2 0.2 0.2 setrgbcolor fill } def
+/lfiggrey { 0.5 0.5 0.5 setrgbcolor fill } def
+/lfiglightgrey { 0.8 0.8 0.8 setrgbcolor fill } def
+/lfigblack { 0.0 0.0 0.0 setrgbcolor fill } def
+/lfigwhite { 1.0 1.0 1.0 setrgbcolor fill } def
+
+% line caps (and joins, not currently used)
+/lfigbutt 0 def
+/lfiground 1 def
+/lfigprojecting 2 def
+/lfigmiter 0 def
+/lfigbevel 2 def
+
+% shape and labels of the @Box symbol
+/lfigbox
+{
+ 0 0 /SW lfigpointdef
+ xsize 0 /SE lfigpointdef
+ xsize ysize /NE lfigpointdef
+ 0 ysize /NW lfigpointdef
+ SE 0.5 lfigpmul /S lfigpointdef
+ NW 0.5 lfigpmul /W lfigpointdef
+ W SE lfigpadd /E lfigpointdef
+ S NW lfigpadd /N lfigpointdef
+ NE 0.5 lfigpmul /CTR lfigpointdef
+ [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @CurveBox symbol
+/lfigcurvebox
+{
+
+ xsize 0.5 mul ysize 0.5 mul /CTR lfigpointdef
+ xsize 0.5 mul 0 /S lfigpointdef
+ xsize ysize 0.5 mul /E lfigpointdef
+ xsize 0.5 mul ysize /N lfigpointdef
+ 0 ysize 0.5 mul /W lfigpointdef
+
+ xmark 0.293 mul xmark 0.293 mul /SW lfigpointdef
+ xsize xmark 0.293 mul sub xmark 0.293 mul /SE lfigpointdef
+ xsize xmark 0.293 mul sub ysize xmark 0.293 mul sub /NE lfigpointdef
+ xmark 0.293 mul ysize xmark 0.293 mul sub /NW lfigpointdef
+
+ [ xsize ysize 0.5 lfigpmul xmark /lfigcurveboxcircum cvx ] lfigcircumdef
+
+ xmark 0
+ xsize xmark sub 0
+ [ xsize xmark sub xmark ]
+ xsize xmark
+ xsize ysize xmark sub
+ [ xsize xmark sub ysize xmark sub ]
+ xsize xmark sub ysize
+ xmark ysize
+ [ xmark ysize xmark sub ]
+ 0 ysize xmark sub
+ 0 xmark
+ [ xmark xmark ]
+ xmark 0
+} def
+
+% shadow of the @ShadowBox symbol
+% its shape and labels are done, somewhat inaccurately, with lfigbox
+/lfigshadow
+{ xmark 2 mul 0 moveto xsize 0 lineto
+ xsize ysize xmark 2 mul sub lineto
+ xsize xmark sub ysize xmark 2 mul sub lineto
+ xsize xmark sub xmark lineto
+ xmark 2 mul xmark lineto closepath fill
+} def
+
+% shape and labels of the @Square symbol
+/lfigsquare
+{
+ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ CTR xsize xsize ysize ysize lfigpmax 0.5 lfigpmul lfigpadd /NE lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+ SW 0.5 lfigpmul SE 0.5 lfigpmul lfigpadd /S lfigpointdef
+ NW 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /N lfigpointdef
+ SW 0.5 lfigpmul NW 0.5 lfigpmul lfigpadd /W lfigpointdef
+ SE 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /E lfigpointdef
+ [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @Diamond symbol
+/lfigdiamond
+{
+ xsize 0 0.5 lfigpmul /S lfigpointdef
+ 0 ysize 0.5 lfigpmul /W lfigpointdef
+ S W lfigpadd /CTR lfigpointdef
+ CTR W lfigpadd /N lfigpointdef
+ CTR S lfigpadd /E lfigpointdef
+ [ xsize ysize 0.5 lfigpmul /lfigdiamondcircum cvx ] lfigcircumdef
+ S E N W S
+} def
+
+% shape and labels of the @Ellipse symbol
+/lfigellipse
+{
+ xsize 0 0.5 lfigpmul /S lfigpointdef
+ 0 ysize 0.5 lfigpmul /W lfigpointdef
+ S W lfigpadd /CTR lfigpointdef
+ CTR W lfigpadd /N lfigpointdef
+ CTR S lfigpadd /E lfigpointdef
+ CTR xsize 0 0.3536 lfigpmul lfigpadd 0 ysize 0.3536 lfigpmul lfigpadd /NE lfigpointdef
+ 0 ysize 0.3536 lfigpmul CTR xsize 0 0.3536 lfigpmul lfigpadd lfigpsub /SE lfigpointdef
+ xsize 0 0.3536 lfigpmul CTR lfigpsub 0 ysize 0.3536 lfigpmul lfigpadd /NW lfigpointdef
+ 0 ysize 0.3536 lfigpmul xsize 0 0.3536 lfigpmul CTR lfigpsub lfigpsub /SW lfigpointdef
+ [ xsize ysize 0.5 lfigpmul /lfigellipsecircum cvx ] lfigcircumdef
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @Circle symbol
+/lfigcircle
+{
+ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ CTR xsize 0 ysize 0 lfigpmax 0.5 lfigpmul lfigpadd /E lfigpointdef
+ CTR 0 0 CTR E lfigdistance 45 lfigatangle lfigpadd /NE lfigpointdef
+ CTR 0 0 CTR E lfigdistance 90 lfigatangle lfigpadd /N lfigpointdef
+ CTR 0 0 CTR E lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+ CTR 0 0 CTR E lfigdistance 180 lfigatangle lfigpadd /W lfigpointdef
+ CTR 0 0 CTR E lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+ CTR 0 0 CTR E lfigdistance 270 lfigatangle lfigpadd /S lfigpointdef
+ CTR 0 0 CTR E lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+ [ S E lfigpsub /lfigellipsecircum cvx ] lfigcircumdef
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @HLine and @HArrow symbols
+/lfighline
+{
+ 0 ymark lfigprevious /FROM lfigpointdef
+ xsize ymark lfigprevious /TO lfigpointdef
+} def
+
+% shape and labels of the @VLine and @VArrow symbols
+/lfigvline
+{
+ xmark ysize lfigprevious /FROM lfigpointdef
+ xmark 0 lfigprevious /TO lfigpointdef
+} def
+
+% points of a polygon around base with given no of sides, vert init angle:
+% <sides> <angle> figpolygon <point> ... <point>
+/lfigpolygon
+{ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ 90 sub CTR 2 copy lfigmax 5 3 roll
+ [ 4 copy pop /lfigpolycircum cvx ] lfigcircumdef
+ exch dup 360 exch div exch
+ 1 1 3 2 roll
+ { 4 string cvs (P) exch lfigconcat cvn
+ 6 copy pop pop lfigatangle 2 copy 10 2 roll
+ 3 2 roll lfigpointdef
+ dup 3 1 roll add exch
+ } for
+ pop lfigatangle
+} def
+
+% next array element: <array> <index> lfiggetnext <array> <index> <any> true
+% or <array> <index> false
+/lfiggetnext
+{ 2 copy exch length ge
+ { false }
+ { 2 copy get exch 1 add exch true } ifelse
+} def
+
+% check whether thing is number: <any> lfigisnumbertype <any> <bool>
+/lfigisnumbertype
+{ dup type dup
+ /integertype eq exch /realtype eq or
+} def
+
+% check whether thing is an array: <any> lfigisarraytype <any> <bool>
+/lfigisarraytype { dup type /arraytype eq } def
+
+% get next item: <array> <index> lfiggetnextitem <array> <index> 0
+% or <array> <index> <array> 1
+% or <array> <index> <point> 2
+/lfiggetnextitem
+{ lfiggetnext
+ { lfigisarraytype
+ { 1
+ }
+ { lfigisnumbertype
+ { 3 1 roll
+ lfiggetnext
+ { lfigisnumbertype
+ { 4 3 roll exch 2
+ }
+ { pop 3 2 roll pop 0
+ } ifelse
+ }
+ { 3 2 roll pop 0
+ } ifelse
+ }
+ { pop 0
+ } ifelse
+ } ifelse
+ }
+ { 0
+ } ifelse
+} def
+
+% set arc path: bool x1 y1 x2 y2 x0 y0 lfigsetarc <angle> <angle> <dist>
+% the path goes from x1 y1 to x2 y2 about centre x0 y0,
+% anticlockwise if bool is true else clockwise.
+% The orientations of backwards pointing and forwards pointing
+% arrowheads are returned in the two angles, and
+% the length of the arc is returned in <dist>.
+/lfigsetarc
+{
+ 20 dict begin
+ matrix currentmatrix 8 1 roll
+ 2 copy translate 2 copy 8 2 roll
+ 4 2 roll lfigpsub 6 2 roll lfigpsub
+ dup /y1 exch def dup mul /y1s exch def
+ dup /x1 exch def dup mul /x1s exch def
+ dup /y2 exch def dup mul /y2s exch def
+ dup /x2 exch def dup mul /x2s exch def
+
+ y1s y2s eq
+ { -1
+ }
+ { y1s x2s mul y2s x1s mul sub y1s y2s sub div
+ } ifelse
+ /da exch def
+
+ x1s x2s eq
+ { -1
+ }
+ { x1s y2s mul x2s y1s mul sub x1s x2s sub div
+ } ifelse
+ /db exch def
+
+ da 0 gt db 0 gt and
+ { /LMax da sqrt db sqrt lfigmax def
+ /scalex da sqrt LMax div def
+ /scaley db sqrt LMax div def
+ scalex scaley scale
+ 0 0 LMax
+ 0 0 x1 scalex mul y1 scaley mul lfigangle
+ 0 0 x2 scalex mul y2 scaley mul lfigangle
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 5 2 roll % res1 res2 ang1 ang2 anticlockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if lfigpi mul LMax mul 180 div
+ }
+ { 0 0 x1 y1 lfigdistance 0 0 x2 y2 lfigdistance eq
+ 0 0 x1 y1 lfigdistance 0 gt and
+ { 0 0
+ 0 0 x1 y1 lfigdistance
+ 0 0 x1 y1 lfigangle
+ 0 0 x2 y2 lfigangle
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ 5 2 roll % res1 res2 ang1 ang2 clockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if lfigpi mul 0 0 x1 y1 lfigdistance mul 180 div
+ }
+ { x2 y2 lineto pop
+ x2 y2 x1 y1 lfigangle
+ x1 y1 x2 y2 lfigangle
+ x1 y1 x2 y2 lfigdistance
+ } ifelse
+ } ifelse
+ 4 -1 roll setmatrix
+ end
+} def
+
+% lfigsetcurve: set up a Bezier curve from x0 y0 to x3 y3
+% and return arrowhead angles and length of curve (actually 0)
+% x0 y0 x1 y1 x2 y2 x3 y3 lfigsetcurve <angle> <angle> <length>
+/lfigsetcurve
+{ 8 copy curveto pop pop
+ lfigangle
+ 5 1 roll
+ 4 2 roll lfigangle
+ exch
+ 0
+} def
+
+% lfigpaintpath: paint a path of the given shape
+% /paint [ shape ] lfigpaintpath -
+/lfigpaintpath
+{
+ 10 dict begin
+ 0 newpath
+ /prevseen false def
+ /curveseen false def
+ { lfiggetnextitem
+ dup 0 eq { pop exit }
+ { 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /curveseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr
+ lfigsetcurve pop pop pop
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ lfigsetarc pop pop pop
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ } ifelse
+ }
+ { xcurr ycurr moveto
+ } ifelse
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop pop pop cvx exec
+ end
+} def
+
+% stroke a path of the given shape in the given linestyle and dash length.
+% Return the origin and angle of the backward and forward arrow heads.
+% dashlength /linestyle [shape] lfigdopath [<point> <angle>] [<point> <angle>]
+/lfigdopath
+{
+ 10 dict begin
+ 0
+ /prevseen false def
+ /curveseen false def
+ /backarrow [] def
+ /fwdarrow [] def
+ {
+ lfiggetnextitem
+ dup 0 eq { pop exit }
+ {
+ 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /prevseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { newpath xprev yprev moveto
+ curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr lfigsetcurve
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ lfigsetarc
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ xcurr ycurr xprev yprev lfigangle dup 180 sub
+ xprev yprev xcurr ycurr lfigdistance
+ } ifelse
+ 6 index 6 index cvx exec
+ [ xprev yprev 5 -1 roll ]
+ backarrow length 0 eq
+ { /backarrow exch def }
+ { pop } ifelse
+ [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def
+ } if
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop
+ pop pop pop pop
+ backarrow length 0 eq { [ 0 0 0 ] } { backarrow } ifelse
+ fwdarrow length 0 eq { [ 0 0 0 ] } { fwdarrow } ifelse
+ end
+} def
+
+% lfigdoarrow: draw an arrow head of given form
+% dashlength /lstyle /pstyle hfrac height width [ <point> <angle> ] lfigdoarrow -
+/lfigdoarrow
+{ matrix currentmatrix 8 1 roll
+ dup 0 get 1 index 1 get translate
+ 2 get rotate
+ [ 2 index neg 2 index 0 0
+ 3 index 3 index neg
+ 1 index 10 index mul 0
+ 7 index 7 index ]
+ 4 1 roll pop pop pop
+ dup 3 1 roll
+ gsave lfigpaintpath grestore lfigdopath pop pop
+ setmatrix
+} def
+
+% arrow head styles
+/lfigopen 0.0 def
+/lfighalfopen 0.5 def
+/lfigclosed 1.0 def
+
+% stroke no arrows, forward, back, and both
+/lfignoarrow { pop pop pop pop pop pop pop pop } def
+/lfigforward { 7 -1 roll lfigdoarrow pop } def
+/lfigback { 8 -2 roll pop lfigdoarrow } def
+/lfigboth { 8 -1 roll 7 copy lfigdoarrow pop 7 -1 roll lfigdoarrow } def
+
+% lfigprevious: return previous point on path
+/lfigprevious
+{ lfigisnumbertype
+ { 2 copy }
+ { lfigisarraytype
+ { 2 index 2 index }
+ { 0 0 }
+ ifelse
+ } ifelse
+} def
+
+% label a point in 2nd top dictionary: <point> /name lfigpointdef -
+/lfigpointdef
+{
+ % (Entering lfigpointdef) lfigdebugprint
+ [ 4 2 roll transform
+ /itransform cvx ] cvx
+ currentdict end
+ 3 1 roll
+ % currentdict length currentdict maxlength lt
+ % { def }
+ % { exec moveto (too many labels) show stop }
+ % ifelse
+ def
+ begin
+ % (Leaving lfigpointdef) lfigdebugprint
+} def
+
+% promote labels from second top to third top dictionary
+% <string> lfigpromotelabels -
+/lfigpromotelabels
+{
+ % (Entering lfigpromotelabels) lfigdebugprint
+ currentdict end exch currentdict end
+ { exch 20 string cvs 2 index
+ (@) lfigconcat exch lfigconcat cvn exch def
+ } forall pop begin
+ % (Leaving lfigpromotelabels) lfigdebugprint
+} def
+
+% show labels (except CIRCUM): - lfigshowlabels -
+/lfigshowlabels
+{
+ % (Entering lfigshowlabels) lfigdebugprint
+ currentdict end
+ currentdict
+ { 1 index 20 string cvs (CIRCUM) search % if CIRCUM in key
+ { pop pop pop pop pop }
+ { pop cvx exec 2 copy
+ newpath 1.5 pt 0 360 arc
+ 0 setgray fill
+ /Times-Roman findfont 8 pt scalefont setfont
+ moveto 0.2 cm 0.1 cm rmoveto 20 string cvs show
+ }
+ ifelse
+ } forall
+ begin
+ % (Leaving lfigshowlabels) lfigdebugprint
+} def
+
+% fix an angle to 0 <= res < 360: <angle> lfigfixangle <angle>
+/lfigfixangle
+{
+ % (Entering lfigfixangle) lfigdebugprint
+ { dup 0 ge { exit } if
+ 360 add
+ } loop
+ { dup 360 lt { exit } if
+ 360 sub
+ } loop
+ % (Leaving lfigfixangle) lfigdebugprint
+} def
+
+% find point on circumference of box: alpha a b lfigboxcircum x y
+/lfigboxcircum
+{
+ % (Entering lfigboxcircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ 0 0 a b lfigangle /theta exch def
+
+ % if alpha <= theta, return (a, a*tan(alpha))
+ alpha theta le
+ { a a alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 180 - theta, return (b*cot(alpha), b)
+ alpha 180 theta sub le
+ { b alpha cos mul alpha sin div b }
+ {
+ % else if alpha <= 180 + theta, return (-a, -a*tan(alpha))
+ alpha 180 theta add le
+ { a neg a neg alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 360 - theta, return (-b*cot(alpha), -b)
+ alpha 360 theta sub le
+ { b neg alpha cos mul alpha sin div b neg }
+ {
+ % else 360 - theta <= alpha, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigboxcircum) lfigdebugprint
+} def
+
+% find quadratic roots (assume a != 0): a b c lfigqroots x1 x2 2
+% or x2 1
+% or 0
+/lfigqroots
+{
+ 4 dict begin
+ /c exch def
+ /b exch def
+ /a exch def
+ /disc b b mul 4 a c mul mul sub def
+ disc 0 lt
+ { 0
+ }
+ { disc 0 eq
+ { b neg 2 a mul div
+ 1
+ }
+ { b neg disc sqrt add 2 a mul div
+ b neg disc sqrt sub 2 a mul div
+ 2
+ }
+ ifelse
+ }
+ ifelse
+ end
+} def
+
+% work our which quadrant: <angle> lfigquadrant <0-3>
+/lfigquadrant
+{ dup 90 lt
+ { pop 0
+ }
+ { dup 180 lt
+ { pop 1
+ }
+ { 270 lt
+ { 2
+ }
+ { 3
+ } ifelse
+ } ifelse
+ } ifelse
+} def
+
+% find curvebox circum, assuming upper right quadrant: alpha a b xmk lfigcb x y
+/lfigcb
+{
+ 6 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ /alpha exch def
+ /theta1 0 0 a b xmk sub lfigangle def
+ /theta2 0 0 a xmk sub b lfigangle def
+ alpha theta1 le
+ { % if alpha <= theta1, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ }
+ { alpha theta2 ge
+ { % else if alpha > theta2, return (b*cot(alpha), b)
+ b alpha cos mul alpha sin div b
+ }
+ {
+ % else, return the intersection of line and circle
+ a xmk sub b xmk sub xmk 0 0 alpha lfigcircleintersect
+ dup 0 eq
+ { % should never happen, just return any reasonable point
+ pop
+ a b 0.5 lfigpmul
+ }
+ { 1 eq
+ { % should never happen, just return the point on top of stack
+ }
+ { % the usual case, two points on stack, return the larger
+ lfigpmax
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+} def
+
+% find point on circumference of curvebox: alpha a b xmk lfigcurveboxcircum x y
+/lfigcurveboxcircum
+{
+ % (Entering lfigcurveboxcircum) lfigdebugprint
+ 5 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+
+ % work out which quadrant we are in, and reflect accordingly
+ /quad alpha lfigquadrant def
+ quad 0 eq
+ { alpha a b xmk lfigcb
+ }
+ { quad 1 eq
+ { 180 alpha sub a b xmk lfigcb exch neg exch
+ }
+ { quad 2 eq
+ { alpha 180 sub a b xmk lfigcb neg exch neg exch
+ }
+ { 360 alpha sub a b xmk lfigcb neg
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigcurveboxcircum) lfigdebugprint
+} def
+
+% find point on circumference of diamond: alpha a b lfigdiamondcircum x y
+/lfigdiamondcircum
+{
+ % (Entering lfigdiamondcircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ b alpha cos abs mul a alpha sin abs mul add /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving lfigdiamondcircum) lfigdebugprint
+} def
+
+% find point on circumference of ellipse: alpha a b lfigellipsecircum x y
+/lfigellipsecircum
+{
+ % (Entering lfigellipsecircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ b alpha cos mul dup mul a alpha sin mul dup mul add sqrt /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving lfigellipsecircum) lfigdebugprint
+} def
+
+% find point of intersection of two lines each defined by two points
+% x1 y1 x2 y2 x3 y3 x4 y4 lfiglineintersect x y
+/lfiglineintersect
+{
+ % (Entering lfiglineintersect) lfigdebugprint
+ 13 dict begin
+ /y4 exch def
+ /x4 exch def
+ /y3 exch def
+ /x3 exch def
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ x2 x1 sub /x21 exch def
+ x4 x3 sub /x43 exch def
+ y2 y1 sub /y21 exch def
+ y4 y3 sub /y43 exch def
+ y21 x43 mul y43 x21 mul sub /det exch def
+
+ % calculate x
+ y21 x43 mul x1 mul
+ y43 x21 mul x3 mul sub
+ y3 y1 sub x21 mul x43 mul add
+ det div
+
+ % calculate y
+ x21 y43 mul y1 mul
+ x43 y21 mul y3 mul sub
+ x3 x1 sub y21 mul y43 mul add
+ det neg div
+
+ end
+ % (Leaving lfiglineintersect) lfigdebugprint
+} def
+
+% find point on circumference of polygon
+% alpha radius num theta lfigpolycircum x y
+/lfigpolycircum
+{
+ % (Entering lfigpolycircum) lfigdebugprint
+ 13 dict begin
+ /theta exch def
+ /num exch def
+ /radius exch def
+ /alpha exch def
+
+ % calculate delta, the angle from theta to alpha
+ alpha theta sub lfigfixangle
+
+ % calculate the angle which is the multiple of 360/num closest to delta
+ 360 num div div truncate 360 num div mul theta add /anglea exch def
+
+ % calculate the next multiple of 360/num after anglea
+ anglea 360 num div add /angleb exch def
+
+ % intersect the line through these two points with the alpha line
+ anglea cos anglea sin angleb cos angleb sin
+ 0 0 alpha cos 2 mul alpha sin 2 mul
+ lfiglineintersect radius lfigpmul
+
+ end
+ % (Leaving lfigpolycircum) lfigdebugprint
+} def
+
+% find point of intersection of a point and a circle
+% x0 y0 r x1 y1 theta lfigcircleintersect xa ya xb yb 2
+% or xb yb 1
+% or 0
+/lfigcircleintersect
+{
+ % (Entering lfigcircleintersect) lfigdebugprint
+ 15 dict begin
+ /theta exch def
+ /y1 exch def
+ /x1 exch def
+ /r exch def
+ /y0 exch def
+ /x0 exch def
+
+ % if sin(theta) = 0 then line is horizontal and y must be y1
+ theta sin abs 0.00001 lt
+ {
+ /a 1 def
+ /b -2 x0 mul def
+ /c x0 dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c lfigqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 1
+ }
+ { y1 exch y1 2
+ } ifelse
+ } ifelse
+ }
+ {
+ /ct theta cos theta sin div def
+ /a ct ct mul 1 add def
+ /b ct x1 x0 sub mul y1 add y0 sub 2 mul def
+ /c x1 x0 sub dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c lfigqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xb yb 1
+ }
+ { y1 add /ya exch def
+ ya y1 sub ct mul x1 add /xa exch def
+ y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xa ya xb yb 2
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigcircleintersect) lfigdebugprint
+} def
+
+% add CIRCUM operator with this body: <array> lfigcircumdef -
+/lfigcircumdef
+{ % (Entering lfigcircumdef) lfigdebugprint
+ /CIRCUM exch cvx
+ currentdict end
+ 3 1 roll
+ % currentdict length currentdict maxlength lt
+ % { def }
+ % { exec moveto (too many labels) show stop }
+ % ifelse
+ def
+ begin
+ % (Leaving lfigcircumdef) lfigdebugprint
+} def
+
+end
+%%EndResource
+
+%%BeginResource: procset LoutBasicSetup
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/bsf.lpg
+
+% width height linethickness louteuro -
+% draw a Euro symbol of this width and height with this line thickness
+/louteuro {
+ 20 dict begin
+ /eurothick exch def
+ /euroheight exch def
+ /eurowidth exch def
+ /eurostrokewidth euroheight 0.8 mul def
+ /eurostep eurothick 60 cos mul 60 sin div def
+ /eurotheta 40 def
+
+ % llx lly width thickness louteurobox -
+ % draw angled box starting at (llx, lly) with given width and thickness
+ /louteurobox
+ {
+ /euroboxthick exch def
+ /euroboxwidth exch def
+ newpath moveto euroboxwidth 0 rlineto
+ eurostep euroboxthick rlineto
+ euroboxwidth neg 0 rlineto closepath fill
+ } def
+
+ % lower cross stroke
+ 0 euroheight 2 div eurothick 1.5 mul sub
+ eurostrokewidth eurothick louteurobox
+
+ % upper cross stroke
+ 0 euroheight 2 div eurothick 0.5 mul add
+ eurostrokewidth eurostep 2 mul add eurothick louteurobox
+
+ % circular part
+ /eurohctr eurowidth euroheight 2 div eurotheta cos mul sub def
+ /eurovctr euroheight 2 div def
+ newpath
+ eurohctr eurovctr eurovctr eurotheta 350 eurotheta sub arc
+ eurohctr eurovctr eurovctr eurothick sub 365 eurotheta sub eurotheta arcn
+ closepath fill
+ end
+} def
+
+% path for @FullWidthRule symbol
+/LoutRule
+{ 0 0 moveto xsize 0 lineto
+} def
+
+% path for @Box symbol
+/LoutBox
+{ 0 0 moveto xsize 0 lineto
+ xsize ysize lineto 0 ysize lineto
+ closepath
+} def
+
+% path for @CurveBox symbol
+/LoutCurveBox
+{ xmark 0 moveto
+ xsize xmark sub xmark xmark 270 360 arc
+ xsize xmark sub ysize xmark sub xmark 0 90 arc
+ xmark ysize xmark sub xmark 90 180 arc
+ xmark xmark xmark 180 270 arc
+ closepath
+} def
+
+% path for @ShadowBox symbol
+/LoutShadowBox
+{ xmark 2 mul 0 moveto xsize 0 lineto
+ xsize ysize xmark 2 mul sub lineto
+ xsize xmark sub ysize xmark 2 mul sub lineto
+ xsize xmark sub xmark lineto
+ xmark 2 mul xmark lineto
+ closepath
+} def
+
+% set up dictionary containing margin note data: parity LoutMargSet -
+/LoutMargSet
+{ /LoutMargDict 12 dict def
+ LoutMargDict begin
+ /parity exch def
+ /matr matrix currentmatrix def
+ /rightx xsize def
+ /lefty ysize def % highest allowable point for top of next left note
+ /righty ysize def % highest allowable point for top of next right note
+ /max { 2 copy gt { pop } { exch pop } ifelse } def
+ /min { 2 copy lt { pop } { exch pop } ifelse } def
+ end
+} def
+
+%translate coordinate system for marginal notes: type LoutMargShift -
+% where type 0 is left margin, 1 is right margin, 2 is outer, 3 is inner
+/LoutMargShift
+{ LoutMargDict begin
+
+ % y coordinate of top of note, in margin coords, before vertical adjust
+ 0 ysize transform matr itransform exch pop
+
+ % decide whether left or right margin based on type and parity
+ exch [ 0 1 parity 1 parity sub ] exch get 0 eq
+ {
+ % left margin: adjust top of note downwards if overlaps previous note
+ lefty min
+
+ % bottom of note is new lefty position and also translate position
+ ysize sub dup /lefty exch def
+
+ % want right edge of note at coordinate zero
+ xsize neg exch
+ }
+ {
+ % right margin: adjust top of note downwards if overlaps previous note
+ righty min
+
+ % bottom of note is new righty position and also translate position
+ ysize sub dup /righty exch def
+
+ % want left edge of note at coordinate rightx
+ rightx exch
+ } ifelse
+
+ % stack now contains coord of bottom left corner in margin coordinates
+ matr setmatrix translate
+ end
+} def
+
+% create LoutPageDict with left, right, foot, top for @Place symbol users
+/LoutPageSet
+{
+ /LoutPageDict 5 dict def
+ LoutPageDict begin
+ /matr matrix currentmatrix def
+ /left 0 def
+ /right xsize def
+ /foot 0 def
+ /top ysize def
+ end
+
+} def
+
+%%EndResource
+
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Times-Roman
+/Times-Romanfnt82 vec2 /Times-Roman LoutRecode
+/fnt82 { /Times-Romanfnt82 LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Helvetica-Oblique
+/Helvetica-Obliquefnt36 vec2 /Helvetica-Oblique LoutRecode
+/fnt36 { /Helvetica-Obliquefnt36 LoutFont } def
+%%EndSetup
+
+%%Page: i 1
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Symbol
+%%+ font Helvetica-Oblique
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+600 fnt35 1355 12125(An)m 2215(Exper)s -24(t')k 30(s)k
+4518(Guide)s 6258(to)s 6902(the)s 3956 10685(Lout)m 616 9245(Document)m
+3500(F)s 18(or)k -15(matting)k 6490(System)s 240 fnt35
+3544 6059(Jeffre)m 4(y)k 4321(H.)s 4606(Kingston)s 3883 4395(V)m 19(ersion)k
+4726(3.20)s 3974 4107(Apr)m -3(il,)k 4567(2000)s 240 fnt78
+0 342(\343)m 240 fnt36 315 340(Cop)m 7(yr)k -3(ight)k
+1493(1991,)s 2214(2000,)s 2935(Jeffre)s 4(y)k 3811(H.)s
+4173(Kingston,)s 5293(Basser)s 6203(Depar)s -9(tment)k 7619(of)s
+7990(Computer)s 0 52(Science)m 3(,)k 966(The)s 1449(Univ)s 6(ersity)k
+2583(of)s 2881(Sydne)s 4(y)k 3766(2006,)s 4415(A)s 7(ustr)k 2(alia.)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: ii 2
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+480 fnt84 0 12955(Pr)m 8(eface)k 240 fnt82 540 12095(This)m
+1016(manual)s 1775(is)s 1984(addressed)s 2985(to)s 3224(those)s
+3784(who)s 4250(wish)s 4759(to)s 4997(become)s 5797(e)s 3(xpert)k
+6451(users)s 6992(of)s 7263(the)s 7611(Lout)s 8122(document)s
+0 11807(formatting)m 1092(system.)s 1952(An)s 2334(e)s 3(xpert)k
+3020(user)s 3510(is)s 3752(someone)s 4690(who)s 5188(understands)s
+6414(the)s 6794(principles)s 7819(of)s 8122(document)s 0 11519(formatting)m
+1083(that)s 1524(Lout)s 2059(embodies,)s 3105(and)s 3532(is)s
+3765(able)s 4242(to)s 4503(apply)s 5112(them,)s 5720(for)s
+6081(e)s 3(xample)k 6966(to)s 7228(design)s 7933(a)s
+8122(document)s 0 11231(format)m 690(or)s 943(a)s 1103(special-purpose)s
+2653(package.)s 3595(In)s 3845(contrast,)s 4701(a)s 4861(non-e)s 3(xpert)k
+5948(user)s 6400(is)s 6604(someone)s 7505(who)s 7965(simply)s
+8663(uses)s 0 10943(Lout)m 512(to)s 751(format)s 1447(documents.)s
+480 10569(Chapter)m 1295(1)s 1448(e)s 3(xplains)k 2291(these)s
+2836(principles,)s 3883(and)s 4285(it)s 4475(should)s 5170(be)s
+5450(read)s 5917(carefully)s 6817(and)s 7219(in)s 7460(sequence.)s
+8499(Chap)s 8998(-)s 0 10281(ters)m 412(2)s 604(and)s
+1025(3)s 1207(are)s 1571(for)s 1927(reference;)s 2943(respecti)s 6(v)k 3(ely)k 15(,)k
+4198(the)s 3(y)k 4678(contain)s 5457(descriptions)s 6680(of)s
+6969(the)s 7334(detailed)s 8166(operation)s 0 9993(of)m 277(Lout')s 13(s)k
+945(major)s 1568(components,)s 2838(and)s 3248(a)s 3420(complete)s
+4359(description)s 5484(of)s 5761(each)s 6262(prede\207ned)s 7336(symbol.)s
+8211(The)s 8646(\207nal)s 0 9705(chapter)m 763(presents)s 1597(a)s
+1763(collection)s 2762(of)s 3033(adv)s 6(anced)k 3989(e)s 3(xamples.)k
+480 9331(This)m 971(manual)s 1745(presents)s 2594(V)s 26(ersion)k
+3397(3)s 3576(of)s 3862(Basser)s 4574(Lout,)s 5148(publicly)s
+6001(released)s 6856(in)s 7114(September)s 8211(1994)s 8760([3)s
+8943(].)s 0 9043(This)m 480(manual)s 1243(w)s 2(as)k
+1669(rendered)s 2567(into)s 2996(PostScript)s 4043(by)s 4341(V)s 26(ersion)k
+5133(3.20)s 5613(of)s 5888(the)s 6240(Basser)s 6942(Lout)s
+7458(interpreter)s 9(,)k 8554(using)s 0 8755(the)m 348(symbols)s
+1197(described)s 2171(in)s 2414(the)s 2762(User')s 13(s)k
+3423(Guide)s 4064([4)s 4257(].)s 240 fnt84 0 8250(Ackno)m 2(wledgment.)k
+240 fnt82 1986 8251(V)m 26(ersion)k 2811(3)s 3012(has)s
+3419(bene\207ted)s 4391(from)s 4953(hundreds)s 5919(of)s 6227(comments)s
+7298(recei)s 6(v)k 3(ed)k 8193(since)s 8778(the)s
+0 7963(release)m 726(of)s 1006(V)s 26(ersion)k 1803(1)s
+1967(in)s 2219(October)s 3057(1991.)s 3710(Not)s 4138(e)s 6(v)k 3(ery)k
+4723(suggestion)s 5813(could)s 6411(be)s 6702(follo)s 6(wed,)k
+7662(b)s 4(ut)k 8033(man)s 3(y)k 8625(ha)s 4(v)k 3(e)k
+0 7675(been,)m 559(and)s 963(the)s 1311(encouragement)s 2832(w)s 2(as)k
+3253(greatly)s 3970(appreciated.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: iii 3
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+480 fnt84 0 12955(Contents)m 240 fnt84 0 11982(Chapter)m 908(1)s
+240 fnt82 1015 11983(.)m 240 fnt84 1179 11982(Principles)m 240 fnt82
+2738 11983(..)m 3082(..)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8971(1)s 720 11638(1.1.)m 1184(Objects)s
+2394(..)s 2738(..)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8971(1)s 720 11293(1.2.)m
+1184(De\207nitions)s 2738(..)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8962(3)s 720 10948(1.3.)m
+1184(Cross)s 1780(references)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8958(7)s 720 10603(1.4.)m
+1184(Galle)s 3(ys)k 2394(..)s 2738(..)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8955(9)s 240 fnt84 0 9974(Chapter)m 908(2)s 240 fnt82
+1023 9975(.)m 240 fnt84 1187 9974(Details)m 240 fnt82 2394 9975(..)m
+2738(..)s 3082(..)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8842(13)s 720 9630(2.1.)m 1184(Le)s 3(xical)k
+1952(structure)s 2843(\(w)s 2(ords,)k 3612(spaces,)s 4343(symbols\))s
+5269(and)s 5673(macros)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8842(13)s 720 9285(2.2.)m 1184(Named)s
+1933(parameters)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8840(15)s 720 8940(2.3.)m 1184(Nested)s 1906(de\207nitions,)s
+3023(body)s 3557(parameters,)s 4711(e)s 3(xtend,)k 5453(import,)s
+6197(and)s 6601(e)s 3(xport)k 7554(..)s 7898(..)s
+8242(..)s 8838(17)s 720 8595(2.4.)m 1184(Filtered)s 1984(right)s
+2495(and)s 2899(body)s 3433(parameters)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8831(20)s
+720 8250(2.5.)m 1184(Precedence)s 2328(and)s 2732(associati)s 6(vity)k
+3974(of)s 4245(symbols)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8832(22)s 720 7905(2.6.)m 1184(The)s 1612(style)s
+2119(and)s 2523(size)s 2950(of)s 3221(objects)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8842(23)s 720 7560(2.7.)m 1184(Galle)s 3(ys)k
+1962(and)s 2366(tar)s 4(gets)k 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8840(25)s 720 7215(2.8.)m
+1184(Sorted)s 1866(g)s 1(alle)k 3(ys)k 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8832(32)s 720 6870(2.9.)m 1184(Horizontal)s 2261(g)s 1(alle)k 3(ys)k
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8842(33)s 720 6525(2.10.)m 1304(Optimal)s 2142(g)s 1(alle)k 3(y)k
+2776(breaking)s 4114(..)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8840(35)s
+240 fnt84 0 5896(Chapter)m 908(3)s 240 fnt82 1021 5897(.)m
+240 fnt84 1185 5896(Pr)m 4(ede\207ned)k 2338(symbols)s 240 fnt82
+3426 5897(..)m 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8833(36)s 720 5552(3.1.)m 1184(@Be)s 3(gin)k 2031(and)s
+2435(@End)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8833(36)s 720 5207(3.2.)m 1184(Concatenation)s 2623(symbols)s
+3472(and)s 3876(paragraphs)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8833(36)s 720 4862(3.3.)m 1184(@F)s 3(ont)k
+1901(and)s 2305(@Char)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8831(40)s 720 4517(3.4.)m 1184(@Break)s
+2394(..)s 2738(..)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8832(42)s 720 4172(3.5.)m
+1184(@Space)s 2394(..)s 2738(..)s 3082(..)s 3426(..)s
+3770(..)s 4114(..)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8842(43)s
+720 3827(3.6.)m 1184(@YUnit,)s 2110(@ZUnit,)s 3009(@CurrYUnit,)s 4373(and)s
+4777(@CurrZUnit)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8832(44)s 720 3482(3.7.)m 1184(@SetColour)s
+2435(and)s 2839(@SetColor)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8840(45)s
+720 3137(3.8.)m 1184(@Outline)s 2394(..)s 2738(..)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8833(46)s 720 2792(3.9.)m 1184(@Language)s 2405(and)s 2809(@CurrLang)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8833(46)s 720 2447(3.10.)m 1304(@OneCol)s
+2325(and)s 2729(@OneRo)s 6(w)k 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8838(47)s 720 2102(3.11.)m 1304(@W)s 9(ide)k
+2090(and)s 2494(@High)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8839(48)s 720 1757(3.12.)m 1304(@HShift)s 2222(and)s
+2626(@VShift)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8839(48)s 720 1412(3.13.)m 1304(@HExpand)s 2488(and)s 2892(@VExpand)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8839(48)s 720 1067(3.14.)m 1304(@HContract)s
+2581(and)s 2985(@VContract)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8835(49)s
+720 722(3.15.)m 1304(@HLimited)s 2512(and)s 2916(@VLimited)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8835(49)s 720 377(3.16.)m 1304(@HAdjust,)s 2443(@V)s 32(Adjust,)k
+3550(and)s 3954(@P)s 22(Adjust)k 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8835(49)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: iv 4
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+720 13808(3.17.)m 1304(@HScale)s 2271(and)s 2675(@VScale)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8831(50)s 720 13463(3.18.)m 1304(@HCo)s 3(v)k 3(er)k
+2337(and)s 2741(@VCo)s 3(v)k 3(er)k 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8831(50)s 720 13118(3.19.)m 1304(@StartHSpan,@StartVSpan,)s
+4117(@StartHVSpan,)s 5720(@HSpan,)s 6700(and)s 7104(@VSpan)s 8242(..)s
+8851(51)s 720 12773(3.20.)m 1304(@Scale)s 2394(..)s 2738(..)s
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8832(52)s 720 12428(3.21.)m 1304(@Rotate)s 2394(..)s
+2738(..)s 3082(..)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8832(52)s 720 12083(3.22.)m 1304(@Background)s
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8842(53)s 720 11738(3.23.)m 1304(@K)s 6(ernShrink)k
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8842(53)s 720 11393(3.24.)m 1304(@Common,)s 2524(@Rump,)s
+3438(and)s 3842(@Meld)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8832(54)s 720 11048(3.25.)m 1304(@Insert)s
+2394(..)s 2738(..)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8832(54)s 720 10703(3.26.)m
+1304(@OneOf)s 2738(..)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8840(55)s 720 10358(3.27.)m
+1304(@Ne)s 3(xt)k 2394(..)s 2738(..)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8833(56)s 720 10013(3.28.)m 1304(@Case)s 2394(..)s 2738(..)s
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8833(56)s 720 9668(3.29.)m 1304(@Moment)s 2738(..)s
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8838(57)s 720 9323(3.30.)m 1304(@Null)s 2394(..)s
+2738(..)s 3082(..)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8839(58)s 720 8978(3.31.)m 1304(@Galle)s 3(y)k
+2213(and)s 2617(@F)s 3(orceGalle)k 3(y)k 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8839(58)s 720 8633(3.32.)m 1304(@Be)s 3(ginHeaderComponent,)k
+4041(@EndHeaderComponent,)s 6596(@SetHeaderCom)s 8278(-)s 1304 8345(ponent,)m 2063(and)s
+2467(@ClearHeaderComponent)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8839(58)s 720 8000(3.33.)m 1304(@NotRe)s 6(v)k 3(ealed)k
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8831(60)s 720 7655(3.34.)m 1304(The)s 1732(cross)s
+2274(reference)s 3217(symbols)s 4066(&&)s 4492(and)s 4896(&&&)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8851(61)s 720 7310(3.35.)m
+1304(@T)s 19(agged)k 2738(..)s 3082(..)s 3426(..)s
+3770(..)s 4114(..)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8851(61)s
+720 6965(3.36.)m 1304(@Open and @Use)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8832(62)s 720 6620(3.37.)m 1304(@Database and @SysDatabase)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8832(62)s 720 6275(3.38.)m 1304(@Graphic)s 2738(..)s
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8842(63)s 720 5930(3.39.)m 1304(@PlainGraphic)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8838(67)s 720 5585(3.40.)m 1304(@IncludeGraphic)s 3065(and)s 3469(@SysIncludeGraphic)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8838(67)s 720 5240(3.41.)m
+1304(@PrependGraphic and @SysPrependGraphic)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8838(67)s 720 4895(3.42.)m
+1304(@Include and @SysInclude)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8839(68)s 720 4550(3.43.)m
+1304(@BackEnd)s 2461(and)s 2865(the)s 3213(PlainT)s 16(e)k 3(xt)k
+4183(and)s 4587(PDF)s 5084(back)s 5597(ends)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8839(68)s 720 4205(3.44.)m 1304(@V)s 26(erbatim and @Ra)k 3(wV)k 26(erbatim)k
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8835(69)s 720 3860(3.45.)m 1304(@Underline)s 2738(..)s
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8835(69)s 720 3515(3.46.)m 1304(@P)s 3(ageLabel)k
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8831(70)s 240 fnt84 0 2886(Chapter)m 908(4)s
+240 fnt82 1022 2887(.)m 240 fnt84 1186 2886(Examples)m 240 fnt82
+2738 2887(..)m 3082(..)s 3426(..)s 3770(..)s 4114(..)s
+4458(..)s 4802(..)s 5146(..)s 5490(..)s 5834(..)s
+6178(..)s 6522(..)s 6866(..)s 7210(..)s 7554(..)s
+7898(..)s 8242(..)s 8851(71)s 720 2542(4.1.)m 1184(An)s
+1534(equation)s 2415(formatting)s 3476(package)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8851(71)s
+720 2197(4.2.)m 1184(P)s 3(aragraphs,)k 2350(displays,)s 3241(and)s
+3645(lists)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8842(73)s 720 1852(4.3.)m
+1184(P)s 3(age)k 1702(layout)s 2738(..)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8838(77)s 720 1507(4.4.)m 1184(Chapters)s 2085(and)s 2489(sections)s
+3770(..)s 4114(..)s 4458(..)s 4802(..)s 5146(..)s
+5490(..)s 5834(..)s 6178(..)s 6522(..)s 6866(..)s
+7210(..)s 7554(..)s 7898(..)s 8242(..)s 8832(82)s
+720 1162(4.5.)m 1184(Bibliographies)s 3082(..)s 3426(..)s 3770(..)s
+4114(..)s 4458(..)s 4802(..)s 5146(..)s 5490(..)s
+5834(..)s 6178(..)s 6522(..)s 6866(..)s 7210(..)s
+7554(..)s 7898(..)s 8242(..)s 8838(87)s 0 3(i)m 6(v)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: v 5
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt84 0 13841(Refer)m 4(ences)k 240 fnt82 1362 13842(..)m
+1706(..)s 2050(..)s 2394(..)s 2738(..)s 3082(..)s
+3426(..)s 3770(..)s 4114(..)s 4458(..)s 4802(..)s
+5146(..)s 5490(..)s 5834(..)s 6178(..)s 6522(..)s
+6866(..)s 7210(..)s 7554(..)s 7898(..)s 8242(..)s
+8832(92)s 240 fnt84 0 13215(Index)m 240 fnt82 1018 13216(..)m
+1362(..)s 1706(..)s 2050(..)s 2394(..)s 2738(..)s
+3082(..)s 3426(..)s 3770(..)s 4114(..)s 4458(..)s
+4802(..)s 5146(..)s 5490(..)s 5834(..)s 6178(..)s
+6522(..)s 6866(..)s 7210(..)s 7554(..)s 7898(..)s
+8242(..)s 8842(93)s 8951 3(v)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: vi 6
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+0 3(vi)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 1 7
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+480 fnt84 0 12955(Chapter)m 1819(1.)s 2400(Principles)s 240 fnt82
+0 12004(The)m 414(Lout)s 911(document)s 1900(formatting)s 2946(language)s
+3852(is)s 4047(based)s 4635(on)s 4917(just)s 5307(four)s
+5751(k)s 2(e)k 3(y)k 6131(ideas:)s 6713(objects,)s
+7482(de\207nitions,)s 8584(cross)s 0 11716(references,)m 1087(and)s 1491(g)s 1(alle)k 3(ys.)k
+2328(This)s 2804(chapter)s 3567(concentrates)s 4812(on)s 5109(them,)s
+5694(postponing)s 6812(the)s 7160(ine)s 6(vitable)k 8152(details.)s
+240 fnt84 0 10923(1.1.)m 471(Objects)s 240 fnt82 480 10447(Since)m
+1075(our)s 1462(aim)s 1888(is)s 2106(to)s 2354(produce)s
+3189(neatly)s 3835(formatted)s 4829(documents,)s 5981(we)s 6325(should)s
+7030(be)s 3(gin)k 7624(by)s 7926(looking)s 8719(at)s
+8960(a)s 0 10159(typical)m 705(e)s 3(xample)k 1568(of)s
+1839(such)s 2335(a)s 2501(document:)s 1927 2494 0 2494 240 288 60 480 7325 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt84 560 1987(PURCELL)m
+128 fnt82 1316 2059(1)m 160 fnt82 170 1695(In)m 395(the)s
+681(w)s 1(orld)k 1145(of)s 1381(music)s 170 1515(England)m
+882(is)s 1163(supposed)s 170 1335(to)m 376(be)s 611(a)s
+768(mere)s 1171(pro)s 2(vince.)k 170 1155(If)m 465(she)s
+856(produces)s 1608(an)s 170 975(indif)m 4(ferent)k 1136(composer)s
+567 0 0 0 160 180 40 170 763 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+128 fnt82 170 624(1)m 160 fnt82 221 552(Blom,)m 703(Eric.)s
+160 fnt83 1133 553(Some)m 170 373(Gr)m 5(eat)k 734(Composer)s 1(s.)k
+160 fnt82 170 192(Oxford,)m 703(1944.)s
+grestore
+1927 2494 0 2494 240 288 60 480 4831 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82 170 2161(or)m
+453(performer)s 6(,)k 1267(that)s 1657(is)s 170 1981(re)m 2(garded)k
+862(else)s 4(where)k 1630(as)s 170 1801(perfectly)m 905(normal)s
+1527(and)s 170 1621(natural;)m 762(b)s 3(ut)k 1078(if)s
+1298(foreign)s 170 1441(students)m 905(of)s 1264(musical)s 170 1261(history)m
+976(ha)s 3(v)k 2(e)k 1637(to)s 170 1081(ackno)m 4(wledge)k
+1130(a)s 1326(British)s 170 901(musical)m 795(genius,)s 1376(he)s
+1657(is)s 170 721(considered)m 901(a)s 1012(freak.)s 490 488(Such)m
+957(a)s 1178(freak)s 1657(is)s 170 308(Henry)m 607(Purcell.)s
+1170(Y)s 16(et)k 1426(if)s 1574(we)s
+grestore
+1927 2494 0 2494 240 288 60 480 2337 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt82
+170 2161(mak)m 1(e)k 565(a)s 690(choice)s 1157(of)s
+1352(\207fteen)s 170 1981(of)m 407(the)s 695(w)s 1(orld')k 8(s)k
+1264(musical)s 170 1801(classics,)m 740(as)s 918(here,)s 1276(we)s
+1510(\207nd)s 170 1621(that)m 464(we)s 703(cannot)s 1185(omit)s
+1533(this)s 170 1441(English)m 695(master)s 8(.)k
+grestore
+0 1886(It)m
+229(is)s 463(a)s 653(lar)s 4(ge)k 1206(rectangle)s
+2161(made)s 2759(from)s 3307(three)s 3864(smaller)s 4651(rectangles)s
+5694(\211)s 5898(its)s 6198(pages.)s 6931(Each)s 7490(page)s
+8022(is)s 8256(made)s 8855(of)s 0 1598(lines;)m 578(each)s
+1088(line)s 1517(is)s 1743(made)s 2332(of)s 2618(w)s 2(ords,)k
+3324(although)s 4234(it)s 4441(mak)s 2(es)k 5117(sense)s
+5706(for)s 6059(an)s 3(y)k 6472(rectangle)s 7418(\(e)s 6(v)k 3(en)k
+8012(a)s 8194(complete)s 0 1310(document\))m 1072(to)s 1311(be)s
+1593(part)s 2024(of)s 2295(a)s 2461(line,)s 2926(pro)s 3(vided)k
+3832(it)s 4024(is)s 4234(not)s 4600(too)s 4959(lar)s 4(ge.)k
+480 936(Lout)m 995(deals)s 1541(with)s 2027(something)s 3081(a)s
+3251(little)s 3747(more)s 4298(complicated)s 5528(than)s 6001(rectangles:)s
+240 fnt83 7079 938(objects.)m 240 fnt82 7914 936(An)m 8268(object)s
+8916(is)s 0 648(a)m 176(rectangle)s 1118(with)s 1611(at)s
+1854(least)s 2362(one)s 240 fnt83 2775 650(column)m 3545(mark)s
+240 fnt82 4112 648(protruding)m 5186(abo)s 3(v)k 3(e)k
+5819(and)s 6234(belo)s 6(w)k 6878(it,)s 7128(and)s
+7543(at)s 7786(least)s 8294(one)s 240 fnt83 8707 650(r)m 10(ow)k
+192 fnt84 4490 0(1)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 2 8
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(2)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 0 13205(mark)m 240 fnt82 557 13203(protruding)m 1621(to)s
+1861(the)s 2211(left)s 2589(and)s 2994(right.)s 3611(The)s
+4040(simplest)s 4897(objects)s 5627(contain)s 6389(w)s 2(ords)k
+7024(lik)s 2(e)k 7438(metempsychosis,)s 0 12915(and)m 404(ha)s 4(v)k 3(e)k
+905(one)s 1307(mark)s 1859(of)s 2130(each)s 2625(type:)s
+1572 215 0 106 240 288 60 480 12360 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1572 215 0 106 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1572 215 0 106 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 52(metempsychosis)m
+grestore
+
+grestore
+end end restore
+grestore
+0 11909(The)m 441(rectangle)s 1386(e)s 3(xactly)k
+2141(encloses)s 3016(the)s 3377(w)s 2(ord;)k 3993(its)s
+4283(column)s 5072(mark)s 5637(is)s 5861(at)s 6107(the)s
+6469(left)s 6859(edge,)s 7432(and)s 7850(its)s 8140(ro)s 6(w)k
+8574(mark)s 0 11621(passes)m 668(through)s 1477(the)s 1831(middle)s
+2558(of)s 2835(the)s 3190(lo)s 6(wer)k 4(-case)k
+4276(letters.)s 5029(The)s 5463(rectangle)s 6401(and)s 6811(marks)s
+7453(do)s 7752(not)s 8125(appear)s 8829(on)s 0 11333(the)m
+348(printed)s 1083(page,)s 1642(b)s 4(ut)k 2004(to)s
+2243(understand)s 3351(what)s 3876(Lout)s 4388(is)s 4598(doing)s
+5197(you)s 5612(ha)s 4(v)k 3(e)k 6113(to)s
+6352(imagine)s 7178(them.)s 480 10959(T)m 19(o)k 782(place)s
+1344(tw)s 2(o)k 1756(objects)s 2487(side)s 2930(by)s
+3226(side,)s 3721(we)s 4058(separate)s 4898(them)s 5438(by)s
+5735(the)s 6085(symbol)s 220 fnt35 6847 10956(|,)m 240 fnt82
+7009 10959(which)m 7653(denotes)s 8437(the)s 8788(act)s 0 10671(of)m
+240 fnt83 271 10673(horizontal)m 1315(concatenation)s 240 fnt82 2665 10671(.)m
+2829(So,)s 3189(if)s 3406(we)s 3741(write)s 220 fnt35
+480 10189(USA | A)m 6(ustr)k 2(alia)k 240 fnt82 0 9734(the)m
+348(result)s 938(will)s 1364(be)s 1646(the)s 1994(object)s
+476 165 0 57 240 288 60 480 9228 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(USA)m
+grestore
+
+grestore
+end end restore
+grestore
+875 165 0 56 240 288 60 956 9229 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 2(Australia)m
+grestore
+
+grestore
+end end restore
+grestore
+0 8777(Notice)m 718(that)s 1162(this)s
+1583(object)s 2253(has)s 2648(tw)s 2(o)k 3084(column)s
+3884(marks,)s 4601(b)s 4(ut)k 4988(still)s 5426(only)s
+5931(one)s 6359(ro)s 6(w)k 6804(mark,)s 7428(because)s
+220 fnt35 8266 8774(|)m 240 fnt82 8389 8777(mer)m 4(ges)k
+0 8489(the)m 382(tw)s 2(o)k 827(ro)s 6(w)k
+1282(marks)s 1952(together)s 13(.)k 2921(This)s 3431(mer)s 4(ging)k
+4312(of)s 4618(ro)s 6(w)k 5073(marks)s 5743(\207x)s 3(es)k
+6277(the)s 6660(v)s 3(ertical)k 7462(position)s 8325(of)s
+8631(each)s 0 8201(object)m 647(with)s 1133(respect)s 1873(to)s
+2115(the)s 2467(other)s 9(,)k 3060(b)s 4(ut)k
+3425(it)s 3621(does)s 4115(not)s 4485(determine)s 5499(ho)s 6(w)k
+5964(f)s 2(ar)k 6290(apart)s 6830(the)s 3(y)k
+7297(are.)s 7756(This)s 8236(distance,)s 0 7913(or)m 240 fnt83
+276 7915(gap)m 240 fnt82 629 7913(,)m 753(may)s 1236(be)s
+1536(gi)s 6(v)k 3(en)k 2133(just)s 2555(after)s
+3069(the)s 3434(symbol,)s 4263(as)s 4531(in)s 220 fnt35
+4791 7910(|0.5i)m 240 fnt82 5264 7913(for)m 5620(e)s 3(xample,)k
+6551(which)s 7210(speci\207es)s 8102(horizontal)s 0 7625(concatenation)m 1385(with)s
+1867(a)s 2033(g)s 1(ap)k 2431(of)s 2702(half)s
+3145(an)s 3428(inch.)s 4004(If)s 4234(no)s 4527(g)s 1(ap)k
+4925(is)s 5135(gi)s 6(v)k 3(en,)k 5765(it)s
+5957(is)s 6167(assumed)s 7049(to)s 7288(be)s 220 fnt35
+7570 7622(0i)m 240 fnt82 7726 7625(.)m 240 fnt83 480 7253(V)m 26(ertical)k
+1283(concatenation)s 240 fnt82 2633 7251(,)m 2740(denoted)s 3556(by)s
+220 fnt35 3850 7248(/)m 240 fnt82 3914 7251(,)m 4021(is)s
+4231(the)s 4579(same)s 5126(apart)s 5663(from)s 6187(the)s
+6535(change)s 7269(of)s 7540(direction:)s 220 fnt35 480 6750(A)m 6(ustr)k 2(alia /0.1i USA)k
+240 fnt82 0 6295(has)m 370(result)s 875 165 0 56 240 288 60 480 5840 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 2(Australia)m
+grestore
+
+grestore
+end end restore
+grestore
+476 165 0 57 240 288 60 480 5531 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(USA)m
+
+grestore
+
+grestore
+end end restore
+grestore
+0 5080(The)m 485(usual)s 1102(mer)s 4(ging)k 2005(of)s
+2333(marks)s 3026(occurs,)s 3814(and)s 4275(no)s 6(w)k
+4793(the)s 5199(g)s 1(ap)k 5654(determines)s 6810(the)s
+7215(v)s 3(ertical)k 8040(separation.)s 0 4792(Horizontal)m 1077(and)s
+1481(v)s 3(ertical)k 2248(can)s 2637(be)s 2919(combined:)s
+220 fnt35 1000 4340(USA)m 2256(|0.2i)s 2772(A)s 6(ustr)k 2(alia)k
+480 4052(/0.1i)m 1000(W)s 8(ashington)k 2256(|)s 2772(Canberr)s 2(a)k
+240 fnt82 0 3553(has)m 370(result)s 476 165 0 57 240 288 60 480 3097 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+476 165 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(USA)m
+grestore
+
+grestore
+end end restore
+grestore
+659 166 0 57 240 288 60 956 3097 LoutGr2
+0 ymark moveto xsize 10 pt add ymark lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+875 165 0 56 240 288 60 1903 3098 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+875 165 0 56 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 2(Australia)m
+
+grestore
+
+grestore
+end end restore
+grestore
+1135 215 0 106 240 288 60 480 2738 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1135 215 0 106 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1135 215 0 106 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 52(W)m 19(ashington)k
+grestore
+
+grestore
+end end restore
+grestore
+876 166 0 57 240 288 60 1903 2787 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+876 166 0 57 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+876 166 0 57 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+0 3(Canberra)m
+grestore
+
+grestore
+end end restore
+grestore
+0 2287(There)m 655(are)s
+1044(se)s 6(v)k 3(eral)k 1808(things)s 2486(to)s
+2768(note)s 3278(carefully)s 4222(here.)s 4839(White)s 5522(space)s
+6151(\(including)s 7229(tabs)s 7707(and)s 8154(ne)s 6(wlines\))k
+0 1999(adjacent)m 848(to)s 1078(a)s 1236(concatenation)s 2612(symbol)s
+3364(is)s 3565(ignored,)s 4395(so)s 4652(it)s 4836(may)s
+5293(be)s 5567(used)s 6055(to)s 6286(lay)s 6623(out)s
+6981(the)s 7320(e)s 3(xpression)k 8388(clearly)s 15(.)k
+0 1711(The)m 425(symbol)s 220 fnt35 1182 1708(|)m 240 fnt82
+1275 1711(tak)m 2(es)k 1812(precedence)s 2940(o)s 3(v)k 3(er)k
+220 fnt35 3415 1708(/)m 240 fnt82 3479 1711(,)m 3583(which)s
+4221(means)s 4880(that)s 5295(the)s 5639(ro)s 6(ws)k
+6146(are)s 6490(formed)s 7234(\207rst,)s 7709(then)s 8174(v)s 3(ertically)k
+0 1423(concatenated.)m 1420(The)s 1856(symbol)s 220 fnt35 2625 1420(/)m
+240 fnt82 2757 1423(will)m 3191(mer)s 4(ge)k 3849(tw)s 2(o)k
+4267(or)s 4535(more)s 5090(column)s 5873(marks,)s 6573(creating)s
+7403(multiple)s 8264(columns)s 0 1135(\(and)m 220 fnt35 484 1132(|)m
+240 fnt82 583 1135(will)m 1011(mer)s 4(ge)k 1662(tw)s 2(o)k
+2073(or)s 2334(more)s 2883(ro)s 6(w)k 3305(marks\).)s
+4134(This)s 4611(implies)s 5367(that)s 5787(the)s 6137(g)s 1(ap)k
+220 fnt35 6536 1132(0.2i)m 240 fnt82 6937 1135(used)m 7436(abo)s 3(v)k 3(e)k
+8060(is)s 8272(between)s 0 847(columns,)m 910(not)s 1268(indi)s 6(vidual)k
+2278(items)s 2838(in)s 3072(columns;)s 3987(a)s 4144(g)s 1(ap)k
+4534(in)s 4768(the)s 5108(second)s 5822(ro)s 6(w)k
+6234(w)s 2(ould)k 6880(therefore)s 7789(be)s 8062(redundant,)s
+0 559(and)m 404(so)s 670(is)s 880(omitted.)s 480 185(A)m
+710(v)s 6(ariant)k 1427(of)s 220 fnt35 1698 182(/)m
+240 fnt82 1822 185(called)m 220 fnt35 2450 182(//)m 240 fnt82
+2635 185(left-justi\207es)m 3825(tw)s 2(o)k 4235(objects)s 4963(instead)s
+5698(of)s 5969(mer)s 4(ging)k 6815(their)s 7312(marks.)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 3 9
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(1.1.)m 454(Objects)s 240 fnt84 8953 13840(3)m
+240 fnt82 480 13205(By)m 840(enclosing)s 1836(an)s 2145(object)s
+2815(in)s 3085(braces,)s 3828(it)s 4046(is)s 4282(possible)s
+5148(to)s 5414(o)s 3(v)k 3(erride)k 6286(the)s
+6660(set)s 7011(precedences.)s 8369(Here)s 8916(is)s 0 12917(another)m
+777(e)s 3(xpression)k 1854(for)s 2192(the)s 2540(table)s
+3060(abo)s 3(v)k 3(e,)k 3733(in)s 3976(which)s
+4618(the)s 4966(columns)s 5828(are)s 6175(formed)s 6923(\207rst:)s
+220 fnt35 996 12416({ USA)m 2089(/0.1i)s 2609(W)s 8(ashington })k
+480 12128(|0.2i)m 996({ A)s 6(ustr)k 2(alia)k 2089(/)s
+2609(Canberr)s 2(a })k 240 fnt82 0 11634(Braces)m 701(ha)s 4(v)k 3(e)k
+1202(no)s 1495(ef)s 6(fect)k 2091(other)s 2642(than)s
+3111(to)s 3350(alter)s 3833(the)s 4181(grouping.)s 240 fnt83
+480 11262(P)m 19(ar)k 3(a)k 2(gr)k 3(aph)k
+1569(br)s 8(eaking)k 240 fnt82 2476 11260(occurs)m 3160(when)s
+3746(an)s 4038(object)s 4692(is)s 4911(too)s 5280(wide)s
+5810(to)s 6059(\207t)s 6327(into)s 6762(the)s 7119(space)s
+7716(a)s 4(v)k 6(ailable)k 8633(to)s 8882(it;)s
+0 10972(by)m 286(breaking)s 1168(its)s 1436(paragraphs)s 2527(into)s
+2944(lines,)s 3494(its)s 3762(width)s 4355(is)s 4557(reduced)s
+5364(to)s 5595(an)s 5869(acceptable)s 6925(amount.)s 7799(The)s
+8218(a)s 4(v)k 6(ailable)k 0 10684(space)m 587(is)s
+797(determined)s 1930(by)s 2224(the)s 220 fnt35 2572 10681(@Wide)m
+240 fnt82 3346 10684(symbol,)m 4158(whose)s 4826(form)s 5350(is)s
+240 fnt83 480 10181(length)m 220 fnt35 1193 10176(@Wide)m 240 fnt83
+2027 10181(object)m 240 fnt82 0 9680(and)m 404(whose)s 1072(result)s
+1662(is)s 1872(the)s 2220(gi)s 6(v)k 3(en)k
+2800(object)s 3444(modi\207ed)s 4353(to)s 4592(ha)s 4(v)k 3(e)k
+5093(e)s 3(xactly)k 5834(the)s 6182(gi)s 6(v)k 3(en)k
+6762(length.)s 7524(F)s 3(or)k 7913(e)s 3(xample,)k
+220 fnt35 480 9179(5i @Wide {)m 480 8891(Macbeth w)m 3(as v)k 5(er)k -6(y ambitious)k 3(.)k 13( )k 11(This led him to wish to become king of)k
+480 8603(Scotland.)m 13( )k 11(The witches told him that this wish of his w)k 2(ould come tr)k -3(ue)k 3(.)k 13( )k 11(The)k
+480 8315(king of Scotland at this time w)m 3(as Duncan.)k 13( Encour)k 2(aged b)k 4(y his wif)k 6(e)k 3(, Macbeth)k
+480 8027(m)m 2(urdered Duncan.)k 13( He w)k 3(as thus enab)k 4(led to succeed Duncan as king.)k 13( \(51 w)k 2(ords\))k
+480 7739(|0.5i)m 480 7451(Encour)m 2(aged b)k 4(y his wif)k 6(e)k 3(, Macbeth achie)k 6(v)k 5(ed his ambition and realiz)k 3(ed the)k
+480 7163(prediction of the witches b)m 4(y m)k 2(urder)k -3(ing Duncan and becoming king of Scotland)k 480 6875(in his place)m 3(.)k 13( \(26 w)k 2(ords\))k
+480 6587(})m 240 fnt82 0 6093(has)m 370(for)s 708(its)s
+984(result)s 1574(the)s 1922(follo)s 6(wing)k 2899(\207v)s 3(e)k
+3311(inch)s 3780(wide)s 4301(object)s 4945([7)s 5132(]:)s
+480 5590(Macbeth)m 1356(w)s 2(as)k 1758(v)s 3(ery)k
+2216(ambitious.)s 3304(This)s 480 5302(led)m 828(him)s 1257(to)s
+1493(wish)s 2000(to)s 2236(become)s 3033(king)s 3509(of)s
+480 5014(Scotland.)m 1538(The)s 2023(witches)s 2861(told)s 3348(him)s
+480 4726(that)m 922(this)s 1343(wish)s 1876(of)s 2172(his)s
+2526(w)s 2(ould)k 3206(come)s 480 4438(true.)m 1025(The)s
+1464(king)s 1954(of)s 2235(Scotland)s 3141(at)s 3384(this)s
+480 4150(time)m 959(w)s 2(as)k 1379(Duncan.)s 2287(Encouraged)s
+3486(by)s 480 3862(his)m 818(wife,)s 1357(Macbeth)s 2259(murdered)s
+3242(Dun)s 3652(-)s 480 3574(can.)m 995(He)s 1350(w)s 2(as)k
+1790(thus)s 2260(enabled)s 3081(to)s 3340(suc)s 3652(-)s
+480 3286(ceed)m 976(Duncan)s 1778(as)s 2028(king.)s 2618(\(51)s
+2972(w)s 2(ords\))k 4440 5590(Encouraged)m 5653(by)s 5960(his)s
+6302(wife,)s 6846(Macbeth)s 4440 5302(achie)m 6(v)k 3(ed)k
+5409(his)s 5809(ambition)s 6786(and)s 7260(real)s 7612(-)s
+4440 5014(ized)m 4910(the)s 5272(prediction)s 6312(of)s 6597(the)s
+6959(witches)s 4440 4726(by)m 4731(murdering)s 5776(Duncan)s 6574(and)s
+6974(becom)s 7612(-)s 4440 4438(ing)m 4818(king)s 5316(of)s
+5606(Scotland)s 6520(in)s 6782(his)s 7132(place.)s 4440 4150(\(26)m
+4812(w)s 2(ords\))k 0 2783(A)m 232(paragraph)s 1247(of)s
+1520(te)s 3(xt)k 1937(can)s 2328(be)s 2612(included)s
+3496(an)s 3(ywhere,)k 4533(and)s 4939(it)s 5133(will)s
+5561(be)s 5845(brok)s 2(en)k 6567(automatically)s 7923(if)s
+8143(necessary)s 0 2495(to)m 239(\207t)s 498(the)s 846(a)s 4(v)k 6(ailable)k
+1754(space.)s 2449(The)s 2877(spaces)s 3552(between)s 4406(w)s 2(ords)k
+5040(are)s 5387(con)s 9(v)k 3(erted)k 6376(into)s
+6801(concatenation)s 8186(symbols.)s 480 2121(These)m 1136(are)s 1512(the)s
+1889(most)s 2443(signi\207cant)s 3528(of)s 3828(Lout')s 13(s)k
+4519(object-b)s 4(uilding)k 6058(symbols.)s 7049(There)s 7691(are)s
+8067(others,)s 8788(for)s 0 1833(changing)m 924(fonts,)s 1501(controlling)s
+2596(paragraph)s 3601(breaking,)s 4538(printing)s 5340(graphical)s 6277(objects)s
+6997(lik)s 2(e)k 7402(box)s 3(es)k 8001(and)s
+8397(circles,)s 0 1545(and)m 404(so)s 670(on,)s 1017(b)s 4(ut)k
+1379(the)s 3(y)k 1842(do)s 2135(not)s 2501(add)s
+2905(an)s 3(ything)k 3793(ne)s 6(w)k 4240(in)s
+4483(principle.)s 240 fnt84 0 752(1.2.)m 471(De\207nitions)s 240 fnt82
+480 321(The)m 897(features)s 1691(of)s 1950(Lout)s 2451(are)s
+2786(v)s 3(ery)k 3250(general.)s 4105(The)s 3(y)k
+4637(do)s 4918(not)s 5272(assume)s 6020(that)s 6427(documents)s
+7503(are)s 7838(composed)s 8855(of)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 4 10
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(4)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 240 fnt82 0 13204(pages,)m 637(nor)s 1001(that)s
+1403(there)s 1921(are)s 2252(such)s 2733(things)s 3353(as)s
+3588(mar)s 4(gins)k 4389(and)s 4778(footnotes,)s 5759(for)s
+6082(e)s 3(xample.)k 240 fnt83 7037 13206(De\207nitions)m 240 fnt82
+8127 13204(bridge)m 8778(the)s 0 12916(g)m 1(ap)k 397(between)s
+1249(Lout')s 13(s)k 1910(general)s 2666(features)s 3470(and)s
+3873(the)s 4219(special)s 4935(features)s 5740(\211)s 5918(footnotes,)s
+6913(equations,)s 7936(pages)s 8530(\211)s 8708(that)s 0 12628(particular)m
+991(documents)s 2097(require.)s 2954(The)s 3(y)k 3515(hold)s
+4017(the)s 4382(instr)s 4806(uct)s 5098(ions)s 5566(for)s
+5922(producing)s 6963(these)s 7528(special)s 8264(features,)s 0 12340(con)m 9(v)k 3(eniently)k
+1278(packaged)s 2240(ready)s 2825(for)s 3163(use.)s 480 11966(F)m 3(or)k
+885(e)s 3(xample,)k 1815(consider)s 2701(the)s 3065(challenge)s
+4053(posed)s 4686(by)s 4996(`)s 5057(T)s 5153 11918(E)m
+5261 11966(X)m 5430(',)s 5633(which)s 6291(is)s 6517(the)s
+6881(name)s 7471(of)s 7758(one)s 8176(of)s 8464(Lout')s 13(s)k
+0 11678(most)m 525(illustrious)s 1531(ri)s 6(v)k 6(als)k
+2100([5)s 2285(].)s 2528(Lout)s 3040(solv)s 3(es)k
+3686(it)s 3878(easily)s 4489(enough,)s 5302(lik)s 2(e)k
+5714(this:)s 220 fnt35 480 11177(T{ /0.2f)m 6(o E }X)k 240 fnt82
+0 10683(b)m 4(ut)k 373(to)s 624(type)s 1103(this)s
+1511(e)s 6(v)k 3(ery)k 2098(time)s 2590(T)s
+2686 10635(E)m 2794 10683(X)m 3035(is)s 3256(mentioned)s 4336(w)s 2(ould)k
+5002(be)s 5296(tedious)s 6050(and)s 6465(error)s 4(-prone.)k
+7724(So)s 8041(we)s 8388(place)s 8960(a)s 0 10395(de\207nition)m
+974(at)s 1206(the)s 1554(be)s 3(ginning)k 2562(of)s
+2833(the)s 3181(document:)s 220 fnt35 480 9894(def @T)m 26(eX { )k 11(T{ /0.2f)k 6(o E }X })k
+240 fnt82 0 9400(No)m 6(w)k 220 fnt35 514 9397(@T)m 26(eX)k
+240 fnt82 1169 9400(stands)m 1818(for)s 2156(the)s 2504(object)s
+3148(follo)s 6(wing)k 4125(it)s 4317(between)s 5171(braces,)s
+5888(and)s 6292(we)s 6627(may)s 7093(write)s 220 fnt35
+480 8899(consider)m 1370(the)s 1728(challenge)s 2719(posed)s 3366(b)s 4(y)k
+3653(`@T)s 26(eX',)k 4451(\202)s 240 fnt82 0 8400(as)m
+250(the)s 598(author)s 1269(did)s 1633(earlier)s 2301(in)s
+2544(this)s 2940(paragraph.)s 480 8026(A)m 240 fnt83 706 8028(symbol)m
+240 fnt82 1440 8026(is)m 1646(a)s 1808(name,)s 2429(lik)s 2(e)k
+220 fnt35 2837 8023(@T)m 26(eX)k 240 fnt82 3432 8026(,)m
+3535(which)s 4172(stands)s 4817(for)s 5151(something)s 6197(other)s
+6744(than)s 7209(itself.)s 7845(The)s 8269(initial)s 220 fnt35
+8875 8023(@)m 240 fnt82 0 7738(is)m 201(not)s 558(compulsory)s 15(,)k
+1771(b)s 4(ut)k 2124(it)s 2307(does)s 2788(mak)s 2(e)k
+3351(the)s 3690(name)s 4254(stand)s 4808(out)s 5165(clearly)s 15(.)k
+5954(A)s 240 fnt83 6175 7740(de\207nition)m 240 fnt82 7124 7738(of)m
+7386(a)s 7543(symbol)s 8293(declares)s 0 7450(a)m 164(name)s
+736(to)s 973(be)s 1253(a)s 1417(symbol,)s 2227(and)s
+2629(says)s 3090(what)s 3613(the)s 3959(symbol)s 4717(stands)s
+5364(for)s 13(.)k 5791(The)s 240 fnt83 6217 7452(body)m
+240 fnt82 6737 7450(of)m 7006(a)s 7170(de\207nition)s 8142(is)s
+8350(the)s 8695(part)s 0 7162(follo)m 6(wing)k 977(the)s
+1325(name,)s 1950(between)s 2804(the)s 3152(braces.)s 3926(T)s 19(o)k
+240 fnt83 4226 7164(in)m 9(vok)k 2(e)k 240 fnt82
+4892 7162(a)m 5058(symbol)s 5818(is)s 6028(to)s 6267(mak)s 2(e)k
+6839(use)s 7214(of)s 7485(it.)s 480 6788(Another)m 1324(e)s 3(xpression)k
+2401(ripe)s 2828(for)s 3166(packaging)s 4203(in)s 4446(a)s
+4612(de\207nition)s 5586(is)s 220 fnt35 480 6287(@OneRo)m 3(w { | -2p @F)k 6(ont n ^/0.5fk 2 })k
+240 fnt82 0 5745(which)m 642(produces)s 200 fnt82 1671 5862(n)m
+240 fnt82 1557 5745(2)m 1828(\(see)s 2268(Chapter)s 3085(2\).)s
+3448(But)s 3854(this)s 4250(time)s 4730(we)s 5065(w)s 2(ould)k
+5720(lik)s 2(e)k 6132(to)s 6371(be)s 6653(able)s
+7107(to)s 7346(write)s 240 fnt83 480 5242(object)m 220 fnt35
+1188 5237(@Super)m 240 fnt83 2116 5242(object)m 240 fnt82 0 4640(so)m
+296(that)s 220 fnt35 745 4637(a)m 953(@Super)s 1853(2)s
+240 fnt82 2055 4640(w)m 2(ould)k 2741(come)s 3345(out)s
+3742(as)s 200 fnt82 4128 4769(2)m 240 fnt82 4022 4640(a)m
+4223(,)s 4361(and)s 4796(so)s 5092(on,)s 5470(for)s
+5838(in)s 6112(this)s 6538(w)s 2(ay)k 7020(the)s
+7398(usefulness)s 8476(of)s 8778(the)s 0 4352(de\207nition)m 974(is)s
+1184(greatly)s 1901(increased.)s 2967(Here)s 3487(is)s 3697(ho)s 6(w)k
+4158(it)s 4350(is)s 4560(done:)s 220 fnt35 480 3851(def @Super)m
+480 3563( left x)m 480 3275( r)m -3(ight y)k 480 2987({ @OneRo)m 3(w { | -2p @F)k 6(ont y ^/0.5fk x })k
+480 2699(})m 240 fnt82 0 2205(This)m 492(de\207nition)s 1483(says)s
+1963(that)s 220 fnt35 2398 2202(@Super)m 240 fnt82 3283 2205(has)m
+3669(tw)s 2(o)k 240 fnt83 4096 2207(par)m 3(ameter)k 2(s)k
+240 fnt82 5176 2205(,)m 220 fnt35 5300 2202(x)m 240 fnt82
+5485 2205(and)m 220 fnt35 5906 2202(y)m 240 fnt82 6014 2205(.)m
+6194(When)s 220 fnt35 6840 2202(@Super)m 240 fnt82 7725 2205(is)m
+7952(in)s 9(v)k 4(ok)k 2(ed,)k 8833(all)s
+0 1917(occurrences)m 1205(of)s 220 fnt35 1490 1914(x)m 240 fnt82
+1671 1917(in)m 1928(the)s 2289(body)s 2837(will)s 3276(be)s
+3572(replaced)s 4452(by)s 4760(the)s 5121(object)s 5779(just)s
+6197(to)s 6450(the)s 6811(left)s 7202(of)s 220 fnt35
+7486 1914(@Super)m 240 fnt82 8294 1917(,)m 8415(and)s 8833(all)s
+0 1629(occurrences)m 1192(of)s 220 fnt35 1462 1626(y)m 240 fnt82
+1630 1629(will)m 2055(be)s 2337(replaced)s 3203(by)s 3496(the)s
+3844(object)s 4487(just)s 4892(to)s 5130(the)s 5477(right.)s
+6092(So,)s 6451(for)s 6789(e)s 3(xample,)k 7702(the)s
+8049(e)s 3(xpression)k 220 fnt35 480 1128(2 @Super { Slope @F)m 6(ont n })k
+240 fnt82 0 632(is)m 210(equal)s 783(to)s 220 fnt35
+480 131(@OneRo)m 3(w { | -2p @F)k 6(ont { Slope @F)k 6(ont n } ^/0.5fk 2 })k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 5 11
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13844(1.2.)m 454(De\207nitions)s 240 fnt84 8953 13841(5)m
+240 fnt82 0 13151(and)m 404(so)s 670(comes)s 1332(out)s
+1698(as)s 200 fnt83 2062 13281(n)m 240 fnt82 1948 13151(2)m
+2157(.)s 480 12777(Lout)m 994(permits)s 1764(de\207nitions)s 2828(to)s
+3070(in)s 9(v)k 4(ok)k 2(e)k 3765(themselv)s 3(es,)k
+4934(a)s 5103(peculiarly)s 6115(circular)s 6905(thing)s 7453(to)s
+7695(do)s 7991(which)s 8636(goes)s 0 12489(by)m 294(the)s
+642(name)s 1216(of)s 240 fnt83 1487 12491(r)m 8(ecur)k 2(sion.)k
+240 fnt82 2548 12489(Here)m 3068(is)s 3278(an)s 3561(e)s 3(xample)k
+4424(of)s 4695(a)s 4861(recursi)s 6(v)k 3(e)k
+5783(de\207nition:)s 220 fnt35 480 11988(def @Leaders { ..)m 13( @Leaders })k 240 fnt82
+0 11494(The)m 418(usual)s 968(rule)s 1384(is)s 1584(that)s
+1991(the)s 2329(v)s 6(alue)k 2886(of)s 3147(an)s
+3420(in)s 9(v)k 4(ocation)k 4463(of)s 4724(a)s
+4879(symbol)s 5629(is)s 5828(a)s 5984(cop)s 2(y)k
+6492(of)s 6752(the)s 7090(body)s 7613(of)s 7874(the)s
+8211(symbol')s 13(s)k 0 11206(de\207nition,)m 1024(so)s 1290(the)s
+1638(v)s 6(alue)k 2206(of)s 220 fnt35 2477 11203(@Leaders)m
+240 fnt82 3546 11206(must)m 4071(be)s 220 fnt35 480 10724(..)m 13( @Leaders)k
+240 fnt82 0 10269(But)m 406(no)s 6(w)k 867(this)s
+1263(rule)s 1690(applies)s 2418(to)s 2657(this)s 3053(ne)s 6(w)k
+3500(in)s 9(v)k 4(ocation)k 4554(of)s 220 fnt35
+4825 10266(@Leaders)m 240 fnt82 5834 10269(;)m 5946(substituting)s 7115(its)s
+7391(body)s 7925(gi)s 6(v)k 3(es)k 220 fnt35
+480 9768(..)m 13( ..)k 13( @Leaders)k 240 fnt82 0 9313(and)m
+408(so)s 679(on)s 980(fore)s 6(v)k 3(er)k 13(.)k
+1816(In)s 2076(order)s 2645(to)s 2888(mak)s 2(e)k
+3465(this)s 3865(useful,)s 4561(an)s 4848(in)s 9(v)k 4(ocation)k
+5907(of)s 6182(a)s 6353(recursi)s 6(v)k 3(e)k
+7279(symbol)s 8044(is)s 8259(replaced)s 0 9025(by)m 294(its)s
+570(body)s 1104(only)s 1584(if)s 1801(suf\207cient)s 2750(space)s
+3337(is)s 3547(a)s 4(v)k 6(ailable.)k 4563(So,)s
+4923(for)s 5261(e)s 3(xample,)k 220 fnt35 480 8524(4i @Wide { Chapter 7 @Leaders 62 })m
+240 fnt82 0 8028(has)m 370(for)s 708(its)s 984(result)s
+1574(the)s 1922(object)s 480 7524(Chapter)m 1297(7)s 1525(..)s
+1809(..)s 2093(..)s 2377(..)s 2661(..)s 2945(..)s
+3229(..)s 3513(..)s 3797(..)s 4081(..)s 4365(..)s
+4649(..)s 4933(..)s 5217(..)s 5501(..)s 5785(62)s
+0 7021(with)m 478(Lout)s 985(checking)s 1897(before)s 2558(each)s
+3049(replacement)s 4271(of)s 220 fnt35 4537 7018(@Leaders)m 240 fnt82
+5601 7021(by)m 220 fnt35 5891 7018(..)m 6177(@Leaders)s 240 fnt82
+7241 7021(that)m 7654(the)s 7997(total)s 8471(length)s 0 6733(afterw)m 2(ards,)k
+1112(including)s 2069(the)s 2417(other)s 2968(w)s 2(ords,)k
+3658(w)s 2(ould)k 4313(not)s 4679(e)s 3(xceed)k
+5398(four)s 5856(inches.)s 480 6359(The)m 902(remaining)s 1918(issue)s
+2445(is)s 2649(what)s 3168(happens)s 3997(when)s 4567(Lout)s
+5072(decides)s 5834(that)s 6246(it)s 6431(is)s 6635(time)s
+7109(to)s 7341(stop.)s 7898(The)s 8319(ob)s 3(vious)k
+0 6071(thing)m 545(to)s 784(do)s 1077(is)s 1287(to)s
+1526(replace)s 2271(the)s 2619(last)s 3010(in)s 9(v)k 4(ocation)k
+4064(by)s 4358(an)s 4641(empty)s 5293(object:)s 220 fnt35
+480 5573(..)m 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( {})k
+240 fnt82 0 5079(As)m 316(the)s 662(e)s 3(xample)k
+1524(sho)s 6(ws,)k 2222(this)s 2617(w)s 2(ould)k
+3270(lea)s 4(v)k 3(e)k 3822(a)s 3986(small)s
+4556(trailing)s 5297(space,)s 5933(which)s 6574(is)s 6782(a)s
+6947(major)s 7562(headache.)s 8614(Lout)s 0 4791(\207x)m 3(es)k
+517(this)s 930(by)s 1242(replacing)s 2201(the)s 2566(last)s
+2975(in)s 9(v)k 4(ocation)k 4046(with)s 4545(a)s
+4729(dif)s 6(ferent)k 5621(kind)s 6122(of)s 6411(empty)s
+7080(object,)s 7788(called)s 220 fnt35 8434 4788(@Null)m 240 fnt82
+9019 4791(,)m 0 4503(whose)m 677(ef)s 6(fect)k 1282(is)s
+1501(to)s 1749(mak)s 2(e)k 2330(an)s 2623(adjacent)s
+3488(concatenation)s 4882(symbol)s 5651(disappear)s 9(,)k 6674(preferably)s
+7718(one)s 8130(preceding)s 0 4215(the)m 220 fnt35 348 4212(@Null)m
+240 fnt82 933 4215(.)m 1097(Thus,)s 1683(when)s 2259(Lout)s
+2771(replaces)s 220 fnt35 3604 4212(@Leaders)m 240 fnt82 4673 4215(by)m
+220 fnt35 4967 4212(@Null)m 240 fnt82 5612 4215(in)m 5855(the)s
+6203(e)s 3(xpression)k 220 fnt35 480 3714(..)m 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( ..)k 13( @Leaders)k
+240 fnt82 0 3259(the)m 348(trailing)s 1089(space,)s 1727(which)s
+2368(is)s 2577(really)s 3174(a)s 3339(horizontal)s 4362(concatenation)s
+5747(symbol,)s 6558(disappears)s 7617(as)s 7867(well.)s 8441(This)s
+8916(is)s 0 2971(tak)m 2(en)k 573(into)s 998(account)s
+1802(when)s 2378(deciding)s 3255(whether)s 4085(there)s 4618(is)s
+4828(room)s 5393(to)s 5632(replace)s 220 fnt35 6377 2968(@Leaders)m
+240 fnt82 7446 2971(by)m 7740(its)s 8016(body)s 15(.)k
+480 2597(The)m 903(remainder)s 1926(of)s 2192(this)s 2583(section)s
+3312(is)s 3517(de)s 6(v)k 4(oted)k 4318(to)s
+4552(sho)s 6(wing)k 5406(ho)s 6(w)k 5862(de\207nitions)s
+6918(may)s 7379(be)s 7656(used)s 8148(to)s 8382(specify)s
+0 2309(the)m 240 fnt83 348 2311(pa)m 2(g)k 2(e)k
+863(layout)s 240 fnt82 1525 2309(of)m 1796(a)s 1962(document.)s
+3070(T)s 19(o)k 3370(be)s 3(gin)k 3956(with,)s
+4488(we)s 4823(can)s 5212(de\207ne)s 5853(a)s 6019(page)s
+6527(lik)s 2(e)k 6939(this:)s 220 fnt35 480 1808(def @P)m 8(age)k
+480 1520({)m 480 1232( //1i ||1i)m 480 944( 6i @Wide 9.5i @High)m 480 656( { @T)m 26(e)k 6(xtPlace //1r)k -8(t @F)k 6(ootSect })k
+480 368( ||1i //1i)m 480 80(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 6 12
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(6)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 240 fnt82 0 13205(No)m 6(w)k 220 fnt35
+520 13202(@P)m 8(age)k 240 fnt82 1306 13205(is)m 1523(an)s
+1813(eight)s 2358(by)s 2659(ele)s 6(v)k 3(en)k
+3338(and)s 3749(a)s 3922(half)s 4371(inch)s 4847(object,)s
+5545(with)s 6034(one)s 6443(inch)s 6919(mar)s 4(gins,)k
+7799(a)s 7972(place)s 8539(at)s 8778(the)s 0 12917(top)m
+367(for)s 713(te)s 3(xt,)k 1183(and)s 1595(a)s
+1769(section)s 2511(at)s 2751(the)s 3108(bottom)s 3854(for)s
+4200(footnotes)s 5149(\(since)s 220 fnt35 5783 12914(//1r)m -8(t)k
+240 fnt82 6233 12917(bottom-justi\207es)m 7792(the)s 8149(follo)s 6(wing)k
+0 12629(object\).)m 827(It)s 1032(will)s 1458(be)s 1740(con)s 9(v)k 3(enient)k
+2838(for)s 3176(us)s 3440(to)s 3679(sho)s 6(w)k
+4233(the)s 4581(ef)s 6(fect)k 5177(of)s 5448(in)s 9(v)k 4(oking)k
+220 fnt35 6340 12626(@P)m 8(age)k 240 fnt82 7119 12629(lik)m 2(e)k
+7531(this:)s 160 fnt35 480 11528(@P)m 6(age)k 220 fnt78
+1240 11514(\336)m gsave
+1690 9795 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+240 fnt82 0 9344(with)m 482(the)s
+830(in)s 9(v)k 4(ok)k 2(ed)k 1645(symbol)s
+2405(appearing)s 3401(to)s 3640(the)s 3988(left)s 4365(of)s
+4636(the)s 4984(arro)s 6(w)k 15(,)k 5627(and)s
+6031(its)s 6307(body)s 6841(to)s 7080(the)s 7428(right.)s
+480 8970(The)m 908(de\207nition)s 1882(of)s 2153(a)s 2319(v)s 3(ertical)k
+3086(list)s 3437(of)s 3708(pages)s 4304(should)s 5001(come)s
+5575(as)s 5825(no)s 6118(surprise:)s 220 fnt35 480 8469(def @P)m 8(ageList)k
+480 8181({)m 480 7893( @P)m 8(age // @P)k 8(ageList)k 480 7605(})m
+240 fnt82 0 7111(This)m 476(allo)s 6(ws)k 1145(in)s 9(v)k 4(ocations)k
+2286(lik)s 2(e)k 2698(the)s 3046(follo)s 6(wing:)k
+gsave
+480 0 translate
+1.0867 1.0000 scale
+160 fnt35 0 6010(@P)m 6(ageList)k 220 fnt78 890 5996(\336)m
+gsave
+1220 4277 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+160 fnt35 1220 4047(@P)m 6(ageList)k 220 fnt78 3267 5996(\336)m
+gsave
+3597 4277 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+gsave
+3597 1783 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+160 fnt35 3597 1553(@P)m 6(ageList)k 220 fnt78 5644 5996(\336)m
+gsave
+5974 4277 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+gsave
+5974 1783 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+
+grestore
+0 1067(setting)m 220 fnt35 750 1064(@P)m 8(ageList)k 240 fnt82
+1874 1067(to)m 200 fnt35 2113 1069(@Null)m 240 fnt82 2706 1067(on)m
+3003(the)s 3351(last)s 3742(step.)s 4291(An)s 3(y)k
+4755(number)s 5546(of)s 5817(pages)s 6413(can)s 6802(be)s
+7084(generated.)s 480 693(A)m 703(de\207nition)s 1669(for)s 220 fnt35
+1999 690(@T)m 26(e)k 6(xtPlace)k 240 fnt82 3209 693(is)m
+3411(be)s 3(yond)k 4164(us)s 4420(at)s 4644(present,)s
+5433(since)s 220 fnt35 5972 690(@T)m 26(e)k 6(xtPlace)k
+240 fnt82 7182 693(must)m 7699(be)s 7973(replaced)s 8832(by)s
+0 405(dif)m 6(ferent)k 877(parts)s 1394(of)s 1667(the)s
+2018(te)s 3(xt)k 2435(of)s 2708(the)s 3059(document)s
+4065(on)s 4364(dif)s 6(ferent)k 5242(pages.)s 5953(But)s
+6361(we)s 6699(can)s 7090(de\207ne)s 220 fnt35 7733 402(@F)m 6(ootSect)k
+240 fnt82 8887 405(to)m 0 117(be)m 282(a)s 448(small)s
+1020(space)s 1607(follo)s 6(wed)k 2509(by)s 2803(a)s
+2969(horizontal)s 3993(line)s 4407(follo)s 6(wed)k 5309(by)s
+5603(a)s 5769(list)s 6120(of)s 6391(places)s 7039(where)s
+7679(footnotes)s 8620(go:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 7 13
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13844(1.2.)m 454(De\207nitions)s 240 fnt84 8951 13841(7)m
+220 fnt35 480 13208(def @F)m 6(ootList )k 480 12920({ )m 480 12632( @F)m 6(ootPlace //0.3v @F)k 6(ootList)k
+480 12344(} )m 480 12056( )m 480 11768(def @F)m 6(ootSect)k 480 11480({ )m
+480 11192( //0.3v 1i @Wide @HLine)m 480 10904( //0.3v @F)m 6(ootList )k 480 10616(} )m 240 fnt82
+0 10122(assuming)m 950(that)s 220 fnt35 1360 10119(@HLine)m 240 fnt82
+2199 10122(will)m 2617(produce)s 3436(a)s 3594(horizontal)s 4610(line)s
+5016(of)s 5279(the)s 5619(indicated)s 6545(width.)s 7246(W)s 9(ith)k
+7764(this)s 8152(de\207nition)s 0 9834(we)m 335(can)s 724(generate)s
+1589(pages)s 2185(lik)s 2(e)k 2597(this:)s gsave
+480 7000 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35
+170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+220 fnt78 2647 8719(\336)m gsave
+3097 7000 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+567 0 0 0 160 180 44 170 346 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+170 173(@F)m 4(ootList)k
+grestore
+5264(\336)s gsave
+5714 7000 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+567 0 0 0 160 180 44 170 522 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+170 349(@F)m 4(ootPlace)k 170 173(@F)m 4(ootList)k
+grestore
+240 fnt82
+0 6549(and)m 404(so)s 670(on)s 967(for)s 1305(arbitrarily)s
+2312(man)s 3(y)k 2895(footnotes.)s 480 6175(W)m 19(e)k
+852(will)s 1281(see)s 1646(in)s 1892(the)s 2244(ne)s 3(xt)k
+2716(section)s 3454(ho)s 6(w)k 3918(in)s 9(v)k 4(ocations)k
+5063(of)s 220 fnt35 5337 6172(@P)m 8(ageList,)k 6511(@F)s 6(ootSect)k
+240 fnt82 7665 6175(and)m 220 fnt35 8073 6172(@F)m 6(ootList)k
+240 fnt82 0 5887(are)m 356(replaced)s 1232(by)s 1535(their)s
+2041(bodies)s 2726(only)s 3216(when)s 3801(the)s 4158(need)s
+4677(to)s 4925(insert)s 5524(te)s 3(xt)k 5949(and)s
+6362(footnotes)s 7312(obliges)s 8063(Lout)s 8584(to)s 8833(do)s
+0 5599(so;)m 352(otherwise)s 1364(the)s 1740(in)s 9(v)k 4(ocations)k
+2908(are)s 3283(replaced)s 4177(by)s 220 fnt35 4499 5596(@Null)m
+240 fnt82 5084 5599(.)m 5275(In)s 5559(this)s 5982(w)s 2(ay)k 15(,)k
+6499(the)s 6874(right)s 7413(number)s 8231(of)s 8530(pages)s
+0 5311(is)m 223(made,)s 862(the)s 1224(small)s 1810(line)s
+2238(appears)s 3033(only)s 3527(on)s 3838(pages)s 4447(that)s
+4879(ha)s 4(v)k 3(e)k 5394(at)s 5640(least)s
+6151(one)s 6567(footnote,)s 7485(and)s 7903(unnecessary)s 0 5023(concatenation)m
+1385(symbols)s 2234(disappear)s 13(.)k 480 4649(This)m 958(approach)s
+1894(to)s 2135(page)s 2645(layout)s 3305(is)s 3517(the)s
+3867(most)s 4394(original)s 5194(contrib)s 4(ution)k 6418(Lout)s
+6932(has)s 7304(made)s 7880(to)s 8122(document)s 0 4361(formatting.)m
+1172(It)s 1377(is)s 1587(e)s 3(xtraordinarily)k 3057(\210e)s 3(xible.)k
+3935(T)s 19(w)k 2(o-column)k 5207(pages?)s 5971(Use)s
+220 fnt35 480 3860({2.8i @Wide @T)m 26(e)k 6(xtPlace} ||0.4i {2.8i @Wide @T)k 26(e)k 6(xtPlace})k
+240 fnt82 0 3366(instead)m 768(of)s 220 fnt35 1072 3363(@T)m 26(e)k 6(xtPlace)k
+240 fnt82 2230 3366(.)m 2427(F)s 3(ootnotes)k 3452(in)s
+3728(smaller)s 4523(type?)s 5187(Use)s 220 fnt35 5648 3363(-2p)m
+6051(@F)s 6(ont)k 6797(@F)s 6(ootPlace)k 240 fnt82
+8086 3366(instead)m 8855(of)s 220 fnt35 0 3075(@F)m 6(ootPlace)k
+240 fnt82 1196 3078(.)m 1360(And)s 1831(on)s 2128(and)s
+2532(on.)s 240 fnt84 0 2330(1.3.)m 471(Cr)s 4(oss)k
+1106(r)s 4(efer)k 4(ences)k 240 fnt82 480 1898(A)m
+705(cross)s 1241(reference)s 2178(in)s 2415(common)s 3304(terminology)s
+4521(is)s 4725(something)s 5769(lik)s 2(e)k 6176(`see)s
+6610(T)s 19(able)k 7185(6')s 7411(or)s 7664(`see)s
+8098(page)s 8600(57')s 8946(\211)s 0 1610(a)m 168(reference)s
+1114(within)s 1785(a)s 1954(document)s 2961(to)s 3202(some)s
+3766(other)s 4320(part)s 4754(of)s 5028(it.)s 5327(Readers)s
+6150(\207nd)s 6584(them)s 7125(v)s 3(ery)k 7604(useful,)s
+8298(b)s 4(ut)k 8663(the)s 3(y)k 0 1322(are)m
+343(a)s 504(major)s 1116(problem)s 1969(for)s 2302(authors.)s
+3165(As)s 3478(the)s 3821(document)s 4820(is)s 5025(re)s 6(vised,)k
+5812(T)s 19(able)k 6388(6)s 6556(becomes)s 7440(T)s 19(able)k
+8016(7,)s 8238(the)s 8581(thing)s 0 1034(on)m 297(page)s
+805(57)s 1093(mo)s 3(v)k 3(es)k 1763(to)s
+2002(page)s 2510(63,)s 2857(and)s 3261(all)s 3554(the)s
+3902(cross)s 4444(references)s 5475(must)s 6000(be)s 6282(changed.)s
+480 660(The)m 917(Scribe)s 1593(document)s 2606(formatter)s 9(,)k
+3601(de)s 6(v)k 3(eloped)k 4644(by)s 4947(Brian)s
+5545(K.)s 5831(Reid)s 6351([6)s 6543(],)s 6739(introduced)s
+7829(a)s 8005(scheme)s 8788(for)s 0 372(k)m 2(eeping)k
+804(track)s 1337(of)s 1603(cross)s 2140(references.)s 3279(It)s
+3479(allo)s 6(ws)k 4143(you)s 4553(to)s 4787(gi)s 6(v)k 3(e)k
+5241(names)s 5898(to)s 6132(tables,)s 6791(\207gures,)s 7544(etc.,)s
+7984(and)s 8383(to)s 8617(refer)s 0 84(to)m 233(them)s
+764(by)s 1051(name.)s 1726(The)s 2147(formatter)s 3087(inserts)s
+3754(the)s 4095(appropriate)s 5233(numbers)s 6101(in)s 6337(place)s
+6890(of)s 7154(the)s 7495(names,)s 8206(so)s 8465(that)s
+8876(as)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 8 14
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(8)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 240 fnt82 0 13205(the)m 342(document)s 1339(is)s
+1543(re)s 6(vised,)k 2327(the)s 2669(cross)s 3204(references)s
+4229(are)s 4569(k)s 2(ept)k 5033(up)s 5319(to)s
+5552(date)s 5999(automatically)s 15(.)k 7442(Lout)s 7947(has)s
+8310(adopted)s 0 12917(and)m 404(e)s 3(xtended)k 1323(this)s
+1719(scheme.)s 480 12543(In)m 726(Lout,)s 1275(automatic)s 2260(cross)s
+2792(referencing)s 3922(w)s 2(orks)k 4546(in)s 4779(the)s
+5117(follo)s 6(wing)k 6084(w)s 2(ay)k 15(.)k
+6620(First)s 7107(de\207ne)s 7738(a)s 7894(symbol)s 8644(with)s
+0 12255(a)m 166(parameter)s 1180(with)s 1662(the)s 2010(special)s
+2728(name)s 220 fnt35 3302 12252(@T)m 26(ag:)k 480 11754(def @T)m 26(ab)k 4(le)k
+480 11466( left @T)m 26(ag)k 480 11178( r)m -3(ight @V)k 15(alue)k
+480 10890({)m 480 10602( ||1i @V)m 15(alue)k 480 10314(})m 240 fnt82
+0 9820(When)m 643(this)s 1054(symbol)s 1829(is)s 2054(in)s 9(v)k 4(ok)k 2(ed,)k
+2933(the)s 3296(v)s 6(alue)k 3879(gi)s 6(v)k 3(en)k
+4474(to)s 220 fnt35 4727 9817(@T)m 26(ag)k 240 fnt82
+5365 9820(should)m 6077(be)s 6374(a)s 6555(simple)s 7263(w)s 2(ord)k
+7826(lik)s 2(e)k 220 fnt35 8253 9817(cities)m 240 fnt82
+8745 9820(,)m 8867(or)s 0 9532(se)m 6(v)k 3(eral)k
+722(simple)s 1415(w)s 2(ords)k 2049(juxtaposed)s 3144(lik)s 2(e)k
+220 fnt35 3556 9529(cities compare)m 240 fnt82 4962 9532(;)m 5074(it)s
+5266(serv)s 3(es)k 5911(to)s 6150(name)s 6724(the)s
+7072(in)s 9(v)k 4(ocation:)k 220 fnt35 480 9031({ cities compare } @T)m 26(ab)k 4(le)k
+480 8743({)m 480 8455( )m 8(W)k 8(ashington |0.5i Canberr)k 2(a)k
+480 8167(})m 240 fnt82 0 7673(W)m 19(e)k 410(may)s
+917(no)s 6(w)k 1419(refer)s 1969(to)s 2249(this)s
+2686(in)s 9(v)k 4(ocation)k 3782(else)s 6(where)k
+4828(in)s 5112(the)s 5501(document,)s 6593(using)s 7206(the)s
+240 fnt83 7595 7675(cr)m 10(oss)k 8187(r)s 8(efer)k 8(ence)k
+220 fnt35 0 7382(@T)m 26(ab)k 4(le&&{ cities compare }.)k 240 fnt82
+2918 7385(Here)m 220 fnt35 3480 7382(&&)m 240 fnt82 3870 7385(is)m
+4122(the)s 240 fnt83 4511 7387(cr)m 10(oss)k 5103(r)s 8(efer)k 8(ence)k
+6084(symbol)s 240 fnt82 6762 7385(;)m 6916(its)s 7233(left)s
+7652(parameter)s 8708(is)s 8960(a)s 0 7097(symbol)m 772(and)s
+1189(its)s 1478(right)s 2002(parameter)s 3028(is)s 3251(the)s
+3612(v)s 6(alue)k 4193(of)s 4476(the)s 220 fnt35
+4837 7094(@T)m 26(ag)k 240 fnt82 5473 7097(parameter)m 6500(of)s
+6783(some)s 7357(in)s 9(v)k 4(ocation)k 8424(of)s
+8708(that)s 0 6809(symbol.)m 869(Of)s 1193(course)s 1873(it')s 13(s)k
+2215(simplest)s 3071(if)s 3288(you)s 3703(use)s 4078(just)s
+4483(a)s 4649(one-w)s 2(ord)k 5622(tag;)s 6026(then)s
+6495(no)s 6788(braces)s 7449(are)s 7796(needed.)s 480 6435(A)m
+695(cross)s 1222(reference)s 2150(is)s 2345(not)s 2696(an)s
+2964(object;)s 3645(the)s 3978(reader)s 4619(should)s 5301(think)s
+5839(of)s 6095(it)s 6272(as)s 6507(an)s 6775(arro)s 6(w)k
+7365(in)s 7593(the)s 7926(\207nal)s 8391(printed)s 0 6147(document,)m
+1049(be)s 3(ginning)k 2054(at)s 2284(the)s 2629(cross)s
+3169(reference)s 4109(and)s 4511(ending)s 5213(at)s 5443(the)s
+5788(top)s 6145(of)s 6413(the)s 6759(tar)s 4(get)k
+7355(in)s 9(v)k 4(ocation.)k 8513(Three)s 0 5859(special)m
+715(v)s 6(alues)k 1367(may)s 1830(be)s 2108(gi)s 6(v)k 3(en)k
+2685(to)s 2920(the)s 3264(right)s 3772(parameter)s 4782(of)s
+220 fnt35 5050 5856(&&)m 240 fnt82 5338 5859(:)m 220 fnt35
+5500 5856(preceding)m 240 fnt82 6451 5859(,)m 220 fnt35 6555 5856(f)m 6(ollo)k 3(wing)k
+240 fnt82 7385 5859(,)m 7488(and)s 220 fnt35 7888 5856(f)m 6(oll_or_prec)k
+240 fnt82 9022 5859(.)m 0 5571(The)m 467(cross)s 1049(reference)s
+220 fnt35 2032 5568(@T)m 26(ab)k 4(le&&preceding)k 240 fnt82
+4116 5571(points)m 4792(to)s 5071(some)s 5671(table)s 6231(appearing)s
+7267(earlier)s 7975(in)s 8258(the)s 8646(\207nal)s 0 5283(printed)m
+760(document)s 1790(than)s 2285(itself;)s 2899(that)s 3343(is,)s
+3635(the)s 4009(arro)s 6(w)k 4640(is)s 4876(guaranteed)s
+6009(to)s 6274(point)s 6852(backw)s 2(ards)k 7950(through)s
+8778(the)s 0 4995(document.)m 1108(Usually)s 1907(it)s 2100(points)s
+2737(to)s 2977(the)s 3326(nearest)s 4063(preceding)s 5060(in)s 9(v)k 4(ocation.)k
+6222(Similarly)s 15(,)k 220 fnt35 7203 4992(@T)m 26(ab)k 4(le&&f)k 6(ollo)k 3(wing)k
+240 fnt82 0 4707(points)m 636(forw)s 2(ards,)k 1590(usually)s
+2335(to)s 2574(the)s 2922(nearest)s 3657(follo)s 6(wing)k
+4634(in)s 9(v)k 4(ocation.)k 220 fnt35 5795 4704(@T)m 26(ab)k 4(le&&f)k 6(oll_or_prec)k
+240 fnt82 8022 4707(is)m 8232(the)s 8579(same)s 0 4419(as)m
+220 fnt35 250 4416(@T)m 26(ab)k 4(le&&f)k 6(ollo)k 3(wing)k
+240 fnt82 2173 4419(if)m 2390(it)s 2582(e)s 3(xists,)k
+3230(otherwise)s 4215(it)s 4407(is)s 4617(the)s 4965(same)s
+5512(as)s 220 fnt35 5762 4416(@T)m 26(ab)k 4(le&&preceding)k
+240 fnt82 7746 4419(.)m 480 4045(This)m 962(section)s 1702(has)s
+2079(been)s 2594(concerned)s 3641(with)s 4130(what)s 4661(a)s
+4834(cross)s 5382(reference)s 6331(is)s 6548(\211)s 6734(an)s
+7023(arro)s 6(w)k 7635(from)s 8165(one)s 8574(point)s
+0 3757(in)m 242(a)s 407(document)s 1410(to)s 1648(another)s
+2424(\211)s 2603(b)s 4(ut)k 2963(not)s 3328(with)s
+3809(ho)s 6(w)k 4269(it)s 4460(is)s 4669(used.)s
+5271(One)s 5724(simple)s 6416(w)s 2(ay)k 6866(to)s
+7104(use)s 7478(a)s 7643(cross)s 8183(reference)s 0 3469(is)m
+210(to)s 449(put)s 815(it)s 1007(where)s 1647(an)s
+1930(object)s 2574(is)s 2784(e)s 3(xpected,)k 3738(lik)s 2(e)k
+4150(this:)s 220 fnt35 480 2968(a | @T)m 26(ab)k 4(le&&cities | c)k
+240 fnt82 0 2513(In)m 265(this)s 670(case)s 1146(the)s
+1504(cross)s 2055(reference)s 3007(will)s 3443(be)s 3734(replaced)s
+4610(by)s 4914(a)s 5089(cop)s 2(y)k 5616(of)s
+5897(the)s 6254(in)s 9(v)k 4(ocation)k 7317(it)s
+7519(points)s 8164(to:)s 8525(in)s 8778(the)s 0 2225(e)m 3(xample)k
+866(just)s 1275(gi)s 6(v)k 3(en,)k 1909(a)s
+2079(table)s 2603(will)s 3033(appear)s 3734(between)s 220 fnt35
+4591 2222(a)m 240 fnt82 4772 2225(and)m 220 fnt35 5180 2222(c.)m
+240 fnt82 5456 2225(Other)m 6064(applications)s 7274(of)s 7549(cross)s
+8095(references)s 0 1937(may)m 466(be)s 747(found)s 1364(in)s
+1606(Chapter)s 2423(4,)s 2649(including)s 3606(\207nding)s 4337(the)s
+4685(number)s 5475(of)s 5746(the)s 6093(page)s 6601(where)s
+7240(something)s 8289(appears,)s 0 1649(producing)m 1018(running)s 1809(page)s
+2311(headers)s 3085(and)s 3483(footers,)s 4246(and)s 4643(accessing)s
+5606(databases)s 6566(of)s 6831(Roman)s 7573(numerals,)s 8549(refer)s
+8998(-)s 0 1361(ences,)m 638(etc.)s 1080(Cross)s 1676(references)s
+2707(are)s 3054(also)s 3492(used)s 3989(by)s 4283(g)s 1(alle)k 3(ys,)k
+5063(as)s 5313(will)s 5739(be)s 6021(e)s 3(xplained)k
+7006(in)s 7249(the)s 7597(ne)s 3(xt)k 8066(section.)s
+480 987(The)m 943(implementation)s 2535(of)s 2841(cross)s 3418(referencing)s
+4593(copies)s 5290(e)s 6(v)k 3(ery)k 5901(symbol)s
+6696(in)s 9(v)k 4(ocation)k 7785(with)s 8302(a)s
+220 fnt35 8503 984(@T)m 26(ag)k 240 fnt82 0 699(parameter)m
+1008(into)s 1427(the)s 240 fnt83 1768 701(cr)m 10(oss-r)k 8(efer)k 8(ence)k
+3275(database)s 240 fnt82 4133 699(,)m 4233(a)s 4393(collection)s
+5385(of)s 5650(\207les)s 6093(whose)s 6754(names)s 7410(end)s
+7807(in)s 220 fnt35 8044 696(.ld)m 240 fnt82 8316 699(inde)m 3(x)k 3(ed)k
+0 411(by)m 286(one)s 679(\207le)s 1032(whose)s 1691(name)s
+2256(is)s 220 fnt35 2458 408(lout.li)m 240 fnt82 2954 411(.)m
+3109(It)s 3306(is)s 3507(generally)s 4441(the)s 4781(case)s
+5239(that)s 5649(the)s 5988(b)s 4(ulk)k 6462(content)s
+7218(of)s 7480(a)s 7638(symbol)s 8389(such)s 8876(as)s
+0 123(the)m 337(table)s 845(abo)s 3(v)k 3(e)k
+1455(is)s 1653(contained)s 2629(in)s 2860(its)s 3124(right)s
+3623(or)s 3870(body)s 4393(parameter)s 9(,)k 5433(and)s
+5825(that)s 6231(this)s 6615(b)s 4(ulk)k 7086(content)s
+7838(is)s 8036(not)s 8390(needed)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 9 15
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13845(1.3.)m 454(Cr)s 10(oss)k 1058(r)s 8(efer)k 8(ences)k
+240 fnt84 8952 13842(9)m 240 fnt82 0 13207(by)m 297(cross)s
+843(references)s 1878(to)s 2121(the)s 2472(symbol.)s 3345(Hence,)s
+4067(to)s 4310(sa)s 4(v)k 3(e)k 4787(space)s
+5378(in)s 5625(the)s 5977(database,)s 6910(Lout)s 7426(replaces)s
+8263(the)s 8615(right)s 0 12919(parameter)m 1011(of)s 1279(each)s
+1771(symbol)s 2527(it)s 2716(writes)s 3347(into)s 3768(it)s
+3957(by)s 4248(the)s 4592(w)s 2(ord)k 5137(???)s
+5505(whene)s 6(v)k 3(er)k 6482(the)s 6827(right)s
+7335(parameter)s 8345(appears)s 0 12631(to)m 249(be)s 542(lar)s 4(ge.)k
+1190(The)s 1629(table)s 2160(abo)s 3(v)k 3(e)k
+2792(w)s 2(ould)k 3458(appear)s 4166(as)s 4427(???)s
+4809(because)s 5632(of)s 5914(this)s 6321(optimization,)s 7647(and)s
+8062(in)s 8316(general,)s 0 12343(the)m 367(user)s 845(must)s
+1390(ensure)s 2089(that)s 2527(an)s 3(y)k 2944(content)s
+3728(required)s 4601(by)s 4915(cross)s 5477(references)s 6527(is)s
+6757(contained)s 7765(in)s 8028(parameters)s 0 12055(other)m 545(than)s
+1007(the)s 1348(right)s 1852(or)s 2104(body)s 2631(parameter)s 13(.)k
+3729(This)s 4199(optimization)s 5457(does)s 5940(not)s 6299(apply)s
+6878(when)s 7447(the)s 7788(symbol)s 8541(being)s 0 11767(written)m
+733(into)s 1158(the)s 1506(cross-reference)s 3019(database)s 3898(is)s
+4108(a)s 4274(g)s 1(alle)k 3(y)k 15(.)k
+240 fnt84 0 10974(1.4.)m 471(Galleys)s 240 fnt82 480 10497(It)m
+695(is)s 915(time)s 1406(to)s 1655(pause)s 2267(and)s
+2681(ask)s 3072(ourselv)s 3(es)k 4033(ho)s 6(w)k
+4505(close)s 5062(we)s 5408(are)s 5765(to)s 6015(achie)s 6(ving)k
+7002(our)s 7392(aim)s 7820(of)s 8102(producing)s 0 10209(neatly)m
+638(formatted)s 1624(documents.)s 2825(W)s 19(e)k 3194(can)s
+3583(certainly)s 4472(produce)s 5299(the)s 5647(pieces)s 6295(of)s
+6566(a)s 6732(document:)s 160 fnt84 870 9532(PURCELL)m 128 fnt82
+1626 9604(1)m 160 fnt82 480 9240(In)m 705(the)s 991(w)s 1(orld)k
+1455(of)s 1691(music)s 480 9060(England)m 1192(is)s 1473(supposed)s
+480 8880(to)m 686(be)s 921(a)s 1078(mere)s 1481(pro)s 2(vince.)k
+480 8700(If)m 775(she)s 1166(produces)s 1918(an)s 480 8520(indif)m 4(ferent)k
+1446(composer)s 480 8340(or)m 763(performer)s 6(,)k 1577(that)s
+1967(is)s 480 8160(re)m 2(garded)k 1172(else)s 4(where)k
+1940(as)s 480 7980(perfectly)m 1215(normal)s 1837(and)s 480 7800(natural;)m
+1072(b)s 3(ut)k 1388(if)s 1608(foreign)s 480 7620(students)m
+1215(of)s 1574(musical)s 480 7440(history)m 1286(ha)s 3(v)k 2(e)k
+1947(to)s 480 7260(ackno)m 4(wledge)k 1440(a)s 1636(British)s
+480 7080(musical)m 1105(genius,)s 1686(he)s 1967(is)s 480 6900(considered)m
+1211(a)s 1322(freak.)s 800 6667(Such)m 1267(a)s 1488(freak)s
+1967(is)s 480 6487(Henry)m 917(Purcell.)s 1480(Y)s 16(et)k
+1736(if)s 1884(we)s 480 6307(mak)m 1(e)k 875(a)s
+1000(choice)s 1467(of)s 1662(\207fteen)s 480 6127(of)m 717(the)s
+1005(w)s 1(orld')k 8(s)k 1574(musical)s 480 5947(classics,)m
+1050(as)s 1228(here,)s 1586(we)s 1820(\207nd)s 480 5767(that)m
+774(we)s 1013(cannot)s 1495(omit)s 1843(this)s 480 5587(English)m
+1005(master)s 8(.)k 128 fnt82 2634 9784(1)m 160 fnt82
+2685 9712(Blom,)m 3107(Eric.)s 160 fnt83 3476 9713(Some)m 3852(Gr)s 5(eat)k
+2634 9533(Composer)m 1(s.)k 160 fnt82 3728 9532(Oxford,)m 2634 9352(1944.)m
+gsave
+4788 7375 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+gsave
+4788 4881 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+gsave
+4788 2387 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+160 fnt35 4788 2157(@P)m 6(ageList)k 240 fnt82 0 1671(b)m 4(ut)k
+362(when)s 938(we)s 1273(try)s 1592(to)s 1831(mer)s 4(ge)k
+2480(them)s 3018(together)s 9(,)k 3899(we)s 4234(encounter)s
+5237(tw)s 2(o)k 5647(obstacles.)s 480 1297(First,)m 1029(when)s
+1610(an)s 1899(object)s 2548(is)s 2763(entered)s 3530(at)s
+3767(a)s 3938(certain)s 4650(place)s 5215(in)s 5463(the)s
+5817(document,)s 6873(it)s 7070(appears)s 7857(at)s 8094(that)s
+8518(place.)s 0 1009(But)m 393(a)s 546(footnote)s 1385(is)s
+1582(naturally)s 2472(entered)s 3219(immediately)s 4454(after)s 4936(the)s
+5271(point)s 5810(it)s 5988(refers)s 6568(to)s 6794(\(`)s
+200 fnt82 6934 1018(PURCELL)m 240 fnt82 7819 1009(')m 7917(in)s
+8147(this)s 8529(case\),)s 0 721(yet)m 352(it)s 544(appears)s
+1325(some)s 6(where)k 2464(else:)s 2941(at)s 3173(the)s
+3521(bottom)s 4259(of)s 4530(a)s 4696(page.)s 480 347(Second,)m
+1285(all)s 1570(our)s 1942(features)s 2740(b)s 4(uild)k
+3278(up)s 3564(lar)s 4(ger)k 4168(objects)s 4889(out)s
+5247(of)s 5510(smaller)s 6265(ones,)s 6803(b)s 4(ut)k
+7158(the)s 200 fnt82 7498 356(PURCELL)m 240 fnt82 8435 347(object,)m
+0 59(for)m 333(e)s 3(xample,)k 1242(must)s 1762(be)s
+2039(brok)s 2(en)k 2753(do)s 6(wn)k 3332(into)s
+3752(page-sized)s 4827(pieces.)s 5583(This)s 6053(occurs)s 6723(when)s
+7294(the)s 7637(a)s 4(v)k 6(ailable)k 8539(space)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 10 16
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(10)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 240 fnt82 0 13205(at)m 230(the)s 575(`some)s 6(where)k
+1790(else')s 2270(is)s 2477(insuf\207cient)s 3610(to)s 3846(hold)s
+4327(the)s 4672(entire)s 5268(object,)s 5957(so)s 6220(this)s
+6613(second)s 7333(obstacle)s 8169(arises)s 8760(out)s 0 12917(of)m
+271(the)s 619(\207rst.)s 480 12543(Lout')m 13(s)k 1135(last)s
+1518(major)s 2127(feature,)s 2888(which)s 3523(we)s 3850(introduce)s
+4801(to)s 5032(o)s 3(v)k 3(ercome)k 6017(these)s
+6557(obstacles,)s 7532(is)s 7734(the)s 240 fnt83 8074 12545(galle)m 7(y)k
+240 fnt82 8699 12543(\(the)m 0 12255(name)m 564(is)s 764(borro)s 6(wed)k
+1723(from)s 2237(the)s 2575(g)s 1(alle)k 3(ys)k
+3288(used)s 3775(in)s 4008(manual)s 4757(typesetting\).)s 6039(A)s
+6259(g)s 1(alle)k 3(y)k 6882(is)s 7082(an)s
+7355(object)s 7989(plus)s 8429(a)s 8584(cross)s 0 11967(reference)m
+943(which)s 1585(points)s 2221(to)s 2460(where)s 3100(the)s
+3448(object)s 4092(is)s 4302(to)s 4541(appear)s 13(.)k
+5329(The)s 5757(e)s 3(xample)k 6620(abo)s 3(v)k 3(e)k
+7242(has)s 7612(three)s 8145(g)s 1(alle)k 3(ys:)k
+160 fnt84 870 11234(PURCELL)m 128 fnt82 1626 11306(1)m 160 fnt82
+480 10942(In)m 705(the)s 991(w)s 1(orld)k 1455(of)s
+1691(music)s 480 10762(England)m 1192(is)s 1473(supposed)s 480 10582(to)m
+686(be)s 921(a)s 1078(mere)s 1481(pro)s 2(vince.)k
+480 10402(If)m 775(she)s 1166(produces)s 1918(an)s 480 10222(indif)m 4(ferent)k
+1446(composer)s 480 10042(or)m 763(performer)s 6(,)k 1577(that)s
+1967(is)s 480 9862(re)m 2(garded)k 1172(else)s 4(where)k
+1940(as)s 480 9682(perfectly)m 1215(normal)s 1837(and)s 480 9502(natural;)m
+1072(b)s 3(ut)k 1388(if)s 1608(foreign)s 480 9322(students)m
+1215(of)s 1574(musical)s 480 9142(history)m 1286(ha)s 3(v)k 2(e)k
+1947(to)s 480 8962(ackno)m 4(wledge)k 1440(a)s 1636(British)s
+480 8782(musical)m 1105(genius,)s 1686(he)s 1967(is)s 480 8602(considered)m
+1211(a)s 1322(freak.)s 800 8369(Such)m 1267(a)s 1488(freak)s
+1967(is)s 480 8189(Henry)m 917(Purcell.)s 1480(Y)s 16(et)k
+1736(if)s 1884(we)s 480 8009(mak)m 1(e)k 875(a)s
+1000(choice)s 1467(of)s 1662(\207fteen)s 480 7829(of)m 717(the)s
+1005(w)s 1(orld')k 8(s)k 1574(musical)s 480 7649(classics,)m
+1050(as)s 1228(here,)s 1586(we)s 1820(\207nd)s 480 7469(that)m
+774(we)s 1013(cannot)s 1495(omit)s 1843(this)s 480 7289(English)m
+1005(master)s 8(.)k gsave
+3321 11312 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1134 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+3201 9047 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+gsave
+3201 6553 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+gsave
+3201 4059 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35 170 2207(@T)m 19(e)k 4(xtPlace)k
+170 173(@F)m 4(ootSect)k
+grestore
+160 fnt35 3201 3829(@P)m 6(ageList)k
+gsave
+6688 11541 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1440 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+200 fnt83 6748 11497(to)m 6947(printer)s gsave
+4335 9295 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+4335 9295 translate
+240 fnt82 963 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+4335 9295 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+128 fnt82 5418 9331(1)m
+160 fnt82 5469 9259(Blom,)m 5891(Eric.)s 160 fnt83 6260 9260(Some)m
+6636(Gr)s 5(eat)k 5418 9080(Composer)m 1(s.)k 160 fnt82
+6512 9079(Oxford,)m 5418 8899(1944.)m 240 fnt82 0 3343(A)m 229(g)s 1(alle)k 3(y)k
+861(replaces)s 1693(the)s 2039(in)s 9(v)k 4(ocation)k
+3091(pointed)s 3866(to)s 4103(by)s 4395(its)s 4670(cross)s
+5210(reference.)s 6260(If)s 6488(space)s 7073(is)s 7282(not)s
+7646(suf\207cient)s 8593(there)s 0 3055(to)m 232(hold)s 708(it)s
+892(all,)s 1230(the)s 1570(remainder)s 2590(of)s 2854(the)s
+3194(g)s 1(alle)k 3(y)k 3820(is)s 4023(split)s
+4486(of)s 6(f)k 4822(\(the)s 5242(v)s 3(ertical)k
+6001(concatenation)s 7378(symbol)s 8130(preceding)s 0 2767(it)m 199(being)s
+791(discarded\))s 1842(and)s 2253(it)s 2452(replaces)s 3293(later)s
+3783(in)s 9(v)k 4(ocations)k 4931(of)s 5209(the)s
+5564(same)s 6119(symbol.)s 6935(This)s 7418(is)s 7635(e)s 3(xactly)k
+8383(what)s 8916(is)s 0 2479(required)m 854(to)s 1093(get)s
+1445(te)s 3(xt)k 1860(and)s 2264(footnotes)s 3205(onto)s
+3684(pages.)s 480 2105(T)m 19(o)k 780(create)s 1405(a)s
+1571(g)s 1(alle)k 3(y)k 15(,)k 2243(\207rst)s
+2674(de\207ne)s 3315(a)s 3481(symbol)s 4241(with)s 4723(a)s
+4889(special)s 220 fnt35 5607 2102(into)m 240 fnt82 6013 2105(clause,)m
+6717(lik)s 2(e)k 7129(this:)s 220 fnt35 480 1604(def @F)m 6(ootNote into { @F)k 6(ootPlace&&f)k 6(ollo)k 3(wing })k
+480 1316( r)m -3(ight x)k 480 1028({)m 480 740( 8p @F)m 6(ont x)k
+480 452(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 11 17
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(1.4.)m 454(Galle)s 7(ys)k 240 fnt84
+8839 13840(11)m 240 fnt82 0 13205(An)m 343(in)s 9(v)k 4(ocation)k
+1390(of)s 1654(such)s 2142(a)s 2301(symbol)s 3054(will)s
+3473(then)s 3934(be)s 4209(a)s 4368(g)s 1(alle)k 3(y)k
+4994(whose)s 5655(object)s 6292(is)s 6495(the)s 6835(result)s
+7418(of)s 7682(the)s 8022(in)s 9(v)k 4(ocation,)k
+0 12917(and)m 399(whose)s 1062(cross)s 1598(reference)s 2536(is)s
+2740(gi)s 6(v)k 3(en)k 3315(by)s 3603(the)s
+220 fnt35 3946 12914(into)m 240 fnt82 4347 12917(clause.)m 5102(The)s
+5525(right)s 6030(parameter)s 7039(of)s 7304(the)s 7647(cross)s
+8183(reference)s 0 12629(must)m 525(be)s 807(one)s 1209(of)s
+220 fnt35 1480 12626(preceding)m 240 fnt82 2431 12629(,)m 220 fnt35
+2538 12626(f)m 6(ollo)k 3(wing)k 240 fnt82 3368 12629(,)m
+3475(and)s 220 fnt35 3879 12626(f)m 6(oll_or_prec)k 240 fnt82
+5013 12629(.)m 480 12255(A)m 700(symbol,)s 1502(lik)s 2(e)k
+220 fnt35 1903 12252(@F)m 6(ootPlace)k 3(,)k 240 fnt82
+3196 12255(which)m 3827(is)s 4027(the)s 240 fnt83 4364 12257(tar)m 8(g)k 2(et)k
+240 fnt82 4979 12255(of)m 5239(a)s 5395(g)s 1(alle)k 3(y)k 15(,)k
+6056(must)s 6571(contain)s 7321(the)s 7659(special)s 8366(symbol)s
+220 fnt35 0 11964(@Galle)m 4(y)k 240 fnt82 898 11967(e)m 3(xactly)k
+1639(once)s 2147(in)s 2390(its)s 2666(body;)s 3258(often)s
+3806(this)s 4202(is)s 4412(all)s 4705(that)s 5123(the)s
+5471(body)s 6005(contains:)s 220 fnt35 480 11466(def @F)m 6(ootPlace { @Galle)k 4(y })k
+240 fnt82 0 10968(It)m 229(is)s 464(this)s 885(special)s
+1628(symbol)s 2412(that)s 2855(is)s 3090(replaced)s 3982(by)s
+4300(the)s 4673(incoming)s 5655(g)s 1(alle)k 3(y)k 15(,)k
+6352(in)s 6619(f)s 2(act,)k 7106(not)s 7497(the)s
+220 fnt35 7870 10965(@F)m 6(ootPlace)k 240 fnt82 0 10680(symbol)m
+760(as)s 1010(a)s 1176(whole.)s 480 10306(A)m 718(symbol)s
+1487(which)s 2138(contains)s 220 fnt35 2994 10303(@Galle)m 4(y)k
+240 fnt82 3832 10306(,)m 3948(either)s 4560(directly)s 5351(within)s
+6028(its)s 6313(body)s 6855(or)s 7123(indirectly)s 8101(within)s
+8778(the)s 0 10018(body)m 533(of)s 802(a)s 966(symbol)s
+1725(it)s 1915(in)s 9(v)k 4(ok)k 2(es,)k
+2750(is)s 2959(called)s 3585(a)s 240 fnt83 3749 10020(r)m 8(eceptive)k
+240 fnt82 4668 10018(symbol,)m 5478(meaning)s 6353(recepti)s 6(v)k 3(e)k
+7274(to)s 7511(g)s 1(alle)k 3(ys.)k 220 fnt35
+8346 10015(@F)m 6(oot)k 240 fnt82 8998 10018(-)m 220 fnt35
+0 9727(Place)m 240 fnt82 630 9730(is)m 870(recepti)s 6(v)k 3(e,)k
+1873(which)s 2545(mak)s 2(es)k 220 fnt35 3235 9727(@F)m 6(ootList,)k
+4364(@F)s 6(ootSect)k 240 fnt82 5545 9730(and)m 220 fnt35
+5979 9727(@P)m 8(ageList)k 240 fnt82 7133 9730(recepti)m 6(v)k 3(e)k
+8085(since)s 8663(the)s 3(y)k 0 9442(in)m 9(v)k 4(ok)k 2(e)k
+220 fnt35 704 9439(@F)m 6(ootPlace)k 3(.)k 240 fnt82
+2078 9442(If)m 2319(no)s 2623(g)s 1(alle)k 3(y)k
+3268(replaces)s 4112(an)s 3(y)k 220 fnt35 4520 9439(@Galle)m 4(y)k
+240 fnt82 5429 9442(within)m 6108(some)s 6680(in)s 9(v)k 4(ocation)k
+7745(of)s 8027(a)s 8204(recepti)s 6(v)k 3(e)k
+0 9154(symbol,)m 816(that)s 1239(in)s 9(v)k 4(ocation)k
+2297(is)s 2512(replaced)s 3383(by)s 220 fnt35 3682 9151(@Null)m
+240 fnt82 4267 9154(.)m 4435(The)s 4868(adv)s 6(antages)k
+5980(of)s 6256(this)s 6656(rule)s 7088(for)s 7430(page)s
+7943(layout)s 8606(were)s 0 8866(e)m 3(xplained)k 985(at)s
+1217(the)s 1565(end)s 1969(of)s 2240(Section)s 3014(1.2.)s
+480 8492(Let)m 852(us)s 1109(no)s 6(w)k 1563(follo)s 6(w)k
+2228(through)s 3023(the)s 3364(construction)s 4596(of)s 4861(our)s
+5233(e)s 3(xample)k 6089(document.)s 7190(Initially)s 7992(there)s
+8518(is)s 8721(just)s 0 8204(the)m 348(one)s 240 fnt83
+750 8206(r)m 10(oot)k 240 fnt82 1203 8204(g)m 1(alle)k 3(y)k 15(,)k
+1875(containing)s 2938(an)s 3221(une)s 3(xpanded)k 4434(in)s 9(v)k 4(ocation)k
+5488(of)s 220 fnt35 5759 8201(@P)m 8(ageList:)k 180 fnt35
+3315 7732(@P)m 7(ageList)k gsave
+5746 7778 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1440 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+200 fnt83 5806 7734(to)m 6005(printer)s
+240 fnt82 0 7241(Then)m 602(the)s 200 fnt82 1004 7250(PURCELL)m
+240 fnt82 2002 7241(g)m 1(alle)k 3(y)k 2690(appears,)s
+3580(tar)s 4(geted)k 4457(to)s 4750(a)s 220 fnt35
+4969 7238(@T)m 26(e)k 6(xtPlace)k 3(.)k 240 fnt82
+6348 7241(Lout)m 6913(kno)s 6(ws)k 7638(that)s 8109(there)s
+8696(is)s 8960(a)s 220 fnt35 0 6950(@T)m 26(e)k 6(xtPlace)k
+240 fnt82 1218 6953(hidden)m 1927(inside)s 220 fnt35 2554 6950(@P)m 8(ageList,)k
+240 fnt82 3724 6953(so)m 3990(it)s 4182(e)s 3(xpands)k
+220 fnt35 5015 6950(@P)m 8(ageList:)k 160 fnt84 870 6220(PURCELL)m
+128 fnt82 1626 6292(1)m 160 fnt82 480 5928(In)m 705(the)s
+991(w)s 1(orld)k 1455(of)s 1691(music)s 480 5748(England)m
+1192(is)s 1473(supposed)s 480 5568(to)m 686(be)s 921(a)s
+1078(mere)s 1481(pro)s 2(vince.)k 480 5388(If)m 775(she)s
+1166(produces)s 1918(an)s 480 5208(indif)m 4(ferent)k 1446(composer)s
+480 5028(or)m 763(performer)s 6(,)k 1577(that)s 1967(is)s
+480 4848(re)m 2(garded)k 1172(else)s 4(where)k 1940(as)s
+480 4668(perfectly)m 1215(normal)s 1837(and)s 480 4488(natural;)m 1072(b)s 3(ut)k
+1388(if)s 1608(foreign)s 480 4308(students)m 1215(of)s 1574(musical)s
+480 4128(history)m 1286(ha)s 3(v)k 2(e)k 1947(to)s
+480 3948(ackno)m 4(wledge)k 1440(a)s 1636(British)s 480 3768(musical)m
+1105(genius,)s 1686(he)s 1967(is)s 480 3588(considered)m 1211(a)s
+1322(freak.)s 800 3355(Such)m 1267(a)s 1488(freak)s 1967(is)s
+480 3175(Henry)m 917(Purcell.)s 1480(Y)s 16(et)k 1736(if)s
+1884(we)s 480 2995(mak)m 1(e)k 875(a)s 1000(choice)s
+1467(of)s 1662(\207fteen)s 480 2815(of)m 717(the)s 1005(w)s 1(orld')k 8(s)k
+1574(musical)s 480 2635(classics,)m 1050(as)s 1228(here,)s 1586(we)s
+1820(\207nd)s 480 2455(that)m 774(we)s 1013(cannot)s 1495(omit)s
+1843(this)s 480 2275(English)m 1005(master)s 8(.)k gsave
+3434 6298 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1247 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+3315 4033 translate
+220 fnt35 1927 2494 0 2494 220 288 61 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt35
+170 2207(@T)m 19(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+160 fnt35 3315 3803(@P)m 6(ageList)k gsave
+6802 6527 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1440 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+200 fnt83 6862 6483(to)m
+7061(printer)s 240 fnt82 0 1790(After)m 586(promoting)s 1659(the)s
+2030(\207rst)s 2484(line)s 2922(into)s 220 fnt35 3370 1787(@T)m 26(e)k 6(xtPlace)k 3(,)k
+240 fnt82 4658 1790(the)m 5029(footnote)s 5905(g)s 1(alle)k 3(y)k
+6563(attached)s 7440(to)s 7702(it)s 7917(appears)s 8722(and)s
+0 1502(demands)m 938(an)s 1257(in)s 9(v)k 4(ocation)k
+2347(of)s 220 fnt35 2654 1499(@F)m 6(ootPlace)k 240 fnt82
+3946 1502(follo)m 6(wing)k 4960(its)s 5272(attachment)s 6416(point)s
+7004(\(`)s 200 fnt82 7144 1511(PURCELL)m 240 fnt82 8029 1502('\).)m
+8387(Such)s 8960(a)s 220 fnt35 0 1211(@F)m 6(ootPlace)k
+240 fnt82 1274 1214(is)m 1502(found)s 2138(at)s 2388(the)s
+2754(bottom)s 3511(of)s 3800(the)s 4166(\207rst)s 4616(page,)s
+5193(inside)s 220 fnt35 5838 1211(@F)m 6(ootSect,)k 240 fnt82
+7054 1214(which)m 7714(is)s 7943(accordingly)s 0 926(e)m 3(xpanded,)k
+1022(and)s 1426(the)s 1774(footnote)s 2627(is)s 2837(promoted)s
+3812(onto)s 4291(the)s 4639(page:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 12 18
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(12)m 240 fnt83 6965 13843(Chapter)m 7815(1.)s
+8089(Principles)s 160 fnt82 480 12579(In)m 705(the)s 991(w)s 1(orld)k
+1455(of)s 1691(music)s 480 12399(England)m 1192(is)s 1473(supposed)s
+480 12219(to)m 686(be)s 921(a)s 1078(mere)s 1481(pro)s 2(vince.)k
+480 12039(If)m 775(she)s 1166(produces)s 1918(an)s 480 11859(indif)m 4(ferent)k
+1446(composer)s 480 11679(or)m 763(performer)s 6(,)k 1577(that)s
+1967(is)s 480 11499(re)m 2(garded)k 1172(else)s 4(where)k
+1940(as)s 480 11319(perfectly)m 1215(normal)s 1837(and)s 480 11139(natural;)m
+1072(b)s 3(ut)k 1388(if)s 1608(foreign)s 480 10959(students)m
+1215(of)s 1574(musical)s 480 10779(history)m 1286(ha)s 3(v)k 2(e)k
+1947(to)s 480 10599(ackno)m 4(wledge)k 1440(a)s 1636(British)s
+480 10419(musical)m 1105(genius,)s 1686(he)s 1967(is)s 480 10239(considered)m
+1211(a)s 1322(freak.)s 800 10006(Such)m 1267(a)s 1488(freak)s
+1967(is)s 480 9826(Henry)m 917(Purcell.)s 1480(Y)s 16(et)k
+1736(if)s 1884(we)s 480 9646(mak)m 1(e)k 875(a)s
+1000(choice)s 1467(of)s 1662(\207fteen)s 480 9466(of)m 717(the)s
+1005(w)s 1(orld')k 8(s)k 1574(musical)s 480 9286(classics,)m
+1050(as)s 1228(here,)s 1586(we)s 1820(\207nd)s 480 9106(that)m
+774(we)s 1013(cannot)s 1495(omit)s 1843(this)s 480 8926(English)m
+1005(master)s 8(.)k gsave
+3434 12615 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1247 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+3315 10788 translate
+240 fnt82 1927 2494 0 2494 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt84 560 1987(PURCELL)m 128 fnt82
+1316 2059(1)m 140 fnt35 170 1807(@T)m 16(e)k 4(xtPlace)k
+gsave
+170 924 translate
+160 fnt82 567 0 0 0 160 180 40 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+128 fnt82 170 785(1)m 160 fnt82 221 713(Blom,)m 703(Eric.)s
+160 fnt83 1133 714(Some)m 170 534(Gr)m 5(eat)k 734(Composer)s 1(s.)k
+160 fnt82 170 353(Oxford,)m 703(1944.)s 140 fnt35 170 173(@F)m 4(ootList)k
+
+grestore
+140 fnt35 3315 10573(@P)m 5(ageList)k gsave
+6802 13282 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1440 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+200 fnt83 6862 13238(to)m
+7061(printer)s 240 fnt82 0 8441(No)m 6(w)k 512(the)s
+858(promotion)s 1910(of)s 2179(the)s 200 fnt82 2525 8450(PURCELL)m
+240 fnt82 3468 8441(g)m 1(alle)k 3(y)k 4100(resumes.)s
+5045(When)s 5672(the)s 6018(\207rst)s 6447(page)s 6953(is)s
+7161(\207lled,)s 7757(Lout)s 8266(searches)s 0 8153(forw)m 2(ards)k
+898(for)s 1236(another)s 220 fnt35 2013 8150(@T)m 26(e)k 6(xtPlace)k
+240 fnt82 3231 8153(to)m 3470(recei)s 6(v)k 3(e)k
+4206(the)s 4554(remainder)s 9(,)k 5620(once)s 6128(ag)s 1(ain)k
+6702(e)s 3(xpanding)k 7750(a)s 220 fnt35 7916 8150(@P)m 8(ageList:)k
+160 fnt82 480 4955(performer)m 6(,)k 1436(that)s 1967(is)s
+480 4775(re)m 2(garded)k 1172(else)s 4(where)k 1940(as)s
+480 4595(perfectly)m 1215(normal)s 1837(and)s 480 4415(natural;)m 1072(b)s 3(ut)k
+1388(if)s 1608(foreign)s 480 4235(students)m 1215(of)s 1574(musical)s
+480 4055(history)m 1286(ha)s 3(v)k 2(e)k 1947(to)s
+480 3875(ackno)m 4(wledge)k 1440(a)s 1636(British)s 480 3695(musical)m
+1105(genius,)s 1686(he)s 1967(is)s 480 3515(considered)m 1211(a)s
+1322(freak.)s 800 3282(Such)m 1267(a)s 1488(freak)s 1967(is)s
+480 3102(Henry)m 917(Purcell.)s 1480(Y)s 16(et)k 1736(if)s
+1884(we)s 480 2922(mak)m 1(e)k 875(a)s 1000(choice)s
+1467(of)s 1662(\207fteen)s 480 2742(of)m 717(the)s 1005(w)s 1(orld')k 8(s)k
+1574(musical)s 480 2562(classics,)m 1050(as)s 1228(here,)s 1586(we)s
+1820(\207nd)s 480 2382(that)m 774(we)s 1013(cannot)s 1495(omit)s
+1843(this)s 480 2202(English)m 1005(master)s 8(.)k gsave
+3434 4991 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1247 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+3315 5233 translate
+240 fnt82 1927 2494 0 2494 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+160 fnt84
+560 1987(PURCELL)m 128 fnt82 1316 2059(1)m 160 fnt82 170 1695(In)m
+341(the)s 573(w)s 1(orld)k 983(of)s 1164(music)s
+170 1515(England)m 741(is)s 881(supposed)s 1515(to)s 170 1335(be)m
+358(a)s 469(mere)s 825(pro)s 2(vince.)k 1491(If)s
+170 1155(she)m 708(produces)s 1608(an)s 170 975(indif)m 4(ferent)k
+879(composer)s 1540(or)s 567 0 0 0 160 180 40 170 763 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+128 fnt82 170 624(1)m 160 fnt82
+221 552(Blom,)m 703(Eric.)s 160 fnt83 1133 553(Some)m 170 373(Gr)m 5(eat)k
+734(Composer)s 1(s.)k 160 fnt82 170 192(Oxford,)m 703(1944.)s
+
+grestore
+gsave
+3315 2739 translate
+240 fnt82 1927 2494 0 2494 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto xsize ysize lineto
+0 ysize lineto closepath stroke
+grestore
+140 fnt35 170 2222(@T)m 16(e)k 4(xtPlace)k 170 173(@F)m 4(ootSect)k
+
+grestore
+140 fnt35 3315 2524(@P)m 5(ageList)k gsave
+6802 7727 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+240 fnt82 1440 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+240 fnt82 68 0 0 0 240 288 60 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+200 fnt83 6862 7683(to)m
+7061(printer)s 240 fnt82 0 1717(and)m 404(so)s 671(on.)s
+1076(All)s 1437(these)s 1985(e)s 3(xpansions)k 3098(and)s
+3503(replacements)s 4814(are)s 5162(done)s 5685(with)s 6168(total)s
+6648(inte)s 3(grity)k 15(.)k 7604(F)s 3(or)k
+7994(e)s 3(xample,)k 8909(if)s 0 1429(Lout)m 510(\207nds)s
+1024(after)s 1517(e)s 3(xpanding)k 220 fnt35 2563 1426(@F)m 6(ootSect)k
+240 fnt82 3711 1429(that)m 4126(the)s 4472(page)s 4977(is)s
+5184(too)s 5541(full)s 5924(to)s 6160(accept)s 6828(e)s 6(v)k 3(en)k
+7325(the)s 7670(\207rst)s 8099(line)s 8510(of)s 8778(the)s
+0 1141(footnote,)m 220 fnt35 915 1138(@F)m 6(ootSect)k 240 fnt82
+2077 1141(is)m 2298(reset)s 2819(to)s 3070(une)s 3(xpanded)k
+4294(and)s 4709(the)s 5068(search)s 5746(for)s 6096(a)s
+6273(tar)s 4(get)k 6883(for)s 7232(the)s 7591(footnote)s
+8456(mo)s 3(v)k 3(es)k 0 853(on.)m 396(And)s
+858(the)s 1197(cross)s 1730(reference)s 2664(direction,)s 220 fnt35
+3611 850(preceding)m 240 fnt82 4613 853(or)m 220 fnt35 4864 850(f)m 6(ollo)k 3(wing,)k
+240 fnt82 5799 853(is)m 6000(al)s 2(w)k 2(ays)k
+6702(obe)s 3(yed)k 7440(\(although)s 8405(lack)s 8855(of)s
+0 565(space)m 586(sometimes)s 1658(pre)s 6(v)k 3(ents)k
+2509(Lout)s 3020(from)s 3543(choosing)s 4460(the)s 4807(nearest)s
+5542(tar)s 4(get\).)k 6323(Only)s 6855(the)s 7202(root)s
+7646(g)s 1(alle)k 3(y)k 8278(contains)s 0 277(recepti)m 6(v)k 3(e)k
+922(symbols)s 1771(in)s 2014(our)s 2393(running)s 3191(e)s 3(xample,)k
+4105(b)s 4(ut)k 4467(an)s 3(y)k 4864(g)s 1(alle)k 3(y)k
+5498(may)s 5964(contain)s 6725(them.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 13 19
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+480 fnt84 0 12955(Chapter)m 1819(2.)s 2400(Details)s 240 fnt84
+0 11690(2.1.)m 471(Lexical)s 1270(structur)s 4(e)k 2263(\(w)s 2(ords,)k
+3079(spaces,)s 3844(symbols\))s 4796(and)s 5237(macr)s 4(os)k
+240 fnt82 480 11213(The)m 902(input)s 1447(to)s 1679(Lout)s
+2184(consists)s 2985(of)s 3249(a)s 3408(sequence)s 4334(of)s
+240 fnt83 4598 11215(te)m 4(xtual)k 5297(units)s 240 fnt82
+5757 11213(,)m 5857(which)s 6492(may)s 6951(be)s 7226(either)s
+240 fnt83 7822 11215(white)m 8386(spaces)s 240 fnt82 9019 11213(,)m
+240 fnt83 0 10927(identi\207er)m 2(s,)k 1047(delimiter)s 2(s,)k
+240 fnt82 2093 10925(or)m 240 fnt83 2352 10927(liter)m 3(al)k
+2992(wor)s 8(ds)k 240 fnt82 3565 10925(.)m 3729(Each)s
+4264(is)s 4474(a)s 4640(sequence)s 5573(of)s 240 fnt83
+5844 10927(c)m 3(har)k 3(acter)k 2(s)k 240 fnt82
+6914 10925(chosen)m 7636(from:)s 480 10387(letter)m 220 fnt35 1934 10384(@ab-zAB-Z_)m
+240 fnt82 480 10099(white)m 1067(space)s 240 fnt83 1934 10101(space)m
+2592(formfeed)s 3568(tab)s 3988(ne)s 3(wline)k 240 fnt82
+480 9811(quote)m 220 fnt35 1934 9808(")m 240 fnt82 480 9523(escape)m
+220 fnt35 1934 9520(\\)m 240 fnt82 480 9235(comment)m 220 fnt35
+1934 9232(#)m 240 fnt82 480 8947(other)m 220 fnt35 1934 8944(!$%&'\(\)*+,-./0123456789:;<=>?[]^`{|}~)m
+240 fnt82 0 8406(Notice)m 732(that)s 220 fnt35 1189 8403(@)m
+240 fnt82 1480 8406(and)m 220 fnt35 1923 8403(_)m 240 fnt82
+2144 8406(are)m 2531(classed)s 3318(as)s 3608(letters.)s 4393(Basser)s
+5129(Lout)s 5681(accepts)s 6474(the)s 6861(accented)s 7795(letters)s
+8467(of)s 8778(the)s 0 8118(ISO-LA)m 26(TIN-1)k 1421(character)s
+2388(set)s 2746(\(depending)s 3909(on)s 4238(ho)s 6(w)k
+4732(it)s 4957(is)s 5200(installed\),)s 6228(and)s 6664(these)s
+7244(are)s 7624(also)s 8095(classed)s 8876(as)s 0 7830(letters.)m
+756(The)s 1195(ten)s 1555(digits)s 2148(are)s 2505(classed)s
+3264(as)s 3525(`other')s 4218(characters,)s 5302(and)s 5717(in)s
+5971(f)s 2(act)k 6397(the)s 6755(`other')s 7448(class)s
+7974(contains)s 8833(all)s 0 7542(8-bit)m 511(characters)s 1529(\(e)s 3(xcept)k
+2289(octal)s 2808(0\))s 3056(not)s 3422(assigned)s 4304(to)s
+4543(pre)s 6(vious)k 5412(classes.)s 480 7168(A)m 240 fnt83
+698 7170(white)m 1256(space)s 240 fnt82 1841 7168(is)m 2038(a)s
+2191(sequence)s 3111(of)s 3369(one)s 3758(or)s 4005(more)s
+4539(white)s 5113(space)s 5687(characters.)s 6805(Lout)s 7304(treats)s
+7858(the)s 8193(formfeed)s 0 6880(character)m 931(e)s 3(xactly)k
+1668(lik)s 2(e)k 2076(the)s 2420(space)s 3003(character;)s
+3985(it)s 4173(is)s 4379(useful)s 5014(for)s 5348(getting)s
+6061(page)s 6565(breaks)s 7236(when)s 7808(printing)s 8614(Lout)s
+0 6592(source)m 680(code.)s 480 6218(A)m 240 fnt83 709 6220(delimiter)m
+240 fnt82 1635 6218(is)m 1844(a)s 2009(sequence)s 2941(of)s
+3211(one)s 3612(or)s 3870(more)s 4415(`other')s 5096(characters)s
+6113(which)s 6754(is)s 6963(the)s 7310(name)s 7883(of)s
+8153(a)s 8317(symbol.)s 0 5930(F)m 3(or)k 417(e)s 3(xample,)k
+220 fnt35 1360 5927({)m 240 fnt82 1512 5930(and)m 220 fnt35
+1945 5927(//)m 240 fnt82 2159 5930(are)m 2534(delimiters.)s 3681(When)s
+4338(de\207ning)s 5205(a)s 5400(delimiter)s 9(,)k 6387(the)s
+6764(name)s 7366(must)s 7920(be)s 8231(enclosed)s 0 5642(in)m
+243(quotes:)s 220 fnt35 480 5143(def "^" { {} ^& {} })m 240 fnt82 0 4649(b)m 4(ut)k
+361(quotes)s 1036(are)s 1381(not)s 1746(used)s 2242(when)s
+2816(the)s 3163(delimiter)s 4082(is)s 4291(in)s 9(v)k 4(ok)k 2(ed.)k
+5211(A)s 5439(delimiter)s 6359(may)s 6824(ha)s 4(v)k 3(e)k
+7323(delimiters)s 8327(and)s 8729(an)s 3(y)k 0 4361(other)m
+558(characters)s 1584(adjacent,)s 2495(whereas)s 3337(identi\207ers)s 4351(may)s
+4825(not)s 5199(be)s 5489(adjacent)s 6353(to)s 6600(letters)s
+7241(or)s 7508(other)s 8067(identi\207ers.)s 0 4073(The)m 428(complete)s
+1360(list)s 1711(of)s 1982(prede\207ned)s 3050(delimiters)s 4055(is)s
+220 fnt35 480 3572(/)m 480 3284(//)m 480 2996(^/)m 480 2708(^//)m
+1727 3572(|)m 1727 3284(||)m 1727 2996(^|)m 1727 2708(^||)m 2974 3572(&)m
+2974 3284(^&)m 4221 3572(&&)m 4221 3284({)m 4221 2996(})m 240 fnt82
+0 2253(A)m 230(longer)s 901(delimiter)s 1822(lik)s 2(e)k
+220 fnt35 2234 2250(<=)m 240 fnt82 2542 2253(will)m 2968(be)s
+3250(recognised)s 4344(in)s 4587(preference)s 5650(to)s 5889(a)s
+6055(shorter)s 6778(one)s 7180(lik)s 2(e)k 220 fnt35
+7592 2250(<)m 240 fnt82 7710 2253(.)m 480 1879(An)m 240 fnt83
+855 1881(identi\207er)m 240 fnt82 1808 1879(is)m 2043(a)s 2234(sequence)s
+3192(of)s 3488(one)s 3915(or)s 4199(more)s 4772(letters)s
+5430(which)s 6097(is)s 6332(the)s 6705(name)s 7304(of)s
+7600(a)s 7791(symbol.)s 8685(It)s 8916(is)s 0 1591(con)m 9(v)k 3(entional)k
+1308(b)s 4(ut)k 1700(not)s 2096(essential)s 3003(to)s
+3272(be)s 3(gin)k 3888(identi\207ers)s 4924(with)s 220 fnt35
+5436 1588(@)m 240 fnt82 5627 1591(;)m 5829(Basser)s 6556(Lout)s
+7098(will)s 7554(print)s 8095(a)s 8291(w)s 2(arning)k
+0 1303(message)m 865(if)s 1081(it)s 1272(\207nds)s 1788(an)s
+2070(unquoted)s 3019(literal)s 3628(w)s 2(ord)k 4175(\(see)s
+4614(belo)s 6(w\))k 5320(be)s 3(ginning)k 6327(with)s
+220 fnt35 6808 1300(@)m 240 fnt82 6999 1303(,)m 7105(since)s
+7651(such)s 8146(w)s 2(ords)k 8779(are)s 0 1015(usually)m
+748(misspelt)s 1608(identi\207ers.)s 2730(The)s 3162(ten)s 3515(digits)s
+4100(are)s 4451(not)s 4820(letters)s 5457(and)s 5865(may)s
+6334(not)s 6704(appear)s 7404(in)s 7651(identi\207ers;)s 8722(and)s
+192 fnt84 4440 2(13)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 14 20
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(14)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(although)m 890(the)s 1233(underscore)s
+2333(character)s 3262(is)s 3467(a)s 3628(letter)s 4172(and)s
+4570(may)s 5031(be)s 5308(used)s 5800(in)s 6038(identi\207ers,)s
+7095(it)s 7282(is)s 7487(not)s 7847(con)s 9(v)k 3(entional)k
+0 12917(to)m 239(do)s 532(so.)s 909(The)s 1337(complete)s
+2269(list)s 2620(of)s 2891(prede\207ned)s 3959(identi\207ers)s 4965(is)s
+220 fnt35 480 12416(@Bac)m 4(kEnd)k 480 12128(@Bac)m 4(kg)k 2(round)k
+480 11840(@Begin)m 480 11552(@BeginHeaderComponent)m 480 11264(@Break)m 480 10976(@Case)m 480 10688(@ClearHeaderComponent)m
+480 10400(@Common)m 480 10112(@Char)m 480 9824(@CurrF)m 11(ace)k 480 9536(@CurrF)m 11(amily)k
+480 9248(@CurrLang)m 480 8960(@CurrYUnit)m 480 8672(@CurrZUnit)m 480 8384(@Database)m 480 8096(@End)m
+480 7808(@EndHeaderComponent)m 480 7520(@Enclose)m 480 7232(@Filter)m 480 6944(@FilterErr)m 480 6656(@FilterIn)m
+480 6368(@FilterOut)m 480 6080(@F)m 6(ont)k 480 5792(@F)m 6(orceGalle)k 4(y)k
+480 5504(@Galle)m 4(y)k 480 5216(@Gr)m 2(aphic)k 480 4928(@HAdjust)m
+480 4640(@HContr)m 2(act)k 480 4352(@HCo)m 3(v)k 5(er)k
+480 4064(@HExpand)m 480 3776(@High)m 480 3488(@HLimited)m 480 3200(@HScale)m 3361 12416(@HShift)m
+3361 12128(@HSpan)m 3361 11840(@Include)m 3361 11552(@IncludeGr)m 2(aphic)k 3361 11264(@Inser)m -8(t)k
+3361 10976(@K)m 8(er)k -5(nShr)k -3(ink)k 3361 10688(@K)m 8(e)k 4(y)k
+3361 10400(@Language)m 3361 10112(@LClos)m 3361 9824(@LEn)m 4(v)k 3361 9536(@LInput)m
+3361 9248(@L)m 24(Vis)k 3361 8960(@LUse)m 3361 8672(@Meld)m 3361 8384(@Merge)m
+3361 8096(@Min)m 2(us)k 3361 7808(@Moment)m 3361 7520(@Ne)m 6(xt)k
+3361 7232(@NotRe)m 6(v)k 5(ealed)k 3361 6944(@Null)m 3361 6656(@OneCol)m
+3361 6368(@OneOf)m 3361 6080(@OneRo)m 3(w)k 3361 5792(@Open)m 3361 5504(@Optimiz)m 3(e)k
+3361 5216(@Outline)m 3361 4928(@P)m 26(Adjust)k 3361 4640(@P)m 8(ageLabel)k
+3361 4352(@PlainGr)m 2(aphic)k 3361 4064(@Plus)m 3361 3776(@PrependGr)m 2(aphic)k
+3361 3488(@Ra)m 4(wV)k 17(erbatim)k 5855 12416(@Rotate)m 5855 12128(@Rump)m
+5855 11840(@Scale)m 5855 11552(@SetColor)m 5855 11264(@SetColour)m 5855 10976(@SetHeaderComponent)m 5855 10688(@Space)m
+5855 10400(@Star)m -8(tHSpan)k 5855 10112(@Star)m -8(tHVSpan)k 5855 9824(@Star)m -8(tVSpan)k
+5855 9536(@SysDatabase)m 5855 9248(@SysInclude)m 5855 8960(@SysIncludeGr)m 2(aphic)k 5855 8672(@SysPrependGr)m 2(aphic)k
+5855 8384(@T)m 26(ag)k 5855 8096(@T)m 26(agged)k 5855 7808(@T)m 26(arget)k
+5855 7520(@Under)m -3(line)k 5855 7232(@Use)m 5855 6944(@V)m 17(Adjust)k
+5855 6656(@VContr)m 2(act)k 5855 6368(@VCo)m 3(v)k 5(er)k
+5855 6080(@V)m 17(erbatim)k 5855 5792(@VExpand)m 5855 5504(@VLimited)m 5855 5216(@VScale)m
+5855 4928(@VShift)m 5855 4640(@VSpan)m 5855 4352(@Wide)m 5855 4064(@Y)m 4(ield)k
+5855 3776(@YUnit)m 5855 3488(@ZUnit)m 240 fnt82 0 2745(plus)m 498(the)s
+894(names)s 1605(of)s 1924(the)s 2321(parameters)s 3467(of)s
+220 fnt35 3786 2742(@Moment)m 240 fnt82 4798 2745(.)m 5011(The)s
+5487(symbols)s 220 fnt35 6385 2742(@LClos)m 240 fnt82 7161 2745(,)m
+220 fnt35 7316 2742(@LEn)m 4(v)k 240 fnt82 8034 2745(,)m
+220 fnt35 8190 2742(@LInput)m 240 fnt82 9019 2745(,)m 220 fnt35
+0 2454(@L)m 24(Vis)k 240 fnt82 722 2457(and)m 220 fnt35
+1170 2454(@LUse)m 240 fnt82 2001 2457(appear)m 2742(in)s 3029(cross)s
+3615(reference)s 4602(databases)s 5613(generated)s 6644(by)s 6982(Lout)s
+7538(and)s 7986(are)s 8377(not)s 8788(for)s 0 2169(use)m
+375(else)s 6(where.)k 480 1795(A)m 728(sequence)s 1679(of)s
+1968(characters)s 3004(which)s 3664(is)s 3892(neither)s 4633(a)s
+4817(white)s 5422(space,)s 6078(an)s 6379(identi\207er)s 9(,)k
+7357(nor)s 7754(a)s 7938(delimiter)s 9(,)k 8916(is)s
+0 1507(by)m 304(def)s 2(ault)k 1036(a)s 240 fnt83
+1213 1509(liter)m 3(al)k 1864(wor)s 8(d)k 240 fnt82
+2355 1507(,)m 2473(which)s 3126(means)s 3799(that)s 4227(it)s
+4430(will)s 4867(pass)s 5341(through)s 6154(Lout)s 6677(unchanged.)s
+7890(An)s 8251(arbitrary)s 0 1219(sequence)m 926(of)s 1190(characters)s
+2201(enclosed)s 3089(in)s 3325(double)s 4026(quotes,)s 4751(for)s
+5082(e)s 3(xample)k 220 fnt35 5938 1216("{ }",)m 240 fnt82
+6457 1219(is)m 6660(also)s 7091(a)s 7250(literal)s 7853(w)s 2(ord.)k
+8499(Space)s 0 931(characters)m 1005(may)s 1458(be)s 1726(included,)s
+2644(b)s 4(ut)k 2992(not)s 3345(tabs)s 3767(or)s
+4013(ne)s 6(wlines.)k 5008(There)s 5607(are)s 5941(special)s
+6645(character)s 7566(sequences,)s 8629(used)s 0 643(only)m 480(between)s
+1334(quotes,)s 2066(for)s 2404(obtaining)s 3361(otherwise)s 4346(inaccessible)s
+5556(characters:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 15 21
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(2.1.)m 454(Le)s 4(xical)k 1213(structur)s 8(e)k
+2121(\(wor)s 8(ds,)k 2871(spaces,)s 3602(symbols\))s 4502(and)s
+4928(macr)s 10(os)k 240 fnt84 8833 13840(15)m 220 fnt35
+480 13167(\\")m 240 fnt82 1235 13170(produces)m 220 fnt35 2150 13167(")m
+480 12879(\\\\)m 240 fnt82 1235 12882(\\)m 220 fnt35 480 12591(\\ddd)m
+240 fnt82 1235 12594(the)m 1583(character)s 2517(whose)s 3185(ASCII)s
+3865(code)s 4373(is)s 1235 12306(the)m 1583(up)s 1876(to)s
+2115(three)s 2648(digit)s 3146(octal)s 3665(number)s 220 fnt35
+4456 12303(ddd)m 240 fnt82 0 11765(So,)m 360(for)s 698(e)s 3(xample,)k
+220 fnt35 1612 11762("\\"@PP\\"")m 240 fnt82 2606 11765(produces)m 220 fnt35
+3521 11762("@PP")m 240 fnt82 4177 11765(.)m 480 11391(When)m 1106(the)s
+1451(comment)s 2398(character)s 220 fnt35 3328 11388(#)m 240 fnt82
+3502 11391(is)m 3709(encountered,)s 4982(e)s 6(v)k 3(erything)k
+6045(from)s 6566(that)s 6981(point)s 7530(to)s 7765(the)s
+8110(end)s 8511(of)s 8778(the)s 0 11103(line)m 414(is)s
+624(ignored.)s 1519(This)s 1995(is)s 2205(useful)s 2844(for)s
+3182(including)s 4139(reminders)s 5145(to)s 5384(oneself,)s 6181(lik)s 2(e)k
+6593(this:)s 220 fnt35 480 10606(# Lout user man)m 2(ual)k 480 10318(# J)m 6(.)k 13( Kingston, J)k 4(une 1989)k
+240 fnt82 0 9819(for)m 338(temporarily)s 1506(deleting)s 2329(parts)s
+2844(of)s 3115(the)s 3463(document,)s 4514(and)s 4918(so)s
+5184(on.)s 240 fnt83 480 9447(Macr)m 10(os)k 240 fnt82
+1268 9445(pro)m 3(vide)k 2064(a)s 2242(means)s 2916(of)s
+3199(de\207ning)s 4049(symbols)s 4910(which)s 5564(stand)s 6139(for)s
+6489(a)s 6667(sequence)s 7612(of)s 7895(te)s 3(xtual)k
+8610(units)s 0 9157(rather)m 616(than)s 1085(an)s 1368(object.)s
+2116(F)s 3(or)k 2505(e)s 3(xample,)k 3419(the)s
+3767(macro)s 4417(de\207nition)s 220 fnt35 480 8656(macro @PP { //1.3vx 2.0f @Wide &0i })m 240 fnt82
+0 8162(mak)m 2(es)k 663(Lout)s 1178(replace)s 1926(the)s
+2277(symbol)s 220 fnt35 3040 8159(@PP)m 240 fnt82 3609 8162(by)m
+3906(the)s 4258(gi)s 6(v)k 3(en)k 4841(te)s 3(xtual)k
+5546(units)s 6065(before)s 6734(assembling)s 7866(its)s 8145(input)s
+8701(into)s 0 7874(objects.)m 841(A)s 1071(similar)s 1793(macro)s
+2443(to)s 2682(this)s 3077(one)s 3479(is)s 3689(used)s
+4186(to)s 4425(separate)s 5262(the)s 5610(paragraphs)s 6710(of)s
+6981(the)s 7329(present)s 8078(document.)s 0 7586(The)m 450(enclosing)s
+1442(braces)s 2126(and)s 2552(an)s 3(y)k 2972(spaces)s
+3669(adjacent)s 4548(to)s 4809(them)s 5370(are)s 5739(dropped,)s
+6654(which)s 7318(can)s 7730(be)s 8034(a)s 8223(problem:)s
+220 fnt35 0 7295(@PP2i)m 240 fnt82 731 7298(has)m 1101(result)s
+220 fnt35 1691 7295(//1.3vx 2.0f @Wide &0i2i)m 240 fnt82 4141 7298(which)m 4783(is)s
+4993(erroneous.)s 480 6924(The)m 938(meaning)s 1846(of)s 2148(symbols)s
+3028(used)s 3556(within)s 4254(the)s 4633(body)s 5198(of)s
+5500(a)s 5697(macro)s 6377(is)s 6618(determined)s 7782(by)s
+8107(where)s 8778(the)s 0 6636(macro)m 667(is)s 895(de\207ned,)s
+1724(not)s 2108(by)s 2419(where)s 3077(it)s 3287(is)s
+3514(used.)s 4135(Due)s 4607(to)s 4864(implementation)s 6438(problems,)s
+220 fnt35 7453 6633(@Open)m 240 fnt82 8277 6636(symbols)m 0 6348(will)m
+423(not)s 786(w)s 2(ork)k 1333(within)s 1998(macros.)s
+2849(Named)s 3594(and)s 3995(body)s 4525(parameters)s 5620(will)s
+6043(w)s 2(ork)k 6590(if)s 6804(the)s 7149(symbol)s
+7905(that)s 8320(the)s 3(y)k 8779(are)s 0 6060(parameters)m
+1090(of)s 1352(is)s 1553(also)s 1983(present.)s 2828(There)s
+3432(is)s 3633(no)s 3918(w)s 2(ay)k 4360(to)s
+4590(get)s 4934(a)s 5091(left)s 5459(or)s 5709(right)s
+6212(brace)s 6776(into)s 7192(the)s 7532(body)s 8057(of)s
+8319(a)s 8476(macro)s 0 5772(without)m 791(the)s 1139(matching)s
+2082(brace.)s 480 5398(Macros)m 1253(may)s 1724(be)s 2011(nested)s
+2685(within)s 3358(other)s 3914(de\207nitions)s 4980(and)s 5389(e)s 3(xported,)k
+6335(b)s 4(ut)k 6702(the)s 3(y)k 7170(may)s
+7641(not)s 8012(be)s 8299(parame)s 8998(-)s 0 5110(ters.)m
+511(The)s 3(y)k 1058(may)s 1528(not)s 1898(ha)s 4(v)k 3(e)k
+2403(parameters)s 3504(or)s 3767(nested)s 4440(de\207nitions)s 5505(of)s
+5780(their)s 6280(o)s 6(wn,)k 6798(and)s 7206(consequently)s
+8527(a)s 8697(pre)s 8998(-)s 0 4822(ceding)m 220 fnt35
+691 4819(e)m 6(xpor)k -8(t)k 240 fnt82 1359 4822(clause)m
+2012(\(Section)s 2865(2.3\))s 3293(w)s 2(ould)k 3948(be)s
+4230(pointless;)s 5192(ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+6099(an)s 220 fnt35 6382 4819(impor)m -8(t)k 240 fnt82
+7055 4822(clause)m 7708(is)s 7918(permitted.)s 240 fnt84 0 4030(2.2.)m
+471(Named)s 1257(parameters)s 240 fnt82 480 3553(In)m 728(addition)s
+1560(to)s 1790(left)s 2159(and)s 2554(right)s 3056(\(or)s
+3386(body\))s 3985(parameters,)s 5130(a)s 5288(symbol)s 6039(may)s
+6496(ha)s 4(v)k 3(e)k 6989(an)s 3(y)k
+7377(number)s 8159(of)s 240 fnt83 8421 3555(named)m 0 3267(par)m 3(ameter)k 2(s)k
+240 fnt82 1080 3265(:)m 220 fnt35 480 2768(def @Chapter)m 480 2480( named @T)m 26(ag {})k
+480 2192( named @Title {})m 480 1904( r)m -3(ight x)k 480 1616({)m 480 1328( ...)m
+480 1040(})m 240 fnt82 0 546(Their)m 577(de\207nitions)s 1639(appear)s
+2336(in)s 2580(between)s 3434(those)s 3996(of)s 4267(an)s 3(y)k
+4665(left)s 5042(and)s 5447(right)s 5958(parameters,)s 7113(and)s
+7517(each)s 8013(is)s 8224(follo)s 6(wed)k 0 258(by)m
+293(a)s 240 fnt83 457 260(default)m 1183(value)s 240 fnt82
+1753 258(between)m 2605(braces.)s 3377(When)s 220 fnt35 4004 255(@Chapter)m
+240 fnt82 5066 258(is)m 5274(in)s 9(v)k 4(ok)k 2(ed,)k
+6136(its)s 6411(named)s 7105(parameters)s 8201(are)s 8546(gi)s 6(v)k 3(en)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 16 22
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(16)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(v)m 6(alues)k 656(in)s
+899(the)s 1247(follo)s 6(wing)k 2224(w)s 2(ay:)k
+220 fnt35 480 12704(@Chapter)m 480 12416( @T)m 26(ag { intro })k 480 12128( @Title { Introduction })m
+480 11840({)m 480 11552( ...)m 480 11264(})m 240 fnt82 0 10770(That)m
+485(is,)s 737(a)s 889(list)s 1226(of)s 1483(named)s
+2166(parameters)s 3250(appears)s 4017(immediately)s 5251(follo)s 6(wing)k
+6214(the)s 6549(symbol,)s 7347(each)s 7828(with)s 8296(its)s
+8558(v)s 6(alue)k 0 10482(enclosed)m 900(in)s 1149(braces.)s
+1929(An)s 3(y)k 2399(right)s 2916(parameter)s 3936(follo)s 6(ws)k
+4704(after)s 5206(them.)s 5854(The)s 3(y)k 6403(do)s
+6702(not)s 7074(ha)s 4(v)k 3(e)k 7581(to)s
+7826(appear)s 8529(in)s 8778(the)s 0 10194(order)m 558(the)s 3(y)k
+1015(were)s 1529(de\207ned,)s 2334(and)s 2732(the)s 3(y)k
+3189(can)s 3571(e)s 6(v)k 3(en)k 4065(be)s
+4341(omitted)s 5122(altogether)s 9(,)k 6169(in)s 6406(which)s
+7041(case)s 7502(the)s 7844(def)s 2(ault)k 8558(v)s 6(alue)k
+0 9906(from)m 524(the)s 872(de\207nition)s 1846(is)s 2056(used)s
+2553(instead.)s 480 9532(If)m 699(the)s 1036(k)s 2(e)k 3(yw)k 2(ord)k
+220 fnt35 1913 9529(compulsor)m -6(y)k 240 fnt82 3088 9532(appears)m
+3858(after)s 220 fnt35 4342 9529(named)m 240 fnt82 5050 9532(and)m
+5442(before)s 6097(the)s 6434(parameter')s 13(s)k 7586(name,)s
+8200(Lout)s 8700(will)s 0 9244(print)m 501(a)s 657(w)s 2(arning)k
+1481(message)s 2337(whene)s 6(v)k 3(er)k 3307(this)s
+3693(parameter)s 4696(is)s 4896(missing.)s 5793(Ho)s 6(we)k 6(v)k 3(er)k
+6705(it)s 6886(will)s 7302(still)s 7703(use)s 8068(the)s
+8405(def)s 2(ault)k 0 8956(v)m 6(alue)k 568(as)s
+818(just)s 1223(described.)s 480 8582(A)m 719(named)s 220 fnt35
+1424 8579(@T)m 26(ag)k 240 fnt82 2057 8582(parameter)m 3080(does)s
+3580(not)s 3955(tak)s 2(e)k 4417(its)s 4702(def)s 2(ault)k
+5433(v)s 6(alue)k 6010(from)s 6544(the)s 6901(de\207nition;)s
+7940(instead,)s 8733(if)s 8960(a)s 0 8294(def)m 2(ault)k
+726(v)s 6(alue)k 1300(is)s 1516(needed,)s 2306(Lout)s
+2824(in)s 9(v)k 3(ents)k 3560(a)s 3731(simple)s
+4430(w)s 2(ord)k 4984(which)s 5631(dif)s 6(fers)k
+6304(from)s 6834(e)s 6(v)k 3(ery)k 7415(other)s
+7972(tag.)s 8434(This)s 8916(is)s 0 8006(important,)m 1034(for)s
+1370(e)s 3(xample,)k 2282(in)s 2523(the)s 2868(production)s
+3960(of)s 4229(numbered)s 5242(chapters)s 6086(and)s 6488(sections)s
+7307(\(Section)s 8158(4.4\).)s 8698(The)s 0 7718(same)m 551(thing)s
+1101(occurs)s 1781(if)s 2003(there)s 2541(is)s 2756(a)s
+220 fnt35 2927 7715(@T)m 26(ag)k 240 fnt82 3555 7718(parameter)m
+4574(b)s 4(ut)k 4940(its)s 5221(v)s 6(alue)k
+5794(is)s 6009(the)s 6362(empty)s 7019(object:)s 7774(the)s
+8127(v)s 6(alue)k 8700(will)s 0 7430(be)m 282(replaced)s
+1149(by)s 1443(an)s 1726(in)s 9(v)k 3(ented)k
+2596(one.)s 480 7056(Named)m 1229(parameters)s 2327(may)s 2793(ha)s 4(v)k 3(e)k
+3294(parameters,)s 4448(as)s 4698(in)s 4941(the)s 5289(follo)s 6(wing)k
+6266(de\207nition:)s 220 fnt35 480 6555(def @Str)m 2(ange)k 480 6267( named @F)m 6(or)k -5(mat r)k -3(ight @V)k 15(al { [@V)k 15(al] })k
+480 5979( r)m -3(ight x)k 480 5691({)m 480 5403( @F)m 6(or)k -5(mat x)k
+480 5115(})m 240 fnt82 0 4621(The)m 428(named)s 1125(parameter)s
+220 fnt35 2139 4618(@F)m 6(or)k -5(mat)k 240 fnt82
+3113 4621(has)m 3483(right)s 3995(parameter)s 220 fnt35 5010 4618(@V)m 15(al)k
+240 fnt82 5520 4621(,)m 5627(and)s 6032(the)s 6380(def)s 2(ault)k
+7102(v)s 6(alue)k 7670(of)s 220 fnt35 7942 4618(@F)m 6(or)k -5(mat)k
+240 fnt82 8916 4621(is)m 0 4333(this)m 394(parameter)s 1406(enclosed)s
+2299(in)s 2539(brack)s 2(ets.)k 3495(When)s 220 fnt35
+4122 4330(@F)m 6(or)k -5(mat)k 240 fnt82 5093 4333(is)m
+5300(in)s 9(v)k 4(ok)k 2(ed)k 6113(it)s
+6303(must)s 6826(be)s 7105(supplied)s 7972(with)s 8452(a)s
+8615(right)s 0 4045(parameter)m 9(,)k 1052(which)s 1694(will)s
+2120(replace)s 220 fnt35 2865 4042(@V)m 15(al)k 240 fnt82
+3375 4045(.)m 3539(Thus,)s 220 fnt35 480 3544(@Str)m 2(ange 27)k
+240 fnt82 0 3045(equals)m 220 fnt35 662 3042(@F)m 6(or)k -5(mat 27)k
+240 fnt82 1937 3045(and)m 2341(so)s 2607(has)s 2977(result)s
+480 2543([27])m 0 2055(The)m 220 fnt35 428 2052(@F)m 6(or)k -5(mat)k
+240 fnt82 1401 2055(symbol)m 2161(is)s 2371(lik)s 2(e)k
+2783(a)s 2949(de\207nition)s 3923(with)s 4405(parameters)s 5503(whose)s
+6171(body)s 6705(can)s 7094(be)s 7376(changed:)s 220 fnt35
+480 1554(@Str)m 2(ange)k 480 1266( @F)m 6(or)k -5(mat { Slope @F)k 6(ont @V)k 15(al.)k 13( })k
+480 978(27)m 240 fnt82 0 527(still)m 412(equals)s 220 fnt35
+1074 524(@F)m 6(or)k -5(mat 27)k 240 fnt82 2289 527(,)m
+2396(b)s 4(ut)k 2758(this)s 3154(time)s 3634(the)s
+3982(result)s 4572(is)s 240 fnt83 480 26(27.)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 17 23
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(2.2.)m 454(Named)s 1199(par)s 3(ameter)k 2(s)k
+240 fnt84 8831 13840(17)m 240 fnt82 0 13205(In)m 252(practice,)s
+1110(e)s 3(xamples)k 2057(of)s 2323(named)s 3015(parameters)s
+4109(with)s 4586(parameters)s 5680(all)s 5969(ha)s 4(v)k 3(e)k
+6466(this)s 6857(\210a)s 4(v)k 4(our)k 7583(of)s
+7850(format)s 8541(being)s 0 12917(separated)m 996(from)s 1556(content;)s
+2409(running)s 3243(headers)s 4060(\(Section)s 4950(4.3\))s 5414(and)s
+5854(printing)s 6701(styles)s 7332(for)s 7707(bibliographies)s 0 12629(\(Section)m
+853(4.5\))s 1281(are)s 1628(tw)s 2(o)k 2038(major)s
+2655(ones.)s 240 fnt84 0 11836(2.3.)m 471(Nested)s 1216(de\207nitions,)s
+2392(body)s 2954(parameters,)s 4236(extend,)s 5027(import,)s 5844(and)s
+6285(export)s 240 fnt82 480 11359(A)m 710(de\207nition)s 1684(may)s
+2150(contain)s 2911(other)s 3462(de\207nitions)s 4523(at)s 4755(the)s
+5103(be)s 3(ginning)k 6111(of)s 6382(its)s 6658(body:)s
+220 fnt35 480 10858(def @NineSquare)m 480 10570( r)m -3(ight x)k 480 10282({)m
+480 9994( def @Three { x |0.2i x |0.2i x })m 480 9418( @Three /0.2i @Three /0.2i @Three)m 480 9130(})m 240 fnt82 0 8636(A)m
+227(parameter)s 1238(lik)s 2(e)k 220 fnt35 1646 8633(x)m
+240 fnt82 1811 8636(may)m 2274(be)s 2552(in)s 9(v)k 4(ok)k 2(ed)k
+3364(an)s 3(ywhere)k 4343(within)s 5008(the)s 5353(body)s
+5883(of)s 6151(the)s 6495(symbol)s 7252(it)s 7441(is)s
+7647(a)s 7810(parameter)s 8820(of,)s 0 8348(including)m 973(within)s
+1657(nested)s 2342(de\207nitions.)s 3532(A)s 3778(nested)s 4463(symbol)s
+5239(lik)s 2(e)k 220 fnt35 5667 8345(@Three)m 240 fnt82
+6531 8348(may)m 7013(be)s 7311(in)s 9(v)k 4(ok)k 2(ed)k
+8143(an)s 3(ywhere)k 0 8060(from)m 518(the)s 860(be)s 3(ginning)k
+1862(of)s 2127(its)s 2397(o)s 6(wn)k 2855(body)s
+3383(to)s 3616(the)s 3958(end)s 4355(of)s 4620(the)s
+4962(body)s 5490(of)s 5755(the)s 6097(symbol)s 6851(it)s
+7037(is)s 7241(de\207ned)s 7998(within.)s 8766(So,)s 0 7772(assuming)m
+957(an)s 1240(appropriate)s 2384(de\207nition)s 3358(of)s 220 fnt35
+3629 7769(@Bo)m 6(x)k 240 fnt82 4222 7772(,)m 220 fnt35
+480 7271(@NineSquare @Bo)m 6(x)k 240 fnt82 0 6775(has)m 370(result)s
+2796 2796 226 2570 240 288 60 480 3689 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+740 740 226 514 240 288 60 0 2056 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 1028 2056 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 2056 2056 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 0 1028 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 1028 1028 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 2056 1028 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 1028 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+740 740 226 514 240 288 60 2056 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+end end restore
+grestore
+0 3238(Nested)m 722(de\207nitions)s 1783(may)s 2249(themselv)s 3(es)k
+3359(contain)s 4120(nested)s 4789(de\207nitions,)s 5906(to)s 6145(arbitrary)s
+7020(depth.)s 480 2864(There)m 1100(are)s 1454(three)s 1994(special)s
+2719(features)s 3532(which)s 4181(permit)s 4872(a)s 5045(nested)s
+5721(symbol)s 6488(or)s 6754(parameter)s 7775(to)s 8021(be)s
+8311(in)s 9(v)k 4(ok)k 2(ed)k 0 2576(outside)m
+737(its)s 1003(normal)s 1725(range;)s 2358(that)s 2766(is,)s
+3022(outside)s 3759(the)s 4096(body)s 4620(of)s 4881(the)s
+5219(enclosing)s 6179(symbol.)s 7038(The)s 7456(\207rst)s 7877(and)s
+8270(simplest)s 0 2288(of)m 267(these)s 810(features)s 1611(is)s
+1817(the)s 240 fnt83 2161 2290(body)m 2678(par)s 3(ameter)k
+240 fnt82 3677 2288(,)m 3780(an)s 4059(alternati)s 6(v)k 3(e)k
+5108(form)s 5628(of)s 5895(right)s 6401(parameter)s 13(.)k
+7502(The)s 7926(Eq)s 8245(equation)s 0 2000(formatting)m 1052(package)s
+1883([4)s 2076(,)s 2174(Chapter)s 2982(7])s 3211(is)s
+3412(a)s 3569(classic)s 4249(e)s 3(xample)k 5102(of)s
+5364(the)s 5703(use)s 6069(of)s 6331(a)s 6488(body)s
+7013(parameter)s 13(.)k 8109(In)s 8355(outline,)s 0 1712(it)m
+192(looks)s 762(lik)s 2(e)k 1174(this:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 18 24
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(18)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 220 fnt35 480 13211(e)m 6(xpor)k -8(t "+" sup o)k 3(v)k 5(er)k
+480 12635(def @Eq)m 480 12347( body x)m 480 12059({)m 480 11771( def "+" ...)m 480 11483( def sup ...)m
+480 11195( def o)m 3(v)k 5(er ...)k 480 10907( ...)m 480 10331( Slope @F)m 6(ont x)k
+480 10043(})m 240 fnt82 0 9549(First)m 518(we)s 874(list)s
+1246(those)s 1828(nested)s 2518(symbols)s 3388(and)s 3813(parameters)s
+4932(that)s 5371(we)s 5727(intend)s 6404(to)s 6664(refer)s
+7194(to)s 7454(outside)s 8222(the)s 8592(body)s 0 9261(of)m
+220 fnt35 274 9258(@Eq)m 240 fnt82 815 9261(in)m 1061(an)s
+220 fnt35 1347 9258(e)m 6(xpor)k -8(t)k 240 fnt82
+2018 9261(clause,)m 2725(preceding)s 3724(the)s 4075(de\207nition)s 5052(as)s
+5305(sho)s 6(wn.)k 6092(Only)s 6628(e)s 3(xported)k
+7523(symbols)s 8375(may)s 8844(be)s 0 8973(in)m 9(v)k 4(ok)k 2(ed)k
+817(outside)s 1566(the)s 1916(body)s 2452(of)s 220 fnt35
+2725 8970(@Eq)m 240 fnt82 3203 8973(.)m 3369(The)s 3799(body)s
+4335(parameter)s 5351(is)s 5563(lik)s 2(e)k 5977(a)s
+6145(right)s 6658(parameter)s 7674(e)s 3(xcept)k 8357(that)s
+8778(the)s 0 8685(e)m 3(xported)k 892(symbols)s 1741(are)s
+2088(visible)s 2781(within)s 3449(it:)s 220 fnt35 480 8184(@Eq { {x sup 2 + y sup 2} o)m 3(v)k 5(er 2 })k
+240 fnt82 0 7686(calls)m 488(on)s 785(the)s 1133(nested)s
+1802(de\207nitions)s 2863(of)s 220 fnt35 3134 7683(@Eq)m 240 fnt82
+3672 7686(to)m 3911(produce)s 4738(the)s 5086(result)s 168 fnt78
+586 7231(2)m 240 fnt83 480 7171(x)m 240 fnt78 738 7163(+)m
+168 fnt78 1041 7231(2)m 240 fnt83 939 7171(y)m 641 0 0 0 240 288 12 480 7073 LoutGr2
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+240 fnt78
+743 6845(2)m 240 fnt82 0 6334(The)m 416(body)s 937(parameter')s 13(s)k
+2089(v)s 6(alue)k 2644(must)s 3156(be)s 3426(enclosed)s
+4308(in)s 4539(braces.)s 5300(The)s 5715(term)s 6200(`body)s
+6800(parameter')s 7854(is)s 8051(a)s 8204(reminder)s 0 6046(that)m
+418(the)s 766(v)s 6(alue)k 1334(is)s 1544(interpreted)s
+2636(as)s 2886(if)s 3103(it)s 3295(w)s 2(as)k
+3716(within)s 4384(the)s 4732(body)s 5266(of)s 5537(the)s
+5885(symbol.)s 480 5672(A)m 710(body)s 1244(parameter)s 2257(may)s
+2723(not)s 3089(be)s 3370(e)s 3(xported,)k 4311(and)s
+4714(in)s 4957(f)s 2(act)k 5372(a)s 5537(body)s
+6071(parameter)s 7085(may)s 7550(be)s 7832(in)s 9(v)k 4(ok)k 2(ed)k
+8646(only)s 0 5384(within)m 656(the)s 991(body)s 1512(of)s
+1770(the)s 2105(enclosing)s 3063(symbol,)s 3862(not)s 4215(within)s
+4870(an)s 3(y)k 5254(nested)s 5911(de\207nitions.)s 7072(F)s 3(or)k
+7448(e)s 3(xample,)k 220 fnt35 8349 5381(x)m 240 fnt82
+8504 5384(abo)m 3(v)k 3(e)k 0 5096(may)m 471(not)s
+843(be)s 1131(in)s 9(v)k 4(ok)k 2(ed)k
+1952(within)s 220 fnt35 2626 5093(sup)m 240 fnt82 2972 5096(.)m
+3141(This)s 3623(restriction)s 4653(is)s 4869(needed)s 5611(to)s
+5855(a)s 4(v)k 4(oid)k 6443(the)s 6797(possibility)s
+7853(of)s 8130(recursion,)s 0 4808(when)m 585(the)s 943(actual)s
+1577(body)s 2121(parameter)s 3145(in)s 9(v)k 4(ok)k 2(es)k
+3935(an)s 4228(e)s 3(xported)k 5129(nested)s 5808(de\207nition)s
+6792(which)s 7443(in)s 9(v)k 4(ok)k 2(es)k
+8234(the)s 8592(body)s 0 4520(parameter)m 9(,)k 1052(etc.)s
+480 4146(The)m 932(second)s 1679(place)s 2263(where)s 2928(e)s 3(xported)k
+3844(symbols)s 4717(may)s 5207(be)s 5514(used)s 6035(is)s
+6269(in)s 6536(the)s 6909(right)s 7444(parameter)s 8482(of)s
+8778(the)s 220 fnt35 0 3855(@Open)m 240 fnt82 806 3858(symbol,)m
+1618(and)s 2022(follo)s 6(wing)k 2999(its)s 3275(alternati)s 6(v)k 3(e)k
+4329(form,)s 220 fnt35 4900 3855(@Use)m 240 fnt82 5565 3858(\(Section)m
+6418(3.36\).)s 480 3484(Exported)m 1480(nested)s 2214(symbols)s 3128(and)s
+3598(parameters)s 4761(may)s 5292(be)s 5639(made)s 6279(visible)s
+7037(within)s 7770(a)s 8002(subsequent)s 0 3196(de\207nition)m 974(or)s
+1233(macro)s 1883(by)s 2177(preceding)s 3173(it)s 3365(with)s
+3847(an)s 220 fnt35 4130 3193(impor)m -8(t)k 240 fnt82
+4803 3196(clause,)m 5507(lik)s 2(e)k 5919(this:)s 220 fnt35
+480 2695(impor)m -8(t @Eq)k 480 2407(def p)m 6(ythag { sqr)k -8(t { x sup 2 + y sup 2 } })k
+240 fnt82 0 1908(Note)m 548(ho)s 6(we)k 6(v)k 3(er)k
+1444(that)s 220 fnt35 1889 1905(p)m 6(ythag)k 240 fnt82
+2617 1908(can)m 3033(only)s 3540(be)s 3849(used)s 4374(with)s
+4883(some)s 5471(in)s 9(v)k 4(ocation)k 6552(of)s
+220 fnt35 6850 1905(@Eq)m 240 fnt82 7328 1908(:)m 7521(within)s
+8216(the)s 8592(body)s 0 1620(parameter)m 1036(of)s 1329(an)s
+1635(in)s 9(v)k 4(ocation)k 2711(of)s 220 fnt35
+3005 1617(@Eq)m 240 fnt82 3483 1620(,)m 3612(within)s 4303(the)s
+4673(right)s 5207(parameter)s 6243(of)s 6537(an)s 220 fnt35
+6842 1617(@Eq&&tag @Open)m 240 fnt82 8737 1620(,)m 8867(or)s 0 1332(follo)m 6(wing)k
+977(a)s 220 fnt35 1143 1329(@Use { @Eq ...)m 13( })k 240 fnt82
+2798 1332(.)m 2962(There)s 3575(may)s 4041(be)s 4323(se)s 6(v)k 3(eral)k
+5045(symbols)s 5894(in)s 6137(the)s 220 fnt35 6485 1329(impor)m -8(t)k
+240 fnt82 7158 1332(clause.)m 480 958(In)m 760(a)s 951(similar)s
+1698(w)s 2(ay)k 2174(to)s 220 fnt35 2438 955(impor)m -8(t)k
+240 fnt82 3051 958(,)m 3183(a)s 3374(de\207nition)s 4373(may)s
+4864(be)s 5171(preceded)s 6117(by)s 220 fnt35 6436 955(e)m 6(xtend)k
+240 fnt82 7162 958(follo)m 6(wed)k 8089(by)s 8408(a)s
+8599(sym)s 8998(-)s 0 670(bol)m 361(name:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 19 25
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(2.3.)m 454(Nested)s 1171(de\207nitions,)s 2261(body)s
+2783(par)s 3(ameter)k 2(s,)k 3961(e)s 4(xtend,)k
+4674(import,)s 5405(and)s 5831(e)s 4(xport)k 240 fnt84
+8832 13840(19)m 220 fnt35 480 13207(e)m 6(xtend @Eq)k 480 12919(def p)m 6(ythag { sqr)k -8(t { x sup 2 + y sup 2 } })k
+240 fnt82 0 12420(The)m 418(ef)s 6(fect)k 1003(of)s
+1264(this)s 1649(is)s 1849(just)s 2243(as)s 2483(though)s
+3195(the)s 3533(de\207nition)s 4496(of)s 220 fnt35 4757 12417(p)m 6(ythag)k
+240 fnt82 5447 12420(had)m 5841(occurred)s 6724(directly)s 7497(after)s
+7982(the)s 8319(e)s 3(xisting)k 0 12132(de\207nitions)m 1058(within)s
+220 fnt35 1722 12129(@Eq)m 240 fnt82 2200 12132(,)m 2303(with)s
+220 fnt35 2782 12129(p)m 6(ythag)k 240 fnt82 3479 12132(added)m
+4105(to)s 220 fnt35 4340 12129(@Eq)m 240 fnt82 4818 12132(')m 13(s)k
+5025(e)s 3(xport)k 5689(list.)s 6140(This)s 6612(is)s
+6819(useful)s 7454(for)s 7788(e)s 3(xtending)k 8778(the)s
+0 11844(capabilities)m 1128(of)s 1389(a)s 1545(package)s 2375(of)s
+2636(de\207nitions)s 3687(lik)s 2(e)k 220 fnt35 4088 11841(@Eq)m
+240 fnt82 4616 11844(without)m 5397(modifying)s 6437(its)s 6703(source)s
+7373(\207le.)s 7832(The)s 8249(essential)s 0 11556(dif)m 6(ferences)k
+1106(to)s 220 fnt35 1346 11553(impor)m -8(t)k 240 fnt82
+2020 11556(are)m 2368(that)s 2787(all)s 3081(the)s 3430(symbols)s
+4280(of)s 220 fnt35 4552 11553(@Eq)m 240 fnt82 5091 11556(become)m
+5892(visible)s 6586(within)s 220 fnt35 7255 11553(p)m 6(ythag)k
+240 fnt82 7896 11556(,)m 8004(not)s 8371(just)s 8778(the)s
+0 11268(e)m 3(xported)k 892(ones,)s 1438(and)s 1842(only)s
+2322(one)s 2724(symbol)s 3484(may)s 3950(follo)s 6(w)k
+4622(the)s 220 fnt35 4970 11265(e)m 6(xtend)k 240 fnt82
+5671 11268(k)m 2(e)k 3(yw)k 2(ord.)k 480 10894(Actually)m 15(,)k
+1399(more)s 1951(than)s 2424(one)s 2831(symbol)s 3595(may)s
+4066(follo)s 6(w)k 220 fnt35 4743 10891(e)m 6(xtend)k
+240 fnt82 5384 10894(,)m 5495(b)s 4(ut)k 5862(this)s
+6262(usage)s 6868(indicates)s 7772(a)s 7943(`path)s 8496(name')s
+0 10606(of)m 271(the)s 619(symbol.)s 1488(F)s 3(or)k
+1877(e)s 3(xample,)k 220 fnt35 480 10105(e)m 6(xtend @DocumentLa)k 6(y)k 4(out @Repor)k -8(tLa)k 6(y)k 4(out)k
+480 9817(def @K)m 8(e)k 4(yw)k 2(ords ...)k 240 fnt82
+0 9319(causes)m 676(the)s 1026(de\207nition)s 2002(of)s 220 fnt35
+2275 9316(@K)m 8(e)k 4(yw)k 2(ords)k 240 fnt82
+3502 9319(to)m 3743(occur)s 4335(directly)s 5120(after)s 5618(the)s
+5968(e)s 3(xisting)k 6777(de\207nitions)s 7840(of)s 220 fnt35
+8113 9316(@Repor)m -8(t)k 240 fnt82 8998 9319(-)m 220 fnt35
+0 9028(La)m 6(y)k 4(out)k 240 fnt82 645 9031(,)m
+752(which)s 1394(itself)s 1942(lies)s 2324(within)s 220 fnt35
+2992 9028(@DocumentLa)m 6(y)k 4(out)k 240 fnt82 4860 9031(.)m
+480 8657(A)m 702(named)s 1390(parameter)s 2395(may)s 2853(also)s
+3283(be)s 3556(preceded)s 4469(by)s 4754(an)s 220 fnt35
+5029 8654(impor)m -8(t)k 240 fnt82 5694 8657(clause.)m 6386(As)s
+6695(usual,)s 7299(the)s 7638(meaning)s 8507(is)s 8708(that)s
+0 8369(the)m 336(visible)s 1016(local)s 1522(de\207nitions)s 2570(of)s
+2828(the)s 3163(import)s 3847(symbol\(s\))s 4839(are)s 5173(visible)s
+5853(within)s 6508(the)s 6843(body)s 7364(\(the)s 7778(def)s 2(ault)k
+8486(v)s 6(alue\))k 0 8081(of)m 281(the)s 640(named)s
+1347(parameter)s 13(.)k 2463(But)s 2879(furthermore,)s 4137(those)s
+4709(symbols)s 5569(will)s 6005(be)s 6298(visible)s 7002(within)s
+7681(all)s 7985(in)s 9(v)k 4(ocations)k 0 7793(of)m
+271(the)s 619(parameter)s 13(.)k 1724(F)s 3(or)k
+2113(e)s 3(xample,)k 3027(suppose)s 3855(we)s 4190(de\207ne)s
+220 fnt35 480 7292(def @Diag)m 480 7004( impor)m -8(t @Algebr)k 2(a named line)k 4(width { 1p })k
+480 6716( impor)m -8(t @Algebr)k 2(a named dashlength { 2p })k 480 6428( ...)m 240 fnt82
+0 5977(Then,)m 599(if)s 220 fnt35 816 5974(@Algebr)m 2(a)k
+240 fnt82 1847 5977(e)m 3(xports)k 2599(symbols)s 220 fnt35
+3448 5974(+)m 240 fnt82 3568 5977(,)m 220 fnt35 3675 5974(-)m
+240 fnt82 3739 5977(,)m 3846(and)s 4250(so)s 4516(on,)s
+4863(we)s 5198(may)s 5664(write)s 220 fnt35 480 5476(@Diag)m
+480 5188( line)m 4(width { 1f - 2p })k 480 4900( dashlength { 1f + 2p })m 240 fnt82 0 4401(using)m
+565(the)s 905(symbols)s 1747(from)s 220 fnt35 2263 4398(@Algebr)m 2(a)k
+240 fnt82 3234 4401(.)m 3391(There)s 3996(may)s 4454(be)s
+4729(se)s 6(v)k 3(eral)k 5443(symbols)s 6285(after)s
+6773(the)s 220 fnt35 7114 4398(impor)m -8(t)k 240 fnt82
+7779 4401(k)m 2(e)k 3(yw)k 2(ord.)k 8766(All)s
+0 4113(these)m 558(symbols)s 1418(share)s 1990(an)s 2284(important)s
+3285(restriction:)s 4429(the)s 3(y)k 4904(may)s 5381(not)s
+5759(ha)s 4(v)k 3(e)k 6271(parameters.)s 7434(This)s
+7921(is)s 8143(necessary)s 0 3825(because)m 841(Lout)s 1382(w)s 2(ould)k
+2065(be)s 2376(unable)s 3098(to)s 3366(determine)s 4406(suitable)s
+5233(v)s 6(alues)k 5918(for)s 6284(an)s 3(y)k
+6710(such)s 7234(parameters,)s 8417(if)s 8663(the)s 3(y)k
+0 3537(did)m 364(e)s 3(xist.)k 480 3163(As)m 814(an)s
+1115(e)s 3(xception)k 2116(to)s 2373(the)s 2738(rule)s
+3183(just)s 3605(gi)s 6(v)k 3(en,)k 4253(a)s
+4436(named)s 5150(parameter)s 6181(may)s 6665(import)s 7379(the)s
+7745(symbol)s 8522(it)s 8732(is)s 8960(a)s 0 2875(parameter)m
+1014(of:)s 220 fnt35 480 2374(e)m 6(xpor)k -8(t @Cell)k
+480 2086(def @Tb)m 4(l)k 480 1798( impor)m -8(t @Tb)k 4(l named @F)k 6(or)k -5(mat { ...)k 13( })k
+240 fnt82 0 1302(In)m 274(this)s 688(e)s 3(xample)k
+1569(the)s 1936(e)s 3(xported)k 2846(de\207nitions)s 3925(of)s
+220 fnt35 4215 1299(@Tb)m 4(l)k 240 fnt82 4802 1302(\(i.e.)m
+220 fnt35 5235 1299(@Cell)m 240 fnt82 5820 1302(\))m 5966(will)s
+6411(be)s 6711(visible)s 7422(within)s 220 fnt35 8109 1299(@F)m 6(or)k -5(mat)k
+240 fnt82 9022 1302(.)m 0 1014(Ho)m 6(we)k 6(v)k 3(er)k 9(,)k
+984(the)s 3(y)k 1472(may)s 1963(only)s 2467(be)s
+2774(used)s 3296(in)s 3563(actual)s 4213(parameters,)s 5392(not)s
+5782(in)s 6050(the)s 6423(def)s 2(ault)k 7168(v)s 6(alue)k
+7761(of)s 8057(the)s 8430(named)s 0 726(parameter)m 13(.)k
+1098(This)s 1567(is)s 1769(o)s 6(wing)k 2408(to)s
+2639(implementation)s 4189(problems:)s 5237(at)s 5462(the)s 5803(time)s
+6275(the)s 6616(def)s 2(ault)k 7329(v)s 6(alue)k
+7890(of)s 220 fnt35 8153 723(@F)m 6(or)k -5(mat)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 20 26
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(20)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(is)m 210(read,)s 728(the)s
+1076(e)s 3(xported)k 1968(symbols)s 2817(ha)s 4(v)k 3(e)k
+3318(not)s 3684(been)s 4193(read)s 4662(and)s 5066(are)s
+5413(consequently)s 6730(not)s 7096(kno)s 6(wn.)k 480 12831(Since)m
+220 fnt35 1064 12828(@Cell)m 240 fnt82 1706 12831(is)m 1913(nested)s
+2579(within)s 220 fnt35 3244 12828(@Tb)m 4(l)k 240 fnt82
+3753 12831(,)m 3857(the)s 4202(v)s 6(alue)k 4766(of)s
+5034(an)s 5314(in)s 9(v)k 4(ocation)k 6365(of)s
+220 fnt35 6633 12828(@Cell)m 240 fnt82 7275 12831(may)m 7738(depend)s
+8485(on)s 8778(the)s 0 12543(v)m 6(alue)k 582(of)s
+868(parameters)s 1980(of)s 220 fnt35 2266 12540(@Tb)m 4(l)k
+240 fnt82 2775 12543(.)m 2953(If)s 220 fnt35 3198 12540(@Cell)m
+240 fnt82 3857 12543(is)m 4082(used)s 4593(within)s 5276(an)s
+5573(actual)s 220 fnt35 6213 12540(@F)m 6(or)k -5(mat)k
+240 fnt82 7200 12543(parameter)m 9(,)k 8267(its)s 8558(v)s 6(alue)k
+0 12255(depends)m 833(on)s 1126(the)s 1471(v)s 6(alue)k
+2035(of)s 2303(parameters)s 3397(of)s 3665(the)s 4009(in)s 9(v)k 4(ocation)k
+5060(of)s 220 fnt35 5327 12252(@Tb)m 4(l)k 240 fnt82
+5893 12255(of)m 6160(which)s 6799(the)s 220 fnt35 7143 12252(@F)m 6(or)k -5(mat)k
+240 fnt82 8112 12255(parameter)m 0 11967(is)m 210(a)s 376(part.)s
+480 11593(A)m 710(de\207nition,)s 1734(macro,)s 2438(or)s 2697(named)s
+3393(parameter)s 4407(may)s 4873(ha)s 4(v)k 3(e)k
+5374(se)s 6(v)k 3(eral)k 6096(alternati)s 6(v)k 3(e)k
+7150(names,)s 7868(lik)s 2(e)k 8280(this:)s 220 fnt35
+480 11092(macro @CD @CentredDispla)m 6(y @CenteredDispla)k 6(y { ...)k 13( })k 240 fnt82
+0 10594(This)m 489(is)s 713(useful)s 1366(for)s 1718(abbre)s 6(viated)k
+2898(and)s 3316(alternati)s 6(v)k 3(e)k 4384(spellings,)s
+5355(as)s 5618(sho)s 6(wn.)k 6416(The)s 6858(names)s
+7534(appear)s 8245(together)s 9(,)k 0 10306(and)m 404(the)s 3(y)k
+867(may)s 1333(subsequently)s 2637(be)s 2919(used)s 3416(interchangeably)s 15(.)k
+480 9932(If)m 698(one)s 1088(name)s 1649(of)s 1908(a)s
+2062(symbol)s 2809(appears)s 3578(in)s 3809(an)s 4079(e)s 3(xport)k
+4735(or)s 4982(import)s 5666(list,)s 6052(its)s 6316(other)s
+6854(names)s 7504(are)s 7838(automaticaly)s 0 9644(included)m 882(as)s
+1132(well,)s 1650(and)s 2054(should)s 2751(not)s 3117(also)s
+3555(appear)s 4252(in)s 4495(the)s 4843(list.)s 240 fnt84
+0 8851(2.4.)m 471(Filter)s 4(ed)k 1330(right)s 1894(and)s
+2335(body)s 2897(parameters)s 240 fnt82 480 8374(A)m 719(right)s
+1239(or)s 1507(body)s 2050(parameter)s 3073(may)s 3548(be)s
+3839(\207ltered)s 4582(by)s 4885(some)s 5455(other)s 6015(computer)s
+6987(program)s 7866(before)s 8541(being)s 0 8086(included)m 882(by)s
+1176(Lout.)s 1792(As)s 2109(an)s 2392(e)s 3(xample)k
+3255(of)s 3526(such)s 4022(a)s 4188(program)s 5058(we)s
+5393(will)s 5819(use)s 6194(the)s 6542(Unix)s 220 fnt35
+7076 8083(sor)m -8(t)k 240 fnt82 7506 8086(command:)m 220 fnt35
+480 7587(sor)m -8(t -o out\207le in\207le)k 240 fnt82 0 7133(This)m 499(causes)s
+1198(\207le)s 220 fnt35 1582 7130(out\207le)m 240 fnt82 2243 7133(to)m
+2505(contain)s 3290(a)s 3480(sorted)s 4145(cop)s 2(y)k
+4687(of)s 4981(\207le)s 220 fnt35 5366 7130(in\207le)m 240 fnt82
+5808 7133(.)m 5996(W)s 19(e)k 6388(incorporate)s 7556(this)s
+7975(into)s 8424(a)s 8614(Lout)s 0 6845(de\207nition)m 974(as)s
+1224(follo)s 6(ws:)k 220 fnt35 480 6393(def @Sor)m -8(t)k
+480 6105( named @Options {})m 480 5817( r)m -3(ight x)k 480 5529({)m 480 5241( def @Filter { sor)m -8(t @Options -o @FilterOut @FilterIn })k
+480 4665( lines @Break x)m 480 4377(})m 240 fnt82 0 3883(The)m 440(presence)s
+1345(within)s 220 fnt35 2026 3880(@Sor)m -8(t)k 240 fnt82
+2728 3883(of)m 3012(a)s 3191(de\207nition)s 4178(of)s 4462(a)s
+4641(symbol)s 5414(called)s 220 fnt35 6055 3880(@Filter)m 240 fnt82
+6837 3883(tells)m 7298(Lout)s 7823(that)s 8254(the)s 8615(right)s
+0 3595(parameter)m 1057(of)s 220 fnt35 1372 3592(@Sor)m -8(t)k
+240 fnt82 2104 3595(is)m 2358(to)s 2640(be)s 2966(\207ltered)s
+3743(before)s 4453(inclusion.)s 5537(When)s 220 fnt35 6210 3592(@Sor)m -8(t)k
+240 fnt82 6942 3595(is)m 7196(in)s 9(v)k 4(ok)k 2(ed,)k
+220 fnt35 8103 3592(@Filter)m 240 fnt82 8916 3595(is)m 0 3307(e)m 6(v)k 6(aluated)k
+978(and)s 1399(its)s 1692(v)s 6(alue)k 2277(e)s 3(x)k 3(ecuted)k
+3196(as)s 3463(a)s 3646(system)s 4387(command.)s 5512(In)s
+5785(addition)s 6643(to)s 6899(the)s 7264(symbols)s 8130(ordinarily)s
+0 3019(a)m 4(v)k 6(ailable)k 908(within)s 1576(the)s
+1924(body)s 2458(of)s 220 fnt35 2729 3016(@Filter)m 240 fnt82
+3438 3019(,)m 3545(there)s 4078(are)s 4425(three)s 4958(others:)s
+220 fnt35 0 2513(@FilterIn)m 240 fnt82 1920 2516(the)m 2273(name)s
+2852(of)s 3128(a)s 3299(\207le)s 3665(which)s 4312(will,)s
+4795(at)s 5032(the)s 5385(time)s 5870(the)s 6223(system)s
+6952(command)s 7959(is)s 8175(e)s 3(x)k 3(ecuted,)k
+1920 2228(contain)m 2726(the)s 3119(actual)s 3789(right)s 4345(or)s
+4649(body)s 5228(parameter)s 6287(of)s 6603(the)s 6996(symbol,)s
+7853(e)s 3(xactly)k 8639(as)s 8934(it)s 1920 1940(appears)m
+2701(in)s 2944(the)s 3292(input)s 3844(\207le;)s 220 fnt35
+0 1434(@FilterOut)m 240 fnt82 1920 1437(the)m 2305(name)s 2916(of)s
+3224(a)s 3427(\207le)s 3826(of)s 4134(Lout)s 4683(te)s 3(xt)k
+5135(whose)s 5840(contents)s 6726(Lout)s 7275(will)s 7738(read)s
+8244(after)s 8778(the)s 1920 1149(system)m 2657(command)s 3673(has)s
+4057(\207nished,)s 4936(as)s 5200(a)s 5380(replacement)s 6620(for)s
+6972(what)s 7511(w)s 2(as)k 7946(put)s 8326(into)s
+8765(\207le)s 220 fnt35 1920 858(@FilterIn)m 240 fnt82 2798 861(;)m
+220 fnt35 0 374(@FilterErr)m 240 fnt82 1920 377(the)m 2273(name)s
+2852(of)s 3129(a)s 3300(\207le)s 3667(that)s 4090(Lout)s
+4608(will)s 5039(attempt)s 5820(to)s 6065(read)s 6539(after)s
+7041(the)s 7394(system)s 8124(command)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 21 27
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(2.4.)m 454(F)s 10(ilter)k 8(ed)k
+1271(right)s 1800(and)s 2226(body)s 2748(par)s 3(ameter)k 2(s)k
+240 fnt84 8839 13840(21)m 240 fnt82 1920 13205(has)m 2281(\207nished,)s
+3137(containing)s 4191(error)s 4705(messages)s 5649(produced)s 6589(by)s
+6874(the)s 7213(command)s 8206(that)s 8614(Lout)s 1920 12917(will)m
+2346(pass)s 2809(on)s 3106(to)s 3345(the)s 3693(user)s
+4151(as)s 4401(non-f)s 2(atal)k 5316(errors.)s 6036(Use)s
+6464(of)s 6735(this)s 7131(\207le)s 7492(is)s 7702(optional.)s
+0 12414(It)m 205(is)s 415(a)s 581(f)s 2(atal)k
+1057(error)s 1580(for)s 1918(the)s 2266(system)s 2990(command)s
+3992(to)s 4231(return)s 4858(a)s 5024(non-zero)s 5927(status.)s
+480 12040(No)m 6(w)k 1001(the)s 220 fnt35 1356 12037(sor)m -8(t)k
+240 fnt82 1793 12040(command)m 2802(has)s 3179(options)s 220 fnt35
+3942 12037(-u)m 240 fnt82 4190 12040(for)m 4535(deleting)s 5365(duplicate)s
+6304(lines,)s 6869(and)s 220 fnt35 7280 12037(-r)m 240 fnt82
+7493 12040(for)m 7838(re)s 6(v)k 3(ersing)k 8778(the)s
+0 11752(sorting)m 717(order)s 13(.)k 1372(So)s 1678(the)s
+2026(result)s 2616(of)s 220 fnt35 480 11251(@Sor)m -8(t)k
+480 10963( @Options { -r -u })m 480 10675({)m 480 10387(A)m 6(usten, J)k 4(ane)k
+480 10099(Dic)m 4(k)k 4(ens)k 3(, Char)k -3(les)k
+480 9811(Eliot, George)m 480 9523(Hardy)m 22(, )k 11(Thomas)k 480 9235(Bront{@Char edieresis}, Char)m -3(lotte)k
+480 8947(})m 240 fnt82 0 8453(is)m 480 8000(Hardy)m 15(,)k
+1170(Thomas)s 480 7712(Eliot,)m 1051(Geor)s 4(ge)k 480 7424(Dick)m 2(ens,)k
+1369(Charles)s 480 7136(Bront\353,)m 1238(Charlotte)s 480 6848(Austen,)m 1265(Jane)s
+0 6364(Unlik)m 2(e)k 705(all)s 998(the)s 1347(other)s
+1898(e)s 3(xamples)k 2849(in)s 3093(this)s 3489(manual,)s
+4300(this)s 4697(output)s 5369(is)s 5579(simulated.)s 6673(This)s
+7149(w)s 2(as)k 7570(done)s 8093(so)s 8359(that)s
+8778(the)s 0 6076(ability)m 661(to)s 896(format)s 1588(this)s
+1980(manual)s 2735(is)s 2942(not)s 3304(dependent)s 4344(on)s
+4637(the)s 4981(e)s 3(xistence)k 5919(of)s 6187(the)s
+6531(Unix)s 220 fnt35 7061 6073(sor)m -8(t)k 240 fnt82
+7487 6076(command,)m 8534(and)s 8934(it)s 0 5788(highlights)m 1008(the)s
+1356(f)s 2(act)k 1771(that)s 2189(\207ltered)s 2923(actual)s
+3548(parameters)s 4646(are)s 4993(by)s 5287(their)s 5784(nature)s
+6437(of)s 6708(uncertain)s 7654(portability)s 15(.)k 480 5414(There)m
+1114(is)s 1345(no)s 1660(need)s 2191(for)s 2550(an)s
+2855(actual)s 3501(\207ltered)s 4257(parameter)s 5292(to)s 5552(obe)s 3(y)k
+6091(the)s 6460(le)s 3(xical)k 7169(rules)s 7706(of)s
+7998(Lout,)s 8579(since)s 0 5126(it)m 207(is)s 432(passed)s
+1143(directly)s 1941(to)s 2195(the)s 2558(other)s 3124(program.)s
+4113(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+5088(Lout)s 5615(must)s 6155(be)s 6452(able)s 6921(to)s
+7175(w)s 2(ork)k 7741(out)s 8122(where)s 8778(the)s
+0 4838(parameter)m 1034(ends,)s 1601(which)s 2263(gi)s 6(v)k 3(es)k
+2831(rise)s 3251(to)s 3511(the)s 3879(follo)s 6(wing)k
+4877(rules.)s 5525(As)s 5863(with)s 6365(a)s 6552(body)s
+7106(parameter)s 9(,)k 8179(a)s 8366(symbol)s 220 fnt35
+0 4547(@Sym)m 240 fnt82 730 4550(with)m 1235(a)s 1423(\207ltered)s
+2180(parameter)s 3217(must)s 3764(be)s 4069(in)s 9(v)k 4(ok)k 2(ed)k
+4906(in)s 5172(either)s 5798(the)s 6168(form)s 220 fnt35
+6715 4547(@Sym { ...)m 13( })k 240 fnt82 7949 4550(or)m 8231(the)s
+8602(form)s 220 fnt35 0 4259(@Sym @Begin ...)m 13( @End @Sym)k 240 fnt82
+3120 4262(,)m 3251(plus)s 3725(options)s 4505(as)s 4779(usual.)s
+5472(In)s 5753(the)s 6125(former)s 6858(case,)s 7400(braces)s
+8085(within)s 8778(the)s 0 3974(actual)m 625(parameter)s 1639(must)s
+2164(match;)s 2860(in)s 3103(the)s 3451(latter)s 4000(case,)s
+4518(the)s 4866(actual)s 5491(parameter)s 6505(may)s 6971(not)s
+7337(contain)s 220 fnt35 8098 3971(@End)m 240 fnt82 8699 3974(.)m
+480 3600(If)m 725(an)s 1024(actual)s 1664(\207ltered)s 2414(parameter)s
+3444(contains)s 220 fnt35 4307 3597(@Include)m 240 fnt82 5229 3600(,)m
+5352(this)s 5764(is)s 5989(tak)s 2(en)k 6578(to)s
+6833(be)s 3(gin)k 7434(a)s 7616(Lout)s 220 fnt35
+8144 3597(@Include)m 240 fnt82 0 3312(directi)m 6(v)k 3(e)k
+882(in)s 1125(the)s 1473(usual)s 2033(form)s 2557(\(Section)s
+3410(3.42\):)s 220 fnt35 480 2821(@Sor)m -8(t {)k 480 2533(A)m 6(usten, J)k 4(ane)k
+480 2245(@Include { authors })m 480 1957(Hardy)m 22(, )k 11(Thomas)k 480 1669(})m
+240 fnt82 0 1175(The)m 421(included)s 1296(\207le)s 1649(becomes)s
+2530(part)s 2954(of)s 220 fnt35 3217 1172(@FilterIn)m 240 fnt82
+4095 1175(,)m 4195(b)s 4(ut)k 4549(an)s 3(y)k
+4939(braces,)s 220 fnt35 5649 1172(@Include)m 240 fnt82 6571 1175(,)m
+6670(or)s 220 fnt35 6922 1172(@End)m 240 fnt82 7576 1175(within)m
+8236(it)s 8421(are)s 8760(not)s 0 887(noticed)m 762(by)s
+1056(Lout.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 22 28
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(22)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 480 13205(The)m 928(\207rst)s 1380(character)s
+2335(of)s 2627(\207le)s 220 fnt35 3009 13202(@FilterIn)m 240 fnt82
+3968 13205(will)m 4415(be)s 4718(the)s 5087(\207rst)s 5539(non-white)s
+6586(space)s 7194(character)s 8149(follo)s 6(wing)k 0 12917(the)m
+353(opening)s 220 fnt35 1184 12914({)m 240 fnt82 1314 12917(or)m
+220 fnt35 1579 12914(@Begin)m 240 fnt82 2348 12917(,)m 2461(or)s
+2726(the)s 3080(\207rst)s 3517(character)s 4457(of)s 4734(an)s
+5023(included)s 5911(\207le)s 6278(if)s 220 fnt35 6501 12914(@Include)m
+240 fnt82 7489 12917(comes)m 8157(\207rst.)s 8698(The)s 0 12629(second-last)m
+1146(character)s 2091(of)s 2374(\207le)s 220 fnt35 2746 12626(@FilterIn)m
+240 fnt82 3696 12629(will)m 4133(be)s 4427(the)s 4786(last)s
+5189(non-white)s 6226(space)s 6825(character)s 7770(preceding)s 8778(the)s
+0 12341(closing)m 220 fnt35 745 12338(})m 240 fnt82 871 12341(or)m
+220 fnt35 1132 12338(@End @Sym)m 240 fnt82 2454 12341(,)m 2563(or)s
+2824(the)s 3174(last)s 3567(character)s 4503(of)s 4775(an)s
+5060(included)s 5944(\207le)s 6307(if)s 220 fnt35 6526 12338(@Include)m
+240 fnt82 7510 12341(comes)m 8174(last.)s 8671(One)s 0 12053(ne)m 6(wline)k
+833(character)s 1794(is)s 2030(al)s 2(w)k 2(ays)k
+2768(appended)s 3770(and)s 4201(is)s 4437(the)s 4812(last)s
+5229(character)s 6190(of)s 6487(\207le)s 220 fnt35 6875 12050(@FilterIn)m
+240 fnt82 7753 12053(.)m 7943(This)s 8446(ef)s 6(fects)k
+0 11765(a)m 206(compromise)s 1484(between)s 2378(the)s 2766(Lout)s
+3319(con)s 9(v)k 3(ention,)k 4518(that)s 4976(spaces)s
+5691(follo)s 6(wing)k 220 fnt35 6708 11762({)m 240 fnt82
+6873 11765(or)m 7172(preceding)s 220 fnt35 8208 11762(})m 240 fnt82
+8372 11765(are)m 8760(not)s 0 11477(signi\207cant,)m 1103(with)s 1585(the)s
+1933(Unix)s 2467(con)s 9(v)k 3(ention)k 3576(that)s
+3994(all)s 4287(te)s 3(xt)k 4702(\207les)s 5151(end)s
+5555(with)s 6037(a)s 6203(ne)s 6(wline)k 7010(character)s 13(.)k
+240 fnt84 0 10684(2.5.)m 471(Pr)s 4(ecedence)k 1677(and)s
+2118(associati)s 2(vity)k 3420(of)s 3692(symbols)s 240 fnt82
+480 10207(Ev)m 3(ery)k 1131(symbol)s 1920(in)s 2192(Lout)s
+2733(has)s 3132(a)s 240 fnt83 3327 10209(pr)m 8(ecedence)k
+240 fnt82 4401 10207(,)m 4538(which)s 5209(is)s 5448(a)s
+5643(positi)s 6(v)k 3(e)k 6476(whole)s 7146(number)s 13(.)k
+8057(When)s 8716(tw)s 2(o)k 0 9919(symbols)m 849(compete)s
+1715(for)s 2053(an)s 2336(object,)s 3027(the)s 3375(one)s
+3777(with)s 4259(the)s 4607(higher)s 5278(precedence)s 6409(wins)s
+6912(it.)s 7208(F)s 3(or)k 7597(e)s 3(xample,)k
+220 fnt35 480 9418(a | b / c)m 240 fnt82 0 8963(is)m 210(equi)s 6(v)k 6(alent)k
+1253(to)s 220 fnt35 1491 8960({)m 1616(a)s 1794(|)s
+1892(b)s 2067(})s 2192(/)s 2317(c)s 240 fnt82
+2482 8963(rather)m 3097(than)s 220 fnt35 3565 8960(a)m 3743(|)s
+3841({)s 3966(b)s 4141(/)s 4266(c)s 4432(})s
+240 fnt82 4496 8963(,)m 4603(because)s 220 fnt35 5415 8960(|)m
+240 fnt82 5511 8963(has)m 5881(higher)s 6551(precedence)s 7681(than)s
+220 fnt35 8150 8960(/)m 240 fnt82 8273 8963(and)m 8676(thus)s
+0 8675(wins)m 503(the)s 220 fnt35 851 8672(b)m 240 fnt82
+965 8675(.)m 480 8301(When)m 1149(the)s 1538(tw)s 2(o)k
+1988(competing)s 3092(symbols)s 3981(ha)s 4(v)k 3(e)k
+4523(equal)s 5137(precedence,)s 6359(Lout)s 6912(applies)s 7680(a)s
+7887(second)s 8651(rule.)s 0 8013(Each)m 545(symbol)s 1316(is)s
+1537(either)s 240 fnt83 2151 8015(left-associative)m 240 fnt82 3659 8013(or)m
+240 fnt83 3929 8015(right-associative)m 240 fnt82 5528 8013(.)m 5703(The)s
+6142(v)s 6(alue)k 6720(of)s 220 fnt35 7002 8010(a)m
+7180(op1)s 7564(b)s 7739(op2)s 8156(c)s 240 fnt82
+8332 8013(is)m 8553(tak)s 2(en)k 0 7725(to)m 252(be)s
+220 fnt35 547 7722({)m 672(a)s 850(op1)s 1234(b)s
+1409(})s 1534(op2)s 1951(c)s 240 fnt82 2129 7725(if)m
+2359(the)s 2720(symbols)s 3582(are)s 3942(both)s 4438(left-associati)s 6(v)k 3(e,)k
+5993(and)s 220 fnt35 6410 7722(a op1 { b op2 c })m 240 fnt82 8072 7725(if)m
+8302(the)s 3(y)k 8779(are)s 0 7437(right-associati)m 6(v)k 3(e.)k
+1733(In)s 1989(cases)s 2544(not)s 2910(co)s 3(v)k 3(ered)k
+3719(by)s 4013(these)s 4560(tw)s 2(o)k 4970(rules,)s
+5541(use)s 5916(braces.)s 480 7063(It)m 672(sometimes)s 1732(happens)s
+2554(that)s 2959(the)s 3294(result)s 3870(is)s 4067(the)s
+4402(same)s 4935(re)s 3(g)k 1(ardless)k 5937(of)s
+6195(ho)s 6(w)k 6642(the)s 6977(e)s 3(xpression)k
+8041(is)s 8237(grouped.)s 0 6775(F)m 3(or)k 382(e)s 3(xample,)k
+220 fnt35 1289 6772({)m 1414(a)s 1592(|)s 1690(b)s
+1865(})s 1990(|)s 2088(c)s 240 fnt82 2246 6775(and)m
+220 fnt35 2643 6772(a)m 2821(|)s 2919({)s 3044(b)s
+3219(|)s 3317(c)s 3483(})s 240 fnt82 3599 6775(are)m
+3939(al)s 2(w)k 2(ays)k 4643(the)s 4984(same,)s
+5575(for)s 5905(an)s 3(y)k 6295(combination)s 7541(of)s
+7805(objects,)s 8581(g)s 1(aps,)k 0 6487(and)m 416(v)s 6(ariants)k
+1230(of)s 220 fnt35 1513 6484(|)m 240 fnt82 1550 6487(.)m
+1727(In)s 1995(such)s 2504(cases)s 3071(the)s 3432(symbols)s
+4293(are)s 4653(said)s 5108(to)s 5360(be)s 240 fnt83
+5654 6489(associative)m 240 fnt82 6709 6487(,)m 6829(and)s 7245(we)s
+7593(can)s 7995(con\207dently)s 0 6199(omit)m 498(the)s 846(braces.)s
+480 5825(User)m 4(-de\207ned)k 1769(symbols)s 2618(may)s 3084(be)s
+3366(gi)s 6(v)k 3(en)k 3946(a)s 4112(precedence)s
+5243(and)s 5647(associati)s 6(vity:)k 220 fnt35 480 5324(def @Super)m
+480 5036( precedence 50)m 480 4748( associativity r)m -3(ight)k 480 4460( left x)m 480 4172( r)m -3(ight y)k
+480 3884({)m 480 3596( @OneRo)m 3(w { | -2p @F)k 6(ont y ^/0.5fk x })k 480 3308(})m
+240 fnt82 0 2814(The)m 3(y)k 541(come)s 1113(just)s
+1516(after)s 2010(an)s 3(y)k 220 fnt35 2405 2811(into)m
+240 fnt82 2809 2814(clause)m 3460(and)s 3862(before)s 4526(an)s 3(y)k
+4921(parameter)s 5933(de\207nitions.)s 7105(The)s 7531(precedence)s 8660(may)s
+0 2526(be)m 280(an)s 3(y)k 674(whole)s 1313(number)s
+2101(between)s 2952(10)s 3245(and)s 3646(100,)s 4110(and)s
+4512(if)s 4726(omitted)s 5511(is)s 5719(assigned)s 6598(the)s
+6943(v)s 6(alue)k 7509(100.)s 8030(The)s 8455(higher)s
+0 2238(the)m 373(number)s 9(,)k 1227(the)s 1600(higher)s
+2296(the)s 2669(precedence.)s 3933(The)s 4386(associati)s 6(vity)k
+5654(may)s 6145(be)s 220 fnt35 6452 2235(left)m 240 fnt82
+6825 2238(or)m 220 fnt35 7109 2235(r)m -3(ight)k 240 fnt82
+7534 2238(,)m 7666(and)s 8095(if)s 8338(omitted)s 0 1950(def)m 2(aults)k
+805(to)s 220 fnt35 1044 1947(r)m -3(ight)k 240 fnt82
+1469 1950(.)m 1633(Lout')s 13(s)k 2295(symbols)s 3144(ha)s 4(v)k 3(e)k
+3645(the)s 3993(follo)s 6(wing)k 4970(precedences)s 6189(and)s
+6593(associati)s 6(vities:)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 23 29
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(2.5.)m 454(Pr)s 8(ecedence)k 1614(and)s
+2040(associativity)s 3290(of)s 3571(symbols)s 240 fnt84 8833 13840(23)m
+240 fnt82 480 13170(Precedence)m 1904(Associati)s 6(vity)k 3493(Symbols)s
+969 12594(5)m 2011(associati)s 6(v)k 3(e)k 220 fnt35
+3493 12591(/ ^/ // ^//)m 240 fnt82 965 12306(6)m 2011(associati)s 6(v)k 3(e)k
+220 fnt35 3493 12303(| ^| || ^||)m 240 fnt82 968 12018(7)m 2011(associati)s 6(v)k 3(e)k
+220 fnt35 3493 12015(& ^&)m 240 fnt82 968 11730(7)m 2011(associati)s 6(v)k 3(e)k
+220 fnt35 3493 11727(&)m 240 fnt82 3695 11730(in)m 3938(the)s
+4286(form)s 4810(of)s 5081(one)s 5483(or)s 5742(more)s
+6289(white)s 6876(space)s 7463(characters)s 685 11442(10-100)m 220 fnt35
+2012 11439(left)m 240 fnt82 2360 11442(or)m 220 fnt35 2619 11439(r)m -3(ight)k
+240 fnt82 3493 11442(user)m 4(-de\207ned)k 4729(symbols)s 844 11154(100)m
+220 fnt35 2316 11151(r)m -3(ight)k 3493(@Wide)s 240 fnt82
+4207 11154(,)m 220 fnt35 4314 11151(@High)m 240 fnt82 4973 11154(,)m
+220 fnt35 5080 11151(@Gr)m 2(aphic)k 240 fnt82 6064 11154(,)m
+6171(etc.)s 854 10866(101)m 2494(-)s 220 fnt35 3493 10863(&&)m
+240 fnt82 845 10578(102)m 2011(associati)s 6(v)k 3(e)k
+220 fnt35 3493 10575(&)m 240 fnt82 3695 10578(in)m 3938(the)s
+4286(form)s 4810(of)s 5081(0)s 5256(spaces)s 850 10290(103)m
+2494(-)s 3493(Body)s 4067(parameters)s 5165(and)s 5569(right)s
+6080(parameters)s 7178(of)s 220 fnt35 7449 10287(@Open)m 240 fnt82
+0 9749(Actually)m 883(the)s 1238(precedence)s 2375(of)s 2653(juxtaposition)s
+3965(\(tw)s 2(o)k 4461(objects)s 5195(separated)s 6162(by)s
+6462(zero)s 6933(spaces\))s 7691(is)s 7908(a)s 8080(little)s
+8579(more)s 0 9461(complicated.)m 1333(If)s 1565(either)s 2170(of)s
+2443(the)s 2793(tw)s 2(o)k 3205(objects)s 3934(is)s
+4146(enclosed)s 5043(in)s 5288(braces,)s 6007(the)s 6357(precedence)s
+7489(is)s 7701(7)s 7871(as)s 8123(for)s 8463(one)s
+8867(or)s 0 9173(more)m 541(spaces.)s 1322(If)s 1545(neither)s
+2262(object)s 2899(is)s 3102(enclosed)s 3991(in)s 4227(braces,)s
+4937(the)s 5279(precedence)s 6403(is)s 6606(102)s 7014(as)s
+7257(sho)s 6(wn)k 7927(abo)s 3(v)k 3(e.)k
+8650(This)s 0 8885(complicated)m 1216(rule)s 1633(seems)s 2258(to)s
+2486(accord)s 3171(better)s 3764(with)s 4235(what)s 4750(people)s
+5434(e)s 3(xpect)k 6104(and)s 6498(need)s 6998(in)s
+7230(practice)s 8031(than)s 8490(a)s 8645(pure)s 0 8597(precedence)m
+1131(rule)s 1558(can)s 1947(do.)s 240 fnt84 0 7804(2.6.)m
+471(The)s 926(style)s 1446(and)s 1887(size)s 2314(of)s
+2586(objects)s 240 fnt82 480 7327(This)m 944(section)s 1666(e)s 3(xplains)k
+2499(ho)s 6(w)k 2948(Lout)s 3448(determines)s 4535(the)s
+4870(style)s 5365(and)s 5757(size)s 6172(of)s 6431(each)s
+6914(object.)s 7650(T)s 19(ogether)k 9(,)k 8579(these)s
+0 7039(attrib)m 4(utes)k 935(determine)s 1946(the)s 2294(object')s 13(s)k
+3088(\207nal)s 3568(appearance)s 4699(in)s 4942(the)s 5290(output.)s
+480 6665(The)m 908(style)s 1415(of)s 1686(an)s 1969(object)s
+2613(comprises)s 3633(the)s 3981(follo)s 6(wing:)k 0 6162(\213)m
+480(Which)s 1175(font)s 1620(f)s 2(amily)k 15(,)k
+2333(f)s 2(ace)k 2784(and)s 3188(size)s 3615(to)s
+3854(use)s 4229(\(also)s 4746(de\207ning)s 5584(the)s 220 fnt35
+5932 6159(f)m 240 fnt82 6050 6162(unit\);)m 0 5659(\213)m 480(Whether)s
+1363(small)s 1935(capitals)s 2715(are)s 3062(in)s 3305(ef)s 6(fect)k
+3901(or)s 4160(not;)s 0 5156(\213)m 480(What)s 1058(g)s 1(ap)k
+1456(to)s 1695(replace)s 2440(a)s 2606(single)s 3233(space)s
+3820(between)s 4674(tw)s 2(o)k 5084(objects)s 5812(by)s
+6106(\(also)s 6623(de\207ning)s 7461(the)s 220 fnt35 7809 5153(s)m
+240 fnt82 7972 5156(unit\);)m 0 4653(\213)m 480(The)s 900(interpretation)s
+2235(to)s 2465(place)s 3017(on)s 3306(white)s 3884(space)s
+4463(separating)s 5490(tw)s 2(o)k 5891(objects)s 6611(\()s
+220 fnt35 6684 4650(lout)m 240 fnt82 7033 4653(,)m 220 fnt35
+7132 4650(compress)m 240 fnt82 8077 4653(,)m 220 fnt35 8175 4650(separ)m 2(ate)k
+240 fnt82 9019 4653(,)m 220 fnt35 480 4362(troff)m 240 fnt82
+855 4365(,)m 962(or)s 220 fnt35 1221 4362(te)m 6(x)k
+240 fnt82 1566 4365(as)m 1816(in)s 2059(Section)s 2833(3.5\);)s
+0 3871(\213)m 480(The)s 908(current)s 1644(v)s 6(alue)k
+2212(of)s 2483(the)s 220 fnt35 2831 3868(y)m 240 fnt82
+2999 3871(and)m 220 fnt35 3403 3868(z)m 240 fnt82 3567 3871(units)m
+4083(of)s 4354(measurement)s 5688(\(Section)s 6541(3.6\);)s 0 3370(\213)m
+480(The)s 908(kind)s 1392(of)s 1663(paragraph)s 2676(breaking)s
+3566(to)s 3805(emplo)s 2(y)k 4575(\()s 220 fnt35
+4648 3367(adjust)m 240 fnt82 5229 3370(,)m 220 fnt35 5336 3367(r)m 2(agged)k
+240 fnt82 6005 3370(,)m 6112(etc.\))s 0 2867(\213)m 480(What)s
+1058(g)s 1(ap)k 1456(to)s 1695(insert)s 2285(between)s
+3139(the)s 3487(lines)s 3989(of)s 4260(paragraphs)s 5360(\(also)s
+5877(de\207ning)s 6715(the)s 220 fnt35 7063 2864(v)m 240 fnt82
+7232 2867(unit\);)m 0 2364(\213)m 480(Whether)s 1363(to)s 1602(permit)s
+2285(h)s 1(yphenation)k 3525(or)s 3784(not;)s 0 1861(\213)m
+480(What)s 1058(colour)s 1729(the)s 2077(object)s 2721(is)s
+2931(to)s 3170(appear)s 3867(in;)s 0 1358(\213)m 480(Whether)s
+220 fnt35 1363 1355(@Outline)m 240 fnt82 2332 1358(is)m 2542(in)s
+2785(ef)s 6(fect;)k 0 874(\213)m 480(The)s 908(language)s
+1828(of)s 2099(the)s 2447(object;)s 0 371(\213)m 480(Whether)s
+220 fnt35 1363 368(@V)m 17(Adjust)k 240 fnt82 2320 371(,)m
+220 fnt35 2427 368(@HAdjust)m 240 fnt82 3473 371(and)m 220 fnt35
+3877 368(@P)m 26(Adjust)k 240 fnt82 4885 371(are)m 5232(in)s
+5475(ef)s 6(fect.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 24 30
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(24)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(The)m 423(style)s 925(of)s
+1191(an)s 1468(object)s 2107(depends)s 2938(on)s 3229(where)s
+3864(it)s 4051(appears)s 4827(in)s 5064(the)s 5407(\207nal)s
+5882(document.)s 6984(F)s 3(or)k 7368(e)s 3(xample,)k
+8277(the)s 8619(style)s 0 12917(of)m 286(a)s 467(parameter)s
+1497(depends)s 2348(on)s 2661(where)s 3316(it)s 3524(is)s
+3749(used;)s 4316(the)s 4679(style)s 5201(of)s 5488(a)s
+5669(g)s 1(alle)k 3(y)k 6319(is)s 6544(the)s
+6908(style)s 7430(of)s 7717(the)s 8080(\207rst)s 8527(tar)s 4(get)k
+0 12629(that)m 415(it)s 603(attempts)s 1459(to)s 1695(attach)s
+2318(itself)s 2862(to.)s 3208(Of)s 3529(course,)s 4256(the)s
+4600(style)s 5103(of)s 5371(an)s 3(y)k 5764(object)s
+6404(can)s 6789(be)s 7068(changed)s 7920(by)s 8210(using)s
+8778(the)s 220 fnt35 0 12338(@F)m 6(ont)k 240 fnt82
+652 12341(,)m 220 fnt35 759 12338(@Break)m 240 fnt82 1555 12341(,)m
+220 fnt35 1662 12338(@Space)m 240 fnt82 2499 12341(,)m 220 fnt35
+2606 12338(@SetColour)m 240 fnt82 3863 12341(or)m 220 fnt35 4122 12338(@SetColor)m
+240 fnt82 5197 12341(,)m 220 fnt35 5304 12338(@Outline)m 240 fnt82
+6213 12341(,)m 6320(and)s 220 fnt35 6724 12338(@Language)m 240 fnt82
+7975 12341(symbols.)m 480 11967(There)m 1102(are)s 1459(no)s 1761(standard)s
+2639(def)s 2(ault)k 3369(v)s 6(alues)k 4035(for)s
+4382(style,)s 4950(e)s 3(xcept)k 5640(that)s 6068(small)s
+6649(capitals)s 7439(and)s 7852(outlining)s 8779(are)s 0 11679(initially)m
+800(of)s 6(f,)k 1183(the)s 1535(interpretation)s 2882(of)s
+3157(white)s 3748(space)s 4339(is)s 4553(initially)s 220 fnt35
+5354 11676(lout)m 240 fnt82 5703 11679(,)m 5814(and)s 6222(the)s
+6574(v)s 6(alues)k 7234(of)s 7509(the)s 220 fnt35
+7861 11676(y)m 240 fnt82 8033 11679(and)m 220 fnt35 8441 11676(z)m
+240 fnt82 8610 11679(units)m 0 11391(are)m 355(zero.)s 939(Therefore)s
+1945(one)s 2356(must)s 2890(ensure)s 3578(that)s 4005(the)s
+4362(root)s 4816(g)s 1(alle)k 3(y)k 5459(or)s
+5726(each)s 6230(of)s 6510(its)s 6795(components)s 8012(is)s
+8231(enclosed)s 0 11103(in)m 220 fnt35 238 11100(@F)m 6(ont)k
+240 fnt82 890 11103(,)m 220 fnt35 992 11100(@Break)m 240 fnt82
+1788 11103(,)m 220 fnt35 1890 11100(@SetColour)m 240 fnt82 3142 11103(or)m
+220 fnt35 3396 11100(@SetColor)m 240 fnt82 4471 11103(,)m 4573(and)s
+220 fnt35 4972 11100(@Language)m 240 fnt82 6218 11103(symbols.)m 7175(From)s
+7748(there)s 8276(the)s 8619(style)s 0 10815(is)m 206(passed)s
+897(to)s 1131(incoming)s 2083(g)s 1(alle)k 3(ys)k
+2802(and)s 3202(the)s 3545(objects)s 4268(within)s 4931(them.)s
+5568(Enclosure)s 6576(in)s 220 fnt35 6814 10812(@Space)m 240 fnt82
+7706 10815(is)m 7911(not)s 8272(required)s 0 10527(because)m 813(the)s
+220 fnt35 1161 10524(s)m 240 fnt82 1324 10527(unit)m 1756(is)s
+1966(also)s 2404(set)s 2729(by)s 220 fnt35 3023 10524(@F)m 6(ont)k
+240 fnt82 3735 10527(\(Section)m 4588(3.5\).)s 536 10153(The)m 959(remainder)s
+1983(of)s 2249(this)s 2641(section)s 3370(e)s 3(xplains)k
+4210(ho)s 6(w)k 4667(the)s 5010(size)s 5433(of)s
+5699(each)s 6189(object)s 6829(\(its)s 7179(width)s 7777(and)s
+8176(height)s 8829(on)s 0 9865(the)m 353(printed)s 1094(page\))s
+1679(is)s 1895(determined.)s 3140(W)s 19(e)k 3514(will)s
+3946(treat)s 4434(width)s 5042(only)s 15(,)k 5566(since)s
+6118(height)s 6782(is)s 6997(determined)s 8136(in)s 8385(e)s 3(xactly)k
+0 9577(the)m 348(same)s 895(w)s 2(ay)k 15(,)k
+1384(e)s 3(xcept)k 2065(that)s 2483(the)s 2831(complications)s
+4223(introduced)s 5304(by)s 5598(paragraph)s 6611(breaking)s 7501(are)s
+7848(absent.)s 480 9203(W)m 9(ith)k 1006(three)s 1539(e)s 3(xceptions)k
+2611(\(see)s 3051(belo)s 6(w\),)k 3817(the)s 4165(width)s
+4768(of)s 5039(an)s 5323(object)s 5967(is)s 6178(as)s
+6428(lar)s 4(ge)k 6958(as)s 7208(it)s 7401(possibly)s
+8253(could)s 8844(be)s 0 8915(without)m 784(violating)s 1679(a)s
+220 fnt35 1837 8912(@Wide)m 240 fnt82 2603 8915(symbol)m 3355(or)s
+3606(intruding)s 4528(into)s 4945(the)s 5285(space)s 5864(occupied)s
+6778(by)s 7064(neighbouring)s 8386(g)s 1(aps)k 8867(or)s
+0 8627(objects.)m 841(As)s 1158(an)s 1441(aid)s 1791(to)s
+2030(in)s 9(v)k 3(estig)k 1(ating)k 3305(this)s
+3701(rule,)s 4179(we)s 4514(will)s 4940(use)s 5315(the)s
+5663(de\207nition)s 220 fnt35 480 8126(def @TightBo)m 6(x r)k -3(ight x)k
+480 7838({)m 480 7550( "0 0 mo)m 3(v)k 5(eto xsiz)k 3(e 0 lineto xsiz)k 3(e ysiz)k 3(e lineto 0 ysiz)k 3(e lineto closepath strok)k 4(e")k
+480 7262( @Gr)m 2(aphic x)k 480 6974(})m 240 fnt82 0 6480(which)m
+657(dra)s 3(ws)k 1291(a)s 1472(box)s 1903(around)s
+2641(the)s 3004(boundary)s 3978(of)s 4265(its)s 4556(right)s
+5082(parameter)s 6111(\(Section)s 6980(3.38\))s 7543(with)s 8040(no)s
+8349(mar)s 4(gin.)k 0 6192(The)m 428(result)s 1018(of)s
+220 fnt35 480 5741(5c @Wide @TightBo)m 6(x metempsychosis)k 240 fnt82 0 5242(is)m
+2835 215 0 106 240 288 60 480 4737 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 52(metempsychosis)m
+grestore
+0 4286(The)m 432(widest)s 1120(that)s 220 fnt35
+1542 4283(@TightBo)m 6(x metempsychosis)k 240 fnt82 4377 4286(could)m 4971(possibly)s
+5827(be)s 6113(is)s 6327(\207v)s 3(e)k 6743(centimetres,)s
+7954(and)s 8363(accord)s 8998(-)s 0 3998(ingly)m 552(that)s
+977(is)s 1194(its)s 1477(width.)s 2193(The)s 2628(same)s
+3182(applies)s 3917(to)s 220 fnt35 4163 3995(metempsychosis)m 240 fnt82
+5791 3998(,)m 5905(which)s 6554(is)s 6771(\207v)s 3(e)k
+7190(centimetres)s 8348(wide)s 8876(as)s 0 3710(well.)m 583(Note)s
+1113(carefully)s 2024(that)s 2451(there)s 2992(is)s 3211(no)s
+3513(object)s 4166(in)s 4418(this)s 4822(e)s 3(xample)k
+5694(whose)s 6371(width)s 6982(is)s 7200(equal)s 7782(to)s
+8030(the)s 8387(sum)s 8855(of)s 0 3422(the)m 348(widths)s
+1037(of)s 1308(the)s 1656(letters)s 2289(of)s 220 fnt35
+2560 3419(metempsychosis)m 240 fnt82 4188 3422(.)m 480 3048(The)m 903(\207rst)s
+1329(of)s 1595(the)s 1938(three)s 2466(e)s 3(xceptions)k
+3532(to)s 3766(the)s 4109(`as)s 4433(wide)s 4949(as)s
+5194(possible')s 6085(rule)s 6507(is)s 6712(the)s 220 fnt35
+7055 3045(@HContr)m 2(act)k 240 fnt82 8314 3048(symbol,)m 0 2760(which)m
+644(causes)s 1322(the)s 1672(width)s 2277(of)s 2551(its)s
+2829(right)s 3343(parameter)s 4360(to)s 4601(be)s 4886(reduced)s
+5703(to)s 5945(a)s 6114(reasonable)s 7194(minimum)s 8187(\(a)s
+8435(formal)s 0 2472(de\207nition)m 974(will)s 1400(not)s 1766(be)s
+2048(attempted\):)s 220 fnt35 480 1971(5c @Wide @HContr)m 2(act @TightBo)k 6(x metempsychosis)k
+240 fnt82 0 1472(produces)m 1572 215 0 106 240 288 60 480 917 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 52(metempsychosis)m
+grestore
+0 466(The)m 482(object)s
+220 fnt35 1180 463(@HContr)m 2(act @TightBo)k 6(x metempsychosis)k 240 fnt82
+5334 466(is)m 5598(still)s 6064(\207v)s 3(e)k 6530(centimetres)s
+7735(wide,)s 8361(b)s 4(ut)k 8778(the)s 0 178(object)m
+220 fnt35 644 175(@TightBo)m 6(x metempsychosis)k 240 fnt82 3475 178(has)m
+3845(been)s 4354(reduced.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 25 31
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(2.6.)m 454(The)s 866(style)s 1356(and)s
+1782(size)s 2193(of)s 2474(objects)s 240 fnt84 8833 13840(25)m
+240 fnt82 480 13205(The)m 922(second)s 1659(of)s 1945(the)s
+2307(three)s 2855(e)s 3(xceptions)k 3940(is)s 4165(the)s
+4527(horizontal)s 5565(concatenation)s 6965(symbol)s 220 fnt35 7739 13202(|)m
+240 fnt82 7851 13205(\(and)m 8348(also)s 220 fnt35 8801 13202(&)m
+240 fnt82 8943 13205(\).)m 0 12917(Consider)m 924(this)s 1320(e)s 3(xample:)k
+220 fnt35 480 12416(5c @Wide @TightBo)m 6(x { A |1c B |1c C })k 240 fnt82 0 11917(As)m
+317(usual,)s 929(the)s 1277(right)s 1788(parameter)s 2802(of)s
+220 fnt35 3073 11914(@Wide)m 240 fnt82 3847 11917(is)m 4057(\207v)s 3(e)k
+4469(centimetres)s 5620(wide,)s 6192(and)s 6596(the)s 6944(result)s
+7534(looks)s 8104(lik)s 2(e)k 8516(this:)s 2835 165 0 57 240 288 60 480 11412 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 3(A)m
+737(B)s 1447(C)s
+grestore
+0 10961(Lout)m 512(has)s 882(to)s
+1121(apportion)s 2095(the)s 2443(size)s 2870(minus)s 3506(inter)s 4(-column)k
+4793(g)s 1(aps)k 5282(among)s 5987(the)s 6335(three)s
+6868(columns.)s 480 10587(If)m 707(the)s 1052(columns)s 1911(are)s
+2255(wide)s 2772(enough)s 3532(to)s 3768(require)s 4497(paragraph)s
+5507(breaking,)s 6447(Lout)s 6956(will)s 7379(assign)s 8031(sizes)s
+8543(to)s 8778(the)s 0 10299(columns)m 864(in)s 1110(such)s
+1609(a)s 1778(w)s 2(ay)k 2232(as)s 2484(to)s
+2726(lea)s 4(v)k 3(e)k 3282(narro)s 6(w)k
+4010(columns)s 4875(unbrok)s 2(en)k 5837(and)s 6244(break)s
+6839(wider)s 7446(columns)s 8311(to)s 8553(equal)s 0 10011(width,)m
+652(occup)s 2(ying)k 1702(the)s 2051(full)s 2438(size.)s
+2974(Otherwise,)s 4064(paragraph)s 5077(breaking)s 5968(is)s 6179(not)s
+6546(required,)s 7450(and)s 7855(each)s 8351(column)s 0 9723(will)m
+431(be)s 719(assigned)s 1607(a)s 1779(reasonable)s 2863(minimum)s
+3858(size)s 4291(in)s 4540(the)s 4894(manner)s 5677(of)s
+220 fnt35 5953 9720(@HContr)m 2(act)k 240 fnt82 7157 9723(,)m
+7270(e)s 3(xcept)k 7957(that)s 8381(the)s 8735(last)s
+0 9435(column)m 775(recei)s 6(v)k 3(es)k 1599(all)s
+1892(the)s 2240(lefto)s 3(v)k 3(er)k 3036(width.)s
+3745(F)s 3(or)k 4134(e)s 3(xample,)k 220 fnt35
+480 8934(5c @Wide { @TightBo)m 6(x A |1c @TightBo)k 6(x B |1c @TightBo)k 6(x C })k 240 fnt82
+0 8435(has)m 370(result)s 170 165 0 57 240 288 60 480 7980 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 3(A)m
+grestore
+143 165 0 57 240 288 60 1217 7980 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 3(B)m
+grestore
+1388 165 0 57 240 288 60 1927 7980 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 3(C)m
+
+grestore
+0 7529(If)m 237(it)s 436(is)s 653(desired)s 1408(that)s
+1833(the)s 2188(lefto)s 3(v)k 3(er)k 2991(width)s
+3600(remain)s 4327(unused,)s 5120(rather)s 5743(than)s 6219(going)s
+6825(into)s 7257(the)s 7612(last)s 8010(column,)s 8843(an)s
+0 7241(empty)m 654(column)s 1431(can)s 1822(be)s 2106(appended,)s
+3133(or)s 3394(the)s 3744(last)s 4137(column)s 4914(can)s
+5305(be)s 5589(enclosed)s 6486(in)s 220 fnt35 6731 7238(@HContr)m 2(act)k
+240 fnt82 7935 7241(.)m 8101(T)s 19(w)k 2(o)k
+8575(other)s 0 6953(w)m 2(ays)k 560(to)s 819(apportion)s
+1813(the)s 2181(lefto)s 3(v)k 3(er)k 2997(width)s
+3619(are)s 3986(pro)s 3(vided)k 4912(by)s 5226(the)s
+220 fnt35 5594 6950(@HExpand)m 240 fnt82 6787 6953(and)m 220 fnt35
+7211 6950(@HAdjust)m 240 fnt82 8277 6953(symbols)m 0 6665(\(Sections)m 940(3.13)s
+1404(and)s 1808(3.16\).)s 480 6291(The)m 914(third)s 1430(and)s
+1841(\207nal)s 2328(e)s 3(xception)k 3319(to)s 3565(the)s
+3920(`as)s 4255(wide)s 4783(as)s 5040(possible')s 5943(rule)s
+6377(concerns)s 7285(the)s 7640(components)s 8855(of)s 0 6003(the)m
+348(root)s 793(g)s 1(alle)k 3(y)k 15(.)k
+1522(Each)s 2057(is)s 2267(considered)s 3361(to)s 3600(be)s
+3882(enclosed)s 4777(in)s 220 fnt35 5020 6000(@HContr)m 2(act)k
+240 fnt82 6284 6003(and)m 220 fnt35 6688 6000(@VContr)m 2(act)k
+240 fnt82 7940 6003(symbols.)m 480 5629(Up)m 836(to)s 1086(this)s
+1493(point)s 2056(we)s 2401(ha)s 4(v)k 3(e)k
+2913(treated)s 3631(width)s 4244(as)s 4505(a)s 4681(single)s
+5319(quantity)s 15(,)k 6206(b)s 4(ut)k 6579(of)s
+6860(course)s 7551(it)s 7754(has)s 8135(tw)s 2(o)k
+8556(parts:)s 0 5341(width)m 602(to)s 841(left)s 1218(and)s
+1622(right)s 2133(of)s 2404(the)s 2752(mark.)s 3407(The)s
+3835(`as)s 4164(wide)s 4685(as)s 4935(possible')s 5831(rule)s
+6258(applies)s 6986(to)s 7225(both)s 7708(directions:)s 220 fnt35
+480 4840(@HContr)m 2(act { @TightBo)k 6(x 953^.05 /0.5c @TightBo)k 6(x 2^.8286 })k 240 fnt82
+0 4341(has)m 370(result)s 877 170 344 59 240 288 60 480 3881 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+0 5(953)m 344(.05)s
+grestore
+877 167 344 57 240 288 60 480 3431 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+230 3(2)m
+344(.8286)s
+grestore
+0 2980(Lefto)m 3(v)k 3(er)k 868(width)s
+1461(usually)s 2197(goes)s 2678(to)s 2908(the)s 3247(right,)s
+3796(as)s 4037(we)s 4364(ha)s 4(v)k 3(e)k
+4856(seen,)s 5379(b)s 4(ut)k 5732(here)s 6190(some)s
+6742(width)s 7335(w)s 2(as)k 7747(a)s 4(v)k 6(ailable)k
+8646(only)s 0 2692(to)m 239(the)s 587(left)s 964(of)s
+220 fnt35 1235 2689(2.8286)m 240 fnt82 1958 2692(o)m 6(wing)k
+2604(to)s 2843(the)s 3191(column)s 3966(mark)s 4518(alignment.)s
+240 fnt84 0 1899(2.7.)m 471(Galleys)s 1282(and)s 1723(tar)s 2(gets)k
+240 fnt82 480 1422(The)m 909(beha)s 4(viour)k 1924(of)s
+2197(g)s 1(alle)k 3(ys)k 2923(and)s 3328(their)s
+3827(tar)s 4(gets,)k 4568(as)s 4820(described)s 5796(in)s
+6040(Section)s 6816(1.4,)s 7225(can)s 7616(be)s 7900(summarized)s
+0 1134(in)m 243(three)s 776(la)s 3(ws:)k 240 fnt83
+0 682(F)m 10(ir)k 2(st)k 540(Law)s 240 fnt82
+949 680(:)m 1139(The)s 1592(\207rst)s 2047(tar)s 4(get)k
+2671(is)s 2905(the)s 3278(closest)s 4012(in)s 9(v)k 4(ocation)k
+5091(of)s 5386(the)s 5759(tar)s 4(get)k 6382(symbol,)s
+7219(either)s 7846(preceding)s 8867(or)s 0 392(follo)m 6(wing)k
+972(the)s 1315(in)s 9(v)k 4(ocation)k 2363(point)s
+2910(of)s 3175(the)s 3518(g)s 1(alle)k 3(y)k
+4146(as)s 4391(required,)s 5288(which)s 5925(has)s 6289(suf\207cient)s
+7233(space)s 7814(to)s 8048(recei)s 6(v)k 3(e)k
+8778(the)s 0 104(\207rst)m 431(component;)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 26 32
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(26)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 0 13205(Second)m 773(Law)s 240 fnt82 1182 13203(:)m
+1364(Each)s 1915(subsequent)s 3055(tar)s 4(get)k 3670(is)s
+3896(the)s 4259(closest)s 4985(in)s 9(v)k 4(ocation)k
+6055(of)s 6342(the)s 6706(tar)s 4(get)k 7321(symbol,)s
+8149(follo)s 6(wing)k 0 12915(the)m 337(pre)s 6(vious)k
+1195(tar)s 4(get)k 1783(and)s 2176(lying)s 2710(within)s
+3367(the)s 3704(same)s 4240(g)s 1(alle)k 3(y)k 15(,)k
+4901(which)s 5532(has)s 5891(suf\207cient)s 6829(space)s 7405(to)s
+7633(recei)s 6(v)k 3(e)k 8358(the)s 8695(\207rst)s
+0 12627(remaining)m 1022(component;)s 240 fnt83 0 12124(Thir)m 8(d)k
+607(Law)s 240 fnt82 1016 12122(:)m 1199(A)s 1446(recepti)s 6(v)k 3(e)k
+2385(symbol)s 3162(that)s 3597(does)s 4104(not)s 4487(recei)s 6(v)k 3(e)k
+5240(at)s 5489(least)s 6003(one)s 6422(component)s 7563(of)s
+7851(an)s 3(y)k 8265(g)s 1(alle)k 3(y)k
+8916(is)s 0 11834(replaced)m 867(by)s 220 fnt35 1161 11831(@Null)m
+240 fnt82 1746 11834(.)m 0 11331(The)m 436(terms)s 1025(`closest,)s 16(')k
+1918(`preceding,)s 16(')k 3104(and)s 3516(`follo)s 6(wing')k
+4639(refer)s 5156(to)s 5403(position)s 6239(in)s 6490(the)s
+6846(\207nal)s 7334(printed)s 8078(document.)s 0 11043(This)m 476(section)s
+1210(e)s 3(xplains)k 2055(the)s 2403(operation)s 3363(of)s
+3634(these)s 4181(la)s 3(ws)k 4667(in)s 4910(Basser)s
+5607(Lout.)s 480 10669(When)m 1100(a)s 1257(g)s 1(alle)k 3(y)k
+1881(cannot)s 2570(be)s 2843(\207tted)s 3382(into)s 3798(just)s
+4194(one)s 4586(tar)s 4(get,)k 5223(Lout)s 5726(must)s
+6241(\207nd)s 6663(points)s 7290(in)s 7523(the)s 7862(g)s 1(alle)k 3(y)k
+8486(where)s 0 10381(it)m 191(can)s 579(be)s 860(split)s
+1330(in)s 1572(tw)s 2(o.)k 2091(The)s 2518(object)s
+3161(lying)s 3705(between)s 4558(tw)s 2(o)k 4966(neighbouring)s
+6295(potential)s 7185(split)s 7655(points)s 8290(is)s 8498(called)s
+0 10093(a)m 240 fnt83 166 10095(component)m 240 fnt82 1281 10093(of)m
+1552(the)s 1900(g)s 1(alle)k 3(y)k 15(.)k
+2629(By)s 2963(de\207nition,)s 3987(a)s 4153(component)s 5277(cannot)s
+5975(be)s 6257(split.)s 480 9719(T)m 19(o)k 813(determine)s
+1857(the)s 2239(components)s 3480(of)s 3785(a)s 3984(g)s 1(alle)k 3(y)k 15(,)k
+4690(e)s 3(xpand)k 5470(all)s 5797(symbols)s 6679(other)s
+7264(than)s 7766(recursi)s 6(v)k 3(e)k 8722(and)s
+0 9431(recepti)m 6(v)k 3(e)k 909(ones,)s 1442(discard)s
+2177(all)s 220 fnt35 2457 9428(@F)m 6(ont)k 240 fnt82
+3109 9431(,)m 220 fnt35 3203 9428(@Break)m 240 fnt82 3999 9431(,)m
+220 fnt35 4093 9428(@Space)m 240 fnt82 4930 9431(,)m 220 fnt35
+5024 9428(@SetColor)m 240 fnt82 6099 9431(,)m 220 fnt35 6193 9428(@SetColour)m
+240 fnt82 7390 9431(,)m 7484(and)s 220 fnt35 7875 9428(@Language)m
+240 fnt82 0 9143(symbols,)m 908(perform)s 1740(paragraph)s 2756(breaking)s
+3649(as)s 3902(required,)s 4809(and)s 5216(discard)s 5967(all)s
+6263(redundant)s 7283(braces.)s 8060(Then)s 8613(vie)s 6(w)k
+0 8855(the)m 367(g)s 1(alle)k 3(y)k 1020(as)s
+1290(a)s 1475(sequence)s 2428(of)s 2718(one)s 3140(or)s
+3418(more)s 3984(objects)s 4732(separated)s 5711(by)s 6025(v)s 3(ertical)k
+6811(concatenation)s 8216(symbols;)s 0 8567(these)m 567(are)s 935(the)s
+1304(components)s 2533(and)s 2958(split)s 3450(points,)s 4163(e)s 3(xcept)k
+4865(that)s 5304(concatenation)s 6710(symbols)s 7580(whose)s 8269(g)s 1(aps)k
+8779(are)s 0 8279(unbreakable)m 1225(\(Section)s 2078(3.2\))s 2506(are)s
+2853(not)s 3219(eligible)s 3991(to)s 4230(be)s 4512(split)s
+4983(points.)s 5732(F)s 3(or)k 6121(e)s 3(xample,)k
+7035(gi)s 6(v)k 3(en)k 7615(the)s 7963(de\207nition)s
+220 fnt35 480 7778(def @Section into { @SectionPlace&&preceding })m 480 7490( named @Title {})m 480 7202( r)m -3(ight @Body)k
+480 6914({)m 480 6626( 15p @F)m 6(ont { @Title //0.7f })k 480 6338( //)m 480 6050( @Body)m
+480 5762(})m 240 fnt82 0 5268(the)m 348(g)s 1(alle)k 3(y)k
+220 fnt35 480 4767(@Section)m 480 4479( @Title { Introduction })m 480 4191({ )m 11(This is a subject that really)k
+480 3903(needs no introduction.)m 13( })k 240 fnt82 0 3409(becomes)m 220 fnt35
+480 2962(Introduction)m 480 2674(//0.7f)m 480 2386({})m 480 2098(//)m 480 1810(This is a subject that really needs)m
+480 1522(//1vx)m 480 1234(no introduction.)m 240 fnt82 0 780(with)m 482(four)s
+939(components.)s 2260(If)s 220 fnt35 2489 777(@Body)m 240 fnt82
+3269 780(had)m 3673(been)s 4181(preceded)s 5102(by)s 220 fnt35
+5395 777(|1.0c)m 240 fnt82 5921 780(in)m 6164(the)s 6511(de\207nition,)s
+7535(the)s 7882(result)s 8471(w)s 2(ould)k 0 492(ha)m 4(v)k 3(e)k
+501(been)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 27 33
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(2.7.)m 454(Galle)s 7(ys)k 1232(and)s
+1658(tar)s 8(g)k 2(ets)k 240 fnt84 8831 13840(27)m
+220 fnt35 480 13211(Introduction)m 480 12923(//0.7f)m 480 12635({})m 480 12347(//)m
+480 12059(|1.0c { )m 11(This is a subject that really needs //1vx no introduction.)k 13( })k 240 fnt82 0 11561(with)m
+220 fnt35 524 11558(//1vx)m 240 fnt82 1089 11561(b)m 4(uried)k
+1796(within)s 2507(one)s 2951(component)s 4118(and)s 4564(hence)s
+5221(not)s 5629(a)s 5838(potential)s 6771(split)s 7285(point.)s
+7983(If)s 220 fnt35 8256 11558(0.7f)m 240 fnt82 8722 11561(had)m
+0 11273(been)m 220 fnt35 525 11270(0.7fu)m 240 fnt82 999 11273(,)m
+1123(the)s 1488(g)s 1(ap)k 1903(w)s 2(ould)k
+2575(ha)s 4(v)k 3(e)k 3092(been)s 3618(unbreakable)s
+4860(and)s 220 fnt35 5281 11270(//0.7fu)m 240 fnt82 5954 11273(w)m 2(ould)k
+6625(not)s 7008(ha)s 4(v)k 3(e)k 7526(been)s
+8052(a)s 8235(potential)s 0 10985(split)m 471(point.)s 480 10611(V)m 26(ersion)k
+1310(3.03)s 1816(has)s 2228(liberalized)s 3335(this)s 3773(some)s 6(what)k
+4840(in)s 5125(the)s 5515(follo)s 6(wing)k 6534(w)s 2(ay)k 15(.)k
+7122(When)s 7793(a)s 8002(component)s 0 10323(consists)m 808(of)s
+1080(a)s 1247(horizontal)s 2271(sequence)s 3205(of)s 3477(tw)s 2(o)k
+3887(or)s 4147(more)s 4695(objects)s 240 fnt83 5423 10325(A)m
+168 fnt78 5558 10232(1)m 240 fnt78 5637 10317(,)m 5746(\274)s
+6046(,)s 240 fnt83 6155 10325(A)m 168 fnt83 6290 10238(n)m
+240 fnt82 6431 10323(separated)m 7391(by)s 220 fnt35 7686 10320(|)m
+240 fnt82 7784 10323(\(not)m 220 fnt35 8229 10320(||)m 240 fnt82
+8323 10323(,)m 8431(not)s 220 fnt35 8798 10320(&)m 240 fnt82
+8940 10323(\),)m 0 10035(Lout)m 506(will)s 926(in)s 9(v)k 3(estig)k 1(ate)k
+1998(the)s 2339(component)s 3457(to)s 3690(see)s 4044(whether)s
+4868(it)s 5054(can)s 5436(be)s 5712(brok)s 2(en)k
+6426(up.)s 6823(It)s 7022(looks)s 7586(at)s 7811(each)s
+240 fnt83 8300 10037(A)m 168 fnt83 8435 9950(i)m 240 fnt82
+8533 10035(to)m 8765(see)s 0 9747(whether)m 830(it)s 1023(is)s
+1234(a)s 1401(v)s 3(ertical)k 2169(concatenation)s 3555(of)s
+3827(objects)s 240 fnt83 4556 9749(A)m 168 fnt83 4691 9662(i)m
+168 fnt78 4743 9656(1)m 240 fnt78 4822 9741(,)m 4932(\274)s
+5232(,)s 240 fnt83 5342 9749(A)m 168 fnt83 5477 9662(im)m
+240 fnt82 5641 9747(;)m 5754(if)s 5972(tw)s 2(o)k
+6383(or)s 6643(more)s 7191(of)s 7463(the)s 240 fnt83
+7812 9749(A)m 168 fnt83 7947 9662(i)m 240 fnt82 8052 9747(satisfy)m
+8730(this)s 0 9459(condition,)m 1009(the)s 1354(component)s 2475(will)s
+2898(not)s 3262(be)s 3541(brok)s 2(en)k 4258(up.)s
+4659(So)s 4962(no)s 6(w)k 5421(suppose)s 6246(we)s
+6578(ha)s 4(v)k 3(e)k 7076(just)s 7479(one)s
+240 fnt83 7878 9461(A)m 168 fnt83 8013 9374(i)m 240 fnt82
+8114 9459(which)m 8753(is)s 8960(a)s 0 9171(v)m 3(ertical)k
+757(concatenation.)s 2239(Lout)s 2741(will)s 3156(break)s 3738(the)s
+4076(component)s 5189(into)s 5604(one)s 5996(component)s 7109(for)s
+7437(each)s 7922(of)s 8182(the)s 240 fnt83 8520 9173(A)m
+168 fnt83 8655 9086(i)m 168 fnt78 8707 9080(1)m 240 fnt78
+8775 9165(,)m 8851(\274)s 3 8877(,)m 240 fnt83 80 8885(A)m
+168 fnt83 215 8798(im)m 240 fnt82 379 8883(,)m 476(pro)s 3(vided)k
+1373(that)s 1781(the)s 3(y)k 2234(are)s 2571(separated)s
+3521(by)s 220 fnt35 3806 8880(//)m 240 fnt82 3981 8883(symbols)m
+4820(\(not)s 220 fnt35 5255 8880(/)m 240 fnt82 5319 8883(\),)m
+5495(and)s 5890(pro)s 3(vided)k 6786(this)s 7172(can)s
+7551(be)s 7823(done)s 8335(without)s 0 8595(introducing)m 1155(an)s 3(y)k
+1550(apparent)s 2431(change)s 3164(into)s 3587(the)s 3933(appearance)s
+5062(of)s 5332(the)s 5678(component)s 6800(\(this)s 7274(second)s
+7995(rule)s 8420(will)s 8844(be)s 0 8307(satis\207ed)m 847(if)s
+1071(the)s 1426(other)s 240 fnt83 1984 8309(A)m 168 fnt83
+2119 8222(j)m 240 fnt82 2232 8307(are)m 2586(not)s 2959(v)s 3(ery)k
+3442(lar)s 4(ge\).)k 4165(The)s 4600(e)s 3(xample)k
+5470(abo)s 3(v)k 3(e)k 6099(satis\207es)s 6913(all)s
+7213(these)s 7767(rules)s 8289(and)s 8700(will)s 0 7996(be)m
+282(brok)s 2(en)k 1002(up)s 1295(into)s 1720(tw)s 2(o)k
+2130(components,)s 3394(so)s 3660(the)s 220 fnt35 4008 7993(//1vx)m
+240 fnt82 4530 7996(becomes)m 5418(a)s 5584(potential)s 6475(split)s
+6946(point)s 7498(after)s 7994(all.)s 480 7622(The)m 913(lines)s
+1421(of)s 1697(a)s 1869(paragraph)s 2887(become)s 3693(separate)s
+4536(components)s 5750(if)s 5972(the)s 6326(paragraph)s 7344(occupies)s
+8238(an)s 8527(entire)s 0 7334(component)m 1151(before)s 1844(breaking;)s
+2820(otherwise)s 3833(the)s 3(y)k 4323(are)s 4697(enclosed)s
+5619(in)s 5890(a)s 220 fnt35 6083 7331(@OneRo)m 3(w)k
+240 fnt82 7241 7334(symbol)m 8028(within)s 8724(one)s 0 7046(component.)m
+1237(The)s 1675(same)s 2232(is)s 2452(true)s 2888(of)s
+3169(incoming)s 4136(components)s 5354(of)s 5635(other)s 6195(g)s 1(alle)k 3(ys.)k
+7042(If)s 7282(a)s 220 fnt35 7458 7043(@Galle)m 4(y)k
+240 fnt82 8366 7046(symbol)m 0 6758(occupies)m 892(an)s 1180(entire)s
+1783(component)s 2912(by)s 3211(the)s 3563(rules)s 4083(abo)s 3(v)k 3(e,)k
+4761(then)s 5234(the)s 5587(incoming)s 6549(components)s 7761(that)s
+8184(replace)s 8934(it)s 0 6470(become)m 800(components)s 2008(of)s
+2279(their)s 2776(ne)s 6(w)k 3223(home:)s 220 fnt35
+480 5916(An e)m 6(xample)k 480 5628(//0.5c)m 480 5340(@Galle)m 4(y)k
+480 5052(//0.5c)m 480 4764(@SomethingList)m 240 fnt78 2500 5625(\336)m 220 fnt35
+3141 5916(An e)m 6(xample)k 3141 5628(//0.5c)m 3141 5340(Incoming components)m 3141 5052(//0.2c)m
+3141 4764(from some other galle)m 4(y)k 3141 4476(//0.5c)m 3141 4188(@SomethingList)m 240 fnt82
+0 3632(Otherwise)m 1062(the)s 1435(incoming)s 2416(components)s 3649(are)s
+4020(grouped)s 4888(within)s 5580(a)s 220 fnt35 5771 3629(@OneRo)m 3(w)k
+240 fnt82 6926 3632(symbol)m 7711(and)s 8139(lie)s 8458(within)s
+0 3344(one)m 402(component.)s 480 2970(This)m 985(distinction)s 2080(has)s
+2480(a)s 2675(mark)s 2(ed)k 3477(ef)s 6(fect)k
+4103(on)s 4429(the)s 4806(v)s 3(ertical)k 5603(concatenation)s
+7017(symbol)s 220 fnt35 7806 2967(//1.1b)m 240 fnt82 8347 2970(,)m
+8484(which)s 0 2682(calls)m 509(for)s 868(more)s 1436(space)s
+2045(than)s 2535(is)s 2766(a)s 4(v)k 6(ailable)k
+3695(\(Section)s 4570(3.2\).)s 5134(There)s 5768(is)s 5999(no)s
+6314(room)s 6900(for)s 7259(this)s 7676(symbol)s 8458(within)s
+0 2394(an)m 3(y)k 402(component,)s 1579(so)s 1851(it)s
+2049(will)s 2481(force)s 3033(a)s 3205(split)s 3682(and)s
+4092(be)s 4379(discarded)s 5359(in)s 5608(that)s 6032(case.)s
+6613(But)s 7025(it)s 7223(can)s 7618(be)s 7906(promoted)s
+8887(to)s 0 2106(between)m 854(tw)s 2(o)k 1264(components.)s
+480 1732(Components)m 1749(may)s 2223(be)s 2513(separated)s 3481(by)s
+220 fnt35 3783 1729(/)m 240 fnt82 3914 1732(as)m 4172(well)s
+4646(as)s 4904(by)s 220 fnt35 5206 1729(//)m 240 fnt82
+5331 1732(,)m 5445(gi)s 6(ving)k 6112(rise)s 6520(to)s
+6767(column)s 7550(mark)s 8110(alignment)s 0 1444(between)m 854(adjacent)s
+1710(components:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 28 34
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(28)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s gsave
+480 12008 translate
+240 fnt82 1701 1360 567 1360 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1701 1360 567 1360 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+1134 340 567 340 240 288 60 0 1020 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+1134 340 0 340 240 288 60 567 510 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+736 340 283 340 240 288 60 284 0 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+
+grestore
+end end restore
+grestore
+240 fnt82 0 11557(When)m 688(aligned)s 1509(components)s
+2777(are)s 3183(promoted)s 4218(into)s 4702(dif)s 6(ferent)k
+5637(tar)s 4(gets,)k 6435(the)s 6843(meaning)s 7779(of)s
+8110(alignment)s 0 11269(becomes)m 882(v)s 3(ery)k 1351(doubtful.)s
+2319(F)s 3(or)k 2702(e)s 3(xample,)k 3609(what)s
+4127(if)s 4338(the)s 4679(tar)s 4(gets)k 5355(are)s
+5696(in)s 5932(dif)s 6(ferent)k 6800(columns)s 7656(of)s
+7920(one)s 8315(page,)s 8867(or)s 0 10981(what)m 525(if)s
+742(one)s 1144(lies)s 1526(within)s 220 fnt35 2194 10978(90d @Rotate)m
+240 fnt82 3482 10981(?)m 480 10607(The)m 908(truth)s 1416(is)s
+1626(that)s 220 fnt35 2044 10604(/)m 240 fnt82 2168 10607(causes)m
+2843(all)s 3136(the)s 3484(objects)s 4212(that)s 4630(share)s
+5190(a)s 5356(mark)s 5908(to)s 6147(ha)s 4(v)k 3(e)k
+6648(equal)s 7221(width:)s 1701 1360 567 1360 240 288 60 480 8907 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1701 1360 567 1360 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+1701 340 567 340 240 288 60 0 1020 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+1134 340 567 340 240 288 60 0 0 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+
+grestore
+1701 340 567 340 240 288 60 0 510 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+1134 340 0 340 240 288 60 567 0 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+
+grestore
+1701 340 567 340 240 288 60 0 0 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath stroke
+grestore
+736 340 283 340 240 288 60 284 0 LoutGr2
+0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto closepath 0.8 setgray fill
+grestore
+
+grestore
+
+grestore
+
+grestore
+end end restore
+grestore
+0 8455(This)m 495(is)s 724(a)s
+909(consequence)s 2207(of)s 2497(the)s 2864(`as)s 3212(wide)s
+3753(as)s 4022(possible')s 4937(rule)s 5383(\(Section)s 6255(2.6\).)s
+6817(Mark)s 7415(alignment)s 8451(occurs)s 240 fnt83 0 8169(incidentally)m
+240 fnt82 1124 8167(,)m 1231(whene)s 6(v)k 3(er)k
+2212(the)s 2560(fragments)s 3566(are)s 3913(placed)s 4595(into)s
+5020(similar)s 5742(conte)s 3(xts.)k 480 7793(In)m 723(this)s
+1106(connection)s 2200(we)s 2521(must)s 3033(also)s 3458(consider)s
+4315(the)s 4649(special)s 5354(case)s 5808(of)s 6066(a)s
+220 fnt35 6218 7790(@Galle)m 4(y)k 240 fnt82 7103 7793(symbol)m
+7850(which)s 8478(shares)s 0 7505(its)m 276(column)s 1051(mark)s
+1603(with)s 2085(some)s 2646(other)s 3197(object:)s 220 fnt35
+480 7004(@Galle)m 4(y)k 480 6716(/0.2c)m 480 6428(@SomethingList)m 240 fnt82
+0 5929(\(The)m 220 fnt35 501 5926(@Galle)m 4(y)k 240 fnt82
+1392 5929(may)m 1851(or)s 2104(may)s 2563(not)s 2922(occup)s 2(y)k
+3660(an)s 3936(entire)s 4528(component;)s 5698(that)s 6109(doesn')s 4(t)k
+6862(matter)s 7525(here.\))s 8177(If)s 8400(incom)s 8998(-)s
+0 5641(ing)m 355(components)s 1559(are)s 1901(separated)s 2857(by)s
+220 fnt35 3147 5638(//)m 240 fnt82 3327 5641(rather)m 3939(than)s
+4404(by)s 220 fnt35 4693 5638(/)m 240 fnt82 4757 5641(,)m
+4860(the)s 5204(meaning)s 6076(is)s 6282(so)s 6544(doubtful)s
+7405(that)s 7819(this)s 8211(is)s 8416(forbid)s 8998(-)s
+0 5353(den.)m 496(In)s 738(f)s 2(act,)k 1186(a)s
+1337(g)s 1(alle)k 3(y)k 1957(whose)s 2611(components)s
+3804(replace)s 4535(such)s 5017(a)s 220 fnt35 5168 5350(@Galle)m 4(y)k
+240 fnt82 6052 5353(must)m 6563(ha)s 4(v)k 3(e)k
+7049(a)s 7201(single)s 7814(column)s 8574(mark)s 0 5065(running)m
+783(its)s 1043(full)s 1413(length;)s 2108(that)s 2510(is,)s
+2760(its)s 3021(components)s 4213(must)s 4722(all)s 4999(share)s
+5544(a)s 5694(single)s 6305(column)s 7065(mark.)s 7704(This)s
+8164(mark)s 8700(will)s 0 4777(be)m 281(mer)s 4(ged)k
+1050(with)s 1530(the)s 1876(column)s 2649(mark)s 3199(passing)s
+3969(through)s 4769(each)s 220 fnt35 5262 4774(@Galle)m 4(y)k
+240 fnt82 6158 4777(that)m 6574(these)s 7119(components)s 8325(replace;)s
+0 4489(all)m 293(the)s 641(objects)s 1369(on)s 1666(the)s
+2014(resulting)s 2903(mer)s 4(ged)k 3674(mark)s 4226(will)s
+4652(ha)s 4(v)k 3(e)k 5153(equal)s 5726(width.)s
+480 4115(The)m 906(root)s 1348(g)s 1(alle)k 3(y)k 15(,)k
+2018(where)s 2655(e)s 6(v)k 3(erything)k 3720(collects)s
+4497(immediately)s 5742(prior)s 6264(to)s 6500(output,)s 7217(is)s
+7424(created)s 8168(automati)s 8998(-)s 0 3827(cally)m 15(,)k
+556(not)s 921(by)s 1214(a)s 1379(de\207nition.)s 2459(Its)s
+2747(tar)s 4(get)k 3346(is)s 3555(the)s 3902(output)s
+4573(\207le,)s 4984(and)s 5387(its)s 5663(object)s 6306(is)s
+6515(the)s 6862(entire)s 7460(input,)s 8058(which)s 8699(typ)s
+8998(-)s 0 3539(ically)m 584(looks)s 1154(lik)s 2(e)k
+1566(this:)s 220 fnt35 480 3038(@P)m 8(ageList)k 480 2750(//)m
+480 2462(@T)m 26(e)k 6(xt {)k 480 2174( Body te)m 6(xt of the document ...)k
+480 1886(})m 240 fnt82 0 1392(where)m 220 fnt35 639 1389(@P)m 8(ageList)k
+240 fnt82 1761 1392(e)m 3(xpands)k 2592(to)s 2830(a)s
+2994(sequence)s 3925(of)s 4195(pages)s 4789(containing)s 220 fnt35
+5850 1389(@T)m 26(e)k 6(xtPlace)k 240 fnt82 7067 1392(symbols)m
+7914(\(see)s 8352(Section)s 0 1104(1.2\),)m 486(and)s 220 fnt35
+890 1101(@T)m 26(e)k 6(xt)k 240 fnt82 1564 1104(is)m
+1774(a)s 1940(g)s 1(alle)k 3(y:)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 29 35
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(2.7.)m 454(Galle)s 7(ys)k 1232(and)s
+1658(tar)s 8(g)k 2(ets)k 240 fnt84 8832 13840(29)m
+220 fnt35 480 13207(def @T)m 26(e)k 6(xtPlace { @Galle)k 4(y })k
+480 12631(def @T)m 26(e)k 6(xt into { @T)k 26(e)k 6(xtPlace&&preceding })k
+480 12343( r)m -3(ight x)k 480 12055({)m 480 11767( x)m 480 11479(})m
+240 fnt82 0 10985(The)m 428(spot)s 886(v)s 6(acated)k
+1668(by)s 1961(a)s 2127(g)s 1(alle)k 3(y)k
+2760(\211)s 2940(its)s 3215(in)s 9(v)k 4(ocation)k
+4268(point)s 4820(\211)s 4999(becomes)s 5887(a)s 220 fnt35
+6052 10982(@Null)m 240 fnt82 6697 10985(object,)m 7387(so)s 7653(this)s
+8048(root)s 8492(g)s 1(alle)k 3(y)k 0 10697(is)m
+210(ef)s 6(fecti)k 6(v)k 3(ely)k 220 fnt35
+1269 10694(@P)m 8(ageList)k 240 fnt82 2393 10697(alone,)m 3018(as)s
+3269(required.)s 4229(The)s 220 fnt35 4657 10694(@T)m 26(e)k 6(xt)k
+240 fnt82 5331 10697(g)m 1(alle)k 3(y)k 5965(will)s
+6392(\207nd)s 6823(its)s 7099(\207rst)s 7530(tar)s 4(get)k
+8130(preceding)s 0 10409(its)m 276(in)s 9(v)k 4(ocation)k
+1330(point,)s 1929(within)s 220 fnt35 2597 10406(@P)m 8(ageList)k
+240 fnt82 3661 10409(.)m 480 10035(Printing)m 1308(the)s 1661(root)s
+2112(g)s 1(alle)k 3(y)k 2751(on)s 3054(the)s
+3407(output)s 4085(\207le)s 4451(is)s 4666(some)s 6(what)k
+5696(problematical,)s 7121(because)s 7940(Lout)s 8457(has)s 8833(no)s
+0 9747(w)m 2(ay)k 461(of)s 742(kno)s 6(wing)k
+1638(ho)s 6(w)k 2109(lar)s 4(ge)k 2648(the)s
+3006(paper)s 3607(is.)s 3941(Basser)s 4648(Lout)s 5170(simply)s
+5885(prints)s 6490(one)s 6902(root)s 7357(g)s 1(alle)k 3(y)k
+8002(component)s 0 9459(per)m 355(page)s 852(\(e)s 3(xcept)k
+1601(it)s 1782(skips)s 2314(components)s 3511(of)s 3771(height)s
+4418(zero\),)s 5005(and)s 5398(the)s 5735(user)s 6182(is)s
+6381(responsible)s 7515(for)s 7842(ensuring)s 8708(that)s 0 9171(each)m
+504(component)s 1637(is)s 1856(page-sized.)s 3051(Gaps)s 3603(between)s
+4466(root)s 4920(g)s 1(alle)k 3(y)k 5563(components,)s
+6836(e)s 6(v)k 3(en)k 7345(unbreakable)s 8580(ones,)s
+0 8883(ha)m 4(v)k 3(e)k 501(no)s 794(ef)s 6(fect)k
+1390(on)s 1687(the)s 2035(result.)s 480 8509(Basser)m 1204(Lout)s
+1744(will)s 2198(promote)s 3079(a)s 3273(component)s 4425(only)s
+4933(after)s 5457(an)s 3(y)k 5882(recepti)s 6(v)k 3(e)k
+6832(symbols)s 7709(within)s 8405(it)s 8625(ha)s 4(v)k 3(e)k
+0 8221(been)m 509(replaced,)s 1426(either)s 2029(by)s 2324(g)s 1(alle)k 3(ys)k
+3048(or)s 3308(by)s 220 fnt35 3602 8218(@Null)m 240 fnt82
+4187 8221(,)m 4295(since)s 4842(until)s 5336(then)s 5805(the)s
+6154(component)s 7278(is)s 7489(not)s 7855(complete.)s 8896(A)s
+0 7933(component)m 1109(which)s 1736(shares)s 2369(a)s 2520(mark)s
+3057(with)s 3524(follo)s 6(wing)k 4486(components)s 5679(is)s
+5874(held)s 6329(up)s 6607(until)s 7085(the)s 3(y)k
+7533(are)s 7865(all)s 8143(complete,)s 0 7645(since)m 547(until)s
+1040(then)s 1509(their)s 2006(width)s 2608(is)s 2818(uncertain.)s
+480 7271(Consider)m 1409(a)s 1581(page)s 2095(with)s 220 fnt35
+2583 7268(@T)m 26(e)k 6(xtPlace)k 240 fnt82 3806 7271(and)m
+220 fnt35 4216 7268(@F)m 6(ootSect)k 240 fnt82 5373 7271(recepti)m 6(v)k 3(e)k
+6301(symbols.)s 7268(The)s 7702(rule)s 8135(just)s 8546(gi)s 6(v)k 3(en)k
+0 6983(will)m 418(pre)s 6(v)k 3(ent)k 1177(the)s
+1517(page)s 2016(from)s 2531(being)s 3108(printed)s 3834(until)s
+220 fnt35 4319 6980(@T)m 26(e)k 6(xtPlace)k 240 fnt82
+5528 6983(is)m 5729(replaced)s 6588(by)s 6873(body)s 7399(te)s 3(xt,)k
+7852(quite)s 8377(rightly;)s 0 6695(b)m 4(ut)k 220 fnt35
+362 6692(@F)m 6(ootSect)k 240 fnt82 1513 6695(will)m 1939(also)s
+2377(pre)s 6(v)k 3(ent)k 3145(its)s 3421(printing,)s
+4285(e)s 6(v)k 3(en)k 4785(when)s 5361(there)s
+5894(are)s 6241(no)s 6534(footnotes.)s 480 6321(Basser)m 1187(Lout)s
+1709(is)s 1930(k)s 2(een)k 2447(to)s 2696(write)s
+3253(out)s 3629(pages)s 4235(as)s 4496(soon)s 5016(as)s
+5276(possible,)s 6178(to)s 6427(sa)s 4(v)k 3(e)k
+6911(memory)s 15(,)k 7811(and)s 8225(it)s 8428(cannot)s
+0 6033(af)m 6(ford)k 624(to)s 852(w)s 2(ait)k
+1309(fore)s 6(v)k 3(er)k 2038(for)s 2365(non-e)s 3(xistent)k
+3592(footnotes.)s 4635(A)s 4854(v)s 6(ariant)k 5559(of)s
+5819(the)s 6156(g)s 1(alle)k 3(y)k 6778(concept,)s
+7618(called)s 8235(a)s 240 fnt83 8389 6035(for)m 8(cing)k
+0 5747(galle)m 7(y)k 240 fnt82 573 5745(,)m 680(is)s
+890(introduced)s 1971(to)s 2210(solv)s 3(e)k 2768(this)s
+3164(problem.)s 4125(A)s 4355(forcing)s 5098(g)s 1(alle)k 3(y)k
+5732(is)s 5942(de\207ned)s 6705(lik)s 2(e)k 7117(this:)s
+220 fnt35 480 5244(def @T)m 26(e)k 6(xt f)k 6(orce into { @T)k 26(e)k 6(xtPlace&&preceding })k
+480 4956( ...)m 240 fnt82 0 4505(and)m 392(so)s 646(on.)s
+1037(When)s 1654(such)s 2138(a)s 2291(g)s 1(alle)k 3(y)k
+2913(replaces)s 3734(a)s 220 fnt35 3887 4502(@Galle)m 4(y)k
+240 fnt82 4773 4505(symbol,)m 5573(Lout)s 6072(replaces)s 6893(e)s 6(v)k 3(ery)k
+7457(recepti)s 6(v)k 3(e)k 8366(symbol)s 0 4217(preceding)m
+1004(the)s 220 fnt35 1360 4214(@Galle)m 4(y)k 240 fnt82
+2266 4217(by)m 220 fnt35 2568 4214(@Null)m 240 fnt82 3153 4217(,)m
+3268(thus)s 3726(ensuring)s 4611(that)s 5038(as)s 5296(soon)s
+5814(as)s 6072(te)s 3(xt)k 6495(enters)s 7124(a)s
+7298(page,)s 7865(for)s 8212(e)s 3(xample,)k 0 3929(e)m 6(v)k 3(erything)k
+1064(up)s 1354(to)s 1590(and)s 1991(including)s 2945(the)s
+3289(preceding)s 4282(page)s 4787(can)s 5173(be)s 5452(printed.)s
+6290(This)s 6762(does)s 7249(not)s 7612(tak)s 2(e)k
+8061(care)s 8511(of)s 8778(the)s 0 3641(v)m 3(ery)k
+479(last)s 873(page,)s 1435(b)s 4(ut)k 1801(Basser)s
+2501(Lout)s 3016(replaces)s 3852(all)s 4149(recepti)s 6(v)k 3(e)k
+5074(symbols)s 5926(by)s 220 fnt35 6223 3638(@Null)m 240 fnt82
+6872 3641(when)m 7451(it)s 7646(realizes)s 8428(that)s 8850(its)s
+0 3353(input)m 552(has)s 922(all)s 1215(been)s 1724(read,)s
+2242(thus)s 2692(allo)s 6(wing)k 3576(the)s 3924(last)s
+4315(page)s 4823(to)s 5062(print.)s 480 2979(A)m 714(forcing)s
+1461(g)s 1(alle)k 3(y)k 2099(causes)s 2779(the)s
+3131(Third)s 3724(La)s 3(w)k 4204(to)s 4448(be)s
+4734(applied)s 5500(earlier)s 6172(than)s 6646(e)s 3(xpected,)k
+7604(and)s 8012(this)s 8413(creates)s 0 2691(tw)m 2(o)k
+425(problems.)s 1495(First,)s 2055(the)s 2419(replacement)s 3662(by)s
+220 fnt35 3972 2688(@Null)m 240 fnt82 4633 2691(may)m 5114(be)s
+5412(premature:)s 6562(a)s 6744(g)s 1(alle)k 3(y)k
+7394(may)s 7876(turn)s 8334(up)s 8643(later)s 0 2403(w)m 2(anting)k
+869(one)s 1318(of)s 1636(the)s 2032(defunct)s 2856(tar)s 4(gets.)k
+3699(Such)s 4283(g)s 1(alle)k 3(ys)k 5054(\(entries)s
+5867(in)s 6157(tables)s 6813(of)s 7131(contents)s 8026(are)s
+8421(typical)s 0 2115(e)m 3(xamples\))k 1020(are)s 1358(copied)s
+2045(into)s 2461(the)s 2801(cross)s 3334(reference)s 4268(database)s
+5138(and)s 5534(read)s 5994(in)s 6228(during)s 6897(the)s
+7237(ne)s 3(xt)k 7697(run)s 8064(just)s 8460(before)s
+0 1827(their)m 488(tar)s 4(gets)k 1161(are)s 1498(closed,)s
+2206(and)s 2600(so)s 2856(the)s 3(y)k 3309(\207nd)s
+3730(their)s 4217(tar)s 4(gets)k 4891(in)s 5124(the)s
+5462(end.)s 5962(Care)s 6459(must)s 6974(be)s 7246(tak)s 2(en)k
+7809(to)s 8038(ensure)s 8708(that)s 0 1539(lar)m 4(ge)k
+526(g)s 1(alle)k 3(ys)k 1247(such)s 1739(as)s
+1986(chapters)s 2829(and)s 3230(sections)s 4047(do)s 4337(not)s
+4700(ha)s 4(v)k 3(e)k 5197(defunct)s 5971(tar)s 4(gets,)k
+6706(since)s 7250(the)s 7594(cost)s 8036(of)s 8303(cop)s 2(ying)k
+0 1251(them)m 538(to)s 777(and)s 1181(from)s 1705(the)s
+2053(database)s 2932(is)s 3142(unacceptably)s 4458(high.)s 480 877(It)m
+694(is)s 914(actually)s 1734(an)s 2027(o)s 3(v)k 3(er)k 4(-simpli\207cation)k
+3901(to)s 4150(say)s 4533(that)s 4961(these)s 5517(replacements)s
+6838(occur)s 7439(when)s 8025(the)s 8383(forcing)s 0 589(g)m 1(alle)k 3(y)k
+633(replaces)s 1464(its)s 220 fnt35 1738 586(@Galle)m 4(y)k
+240 fnt82 2576 589(.)m 2738(What)s 3315(really)s 3910(happens)s
+4744(is)s 4952(that)s 5368(from)s 5891(this)s 6285(moment)s
+7127(on)s 7422(Lout)s 7932(understands)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 30 36
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(30)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 240 fnt82 0 13205(that)m 414(it)s 602(has)s
+968(the)s 1311(right)s 1818(to)s 2053(mak)s 2(e)k
+2621(these)s 3163(replacements,)s 4526(and)s 4926(it)s 5114(will)s
+5535(do)s 5824(each)s 6315(one)s 6713(at)s 6940(the)s
+7284(\207rst)s 7711(moment)s 8550(when)s 0 12917(not)m 369(doing)s
+972(it)s 1168(w)s 2(ould)k 1827(hold)s 2315(things)s
+2955(up.)s 3363(So)s 3673(there)s 4210(is)s 4423(a)s
+4593(short)s 5135(period)s 5808(of)s 6083(grace)s 6660(when)s
+7240(g)s 1(alle)k 3(ys,)k 8024(such)s 8524(as)s
+8778(the)s 0 12629(entries)m 687(in)s 930(tables)s 1538(of)s
+1809(contents)s 2657(just)s 3062(alluded)s 3824(to,)s 4117(can)s
+4506(sneak)s 5112(into)s 5537(these)s 6084(recepti)s 6(v)k 3(e)k
+7006(symbols.)s 480 12255(The)m 220 fnt35 902 12252(into)m 240 fnt82
+1302 12255(and)m 220 fnt35 1699 12252(f)m 6(orce into)k 240 fnt82
+2642 12255(forms)m 3243(are)s 3584(actually)s 4387(just)s 4786(abbre)s 6(viations)k
+6112(for)s 6444(the)s 6785(true)s 7206(w)s 2(ay)k
+7650(that)s 8062(g)s 1(alle)k 3(ys)k 8779(are)s
+0 11967(de\207ned,)m 806(which)s 1442(is)s 1646(by)s 1934(gi)s 6(ving)k
+2586(the)s 2928(symbol)s 3682(that)s 4094(is)s 4297(to)s
+4530(be)s 4806(a)s 4966(g)s 1(alle)k 3(y)k
+5594(a)s 5753(parameter)s 6761(or)s 7014(nested)s 7677(de\207nition)s
+8644(with)s 0 11679(the)m 348(special)s 1066(name)s 220 fnt35
+1640 11676(@T)m 26(arget)k 240 fnt82 2467 11679(:)m 220 fnt35
+480 11178(def @T)m 26(e)k 6(xt)k 480 10890( r)m -3(ight x)k
+480 10602({)m 480 10314( def @T)m 26(arget { @T)k 26(e)k 6(xtPlace&&preceding })k
+480 9738( x)m 480 9450(})m 240 fnt82 0 8956(A)m 237(forcing)s
+988(g)s 1(alle)k 3(y)k 1630(is)s 1848(obtained)s
+2738(by)s 3039(using)s 220 fnt35 3619 8953(&&&)m 240 fnt82
+4121 8956(instead)m 4864(of)s 220 fnt35 5143 8953(&&)m 240 fnt82
+5431 8956(.)m 220 fnt35 5602 8953(@T)m 26(arget)k 240 fnt82
+6497 8956(may)m 6971(be)s 7261(an)s 7552(arbitrary)s 8435(object,)s
+0 8668(pro)m 3(vided)k 908(that)s 1329(it)s 1524(yields)s
+2149(such)s 2648(a)s 2817(cross)s 3362(reference)s 4307(when)s
+4886(e)s 6(v)k 6(aluated.)k 5957(In)s 6216(this)s
+6615(w)s 2(ay)k 15(,)k 7107(dif)s 6(ferent)k
+7985(in)s 9(v)k 4(ocations)k 0 8380(may)m 466(ha)s 4(v)k 3(e)k
+967(dif)s 6(ferent)k 1842(tar)s 4(gets.)k 480 8006(The)m
+904(forcing)s 1643(g)s 1(alle)k 3(y)k 2273(ef)s 6(fect)k
+2865(can)s 3249(be)s 3527(obtained)s 4405(in)s 4644(another)s
+5417(w)s 2(ay)k 15(,)k 5901(by)s 6191(replacing)s
+7129(the)s 220 fnt35 7473 8003(@Galle)m 4(y)k 240 fnt82
+8366 8006(symbol)m 0 7718(to)m 245(which)s 893(the)s 1247(g)s 1(alle)k 3(y)k
+1887(is)s 2103(attached)s 2964(by)s 220 fnt35 3264 7715(@F)m 6(orceGalle)k 4(y)k
+240 fnt82 4657 7718(.)m 4827(The)s 5261(adv)s 6(antage)k
+6287(of)s 6565(this)s 6967(form)s 7497(is)s 7713(that)s
+8137(the)s 8492(g)s 1(alle)k 3(y)k 0 7430(can)m
+389(then)s 858(be)s 1140(forcing)s 1883(at)s 2115(some)s
+2676(places)s 3324(and)s 3728(not)s 4094(at)s 4326(others,)s
+5017(using)s 5589(the)s 5937(formula)s 220 fnt35 480 6929(def @SomePlace r)m -3(ight x)k
+480 6641({)m 480 6353( x @Case {)m 480 6065( nof)m 6(orce @Y)k 4(ield @Galle)k 4(y)k
+480 5777( f)m 6(orce @Y)k 4(ield @F)k 6(orceGalle)k 4(y)k
+480 5489( })m 480 5201(})m 240 fnt82 0 4707(No)m 6(w)k
+514(a)s 680(g)s 1(alle)k 3(y)k 1314(may)s
+1780(ha)s 4(v)k 3(e)k 220 fnt35 2281 4704(@SomePlace)m
+240 fnt82 3677 4707(for)m 4015(its)s 4291(tar)s 4(get,)k
+4937(and)s 5341(if)s 5558(it)s 5750(happens)s 6586(to)s
+6825(attach)s 7452(to)s 220 fnt35 480 4206(@SomePlace f)m 6(orce)k
+240 fnt82 0 3751(it)m 192(will)s 618(ha)s 4(v)k 3(e)k
+1119(the)s 1467(ef)s 6(fect)k 2063(of)s 2334(a)s
+2500(forcing)s 3243(g)s 1(alle)k 3(y)k 15(,)k
+3915(while)s 4502(if)s 4719(it)s 4911(happens)s 5747(to)s
+5986(attach)s 6613(to)s 220 fnt35 480 3250(@SomePlace nof)m 6(orce)k
+240 fnt82 0 2795(it)m 192(will)s 618(not.)s 480 2421(Although)m
+1436(it)s 1621(doesn')s 4(t)k 2374(matter)s 3036(whether)s
+3859(a)s 4018(g)s 1(alle)k 3(y)k 4645(is)s
+4848(declared)s 5708(as)s 5951(a)s 6110(forcing)s 6846(g)s 1(alle)k 3(y)k
+7473(or)s 7725(merely)s 8435(arri)s 6(v)k 3(es)k
+0 2133(at)m 244(a)s 220 fnt35 422 2130(@F)m 6(orceGalle)k 4(y)k
+240 fnt82 1887 2133(symbol)m 2659(from)s 3195(the)s 3555(point)s
+4119(of)s 4402(vie)s 6(w)k 4928(of)s 5211(the)s
+5571(ef)s 6(fect)k 6179(on)s 6488(nearby)s 7205(tar)s 4(gets,)k
+7956(there)s 8501(is)s 8724(one)s 0 1845(w)m 2(ay)k
+446(in)s 683(which)s 1319(Lout)s 1825(treats)s 2387(the)s
+2729(tw)s 2(o)k 3133(cases)s 3682(dif)s 6(ferently)k 15(.)k
+4827(If)s 5051(a)s 5211(forcing)s 5948(g)s 1(alle)k 3(y')k 13(s)k
+6733(\207rst)s 7158(component)s 8276(does)s 8760(not)s 0 1557(\207t)m
+264(into)s 695(the)s 1048(a)s 4(v)k 6(ailable)k
+1962(space,)s 2606(that)s 3029(component)s 4159(will)s 4590(be)s
+4878(scaled)s 5539(v)s 3(ertically)k 6496(until)s 6995(it)s
+7192(does.)s 7801(The)s 8235(rationale)s 0 1269(for)m 343(this)s
+744(is)s 959(that)s 1382(forcing)s 2130(g)s 1(alle)k 3(ys)k
+2860(are)s 3212(meant)s 3861(to)s 4105(carry)s 4654(the)s
+5007(b)s 4(ulk)k 5496(of)s 5772(the)s 6125(document)s
+7134(and)s 7543(cannot)s 8246(af)s 6(ford)k 8887(to)s
+0 981(be)m 295(held)s 779(up)s 1086(because)s 1913(the)s
+2275(user)s 2747(has)s 3131(inadv)s 3(ertently)k 4456(included)s
+5352(an)s 5649(o)s 3(v)k 3(er)k 4(-high)k
+6640(component,)s 7825(which)s 8481(for)s 8833(all)s 0 693(Lout)m
+514(kno)s 6(ws)k 1188(to)s 1430(the)s 1781(contrary)s
+2634(may)s 3103(not)s 3472(\207t)s 3734(on)s 4034(an)s 3(y)k
+4433(page.)s 5052(If)s 5285(this)s 5684(scaling)s 6417(is)s
+6630(not)s 6999(w)s 2(anted)k 7749(b)s 4(ut)k
+8114(forcing)s 8860(is,)s 0 405(the)m 348(g)s 1(alle)k 3(y)k
+982(may)s 1448(be)s 1730(declared)s 2597(not)s 2963(forcing)s
+3706(b)s 4(ut)k 4068(all)s 4361(its)s 4637(tar)s 4(gets)k
+5320(may)s 5786(be)s 6068(set)s 6393(to)s 6632(contain)s
+220 fnt35 7393 402(@F)m 6(orceGalle)k 4(y)k 240 fnt82
+8786 405(.)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 31 37
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(2.7.)m 454(Galle)s 7(ys)k 1232(and)s
+1658(tar)s 8(g)k 2(ets)k 240 fnt84 8839 13840(31)m
+240 fnt82 480 13205(W)m 9(ithin)k 1197(a)s 1368(g)s 1(alle)k 3(y)k 15(,)k
+2045(a)s 2216(symbol)s 2981(whose)s 3654(name)s 4233(is)s
+220 fnt35 4448 13202(@Enclose)m 240 fnt82 5508 13205(has)m 5883(a)s
+6054(special)s 6777(meaning:)s 7772(when)s 8353(compo)s 8998(-)s
+0 12917(nents)m 556(of)s 827(the)s 1175(g)s 1(alle)k 3(y)k
+1810(replace)s 2555(a)s 220 fnt35 2721 12914(@Galle)m 4(y)k
+240 fnt82 3619 12917(or)m 220 fnt35 3879 12914(@F)m 6(orceGalle)k 4(y)k
+240 fnt82 5332 12917(symbol,)m 6144(that)s 6562(symbol)s 7323(is)s
+7533(\207rst)s 7964(replaced)s 8832(by)s 220 fnt35 0 12626(@Enclose)m
+1055(@Galle)s 4(y)k 240 fnt82 1953 12629(or)m 220 fnt35
+2212 12626(@Enclose)m 3267(@F)s 6(orceGalle)k 4(y)k 240 fnt82
+4660 12629(.)m 4824(F)s 3(or)k 5213(e)s 3(xample,)k
+220 fnt35 480 12128(def @Figure into @FigurePlace&&f)m 6(ollo)k 3(wing)k 480 11840( r)m -3(ight @Body)k
+480 11552({)m 480 11264( def @Enclose)m 480 10976( r)m -3(ight x)k 480 10688( {)m
+480 10400( @Bo)m 6(x x)k 480 10112( })m 480 9536( @Body)m 480 9248(})m
+240 fnt82 0 8754(causes)m 705(each)s 220 fnt35 1230 8751(@Galle)m 4(y)k
+240 fnt82 2159 8754(or)m 220 fnt35 2448 8751(@F)m 6(orceGalle)k 4(y)k
+240 fnt82 3932 8754(symbol)m 4722(that)s 5171(recei)s 6(v)k 3(es)k
+6025(components)s 7264(of)s 7565(g)s 1(alle)k 3(y)k
+220 fnt35 8230 8751(@Figure)m 240 fnt82 0 8466(to)m 250(be)s
+544(replaced)s 1423(by)s 220 fnt35 1728 8463(@Bo)m 6(x @Galle)k 4(y)k
+240 fnt82 3294 8466(or)m 220 fnt35 3565 8463(@Bo)m 6(x @F)k 6(orceGalle)k 4(y)k
+240 fnt82 5614 8466(,)m 5732(assuming)s 6701(an)s 6996(appropriate)s
+8152(de\207nition)s 0 8178(of)m 220 fnt35 311 8175(@Bo)m 6(x.)k
+240 fnt82 1109 8178(This)m 1626(is)s 1876(useful,)s 2608(for)s
+2987(e)s 3(xample,)k 3941(when)s 4558(producing)s 5623(multi-page)s
+6754(box)s 3(ed)k 7436(displays,)s 8368(\207gures,)s 0 7890(and)m
+404(tables.)s 480 7516(An)m 220 fnt35 861 7513(@Enclose)m 240 fnt82
+1947 7516(symbol)m 2739(may)s 3236(ha)s 4(v)k 3(e)k
+3769(only)s 4280(one)s 4714(parameter)s 9(,)k 5797(which)s
+6471(must)s 7027(be)s 7341(a)s 7538(right)s 8081(parameter)s 13(.)k
+0 7228(It)m 213(w)s 2(ould)k 877(not)s 1252(mak)s 2(e)k
+1833(sense)s 2416(to)s 2664(allo)s 6(w)k 3252(more)s
+3808(parameters,)s 4971(since)s 5527(there)s 6069(is)s 6288(no)s
+6590(suitable)s 7398(v)s 6(alue)k 7975(to)s 8223(assign)s
+8887(to)s 0 6940(them.)m 628(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+1574(the)s 220 fnt35 1908 6937(@Enclose)m 240 fnt82 2949 6940(symbol)m
+3695(may)s 4147(contain)s 4894(inner)s 5431(de\207nitions,)s 6534(and)s
+6924(it)s 7102(may)s 7554(mak)s 2(e)k 8112(use)s
+8473(of)s 8729(an)s 3(y)k 0 6652(symbol)m 761(that)s
+1181(is)s 1393(a)s 4(v)k 6(ailable)k 2303(at)s
+2537(that)s 2956(point,)s 3557(in)s 3802(the)s 4152(usual)s
+4714(w)s 2(ay)k 15(.)k 5262(The)s 220 fnt35
+5691 6649(@Enclose)m 240 fnt82 6748 6652(symbol)m 7510(may)s 7978(be)s
+8262(a)s 8430(named)s 0 6364(parameter)m 1016(\(itself)s 1645(with)s
+2130(a)s 2298(right)s 2812(parameter\))s 3896(of)s 4169(the)s
+4520(g)s 1(alle)k 3(y)k 5156(symbol,)s 5971(rather)s
+6589(than)s 7060(an)s 7346(inner)s 7899(de\207nition)s 8876(as)s
+0 6076(sho)m 6(wn)k 677(abo)s 3(v)k 3(e,)k
+1350(if)s 1567(desired.)s 480 5702(It)m 696(mak)s 2(es)k
+1367(sense)s 1952(for)s 2302(sorted)s 2955(g)s 1(alle)k 3(ys)k
+3690(containing)s 4765(a)s 220 fnt35 4942 5699(@Merge)m 240 fnt82
+5850 5702(symbol)m 6621(\(Section)s 7486(2.8\))s 7925(to)s 8175(also)s
+8625(ha)s 4(v)k 3(e)k 0 5414(an)m 220 fnt35
+277 5411(@Enclose)m 240 fnt82 1326 5414(symbol.)m 2188(The)s 2610(meaning)s
+3480(is)s 3684(that)s 4095(after)s 4585(all)s 4872(mer)s 4(ging)k
+5711(is)s 5915(done,)s 6481(each)s 6970(resulting)s 7852(g)s 1(alle)k 3(y)k
+8480(has)s 8843(an)s 220 fnt35 0 5123(@Enclose)m 240 fnt82
+1061 5126(symbol)m 1827(which)s 2476(is)s 2692(applied)s 3461(in)s
+3710(the)s 4064(usual)s 4631(w)s 2(ay)k 15(.)k
+5183(The)s 5618(v)s 6(alue)k 6192(of)s 6469(this)s
+220 fnt35 6872 5123(@Enclose)m 240 fnt82 7933 5126(symbol)m 8700(will)s
+0 4838(be)m 274(the)s 614(v)s 6(alue)k 1174(of)s
+1437(an)s 220 fnt35 1712 4835(@Enclose)m 240 fnt82 2758 4838(symbol)m
+3510(from)s 4026(one)s 4420(of)s 4683(the)s 5022(contrib)s 4(uting)k
+6232(g)s 1(alle)k 3(ys,)k 7004(b)s 4(ut)k
+7358(e)s 3(xactly)k 8091(which)s 8724(one)s 0 4550(is)m
+210(not)s 576(de\207ned.)s 1445(So)s 1751(it)s 1943(is)s
+2153(safest)s 2756(if)s 2973(all)s 3266(such)s 220 fnt35
+3762 4547(@Enclose)m 240 fnt82 4817 4550(symbols)m 5666(produce)s 6493(the)s
+6841(same)s 7388(result.)s 480 4176(A)m 220 fnt35 709 4173(f)m 6(ollo)k 3(wing)k
+240 fnt82 1597 4176(g)m 1(alle)k 3(y)k 2229(may)s
+2693(f)s 2(ail)k 3061(to)s 3299(\207nd)s 3728(a)s
+3892(\207rst)s 4321(tar)s 4(get)k 4918(lying)s 5461(in)s
+5703(a)s 5867(follo)s 6(wing)k 6842(component)s 7964(of)s
+8233(the)s 8579(same)s 0 3888(g)m 1(alle)k 3(y)k
+634(as)s 884(its)s 1159(in)s 9(v)k 4(ocation)k
+2213(point.)s 2868(This)s 3344(is)s 3553(a)s 3719(de\207cienc)s 3(y)k
+4752(of)s 5023(Basser)s 5719(Lout,)s 6278(which)s 6919(occurs)s
+7594(if)s 7810(the)s 8158(tar)s 4(get)k 8756(has)s
+0 3600(not)m 356(been)s 855(read)s 1313(from)s 1827(input)s
+2369(at)s 2590(the)s 2928(time)s 3398(the)s 3735(g)s 1(alle)k 3(y)k
+4359(tries)s 4810(to)s 5038(\207nd)s 5459(it.)s 5745(A)s
+5964(w)s 2(orkaround)k 7167(is)s 7367(to)s 7595(use)s
+7960(a)s 220 fnt35 8115 3597(preceding)m 240 fnt82 0 3312(g)m 1(alle)k 3(y)k
+634(instead,)s 1418(de\207ned)s 2181(lik)s 2(e)k 2593(this:)s
+220 fnt35 480 2811(def @A)m 6(Galle)k 4(y into { @A)k 6(Galle)k 4(yPlace&&preceding })k
+480 2523( r)m -3(ight @Body)k 480 2235({)m 480 1947( //1.1b)m 480 1659( @Body)m
+480 1371(})m 240 fnt82 0 877(and)m 404(in)s 9(v)k 4(ok)k 2(ed)k
+1219(lik)s 2(e)k 1631(this:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 32 38
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(32)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 220 fnt35 480 13207(@A)m 6(Galle)k 4(yPlace | @A)k 6(Galle)k 4(y { content of galle)k 4(y })k
+480 12919(//)m 480 12631(...)m 480 12343(@A)m 6(Galle)k 4(yPlace)k
+240 fnt82 0 11845(The)m 419(\207rst)s 220 fnt35 841 11842(@A)m 6(Galle)k 4(yPlace)k
+240 fnt82 2411 11845(recei)m 6(v)k 3(es)k 3226(only)s
+3696(the)s 4035(initial)s 4636(empty)s 5279(object,)s 5960(since)s
+6498(the)s 220 fnt35 6836 11842(//1.1b)m 240 fnt82 7428 11845(forces)m
+8052(a)s 8209(split;)s 8722(and)s 0 11557(the)m 348(Second)s
+1111(La)s 3(w)k 1587(puts)s 2037(Basser)s 2734(Lout)s
+3246(on)s 3543(the)s 3891(right)s 4402(track)s 4940(thereafter)s 13(.)k
+240 fnt84 0 10764(2.8.)m 471(Sorted)s 1203(galleys)s 240 fnt82
+480 10287(When)m 1128(footnotes)s 2088(are)s 2455(placed)s 3156(at)s
+3407(the)s 3775(bottom)s 4532(of)s 4823(a)s 5008(page,)s
+5586(the)s 3(y)k 6069(appear)s 6785(there)s 7337(in)s
+7600(\207rst)s 8050(come,)s 8695(\207rst)s 0 9999(serv)m 3(ed)k
+674(order)s 13(.)k 1324(T)s 19(o)k 1618(mak)s 2(e)k
+2185(g)s 1(alle)k 3(ys)k 2903(appear)s 3595(in)s
+3832(sorted)s 4469(order)s 9(,)k 5065(as)s 5310(is)s
+5514(needed)s 6245(in)s 6482(bibliographies)s 7896(and)s 8294(inde)s 3(x)k 3(es,)k
+0 9711(a)m 178(parameter)s 1205(or)s 1477(nested)s 2158(de\207nition)s
+3145(with)s 3640(the)s 4000(special)s 4731(name)s 220 fnt35
+5318 9708(@K)m 8(e)k 4(y)k 240 fnt82 5977 9711(is)m
+6200(added)s 6843(to)s 7094(the)s 7455(g)s 1(alle)k 3(y)k
+8102(de\207nition,)s 0 9423(lik)m 2(e)k 412(this:)s 220 fnt35
+480 8972(def @Inde)m 6(xEntr)k -6(y into { @Inde)k 6(xPlace&&f)k 6(ollo)k 3(wing })k
+480 8684( left @K)m 8(e)k 4(y)k 480 8396( r)m -3(ight x)k
+480 8108({ x })m 0 7611(@K)m 8(e)k 4(y)k 240 fnt82
+674 7614(must)m 1226(be)s 1535(set)s 1887(to)s 2153(a)s
+2346(simple)s 3066(w)s 2(ord,)k 3690(or)s 3976(se)s 6(v)k 3(eral)k
+4725(w)s 2(ords)k 5386(with)s 5895(nothing)s 6707(more)s
+7281(comple)s 3(x)k 8184(than)s 8681(font)s 0 7326(changes)m
+822(within)s 1490(them,)s 2075(when)s 2651(the)s 2999(g)s 1(alle)k 3(y)k
+3633(is)s 3843(in)s 9(v)k 4(ok)k 2(ed:)k
+220 fnt35 480 6825({ cities compare } @Inde)m 6(xEntr)k -6(y { cities)k 3(, compar)k -3(ison of)k 6(, 27 })k
+240 fnt82 0 6327(and)m 404(this)s 800(k)s 2(e)k 3(y)k
+1195(is)s 1405(used)s 1902(to)s 2141(sort)s 2559(the)s
+2907(g)s 1(alle)k 3(ys.)k 480 5953(If)m 707(se)s 6(v)k 3(eral)k
+1425(sorted)s 2063(g)s 1(alle)k 3(ys)k 2783(with)s
+3261(the)s 3605(same)s 4148(k)s 2(e)k 3(y)k
+4539(are)s 4882(sent)s 5323(to)s 5558(the)s 5902(same)s
+6445(place,)s 7052(the)s 7396(def)s 2(ault)k 8113(beha)s 4(viour)k
+0 5665(is)m 253(to)s 536(print)s 1091(only)s 1615(the)s
+2007(\207rst)s 2481(of)s 2796(them;)s 3430(the)s 3822(assumption)s
+5013(is)s 5266(that)s 5728(the)s 6120(others)s 6799(are)s
+7190(probably)s 8139(unw)s 2(anted)k 0 5377(duplicates.)m 1146(This)s
+1636(holds)s 2220(good)s 2772(for)s 3123(sorted)s 3779(reference)s
+4736(lists,)s 5241(for)s 5593(e)s 3(xample:)k 6579(we)s
+6928(don')s 4(t)k 7503(w)s 2(ant)k 8040(tw)s 2(o)k
+8464(copies)s 0 5089(of)m 273(a)s 442(reference)s 1388(just)s
+1796(because)s 2611(we)s 2949(happen)s 3701(to)s 3943(cite)s
+4345(it)s 4540(twice.)s 5224(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+6187(the)s 6537(other)s 7091(common)s 7989(e)s 3(xample)k
+8855(of)s 0 4801(sorted)m 642(g)s 1(alle)k 3(ys,)k
+1422(inde)s 3(x)k 2006(entries,)s 2749(requires)s 3569(something)s
+4619(dif)s 6(ferent:)k 240 fnt83 5600 4803(mer)m 8(g)k 2(ed)k
+240 fnt82 6374 4801(g)m 1(alle)k 3(ys.)k 480 4427(Suppose)m
+1348(that)s 1766(at)s 1998(some)s 2559(point)s 3111(of)s
+3382(the)s 3730(document)s 4734(we)s 5069(insert)s 5659(the)s
+6007(inde)s 3(x)k 6591(entry)s 220 fnt35 480 3926(aardv)m 5(ar)k -3(ks @Inde)k 6(xEntr)k -6(y { Aardv)k 5(ar)k -3(ks)k 3(, 23 })k
+240 fnt82 0 3428(while)m 587(at)s 819(another)s 1596(point)s
+2148(we)s 2483(insert)s 220 fnt35 480 2927(aardv)m 5(ar)k -3(ks @Inde)k 6(xEntr)k -6(y { Aardv)k 5(ar)k -3(ks)k 3(, 359 })k
+240 fnt82 0 2429(Ho)m 6(w)k 505(the)s 843(page)s
+1341(numbers)s 2206(are)s 2544(w)s 2(ork)k 2(ed)k
+3306(out)s 3662(is)s 3862(not)s 4219(rele)s 6(v)k 6(ant)k
+5026(here.)s 5591(Clearly)s 6338(we)s 6664(w)s 2(ould)k
+7309(lik)s 2(e)k 7711(to)s 7940(mer)s 4(ge)k
+8579(these)s 0 2141(tw)m 2(o)k 410(entries)s 1097(into)s
+1522(one)s 1924(entry)s 2469(that)s 2887(comes)s 3549(out)s
+3915(as)s 480 1636(Aardv)m 6(arks, 23, 359)k 0 1152(The)m 428(follo)s 6(wing)k
+1405(de\207nition)s 2379(will)s 2805(mer)s 4(ge)k 3454(tw)s 2(o)k
+3864(objects)s 4592(in)s 4835(this)s 5231(w)s 2(ay:)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 33 39
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(2.8.)m 454(Sorted)s 1145(galle)s 7(ys)k
+240 fnt84 8833 13840(33)m 220 fnt35 480 13207(def @Merge left x r)m -3(ight y)k
+480 12919({)m 480 12631( {x @Rump y} @Case)m 480 12343( {)m 480 12055( "" @Y)m 4(ield x)k
+480 11767( else @Y)m 4(ield { x, x @Rump y })k 480 11479( })m 480 11191(})m 240 fnt82
+0 10697(The)m 220 fnt35 429 10694(@Rump)m 240 fnt82 1290 10697(symbol)m
+2051(is)s 2262(the)s 2611(subject)s 3349(of)s 3621(Section)s
+4396(3.24;)s 4929(this)s 5326(says)s 5790(`if)s 6087(the)s
+6436(tw)s 2(o)k 6847(things)s 7484(to)s 7724(be)s
+8007(mer)s 4(ged)k 8779(are)s 0 10409(equal,)m 622(the)s
+967(result)s 1553(is)s 1760(one)s 2158(of)s 2426(them;)s
+3012(otherwise)s 3994(it)s 4182(is)s 4389(the)s 4733(\207rst)s
+5161(follo)s 6(wed)k 6059(by)s 6350(a)s 6512(comma)s
+7273(and)s 7673(space)s 8257(and)s 8657(then)s 0 10121(the)m
+355(rump)s 921(of)s 1200(the)s 1556(second.)s 16(')k
+2445(Our)s 2885(only)s 3372(problem)s 4237(is)s 4455(that)s
+4881(this)s 5285(symbol)s 6053(has)s 6430(to)s 6677(be)s
+6967(applied)s 7737(to)s 7984(tw)s 2(o)k 8402(g)s 1(alle)k 3(ys)k
+0 9833(from)m 524(widely)s 1229(separated)s 2189(parts)s 2704(of)s
+2975(the)s 3323(document.)s 480 9459(Lout)m 993(mak)s 2(es)k
+1654(this)s 2052(possible)s 2893(by)s 3189(the)s 3538(follo)s 6(wing)k
+4517(special)s 5236(rule:)s 5775(if)s 5993(a)s 6161(sorted)s
+6804(g)s 1(alle)k 3(y)k 7440(contains)s 8289(a)s
+8457(nested)s 0 9171(de\207nition)m 965(of)s 1227(a)s 1383(symbol)s
+2134(whose)s 2793(name)s 3357(is)s 220 fnt35 3558 9168(@Merge)m
+240 fnt82 4446 9171(\()m 220 fnt35 4519 9168(@Merge)m 240 fnt82
+5406 9171(must)m 5922(ha)s 4(v)k 3(e)k 6414(just)s
+6809(tw)s 2(o)k 7210(parameters,)s 8355(left)s 8722(and)s
+0 8883(right\),)m 643(and)s 1054(if)s 1277(that)s 1702(sorted)s
+2350(g)s 1(alle)k 3(y)k 2991(is)s 3207(preceded)s
+4135(in)s 4384(the)s 4739(list)s 5096(of)s 5374(sorted)s
+6022(g)s 1(alle)k 3(ys)k 6753(destined)s 7614(for)s
+7959(some)s 8527(tar)s 4(get)k 0 8595(by)m 300(another)s
+1084(sorted)s 1733(g)s 1(alle)k 3(y)k 2374(with)s
+2863(the)s 3217(same)s 3771(k)s 2(e)k 3(y)k 15(,)k
+4211(then)s 4687(rather)s 5310(than)s 5785(being)s 6377(discarded,)s
+7407(the)s 7762(second)s 8492(g)s 1(alle)k 3(y)k
+0 8307(is)m 210(mer)s 4(ged)k 981(into)s 1406(the)s
+1754(\207rst)s 2185(using)s 2757(the)s 220 fnt35 3105 8304(@Merge)m
+240 fnt82 4002 8307(symbol.)m 480 7933(The)m 909(natural)s 1629(thing)s
+2175(to)s 2416(do)s 2711(when)s 3288(more)s 3837(than)s
+4307(tw)s 2(o)k 4719(g)s 1(alle)k 3(ys)k
+5445(ha)s 4(v)k 3(e)k 5947(the)s 6297(same)s
+6845(k)s 2(e)k 3(y)k 7242(is)s 7454(to)s
+7694(mer)s 4(ge)k 8345(the)s 8695(\207rst)s 0 7645(tw)m 2(o,)k
+477(then)s 959(mer)s 4(ge)k 1621(the)s 1982(third)s
+2504(with)s 2999(the)s 3360(result)s 3963(of)s 4247(that,)s
+4725(then)s 5207(the)s 5568(fourth)s 6222(with)s 6717(the)s
+7078(result)s 7681(of)s 7965(that,)s 8443(and)s 8860(so)s
+0 7357(on.)m 403(F)s 3(or)k 790(ef\207cienc)s 3(y)k
+1781(reasons)s 2547(be)s 3(yond)k 3306(our)s 3684(scope)s
+4283(here,)s 4799(Lout)s 5309(does)s 5797(the)s 6144(mer)s 4(ging)k
+6988(in)s 7229(a)s 7393(dif)s 6(ferent)k 8266(order:)s
+8934(it)s 0 7069(mer)m 4(ges)k 240 fnt83 736 7071(n)m
+240 fnt82 909 7069(g)m 1(alle)k 3(ys)k 1632(by)s
+1925(mer)s 4(ging)k 2770(the)s 3116(\207rst)s 240 fnt78
+3592 7027(\353)m 240 fnt83 3685 7071(n)m 240 fnt78 3809 7063(/)m
+3881(2)s 4006 7027(\373)m 240 fnt82 4197 7069(together)m 9(,)k
+5077(then)s 5545(the)s 5892(last)s 240 fnt78 6327 7039(\351)m
+240 fnt83 6420 7071(n)m 240 fnt78 6545 7063(/)m 6617(2)s
+6741 7039(\371)m 240 fnt82 6933 7069(together)m 9(,)k 7813(then)s
+8280(mer)s 4(ging)k 0 6781(the)m 337(result.)s 1019(Of)s
+1332(course,)s 2051(if)s 2257(the)s 220 fnt35 2593 6778(@Merge)m
+240 fnt82 3479 6781(symbol)m 4227(is)s 4426(associati)s 6(v)k 3(e)k
+5509(this)s 5894(has)s 6252(the)s 6589(same)s 7124(ef)s 6(fect.)k
+7813(The)s 220 fnt35 8229 6778(@Merge)m 240 fnt82 0 6493(symbol)m
+758(abo)s 3(v)k 3(e)k 1377(is)s 1584(not)s
+1947(strictly)s 2660(associati)s 6(v)k 3(e,)k 3803(b)s 4(ut)k
+4162(it)s 4351(is)s 4559(close)s 5103(enough)s 5863(in)s
+6103(practice.)s 7019(The)s 7444(total)s 7920(time)s 8397(it)s
+8586(tak)s 2(es)k 0 6205(to)m 252(mer)s 4(ge)k
+240 fnt83 915 6207(n)m 240 fnt82 1102 6205(g)m 1(alle)k 3(ys)k
+1840(with)s 2335(equal)s 2922(k)s 2(e)k 3(ys)k
+3421(is)s 240 fnt83 3644 6207(O)m 240 fnt78 3838 6199(\()m
+168 fnt78 4049 6298(2)m 240 fnt83 3935 6207(n)m 240 fnt78
+4155 6199(\))m 240 fnt82 4294 6205(or)m 4567(some)s 6(what)k
+5605(higher)s 6289(\(b)s 4(ut)k 6744(al)s 2(w)k 2(ays)k
+7468(polynomial)s 8627(in)s 240 fnt83 8884 6207(n)m 240 fnt82
+8998 6205(\))m 0 5917(depending)m 1053(on)s 1353(ho)s 6(w)k
+1816(man)s 3(y)k 2402(times)s 2972(the)s 3323(parameters)s
+4424(occur)s 5017(within)s 5688(the)s 6038(body)s 6575(of)s
+220 fnt35 6849 5914(@Merge)m 240 fnt82 7686 5917(;)m 7800(to)s
+8042(do)s 8337(it)s 8532(in)s 8778(the)s 0 5629(natural)m
+718(linear)s 1321(order)s 1885(w)s 2(ould)k 2540(tak)s 2(e)k
+2992(Lout)s 3504(e)s 3(xponential)k 4672(time.)s 240 fnt84
+0 4836(2.9.)m 471(Horizontal)s 1628(galleys)s 240 fnt82 480 4359(All)m
+846(the)s 1201(g)s 1(alle)k 3(ys)k 1932(so)s
+2205(f)s 2(ar)k 2534(ha)s 4(v)k 3(e)k
+3042(been)s 240 fnt83 3557 4361(vertical)m 4353(galle)s 7(ys)k
+240 fnt82 5018 4359(:)m 5191(g)s 1(alle)k 3(ys)k
+5922(whose)s 6597(components)s 7812(are)s 8166(separated)s 0 4071(by)m
+320(v)s 3(ertical)k 1114(concatenation)s 2525(symbols.)s 3514(There)s
+4154(are)s 4527(also)s 4992(horizontal)s 6043(g)s 1(alle)k 3(ys,)k
+6849(whose)s 7544(components)s 8779(are)s 0 3783(separated)m 951(by)s
+1235(the)s 1574(horizontal)s 2588(concatenation)s 3963(operator)s 220 fnt35
+4810 3780(&)m 240 fnt82 5002 3783(\(or)m 5331(equi)s 6(v)k 6(alently)k 15(,)k
+6583(by)s 6867(spaces\).)s 7725(These)s 8342(w)s 2(ork)k
+8883(in)s 0 3495(the)m 346(same)s 891(w)s 2(ay)k
+1340(as)s 1588(v)s 3(ertical)k 2353(g)s 1(alle)k 3(ys,)k
+3131(e)s 3(xcept)k 3810(for)s 4146(the)s 4492(change)s
+5224(of)s 5493(direction.)s 6504(F)s 3(or)k 6891(e)s 3(xample,)k
+7803(the)s 8149(follo)s 6(wing)k 0 3207(de\207nes)m 730(the)s
+1079(equi)s 6(v)k 6(alent)k 2124(of)s 2396(an)s
+2681(ordinary)s 3546(outdented)s 4549(paragraph,)s 5613(e)s 3(xcept)k
+6295(that)s 6715(an)s 6999(option)s 7669(is)s 7880(pro)s 3(vided)k
+8788(for)s 0 2919(v)m 6(arying)k 778(the)s 1126(size)s
+1553(of)s 1824(the)s 2172(outdent:)s 220 fnt35 480 2418(def @OutdentP)m 8(ar)k
+480 2130( named outdent { 2f })m 480 1842( r)m -3(ight x)k 480 1554({)m 480 1266( def @P)m 8(arPlace { @Galle)k 4(y })k
+480 690( def @LineList)m 480 402( {)m 480 114( outdent @Wide {} | @P)m 26(Adjust @P)k 8(arPlace)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 34 40
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(34)m 240 fnt83 7257 13843(Chapter)m 8107(2.)s
+8381(Details)s 220 fnt35 480 13207( //1vx @LineList)m 480 12919( })m 480 12343( def @P)m 8(arGalle)k 4(y f)k 6(orce hor)k -3(iz)k 3(ontally into { @P)k 8(arPlace&&preceding })k
+480 12055( r)m -3(ight x)k 480 11767( {)m 480 11479( x)m 480 11191( })m
+480 10615( @P)m 26(Adjust @P)k 8(arPlace)k 480 10327( // @P)m 8(arGalle)k 4(y { x &1r)k -8(t })k
+480 10039( //1vx @LineList)m 480 9751(})m 240 fnt82 0 9257(Notice)m 703(the)s
+1061(use)s 1446(of)s 220 fnt35 1727 9254(&1r)m -8(t)k
+240 fnt82 2203 9257(to)m 2452(cancel)s 3127(the)s 3485(ef)s 6(fect)k
+4091(of)s 220 fnt35 4372 9254(@P)m 26(Adjust)k 240 fnt82
+5390 9257(on)m 5697(the)s 6055(last)s 6456(line)s 6880(of)s
+7161(the)s 7519(paragraph.)s 8650(This)s 0 8969(de\207nition)m 969(has)s
+1334(a)s 1494(problem)s 2346(in)s 2584(that)s 2996(there)s
+3524(will)s 3945(be)s 4221(a)s 4382(concluding)s 5494(une)s 3(xpanded)k
+220 fnt35 6701 8966(@LineList)m 240 fnt82 7730 8969(symbol)m 8484(which)s
+0 8681(will)m 431(hold)s 921(up)s 1219(promotion)s 2279(of)s
+2555(the)s 2909(enclosing)s 3884(g)s 1(alle)k 3(y;)k
+4582(this)s 4983(problem)s 5846(may)s 6317(be)s 6605(\207x)s 3(ed)k
+7144(by)s 7444(the)s 7797(same)s 8350(method)s 0 8393(used)m
+497(to)s 736(end)s 1140(a)s 1306(list.)s 480 8019(In)m
+735(an)s 1016(ideal)s 1533(w)s 2(orld,)k 2194(there)s
+2725(w)s 2(ould)k 3378(be)s 3658(nothing)s 4442(further)s
+5149(to)s 5386(say)s 5757(about)s 6347(horizontal)s 7369(g)s 1(alle)k 3(ys.)k
+8204(Ho)s 6(we)k 6(v)k 3(er)k 0 7731(there)m
+558(are)s 931(a)s 1123(fe)s 6(w)k 1555(dif)s 6(ferences)k
+2686(which)s 3354(arise)s 3886(from)s 4436(v)s 6(arious)k
+5211(practical)s 6113(considerations)s 7571(and)s 8001(limitations.)s 0 7443(Perhaps)m
+808(some)s 1369(day)s 1769(a)s 1935(more)s 2482(perfect)s
+3204(symmetry)s 4214(will)s 4640(be)s 4922(implemented.)s 480 7069(Each)m
+1021(v)s 3(ertical)k 1795(g)s 1(alle)k 3(y)k
+2436(has)s 2812(a)s 2985(\207x)s 3(ed)k 3526(\207nite)s
+4080(width,)s 4738(and)s 5149(e)s 6(v)k 3(ery)k
+5732(component)s 6863(is)s 7079(brok)s 2(en)k 7806(to)s
+8052(that)s 8477(width.)s 0 6781(This)m 517(is)s 769(needed)s
+1546(basically)s 2491(to)s 2772(trigger)s 3509(paragraph)s 4564(breaking.)s
+5606(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+6608(there)s 7183(is)s 7434(no)s 7769(equi)s 6(v)k 6(alent)k
+8855(of)s 0 6493(paragraph)m 1001(breaking)s 1879(in)s 2110(the)s
+2446(v)s 3(ertical)k 3201(direction,)s 4145(so)s 4398(horizontal)s
+5410(g)s 1(alle)k 3(ys)k 6122(do)s 6403(not)s
+6757(ha)s 4(v)k 3(e)k 7246(an)s 3(y)k
+7631(particular)s 8592(\207x)s 3(ed)k 0 6205(height.)m 762(Instead,)s
+1559(each)s 2054(component)s 3178(has)s 3548(its)s 3824(o)s 6(wn)k
+4288(indi)s 6(vidual)k 5307(height.)s 480 5831(When)m 1096(tw)s 2(o)k
+1492(objects)s 2206(are)s 2539(separated)s 3485(by)s 220 fnt35
+3766 5828(/)m 240 fnt82 3830 5831(,)m 3923(the)s 3(y)k
+4372(are)s 4705(assigned)s 5573(the)s 5908(same)s 6441(width)s
+7029(\(Section)s 7868(2.7\),)s 8340(and)s 8730(this)s 0 5543(holds)m
+581(true)s 1020(e)s 6(v)k 3(en)k 1531(if)s
+1760(the)s 2119(tw)s 2(o)k 2541(objects)s 3280(are)s
+3639(subsequently)s 4954(separated)s 5926(by)s 6231(being)s 6828(promoted)s
+7814(into)s 8251(dif)s 6(ferent)k 0 5255(tar)m 4(gets.)k
+788(F)s 3(or)k 1169(e)s 3(xample,)k 2074(tw)s 2(o)k
+2476(aligned)s 3229(equations)s 4189(will)s 4606(ha)s 4(v)k 3(e)k
+5099(the)s 5439(same)s 5977(width,)s 6621(and)s 7016(hence)s
+7622(their)s 8110(alignment)s 0 4967(will)m 437(be)s 731(preserv)s 3(ed,)k
+1776(e)s 6(v)k 3(en)k 2287(if)s 2516(the)s 3(y)k
+2991(appear)s 3699(in)s 3954(dif)s 6(ferent)k 4841(columns)s
+5714(or)s 5985(pages.)s 6706(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+7677(e)s 6(v)k 3(en)k 8189(though)s 220 fnt35
+8924 4964(&)m 240 fnt82 0 4679(aligns)m 635(the)s 996(marks)s
+1644(of)s 1928(its)s 2217(tw)s 2(o)k 2640(parameters,)s
+3807(it)s 4012(does)s 4515(not)s 4894(assign)s 5562(them)s
+6113(a)s 6292(common)s 7200(height.)s 7975(This)s 8464(means)s
+0 4391(that)m 416(the)s 762(height)s 1417(of)s 1686(an)s 3(y)k
+2081(component)s 3202(of)s 3471(a)s 3634(horizontal)s 4656(g)s 1(alle)k 3(y)k
+5288(promoted)s 6260(into)s 6683(one)s 7083(tar)s 4(get)k
+7679(does)s 8167(not)s 8530(af)s 6(fect)k 0 4103(the)m
+362(height)s 1034(consumed)s 2078(by)s 2386(the)s 2748(components)s
+3971(promoted)s 4960(into)s 5400(an)s 3(y)k 5811(other)s
+6376(tar)s 4(get.)k 7094(The)s 7536(other)s 8102(horizontal)s
+0 3815(concatenation)m 1392(operator)s 9(,)k 220 fnt35 2293 3812(|)m
+240 fnt82 2330 3815(,)m 2444(does)s 2941(assign)s 3604(a)s
+3777(common)s 4679(height)s 5344(to)s 5590(its)s 5874(tw)s 2(o)k
+6291(parameters;)s 7457(b)s 4(ut)k 7826(sequences)s 8855(of)s
+0 3527(objects)m 728(separated)s 1688(by)s 1982(this)s 2378(operator)s
+3234(cannot)s 3932(be)s 4214(the)s 4562(components)s 5770(of)s
+6041(a)s 6207(horizontal)s 7231(g)s 1(alle)k 3(y)k 15(.)k
+480 3153(Lout)m 985(is)s 1187(able)s 1633(to)s 1864(read)s
+2325(v)s 3(ertical)k 3084(g)s 1(alle)k 3(ys)k
+3800(one)s 4194(paragraph)s 5199(at)s 5424(a)s 5582(time;)s
+6110(in)s 6345(this)s 6733(w)s 2(ay)k 7176(it)s
+7360(processes)s 8319(the)s 8659(doc)s 8998(-)s 0 2865(ument)m
+660(in)s 906(small)s 1481(chunks,)s 2270(ne)s 6(v)k 3(er)k
+2855(holding)s 3642(more)s 4192(than)s 4664(a)s 4833(fe)s 6(w)k
+5242(pages)s 5840(in)s 6086(memory)s 6940(at)s 7175(an)s 3(y)k
+7575(time.)s 8166(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+0 2577(horizontal)m 1024(g)s 1(alle)k 3(ys)k 1748(are)s
+2095(al)s 2(w)k 2(ays)k 2806(read)s 3275(in)s
+3518(completely)s 15(,)k 4672(so)s 4938(the)s 3(y)k
+5401(should)s 6098(not)s 6464(be)s 6746(e)s 3(xtremely)k
+7752(long.)s 480 2203(In)m 744(principle)s 1658(Lout)s 2178(should)s
+2884(be)s 3174(able)s 3637(to)s 3884(h)s 1(yphenate)k
+4932(the)s 5288(components)s 6505(of)s 6784(horizontal)s 7817(g)s 1(alle)k 3(ys)k
+8550(when)s 0 1915(the)m 3(y)k 463(are)s 810(simple)s
+1503(w)s 2(ords,)k 2193(b)s 4(ut)k 2555(this)s
+2951(is)s 3161(not)s 3527(implemented)s 4833(at)s 5065(present.)s
+480 1541(In)m 738(an)s 1023(ideal)s 1544(w)s 2(orld,)k
+2209(e)s 6(v)k 3(ery)k 2787(paragraph)s 3802(w)s 2(ould)k
+4459(be)s 4743(treated)s 5452(as)s 5704(a)s 5872(horizontal)s
+6898(g)s 1(alle)k 3(y)k 15(.)k 7629(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+8591(to)s 8833(do)s 0 1253(so)m 256(in)s 488(practice)s
+1288(w)s 2(ould)k 1932(be)s 2203(too)s 2551(slo)s 6(w)k
+3040(and)s 3433(w)s 2(ould)k 4077(lead)s 4522(to)s
+4750(e)s 3(xcessi)k 6(v)k 3(e)k 5699(clumsiness)s
+6788(in)s 7020(notation,)s 7900(so)s 8155(at)s 8376(present)s
+0 965(Lout)m 509(has)s 876(tw)s 2(o)k 1282(competing)s
+2342(mechanisms)s 3572(in)s 3811(this)s 4204(area:)s 4764(the)s
+5108(b)s 4(uilt-in)k 5861(paragraph)s 6871(break)s 2(er)k
+7641(with)s 8120(its)s 8392(limited)s 0 677(set)m 314(of)s
+573(options)s 1318(as)s 1556(gi)s 6(v)k 3(en)k
+2124(under)s 2718(the)s 220 fnt35 3054 674(@Break)m 240 fnt82
+3899 677(operator)m 9(,)k 4781(and)s 5173(horizontal)s 6186(g)s 1(alle)k 3(ys.)k
+7011(As)s 7317(the)s 7653(e)s 3(xample)k 8504(abo)s 3(v)k 3(e)k
+0 389(sho)m 6(ws,)k 700(horizontal)s 1725(g)s 1(alle)k 3(ys)k
+2449(are)s 2797(in)s 3040(principle)s 3946(capable)s 4733(of)s
+5004(implementing)s 6386(man)s 3(y)k 6969(more)s 7517(paragraph)s
+8531(styles)s 0 101(than)m 470(the)s 820(b)s 4(uilt-in)k
+1578(paragraph)s 2593(break)s 2(er)k 3369(could)s 3961(e)s 6(v)k 3(er)k
+4425(hope)s 4949(to)s 5190(do.)s 5596(The)s 6026(recommended)s
+7441(practical)s 8319(strate)s 3(gy)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 35 41
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(2.9.)m 454(Horizontal)s 1551(galle)s 7(ys)k
+240 fnt84 8833 13840(35)m 240 fnt82 0 13205(is)m 221(to)s
+472(use)s 858(the)s 1218(b)s 4(uilt-in)k 1985(paragraph)s
+3010(break)s 2(er)k 3795(most)s 4332(of)s 4614(the)s
+4974(time,)s 5516(and)s 5932(switch)s 6624(to)s 6875(horizontal)s
+7910(g)s 1(alle)k 3(ys)k 8646(only)s 0 12917(for)m
+338(occasional)s 1402(tricks,)s 2039(such)s 2535(as)s 2785(paragraphs)s
+3885(with)s 4367(drop)s 4859(capitals,)s 5695(circular)s 6483(outlines,)s
+7347(etc.)s 240 fnt84 0 12124(2.10.)m 591(Optimal)s 1495(galley)s
+2149(br)s 4(eaking)k 240 fnt82 480 11647(As)m 814(e)s 3(xplained)k
+1817(in)s 2077(Section)s 2869(2.7,)s 3294(the)s 3659(components)s
+4885(of)s 5174(a)s 5357(g)s 1(alle)k 3(y)k
+6009(are)s 6373(promoted)s 7366(one)s 7786(by)s 8097(one)s
+8517(into)s 8960(a)s 0 11359(tar)m 4(get.)k 703(When)s
+1332(space)s 1919(runs)s 2382(out)s 2748(there,)s 3332(the)s
+3680(g)s 1(alle)k 3(y)k 4314(searches)s 5174(for)s
+5512(a)s 5678(ne)s 6(w)k 6125(tar)s 4(get)k
+6724(and)s 7128(promotion)s 8182(resumes.)s 480 10985(This)m 977(process)s
+1766(is)s 1997(e)s 3(xactly)k 2759(analogous)s 3802(to)s
+4062(placing)s 4840(w)s 2(ords)k 5495(onto)s 5995(a)s
+6182(line)s 6617(until)s 7131(space)s 7739(runs)s 8223(out,)s
+8657(then)s 0 10697(mo)m 3(ving)k 776(to)s 1008(another)s
+1778(line.)s 2293(But,)s 2740(as)s 2983(we)s 3311(kno)s 6(w)k 15(,)k
+3923(that)s 4335(simple)s 5021(method)s 5790(is)s 5993(inferior)s
+6762(to)s 6994(the)s 7335(optimal)s 8113(paragraph)s 0 10409(breaking)m
+893(used)s 1393(by)s 1690(Lout)s 2206(\(copied)s 2984(from)s
+3511(the)s 3863(T)s 3959 10361(E)m 4067 10409(X)m 4299(system\),)s
+5152(which)s 5797(e)s 3(xamines)k 6752(the)s 7103(entire)s
+7705(paragraph)s 8722(and)s 0 10121(determines)m 1099(the)s 1447(most)s
+1972(e)s 6(v)k 3(en)k 2472(assignment)s 3608(of)s
+3879(w)s 2(ords)k 4513(to)s 4752(lines.)s 480 9747(Lout)m
+1050(of)s 6(fers)k 240 fnt83 1709 9749(optimal)m 2559(galle)s 7(y)k
+3250(br)s 8(eaking)k 240 fnt82 4087 9747(,)m 4252(the)s
+4659(equi)s 6(v)k 6(alent)k 5761(for)s 6157(g)s 1(alle)k 3(ys)k
+6940(of)s 7269(optimal)s 8113(paragraph)s 0 9459(breaking.)m 1020(Optimal)s
+1878(g)s 1(alle)k 3(y)k 2532(breaking)s 3442(can)s
+3851(reduce)s 4564(the)s 4932(size)s 5378(of)s 5669(ugly)s
+6169(blank)s 6782(spaces)s 7477(at)s 7729(the)s 8097(bottom)s
+8855(of)s 0 9171(pages)m 596(preceding)s 1592(lar)s 4(ge)k
+2121(unbreakable)s 3346(displays,)s 4237(sometimes)s 5310(quite)s 5844(dramatically)s 15(.)k
+480 8797(Optimal)m 1337(g)s 1(alle)k 3(y)k 1990(breaking)s
+2900(is)s 3129(applied)s 3910(to)s 4169(each)s 4683(g)s 1(alle)k 3(y)k 15(,)k
+5375(horizontal)s 6418(or)s 6696(v)s 3(ertical,)k 7535(that)s
+7972(possesses)s 8960(a)s 0 8509(parameter)m 1036(or)s 1317(nested)s
+2008(symbol)s 2790(called)s 220 fnt35 3440 8506(@Optimiz)m 3(e)k
+240 fnt82 4599 8509(whose)m 5290(v)s 6(alue)k 5880(is)s
+220 fnt35 6112 8506(Y)m 30(es)k 240 fnt82 6453 8509(.)m
+6639(Lik)s 2(e)k 7153(cross)s 7717(referencing,)s 8934(it)s
+0 8221(tak)m 2(es)k 539(tw)s 2(o)k 947(runs)s
+1409(to)s 1646(ha)s 4(v)k 3(e)k 2145(ef)s 6(fect.)k
+2844(On)s 3192(the)s 3538(\207rst)s 3968(run,)s 4392(Lout)s
+4902(records)s 5655(the)s 6001(sizes)s 6514(of)s 6784(the)s
+7130(g)s 1(alle)k 3(y')k 13(s)k 7918(components)s
+0 7933(and)m 393(g)s 1(aps,)k 927(and)s 1319(also)s
+1746(the)s 2083(space)s 2658(a)s 4(v)k 6(ailable)k
+3555(at)s 3776(each)s 4259(of)s 4519(its)s 4783(tar)s 4(gets.)k
+5568(At)s 5856(end)s 6248(of)s 6508(run)s 6873(this)s
+7257(information)s 8431(is)s 8629(used)s 0 7645(to)m 232(\207nd)s
+656(an)s 932(optimal)s 1709(break,)s 2340(which)s 2975(is)s
+3177(written)s 3903(to)s 4135(the)s 4475(cross-reference)s 5981(database.)s
+6961(On)s 7303(the)s 7644(second)s 8360(run,)s 8778(the)s
+0 7357(optimal)m 785(break)s 1377(is)s 1587(retrie)s 6(v)k 3(ed)k
+2484(and)s 2888(used.)s 480 6983(Considering)m 1727(that)s 2170(this)s
+2590(process)s 3383(must)s 3932(cope)s 4465(with)s 4971(\210oating)s
+5780(\207gures,)s 6562(ne)s 6(w)k 7034(page)s 7566(and)s
+7995(conditional)s 0 6695(ne)m 6(w)k 460(page)s 982(symbols,)s
+1901(breaks)s 2589(for)s 2941(ne)s 6(w)k 3402(chapters,)s
+4318(and)s 4736(e)s 6(v)k 4(olving)k 5631(documents,)s
+6788(it)s 6994(is)s 7218(surprisingly)s 8428(rob)s 4(ust.)k
+0 6407(If)m 250(it)s 463(does)s 974(go)s 1287(badly)s
+1894(wrong,)s 2634(remo)s 3(ving)k 3621(\207le)s 220 fnt35
+4003 6404(lout.li)m 240 fnt82 4580 6407(then)m 5069(running)s 5888(Lout)s
+6421(twice)s 7014(without)s 7826(changing)s 8778(the)s 0 6119(document)m
+1036(may)s 1534(solv)s 3(e)k 2125(the)s 2505(problem.)s
+3498(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+4491(cases)s 5078(are)s 5457(kno)s 6(wn)k 6194(where)s
+6866(the)s 7246(optimization)s 8544(ne)s 6(v)k 3(er)k
+0 5831(con)m 9(v)k 3(er)k 4(ges.)k 1151(These)s
+1812(are)s 2193(usually)s 2972(related)s 3713(to)s 3986(\207gures)s
+4721(and)s 5159(footnotes)s 6134(whose)s 6836(anchor)s 7581(points)s
+8251(f)s 2(all)k 8655(near)s 0 5543(page)m 508(boundaries.)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 36 42
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+480 fnt84 0 12955(Chapter)m 1819(3.)s 2400(Pr)s 8(ede\207ned)k
+4711(symbols)s 240 fnt84 0 11691(3.1.)m 471(@Begin)s 1335(and)s
+1776(@End)s 240 fnt82 480 11214(The)m 905(body)s 1435(of)s
+1702(a)s 1864(symbol)s 220 fnt35 2620 11211(@Sym)m 240 fnt82
+3324 11214(may)m 3786(be)s 4064(enclosed)s 4955(in)s 220 fnt35
+5194 11211(@Begin)m 240 fnt82 6019 11214(and)m 220 fnt35 6419 11211(@End)m
+7076(@Sym)s 240 fnt82 7780 11214(instead)m 8511(of)s 8778(the)s
+0 10926(more)m 547(usual)s 1107(braces:)s 220 fnt35 480 10475(def @Section)m
+480 10187( named @Title {})m 480 9899( r)m -3(ight @Body)k 480 9611(@Begin)m 480 9323( @Title //2v @Body)m
+480 9035(@End @Section)m 240 fnt82 0 8580(The)m 3(y)k 543(may)s
+1009(also)s 1447(enclose)s 2220(the)s 2568(right)s 3079(or)s
+3338(body)s 3872(parameter)s 4886(of)s 5157(a)s 5323(symbol)s
+6083(in)s 9(v)k 4(ocation:)k 220 fnt35 480 8079(@Chapter)m
+480 7791( @Title { Introduction })m 480 7503(@Begin)m 480 7215(This subject needs no introduction.)m 480 6927(@End @Chapter)m 240 fnt82
+0 6431(Apart)m 651(from)s 1222(their)s 1767(utility)s 2438(as)s
+2735(documentation)s 4262(aids,)s 4801(these)s 5396(forms)s 6051(allo)s 6(w)k
+6677(Basser)s 7422(Lout)s 7981(to)s 8268(pinpoint)s 0 6143(mismatched)m
+1206(braces,)s 1915(which)s 2549(can)s 2930(otherwise)s 3908(create)s
+4525(total)s 4996(ha)s 4(v)k 4(oc.)k 5716(F)s 3(or)k
+6098(this)s 6486(reason,)s 7209(the)s 3(y)k 7664(should)s
+8353(enclose)s 0 5855(the)m 339(major)s 946(parts)s 1451(of)s
+1712(documents,)s 2846(such)s 3333(as)s 3573(chapters)s 4410(and)s
+4804(sections.)s 5728(Note)s 6240(that)s 6648(braces)s 7299(cannot)s
+7987(be)s 8259(replaced)s 0 5567(by)m 220 fnt35 294 5564(@Begin)m
+240 fnt82 1123 5567(and)m 220 fnt35 1527 5564(@End)m 240 fnt82
+2188 5567(in)m 2431(general.)s 240 fnt84 0 4774(3.2.)m 471(Concatenation)s
+2015(symbols)s 2893(and)s 3334(paragraphs)s 240 fnt82 480 4297(There)m
+1093(are)s 1440(ten)s 1789(concatenation)s 3174(symbols,)s 4079(in)s
+4322(three)s 4855(f)s 2(amilies:)k 220 fnt35 480 3756(/)m
+962(^/)s 1547(//)s 2012(^//)s 240 fnt82 2580 3759(V)m 26(ertical)k
+3377(concatenation)s 220 fnt35 480 3468(|)m 962(^|)s 1547(||)s
+2012(^||)s 240 fnt82 2580 3471(Horizontal)m 3657(concatenation)s 220 fnt35
+480 3180(&)m 962(^&)s 240 fnt82 2580 3183(In-paragraph)m 3871(concatenation)s
+0 2642(Each)m 587(symbol)s 1399(produces)s 2367(an)s 2702(object)s
+3398(which)s 4093(combines)s 5113(together)s 6008(the)s 6409(tw)s 2(o)k
+6871(parameters.)s 8134(The)s 8615(right)s 0 2354(parameter)m 1014(must)s
+1539(be)s 1821(separated)s 2781(from)s 3305(the)s 3653(symbol)s
+4413(by)s 4707(at)s 4939(least)s 5436(one)s 5838(white)s
+6425(space)s 7012(character)s 13(.)k 480 1980(The)m 906(v)s 3(ertical)k
+1670(concatenation)s 3052(symbol)s 220 fnt35 3809 1977(/)m 240 fnt82
+3930 1980(places)m 4575(its)s 4848(left)s 5222(parameter)s 6233(abo)s 3(v)k 3(e)k
+6852(its)s 7125(right)s 7633(parameter)s 8644(with)s 0 1692(their)m
+519(column)s 1317(marks)s 1975(aligned.)s 2866(If)s 3119(one)s
+3544(parameter)s 4581(has)s 4973(more)s 5543(column)s 6341(marks)s
+6999(than)s 7491(the)s 7862(other)s 9(,)k 8474(empty)s
+0 1404(columns)m 868(are)s 1221(inserted)s 2041(at)s 2279(the)s
+2633(right)s 3150(to)s 3395(equalize)s 4253(the)s 4607(numbers.)s
+5601(The)s 6035(v)s 6(ariant)k 220 fnt35 6758 1401(//)m
+240 fnt82 6949 1404(ignores)m 7710(column)s 8491(marks)s 0 1116(and)m
+404(left-justi\207es)s 1594(the)s 1942(objects.)s 480 742(The)m 896(horizontal)s
+1908(concatenation)s 3280(symbols)s 220 fnt35 4117 739(|)m 240 fnt82
+4201 742(and)m 220 fnt35 4593 739(||)m 240 fnt82 4734 742(are)m
+5069(horizontal)s 6080(analogues)s 7076(of)s 220 fnt35 7334 739(/)m
+240 fnt82 7446 742(and)m 220 fnt35 7837 739(//)m 240 fnt82
+7962 742(:)m 8116(the)s 3(y)k 8566(place)s 192 fnt84
+4439 2(36)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 37 43
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.2.)m 454(Concatenation)s 1918(symbols)s 2744(and)s
+3170(par)s 3(a)k 2(gr)k 3(aphs)k 240 fnt84
+8831 13840(37)m 240 fnt82 0 13205(their)m 488(tw)s 2(o)k
+888(parameters)s 1976(side)s 2407(by)s 2692(side,)s 3174(with)s
+3646(ro)s 6(w)k 4056(mark)s 4599(alignment)s 5605(or)s
+5854(top-justi\207cation)s 7414(respecti)s 6(v)k 3(ely)k 15(.)k
+8698(The)s 0 12917(in-paragraph)m 1278(concatenation)s 2663(symbol)s 220 fnt35
+3423 12914(&)m 240 fnt82 3625 12917(produces)m 4540(horizontal)s 5564(concatenation)s
+6949(within)s 7617(a)s 7783(paragraph;)s 8850(its)s 0 12629(special)m
+718(properties)s 1724(are)s 2071(treated)s 2778(in)s 3021(detail)s
+3606(at)s 3838(the)s 4186(end)s 4590(of)s 4861(this)s
+5257(section.)s 480 12255(The)m 908(concatenation)s 2293(symbols)s 3142(in)s
+3385(an)s 3(y)k 3782(one)s 4184(f)s 2(amily)k
+4859(are)s 240 fnt83 5206 12257(mutually)m 6099(associative)s 240 fnt82
+7154 12255(,)m 7261(which)s 7903(means)s 8565(that)s 220 fnt35
+480 11754({)m 240 fnt83 664 11759(x)m 220 fnt35 890 11754(|)m
+240 fnt83 927 11759(p)m 1160(y)s 220 fnt35 1382 11754(})m
+1566(|)s 240 fnt83 1603 11759(q)m 1839(z)s 240 fnt82
+0 11258(is)m 210(al)s 2(w)k 2(ays)k 921(the)s
+1269(same)s 1816(as)s 240 fnt83 480 10762(x)m 220 fnt35
+706 10757(|)m 240 fnt83 743 10762(p)m 220 fnt35 976 10757({)m
+240 fnt83 1160 10762(y)m 220 fnt35 1382 10757(|)m 240 fnt83
+1419 10762(q)m 1655(z)s 220 fnt35 1866 10757(})m 240 fnt82
+0 10261(for)m 339(an)s 3(y)k 737(objects)s 240 fnt83
+1466 10263(x)m 240 fnt82 1572 10261(,)m 240 fnt83 1680 10263(y)m
+240 fnt82 1782 10261(,)m 1891(and)s 240 fnt83 2296 10263(z)m
+240 fnt82 2387 10261(,)m 2495(an)s 3(y)k 2893(g)s 1(aps)k
+240 fnt83 3383 10263(p)m 240 fnt82 3558 10261(and)m 240 fnt83
+3963 10263(q)m 240 fnt82 4140 10261(\(de\207ned)m 4983(belo)s 6(w\),)k
+5750(and)s 6155(an)s 3(y)k 6553(choice)s 7234(of)s
+220 fnt35 7506 10258(|)m 240 fnt82 7543 10261(,)m 220 fnt35
+7652 10258(^|)m 240 fnt82 7792 10261(,)m 220 fnt35 7900 10258(||)m
+240 fnt82 7994 10261(,)m 8102(and)s 220 fnt35 8507 10258(^||)m
+240 fnt82 8704 10261(.)m 8870(In)s 0 9973(practice)m 803(we)s
+1130(al)s 2(w)k 2(ays)k 1833(omit)s 2323(such)s
+2811(braces,)s 3520(since)s 4059(the)s 3(y)k 4513(are)s
+4852(redundant)s 5861(and)s 6257(can)s 6638(be)s 6912(misleading.)s
+8117(The)s 8536(result)s 0 9685(of)m 277(the)s 631(complete)s
+1569(sequence)s 2508(of)s 2786(concatenations)s 4264(will)s 4696(be)s
+4984(called)s 5619(the)s 240 fnt83 5973 9687(whole)m 6604(concatenation)s
+8020(object)s 240 fnt82 8608 9685(,)m 8722(and)s 0 9397(the)m
+348(objects)s 1076(which)s 1718(mak)s 2(e)k 2290(it)s
+2482(up)s 2775(will)s 3201(be)s 3483(called)s 4111(the)s
+240 fnt83 4459 9399(components)m 240 fnt82 5598 9397(.)m 480 9023(One)m
+938(mark)s 1494(is)s 1708(designated)s 2793(as)s 3047(the)s
+240 fnt83 3398 9025(principal)m 4339(mark)s 240 fnt82 4835 9023(,)m
+4946(usually)s 5695(the)s 6047(mark)s 6602(of)s 6877(the)s
+7229(\207rst)s 7664(component.)s 8896(A)s 0 8735(later)m 486(mark)s
+1042(can)s 1435(be)s 1721(chosen)s 2447(for)s 2789(this)s
+3189(honour)s 3932(by)s 4230(attaching)s 220 fnt35 5163 8732(^)m
+240 fnt82 5333 8735(to)m 5576(the)s 5928(preceding)s 6928(concatenation)s
+8317(symbol.)s 0 8447(See)m 401(Section)s 1175(3.10)s 1650(for)s
+1988(e)s 3(xamples.)k 480 8073(A)m 240 fnt83 712 8075(gap)m
+240 fnt82 1065 8073(,)m 1175(specifying)s 2227(the)s 2578(distance)s
+3420(between)s 4277(the)s 4627(tw)s 2(o)k 5040(parameters,)s
+6197(may)s 6666(follo)s 6(w)k 7341(an)s 3(y)k
+7741(concatenation)s 0 7785(symbol.)m 866(There)s 1475(may)s 1937(be)s
+2215(no)s 2504(spaces)s 3176(between)s 4026(a)s 4188(concatenation)s
+5569(symbol)s 6325(and)s 6726(its)s 6998(g)s 1(ap.)k
+7503(A)s 7729(missing)s 8522(g)s 1(ap)k 8916(is)s
+0 7497(tak)m 2(en)k 569(to)s 803(be)s 220 fnt35
+1081 7494(0ie)m 240 fnt82 1365 7497(.)m 1524(The)s 1948(g)s 1(ap)k
+2341(is)s 2546(ef)s 6(fecti)k 6(v)k 3(ely)k
+3601(a)s 3762(third)s 4267(parameter)s 5276(of)s 5542(the)s
+5886(concatenation)s 7266(symbol,)s 8074(and)s 8473(it)s 8660(may)s
+0 7209(be)m 289(an)s 579(arbitrary)s 1462(object)s 2113(pro)s 3(vided)k
+3026(that)s 3452(it)s 3651(e)s 6(v)k 6(aluates)k
+4586(to)s 4833(a)s 5006(juxtaposition)s 6319(of)s 6598(simple)s
+7298(w)s 2(ords.)k 8052(In)s 8316(general,)s 0 6921(the)m
+348(g)s 1(ap)k 746(must)s 1271(be)s 1553(enclosed)s
+2448(in)s 2691(braces,)s 3408(lik)s 2(e)k 3820(this:)s
+220 fnt35 480 6420(//{ @Style&&m)m 3(ystyle @Open { @T)k 26(opMargin } })k 240 fnt82
+0 5921(b)m 4(ut)k 349(the)s 684(braces)s 1332(may)s
+1785(be)s 2053(omitted)s 2828(when)s 3391(the)s 3726(object)s
+4356(is)s 4553(a)s 4706(juxtaposition)s 5999(of)s 6256(simple)s
+6936(w)s 2(ords)k 7557(or)s 7803(an)s 8072(in)s 9(v)k 4(ocation)k
+0 5633(of)m 271(a)s 437(symbol)s 1197(without)s 1988(parameters,)s
+3142(as)s 3392(in)s 220 fnt35 3635 5630(//0.3vx)m 240 fnt82
+4340 5633(and)m 220 fnt35 4744 5630(||@Indent)m 240 fnt82 5687 5633(.)m
+480 5259(A)m 704(g)s 1(ap)k 1096(consists)s 1898(of)s
+2162(a)s 2322(length)s 2971(plus)s 3415(a)s 3574(g)s 1(ap)k
+3966(mode)s 4548(plus)s 4992(an)s 5268(optional)s 6101(indication)s
+7108(of)s 7373(unbreakability)s 15(.)k 8896(A)s 240 fnt83
+0 4973(length)m 240 fnt82 659 4971(is)m 875(represented)s 2040(by)s
+2341(an)s 2630(decimal)s 3447(number)s 4244(\(which)s 4972(may)s
+5444(not)s 5816(be)s 6104(ne)s 3(g)k 1(ati)k 6(v)k 3(e\))k
+7036(follo)s 6(wed)k 7944(by)s 8244(a)s 8416(unit)s
+8855(of)s 0 4683(measurement.)m 1437(F)s 3(or)k 1825(e)s 3(xample,)k
+220 fnt35 2738 4680(2.5c)m 240 fnt82 3207 4683(represents)m 4225(the)s
+4572(length)s 5226(2.5)s 5571(centimetres.)s 6834(Figure)s 7513(3.1)s
+7847(gi)s 6(v)k 3(es)k 8393(the)s 8740(full)s
+0 4395(selection)m 906(of)s 1177(units)s 1693(of)s 1964(measurement.)s
+480 4021(After)m 1045(the)s 1396(length)s 2054(comes)s 2718(an)s
+3004(optional)s 240 fnt83 3846 4023(gap)m 4261(mode)s 240 fnt82
+4773 4021(,)m 4883(which)s 5528(is)s 5740(a)s 5909(single)s
+6539(letter)s 7090(follo)s 6(wing)k 8070(the)s 8421(length,)s
+0 3733(indicating)m 1031(ho)s 6(w)k 1514(the)s 1884(length)s
+2562(is)s 2794(to)s 3055(be)s 3359(measured.)s 4462(As)s
+4801(sho)s 6(wn)k 5500(in)s 5765(Figure)s 6468(3.2,)s
+6897(with)s 7401(edge-to-edge)s 8728(g)s 1(ap)k 0 3445(mode)m
+603(the)s 967(length)s 240 fnt83 1638 3447(l)m 240 fnt82
+1780 3445(is)m 2006(measured)s 2996(from)s 3536(the)s 3900(trailing)s
+4658(edge)s 5181(of)s 5468(the)s 5832(\207rst)s 6279(object)s
+6939(to)s 7194(the)s 7558(leading)s 8331(edge)s 8855(of)s
+0 3157(the)m 347(second.)s 1174(Edge-to-edge)s 2516(is)s 2725(the)s
+3071(def)s 2(ault)k 3790(mode:)s 4486(the)s 220 fnt35
+4833 3154(e)m 240 fnt82 5005 3157(may)m 5469(be)s 5749(omitted.)s
+6642(Hyphenation)s 7934(g)s 1(ap)k 8330(mode)s 8916(is)s
+0 2869(similar)m 9(,)k 760(e)s 3(xcept)k 1441(as)s
+1691(e)s 3(xplained)k 2676(at)s 2908(the)s 3256(end)s
+3660(of)s 3931(this)s 4327(section.)s 480 2495(Mark-to-mark,)m 1957(o)s 3(v)k 3(erstrik)k 2(e,)k
+3028(and)s 3450(k)s 2(erning)k 4249(measure)s 5118(the)s
+5484(length)s 6156(from)s 6698(the)s 7063(last)s 7471(mark)s
+8041(of)s 8329(the)s 8695(\207rst)s 0 2207(object)m 648(to)s
+892(the)s 1245(\207rst)s 1680(mark)s 2237(of)s 2513(the)s
+2865(second.)s 3699(In)s 3960(the)s 4312(case)s 4784(of)s
+5060(mark-to-mark,)s 6497(if)s 6719(the)s 7072(length)s 7731(is)s
+7946(too)s 8310(small)s 8887(to)s 0 1919(pre)m 6(v)k 3(ent)k
+771(the)s 1123(objects)s 1855(almost)s 2556(o)s 3(v)k 3(erlapping,)k
+3804(it)s 4000(is)s 4214(widened)s 5087(until)s 5584(the)s 3(y)k
+6051(no)s 6348(longer)s 7023(do.)s 7431(\(The)s 7942(e)s 3(xtra)k
+240 fnt83 8480 1921(l/10)m 240 fnt82 8916 1919(is)m 0 1631(not)m
+362(applied)s 1119(when)s 1690(plain)s 2220(te)s 3(xt)k
+2630(output)s 3298(is)s 3503(in)s 3741(ef)s 6(fect.\))k
+4520(K)s 6(erning)k 5346(also)s 5780(widens,)s 6560(with)s
+7037(the)s 7380(aim)s 7793(of)s 8059(pre)s 6(v)k 3(enting)k
+0 1343(the)m 372(mark)s 948(of)s 1243(either)s 1870(object)s
+2539(from)s 3087(o)s 3(v)k 3(erlapping)k 4301(the)s
+4673(other)s 5248(object;)s 5969(this)s 6389(mode)s 7001(is)s
+7235(used)s 7756(for)s 8119(subscripts)s 0 1055(and)m 404(superscripts.)s
+558 681(T)m 19(ab)k 4(ulation)k 1646(ignores)s 2419(the)s
+2785(\207rst)s 3234(object)s 3896(and)s 4318(places)s 4984(the)s
+5350(leading)s 6125(edge)s 6651(of)s 6940(the)s 7306(second)s
+8047(object)s 8709(at)s 8960(a)s 0 393(distance)m 240 fnt83
+842 395(l)m 240 fnt82 971 393(from)m 1498(the)s 1849(left)s
+2229(edge)s 2740(of)s 3014(the)s 3365(whole)s 4009(concatenation)s
+5397(object.)s 6148(It)s 6356(is)s 6569(the)s 6920(main)s
+7458(user)s 7919(of)s 8193(the)s 220 fnt35 8544 390(b)m
+240 fnt82 8722 393(and)m 220 fnt35 0 102(r)m 240 fnt82
+141 105(units)m 666(of)s 945(measurement;)s 2340(for)s 2686(e)s 3(xample,)k
+220 fnt35 3609 102(|1r)m -8(t)k 240 fnt82 3994 105(will)m
+4429(right-justify)s 5631(the)s 5988(follo)s 6(wing)k 6973(component,)s
+8153(and)s 220 fnt35 8566 102(|0.5r)m -8(t)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 38 44
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(38)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s gsave
+0 13282 translate
+240 fnt82 0 86 0 86 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+0 13368 translate
+240 fnt82 170 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhsp
+grestore
+
+grestore
+gsave
+0 13113 translate
+240 fnt82 0 169 0 60 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+0 13027 translate
+240 fnt82 0 86 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+170 13368 translate
+240 fnt82 169 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+220 fnt35 170 13116(c)m
+gsave
+339 13368 translate
+240 fnt82 170 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+509 13368 translate
+240 fnt82 170 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+679 13368 translate
+240 fnt82 8217 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+240 fnt82 679 13119(Centimetres.)m 170 0 0 0 240 288 60 8896 13368 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+0 86 0 86 240 288 60 9066 13282 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 169 0 60 240 288 60 9066 13113 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 13027 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 12941 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 166 0 57 240 288 60 0 12775 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 12689 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 12775(i)m 240 fnt82
+679 12778(Inches.)m 0 86 0 86 240 288 60 9066 12941 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 166 0 57 240 288 60 9066 12775 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 12689 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 12603 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 211 0 102 240 288 60 0 12392 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 12306 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 12437(p)m 240 fnt82 679 12440(Points)m
+1328(\()s 220 fnt35 1401 12437(72p)m 240 fnt82 1819 12440(=)m
+220 fnt35 2007 12437(1i)m 240 fnt82 2163 12440(\).)m 0 86 0 86 240 288 60 9066 12603 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 211 0 102 240 288 60 9066 12392 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 12306 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 12220 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 204 0 96 240 288 60 0 12016 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 11930 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35
+170 12055(m)m 240 fnt82 679 12058(Ems)m 1155(\()s 220 fnt35
+1228 12055(12m)m 240 fnt82 1701 12058(=)m 220 fnt35 1889 12055(1i)m
+240 fnt82 2045 12058(\).)m 0 86 0 86 240 288 60 9066 12220 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 204 0 96 240 288 60 9066 12016 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 11930 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 11844 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 0 11341 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 11255 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 11678(f)m 240 fnt82
+679 11681(One)m 220 fnt35 1123 11678(f)m 240 fnt82 1229 11681(equals)m
+1879(the)s 2215(size)s 2631(of)s 2890(the)s 3226(current)s
+3950(font,)s 4431(as)s 4669(speci\207ed)s 5565(by)s 5847(the)s
+220 fnt35 6184 11678(@F)m 6(ont)k 240 fnt82 6884 11681(symbol)m
+7632(\(Section)s 8473(3.3\).)s 679 11393(This)m 1155(unit)s 1587(is)s
+1797(appropriate)s 2941(for)s 3279(lengths)s 4021(that)s 4439(should)s
+5136(change)s 5870(with)s 6352(the)s 6700(font)s 7145(size.)s
+0 86 0 86 240 288 60 9066 11844 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 9066 11341 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 11255 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 11169 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 0 10666 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 10580 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 11003(s)m 240 fnt82 679 11006(One)m 220 fnt35
+1125 11003(s)m 240 fnt82 1279 11006(equals)m 1932(the)s 2271(preferred)s
+3194(g)s 1(ap)k 3582(between)s 4427(tw)s 2(o)k
+4828(w)s 2(ords)k 5453(in)s 5687(the)s 6025(current)s
+6752(font,)s 7235(as)s 7476(speci\207ed)s 8375(in)s 8608(the)s
+679 10718(de\207nition)m 1653(of)s 1924(the)s 2272(font,)s 2764(or)s
+3023(by)s 3317(the)s 220 fnt35 3665 10715(@Space)m 240 fnt82
+4562 10718(symbol)m 5322(\(Section)s 6175(3.4\).)s 0 86 0 86 240 288 60 9066 11169 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 9066 10666 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 10580 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 10494 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 791 0 682 240 288 60 0 9703 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 9617 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 10328(v)m
+240 fnt82 679 10331(One)m 220 fnt35 1149 10328(v)m 240 fnt82
+1334 10331(equals)m 2011(the)s 2375(current)s 3126(g)s 1(ap)k
+3540(between)s 4410(lines)s 4927(introduced)s 6024(during)s 6717(paragraph)s
+7746(breaking,)s 8706(as)s 679 10043(speci\207ed)m 1574(by)s 1854(the)s
+220 fnt35 2188 10040(@Break)m 240 fnt82 3030 10043(symbol)m 3777(\(Section)s
+4616(3.4\).)s 5145(This)s 5607(unit)s 6026(is)s 6222(appropriate)s
+7352(for)s 7676(lengths,)s 8460(such)s 679 9755(as)m 929(the)s
+1277(spaces)s 1952(between)s 2806(paragraphs,)s 3962(which)s 4604(should)s
+5301(change)s 6035(with)s 6517(the)s 6865(inter)s 4(-line)k
+7791(g)s 1(ap.)k 0 86 0 86 240 288 60 9066 10494 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 791 0 682 240 288 60 9066 9703 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 9617 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 9531 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 454 0 345 240 288 60 0 9077 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 8991 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 9365(w)m 240 fnt82
+679 9368(One)m 220 fnt35 1167 9365(w)m 240 fnt82 1416 9368(equals)m
+2111(the)s 2493(width)s 3128(of)s 3432(the)s 3813(follo)s 6(wing)k
+4824(component,)s 6028(or)s 6320(its)s 6629(height)s 7321(if)s
+7571(the)s 7952(symbol)s 8746(is)s 679 9080(v)m 3(ertical)k
+1446(concatenation.)s 0 86 0 86 240 288 60 9066 9531 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 454 0 345 240 288 60 9066 9077 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 8991 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 8905 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 454 0 345 240 288 60 0 8451 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 8365 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 8739(b)m 240 fnt82 679 8742(One)m
+220 fnt35 1133 8739(b)m 240 fnt82 1305 8742(equals)m 1965(the)s
+2311(width)s 2912(of)s 3181(the)s 3527(whole)s 4166(concatenation)s
+5550(object,)s 6239(or)s 6496(its)s 6770(height)s 7427(if)s
+7642(the)s 7988(symbol)s 8746(is)s 679 8454(v)m 3(ertical)k
+1446(concatenation.)s 0 86 0 86 240 288 60 9066 8905 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 454 0 345 240 288 60 9066 8451 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 8365 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 8279 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 0 7776 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 7690 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 8113(r)m 240 fnt82 679 8116(One)m
+220 fnt35 1176 8113(r)m 240 fnt82 1352 8116(equals)m 2057(one)s
+220 fnt35 2502 8113(b)m 240 fnt82 2718 8116(minus)m 3397(one)s
+220 fnt35 3842 8113(w)m 240 fnt82 3998 8116(.)m 4205(This)s
+4723(unit)s 5198(is)s 5451(used)s 5991(for)s 6371(centring,)s
+7304(and)s 7751(for)s 8132(left)s 8552(and)s 679 7828(right)m
+1190(justi\207cation.)s 0 86 0 86 240 288 60 9066 8279 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 503 0 394 240 288 60 9066 7776 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 7690 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 7604 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 215 0 106 240 288 60 0 7389 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 7303 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 7438(d)m 240 fnt82 679 7441(De)m 3(grees.)k
+1623(This)s 2099(unit)s 2531(may)s 2997(only)s 3477(be)s
+3759(used)s 4256(with)s 4738(the)s 220 fnt35 5086 7438(@Rotate)m
+240 fnt82 6007 7441(symbol.)m 0 86 0 86 240 288 60 9066 7604 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 215 0 106 240 288 60 9066 7389 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 7303 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 7217 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 504 0 394 240 288 60 0 6713 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 6627 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+220 fnt35 170 7050(y)m 240 fnt82
+679 7053(One)m 220 fnt35 1129 7050(y)m 240 fnt82 1292 7053(equals)m
+1949(the)s 2292(current)s 3023(v)s 6(alue)k 3586(set)s
+3906(by)s 4195(the)s 220 fnt35 4538 7050(@YUnit)m 240 fnt82
+5347 7053(symbol)m 6102(\(Section)s 6950(3.6\).)s 7488(This)s 7959(unit)s
+8386(is)s 8590(not)s 679 6765(used)m 1176(internally)s 2145(by)s
+2439(Lout;)s 3003(it)s 3195(is)s 3405(included)s 4287(for)s
+4625(the)s 4973(con)s 9(v)k 3(enience)k 6213(of)s
+6484(application)s 7603(packages.)s 0 86 0 86 240 288 60 9066 7217 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 504 0 394 240 288 60 9066 6713 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 6627 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 86 240 288 60 0 6541 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 504 0 394 240 288 60 0 6037 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 0 5951 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+170 0 0 0 240 288 60 0 5951 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+220 fnt35 170 6374(z)m gsave
+170 5951 translate
+240 fnt82 169 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+339 5951 translate
+240 fnt82 170 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+509 5951 translate
+240 fnt82 170 0 0 0 240 288 60 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+240 fnt82
+679 6377(One)m 220 fnt35 1130 6374(z)m 240 fnt82 1290 6377(equals)m
+1948(the)s 2292(current)s 3024(v)s 6(alue)k 3588(set)s
+3909(by)s 4199(the)s 220 fnt35 4543 6374(@ZUnit)m 240 fnt82
+5341 6377(symbol)m 6097(\(Section)s 6946(3.6\).)s 7485(This)s 7957(unit)s
+8385(is)s 8590(not)s 679 6089(used)m 1176(internally)s 2145(by)s
+2439(Lout;)s 3003(it)s 3195(is)s 3405(included)s 4287(for)s
+4625(the)s 4973(con)s 9(v)k 3(enience)k 6213(of)s
+6484(application)s 7603(packages.)s 8217 0 0 0 240 288 60 679 5951 LoutGr2
+0.5 pt ltabhs
+grestore
+
+grestore
+170 0 0 0 240 288 60 8896 5951 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+0 86 0 86 240 288 60 9066 6541 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 504 0 394 240 288 60 9066 6037 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 86 0 0 240 288 60 9066 5951 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+200 fnt84 1938 5388(Figur)m 3(e)k
+2546(3.1.)s 200 fnt82 2938 5389(The)m 3294(thirteen)s 3948(units)s
+4377(of)s 4603(measurement)s 5713(pro)s 3(vided)k 6468(by)s
+6713(Lout.)s 240 fnt82 0 4758(will)m 426(centre)s 1065(it.)s
+480 4384(The)m 914(v)s 6(alue)k 220 fnt35 1488 4381(|0r)m -8(t)k
+240 fnt82 1871 4384(separating)m 2913(the)s 3267(\207rst)s 3704(and)s
+4115(second)s 4844(items)s 5418(in)s 5667(a)s 5840(sequence)s
+6779(of)s 7056(horizontally)s 8272(concate)s 8998(-)s 0 4096(nated)m
+572(objects)s 1296(is)s 1502(some)s 6(what)k 2522(special)s
+3236(in)s 3475(that)s 3889(it)s 4077(denotes)s 4855(left)s
+5228(justi\207cation)s 6409(of)s 6676(the)s 7020(object)s 7660(to)s
+7895(its)s 8167(left)s 8540(in)s 8778(the)s 0 3808(a)m 4(v)k 6(ailable)k
+902(space.)s 1590(This)s 2059(is)s 2262(identical)s 3132(with)s
+220 fnt35 3607 3805(|0ie)m 240 fnt82 4001 3808(when)m 4570(the)s
+4911(object)s 5548(to)s 5780(the)s 6121(left)s 6491(also)s
+6922(has)s 7285(the)s 7626(principal)s 8523(mark;)s 0 3520(b)m 4(ut)k
+354(when)s 922(it)s 1105(does)s 1587(not,)s 220 fnt35
+1991 3517(|0r)m -8(t)k 240 fnt82 2360 3520(will)m 2777(cause)s
+3356(the)s 3695(object)s 4331(to)s 4561(the)s 4901(left)s
+5269(to)s 5500(appear)s 6188(further)s 6889(to)s 7119(the)s
+7459(left)s 7827(than)s 8288(it)s 8471(w)s 2(ould)k
+0 3232(otherwise)m 985(ha)s 4(v)k 3(e)k 1486(done,)s
+2059(if)s 2276(space)s 2863(to)s 3102(do)s 3395(so)s
+3661(is)s 3871(a)s 4(v)k 6(ailable.)k 480 2858(A)m
+744(g)s 1(ap)k 1177(is)s 1421(optionally)s 2480(concluded)s
+3557(with)s 4073(an)s 4391(indication)s 5439(of)s 5744(unbreakability)s 15(,)k
+7252(which)s 7929(is)s 8173(a)s 8374(letter)s 220 fnt35
+8958 2855(u)m 240 fnt82 0 2570(appended)m 976(to)s 1215(the)s
+1563(g)s 1(ap.)k 2072(A)s 2303(paragraph)s 3316(will)s
+3742(ne)s 6(v)k 3(er)k 4324(be)s 4607(brok)s 2(en)k
+5327(at)s 5559(an)s 5842(unbreakable)s 7068(g)s 1(ap,)k
+7520(nor)s 7899(will)s 8325(a)s 8492(g)s 1(alle)k 3(y)k
+0 2282(be)m 293(brok)s 2(en)k 1025(across)s 1684(tw)s 2(o)k
+2106(tar)s 4(gets)k 2800(at)s 3044(such)s 3551(a)s
+3729(g)s 1(ap.)k 4249(Basser)s 4958(Lout')s 13(s)k
+5631(implementation)s 7200(is)s 7421(slightly)s 8204(defecti)s 6(v)k 3(e)k
+0 1994(in)m 242(that)s 659(it)s 849(ignores)s 1603(an)s 3(y)k
+1999(unbreakable)s 3222(indication)s 4234(in)s 4476(the)s 4822(g)s 1(ap)k
+5219(separating)s 6253(the)s 6599(\207rst)s 7029(component)s 8151(promoted)s
+0 1706(into)m 425(an)s 3(y)k 822(tar)s 4(get)k
+1421(from)s 1945(the)s 2293(second.)s 480 1332(When)m 1111(tw)s 2(o)k
+1523(objects)s 2254(are)s 2603(separated)s 3566(only)s 4048(by)s
+4345(zero)s 4811(or)s 5072(more)s 5622(white)s 6211(space)s
+6801(characters)s 7821(\(spaces,)s 8634(tabs,)s 0 1044(ne)m 6(wlines,)k
+983(and)s 1420(formfeeds\),)s 2607(Lout)s 3152(inserts)s 220 fnt35
+3859 1041(&)m 240 fnt83 4001 1046(k)m 220 fnt35 4111 1041(s)m
+240 fnt82 4307 1044(between)m 5194(the)s 5575(tw)s 2(o)k
+6018(objects,)s 6835(where)s 240 fnt83 7508 1046(k)m 240 fnt82
+7711 1044(is)m 7954(the)s 8335(number)s 0 756(of)m 291(spaces.)s
+1100(Precisely)s 15(,)k 240 fnt83 2087 758(k)m 240 fnt82
+2278 756(is)m 2509(determined)s 3662(by)s 3977(discarding)s 5047(all)s
+5360(space)s 5968(characters)s 7007(and)s 7431(tabs)s 7888(that)s
+8327(precede)s 0 468(ne)m 6(wlines)k 903(\(these)s 1537(are)s
+1892(in)s 9(visible)k 2771(so)s 3045(are)s 3400(better)s
+4012(ignored\),)s 4937(then)s 5414(counting)s 6313(1)s 6477(for)s
+6823(each)s 7326(ne)s 6(wline,)k 8193(formfeed)s 0 180(or)m
+259(space,)s 897(and)s 1301(8)s 1468(for)s 1806(each)s
+2301(tab)s 2646(character)s 13(.)k 3671(The)s 4099(g)s 1(ap)k
+4497(will)s 4923(be)s 5205(unbreakable)s 6430(if)s 240 fnt83
+6647 182(k)m 240 fnt82 6817 180(is)m 7027(zero.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 39 45
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.2.)m 454(Concatenation)s 1918(symbols)s 2744(and)s
+3170(par)s 3(a)k 2(gr)k 3(aphs)k 240 fnt84
+8832 13840(39)m gsave
+1450 5884 translate
+240 fnt82 6166 7484 0 7484 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+0 6710(Edge-to-edge)m 220 fnt35 1786 6707(|)m 240 fnt83
+1843 6712(l)m 220 fnt35 1929 6707(e)m 240 fnt82 0 5558(Hyphenation)m
+220 fnt35 1786 5555(|)m 240 fnt83 1843 5560(l)m 220 fnt35
+1929 5555(h)m 240 fnt82 0 4406(Ov)m 3(erstrik)k 2(e)k
+220 fnt35 1786 4403(|)m 240 fnt83 1843 4408(l)m 220 fnt35
+1929 4403(o)m 240 fnt82 0 3254(Mark-to-mark)m 220 fnt35 1786 3251(|)m
+240 fnt83 1843 3256(l)m 220 fnt35 1929 3251(x)m 240 fnt82
+0 2102(K)m 6(erning)k 220 fnt35 1786 2099(|)m 240 fnt83
+1843 2104(l)m 220 fnt35 1929 2099(k)m 240 fnt82 0 950(T)m 19(ab)k 4(ulation)k
+220 fnt35 1786 947(|)m 240 fnt83 1843 952(l)m 220 fnt35
+1929 947(t)m gsave
+2764 0 translate
+240 fnt82 3402 7484 0 7484 240 288 60 LoutGraphic
+gsave
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+gsave
+567 6748 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 6634 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 6748 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 6634 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2267 6658 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+1247 6658 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+1247 6658 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+1247 6658 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt83 1732 6455(l)m gsave
+567 5596 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 5482 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 5596 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 5482 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2267 5506 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+1247 5506 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+1247 5506 translate
+180 fnt82 1020 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+1247 5506 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1732 5303(l)m gsave
+567 4444 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 4330 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 4444 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 4330 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 4297 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 4297 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 4297 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 4297 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1590 4095(l)m
+gsave
+567 3242 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 3128 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 3242 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 3128 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 3095 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 3095 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 3095 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 3095 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt82 975 2892(max\()m 180 fnt83 1383 2893(l,)m 1503(a+b+l/10)s
+180 fnt82 2205 2892(\))m gsave
+1247 3719 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+567 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 3719 translate
+30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+567 0 0 0 180 288 45 680 3719 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 3719 translate
+-30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt83 920 3787(a)m gsave
+2551 3719 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+2268 3719 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+2268 3719 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+2268 3719 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+2366 3743(b)m
+gsave
+567 2090 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 1976 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 2090 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 1976 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2551 1943 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 1943 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+680 1943 translate
+180 fnt82 1871 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 1943 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt82 1203 1740(max\()m 180 fnt83 1611 1741(l,)m 1731(a,)s
+1891(b)s 180 fnt82 1977 1740(\))m gsave
+1247 2567 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+567 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+680 2567 translate
+30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+567 0 0 0 180 288 45 680 2567 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+680 2567 translate
+-30.0000 rotate
+68 0 0 0 180 288 45 0 0 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+180 fnt83 920 2635(a)m
+gsave
+2551 2567 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+2268 2567 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+2268 2567 translate
+180 fnt82 283 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+2268 2567 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+2366 2591(b)m gsave
+567 938 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+680 824 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 938 translate
+180 fnt82 680 340 0 340 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto
+xsize ysize lineto 0 ysize lineto closepath
+gsave 0.9 setgray fill grestore stroke
+grestore
+
+grestore
+gsave
+2551 824 translate
+180 fnt82 0 567 0 567 180 288 45 LoutGraphic
+gsave
+0 0 moveto 0 ysize lineto [ 3 pt ] 0 setdash stroke
+grestore
+
+grestore
+gsave
+2268 734 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 2268 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+0 734 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 734 translate
+180 fnt82 2268 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 734 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1587 532(l)m gsave
+3402 234 translate
+180.0000 rotate
+gsave
+0 0 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 0 translate
+180 fnt82 3402 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 0 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+gsave
+0 234 translate
+30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+gsave
+0 234 translate
+180 fnt82 3402 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+gsave
+0 234 translate
+-30.0000 rotate
+gsave
+0 0 translate
+180 fnt82 68 0 0 0 180 288 45 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+
+grestore
+1189 23(curr)m 6(ent)k 1759(bound)s
+
+grestore
+end end restore
+grestore
+200 fnt84 2562 5321(Figur)m 3(e)k 3170(3.2.)s 200 fnt82
+3562 5322(The)m 3918(six)s 4196(g)s 1(ap)k 4527(modes)s
+5089(pro)s 3(vided)k 5844(by)s 6089(Lout.)s 240 fnt82
+480 4689(A)m 724(sequence)s 1672(of)s 1958(tw)s 2(o)k
+2383(or)s 2657(more)s 3219(objects)s 3962(separated)s 4936(by)s
+220 fnt35 5245 4686(&)m 240 fnt82 5462 4689(symbols)m 6326(is)s
+6551(a)s 240 fnt83 6732 4691(par)m 3(a)k 2(gr)k 3(aph)k
+240 fnt82 7745 4689(.)m 7924(Lout)s 8451(breaks)s 0 4401(paragraphs)m
+1100(into)s 1526(lines)s 2029(automatically)s 3384(as)s 3635(required,)s
+4539(by)s 4834(con)s 9(v)k 3(erting)k 5898(some)s
+6460(of)s 6732(the)s 220 fnt35 7081 4398(&)m 240 fnt82
+7284 4401(symbols)m 8134(into)s 220 fnt35 8560 4398(//1vx)m 240 fnt82
+9022 4401(.)m 0 4113(Unbreakable)m 1279(g)s 1(aps)k 1769(are)s
+2117(not)s 2485(eligible)s 3258(for)s 3597(this)s 3995(con)s 9(v)k 3(ersion.)k
+5198(`Optimal')s 6173(line)s 6588(breaks)s 7265(are)s 7613(chosen,)s
+8386(using)s 8960(a)s 0 3825(method)m 776(adapted)s 1578(from)s
+2102(T)s 2198 3777(E)m 2306 3825(X)m 2535([5)s 2720(].)s
+480 3451(If)m 735(an)s 220 fnt35 1043 3448(&)m 240 fnt82
+1271 3451(symbol)m 2056(whose)s 2750(g)s 1(ap)k 3173(has)s
+3568(h)s 1(yphenation)k 4834(mode)s 5447(is)s 5683(chosen)s
+6430(for)s 6793(replacement)s 8046(by)s 220 fnt35 8365 3448(//1vx)m
+240 fnt82 8827 3451(,)m 8960(a)s 0 3163(h)m 1(yphen)k
+755(will)s 1174(be)s 1448(appended)s 2417(to)s 2649(the)s
+2989(preceding)s 3978(object,)s 4661(unless)s 5303(that)s 5714(object)s
+6350(is)s 6553(a)s 6712(w)s 2(ord)k 7252(which)s
+7887(already)s 8636(ends)s 0 2875(with)m 482(a)s 648(h)s 1(yphen.)k
+1517(F)s 3(or)k 1906(e)s 3(xample,)k 220 fnt35
+480 2378(Long)m 1017(w)s 2(ords)k 1654(ma)s 6(y)k
+2122(be)s 2419(h)s 6(yph &0ih enat &0ih ed.)k 240 fnt82 0 1879(could)m
+590(ha)s 4(v)k 3(e)k 1091(the)s 1439(follo)s 6(wing)k
+2416(result,)s 3053(depending)s 4104(where)s 4744(the)s 5092(line)s
+5506(breaks)s 6181(f)s 2(all:)k 480 1376(Long)m 1038(w)s 2(ords)k
+1670(may)s 2135(be)s 2415(h)s 1(yphenat)k 3292(-)s
+480 1088(ed.)m 0 635(Basser)m 702(Lout)s 1219(inserts)s 1898(h)s 1(yphenation)k
+3143(g)s 1(aps)k 3637(automatically)s 4996(as)s 5251(required,)s
+6159(ag)s 1(ain)k 6738(follo)s 6(wing)k 7720(the)s
+8073(method)s 8855(of)s 0 347(T)m 96 299(E)m 204 347(X)m
+373(,)s 479(which)s 1120(approximates)s 2458(the)s 2804(h)s 1(yphenations)k
+4130(in)s 4372(W)s 19(ebster')k 13(s)k 5358(dictionary)s 15(.)k
+6474(T)s 19(o)k 6773(pre)s 6(v)k 3(ent)k
+7540(the)s 7886(h)s 1(yphenation)k 0 59(of)m 268(a)s
+430(single)s 1053(w)s 2(ord,)k 1646(enclose)s 2416(it)s
+2604(in)s 2843(quotes.)s 3628(Further)s 4387(control)s 5116(o)s 3(v)k 3(er)k
+5591(paragraph)s 6600(breaking)s 7486(and)s 7886(h)s 1(yphenation)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 40 46
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Times-BoldItalic
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-BoldItalic
+/Times-BoldItalicfnt85 vec2 /Times-BoldItalic LoutRecode
+/fnt85 { /Times-BoldItalicfnt85 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(40)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13203(is)m
+210(pro)s 3(vided)k 1116(by)s 1410(the)s 220 fnt35
+1758 13200(@Break)m 240 fnt82 2614 13203(and)m 220 fnt35 3018 13200(@Space)m
+240 fnt82 3915 13203(symbols)m 4764(\(Sections)s 5704(3.4)s 6058(and)s
+6462(3.5\).)s 240 fnt84 0 12410(3.3.)m 471(@F)s 6(ont)k
+1226(and)s 1667(@Char)s 240 fnt82 480 11978(A)m 240 fnt83
+728 11980(font)m 240 fnt82 1182 11978(is)m 1410(a)s 1594(collection)s
+2611(of)s 2900(characters)s 3936(which)s 4596(may)s 5080(be)s
+5380(printed.)s 6239(Man)s 3(y)k 6867(fonts)s 7414(come)s
+8006(in)s 240 fnt83 8268 11980(families)m 240 fnt82 9019 11978(,)m
+0 11690(which)m 634(are)s 973(groups)s 1667(of)s 1930(fonts)s
+2450(that)s 2860(ha)s 4(v)k 3(e)k 3352(been)s
+3853(designed)s 4754(to)s 4984(go)s 5269(together)s 13(.)k
+6194(F)s 3(or)k 6575(e)s 3(xample,)k 7480(the)s
+7820(T)s 8(imes)k 8451(f)s 2(amily)k 0 11402(includes)m
+848(the)s 1196(follo)s 6(wing)k 2173(fonts:)s 480 10899(T)m 8(imes)k
+1120(Base)s 240 fnt83 480 10613(T)m 13(imes)k 1093(Slope)s
+240 fnt84 480 10322(T)m 4(imes)k 1154(Bold)s 240 fnt85
+480 10034(T)m 8(imes)k 1116(BoldSlope)s 240 fnt82 0 9532(Thus,)m
+586(each)s 1080(font)s 1524(has)s 1893(tw)s 2(o)k
+2303(names:)s 3019(its)s 240 fnt83 3294 9534(family)m 3946(name)s
+240 fnt82 4518 9532(\(T)m 8(imes,)k 5292(Helv)s 3(etica,)k
+6310(etc.\))s 6775(and)s 7179(its)s 240 fnt83 7454 9534(face)m
+7904(name)s 240 fnt82 8475 9532(\(Base,)m 0 9244(Slope,)m 682(etc.\).)s
+1294(T)s 8(imes)k 1964(Base)s 2516(is)s 2756(more)s
+3334(commonly)s 4443(called)s 5101(T)s 8(imes)k 5772(Roman,)s
+6601(and)s 7036(T)s 8(imes)k 7706(Slope)s 8338(is)s
+8579(more)s 0 8956(commonly)m 1085(called)s 1720(T)s 8(imes)k
+2367(Italic.)s 3027(Lout)s 3547(a)s 4(v)k 4(oids)k
+4222(these)s 4776(names)s 5445(in)s 5695(f)s 2(a)k 4(v)k 4(our)k
+6377(of)s 6655(generic)s 7418(names)s 8087(which)s 8737(can)s
+0 8668(be)m 282(applied)s 1044(to)s 1283(man)s 3(y)k
+1866(font)s 2311(f)s 2(amilies.)k 480 8294(Lig)m 1(atures,)k
+1488(such)s 1984(as)s 2234(\210)s 2420(for)s 2758(f)s
+2849(l)s 2970(and)s 3375(\207)s 3560(for)s 3898(f)s
+3989(i,)s 4163(are)s 4510(considered)s 5604(by)s 5899(Basser)s
+6596(Lout)s 7108(to)s 7348(be)s 7630(an)s 7913(inte)s 3(gral)k
+8695(part)s 0 8006(of)m 257(the)s 591(font:)s 1128(if)s
+1331(the)s 1665(font)s 2096(de\207nition)s 3056(\(see)s 3482(belo)s 6(w\))k
+4175(mentions)s 5089(them,)s 5660(the)s 3(y)k 6109(will)s
+6521(be)s 6789(used.)s 7378(Similarly)s 15(,)k 8344(k)s 2(erning)k
+0 7718(\(\207ne)m 510(adjustment)s 1636(of)s 1924(the)s 2289(space)s
+2893(between)s 3764(adjacent)s 4637(characters)s 5672(to)s 5928(impro)s 3(v)k 3(e)k
+6792(the)s 7157(appearance\))s 8377(is)s 8604(done)s 0 7430(whene)m 6(v)k 3(er)k
+988(indicated)s 1929(in)s 2179(the)s 2535(font)s 2987(de\207nition.)s
+4075(Enclosing)s 5092(one)s 5502(of)s 5780(the)s 6135(letters)s
+6775(in)s 220 fnt35 7026 7427(@OneCol)m 240 fnt82 8045 7430(is)m
+8262(one)s 8672(sure)s 0 7142(w)m 2(ay)k 451(to)s
+690(disable)s 1423(a)s 1589(lig)s 1(ature)k 2373(or)s
+2632(k)s 2(ern.)k 480 6768(The)m 220 fnt35 908 6765(@F)m 6(ont)k
+240 fnt82 1620 6768(symbol)m 2380(returns)s 3094(its)s 3370(right)s
+3881(parameter)s 4895(in)s 5138(a)s 5304(font)s 5749(and)s
+6153(size)s 6580(speci\207ed)s 7488(by)s 7782(its)s 8058(left:)s
+220 fnt35 480 6260({ )m 11(Times Base 12p } @F)k 6(ont)k 240 fnt83
+3155 6265(object)m 240 fnt82 0 5764(The)m 417(f)s 2(amily)k
+1080(and)s 1473(f)s 2(ace)k 1912(names)s 2563(must)s
+3076(ha)s 4(v)k 3(e)k 3565(appeared)s 4475(together)s
+5306(in)s 5538(a)s 220 fnt35 5692 5761(f)m 6(ontdef)k
+240 fnt82 6354 5764(;)m 6454(the)s 6791(size)s 7206(is)s
+7405(arbitrary)s 8268(and)s 8660(may)s 0 5476(be)m 283(gi)s 6(v)k 3(en)k
+865(in)s 1109(an)s 3(y)k 1508(one)s 1911(of)s
+2184(the)s 220 fnt35 2533 5473(c)m 240 fnt82 2638 5476(,)m
+220 fnt35 2747 5473(i)m 240 fnt82 2781 5476(,)m 220 fnt35
+2889 5473(p)m 240 fnt82 3003 5476(,)m 220 fnt35 3112 5473(m)m
+240 fnt82 3281 5476(,)m 220 fnt35 3389 5473(f)m 240 fnt82
+3447 5476(,)m 220 fnt35 3556 5473(s)m 240 fnt82 3659 5476(,)m
+3767(and)s 220 fnt35 4173 5473(v)m 240 fnt82 4343 5476(units)m
+4861(of)s 5133(measurement)s 6469(\(Section)s 7323(3.2\),)s 7811(although)s
+220 fnt35 8708 5473(10p)m 240 fnt82 0 5188(and)m 220 fnt35
+407 5185(12p)m 240 fnt82 828 5188(are)m 1178(the)s 1530(most)s
+2058(common)s 2956(sizes)s 3475(for)s 3816(te)s 3(xt.)k
+4338(There)s 4954(may)s 5424(be)s 5709(empty)s 6364(objects)s
+7096(and)s 220 fnt35 7503 5185(@Null)m 240 fnt82 8151 5188(objects)m
+8883(in)s 0 4900(the)m 348(left)s 725(parameter)s 1739(of)s
+220 fnt35 2010 4897(@F)m 6(ont)k 240 fnt82 2662 4900(;)m
+2774(these)s 3321(are)s 3668(ignored.)s 480 4526(When)m 1114(a)s
+220 fnt35 1286 4523(@F)m 6(ont)k 240 fnt82 2004 4526(symbol)m
+2769(is)s 2985(nested)s 3660(inside)s 4293(the)s 4646(right)s
+5163(parameter)s 6183(of)s 6459(another)s 220 fnt35 7242 4523(@F)m 6(ont)k
+240 fnt82 7960 4526(symbol,)m 8778(the)s 0 4238(inner)m 555(one)s
+961(determines)s 2065(the)s 2417(font)s 2867(of)s 3142(its)s
+3423(o)s 6(wn)k 3891(right)s 4406(parameter)s 13(.)k
+5516(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+6480(it)s 6677(may)s 7147(be)s 7434(abbre)s 6(viated)k
+8605(so)s 8876(as)s 0 3950(to)m 239(inherit)s 922(part)s
+1353(of)s 1624(the)s 1972(outer)s 2523(symbol:)s 220 fnt35
+480 3449({ )m 11(Times Base 12p } @F)k 6(ont)k 480 3161({ hello)m 8(, Slope @F)k 6(ont hello)k 8(, 15p @F)k 6(ont hello })k
+240 fnt82 0 2665(has)m 370(result)s 480 2184(hello,)m 240 fnt83
+1065 2186(hello,)m 300 fnt82 1636 2171(hello)m 240 fnt82 0 1700(The)m
+457(\207rst)s 918(inner)s 220 fnt35 1498 1697(@F)m 6(ont)k
+240 fnt82 2240 1700(inherits)m 3037(the)s 3414(outer)s 3995(f)s 2(amily)k
+4699(and)s 5133(size,)s 5641(changing)s 6601(only)s 7111(the)s
+7488(f)s 2(ace;)k 8025(the)s 8403(second)s 0 1412(inherits)m
+754(the)s 1089(outer)s 1627(f)s 2(amily)k 2289(and)s
+2680(f)s 2(ace.)k 3225(When)s 3841(a)s 3994(f)s 2(amily)k
+4656(name)s 5217(is)s 5413(gi)s 6(v)k 3(en,)k
+6030(it)s 6209(must)s 6721(be)s 6990(follo)s 6(wed)k
+7878(immediately)s 0 1124(by)m 294(a)s 460(f)s 2(ace)k
+911(name.)s 1593(A)s 1823(size)s 2250(change)s 2984(may)s
+3450(appear)s 4147(\207rst)s 4578(or)s 4837(last.)s 480 750(Sizes)m
+1035(of)s 1307(the)s 1656(form)s 2180(+)s 240 fnt83
+2308 752(length)m 240 fnt82 2962 750(and)m 3367(\211)s 240 fnt83
+3487 752(length)m 240 fnt82 4140 750(may)m 4607(also)s 5046(be)s
+5328(used,)s 5875(meaning)s 6753(that)s 7171(the)s 7520(font)s
+7966(size)s 8393(is)s 8604(to)s 8844(be)s 240 fnt83
+0 464(length)m 240 fnt82 649 462(lar)m 4(ger)k 1257(or)s
+1512(smaller)s 2269(than)s 2734(the)s 3078(inherited)s 3981(v)s 6(alue.)k
+4652(F)s 3(or)k 5037(e)s 3(xample,)k 5947(\211)s
+220 fnt35 6067 459(2p)m 240 fnt82 6359 462(is)m 6564(often)s
+7108(used)s 7601(for)s 7934(superscripts)s 0 174(and)m 407(subscripts.)s
+1530(These)s 2161(forms)s 2772(are)s 3123(highly)s 3792(recommended,)s
+5257(since)s 5808(the)s 3(y)k 6274(don')s 4(t)k
+6839(need)s 7352(to)s 7594(be)s 7880(changed)s 8739(if)s
+8960(a)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 41 47
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.3.)m 454(@F)s 25(ont)k 1165(and)s
+1591(@Char)s 240 fnt84 8839 13840(41)m 240 fnt82 0 13250(decision)m
+854(is)s 1064(made)s 1638(to)s 1877(alter)s 2360(the)s
+2708(font)s 3153(size)s 3580(of)s 3851(the)s 4199(document)s
+5203(as)s 5453(a)s 5619(whole.)s 480 12876(The)m 220 fnt35
+908 12873(@F)m 6(ont)k 240 fnt82 1620 12876(symbol)m 2380(also)s
+2818(switches)s 3692(to)s 3931(and)s 4335(from)s 4859(small)s
+5431(capitals:)s 220 fnt35 480 12375(smallcaps @F)m 6(ont ...)k 480 12087(nosmallcaps @F)m 6(ont ...)k
+240 fnt82 0 11591(These)m 639(may)s 1118(be)s 1412(nested,)s
+2143(and)s 2559(the)s 3(y)k 3035(cooperate)s 4033(with)s
+4527(other)s 5091(font)s 5548(changes.)s 6496(The)s 6936(precise)s
+7681(ef)s 6(fect)k 8290(depends)s 0 11303(on)m 293(the)s
+637(font)s 1078(\(see)s 1514(belo)s 6(w\).)k 2331(There)s
+2940(is)s 3146(a)s 3308(def)s 2(ault)k 4024(v)s 6(alue)k
+4588(\()s 220 fnt35 4661 11300(nosmallcaps)m 240 fnt82 5873 11303(\),)m
+6055(so)s 6317(it)s 6504(is)s 6710(not)s 7072(necessary)s
+8051(to)s 8285(mention)s 0 11015(this)m 396(attrib)s 4(ute)k
+1243(when)s 1819(gi)s 6(ving)k 2478(an)s 2761(initial)s
+3372(font.)s 480 10641(There)m 1080(are)s 1413(tw)s 2(o)k
+1810(prede\207ned)s 2864(symbols,)s 220 fnt35 3756 10638(@CurrF)m 11(amily)k
+240 fnt82 5083 10641(and)m 220 fnt35 5474 10638(@CurrF)m 11(ace)k
+240 fnt82 6592 10641(,)m 6685(which)s 7314(respecti)s 6(v)k 3(ely)k
+8499(return)s 0 10353(the)m 337(f)s 2(amily)k 1000(and)s
+1392(f)s 2(ace)k 1831(names)s 2482(of)s 2741(the)s
+3077(current)s 3801(font.)s 4339(F)s 3(or)k 4716(e)s 3(xample,)k
+5618(right)s 6117(no)s 6(w)k 220 fnt35 6567 10350(@CurrF)m 11(amily)k
+240 fnt82 7896 10353(is)m 8094(T)s 8(imes)k 8722(and)s
+220 fnt35 0 10062(@CurrF)m 11(ace)k 240 fnt82 1178 10065(is)m
+1388(Base.)s 480 9691(When)m 1109(Lout)s 1621(runs,)s 2140(the)s
+2488(\207rst)s 2919(thing)s 3464(it)s 3656(reads)s 4211(is)s
+4421(a)s 4587(list)s 4938(of)s 5209(font)s 5654(de\207nitions,)s
+6771(lik)s 2(e)k 7183(these:)s 220 fnt35 480 9183(f)m 6(ontdef )k 11(Times Base {)k
+240 fnt83 2842 9188(implementation-dependent)m 220 fnt35 5517 9183(})m 480 8895(f)m 6(ontdef )k 11(Times Slope {)k
+240 fnt83 2841 8900(implementation-dependent)m 220 fnt35 5516 8895(})m 240 fnt82
+0 8399(Each)m 552(line)s 983(tells)s 1449(Lout)s 1978(of)s
+2267(the)s 2632(e)s 3(xistence)k 3591(of)s 3880(a)s
+4063(font,)s 4573(and)s 4994(assigns)s 5754(it)s 5963(a)s
+6146(f)s 2(amily)k 6839(name)s 7430(and)s 7852(a)s
+8035(f)s 2(ace)k 8504(name.)s 0 8111(There)m 617(are)s
+969(a)s 1140(fe)s 6(w)k 1551(fonts)s 2085(which)s
+2732(are)s 3084(the)s 3437(only)s 3921(members)s 4853(of)s
+5129(their)s 5631(f)s 2(amilies;)k 6514(e)s 6(v)k 3(en)k
+7019(though)s 7747(these)s 8299(fonts)s 8833(do)s 0 7823(not)m
+357(need)s 857(a)s 1013(f)s 2(ace)k 1455(name,)s
+2070(the)s 3(y)k 2523(must)s 3039(be)s 3311(gi)s 6(v)k 3(en)k
+3881(one)s 4274(by)s 4558(their)s 220 fnt35 5045 7820(f)m 6(ontdef)k
+240 fnt82 5707 7823(.)m 5862(The)s 6280(part)s 6701(between)s
+7546(braces)s 8197(may)s 8653(v)s 6(ary)k 0 7535(with)m
+486(dif)s 6(ferent)k 1365(implementations)s 3013(of)s 3288(Lout;)s
+3856(it)s 4052(is)s 4267(supposed)s 5221(to)s 5464(contain)s
+6229(the)s 6581(information)s 7770(Lout)s 8286(needs)s 8887(to)s
+0 7247(w)m 2(ork)k 551(with)s 1033(the)s 1381(font.)s
+480 6873(In)m 735(Basser)s 1431(Lout)s 1941(V)s 26(ersion)k
+2728(3,)s 2954(this)s 3348(implementation-dependent)s 5970(part)s 6400(consists)s
+7206(of)s 7476(a)s 7641(PostScript)s 8681(font)s 0 6585(name,)m
+635(an)s 928(Adobe)s 1634(font)s 2089(metrics)s 2852(\(formerly)s
+3831(AFM\))s 4488(\207le)s 4859(whose)s 5538(F)s 3(ontName)k
+6611(entry)s 7166(must)s 7702(agree)s 8285(with)s 8778(the)s
+0 6297(PostScript)m 1034(font)s 1471(name)s 2037(just)s 2433(mentioned,)s
+3542(the)s 3882(name)s 4448(of)s 4710(a)s 4868(Lout)s
+5372(Character)s 6352(Mapping)s 7261(\(LCM\))s 7979(\207le,)s 8383(and)s
+8778(the)s 0 6009(w)m 2(ord)k 220 fnt35 548 6006(Recode)m
+240 fnt82 1356 6009(or)m 220 fnt35 1615 6006(NoRecode)m 240 fnt82
+2643 6009(:)m 220 fnt35 480 5554(f)m 6(ontdef )k 11(Times Base { )k 11(Times-Roman )k 11(Ti-Ro LtLatin1.LCM Recode })k
+240 fnt82 0 5060(It)m 226(seems)s 883(to)s 1143(ha)s 4(v)k 3(e)k
+1666(become)s 2487(an)s 2792(in)s 9(v)k 6(ariable)k
+3810(rule)s 4258(at)s 4512(Adobe)s 5228(Systems)s 6098(that)s
+6538(the)s 6907(font)s 7374(name)s 7969(and)s 8395(the)s
+8765(\207le)s 0 4772(name)m 591(should)s 1305(be)s 1605(the)s
+1970(same,)s 2585(b)s 4(ut)k 2965(some)s 3543(operating)s
+4517(systems)s 5342(do)s 5652(not)s 6036(permit)s 6736(such)s
+7249(long)s 7746(\207le)s 8124(names,)s 8860(so)s 0 4484(Lout)m
+526(does)s 1031(not)s 1411(use)s 1801(them.)s 2457(The)s
+2900(\207les)s 3363(are)s 3725(searched)s 4633(for)s 4986(in)s
+5243(standard)s 6126(places.)s 6901(Consult)s 7721(the)s 8084(PostScript)s
+0 4196(Reference)m 1064(Manual)s 1891([1)s 2065(])s 2224(for)s
+2603(general)s 3401(information)s 4627(about)s 5260(fonts)s 5830(and)s
+6274(encoding)s 7246(v)s 3(ectors;)k 8086(brie\210y)s 15(,)k
+8843(an)s 0 3908(8-bit)m 520(character)s 1464(code)s 240 fnt83
+1981 3910(c)m 240 fnt82 2153 3908(in)m 2405(Lout')s 13(s)k
+3077(input)s 3638(is)s 3858(mapped)s 4683(to)s 4932(the)s
+5289(character)s 6233(in)s 6485(the)s 6843(Adobe)s 7547(font)s
+8002(metrics)s 8765(\207le)s 0 3620(whose)m 677(name)s 1260(appears)s
+2050(on)s 2356(the)s 2714(line)s 3137(labelled)s 240 fnt83
+3960 3622(c)m 240 fnt82 4131 3620(in)m 4384(the)s 4741(LCM)s
+5323(\207le.)s 5801(The)s 6239(LCM)s 6821(\207le)s 7191(also)s
+7638(de\207nes)s 8377(v)s 6(arious)k 0 3332(character)m 4(-to-character)k
+2162(mappings,)s 3215(such)s 3726(as)s 3991(upper)s 4(-case)k
+5093(to)s 5347(lo)s 6(wer)k 4(-case,)k 6493(which)s
+7150(are)s 7512(used)s 8024(for)s 8377(v)s 6(arious)k
+0 3044(purposes,)m 947(such)s 1431(as)s 1669(the)s 2005(production)s
+3087(of)s 3346(small)s 3906(capitals.)s 4787(If)s 5005(the)s
+5341(w)s 2(ord)k 220 fnt35 5877 3041(NoRecode)m 240 fnt82
+6953 3044(appears,)m 7778(Lout)s 8278(assumes)s 0 2756(that)m 428(the)s
+786(gi)s 6(v)k 3(en)k 1376(encoding)s 2317(v)s 3(ector)k
+2981(is)s 3201(already)s 3968(associated)s 5018(with)s 5510(this)s
+5916(font)s 6371(in)s 6624(the)s 6982(PostScript)s 8035(interpreter)s 9(,)k
+0 2468(and)m 404(optimizes)s 1384(its)s 1660(output)s 2332(accordingly)s 15(.)k
+480 2094(If)m 723(there)s 1270(are)s 1630(tw)s 2(o)k
+2054(font)s 2512(de\207nitions)s 3587(with)s 4083(the)s 4444(same)s
+5005(f)s 2(amily)k 5693(and)s 6111(f)s 2(ace)k
+6576(name,)s 7214(it)s 7420(is)s 7643(an)s 7940(error)s
+8477(unless)s 0 1806(the)m 371(second)s 1117(one)s 1542(has)s
+1936(the)s 2307(same)s 2877(font)s 3346(name)s 3943(and)s
+4370(\207le)s 4755(name)s 5352(as)s 5625(the)s 5997(\207rst,)s
+6498(in)s 6764(which)s 7430(case)s 7920(it)s 8135(is)s
+8369(silently)s 0 1518(ignored.)m 902(A)s 1139(PostScript)s 2188(font)s
+2640(name)s 3221(and)s 3632(\207le)s 4000(may)s 4474(appear)s
+5178(in)s 5428(tw)s 2(o)k 5845(or)s 6111(more)s
+6665(font)s 7117(de\207nitions,)s 8242(allo)s 6(wing)k 0 1230(one)m
+402(PostScript)s 1444(font)s 1889(to)s 2128(ha)s 4(v)k 3(e)k
+2629(tw)s 2(o)k 3039(or)s 3298(more)s 3845(equally)s
+4603(v)s 6(alid)k 5133(Lout)s 5645(names,)s 6363(and)s
+6767(dif)s 6(ferent)k 7642(LCM)s 8215(\207les.)s 480 856(The)m
+220 fnt35 917 853(@Char)m 240 fnt82 1685 856(symbol)m 2454(allo)s 6(ws)k
+3133(a)s 3309(character)s 4252(to)s 4501(be)s 4792(speci\207ed)s
+5710(by)s 6014(its)s 6299(name)s 6883(\(its)s 7247(PostScript)s
+8299(name)s 8883(in)s 0 568(Basser)m 697(Lout\))s 1277(rather)s
+1893(than)s 2362(by)s 2656(its)s 2932(code:)s 220 fnt35
+480 67(@Char nine)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 42 48
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(42)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(is)m
+215(equi)s 6(v)k 6(alent)k 1265(to)s 220 fnt35
+1510 13202(9)m 240 fnt82 1689 13205(in)m 1938(most)s 2469(fonts.)s
+3117(This)s 3599(is)s 3815(useful)s 4460(as)s 4716(a)s
+4888(documentation)s 6373(aid)s 6729(and)s 7139(to)s 7384(be)s
+7672(sure)s 8132(of)s 8409(getting)s 0 12917(the)m 347(right)s
+856(character)s 1788(e)s 6(v)k 3(en)k 2286(if)s
+2501(the)s 2848(encoding)s 3777(v)s 3(ector)k 4429(of)s
+4698(the)s 5044(font)s 5488(is)s 5696(changed.)s 6656(Ho)s 6(we)k 6(v)k 3(er)k
+220 fnt35 7576 12914(@Char)m 240 fnt82 8332 12917(will)m 8756(f)s 2(ail)k
+0 12629(if)m 217(the)s 565(character)s 1499(named)s 2195(is)s
+2405(not)s 2771(in)s 3014(the)s 3362(encoding)s 4293(v)s 3(ector)k
+4947(of)s 5218(the)s 5566(current)s 6302(font.)s 240 fnt84
+0 11836(3.4.)m 471(@Br)s 4(eak)k 240 fnt82 480 11404(The)m
+220 fnt35 898 11401(@Break)m 240 fnt82 1744 11404(symbol)m 2493(in\210uences)s
+3504(the)s 3842(appearance)s 4962(of)s 5223(paragraphs)s 6313(\(Section)s
+7155(3.2\),)s 7631(of)s 6(fering)k 8437(a)s 8592(\207x)s 3(ed)k
+0 11116(set)m 325(of)s 596(nine)s 1064(styles:)s 220 fnt35
+1275 10608(adjust)m 1916(@Break)s 240 fnt83 2772 10613(object)m 240 fnt82
+3600 10611(Break)m 4301(the)s 4718(paragraphs)s 5887(of)s 240 fnt83
+6228 10613(object)m 240 fnt82 6945 10611(into)m 7439(lines,)s 8066(and)s
+8540(apply)s 220 fnt35 3600 10320(@P)m 26(Adjust)k 240 fnt82
+4633 10323(\(Section)m 5511(3.16\))s 6084(to)s 6348(e)s 6(v)k 3(ery)k
+6949(line)s 7388(e)s 3(xcept)k 8094(the)s 8467(last)s
+8883(in)s 3600 10035(each)m 4095(paragraph;)s 220 fnt35 1128 9527(outdent)m
+1916(@Break)s 240 fnt83 2772 9532(object)m 240 fnt82 3600 9530(Lik)m 2(e)k
+220 fnt35 4122 9527(adjust)m 240 fnt82 4703 9530(,)m 4840(e)s 3(xcept)k
+5551(that)s 220 fnt35 6000 9527(2.0f @Wide {} &0i)m 240 fnt82 7809 9530(is)m
+8049(inserted)s 8894(at)s 3600 9242(the)m 3981(be)s 3(ginning)k
+5022(of)s 5326(e)s 6(v)k 3(ery)k 5935(line)s
+6382(e)s 3(xcept)k 7096(the)s 7477(\207rst,)s 7988(creating)s
+8843(an)s 3600 8954(outdented)m 4602(paragraph;)s 220 fnt35 1187 8446(r)m 2(agged)k
+1916(@Break)s 240 fnt83 2772 8451(object)m 240 fnt82 3600 8449(Break)m
+4222(the)s 4559(paragraphs)s 5648(of)s 240 fnt83 5908 8451(object)m
+240 fnt82 6545 8449(into)m 6960(lines,)s 7507(b)s 4(ut)k
+7858(do)s 8140(not)s 8495(adjust)s 3600 8161(the)m 3948(lines)s
+4450(\(`ragged)s 5317(right'\);)s 220 fnt35 1077 7653(cr)m 2(agged)k
+1916(@Break)s 240 fnt83 2772 7658(object)m 240 fnt82 3600 7656(Lik)m 2(e)k
+220 fnt35 4125 7653(r)m 2(agged)k 240 fnt82 4794 7656(,)m
+4934(e)s 3(xcept)k 5648(that)s 6099(each)s 6628(line)s
+7075(will)s 7534(be)s 7849(centred)s 8644(with)s 3600 7368(respect)m
+4336(to)s 4575(the)s 4923(others;)s 220 fnt35 1114 6860(rr)m 2(agged)k
+1916(@Break)s 240 fnt83 2772 6865(object)m 240 fnt82 3600 6863(Lik)m 2(e)k
+220 fnt35 4115 6860(r)m 2(agged)k 240 fnt82 4784 6863(,)m
+4914(e)s 3(xcept)k 5618(that)s 6059(each)s 6577(line)s
+7014(will)s 7463(be)s 7768(right-justi\207ed)s 3600 6575(with)m 4082(respect)s
+4818(to)s 5057(the)s 5405(others)s 6040(\(`ragged)s 6907(left'\);)s
+220 fnt35 1065 6067(or)m 2(agged)k 1916(@Break)s 240 fnt83
+2772 6072(object)m 240 fnt82 3600 6070(The)m 4028(ob)s 3(vious)k
+4835(combination)s 6088(of)s 220 fnt35 6359 6067(r)m 2(agged)k
+240 fnt82 7088 6070(and)m 220 fnt35 7492 6067(outdent)m 240 fnt82
+8220 6070(;)m 220 fnt35 1413 5563(lines)m 1916(@Break)s 240 fnt83
+2772 5568(object)m 240 fnt82 3600 5566(Break)m 4284(the)s 4685(paragraphs)s
+5837(of)s 240 fnt83 6161 5568(object)m 240 fnt82 6861 5566(into)m
+7339(lines)s 7893(at)s 8178(the)s 8579(same)s 3600 5278(points)m
+4235(that)s 4651(the)s 3(y)k 5113(are)s 5458(brok)s 2(en)k
+6177(into)s 6600(lines)s 7101(in)s 7342(the)s 7689(input,)s
+8286(and)s 8688(also)s 3600 4990(at)m 3819(concatenation)s 5190(symbols)s
+6026(of)s 6283(the)s 6617(form)s 220 fnt35 7128 4987(&)m
+240 fnt83 7270 4992(k)m 220 fnt35 7380 4987(b)m 240 fnt82
+7540 4990(for)m 7865(an)s 3(y)k 240 fnt83 8248 4992(k)m
+240 fnt82 8404 4990(greater)m 3600 4702(than)m 4069(1.)s 4354(Do)s
+4700(not)s 5067(adjust)s 5698(the)s 6047(lines.)s 6663(An)s 3(y)k
+7127(spaces)s 7803(at)s 8035(the)s 8384(start)s 8855(of)s
+3600 4414(a)m 3766(line)s 4180(other)s 4731(than)s 5200(the)s
+5548(\207rst)s 5979(line)s 6393(will)s 6819(appear)s 7516(in)s
+7759(the)s 8107(output;)s 220 fnt35 1303 3906(clines)m 1916(@Break)s
+240 fnt83 2772 3911(object)m 240 fnt82 3600 3909(Break)m 4288(the)s
+4693(paragraphs)s 5849(of)s 240 fnt83 6177 3911(object)m 240 fnt82
+6881 3909(into)m 7363(lines)s 7921(as)s 8228(for)s 220 fnt35
+8623 3906(lines)m 3600 3618(@Break)m 240 fnt82 4396 3621(,)m 4503(then)s
+4972(centre)s 5611(each)s 6106(line)s 6520(with)s 7002(respect)s
+7738(to)s 7977(the)s 8325(others;)s 220 fnt35 1337 3113(r)m -3(lines)k
+1916(@Break)s 240 fnt83 2772 3118(object)m 240 fnt82 3600 3116(Break)m
+4288(the)s 4693(paragraphs)s 5849(of)s 240 fnt83 6177 3118(object)m
+240 fnt82 6881 3116(into)m 7363(lines)s 7921(as)s 8228(for)s
+220 fnt35 8623 3113(lines)m 3600 2825(@Break)m 240 fnt82 4396 2828(,)m
+4535(then)s 5036(right-)s 5555(justify)s 6251(each)s 6778(line)s
+7224(with)s 7738(respect)s 8506(to)s 8778(the)s 3600 2540(others.)m
+0 2087(If)m 235(the)s 588(paragraph)s 1606(w)s 2(as)k
+2032(an)s 2320(entire)s 2924(component)s 4053(of)s 4329(a)s
+4501(g)s 1(alle)k 3(y)k 15(,)k 5178(so)s
+5449(will)s 5880(each)s 6380(of)s 6656(its)s 6937(lines)s
+7444(be;)s 7787(otherwise)s 8778(the)s 0 1799(lines)m 502(are)s
+849(enclosed)s 1744(in)s 1987(a)s 220 fnt35 2153 1796(@OneRo)m 3(w)k
+240 fnt82 3284 1799(symbol)m 4044(after)s 4540(breaking.)s 480 1425(The)m
+911(length)s 1570(of)s 1845(the)s 2196(g)s 1(ap)k
+2598(used)s 3099(to)s 3341(separate)s 4183(the)s 4535(lines)s
+5040(produced)s 5993(by)s 6291(paragraph)s 7307(breaking)s 8201(is)s
+8415(al)s 2(w)k 2(ays)k 220 fnt35 0 1134(1v)m
+240 fnt82 231 1137(.)m 395(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+1355(the)s 220 fnt35 1703 1134(v)m 240 fnt82 1872 1137(unit)m
+2304(itself)s 2852(and)s 3256(the)s 3604(g)s 1(ap)k
+4002(mode)s 4590(may)s 5056(be)s 5338(changed:)s 240 fnt83
+1503 634(gap)m 220 fnt35 1916 629(@Break)m 240 fnt83 2772 634(object)m
+240 fnt82 3600 632(W)m 9(ithin)k 240 fnt83 4312 634(object)m
+240 fnt82 4900 632(,)m 5008(tak)s 2(e)k 5460(the)s
+5809(v)s 6(alue)k 6377(of)s 6649(the)s 220 fnt35
+6998 629(v)m 240 fnt82 7167 632(unit)m 7600(to)s 7839(be)s
+8122(the)s 8471(length)s 3600 344(of)m 240 fnt83 3871 346(gap)m
+240 fnt82 4224 344(;)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 43 49
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.4.)m 454(@Br)s 8(eak)k 240 fnt84
+8833 13840(43)m 240 fnt82 1375 13247(+)m 240 fnt83 1503 13249(gap)m
+220 fnt35 1916 13244(@Break)m 240 fnt83 2772 13249(object)m 240 fnt82
+3600 13247(W)m 9(ithin)k 240 fnt83 4320 13249(object)m 240 fnt82
+4908 13247(,)m 5024(tak)s 2(e)k 5485(the)s 5841(v)s 6(alue)k
+6418(of)s 6698(the)s 220 fnt35 7054 13244(v)m 240 fnt82
+7232 13247(unit)m 7673(to)s 7920(be)s 8211(lar)s 4(ger)k
+8832(by)s 3600 12959(the)m 3948(length)s 4603(of)s 240 fnt83
+4874 12961(gap)m 240 fnt82 5287 12959(than)m 5756(it)s 5948(w)s 2(ould)k
+6603(otherwise)s 7588(ha)s 4(v)k 3(e)k 8089(been;)s
+1383 12454(\211)m 240 fnt83 1503 12456(gap)m 220 fnt35 1916 12451(@Break)m
+240 fnt83 2772 12456(object)m 240 fnt82 3600 12454(W)m 9(ithin)k
+240 fnt83 4309 12456(object)m 240 fnt82 4897 12454(,)m 5000(tak)s 2(e)k
+5448(the)s 5792(v)s 6(alue)k 6356(of)s 6623(the)s
+220 fnt35 6968 12451(v)m 240 fnt82 7133 12454(unit)m 7561(to)s
+7796(be)s 8074(smaller)s 8832(by)s 3600 12166(the)m 3948(length)s
+4603(of)s 240 fnt83 4874 12168(gap)m 240 fnt82 5287 12166(than)m
+5756(it)s 5948(w)s 2(ould)k 6603(otherwise)s 7588(ha)s 4(v)k 3(e)k
+8089(been.)s 0 11661(In)m 256(each)s 751(case,)s 1269(the)s
+1617(mode)s 2205(of)s 240 fnt83 2476 11663(gap)m 240 fnt82
+2889 11661(is)m 3099(adopted)s 3915(within)s 240 fnt83 4583 11663(object)m
+240 fnt82 5171 11661(.)m 480 11287(The)m 220 fnt35 908 11284(@Break)m
+240 fnt82 1764 11287(symbol)m 2524(also)s 2962(controls)s 3783(h)s 1(yphenation:)k
+220 fnt35 1141 10779(h)m 6(yphen @Break)k 240 fnt83 2772 10784(object)m
+240 fnt82 3600 10782(Permit)m 4296(h)s 1(yphenation)k 5536(within)s
+6204(the)s 6552(paragraphs)s 7652(of)s 240 fnt83 7923 10784(object)m
+240 fnt82 8511 10782(;)m 220 fnt35 897 10274(noh)m 6(yphen @Break)k
+240 fnt83 2772 10279(object)m 240 fnt82 3600 10277(Prohibit)m 4440(h)s 1(yphenation)k
+5691(within)s 6370(the)s 6729(paragraphs)s 7840(of)s 240 fnt83
+8122 10279(object)m 240 fnt82 8710 10277(;)m 8833(all)s 3600 9989(h)m 1(yphenation)k
+4897(g)s 1(aps)k 5443(without)s 6291(e)s 3(xception)k
+7332(re)s 6(v)k 3(ert)k 7996(to)s 8292(edge-)s
+8812(to-)s 3600 9701(edge)m 4108(mode.)s 0 9198(The)m 220 fnt35
+428 9195(@Break)m 240 fnt82 1284 9198(also)m 1722(has)s 2092(options)s
+2848(which)s 3490(control)s 4222(wido)s 6(w)k 4922(and)s
+5326(orphan)s 6048(lines:)s 220 fnt35 480 8690(unbreakab)m 4(le\207rst @Break)k
+240 fnt83 3058 8695(ob)m 240 fnt82 3292 8693(-)m 240 fnt83
+480 8407(ject)m 240 fnt82 3600 8693(Pre)m 6(v)k 3(ent)k
+4431(column)s 5256(and)s 5710(page)s 6268(breaks)s 6993(\(i.e.)s
+7458(pre)s 6(v)k 3(ent)k 8276(a)s 8492(g)s 1(alle)k 3(y)k
+3600 8405(from)m 4147(splitting\))s 5081(between)s 5959(the)s 6330(\207rst)s
+6784(and)s 7212(second)s 7958(lines)s 8483(of)s 8778(the)s
+3600 8117(paragraphs)m 4700(of)s 240 fnt83 4971 8119(object)m 240 fnt82
+5559 8117(;)m 220 fnt35 480 7609(unbreakab)m 4(lelast @Break)k 240 fnt83
+3058 7614(ob)m 240 fnt82 3292 7612(-)m 240 fnt83 480 7326(ject)m
+240 fnt82 3600 7612(Pre)m 6(v)k 3(ent)k 4429(column)s
+5252(and)s 5704(page)s 6261(breaks)s 6984(between)s 7886(the)s
+8282(last)s 8722(and)s 3600 7324(second)m 4323(last)s 4714(lines)s
+5216(of)s 5487(the)s 5835(paragraphs)s 6935(of)s 240 fnt83
+7206 7326(object)m 240 fnt82 7794 7324(.)m 0 6821(These)m 688(options)s
+1506(w)s 2(ork)k 2119(by)s 2475(adding)s 3241(the)s
+220 fnt35 3651 6818(u)m 240 fnt82 3881 6821(\(unbreakable\))m 5319(suf\207x)s
+5980(to)s 6281(the)s 6691(appropriate)s 7897(g)s 1(aps)k
+8448(during)s 0 6533(paragraph)m 1017(breaking,)s 1966(so)s 2237(their)s
+2738(precise)s 3475(ef)s 6(fect)k 4076(is)s 4290(as)s
+4545(described)s 5524(for)s 5866(this)s 6267(suf\207x.)s 6981(These)s
+7612(options)s 8373(may)s 8844(be)s 0 6245(countermanded)m 1533(by)s
+220 fnt35 1827 6242(breakab)m 4(le\207rst @Break)k 240 fnt82 4057 6245(and)m
+220 fnt35 4461 6242(breakab)m 4(lelast @Break.)k 240 fnt82 480 5871(Se)m 6(v)k 3(eral)k
+1310(options)s 2135(may)s 2669(be)s 3020(gi)s 6(v)k 3(en)k
+3668(to)s 3976(the)s 220 fnt35 4392 5868(@Break)m 240 fnt82
+5317 5871(symbol)m 6145(simultaneously)s 15(,)k 7754(in)s 8065(an)s 3(y)k
+8531(order)s 13(.)k 0 5583(F)m 3(or)k 389(e)s 3(xample,)k
+220 fnt35 480 5082({ adjust 1.2fx h)m 6(yphen } @Break ...)k 240 fnt82 0 4584(is)m
+210(a)s 375(typical)s 1079(initial)s 1689(v)s 6(alue.)k
+2365(There)s 2977(may)s 3442(be)s 3723(empty)s 4375(objects)s
+5102(and)s 220 fnt35 5505 4581(@Null)m 240 fnt82 6149 4584(objects)m
+6877(in)s 7119(the)s 7466(left)s 7842(parameter)s 8855(of)s
+220 fnt35 0 4293(@Break)m 240 fnt82 796 4296(;)m 908(these)s
+1455(are)s 1802(ignored.)s 240 fnt84 0 3503(3.5.)m 471(@Space)s
+240 fnt82 480 3026(The)m 220 fnt35 911 3023(@Space)m 240 fnt82
+1812 3026(symbol)m 2576(changes)s 3402(the)s 3754(v)s 6(alue)k
+4326(of)s 4601(the)s 220 fnt35 4953 3023(s)m 240 fnt82
+5120 3026(unit)m 5556(of)s 5831(measurement)s 7169(\(Section)s 8026(3.2\))s
+8458(within)s 0 2738(its)m 276(right)s 787(parameter)s 1801(to)s
+2040(the)s 2388(v)s 6(alue)k 2956(gi)s 6(v)k 3(en)k
+3536(by)s 3830(the)s 4178(left)s 4555(parameter:)s 220 fnt35
+480 2237(1c @Space { a b c d })m 240 fnt82 0 1741(has)m 370(result)s 480 1288(a)m
+1153(b)s 1833(c)s 2499(d)s 0 835(As)m 311(for)s
+643(the)s 220 fnt35 985 832(@Break)m 240 fnt82 1835 835(symbol,)m
+2641(the)s 2982(left)s 3353(parameter)s 4361(of)s 220 fnt35
+4626 832(@Space)m 240 fnt82 5517 835(may)m 5976(be)s 6252(gi)s 6(v)k 3(en)k
+6826(relati)s 6(v)k 3(e)k 7582(to)s 7815(the)s
+8156(enclosing)s 220 fnt35 0 544(s)m 240 fnt82 163 547(unit,)m
+642(and)s 1046(it)s 1238(may)s 1704(include)s 2464(a)s
+2630(g)s 1(ap)k 3028(mode.)s 3724(Note)s 4245(that)s
+4663(the)s 220 fnt35 5011 544(@F)m 6(ont)k 240 fnt82
+5723 547(symbol)m 6483(also)s 6921(sets)s 7330(the)s 220 fnt35
+7678 544(s)m 240 fnt82 7841 547(unit.)m 480 173(The)m 906(left)s
+1280(parameter)s 2292(of)s 2560(the)s 220 fnt35 2906 170(@Space)m
+240 fnt82 3800 173(symbol)m 4558(may)s 5021(also)s 5456(hold)s
+5938(an)s 3(y)k 6332(one)s 6732(of)s 7000(the)s
+7346(\207v)s 3(e)k 7755(special)s 8470(v)s 6(alues)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 44 50
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(44)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 220 fnt35 0 13202(lout)m
+240 fnt82 349 13205(,)m 220 fnt35 461 13202(compress)m 240 fnt82
+1406 13205(,)m 220 fnt35 1518 13202(separ)m 2(ate)k 240 fnt82
+2362 13205(,)m 220 fnt35 2474 13202(troff)m 240 fnt82 2849 13205(,)m
+2961(and)s 220 fnt35 3371 13202(te)m 6(x)k 240 fnt82
+3656 13205(,)m 3768(which)s 4415(control)s 5152(the)s 5505(w)s 2(ay)k
+5962(in)s 6210(which)s 6857(Lout)s 7374(treats)s 7946(white)s
+8539(space)s 0 12917(separating)m 1047(tw)s 2(o)k 1470(objects.)s
+2324(The)s 2764(names)s 220 fnt35 3439 12914(troff)m 240 fnt82
+3887 12917(and)m 220 fnt35 4304 12914(te)m 6(x)k 240 fnt82
+4661 12917(indicate)m 5486(that)s 5917(the)s 6278(beha)s 4(viour)k
+7303(of)s 7587(these)s 8147(options)s 8916(is)s 0 12629(inspired)m
+828(by)s 1122(these)s 1669(other)s 2220(document)s 3224(formatting)s
+4285(systems.)s 480 12255(The)m 897(def)s 2(ault)k 1607(setting,)s
+220 fnt35 2339 12252(lout)m 240 fnt82 2688 12255(,)m 2784(produces)s
+3687(as)s 3926(man)s 3(y)k 4498(spaces)s 5161(in)s
+5393(the)s 5729(output)s 6390(as)s 6629(there)s 7150(are)s
+7486(in)s 7717(the)s 8054(input.)s 8698(The)s 220 fnt35
+0 11964(compress)m 240 fnt82 1017 11967(setting)m 1719(causes)s 2407(all)s
+2712(sequences)s 3746(of)s 4029(tw)s 2(o)k 4452(or)s
+4723(more)s 5283(white)s 5882(space)s 6482(characters)s 7512(to)s
+7764(be)s 8058(treated)s 8778(the)s 0 11679(same)m 556(as)s
+815(one)s 1227(white)s 1823(space)s 2419(character)s 13(.)k
+3454(The)s 220 fnt35 3891 11676(separ)m 2(ate)k 240 fnt82
+4804 11679(setting)m 5504(is)s 5723(lik)s 2(e)k 220 fnt35
+6144 11676(compress)m 240 fnt82 7159 11679(b)m 4(ut)k 7530(also)s
+7977(causes)s 8662(zero)s 0 11391(white)m 587(spaces)s 1263(between)s
+2118(tw)s 2(o)k 2529(objects)s 3258(\(b)s 4(ut)k
+3700(not)s 4067(within)s 4736(one)s 5138(w)s 2(ord\))k
+5757(to)s 5997(be)s 6280(treated)s 6988(the)s 7337(same)s
+7885(as)s 8136(one)s 8539(white)s 0 11103(space)m 587(character)s 13(.)k
+480 10729(The)m 220 fnt35 902 10726(troff)m 240 fnt82 1330 10729(setting)m
+2013(is)s 2216(the)s 2557(same)s 3097(as)s 220 fnt35
+3340 10726(lout)m 240 fnt82 3742 10729(e)m 3(xcept)k 4416(that)s
+4828(where)s 6(v)k 3(er)k 5761(a)s 5920(sentence)s
+6792(ends)s 7275(at)s 7500(the)s 7841(end)s 8238(of)s
+8502(a)s 8661(line,)s 0 10441(one)m 415(e)s 3(xtra)k
+962(space)s 1562(is)s 1785(added.)s 2535(F)s 3(ormally)k 15(,)k
+3513(when)s 4102(tw)s 2(o)k 4525(objects)s 5266(are)s
+5627(separated)s 6600(by)s 6907(white)s 7507(space)s 8108(characters)s
+0 10153(which)m 660(include)s 1439(at)s 1689(least)s 2205(one)s
+2625(ne)s 6(wline)k 3451(character)s 9(,)k 4442(and)s
+4864(the)s 5231(\207rst)s 5680(object)s 6343(is)s 6572(a)s
+6756(w)s 2(ord)k 7323(ending)s 8046(in)s 8308(an)s 3(y)k
+8724(one)s 0 9865(of)m 288(a)s 471(certain)s 1194(set)s
+1536(of)s 1824(sequences)s 2862(of)s 3150(characters,)s 4241(the)s
+4606(e)s 3(xtra)k 5157(space)s 5761(is)s 5988(added.)s
+6741(The)s 7186(set)s 7528(of)s 7816(sequences)s 8855(of)s
+0 9577(characters)m 1025(depends)s 1868(on)s 2173(the)s 2528(current)s
+3272(language)s 4199(and)s 4610(is)s 4828(de\207ned)s 5598(in)s
+5849(the)s 220 fnt35 6204 9574(langdef)m 240 fnt82 6987 9577(for)m
+7333(that)s 7758(language)s 8686(\(see)s 0 9289(Section)m 774(3.9\).)s
+480 8915(The)m 220 fnt35 930 8912(te)m 6(x)k 240 fnt82
+1297 8915(option)m 1989(is)s 2221(the)s 2592(most)s 3139(complicated.)s
+4494(First,)s 5060(the)s 220 fnt35 5430 8912(compress)m 240 fnt82
+6458 8915(option)m 7149(is)s 7382(applied.)s 8272(Then,)s 8894(at)s
+0 8627(e)m 6(v)k 3(ery)k 576(sentence)s 1455(ending,)s
+2213(whether)s 3043(or)s 3302(not)s 3667(at)s 3899(the)s
+4246(end)s 4650(of)s 4921(a)s 5086(line,)s 5551(one)s
+5952(e)s 3(xtra)k 6486(space)s 7073(is)s 7282(added.)s
+8018(A)s 8247(sentence)s 0 8339(ending)m 709(is)s 923(de\207ned)s
+1690(as)s 1944(for)s 220 fnt35 2286 8336(troff)m 240 fnt82
+2726 8339(e)m 3(xcept)k 3411(that,)s 3880(in)s 4127(addition)s
+4972(to)s 5215(the)s 5568(preceding)s 6568(w)s 2(ord)k
+7120(ha)s 4(ving)k 7825(to)s 8068(end)s 8476(in)s
+8724(one)s 0 8051(of)m 268(a)s 431(certain)s 1134(set)s
+1456(of)s 1724(sequences)s 2742(of)s 3010(characters,)s 4081(the)s
+4426(character)s 5357(preceding)s 6350(that)s 6765(sequence)s 7695(must)s
+8217(e)s 3(xist)k 8722(and)s 0 7763(must)m 525(be)s
+807(a)s 973(lo)s 6(wer)k 4(-case)k 2053(letter)s 13(.)k
+2693(A)s 2924(character)s 3858(is)s 4068(a)s 4234(lo)s 6(wer)k 4(-case)k
+5314(letter)s 5864(if,)s 6116(in)s 6359(the)s 6707(Lout)s
+7219(Character)s 8208(Mapping)s 0 7475(\207le)m 393(\(Section)s 1278(3.3\))s
+1738(associated)s 2810(with)s 3325(the)s 3705(current)s 4473(font,)s
+4997(an)s 5313(upper)s 4(-case)k 6432(equi)s 6(v)k 6(alent)k
+7508(of)s 7811(the)s 8192(character)s 0 7187(is)m 210(de\207ned.)s
+240 fnt84 0 6444(3.6.)m 471(@YUnit,)s 1432(@ZUnit,)s 2380(@CurrYUnit,)s
+3859(and)s 4300(@CurrZUnit)s 240 fnt82 480 5973(The)m 220 fnt35
+917 5970(@YUnit)m 240 fnt82 1741 5973(symbol)m 2510(changes)s 3342(the)s
+3699(v)s 6(alue)k 4277(of)s 4557(the)s 220 fnt35
+4915 5970(y)m 240 fnt82 5092 5973(unit)m 5534(of)s 5814(measurement)s
+7158(\(Section)s 8020(3.2\))s 8458(within)s 0 5685(its)m 276(right)s
+787(parameter)s 1801(to)s 2040(the)s 2388(v)s 6(alue)k
+2956(gi)s 6(v)k 3(en)k 3536(by)s 3830(the)s
+4178(left)s 4555(parameter:)s 220 fnt35 480 5184(1c @YUnit { ...)m 13( })k
+240 fnt82 0 4690(ensures)m 760(that)s 1170(the)s 1510(v)s 6(alue)k
+2070(of)s 220 fnt35 2333 4687(1y)m 240 fnt82 2615 4690(within)m
+3275(the)s 3615(right)s 4118(parameter)s 5124(will)s 5542(be)s
+220 fnt35 5816 4687(1c)m 240 fnt82 6043 4690(.)m 6199(The)s
+220 fnt35 6619 4687(@ZUnit)m 240 fnt82 7413 4690(symbol)m 8165(is)s
+8366(similar)s 9(,)k 0 4402(setting)m 688(the)s 1034(v)s 6(alue)k
+1600(of)s 1869(the)s 220 fnt35 2215 4399(z)m 240 fnt82
+2376 4402(unit)m 2806(in)s 3047(its)s 3321(right)s 3830(parameter)s 13(.)k
+4933(Both)s 5453(units)s 5967(ha)s 4(v)k 3(e)k
+6466(def)s 2(ault)k 7185(v)s 6(alue)k 7751(zero.)s
+8324(The)s 8749(left)s 0 4114(parameter)m 1011(may)s 1473(not)s
+1836(include)s 2592(a)s 2755(g)s 1(ap)k 3149(mode,)s
+3784(nor)s 4160(may)s 4622(it)s 4811(use)s 5182(the)s
+220 fnt35 5526 4111(w)m 240 fnt82 5682 4114(,)m 220 fnt35
+5786 4111(b)m 240 fnt82 5900 4114(,)m 220 fnt35 6003 4111(r)m
+240 fnt82 6076 4114(,)m 6180(or)s 6435(of)s 6702(course)s
+220 fnt35 7379 4111(d)m 240 fnt82 7545 4114(units,)m 8114(b)s 4(ut)k
+8472(it)s 8660(may)s 0 3826(be)m 3(gin)k 577(with)s
+220 fnt35 1050 3823(+)m 240 fnt82 1220 3826(or)m 220 fnt35
+1470 3823(-)m 240 fnt82 1584 3826(to)m 1814(indicate)s 2616(that)s
+3025(v)s 6(alue)k 3583(is)s 3784(to)s 4014(be)s
+4286(added)s 4907(to)s 5136(or)s 5386(subtracted)s 6416(from)s
+6931(the)s 7269(current)s 7996(v)s 6(alue.)k 8662(An)s 3(y)k
+0 3538(ne)m 3(g)k 1(ati)k 6(v)k 3(e)k
+853(result)s 1443(of)s 1714(using)s 220 fnt35 2286 3535(-)m
+240 fnt82 2410 3538(will)m 2836(be)s 3118(silently)s 3875(replaced)s
+4742(by)s 5036(zero.)s 480 3164(The)m 220 fnt35 913 3161(@CurrYUnit)m
+240 fnt82 2159 3164(and)m 220 fnt35 2569 3161(@CurrZUnit)m 240 fnt82
+3803 3164(symbols)m 4658(report)s 5294(the)s 5648(v)s 6(alue)k
+6222(of)s 6499(the)s 220 fnt35 6853 3161(y)m 240 fnt82
+7027 3164(and)m 220 fnt35 7437 3161(z)m 240 fnt82 7607 3164(units,)m
+8185(in)s 8434(points,)s 0 2876(truncated)m 947(to)s 1186(the)s
+1534(nearest)s 2270(inte)s 3(ger)k 13(.)k 3081(F)s 3(or)k
+3470(e)s 3(xample,)k 220 fnt35 480 2375(1i @YUnit { )m 11(The current v)k 5(alue of the y unit is @CurrYUnit })k
+240 fnt82 0 1877(produces)m 220 fnt35 480 1376(1i @YUnit { )m 11(The current v)k 5(alue of the y unit is @CurrYUnit })k
+240 fnt82 0 878(since)m 547(there)s 1080(are)s 1427(72)s
+1721(points)s 2357(in)s 2600(one)s 3002(inch)s 3471(\(at)s
+3782(least,)s 4326(Lout)s 4838(thinks)s 5474(there)s 6007(are\).)s
+480 504(These)m 1123(units)s 1655(are)s 2018(not)s 2400(used)s
+2913(internally)s 3898(by)s 4208(Lout.)s 4840(The)s 3(y)k
+5399(are)s 5762(supplied)s 6647(as)s 6913(part)s 7360(of)s
+7647(the)s 8011(style)s 8534(infor)s 8998(-)s 0 216(mation)m
+731(for)s 1080(the)s 1439(con)s 9(v)k 3(enience)k
+2690(of)s 2972(application)s 4102(packages.)s 5154(F)s 3(or)k
+5554(e)s 3(xample,)k 6479(the)s 6838(Eq)s 7173(equation)s
+8065(formatting)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 45 51
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.6.)m 454(@YUnit,)s 1325(@ZUnit,)s 2196(@CurrYUnit,)s
+3533(and)s 3959(@CurrZUnit)s 240 fnt84 8833 13840(45)m 240 fnt82
+0 13224(package)m 840(uses)s 1303(them)s 1841(to)s 2080(\207ne-)s
+2507(tune)s 2975(the)s 3323(appearance)s 4454(of)s 4725(equations.)s
+240 fnt84 0 12431(3.7.)m 471(@SetColour)s 1788(and)s 2229(@SetColor)s
+240 fnt82 480 11999(The)m 220 fnt35 927 11996(@SetColour)m 240 fnt82
+2204 11999(and)m 220 fnt35 2628 11996(@SetColor)m 240 fnt82 3783 11999(symbols,)m
+4708(which)s 5370(ha)s 4(v)k 3(e)k 5891(identical)s
+6788(ef)s 6(fect,)k 7451(return)s 8098(their)s 8615(right)s
+0 11711(parameter)m 1047(in)s 1323(the)s 1704(colour)s 2408(speci\207ed)s
+3349(by)s 3676(their)s 4206(left)s 4617(parameter)s 13(.)k
+5755(The)s 6216(form)s 6773(of)s 7077(the)s 7458(left)s
+7868(parameter)s 8916(is)s 0 11423(implementation-dependent;)m 2693(in)s 2954(Basser)s
+3670(Lout)s 4200(it)s 4410(must)s 4954(be)s 5254(an)s
+5555(object)s 6218(whose)s 6904(v)s 6(alue)k 7490(is)s
+7719(a)s 7903(sequence)s 8855(of)s 0 11135(w)m 2(ords)k
+634(comprising)s 1763(a)s 1929(PostScript)s 2971(command)s 3973(for)s
+4311(setting)s 5001(colour)s 13(.)k 5763(F)s 3(or)k
+6152(e)s 3(xample,)k 220 fnt35 480 10634({ 1.0 0.0 0.0 setrgbcolor } @SetColour { hello)m 8(, w)k 2(or)k -3(ld })k
+240 fnt82 0 10135(produces)m 915(the)s 1263(red)s 1626(result)s
+1.0 0.0 0.0 setrgbcolor 480 9632(hello,)m 1065(w)s 2(orld)k 0.0 0.0 0.0 setrgbcolor
+0 9148(Of)m 322(course,)s 1050(a)s 1213(colour)s 1881(output)s
+2550(de)s 6(vice)k 3222(is)s 3429(needed)s 4162(to)s
+4398(see)s 4756(the)s 5101(ef)s 6(fect;)k 5747(on)s
+6041(a)s 6204(monochrome)s 7520(de)s 6(vice)k 8191(the)s
+8536(result)s 0 8860(will)m 422(be)s 700(some)s 1257(shade)s
+1854(of)s 2121(gre)s 3(y)k 15(.)k 2688(The)s
+220 fnt35 3112 8857(@SetColour)m 240 fnt82 4365 8860(command)m 5363(will)s
+5785(not)s 6147(accept)s 6813(an)s 7092(empty)s 7740(left)s
+8112(parameter)s 0 8572(\(it)m 273(refuses)s 1002(to)s 1243(belie)s 6(v)k 3(e)k
+1983(that)s 2403(this)s 2801(could)s 3393(cause)s 3983(a)s
+4151(change)s 4887(of)s 5161(colour\),)s 5960(b)s 4(ut)k
+6324(otherwise)s 7311(it)s 7506(trusts)s 8076(the)s 8426(user)s
+8887(to)s 0 8284(supply)m 693(something)s 1743(sensible.)s 480 7910(The)m
+220 fnt35 901 7907(@SetColour)m 240 fnt82 2151 7910(command)m 3145(accepts)s
+3892(the)s 4232(special)s 4943(v)s 6(alue)k 220 fnt35
+5504 7907(nochange)m 240 fnt82 6512 7910(for)m 6843(the)s 7183(left)s
+7553(parameter)s 13(.)k 8650(This)s 0 7622(v)m 6(alue)k
+574(causes)s 1256(the)s 1611(right)s 2129(parameter)s 3150(to)s
+3396(ha)s 4(v)k 3(e)k 3904(the)s 4258(colour)s
+4936(it)s 5135(w)s 2(ould)k 5797(ha)s 4(v)k 3(e)k
+6305(had)s 6716(without)s 7514(the)s 220 fnt35 7869 7619(@SetColour)m
+240 fnt82 0 7334(command.)m 480 6960(There)m 1132(is)s 1382(no)s
+1715(def)s 2(ault)k 2476(colour)s 9(,)k 3225(so)s
+3530(the)s 3918(user)s 4416(must)s 4981(ensure)s 5701(that)s
+6159(the)s 6546(root)s 7031(g)s 1(alle)k 3(y)k
+7705(or)s 8004(each)s 8539(of)s 8850(its)s 0 6672(components)m
+1208(is)s 1418(enclosed)s 2313(in)s 2556(a)s 220 fnt35
+2722 6669(@SetColour)m 240 fnt82 3979 6672(symbol)m 4739(whose)s 5407(left)s
+5784(parameter)s 6798(is)s 7008(not)s 220 fnt35 7374 6669(nochange)m
+240 fnt82 8330 6672(.)m 480 6298(Lout)m 1023(mak)s 2(es)k
+1715(no)s 2039(attempt)s 2847(to)s 3117(understand)s 4257(colour)s 9(,)k
+4998(it)s 5221(simply)s 5958(prints)s 6584(the)s 6964(PostScript)s
+8038(commands)s 0 6010(when)m 601(appropriate.)s 1879(This)s 2381(has)s
+2776(the)s 3150(adv)s 6(antage)k 4196(of)s 4492(permitting)s
+5566(access)s 6253(to)s 6517(an)s 3(y)k 6940(of)s
+7237(PostScript')s 13(s)k 8455(colour)s 0 5722(models)m 768(\(some)s
+1434(require)s 2192(initialization)s 3481(which)s 4149(can)s 4564(be)s
+4872(supplied)s 5767(using)s 220 fnt35 6365 5719(@PrependGr)m 2(aphic)k
+240 fnt82 8178 5722(\),)m 8390(b)s 4(ut)k 8778(the)s
+0 5434(disadv)m 6(antage)k 1299(of)s 1570(of)s 6(fering)k
+2386(no)s 2679(w)s 2(ay)k 3130(to)s 3369(mak)s 2(e)k
+3941(relati)s 6(v)k 3(e)k 4703(changes)s 5525(\(`as)s
+5933(before)s 6599(only)s 7079(redder)s 9(,)k 16(')k
+7836(and)s 8240(so)s 8506(on\).)s 480 5060(F)m 3(or)k
+870(those)s 1432(who)s 1899(wish)s 2409(to)s 2649(obtain)s
+3305(colour)s 3977(without)s 4769(w)s 2(orking)k 5619(v)s 3(ery)k
+6096(hard,)s 6629(the)s 220 fnt35 6978 5057(setrgbcolor)m 240 fnt82
+8124 5060(command)m 0 4772(used)m 496(abo)s 3(v)k 3(e)k
+1117(is)s 1325(a)s 4(v)k 6(ailable)k 2232(in)s
+2474(e)s 6(v)k 3(ery)k 3048(v)s 3(ersion)k
+3805(of)s 4075(PostScript,)s 5162(requires)s 5981(no)s 6273(initialization,)s
+7584(and)s 7987(is)s 8196(simple)s 8887(to)s 0 4484(use.)m
+485(The)s 915(three)s 1450(numbers,)s 2384(which)s 3028(range)s
+3617(from)s 4143(0.0)s 4501(to)s 4742(1.0,)s 5151(determine)s
+6164(the)s 6515(intensity)s 7394(of)s 7667(red,)s 8081(green,)s
+8722(and)s 0 4196(blue)m 468(respecti)s 6(v)k 3(ely)k 15(.)k
+1762(Some)s 2363(useful)s 3002(v)s 6(alues)k 3658(for)s
+3996(the)s 4344(left)s 4721(parameter)s 5735(are)s 220 fnt35
+480 3631(1.0)m 838(0.0)s 1196(0.0)s 1554(setrgbcolor)s 240 fnt83
+2979 3636(r)m 8(ed)k 220 fnt35 480 3312(0.0)m 838(1.0)s
+1196(0.0)s 1554(setrgbcolor)s 240 fnt83 2979 3317(gr)m 8(een)k
+220 fnt35 480 2982(0.0)m 838(0.0)s 1196(1.0)s 1554(setrgbcolor)s
+240 fnt83 2979 2987(blue)m 220 fnt35 480 2652(1.0)m 838(1.0)s
+1196(1.0)s 1554(setrgbcolor)s 240 fnt83 2979 2657(white)m 220 fnt35
+480 2333(0.5)m 837(0.5)s 1194(0.5)s 1551(setrgbcolor)s 240 fnt83
+2979 2338(gr)m 8(e)k 7(y)k 220 fnt35 480 2003(0.0)m
+838(0.0)s 1196(0.0)s 1554(setrgbcolor)s 240 fnt83 2979 2008(blac)m 4(k)k
+240 fnt82 0 1447(Colouring)m 1042(an)s 1344(object)s 2007(white)s
+2613(is)s 2841(useful)s 3499(for)s 3856(producing)s 4899(an)s
+5200(empty)s 5871(space)s 6477(whose)s 7164(size)s 7609(is)s
+7838(that)s 8275(of)s 8565(some)s 0 1159(object.)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 46 52
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(46)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt84 0 13203(3.8.)m
+471(@Outline)s 240 fnt82 480 12771(The)m 220 fnt35 895 12768(@Outline)m
+240 fnt82 1850 12771(symbol)m 2597(causes)s 3258(all)s 3537(the)s
+3872(w)s 2(ords)k 4492(in)s 4722(the)s 5056(right)s
+5553(parameter)s 6554(\(which)s 7261(may)s 7714(be)s 7982(an)s
+8251(arbitrary)s 0 12483(object\))m 712(to)s 951(be)s 1233(printed)s
+1968(in)s 2211(outline,)s 2982(rather)s 3598(than)s 4067(\207lled)s
+4616(as)s 4866(is)s 5076(usual.)s 5745(F)s 3(or)k
+6134(e)s 3(xample,)k 220 fnt35 480 11982(@Outline @Bo)m 6(x 24p @F)k 6(ont HELP)k
+240 fnt82 0 11486(produces)m 1336 461 72 180 240 288 60 480 10685 LoutGr2
+LoutBox stroke
+grestore
+480 fnt82 72 72(HELP)mo
+grestore
+0 10234(Outlining)m
+984(is)s 1209(part)s 1654(of)s 1940(the)s 2303(style)s
+2824(information,)s 4074(in)s 4332(the)s 4694(same)s 5256(w)s 2(ay)k
+5721(as)s 5986(colour)s 9(,)k 6710(font,)s 7216(underlining,)s
+8441(and)s 8860(so)s 0 9946(forth.)m 630(Outlining)s 1602(can)s
+1994(be)s 2278(applied)s 3042(to)s 3284(an)s 3(y)k
+3683(font)s 4131(lik)s 2(ely)k 4729(to)s 4970(be)s
+5255(used)s 5754(in)s 6000(practice.)s 6921(At)s 7222(the)s
+7573(time)s 8055(of)s 8329(writing,)s 0 9658(there)m 528(is)s
+732(no)s 1020(w)s 2(ay)k 1465(to)s 1699(control)s
+2425(the)s 2768(thickness)s 3703(of)s 3969(the)s 4311(outline,)s
+5077(and)s 220 fnt35 5475 9655(@Outline)m 240 fnt82 6439 9658(has)m
+6803(no)s 7091(ef)s 6(fect)k 7681(in)s 7919(PDF)s
+8410(output.)s 0 9370(The)m 424(size)s 847(of)s 1114(outlined)s
+1952(w)s 2(ords)k 2582(is)s 2788(tak)s 2(en)k
+3357(by)s 3647(Lout)s 4155(to)s 4390(be)s 4668(the)s
+5012(same)s 5555(as)s 5801(if)s 6014(the)s 3(y)k
+6473(had)s 6873(not)s 7235(been)s 7740(outlined,)s 8626(e)s 6(v)k 3(en)k
+0 9082(though)m 723(the)s 3(y)k 1186(are)s 1533(in)s
+1776(reality)s 2439(slightly)s 3210(lar)s 4(ger)k 13(.)k
+240 fnt84 0 8289(3.9.)m 471(@Language)s 1762(and)s 2203(@CurrLang)s
+240 fnt82 480 7812(The)m 220 fnt35 905 7809(@Language)m 240 fnt82
+2153 7812(symbol)m 2910(informs)s 3701(Lout)s 4210(that)s 4625(its)s
+4898(right)s 5406(parameter)s 6417(is)s 6624(written)s 7354(in)s
+7594(the)s 7939(language)s 8855(of)s 0 7524(its)m 276(left)s
+653(parameter:)s 220 fnt35 480 7023(Danish @Language { ...)m 13( })k 240 fnt82
+0 6524(Basser)m 706(Lout)s 1228(V)s 26(ersion)k 2025(3)s
+2199(uses)s 2671(this)s 3077(information)s 4271(in)s 4524(tw)s 2(o)k
+4943(w)s 2(ays:)k 5609(to)s 5857(h)s 1(yphenate)k
+6906(w)s 2(ords)k 7549(appropriately)s 8887(to)s 0 6236(that)m
+418(language,)s 1389(and)s 1793(to)s 2032(change)s 2766(the)s
+3114(v)s 6(alue)k 3682(of)s 3953(the)s 220 fnt35
+4301 6233(@CurrLang)m 240 fnt82 5486 6236(symbol)m 6246(\(see)s 6686(belo)s 6(w\).)k
+7508(Other)s 8112(uses,)s 8630(such)s 0 5948(as)m 250(right-to-left)s
+1422(formatting)s 2483(of)s 2754(certain)s 3460(languages,)s 4524(may)s
+4990(be)s 5272(added)s 5902(in)s 6145(the)s 6493(future.)s
+480 5574(The)m 953(left)s 1375(parameter)s 2434(must)s 3004(either)s
+3652(be)s 3979(empty)s 4676(\(which)s 5442(means)s 6149(to)s
+6433(lea)s 4(v)k 3(e)k 7031(the)s 7424(current)s
+8206(language)s 0 5286(unchanged\))m 1167(or)s 1428(else)s 1857(it)s
+2051(must)s 2578(ha)s 4(v)k 3(e)k 3080(been)s
+3591(gi)s 6(v)k 3(en)k 4173(in)s 4418(a)s
+220 fnt35 4586 5283(langdef)m 240 fnt82 5363 5286(language)m 6285(de\207nition)s
+7261(at)s 7495(the)s 7845(be)s 3(ginning)k 8855(of)s
+0 4998(the)m 348(input:)s 220 fnt35 480 4490(langdef Danish Dansk {)m 240 fnt83
+2993 4495(implementation-dependent)m 220 fnt35 5608 4490(})m 240 fnt82 0 3991(After)m
+220 fnt35 571 3988(langdef)m 240 fnt82 1355 3991(comes)m 2025(a)s
+2199(sequence)s 3140(of)s 3419(one)s 3829(or)s 4096(more)s
+4651(simple)s 5352(w)s 2(ords,)k 6050(which)s 6700(are)s
+7055(alternati)s 6(v)k 3(e)k 8117(names)s 8788(for)s
+0 3703(the)m 347(language)s 1265(being)s 1849(de\207ned.)s 2716(F)s 3(ollo)k 6(wing)k
+3743(them)s 4279(comes)s 4940(an)s 5221(implementation-dependent)s 7843(part)s
+8272(between)s 0 3415(braces.)m 760(In)s 1001(Basser)s 1684(Lout)s
+2181(V)s 26(ersion)k 2955(3)s 3104(this)s 3486(part)s
+3902(contains)s 4736(the)s 5069(name)s 5629(of)s 5885(the)s
+6219(Lout)s 6716(h)s 1(yphenation)k 7941(information)s 0 3127(\207le)m
+383(\(minus)s 1121(its)s 1419(.lh)s 1745(suf\207x\))s 2441(to)s
+2702(be)s 3007(used)s 3527(when)s 4125(h)s 1(yphenating)k
+5384(w)s 2(ords)k 6040(in)s 6306(this)s 6725(language,)s
+7718(follo)s 6(wed)k 8643(by)s 8960(a)s 0 2839(sequence)m
+933(of)s 1204(w)s 2(ords)k 1838(which)s 2480(de\207ne)s
+3121(the)s 3469(ends)s 3959(of)s 4230(sentences.)s 5310(F)s 3(or)k
+5699(e)s 3(xample:)k 220 fnt35 480 2339(langdef English { english .)m 13( :)k 11( ? ! .\) ?\) !\) })k
+240 fnt82 0 1840(de\207nes)m 748(a)s 934(language)s 1874(called)s
+2522(English)s 3329(with)s 3831(h)s 1(yphenation)k 5091(patterns)s
+5918(\207le)s 220 fnt35 6298 1837(english.lh)m 240 fnt82 7289 1840(and)m
+7713(se)s 6(v)k 3(en)k 8326(w)s 2(ays)k
+8887(to)s 0 1552(end)m 424(a)s 610(sentence.)s 1617(The)s
+2065(use)s 2460(of)s 2751(these)s 3318(sentence)s 4217(endings)s
+5034(is)s 5264(described)s 6258(in)s 6521(Section)s 7315(3.5.)s
+7799(If)s 8049(there)s 8602(is)s 8833(no)s 0 1264(h)m 1(yphenation)k
+1236(\207le)s 1592(a)s 4(v)k 6(ailable,)k 2546(this)s
+2937(is)s 3143(indicated)s 4072(by)s 4361(writing)s 220 fnt35
+5099 1261(-)m 240 fnt82 5219 1264(for)m 5552(the)s 5895(\207le)s
+6251(name;)s 6877(if)s 7089(there)s 7617(are)s 7959(no)s
+8247(sentence)s 0 976(ends,)m 546(the)s 3(y)k 1009(are)s
+1356(simply)s 2061(omitted.)s 480 602(The)m 220 fnt35 913 599(@CurrLang)m
+240 fnt82 2103 602(symbol,)m 2920(which)s 3567(has)s 3942(no)s
+4240(parameters,)s 5399(e)s 6(v)k 6(aluates)k 6332(to)s
+6576(the)s 6929(\207rst)s 7365(name)s 7944(gi)s 6(v)k 3(en)k
+8529(in)s 8778(the)s 220 fnt35 0 311(langdef)m 240 fnt82
+776 314(of)m 1047(the)s 1395(language)s 2315(in)s 2558(force)s
+3104(at)s 3336(the)s 3684(point)s 4236(where)s 4876(it)s
+5068(is)s 5278(in)s 9(v)k 4(ok)k 2(ed:)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 47 53
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.9.)m 454(@Langua)s 2(g)k 2(e)k
+1682(and)s 2108(@CurrLang)s 240 fnt84 8831 13840(47)m 220 fnt35
+480 13207(Dansk @Language { )m 11(This is @CurrLang.)k 13( })k 240 fnt82 0 12708(has)m
+370(result)s 480 12255(This)m 956(is)s 1166(Danish.)s 0 11802(It)m
+205(is)s 415(typically)s 1305(used)s 1802(with)s 2284(the)s
+220 fnt35 2632 11799(@Case)m 240 fnt82 3419 11802(symbol)m 4179(lik)s 2(e)k
+4591(this:)s 220 fnt35 480 11301(@CurrLang @Case {)m 480 11013( Danish @Y)m 4(ield tirsdag)k
+480 10725( English @Y)m 4(ield )k 11(T)k 26(uesda)k 6(y)k
+480 10437( F)m 9(rench @Y)k 4(ield Mardi)k 480 10149(})m 240 fnt82
+0 9655(This)m 476(e)s 3(xample)k 1339(e)s 6(v)k 6(aluates)k
+2267(to)s 2506(the)s 2854(name)s 3428(of)s 3699(the)s
+4047(third)s 4556(day)s 4956(of)s 5227(the)s 5575(week)s
+6141(in)s 6384(the)s 6732(current)s 7468(language.)s 480 9281(The)m
+908(current)s 1644(language)s 2563(is)s 2773(part)s 3204(of)s
+3474(the)s 3822(style)s 4329(of)s 4599(an)s 4882(object,)s
+5573(lik)s 2(e)k 5984(its)s 6260(font.)s 6809(As)s
+7125(e)s 3(xplained)k 8110(in)s 8352(Section)s 0 8993(2.6,)m
+419(style)s 939(is)s 1162(inherited)s 2081(through)s 2896(the)s
+3257(point)s 3822(of)s 4105(appearance,)s 5300(which)s 5955(for)s
+6305(language)s 7238(can)s 7640(be)s 7935(une)s 3(xpected.)k
+0 8705(F)m 3(or)k 380(e)s 3(xample,)k 1284(an)s
+1557(inde)s 3(x)k 2131(entry)s 2666(which)s 3298(originates)s
+4281(in)s 4514(a)s 4671(French)s 5382(chapter)s 6135(b)s 4(ut)k
+6487(appears)s 7258(in)s 7491(an)s 7764(English)s 8542(inde)s 3(x)k
+0 8417(will)m 426(ha)s 4(v)k 3(e)k 927(English)s
+1715(for)s 2053(its)s 2329(language,)s 3300(so)s 3566(must)s
+4091(be)s 4373(e)s 3(xplicitly)k 5326(set)s 5651(to)s
+5890(French)s 6611(using)s 220 fnt35 7183 8414(@Language)m 240 fnt82
+8374 8417(.)m 240 fnt84 0 7624(3.10.)m 591(@OneCol)s 1653(and)s
+2094(@OneRo)s 2(w)k 240 fnt82 480 7192(The)m 220 fnt35
+913 7189(@OneRo)m 3(w)k 240 fnt82 2049 7192(symbol)m 2814(returns)s
+3533(its)s 3814(right)s 4330(parameter)s 5350(modi\207ed)s 6264(so)s
+6535(that)s 6958(only)s 7443(the)s 7796(principal)s 8706(ro)s 6(w)k
+0 6904(mark)m 540(protrudes.)s 1595(This)s 2059(is)s 2257(normally)s
+3162(the)s 3498(\207rst)s 3917(ro)s 6(w)k 4324(mark,)s
+4910(b)s 4(ut)k 5260(another)s 6025(one)s 6415(may)s
+6869(be)s 7139(chosen)s 7849(by)s 8130(preceding)s 0 6616(it)m
+192(with)s 220 fnt35 674 6613(^/)m 240 fnt82 901 6616(or)m
+220 fnt35 1160 6613(^//)m 240 fnt82 1388 6616(.)m 1552(F)s 3(or)k
+1941(e)s 3(xample,)k 220 fnt35 480 6115(@OneRo)m 3(w { |0.5r)k -8(t Slope @F)k 6(ont x + 2 ^//1p @HLine //1p |0.5r)k -8(t 5 })k
+240 fnt82 0 5619(has)m 370(result)s 468 371 0 188 240 288 60 480 4640 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+468 371 0 188 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+468 371 0 188 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+240 fnt83 0 211(x)m
+240 fnt82 166 209(+)m 354(2)s 468 0 0 0 240 288 60 0 188 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+181 3(5)m
+grestore
+
+grestore
+end end restore
+grestore
+0 3924(with)m
+482(one)s 884(ro)s 6(w)k 1304(mark)s 1856(protruding)s
+2919(from)s 3443(the)s 3791(bar)s 4156(as)s 4406(sho)s 6(wn.)k
+5190(Compare)s 6123(this)s 6519(with)s 220 fnt35 480 3423(@OneRo)m 3(w { |0.5r)k -8(t Slope @F)k 6(ont x + 2 //1p @HLine //1p |0.5r)k -8(t 5 })k
+240 fnt82 0 2927(where)m 640(the)s 988(mark)s 1540(protrudes)s
+2494(from)s 3018(the)s 3366(numerator:)s 468 371 0 263 240 288 60 480 1948 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+468 371 0 263 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+468 371 0 263 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+240 fnt83 0 211(x)m
+240 fnt82 166 209(+)m 354(2)s 468 0 0 0 240 288 60 0 188 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+181 3(5)m
+grestore
+
+grestore
+end end restore
+grestore
+220 fnt35
+0 1494(@OneCol)m 240 fnt82 1016 1497(has)m 1391(the)s 1744(same)s
+2296(ef)s 6(fect)k 2897(on)s 3198(columns)s 4065(as)s
+220 fnt35 4320 1494(@OneRo)m 3(w)k 240 fnt82 5456 1497(does)m
+5951(on)s 6252(ro)s 6(ws,)k 6823(with)s 7310(the)s
+7663(symbols)s 220 fnt35 8517 1494(^|)m 240 fnt82 8722 1497(and)m
+220 fnt35 0 1206(^||)m 240 fnt82 257 1209(\(or)m 220 fnt35
+595 1206(^&)m 240 fnt82 840 1209(\))m 968(determining)s 2176(which)s
+2818(mark)s 3370(is)s 3580(chosen.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 48 54
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(48)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt84 0 13203(3.11.)m
+591(@W)s 4(ide)k 1411(and)s 1852(@High)s 240 fnt82
+480 12726(The)m 220 fnt35 910 12723(@Wide)m 240 fnt82 1687 12726(symbol)m
+2450(returns)s 3167(its)s 3446(right)s 3960(parameter)s 4977(modi\207ed)s
+5888(to)s 6130(ha)s 4(v)k 3(e)k 6634(the)s
+6985(width)s 7590(gi)s 6(v)k 3(en)k 8173(by)s
+8470(its)s 8749(left)s 0 12438(parameter)m 9(,)k 1058(which)s
+1707(must)s 2238(be)s 2527(a)s 2699(length)s 3361(\(Section)s
+4220(3.2\))s 4655(whose)s 5329(unit)s 5768(of)s 6045(measurement)s
+7386(is)s 220 fnt35 7602 12435(c)m 240 fnt82 7707 12438(,)m
+220 fnt35 7821 12435(i)m 240 fnt82 7855 12438(,)m 220 fnt35
+7968 12435(p)m 240 fnt82 8082 12438(,)m 220 fnt35 8196 12435(m)m
+240 fnt82 8365 12438(,)m 220 fnt35 8478 12435(f)m 240 fnt82
+8536 12438(,)m 220 fnt35 8650 12435(s)m 240 fnt82 8753 12438(,)m
+8867(or)s 220 fnt35 0 12147(v)m 240 fnt82 109 12150(.)m
+278(If)s 513(the)s 867(right)s 1383(parameter)s 2403(is)s
+2618(not)s 2990(as)s 3245(wide)s 3772(as)s 4027(required,)s
+4936(white)s 5528(space)s 6121(is)s 6336(added)s 6972(at)s
+7209(the)s 7563(right;)s 8131(if)s 8354(it)s 8551(is)s
+8767(too)s 0 11862(wide,)m 585(its)s 875(paragraphs)s 1988(are)s
+2349(brok)s 2(en)k 3083(\(Section)s 3949(3.4\))s 4391(so)s
+4670(that)s 5102(it)s 5308(\207ts.)s 5777(A)s 220 fnt35
+6021 11859(@OneCol)m 240 fnt82 7046 11862(operation)m 8020(is)s 8244(included)s
+0 11574(in)m 257(the)s 620(ef)s 6(fect)k 1231(of)s
+220 fnt35 1517 11571(@Wide)m 240 fnt82 2231 11574(,)m 2353(since)s
+2915(it)s 3122(does)s 3627(not)s 4008(mak)s 2(e)k
+4595(sense)s 5184(for)s 5537(an)s 5835(object)s 6494(of)s
+6780(\207x)s 3(ed)k 7329(width)s 7946(to)s 8200(ha)s 4(v)k 3(e)k
+8716(tw)s 2(o)k 0 11286(column)m 775(marks.)s 552 10912(The)m
+220 fnt35 993 10909(@High)m 240 fnt82 1725 10912(symbol)m 2498(similarly)s
+3413(ensures)s 4194(that)s 4625(its)s 4914(result)s 5517(is)s
+5740(of)s 6024(a)s 6203(gi)s 6(v)k 3(en)k
+6796(height,)s 7514(by)s 7821(adding)s 8539(white)s 0 10624(space)m
+573(at)s 790(the)s 1123(bottom.)s 1950(In)s 2191(this)s
+2572(case)s 3024(it)s 3201(is)s 3396(an)s 3664(error)s
+4172(for)s 4495(the)s 4828(right)s 5324(parameter)s 6323(to)s
+6547(be)s 6814(too)s 7158(lar)s 4(ge.)k 7780(A)s
+220 fnt35 7995 10621(@OneRo)m 3(w)k 240 fnt82 0 10336(operation)m
+960(is)s 1170(included.)s 240 fnt84 0 9543(3.12.)m 591(@HShift)s
+1550(and)s 1991(@VShift)s 240 fnt82 480 9111(The)m 220 fnt35
+917 9108(@HShift)m 240 fnt82 1802 9111(symbol)m 2572(returns)s 3296(its)s
+3582(right)s 4103(parameter)s 5127(with)s 5619(principal)s 6533(mark)s
+7095(shifted)s 7813(as)s 8073(prescribed)s 0 8823(by)m 294(its)s
+570(left)s 947(parameter:)s 220 fnt35 1124 8315(+)m 240 fnt83
+1244 8320(length)m 220 fnt35 1897 8315(@HShift)m 240 fnt83 2772 8320(object)m
+240 fnt82 3600 8318(Principal)m 4517(mark)s 5069(shifted)s 5777(to)s
+6016(the)s 6364(right)s 6875(by)s 240 fnt83 7169 8320(length)m
+240 fnt82 7762 8318(;)m 220 fnt35 1180 7810(-)m 240 fnt83
+1244 7815(length)m 220 fnt35 1897 7810(@HShift)m 240 fnt83 2772 7815(object)m
+240 fnt82 3600 7813(Principal)m 4517(mark)s 5069(shifted)s 5777(to)s
+6016(the)s 6364(left)s 6741(by)s 240 fnt83 7035 7815(length)m
+240 fnt82 7628 7813(;)m 240 fnt83 1244 7310(length)m 220 fnt35
+1897 7305(@HShift)m 240 fnt83 2772 7310(object)m 240 fnt82 3600 7308(Principal)m
+4512(mark)s 5058(shifted)s 5760(so)s 6020(as)s 6264(to)s
+6497(lie)s 240 fnt83 6786 7310(length)m 240 fnt82 7433 7308(to)m
+7666(the)s 8008(right)s 8513(of)s 8778(the)s 3600 7020(left)m
+3977(edge)s 4485(of)s 240 fnt83 4756 7022(object)m 240 fnt82
+5344 7020(;)m 0 6517(In)m 256(each)s 751(chase)s 220 fnt35
+1338 6514(@HShift)m 240 fnt82 2213 6517(includes)m 3061(a)s 220 fnt35
+3227 6514(@OneCol)m 240 fnt82 4239 6517(ef)m 6(fect.)k 480 6143(The)m
+916(units)s 1440(of)s 1720(measurement)s 3062(of)s 240 fnt83
+3342 6145(length)m 240 fnt82 4003 6143(may)m 4478(be)s 220 fnt35
+4768 6140(c)m 240 fnt82 4873 6143(,)m 220 fnt35 4989 6140(i)m
+240 fnt82 5023 6143(,)m 220 fnt35 5138 6140(p)m 240 fnt82
+5252 6143(,)m 220 fnt35 5368 6140(m)m 240 fnt82 5537 6143(,)m
+220 fnt35 5652 6140(f)m 240 fnt82 5710 6143(,)m 220 fnt35
+5825 6140(s)m 240 fnt82 5928 6143(,)m 220 fnt35 6044 6140(v)m
+240 fnt82 6153 6143(,)m 6268(or)s 220 fnt35 6536 6140(w)m
+240 fnt82 6692 6143(.)m 6864(In)s 7129(the)s 7485(latter)s
+8043(case,)s 220 fnt35 8569 6140(1w)m 240 fnt82 8916 6143(is)m
+0 5855(tak)m 2(en)k 579(to)s 825(be)s 1113(the)s
+1468(width)s 2076(of)s 2354(the)s 2708(right)s 3226(parameter)s 9(,)k
+4285(so)s 4557(that,)s 5029(for)s 5373(e)s 3(xample,)k
+220 fnt35 6294 5852(0.5w @HShift)m 240 fnt82 7699 5855(will)m 8132(centre)s
+8778(the)s 0 5567(principal)m 904(column)s 1679(mark)s 2231(within)s
+2899(the)s 3247(right)s 3758(parameter)s 13(.)k 548 5193(The)m
+220 fnt35 984 5190(@VShift)m 240 fnt82 1855 5193(symbol)m 2624(is)s
+2842(similar)s 3572(e)s 3(xcept)k 4261(that)s 4688(it)s
+4888(applies)s 5624(v)s 3(ertically)k 6584(to)s 6832(the)s
+7188(principal)s 8100(ro)s 6(w)k 8529(mark:)s 220 fnt35
+0 4902(+)m 240 fnt83 120 4907(length)m 240 fnt82 771 4905(shifts)m
+1337(it)s 1527(do)s 6(wn,)k 220 fnt35 2159 4902(-)m
+240 fnt83 2223 4907(length)m 240 fnt82 2874 4905(shifts)m 3440(it)s
+3629(up,)s 3974(and)s 240 fnt83 4376 4907(length)m 240 fnt82
+5027 4905(shifts)m 5593(it)s 5783(to)s 240 fnt83 6019 4907(length)m
+240 fnt82 6670 4905(belo)m 6(w)k 7301(the)s 7647(top)s
+8004(edge)s 8510(of)s 8778(the)s 0 4617(object.)m 748(W)s 9(ith)k
+220 fnt35 1274 4614(@VShift)m 240 fnt82 2077 4617(,)m 220 fnt35
+2184 4614(1w)m 240 fnt82 2522 4617(is)m 2732(tak)s 2(en)k
+3305(to)s 3544(be)s 3826(the)s 4174(height)s 4832(of)s
+5103(the)s 5451(right)s 5962(parameter)s 13(.)k 240 fnt84
+0 3824(3.13.)m 591(@HExpand)s 1854(and)s 2295(@VExpand)s 240 fnt82
+558 3347(The)m 220 fnt35 1004 3344(@HExpand)m 240 fnt82 2195 3347(symbol)m
+2973(causes)s 3666(its)s 3961(right)s 4490(parameter)s 5522(to)s
+5779(be)s 6079(as)s 6348(wide)s 6887(as)s 7155(it)s
+7365(possibly)s 8235(could)s 8844(be)s 0 3059(without)m 784(violating)s
+1679(a)s 220 fnt35 1837 3056(@Wide)m 240 fnt82 2603 3059(symbol)m
+3355(or)s 3606(intruding)s 4528(into)s 4945(the)s 5285(space)s
+5864(occupied)s 6778(by)s 7064(neighbouring)s 8386(g)s 1(aps)k
+8867(or)s 0 2771(objects.)m 841(The)s 220 fnt35 1269 2768(@VExpand)m
+240 fnt82 2430 2771(symbol)m 3190(is)s 3400(similar)s 9(,)k
+4160(b)s 4(ut)k 4522(it)s 4714(af)s 6(fects)k
+5394(height.)s 6156(F)s 3(or)k 6545(e)s 3(xample,)k
+7459(in)s 7702(the)s 8050(object)s 220 fnt35 480 2270(8i @Wide 11i @High {)m
+480 1982( //1i ||1i @HExpand @VExpand x ||1i)m 480 1694( //1i)m 480 1406(})m 240 fnt82 0 912(object)m
+220 fnt35 655 909(x)m 240 fnt82 834 912(could)m 1435(ha)s 4(v)k 3(e)k
+1947(an)s 3(y)k 2356(size)s 2794(up)s 3098(to)s
+3348(six)s 3694(inches)s 4367(wide)s 4899(by)s 5204(nine)s
+5683(inches)s 6357(high,)s 6901(so)s 7178(the)s 220 fnt35
+7537 909(@HExpand)m 240 fnt82 8722 912(and)m 220 fnt35 0 621(@VExpand)m
+240 fnt82 1166 624(symbols)m 2021(cause)s 2614(it)s 2812(to)s
+3057(ha)s 4(v)k 3(e)k 3564(e)s 3(xactly)k
+4311(this)s 4713(size.)s 5254(This)s 5736(is)s 5952(important,)s
+6994(for)s 7338(e)s 3(xample,)k 8258(if)s 220 fnt35
+8481 621(x)m 240 fnt82 8655 624(con)m 8998(-)s 0 336(tains)m
+220 fnt35 502 333(|1r)m -8(t)k 240 fnt82 879 336(or)m
+220 fnt35 1138 333(/1r)m -8(t)k 240 fnt82 1459 336(;)m
+1571(without)s 2362(the)s 2710(e)s 3(xpansion)k 3735(these)s
+4282(might)s 4900(not)s 5266(mo)s 3(v)k 3(e)k
+5848(as)s 6098(f)s 2(ar)k 6420(across)s 7068(or)s
+7327(do)s 6(wn)k 7911(as)s 8161(e)s 3(xpected.)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 49 55
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.13.)m 574(@HExpand)s 1765(and)s 2191(@VExpand)s
+240 fnt84 8832 13840(49)m 240 fnt82 480 13204(As)m 809(Section)s
+1595(2.6)s 1961(e)s 3(xplains)k 2818(in)s 3074(detail,)s
+3723(most)s 4260(objects)s 5001(are)s 5360(already)s 6130(as)s
+6392(lar)s 4(ge)k 6933(as)s 7196(the)s 3(y)k
+7671(possibly)s 8536(could)s 0 12916(be.)m 379(Consequently)s 1738(these)s
+2273(symbols)s 3110(are)s 3446(needed)s 4170(only)s 4638(rarely)s 15(.)k
+220 fnt35 5331 12913(@HExpand)m 240 fnt82 6493 12916(includes)m 7329(a)s
+220 fnt35 7483 12913(@OneCol)m 240 fnt82 8483 12916(ef)m 6(fect,)k
+0 12628(and)m 220 fnt35 404 12625(@VExpand)m 240 fnt82 1565 12628(includes)m
+2413(a)s 220 fnt35 2579 12625(@OneRo)m 3(w)k 240 fnt82
+3710 12628(ef)m 6(fect.)k 240 fnt84 0 11839(3.14.)m 591(@HContract)s
+1976(and)s 2417(@VContract)s 240 fnt82 542 11407(The)m 220 fnt35
+972 11404(@HContr)m 2(act)k 240 fnt82 2239 11407(symbol)m 3001(reduces)s
+3784(the)s 4135(size)s 4564(of)s 4837(its)s 5116(right)s
+5629(parameter)s 6645(to)s 6887(a)s 7055(reasonable)s 8136(minimum)s
+0 11119(\(after)m 575(paragraph)s 1588(breaking\).)s 2668(F)s 3(or)k
+3057(e)s 3(xample,)k 220 fnt35 480 10618(5i @Wide @HContr)m 2(act { A |1r)k -8(t B })k
+240 fnt82 0 10124(has)m 370(result)s 480 9673(A)m 650(B)s
+0 9222(in)m 233(which)s 864(the)s 1201(B)s 1393(is)s
+1592(much)s 2170(closer)s 2789(to)s 3017(the)s 3354(A)s
+3574(than)s 4032(it)s 4213(w)s 2(ould)k 4857(otherwise)s
+5831(ha)s 4(v)k 3(e)k 6321(been.)s 220 fnt35
+6926 9219(@VContr)m 2(act)k 240 fnt82 8167 9222(is)m 8366(similar)s 9(,)k
+0 8934(b)m 4(ut)k 362(in)s 605(a)s 771(v)s 3(ertical)k
+1538(direction.)s 2551(See)s 2952(Section)s 3726(2.6)s 4079(for)s
+4417(a)s 4583(more)s 5130(e)s 3(xtensi)k 6(v)k 3(e)k
+6077(discussion.)s 240 fnt84 0 8190(3.15.)m 591(@HLimited)s 1864(and)s
+2305(@VLimited)s 240 fnt82 579 7758(The)m 220 fnt35 1047 7755(@HLimited)m
+240 fnt82 2221 7758(symbol)m 3021(limits)s 3654(the)s 4042(width)s
+4684(a)s 4(v)k 6(ailable)k 5631(to)s 5910(recursi)s 6(v)k 3(e)k
+6871(and)s 7315(recepti)s 6(v)k 3(e)k 8277(symbols)s
+0 7470(within)m 692(its)s 993(right)s 1529(parameter)s 2567(to)s
+2831(whate)s 6(v)k 3(er)k 3783(is)s 4018(a)s 4(v)k 6(ailable)k
+4950(without)s 5766(increasing)s 6826(the)s 7198(e)s 3(xisting)k
+8030(size)s 8482(of)s 8778(the)s 220 fnt35 0 7179(@HLimited)m
+240 fnt82 1138 7182(object.)m 1890(So)s 2199(this)s 2599(symbol)s
+3362(acts)s 3788(lik)s 2(e)k 220 fnt35 4204 7179(@Wide)m
+240 fnt82 4981 7182(with)m 5467(respect)s 6206(to)s 6449(limiting)s
+7261(the)s 7613(space)s 8204(occupied)s 0 6894(by)m 315(recursi)s 6(v)k 3(e)k
+1258(and)s 1684(recepti)s 6(v)k 3(e)k 2627(symbols,)s
+3553(e)s 3(xcept)k 4256(that)s 4695(instead)s 5451(of)s
+5744(enforcing)s 6734(a)s 6921(\207x)s 3(ed)k 7477(constant)s
+8355(limit,)s 8934(it)s 0 6606(enforces)m 860(whate)s 6(v)k 3(er)k
+1787(size)s 2214(is)s 2424(already)s 3181(in)s 3424(place.)s
+480 6232(The)m 220 fnt35 904 6229(@VLimited)m 240 fnt82 2022 6232(symbol)m
+2778(is)s 2983(e)s 3(xactly)k 3719(the)s 4063(same,)s
+4656(e)s 3(xcept)k 5332(that)s 5746(it)s 5933(applies)s
+6656(v)s 3(ertically)k 7604(rather)s 8215(than)s 8679(hor)s
+8998(-)s 0 5944(izontally)m 15(.)k 240 fnt84 0 5151(3.16.)m
+591(@HAdjust,)s 1804(@V)s 32(Adjust,)k 2972(and)s 3413(@P)s 17(Adjust)k
+240 fnt82 551 4675(These)m 1189(symbols)s 2050(spread)s 2743(their)s
+3252(right)s 3774(parameter)s 4800(apart)s 5348(until)s 5852(it)s
+6056(occupies)s 6955(all)s 7260(the)s 7619(space)s 8218(a)s 4(v)k 6(ailable)k
+0 4387(to)m 268(it;)s 220 fnt35 602 4384(@HAdjust)m 240 fnt82
+1678 4387(adjusts)m 220 fnt35 2422 4384(|)m 240 fnt82 2549 4387(sequences,)m
+220 fnt35 3656 4384(@V)m 17(Adjust)k 240 fnt82 4702 4387(adjusts)m
+220 fnt35 5447 4384(/)m 240 fnt82 5601 4387(sequences,)m 6707(and)s
+220 fnt35 7141 4384(@P)m 26(Adjust)k 240 fnt82 8179 4387(adjusts)m
+220 fnt35 8924 4384(&)m 240 fnt82 0 4099(sequences.)m 1134(F)s 3(or)k
+1523(e)s 3(xample,)k 220 fnt35 480 3598(4i @Wide @P)m 26(Adjust { 1 2 3 4 5 6 7 8 })k
+240 fnt82 0 3101(has)m 370(result)s 480 2646(1)m 1274(2)s
+2088(3)s 2892(4)s 3706(5)s 4512(6)s 5325(7)s
+6133(8)s 0 2192(More)m 571(precisely)s 15(,)k 1521(the)s
+1865(widening)s 2806(is)s 3012(ef)s 6(fected)k 3828(by)s
+4119(enlar)s 4(ging)k 5067(the)s 5411(size)s 5835(of)s
+6102(each)s 6593(component)s 7714(e)s 3(xcept)k 8391(the)s
+8735(last)s 0 1904(by)m 284(an)s 556(equal)s 1118(fraction)s
+1907(of)s 2167(the)s 2504(space)s 3080(that)s 3488(w)s 2(ould)k
+4132(otherwise)s 5106(be)s 5377(left)s 5744(o)s 3(v)k 3(er)k
+6212(\211)s 6381(just)s 6775(the)s 7113(opposite)s 7969(of)s
+8229(the)s 8566(usual)s 0 1616(procedure,)m 1063(which)s 1705(assigns)s
+2447(all)s 2740(the)s 3088(lefto)s 3(v)k 3(er)k
+3884(space)s 4471(to)s 4710(the)s 5058(last)s 5449(component)s
+6573(\(Section)s 7426(2.6\).)s 220 fnt35 480 1239(@P)m 26(Adjust)k
+240 fnt82 1497 1242(is)m 1716(used)s 2222(by)s 2525(the)s
+220 fnt35 2883 1239(adjust)m 240 fnt82 3533 1242(and)m 220 fnt35
+3946 1239(outdent)m 240 fnt82 4743 1242(options)m 5508(of)s 5789(the)s
+220 fnt35 6146 1239(@Break)m 240 fnt82 7011 1242(symbol)m 7780(\(Section)s
+8643(3.4\).)s 0 954(It)m 213(has)s 591(a)s 765(slight)s
+1364(peculiarity:)s 2559(it)s 2759(will)s 3193(not)s 3567(enlar)s 4(ge)k
+4330(components)s 5546(when)s 6130(the)s 6486(immediately)s 7742(follo)s 6(wing)k
+8728(g)s 1(ap)k 0 666(has)m 398(width)s 1029(0.)s
+1342(This)s 1847(is)s 2086(to)s 2354(pre)s 6(v)k 3(ent)k
+3151(space)s 3767(from)s 4320(appearing)s 5345(\(for)s 5791(e)s 3(xample\))k
+6755(between)s 7638(a)s 7833(w)s 2(ord)k 8410(and)s
+8843(an)s 0 378(immediately)m 1248(follo)s 6(wing)k 2225(comma.)s
+3093(The)s 3521(other)s 4072(tw)s 2(o)k 4482(symbols)s
+5331(will)s 5757(enlar)s 4(ge)k 6512(such)s 7008(components.)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 50 56
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(50)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt84 0 13203(3.17.)m
+591(@HScale)s 1587(and)s 2028(@VScale)s 220 fnt35 538 12768(@HScale)m
+240 fnt82 1516 12771(causes)m 2189(its)s 2462(right)s 2970(parameter)s
+3982(to)s 4218(e)s 3(xpand)k 4962(to)s 5199(\207ll)s
+5516(the)s 5861(space)s 6446(a)s 4(v)k 6(ailable,)k
+7402(by)s 7693(geometricallly)s 0 12483(scaling)m 730(it:)s 220 fnt35
+480 11982(4i @Wide @HScale { 1 2 3 4 5 6 7 8 })m 240 fnt82 0 11488(has)m 370(result)s gsave
+480 0 translate
+4.4965 1.0000 scale
+0 11033(1)m
+155(2)s 329(3)s 493(4)s 667(5)s 833(6)s
+1006(7)s 1174(8)s
+grestore
+0 10579(and)m 220 fnt35 480 10128(0.5i @Wide @HScale { 1 2 3 4 5 6 7 8 })m
+240 fnt82 0 9634(has)m 370(result)s gsave
+480 0 translate
+0.5621 1.0000 scale
+0 9179(1)m 155(2)s
+329(3)s 493(4)s 667(5)s 833(6)s 1006(7)s
+1174(8)s
+grestore
+220 fnt35 0 8722(@HScale)m 240 fnt82 980 8725(\207rst)m
+1409(applies)s 220 fnt35 2136 8722(@HContr)m 2(act)k 240 fnt82
+3398 8725(to)m 3635(its)s 3910(parameter)s 9(,)k 4960(then)s
+5427(horizontally)s 6635(scales)s 7254(it)s 7444(to)s 7682(the)s
+8028(actual)s 8651(size.)s 0 8437(The)m 433(principal)s 1342(mark)s
+1899(of)s 2175(the)s 2528(right)s 3044(parameter)s 4063(has)s
+4438(no)s 4736(ef)s 6(fect)k 5337(on)s 5639(the)s
+5992(result;)s 6639(the)s 6992(parameter)s 8011(is)s 8226(scaled)s
+8887(to)s 0 8149(the)m 365(actual)s 1007(size)s 1451(and)s
+1872(positioned)s 2944(to)s 3200(\207ll)s 3537(the)s 3902(space)s
+4506(a)s 4(v)k 6(ailable.)k 5539(\(T)s 19(aking)k
+6347(account)s 7168(of)s 7456(alignment)s 8489(of)s 8778(the)s
+0 7861(principal)m 904(mark)s 1456(only)s 1936(causes)s 2611(trouble)s
+3344(in)s 3587(practice.\))s 220 fnt35 480 7484(@VScale)m 240 fnt82
+1460 7487(is)m 1681(similar)s 9(,)k 2452(b)s 4(ut)k
+2825(in)s 3080(a)s 3257(v)s 3(ertical)k 4035(direction.)s
+220 fnt35 5059 7484(@HScale)m 240 fnt82 6051 7487(and)m 220 fnt35
+6467 7484(@VScale)m 240 fnt82 7447 7487(each)m 7953(ha)s 4(v)k 3(e)k
+8465(both)s 8960(a)s 220 fnt35 0 7196(@OneCol)m 240 fnt82
+1012 7199(and)m 1416(a)s 220 fnt35 1582 7196(@OneRo)m 3(w)k
+240 fnt82 2713 7199(ef)m 6(fect.)k 240 fnt84 0 6451(3.18.)m
+591(@HCo)s 2(v)k 2(er)k 1679(and)s 2120(@VCo)s 2(v)k 2(er)k
+240 fnt82 529 6019(The)m 220 fnt35 946 6016(@VCo)m 3(v)k 5(er)k
+240 fnt82 1941 6019(symbol)m 2690(v)s 3(ertically)k 3631(scales)s
+4241(its)s 4506(right)s 5006(parameter)s 6009(so)s 6264(that)s
+6671(it)s 6852(co)s 3(v)k 3(ers)k 7510(e)s 6(v)k 3(ery)k
+8075(object)s 8708(that)s 0 5731(shares)m 648(its)s 924(ro)s 6(w)k
+1344(mark.)s 1999(F)s 3(or)k 2388(e)s 3(xample,)k
+220 fnt35 480 5230(@VCo)m 3(v)k 5(er \( 45d @Rotate Hello @VCo)k 3(v)k 5(er \))k
+240 fnt82 0 4734(produces)m 748 843 0 396 240 288 60 480 3551 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+748 843 0 396 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd ] lfigdopath
+pop pop
+grestore
+gsave
+0 396 translate
+1.0000 4.1328 scale
+0 -54(\()m
+grestore
+gsave
+210 396 translate
+45.0000 rotate
+0 -54(Hello)m
+grestore
+gsave
+680 396 translate
+1.0000 4.1328 scale
+0 -54(\))m
+
+grestore
+
+grestore
+end end restore
+grestore
+0 3100(The)m 428(ro)s 6(w)k 848(mark)s 1400(has)s
+1770(been)s 2279(added)s 2909(to)s 3148(sho)s 6(w)k
+3702(clearly)s 4405(where)s 5045(it)s 5237(lies.)s 5732(This)s
+6208(should)s 6905(be)s 7187(compared)s 8188(with)s 220 fnt35
+480 2599(@VScale \( 45d @Rotate Hello @VScale \))m 240 fnt82 0 2103(which)m 642(produces)s 748 486 0 39 240 288 60 480 1277 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+748 486 0 39 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd ] lfigdopath
+pop pop
+grestore
+gsave
+0 229 translate
+1.0000 2.3824 scale
+0 -54(\()m
+
+grestore
+gsave
+210 39 translate
+45.0000 rotate
+0 -54(Hello)m
+grestore
+gsave
+0 229 translate
+1.0000 2.3824 scale
+680 -54(\))m
+grestore
+
+grestore
+end end restore
+grestore
+0 826(Scaling)m 786(abandons)s 1759(mark)s
+2328(alignment)s 3361(and)s 3782(so)s 4065(is)s 4292(able)s
+4763(to)s 5018(e)s 3(xactly)k 5776(co)s 3(v)k 3(er)k
+6378(the)s 6743(rest)s 7164(of)s 7452(the)s 7817(ro)s 6(w)k 15(,)k
+8292(whereas)s 0 538(co)m 3(v)k 3(ering)k 896(preserv)s 3(es)k
+1859(mark)s 2424(alignment)s 3453(and)s 3869(so)s 4148(is)s
+4371(obliged)s 5160(in)s 5415(general)s 6186(to)s 6438(more)s
+6998(than)s 7479(co)s 3(v)k 3(er)k 8077(the)s
+8438(rest)s 8855(of)s 0 250(the)m 348(ro)s 6(w)k 15(.)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 51 57
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.18.)m 574(@HCo)s 2(ver)k 1615(and)s
+2041(@VCo)s 2(ver)k 240 fnt84 8839 13840(51)m 240 fnt82
+480 13250(If)m 700(the)s 1038(parameter)s 2042(of)s 220 fnt35
+2303 13247(@VCo)m 3(v)k 5(er)k 240 fnt82 3299 13250(has)m
+3658(zero)s 4112(v)s 3(ertical)k 4869(size,)s 5337(this)s
+5723(is)s 5923(tak)s 2(en)k 6485(to)s 6714(mean)s
+7279(that)s 7687(co)s 3(v)k 3(ering)k 8561(is)s
+8760(not)s 0 12962(required)m 863(after)s 1368(all)s 1670(and)s
+2083(the)s 220 fnt35 2441 12959(@VCo)m 3(v)k 5(er)k
+240 fnt82 3456 12962(is)m 3675(silently)s 4441(ignored.)s 5345(If)s
+5585(ho)s 6(we)k 6(v)k 3(er)k 6463(the)s
+6820(parameter)s 7843(has)s 8223(non-zero)s 0 12674(size)m 434(abo)s 3(v)k 3(e)k
+1064(the)s 1420(mark)s 1980(b)s 4(ut)k 2350(zero)s
+2822(size)s 3256(belo)s 6(w)k 15(,)k 3935(or)s
+4202(vice)s 4664(v)s 3(ersa,)k 5280(this)s 5684(is)s
+5901(tak)s 2(en)k 6482(to)s 6729(be)s 7019(an)s
+7310(error)s 7841(since)s 8396(scaling)s 0 12386(cannot)m 698(mak)s 2(e)k
+1270(the)s 1618(parameter)s 2632(co)s 3(v)k 3(er)k
+3217(the)s 3565(rest)s 3969(of)s 4240(the)s 4588(ro)s 6(w)k 15(.)k
+220 fnt35 480 12009(@HCo)m 3(v)k 5(er)k 240 fnt82
+1505 12012(is)m 1722(similar)s 9(,)k 2489(horizontally)s 3705(co)s 3(v)k 3(ering)k
+4596(all)s 4896(objects)s 5631(that)s 6056(share)s 6623(its)s
+6906(column)s 7688(mark.)s 8350(Neither)s 0 11724(symbol)m 753(w)s 2(orks)k
+1379(well)s 1837(near)s 2300(g)s 1(alle)k 3(y)k
+2926(tar)s 4(gets,)k 3658(because)s 4463(the)s 4803(scale)s
+5328(f)s 2(actor)k 5934(to)s 6166(apply)s 6744(is)s
+6946(determined)s 8071(before)s 8729(an)s 3(y)k 0 11436(g)m 1(alle)k 3(y)k
+634(\210ushing)s 1459(tak)s 2(es)k 1999(place.)s 240 fnt84
+0 10643(3.19.)m 591(@StartHSpan,@StartVSpan,)s 3642(@StartHVSpan,)s 5374(@HSpan,)s 6416(and)s
+6857(@VSpan)s 240 fnt82 556 10166(These)m 1199(symbols)s 2065(w)s 2(ork)k
+2632(together)s 3492(to)s 3747(produce)s 4591(spanning)s 5525(columns)s
+6403(and)s 6824(ro)s 6(ws)k 7350(in)s 7610(a)s
+7792(more)s 8356(\210e)s 3(xible)k 0 9878(w)m 2(ay)k
+451(than)s 920(is)s 1130(possible)s 1970(in)s 2213(practice)s
+3024(with)s 220 fnt35 3506 9875(//)m 240 fnt82 3691 9878(and)m
+220 fnt35 4095 9875(||)m 240 fnt82 4189 9878(.)m 4353(An)s
+4703(object)s 220 fnt35 480 9377(@Star)m -8(tHSpan object)k 240 fnt82
+0 8880(causes)m 220 fnt35 682 8877(object)m 240 fnt82 1330 8880(to)m
+1577(be)s 1866(printed,)s 2658(b)s 4(ut)k 3027(occup)s 2(ying)k
+4084(all)s 4384(the)s 4740(horizontal)s 5771(space)s 6366(to)s
+6612(the)s 6968(right)s 7486(on)s 7791(the)s 8146(ro)s 6(w)k
+8574(mark)s 0 8592(on)m 289(which)s 922(it)s 1105(lies)s
+1478(up)s 1762(to)s 1992(and)s 2387(including)s 3335(the)s
+3675(rightmost)s 220 fnt35 4642 8589(@HSpan)m 240 fnt82 5572 8592(symbol)m
+6323(on)s 6611(that)s 7020(mark)s 7563(not)s 7920(preceded)s
+8832(by)s 220 fnt35 0 8301(@Star)m -8(tHVSpan)k 240 fnt82
+1496 8304(,)m 220 fnt35 1603 8301(@Star)m -8(tHSpan)k 240 fnt82
+2953 8304(,)m 220 fnt35 3059 8301(@Star)m -8(tVSpan)k 240 fnt82
+4397 8304(,)m 4503(or)s 220 fnt35 4761 8301(@VSpan)m 240 fnt82
+5628 8304(.)m 5791(The)s 6218(column)s 6992(mark)s 7543(of)s
+7813(this)s 8208(spanning)s 0 8016(object)m 644(is)s 854(not)s
+1220(constrained)s 2380(to)s 2619(align)s 3154(with)s 3636(an)s 3(y)k
+4033(of)s 4304(the)s 4652(column)s 5427(marks)s 6062(of)s
+6333(the)s 6681(columns)s 7543(it)s 7735(spans.)s 480 7642(If)m
+739(there)s 1301(is)s 1541(no)s 220 fnt35 1863 7639(@HSpan)m
+240 fnt82 2831 7642(symbol)m 3621(an)s 3(ywhere)k 4633(to)s
+4901(the)s 5279(right)s 5819(of)s 220 fnt35 6119 7639(@Star)m -8(tHSpan)k
+240 fnt82 7469 7642(,)m 7606(then)s 8104(the)s 8482(object)s
+0 7354(spans)m 585(only)s 1067(its)s 1345(o)s 6(wn)k
+1811(column.)s 2695(This)s 3173(means)s 3837(that)s 4257(it)s
+4451(occupies)s 5341(that)s 5761(column)s 6538(as)s 6790(usual)s
+7352(b)s 4(ut)k 7716(its)s 7994(mark)s 8548(is)s
+8760(not)s 0 7066(constrained)m 1160(to)s 1399(align)s 1934(with)s
+2416(those)s 2977(of)s 3248(the)s 3596(other)s 4147(objects)s
+4875(in)s 5118(the)s 5466(column.)s 480 6692(Similarly)m 15(,)k
+1457(the)s 220 fnt35 1801 6689(@Star)m -8(tVSpan)k 240 fnt82
+3196 6692(symbol)m 3952(causes)s 4624(its)s 4896(object)s 5537(to)s
+5772(occup)s 2(y)k 6513(all)s 6802(the)s 7147(v)s 3(ertical)k
+7910(space)s 8493(belo)s 6(w)k 0 6404(it)m 191(on)s
+486(the)s 832(column)s 1605(mark)s 2155(on)s 2451(which)s
+3091(it)s 3281(lies,)s 3717(do)s 6(wn)k 4299(to)s
+4537(and)s 4939(including)s 5894(the)s 6240(bottommost)s 220 fnt35
+7441 6401(@VSpan)m 240 fnt82 8366 6404(symbol)m 0 6116(on)m 294(that)s
+708(mark)s 1256(not)s 1618(preceded)s 2535(by)s 2825(a)s
+220 fnt35 2987 6113(@Star)m -8(tHVSpan)k 240 fnt82 4483 6116(,)m
+220 fnt35 4586 6113(@Star)m -8(tHSpan)k 240 fnt82 5936 6116(,)m
+220 fnt35 6039 6113(@Star)m -8(tVSpan)k 240 fnt82 7377 6116(,)m
+7480(or)s 220 fnt35 7735 6113(@HSpan)m 240 fnt82 8614 6116(;)m
+8722(and)s 0 5828(if)m 206(there)s 728(is)s 927(no)s
+220 fnt35 1209 5825(@VSpan)m 240 fnt82 2125 5828(symbol)m 2874(an)s 3(ywhere)k
+3846(belo)s 6(w)k 4468(it)s 4649(on)s 4935(that)s
+5342(mark,)s 5929(then)s 6387(the)s 6724(object)s 7357(spans)s
+7929(only)s 8398(its)s 8662(o)s 6(wn)k 0 5540(ro)m 6(w)k 15(,)k
+458(occup)s 2(ying)k 1507(its)s 1783(ro)s 6(w)k
+2203(b)s 4(ut)k 2565(with)s 3047(its)s 3323(mark)s
+3875(not)s 4241(constrained)s 5401(to)s 5640(align)s 6175(with)s
+6657(the)s 7005(ro)s 6(w)k 7425(mark.)s 480 5166(The)m
+220 fnt35 949 5163(@Star)m -8(tHVSpan)k 240 fnt82 2547 5166(symbol)m
+3349(combines)s 4359(the)s 4748(ef)s 6(fects)k 5470(of)s
+220 fnt35 5783 5163(@Star)m -8(tHSpan)k 240 fnt82 7235 5166(and)m
+220 fnt35 7681 5163(@Star)m -8(tVSpan)k 240 fnt82 9019 5166(,)m
+0 4878(allo)m 6(wing)k 884(an)s 1167(object)s 1811(to)s
+2050(span)s 2546(both)s 3029(columns)s 3891(and)s 4295(ro)s 6(ws)k
+4805(simultaneously)s 15(.)k 6402(F)s 3(or)k 6791(e)s 3(xample,)k
+7705(in)s 220 fnt35 480 4377(@Star)m -8(tHVSpan x | | @HSpan)k 480 4089(/)m
+480 3801(@VSpan | |)m 240 fnt82 0 3305(the)m 378(object)s 220 fnt35
+1052 3302(x)m 240 fnt82 1250 3305(will)m 1706(occup)s 2(y)k
+2481(a)s 2677(rectangular)s 3841(area)s 4328(spanning)s 5276(three)s
+5840(columns,)s 6788(tw)s 2(o)k 7228(ro)s 6(ws,)k
+7824(and)s 8258(the)s 8637(g)s 1(aps)k 0 3017(between)m
+854(them.)s 480 2643(The)m 908(objects)s 1636(lying)s 2182(in)s
+2425(the)s 2774(re)s 3(gion)k 3439(spanned)s 4283(should)s
+4980(all)s 5274(be)s 5556(empty)s 15(,)k 6247(or)s
+6506(the)s 220 fnt35 6855 2640(@HSpan)m 240 fnt82 7794 2643(and)m
+220 fnt35 8199 2640(@VSpan)m 240 fnt82 0 2355(symbols)m 865(can)s
+1271(be)s 1570(used)s 2084(to)s 2340(document)s 3360(the)s
+3725(spanning)s 4660(that)s 5095(is)s 5322(occurring.)s 6418(At)s
+6734(present)s 7501(there)s 8051(may)s 8534(be)s 8833(no)s
+0 2067(g)m 1(alle)k 3(y)k 639(tar)s 4(gets)k
+1328(or)s 1593(recursi)s 6(v)k 3(e)k 2521(symbols)s
+3376(within)s 4050(the)s 4404(right)s 4921(parameter)s 5941(of)s
+220 fnt35 6218 2064(@Star)m -8(tHSpan)k 240 fnt82 7568 2067(,)m
+220 fnt35 7681 2064(@Star)m -8(tVSpan)k 240 fnt82 9019 2067(,)m
+0 1779(or)m 220 fnt35 246 1776(@Star)m -8(tHVSpan)k 240 fnt82
+1742 1779(.)m 1892(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+2838(the)s 3172(right)s 3670(parameter)s 4670(may)s 5122(otherwise)s
+6093(be)s 6362(an)s 6631(arbitrary)s 7492(object,)s 8169(including)s
+0 1491(paragraphs)m 1100(of)s 1371(te)s 3(xt)k 1786(that)s
+2204(require)s 2936(breaking.)s 480 1117(If)m 722(the)s 1082(right)s
+1605(parameter)s 2631(of)s 220 fnt35 2914 1114(@Star)m -8(tHSpan)k
+240 fnt82 4264 1117(,)m 220 fnt35 4383 1114(@Star)m -8(tVSpan)k
+240 fnt82 5721 1117(,)m 5840(or)s 220 fnt35 6111 1114(@Star)m -8(tHVSpan)k
+240 fnt82 7679 1117(occupies)m 8579(more)s 0 829(horizontal)m 1022(or)s
+1279(v)s 3(ertical)k 2044(space)s 2629(than)s 3095(all)s
+3386(of)s 3655(the)s 4001(spanned)s 4842(columns)s 5701(or)s
+5958(ro)s 6(ws)k 6466(combined)s 7466(require,)s 8247(the)s
+8592(e)s 3(xtra)k 0 541(space)m 601(goes)s 1106(into)s
+1546(the)s 1908(last)s 2314(spanned)s 3172(column)s 3962(or)s
+4235(ro)s 6(w)k 15(.)k 4765(Ov)s 3(erlapping)k
+6026(spanning)s 6958(ro)s 6(ws)k 7483(and)s 7902(columns)s
+8779(are)s 0 253(permitted.)m 1081(Gaps)s 1626(spanned)s 2471(by)s
+2767(span)s 3266(objects)s 3996(are)s 4345(unbreakable)s 5572(\(their)s
+220 fnt35 6151 250(u)m 240 fnt82 6321 253(indicator)m 7232(is)s
+7444(set)s 7772(automatically)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 52 58
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(52)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(and)m
+404(cannot)s 1102(be)s 1384(re)s 6(v)k 4(ok)k 2(ed\).)k
+240 fnt84 0 12422(3.20.)m 591(@Scale)s 240 fnt82 588 11990(This)m
+1112(symbol)s 1920(geometrically)s 3335(scales)s 4004(its)s 4328(right)s
+4887(parameter)s 5949(by)s 6291(the)s 6687(scale)s 7268(f)s 2(actor)k
+7930(gi)s 6(v)k 3(en)k 8558(in)s 8850(its)s
+0 11702(left)m 377(parameter:)s 220 fnt35 480 11201(1.0 @Scale Hello 2.0 @Scale Hello 0.5 @Scale Hello)m 240 fnt82
+0 10746(has)m 370(result)s gsave
+480 10238 translate
+1.0000 1.0000 scale
+0 -54(Hello)m
+grestore
+gsave
+1124 10238 translate
+2.0000 2.0000 scale
+0 -54(Hello)m
+grestore
+gsave
+2292 10238 translate
+0.5000 0.5000 scale
+0 -54(Hello)m
+
+grestore
+0 9675(The)m 433(left)s 815(parameter)s 1834(can)s 2228(be)s
+2515(tw)s 2(o)k 2930(scale)s 3468(f)s 2(actors,)k
+4227(in)s 4475(which)s 5122(case)s 5594(the)s 5947(\207rst)s
+6383(applies)s 7116(horizontally)s 15(,)k 8368(and)s 8778(the)s
+0 9387(second)m 723(v)s 3(ertically:)k 220 fnt35 480 8886({0.5 2.0} @Scale Hello)m
+240 fnt82 0 8392(has)m 370(result)s gsave
+480 7884 translate
+0.5000 2.0000 scale
+0 -54(Hello)m
+grestore
+0 7321(The)m
+433(left)s 815(parameter)s 1834(may)s 2305(be)s 2592(empty)s 15(,)k
+3287(in)s 3535(which)s 4182(case)s 4654(Lout)s 5171(will)s
+5602(scale)s 6140(the)s 6493(object)s 7142(by)s 7441(a)s
+7612(common)s 8512(f)s 2(actor)k 0 7033(horizontally)m 1209(and)s
+1613(v)s 3(ertically)k 2565(so)s 2831(as)s 3081(to)s
+3320(occup)s 2(y)k 4064(all)s 4357(a)s 4(v)k 6(ailable)k
+5265(horizontal)s 6289(space:)s 220 fnt35 480 6532({} @Scale { Hello w)m 2(or)k -3(ld })k
+240 fnt82 0 6038(has)m 370(result)s gsave
+0 4881 translate
+7.9609 7.9609 scale
+0 -54(Hello)m 583(w)s 2(orld)k
+
+grestore
+0 3977(The)m 433(right)s 949(parameter)s 1969(may)s 2440(be)s
+2728(an)s 3(y)k 3130(object.)s 220 fnt35 3884 3974(@Scale)m
+240 fnt82 4712 3977(has)m 5088(both)s 5576(a)s 220 fnt35
+5748 3974(@OneCol)m 240 fnt82 6765 3977(and)m 7175(a)s 220 fnt35
+7346 3974(@OneRo)m 3(w)k 240 fnt82 8483 3977(ef)m 6(fect,)k
+0 3689(and)m 404(the)s 752(marks)s 1387(of)s 1658(the)s
+2006(result)s 2596(coincide)s 3462(with)s 3944(the)s 4292(principal)s
+5196(marks)s 5831(of)s 6102(the)s 6450(right)s 6961(parameter)s 13(.)k
+240 fnt84 0 2896(3.21.)m 591(@Rotate)s 240 fnt82 542 2464(The)m
+220 fnt35 973 2461(@Rotate)m 240 fnt82 1897 2464(symbol)m 2660(will)s
+3089(rotate)s 3691(its)s 3970(right)s 4484(parameter)s 5501(counterclockwise)s
+7233(an)s 7519(amount)s 8300(gi)s 6(v)k 3(en)k
+8883(in)s 0 2176(de)m 3(grees)k 778(\(positi)s 6(v)k 3(e)k
+1661(or)s 1920(ne)s 3(g)k 1(ati)k 6(v)k 3(e\))k
+2845(by)s 3139(its)s 3415(left)s 3792(parameter)s 13(.)k
+4897(F)s 3(or)k 5286(e)s 3(xample,)k 220 fnt35
+480 1675(30d @Rotate { hello)m 8(, w)k 2(or)k -3(ld })k 240 fnt82
+0 1181(has)m 370(result)s gsave
+534 228 translate
+30.0000 rotate
+0 -54(hello,)m 583(w)s 2(orld)k
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 53 59
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13845(3.21.)m 574(@Rotate)s 240 fnt84 8833 13842(53)m
+240 fnt82 0 13251(Before)m 710(rotating)s 1511(the)s 1863(object,)s
+220 fnt35 2559 13248(@OneCol)m 240 fnt82 3576 13251(and)m 220 fnt35
+3984 13248(@OneRo)m 3(w)k 240 fnt82 5120 13251(are)m 5471(applied)s
+6238(to)s 6482(it.)s 6782(The)s 7215(result)s 7809(is)s
+8024(a)s 8195(rectangle)s 0 12963(whose)m 668(marks)s 1303(pass)s
+1766(through)s 2568(the)s 2916(point)s 3468(where)s 4108(the)s
+4456(original)s 5254(marks)s 5889(crossed:)s 1587 283 340 113 240 288 60 480 11740 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1587 283 340 113 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1587 283 340 113 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+end end restore
+grestore
+240 fnt78 2547 11793(\336)m
+gsave
+3256 11586 translate
+240 fnt82 1515 1037 379 267 240 288 60 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1515 1037 379 267 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1515 1037 379 267 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+gsave
+379 267 translate
+30.0000 rotate
+1587 283 340 113 240 288 60 -340 -113 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+1587 283 340 113 240 288 60 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+1587 283 340 113 240 288 60 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+end end restore
+grestore
+
+grestore
+
+grestore
+
+grestore
+end end restore
+grestore
+240 fnt82 0 11135(As)m 324(this)s 728(e)s 3(xample)k
+1598(sho)s 6(ws,)k 2306(rotation)s 3113(by)s 3415(an)s
+3705(angle)s 4287(other)s 4845(than)s 5322(a)s 5495(multiple)s
+6355(of)s 6633(ninety)s 7293(de)s 3(grees)k 8079(introduces)s
+0 10847(quite)m 534(a)s 700(lot)s 1012(of)s 1283(white)s
+1870(space.)s 2565(So,)s 2925(for)s 3263(e)s 3(xample,)k
+4177(the)s 4525(result)s 5115(of)s 220 fnt35 480 10339(-30d)m
+968(@Rotate)s 1890(30d)s 2305(@Rotate)s 240 fnt83 3286 10344(object)m
+240 fnt82 0 9841(is)m 210(a)s 376(much)s 965(lar)s 4(ger)k
+1577(object)s 2221(than)s 240 fnt83 2690 9843(object)m 240 fnt82
+3278 9841(,)m 3385(despite)s 4118(the)s 4466(f)s 2(act)k
+4881(that)s 5299(one)s 5701(rotation)s 6501(cancels)s 7255(the)s
+7603(other)s 13(.)k 480 9467(Rotation)m 1362(of)s 1634(objects)s
+2363(containing)s 3427(recepti)s 6(v)k 3(e)k 4350(and)s
+4755(recursi)s 6(v)k 3(e)k 5678(symbols)s 6528(is)s
+6739(permitted,)s 7762(b)s 4(ut)k 8125(for)s 8464(angles)s
+0 9179(other)m 553(than)s 1024(multiples)s 1967(of)s 2240(ninety)s
+2894(de)s 3(grees)k 3675(it)s 3869(is)s 4082(best)s
+4529(to)s 4770(mak)s 2(e)k 5345(the)s 5695(size)s
+6125(of)s 6398(the)s 6748(rotated)s 7472(object)s 8118(clear)s
+8644(with)s 220 fnt35 0 8888(@Wide)m 240 fnt82 774 8891(and)m
+220 fnt35 1178 8888(@High)m 240 fnt82 1897 8891(symbols:)m 220 fnt35
+480 8390(30d @Rotate 5i @Wide 4i @High)m 480 8102({ //1i @T)m 26(e)k 6(xtPlace)k 480 7814( //1i)m
+480 7526(})m 240 fnt82 0 7032(This)m 532(is)s 798(because)s
+1667(for)s 2061(angles)s 2779(other)s 3386(than)s 3911(multiples)s
+4907(of)s 5234(ninety)s 5942(de)s 3(grees)k 6776(the)s
+7180(space)s 7823(a)s 4(v)k 6(ailable)k 8788(for)s
+220 fnt35 0 6741(@T)m 26(e)k 6(xtPlace)k 240 fnt82
+1218 6744(to)m 1457(occup)s 2(y)k 2201(is)s 2411(indeterminate,)s
+3831(and)s 4235(the)s 4583(result)s 5173(is)s 5383(poor)s 13(.)k
+240 fnt84 0 5951(3.22.)m 591(@Backgr)s 4(ound)k 240 fnt82
+577 5474(The)m 220 fnt35 1042 5471(@Bac)m 4(kg)k 2(round)k
+240 fnt82 2515 5474(symbol)m 3312(will)s 3775(print)s 4323(its)s
+4637(left)s 5051(parameter)s 6102(in)s 6382(the)s 6767(background)s
+7993(of)s 8301(its)s 8615(right)s 0 5186(parameter)m 13(.)k
+1115(That)s 1624(is,)s 1901(the)s 2260(result)s 2860(has)s
+3241(the)s 3600(size)s 4038(of)s 4319(the)s 4678(right)s
+5200(parameter)s 9(,)k 6263(b)s 4(ut)k 6635(the)s
+6994(left)s 7382(parameter)s 8407(will)s 8844(be)s 0 4898(printed)m
+735(\207rst)s 1166(in)s 1409(the)s 1757(same)s 2304(space,)s
+2942(with)s 3424(its)s 3700(marks)s 4335(aligned)s 5097(with)s
+5579(the)s 5927(marks)s 6562(of)s 6833(the)s 7181(right)s
+7692(parameter)s 13(.)k 240 fnt84 0 4105(3.23.)m 591(@K)s 6(er)k 3(nShrink)k
+240 fnt82 541 3673(This)m 1018(symbol)s 1779(returns)s 2495(its)s
+2772(right)s 3284(parameter)s 4300(unchanged)s 5397(in)s 5641(appearance)s
+6774(b)s 4(ut)k 7137(occup)s 2(ying)k 8187(a)s
+8355(slightly)s 0 3385(smaller)m 770(bounding)s 1737(box.)s 2269(The)s
+2705(reduction)s 3673(is)s 3891(by)s 4193(the)s 4549(amount)s
+5335(of)s 5614(k)s 2(erning)k 6404(that)s 6830(w)s 2(ould)k
+7493(be)s 7783(applied)s 8553(if)s 8778(the)s 0 3097(right)m
+511(parameter)s 1525(w)s 2(as)k 1946(immediately)s 240 fnt83
+3194 3099(followed)m 240 fnt82 4084 3097(by)m 4378(the)s 4726(left)s
+5103(parameter)s 13(.)k 6208(F)s 3(or)k 6597(e)s 3(xample,)k
+220 fnt35 480 2596(.)m 13( @K)k 8(er)k -5(nShr)k -3(ink P)k
+240 fnt82 0 2141(has)m 370(result)s 104 158 0 54 240 288 60 480 1693 LoutGr2
+LoutBox stroke
+grestore
+0 0(P)m
+grestore
+0 1242(where)m
+649(a)s 824(box)s 1249(of)s 1529(size)s 1965(0)s
+2150(has)s 2529(been)s 3048(dra)s 3(wn)k 3709(around)s
+4441(the)s 4799(result)s 5398(to)s 5647(mak)s 2(e)k
+6228(its)s 6513(e)s 3(xtent)k 7164(clear)s 13(.)k
+7787(Compare)s 8730(this)s 0 954(with)m 482(`P')s 806(alone:)s
+130 158 0 54 240 288 60 480 505 LoutGr2
+LoutBox stroke
+grestore
+0 0(P)m
+grestore
+0 54(in)m 243(which)s 885(the)s 1232(bounding)s
+2191(box)s 2605(e)s 3(xactly)k 3346(encloses)s 4206(the)s
+4554(object,)s 5245(or)s 5503(at)s 5735(least)s 6231(is)s
+6441(supposed)s 7390(to.)s 7740(The)s 8167(bounding)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 54 60
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(54)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(box)m
+415(is)s 625(smaller)s 1387(on)s 1684(the)s 2032(right)s
+2543(by)s 2837(the)s 3185(amount)s 3963(of)s 4234(k)s 2(erning)k
+5016(that)s 5434(w)s 2(ould)k 6089(be)s 6371(applied)s
+7133(between)s 7987(`P')s 8311(and)s 8715(`.)s 16('.)k
+480 12831(The)m 916(only)s 1405(kno)s 6(wn)k 2117(use)s
+2501(for)s 2847(this)s 3252(symbol)s 4020(is)s 4239(to)s
+4486(produce)s 5322(tuck)s 2(ed-in)k 6288(subscripts)s 7304(in)s
+7555(the)s 7912(Eq)s 8245(equation)s 0 12543(formatting)m 1061(package.)s
+240 fnt84 0 11750(3.24.)m 591(@Common,)s 1872(@Rump,)s 2847(and)s
+3288(@Meld)s 240 fnt82 540 11273(The)m 220 fnt35 968 11270(@Common)m
+240 fnt82 2127 11273(and)m 220 fnt35 2531 11270(@Rump)m 240 fnt82
+3391 11273(symbols)m 4240(compare)s 5119(tw)s 2(o)k 5529(paragraph)s
+6542(objects:)s 220 fnt35 480 10772({ Aardv)m 5(ar)k -3(k, 29 } @Common { Aardv)k 5(ar)k -3(k, 359 })k
+240 fnt82 0 10278(If)m 234(either)s 842(parameter)s 1860(is)s
+2075(not)s 2446(a)s 2616(paragraph)s 3634(object,)s 4329(it)s
+4526(is)s 4741(con)s 9(v)k 3(erted)k 5734(into)s
+6164(a)s 6334(single-object)s 7633(paragraph)s 8651(\207rst.)s 0 9990(The)m
+418(result)s 998(of)s 220 fnt35 1259 9987(@Common)m 240 fnt82
+2408 9990(is)m 2608(the)s 2946(common)s 3831(pre\207x)s 4433(of)s
+4694(the)s 5032(tw)s 2(o)k 5432(paragraphs;)s 6583(that)s
+6991(is,)s 7247(those)s 7798(initial)s 8398(objects)s 0 9702(which)m
+640(are)s 985(equal)s 1555(in)s 1796(the)s 2142(tw)s 2(o)k
+2549(paragraphs.)s 3760(In)s 4013(the)s 4359(e)s 3(xample)k
+5220(abo)s 3(v)k 3(e,)k 5890(the)s 6236(result)s
+6824(is)s 220 fnt35 7031 9699(Aardv)m 5(ar)k -3(k,)k
+240 fnt82 7949 9702(.)m 8111(The)s 8536(result)s 0 9414(of)m
+220 fnt35 271 9411(@Rump)m 240 fnt82 1131 9414(is)m 1341(that)s
+1759(part)s 2190(of)s 2461(the)s 2809(second)s 3532(object)s
+4176(which)s 4818(is)s 5028(not)s 5394(included)s 6276(in)s
+220 fnt35 6519 9411(@Common)m 240 fnt82 7618 9414(;)m 7730(the)s
+8078(result)s 8668(of)s 220 fnt35 480 8913({ Aardv)m 5(ar)k -3(k, 29 } @Rump { Aardv)k 5(ar)k -3(k, 359 })k
+240 fnt82 0 8417(is)m 220 fnt35 210 8414(359)m 240 fnt82
+567 8417(.)m 480 8043(If)m 698(the)s 1034(tw)s 2(o)k
+1431(objects)s 2147(ha)s 4(v)k 3(e)k 2635(nothing)s
+3408(in)s 3638(common,)s 4571(the)s 4907(result)s 5484(of)s
+220 fnt35 5743 8040(@Common)m 240 fnt82 6889 8043(will)m 7303(be)s
+7572(an)s 7843(empty)s 8482(object)s 0 7755(and)m 400(the)s
+744(result)s 1330(of)s 220 fnt35 1597 7752(@Rump)m 240 fnt82
+2453 7755(will)m 2874(be)s 3152(the)s 3496(second)s 4215(object.)s
+4959(If)s 5185(the)s 5528(tw)s 2(o)k 5934(objects)s
+6658(are)s 7001(identical,)s 7926(the)s 8270(result)s 8855(of)s
+220 fnt35 0 7464(@Common)m 240 fnt82 1159 7467(will)m 1585(be)s
+1867(the)s 2215(\207rst)s 2646(object,)s 3337(and)s 3741(the)s
+4089(result)s 4679(of)s 220 fnt35 4950 7464(@Rump)m 240 fnt82
+5810 7467(will)m 6236(be)s 6518(an)s 6801(empty)s 7453(object.)s
+480 7093(The)m 933(only)s 1438(kno)s 6(wn)k 2167(use)s
+2567(for)s 220 fnt35 2930 7090(@Rump)m 240 fnt82 3815 7093(and)m
+220 fnt35 4244 7090(@Common)m 240 fnt82 5428 7093(is)m 5663(to)s
+5927(implement)s 7034(mer)s 4(ged)k 7830(inde)s 3(x)k
+8439(entries)s 0 6805(\(Section)m 853(2.8\).)s 480 6431(The)m 220 fnt35
+947 6428(@Meld)m 240 fnt82 1732 6431(symbol)m 2531(returns)s 3284(the)s
+3671(minimum)s 4700(meld)s 5275(of)s 5585(tw)s 2(o)k
+6034(paragraphs,)s 7229(that)s 7686(is)s 7935(the)s 8323(shortest)s
+0 6143(paragraph)m 1013(that)s 1431(contains)s 2279(the)s 2627(tw)s 2(o)k
+3037(original)s 3835(paragraphs)s 4935(as)s 5185(subsequences.)s 6652(F)s 3(or)k
+7041(e)s 3(xample,)k 220 fnt35 480 5642({ Aardv)m 5(ar)k -3(k , 1 , 2 } @Meld { Aardv)k 5(ar)k -3(k , 2 , 3 })k
+240 fnt82 0 5148(produces)m 480 4645(Aardv)m 6(ark)k 1438(,)s
+1545(1)s 1700(,)s 1807(2)s 1981(,)s 2088(3)s
+0 4161(The)m 455(result)s 1073(is)s 1310(related)s 2045(to)s
+2312(the)s 2687(well-kno)s 6(wn)k 3909(longest)s 4688(common)s
+5610(substring,)s 6622(in)s 6893(that)s 7338(the)s 7714(meld)s
+8278(contains)s 0 3873(e)m 6(v)k 3(erything)k 1076(not)s
+1451(in)s 1704(the)s 2061(lcs)s 2387(plus)s 2846(one)s
+3257(cop)s 2(y)k 3785(of)s 4065(e)s 6(v)k 3(erything)k
+5142(in)s 5394(the)s 5751(lcs.)s 6190(This)s 6675(function)s
+7539(is)s 7758(well-suited)s 8887(to)s 0 3585(melding)m 830(comple)s 3(x)k
+1698(inde)s 3(x)k 2274(entries.)s 3067(Note)s 3580(that)s
+3990(there)s 4515(must)s 5033(be)s 5307(a)s 5465(non-zero)s
+6360(amount)s 7131(of)s 7394(space)s 7973(before)s 8631(each)s
+0 3297(comma,)m 805(otherwise)s 1783(each)s 2271(will)s 2690(become)s
+3484(part)s 3908(of)s 4172(the)s 4513(preceding)s 5502(w)s 2(ord,)k
+6093(and,)s 6539(since)s 220 fnt35 7079 3294(@Meld)m 240 fnt82
+7818 3297(compares)m 8778(the)s 0 3009(tw)m 2(o)k 410(paragraphs)s
+1510(w)s 2(ord)k 2058(by)s 2352(w)s 2(ord,)k
+2949(the)s 3297(result)s 3887(will)s 4313(be)s 4595(dif)s 6(ferent)k
+5470(and)s 5874(less)s 6283(satisf)s 2(actory)k 15(.)k
+240 fnt84 0 2216(3.25.)m 591(@Insert)s 240 fnt82 541 1784(The)m
+220 fnt35 970 1781(@Inser)m -8(t)k 240 fnt82 1808 1784(symbol)m
+2569(inserts)s 3245(its)s 3522(left)s 3901(parameter)s 4916(at)s
+5149(the)s 5499(be)s 3(ginning)k 6508(of)s 6781(the)s
+7130(\207rst)s 7563(paragraph)s 8577(of)s 8850(its)s 0 1496(right)m
+511(parameter:)s 220 fnt35 480 995(X @Inser)m -8(t { A B // C // D })k 240 fnt82
+0 501(is)m 210(equi)s 6(v)k 6(alent)k 1254(to)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 55 61
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13845(3.25.)m 574(@Insert)s 240 fnt84 8833 13842(55)m
+220 fnt35 480 13254({ XA B // C // D })m 240 fnt82 0 12760(Notice)m 707(that)s
+1139(a)s 1320(zero-width)s 2426(space)s 3028(separates)s 220 fnt35
+3968 12757(X)m 240 fnt82 4185 12760(from)m 4723(the)s 5085(\207rst)s
+5531(paragraph,)s 6608(so)s 6889(if)s 7120(some)s 7696(wider)s
+8314(space)s 8916(is)s 0 12472(required)m 857(it)s 1052(must)s
+1580(be)s 1865(placed)s 2550(at)s 2785(the)s 3137(end)s
+3544(of)s 220 fnt35 3818 12469(X)m 240 fnt82 3960 12472(.)m
+4127(The)s 220 fnt35 4558 12469(@Inser)m -8(t)k 240 fnt82
+5397 12472(operation)m 6361(is)s 6574(applied)s 7339(to)s 7581(the)s
+7932(v)s 6(alue)k 8503(of)s 8778(the)s 0 12184(right)m
+511(parameter)s 1525(after)s 2021(e)s 6(v)k 6(aluation.)k
+480 11810(The)m 917(only)s 1407(kno)s 6(wn)k 2121(use)s
+2506(for)s 2853(this)s 3259(symbol)s 4029(is)s 4249(to)s
+4498(attach)s 5134(something)s 6194(lik)s 2(e)k 240 fnt84
+6616 11809(Figur)m 4(e)k 7355(6)s 240 fnt82 7538 11810(to)m
+7787(the)s 8145(front)s 8679(of)s 8960(a)s 0 11522(multi-paragraph)m
+1596(caption.)s 240 fnt84 0 10729(3.26.)m 591(@OneOf)s 240 fnt82
+534 10297(The)m 220 fnt35 956 10294(@OneOf)m 240 fnt82 1877 10297(symbol)m
+2631(returns)s 3339(one)s 3734(of)s 3999(the)s 4341(sequence)s
+5268(of)s 5533(objects)s 6254(which)s 6890(is)s 7094(its)s
+7364(right)s 7869(parameter)s 8876(as)s 0 10009(its)m 276(result:)s
+220 fnt35 480 9558(@OneOf {)m 480 9270( @ResultA)m 480 8982( @ResultB)m 480 8694( @ResultC)m
+480 8406(})m 240 fnt82 0 7912(The)m 451(choice)s 1155(is)s
+1388(made)s 1986(to)s 2248(ensure)s 2952(that)s 3393(whate)s 6(v)k 3(er)k
+4344(g)s 1(alle)k 3(y)k 5001(tar)s 4(get)k
+5624(is)s 5857(required)s 6735(at)s 6990(the)s 7362(moment)s
+8229(is)s 8463(found.)s 0 7624(F)m 3(or)k 389(e)s 3(xample,)k
+1304(if)s 1522(we)s 1858(are)s 2206(e)s 6(v)k 6(aluating)k
+220 fnt35 3244 7621(@OneOf)m 240 fnt82 4172 7624(as)m 4423(part)s
+4855(of)s 5127(an)s 5411(attempt)s 6188(to)s 6428(attach)s
+7056(a)s 7223(g)s 1(alle)k 3(y)k 7858(whose)s
+8527(tar)s 4(get)k 0 7336(is)m 220 fnt35 222 7333(@SomeT)m 26(arget)k
+240 fnt82 1622 7336(,)m 1741(then)s 2223(the)s 2583(result)s
+3186(abo)s 3(v)k 3(e)k 3820(will)s 4259(be)s
+220 fnt35 4553 7333(@ResultA)m 240 fnt82 5613 7336(if)m 5843(it)s
+6047(contains)s 220 fnt35 6908 7333(@SomeT)m 26(arget)k 240 fnt82
+8308 7336(,)m 8427(or)s 8699(else)s 220 fnt35 0 7045(@ResultB)m
+240 fnt82 1042 7048(if)m 1260(it)s 1453(contains)s 220 fnt35
+2302 7045(@SomeT)m 26(arget)k 240 fnt82 3702 7048(,)m 3810(or)s
+4070(else)s 220 fnt35 4498 7045(@ResultC)m 240 fnt82 5552 7048(\(whether)m
+6462(or)s 6722(not)s 7089(it)s 7282(contains)s 8131(the)s
+8480(tar)s 4(get,)k 0 6760(or)m 259(if)s 476(there)s
+1009(is)s 1219(no)s 1512(tar)s 4(get\).)k 480 6386(Use)m
+930(of)s 220 fnt35 1224 6383(@OneOf)m 240 fnt82 2174 6386(in)m
+2440(conjunction)s 3650(with)s 4155(recursi)s 6(v)k 3(e)k
+5100(symbols)s 5972(can)s 6384(lead)s 6863(to)s 7125(problems.)s
+8202(Consider)s 0 6098(this)m 396(e)s 3(xample:)k 220 fnt35
+480 5597(def @Recursiv)m 5(e {)k 480 5021( def @ChoiceA { @APlace // @Recursiv)m 5(e })k 480 4445( def @ChoiceB { @BPlace // @Recursiv)m 5(e })k
+480 3869( @OneOf {)m 480 3581( @ChoiceA)m 480 3293( @ChoiceB)m 480 3005( })m 480 2717(})m
+240 fnt82 0 2223(Lout)m 523(belie)s 6(v)k 3(es)k
+1360(that)s 1790(e)s 3(xpanding)k 220 fnt35 2849 2220(@Recursiv)m 5(e)k
+240 fnt82 4106 2223(is)m 4328(the)s 4687(right)s 5210(thing)s
+5767(to)s 6017(do)s 6322(when)s 6910(searching)s 7890(for)s
+8240(either)s 8855(of)s 0 1935(the)m 380(g)s 1(alle)k 3(y)k
+1046(tar)s 4(gets)k 220 fnt35 1762 1932(@APlace)m 240 fnt82
+2763 1935(and)m 220 fnt35 3199 1932(@BPlace)m 240 fnt82 4108 1935(.)m
+4305(When)s 4966(searching)s 5968(for)s 220 fnt35 6338 1932(@BPlace)m
+240 fnt82 7339 1935(this)m 7768(leads)s 8342(Lout)s 8887(to)s
+0 1647(e)m 3(xpand)k 220 fnt35 760 1644(@Recursiv)m 5(e)k
+240 fnt82 1945 1647(,)m 2065(then)s 220 fnt35 2547 1644(@ChoiceA)m
+240 fnt82 3596 1647(,)m 3717(then)s 4199(the)s 220 fnt35
+4560 1644(@Recursiv)m 5(e)k 240 fnt82 5818 1647(symbol)m 6592(within)s
+220 fnt35 7273 1644(@ChoiceA)m 240 fnt82 8322 1647(,)m 8442(and)s
+8860(so)s 0 1359(on)m 320(in\207nitely)s 15(.)k 1355(This)s
+1854(problem)s 2734(can)s 3146(be)s 3451(a)s 4(v)k 4(oided)k
+4283(by)s 4600(attaching)s 5552(a)s 220 fnt35 5741 1356(@NotRe)m 6(v)k 5(ealed)k
+240 fnt82 7291 1359(symbol)m 8074(to)s 8336(each)s 8855(of)s
+0 1071(the)m 357(inner)s 220 fnt35 918 1068(@Recursiv)m 5(e)k
+240 fnt82 2172 1071(symbols:)m 3146(these)s 3703(are)s 4059(then)s
+4538(not)s 4914(a)s 4(v)k 6(ailable)k 5831(for)s
+6179(e)s 3(xpansion)k 7214(until)s 7716(a)s 7892(decision)s
+8756(has)s 0 783(been)m 510(made)s 1085(to)s 1326(e)s 3(xpand)k
+2074(the)s 2424(symbol)s 3185(the)s 3(y)k 3650(lie)s
+3945(within.)s 4721(In)s 4979(this)s 5376(particular)s 6352(e)s 3(xample)k
+7216(it)s 7410(w)s 2(ould)k 8066(be)s 8350(simpler)s
+0 495(to)m 239(write)s 220 fnt35 480 43(def @Recursiv)m 5(e {)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 56 62
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(56)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 220 fnt35 480 13023( @OneOf {)m
+480 12735( @APlace)m 480 12447( @BPlace)m 480 12159( })m 480 11871( // @Recursiv)m 5(e)k
+480 11583(})m 240 fnt82 0 11089(b)m 4(ut)k 378(this)s
+791(f)s 2(actoring)k 1720(is)s 1947(not)s 2329(possible)s
+3186(when)s 3778(the)s 4143(recursi)s 6(v)k 3(e)k
+5081(calls)s 5586(ha)s 4(v)k 3(e)k 6103(parameters)s
+7218(that)s 7652(are)s 8016(required)s 8887(to)s 0 10801(dif)m 6(fer)k
+583(in)s 826(the)s 1174(tw)s 2(o)k 1584(cases.)s
+240 fnt84 0 10057(3.27.)m 591(@Next)s 240 fnt82 535 9625(The)m
+220 fnt35 957 9622(@Ne)m 6(xt)k 240 fnt82 1676 9625(symbol)m
+2430(returns)s 3138(its)s 3409(parameter)s 4417(plus)s 4861(one.)s
+5366(It)s 5565(is)s 5769(rather)s 6380(cle)s 6(v)k 3(er)k
+7008(at)s 7234(w)s 2(orking)k 8078(this)s 8468(out:)s
+8934(it)s 0 9337(hunts)m 570(through)s 1372(the)s 1720(parameter)s
+2734(from)s 3258(right)s 3769(to)s 4008(left,)s 4432(looking)s
+5217(for)s 5555(a)s 5721(number)s 6512(to)s 6751(increment:)s
+220 fnt35 480 8836(@Ne)m 6(xt \(3.99\))k 240 fnt82 0 8340(has)m
+404(result)s 1029(\(3.100\).)s 1925(If)s 220 fnt35 2190 8337(@Ne)m 6(xt)k
+240 fnt82 2949 8340(cannot)m 3681(\207nd)s 4147(a)s 4348(digit)s
+4880(inside)s 5542(its)s 5852(parameter)s 9(,)k 6939(it)s
+7166(is)s 7410(an)s 7728(error)s 13(.)k 8377(Roman)s
+0 8052(numerals)m 925(are)s 1270(handled)s 2084(by)s 2376(storing)s
+3091(them)s 3627(in)s 3868(a)s 4032(database,)s 4960(as)s
+5208(e)s 3(xplained)k 6191(in)s 6432(Section)s 7204(4.2;)s
+220 fnt35 7614 8049(@Ne)m 6(xt)k 240 fnt82 8336 8052(will)m
+8760(not)s 0 7764(increment)m 1015(a)s 1181(Roman)s 1930(numeral.)s
+240 fnt84 0 7021(3.28.)m 591(@Case)s 240 fnt82 540 6589(The)m
+220 fnt35 968 6586(@Case)m 240 fnt82 1755 6589(symbol)m 2515(selects)s
+3202(its)s 3478(result)s 4068(from)s 4592(a)s 4758(list)s
+5109(of)s 5380(alternati)s 6(v)k 3(es,)k 6578(depending)s
+7629(on)s 7926(a)s 8092(tag:)s 220 fnt35 480 6088(@Da)m 6(y @Case {)k
+480 5800( { 1 21 31 } @Y)m 4(ield st)k 480 5512( { 2 22 } @Y)m 4(ield nd)k 480 5224( { 3 23 } @Y)m 4(ield rd)k
+480 4936( else @Y)m 4(ield th)k 480 4648(})m 240 fnt82 0 4154(In)m
+257(this)s 654(e)s 3(xample)k 1518(the)s 1868(result)s
+2459(will)s 2886(be)s 3169(st)s 3390(if)s 220 fnt35
+3608 4151(@Da)m 6(y)k 240 fnt82 4274 4154(is)m 4485(1,)s
+4714(21,)s 5062(or)s 5322(31,)s 5670(and)s 6076(nd)s
+6375(if)s 220 fnt35 6593 4151(@Da)m 6(y)k 240 fnt82
+7259 4154(is)m 7471(2)s 7646(or)s 7906(22,)s 8254(etc.)s
+8698(The)s 0 3866(ef)m 6(fect)k 594(is)s 801(similar)s
+1520(to)s 1756(accessing)s 2722(a)s 2885(database,)s 3812(though)s
+4532(in)s 4773(a)s 4936(more)s 5480(compact)s 6347(form.)s
+6972(The)s 7397(right)s 7905(parameter)s 8916(is)s 0 3578(a)m
+171(sequence)s 1109(of)s 220 fnt35 1385 3575(@Y)m 4(ield)k
+240 fnt82 2143 3578(symbols,)m 3053(each)s 3553(with)s 4040(a)s
+4211(left)s 4594(parameter)s 5613(whose)s 6286(v)s 6(alue)k
+6859(is)s 7074(a)s 7245(sequence)s 8183(of)s 8459(one)s
+8867(or)s 0 3290(more)m 547(juxtapositions)s 1940(of)s 2211(simple)s
+2904(w)s 2(ords,)k 3594(and)s 3998(a)s 4164(right)s
+4675(parameter)s 5689(which)s 6331(may)s 6797(be)s 7079(an)s 3(y)k
+7476(object.)s 480 2916(W)m 19(e)k 895(\207rst)s 1372(describe)s
+2271(the)s 2665(beha)s 4(viour)k 3725(when)s 4347(the)s
+4742(v)s 6(alue)k 5356(of)s 5674(the)s 6068(left)s
+6492(parameter)s 7552(of)s 220 fnt35 7870 2913(@Case)m 240 fnt82
+8703 2916(is)m 8960(a)s 0 2628(juxtaposition)m 1302(of)s 1568(one)s
+1965(or)s 2220(more)s 2762(simple)s 3450(w)s 2(ords.)k
+4193(Then)s 4737(the)s 5080(result)s 5666(of)s 5932(the)s
+220 fnt35 6275 2625(@Case)m 240 fnt82 7058 2628(is)m 7263(the)s
+7606(right)s 8112(parameter)s 0 2340(of)m 287(the)s 652(\207rst)s
+220 fnt35 1100 2337(@Y)m 4(ield)k 240 fnt82 1870 2340(whose)m
+2554(left)s 2948(parameter)s 3979(contains)s 4844(either)s 5463(the)s
+5828(v)s 6(alue)k 6413(of)s 6701(the)s 7065(left)s
+7459(parameter)s 8490(of)s 8778(the)s 220 fnt35 0 2049(@Case)m
+240 fnt82 727 2052(,)m 834(or)s 1093(the)s 1441(special)s
+2159(v)s 6(alue)k 220 fnt35 2727 2049(else)m 240 fnt82
+3121 2052(.)m 3285(If)s 3515(there)s 4048(is)s 4258(no)s
+4551(such)s 220 fnt35 5047 2049(@Y)m 4(ield)k 240 fnt82
+5800 2052(it)m 5992(is)s 6202(an)s 6485(error)s 13(.)k
+480 1678(When)m 1133(the)s 1506(left)s 1908(parameter)s 2946(of)s
+220 fnt35 3242 1675(@Case)m 240 fnt82 4054 1678(is)m 4288(not)s
+4679(a)s 4870(juxtaposition)s 6200(of)s 6496(simple)s 7214(w)s 2(ords,)k
+7928(the)s 8301(result)s 8916(is)s 0 1390(the)m 350(right)s
+864(parameter)s 1881(of)s 2155(the)s 2506(\207rst)s 220 fnt35
+2940 1387(@Y)m 4(ield)k 240 fnt82 3696 1390(whose)m 4367(left)s
+4746(parameter)s 5763(is)s 220 fnt35 5976 1387(else)m 240 fnt82
+6370 1390(,)m 6480(or)s 6742(an)s 7028(error)s 7554(otherwise.)s
+8650(This)s 0 1102(permits)m 767(e)s 3(xamples)k 1718(lik)s 2(e)k
+220 fnt35 480 601(@RunningTitle @Case {)m 480 313( dft @Y)m 4(ield @Title)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 57 63
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13845(3.28.)m 574(@Case)s 240 fnt84 8831 13842(57)m
+220 fnt35 480 13254( else @Y)m 4(ield @RunningTitle)k 480 12966(})m 240 fnt82
+0 12472(where)m 661(a)s 848(running)s 1667(title)s 2115(is)s
+2346(returned)s 3221(unless)s 3892(it)s 4105(has)s 4496(the)s
+4866(v)s 6(alue)k 220 fnt35 5455 12469(dft)m 240 fnt82
+5776 12472(\(which)m 6519(presumably)s 7710(means)s 8393(that)s 8833(no)s
+0 12184(running)m 798(title)s 1224(w)s 2(as)k 1645(supplied\),)s
+2642(in)s 2885(which)s 3527(case)s 3994(an)s 4277(ordinary)s
+5141(title)s 5567(is)s 5777(returned)s 6631(instead.)s 480 11810(When)m
+1126(a)s 1310(recepti)s 6(v)k 3(e)k 2250(symbol)s
+3028(is)s 3256(placed)s 3955(within)s 4641(a)s 220 fnt35
+4825 11807(@Case)m 240 fnt82 5552 11810(,)m 5677(it)s 5887(should)s
+6601(be)s 6901(included)s 7801(in)s 8062(each)s 8575(alter)s
+8998(-)s 0 11522(nati)m 6(v)k 3(e,)k 695(since)s
+1255(otherwise)s 2254(Basser)s 2964(Lout)s 3490(may)s 3969(become)s
+4783(confused)s 5718(when)s 6308(trying)s 6945(to)s 7198(predict)s
+7934(whether)s 8778(the)s 0 11234(symbol)m 755(will)s 1176(be)s
+1453(a)s 1613(part)s 2039(of)s 2305(the)s 2648(result)s
+3232(or)s 3486(not.)s 3951(Alternati)s 6(v)k 3(ely)k 15(,)k
+5288(if)s 5500(it)s 5687(can)s 6071(be)s 6347(guaranteed)s
+7449(that)s 7862(the)s 8204(recepti)s 6(v)k 3(e)k
+0 10946(symbol)m 764(will)s 1195(ne)s 6(v)k 3(er)k
+1782(be)s 2069(searched)s 2967(for)s 3310(when)s 3891(the)s
+4244(cases)s 4804(that)s 5226(it)s 5423(does)s 5918(not)s
+6289(lie)s 6587(within)s 7260(are)s 7612(selected,)s 8493(that)s
+8916(is)s 0 10658(all)m 293(right)s 804(too.)s 240 fnt84
+0 9865(3.29.)m 591(@Moment)s 240 fnt82 480 9433(The)m 908(prede\207ned)s
+1976(symbol)s 220 fnt35 2736 9430(@Moment)m 240 fnt82 3808 9433(has)m
+4178(the)s 4526(follo)s 6(wing)k 5503(de\207nition:)s 220 fnt35
+480 8932(def @Moment)m 480 8644( named @T)m 26(ag {})k 480 8356( named @Second {})m 480 8068( named @Min)m 2(ute {})k
+480 7780( named @Hour {})m 480 7492( named @Da)m 6(y {})k 480 7204( named @Month {})m 480 6916( named @Y)m 30(ear {})k
+480 6628( named @Centur)m -6(y {})k 480 6340( named @W)m 6(eekDa)k 6(y {})k
+480 6052( named @Y)m 30(earDa)k 6(y {})k 480 5764( named @Da)m 6(ylightSa)k 4(ving {})k
+480 5476({})m 240 fnt82 0 4982(It)m 208(may)s 677(be)s
+962(used)s 1463(lik)s 2(e)k 1878(an)s 3(y)k
+2278(other)s 2832(symbol.)s 3705(Lout)s 4220(pro)s 3(vides)k
+5095(an)s 5381(in)s 9(v)k 4(ocation)k 6439(of)s
+220 fnt35 6713 4979(@Moment)m 240 fnt82 7788 4982(with)m 8273(tag)s
+220 fnt35 8622 4979(no)m 3(w)k 240 fnt82 9019 4982(,)m
+0 4694(whose)m 668(other)s 1219(parameters)s 2317(are)s 2664(numbers)s
+3539(encoding)s 4470(the)s 4818(current)s 5554(date)s 6008(and)s
+6412(time:)s 220 fnt35 480 4129(@Second)m 240 fnt82 2482 4132(the)m
+2830(current)s 3566(second,)s 4338(usually)s 5083(between)s 5937(00)s
+6232(and)s 6636(59)s 220 fnt35 480 3798(@Min)m 2(ute)k
+240 fnt82 2482 3801(the)m 2830(current)s 3566(minute,)s 4337(between)s
+5191(00)s 5486(and)s 5890(59)s 220 fnt35 480 3488(@Hour)m
+240 fnt82 2482 3491(the)m 2830(current)s 3566(hour)s 9(,)k
+4103(between)s 4957(00)s 5252(and)s 5656(23)s 220 fnt35
+480 3178(@Da)m 6(y)k 240 fnt82 2482 3181(the)m 2830(current)s
+3566(day)s 3966(of)s 4237(the)s 4585(month,)s 5304(between)s
+6158(1)s 6313(and)s 6717(31)s 220 fnt35 480 2849(@Month)m
+240 fnt82 2482 2852(the)m 2830(current)s 3566(month,)s 4285(between)s
+5139(1)s 5294(\(January\))s 6245(and)s 6649(12)s 6943(\(December\))s
+220 fnt35 480 2520(@Y)m 30(ear)k 240 fnt82 2482 2523(the)m
+2830(current)s 3566(year)s 4037(of)s 4308(the)s 4656(century)s 15(,)k
+5465(between)s 6319(00)s 6614(and)s 7018(99)s 220 fnt35
+480 2191(@Centur)m -6(y)k 240 fnt82 2482 2194(the)m 2830(current)s
+3566(century)s 15(,)k 4375(e.g.)s 4765(19)s 5056(or)s
+5315(20)s 220 fnt35 480 1862(@W)m 6(eekDa)k 6(y)k
+240 fnt82 2482 1865(the)m 2830(current)s 3566(day)s 3966(of)s
+4237(the)s 4585(week,)s 5197(between)s 6051(1)s 6206(\(Sunday\))s
+7132(and)s 7536(7)s 7704(\(Saturday\))s 220 fnt35 480 1531(@Y)m 30(earDa)k 6(y)k
+240 fnt82 2482 1534(the)m 2830(current)s 3566(day)s 3966(of)s
+4237(the)s 4585(year)s 9(,)k 5094(between)s 5948(0)s
+6123(and)s 6527(365)s 220 fnt35 480 1202(@Da)m 6(ylightSa)k 4(ving)k
+240 fnt82 2482 1205(an)m 2784(implementation-dependent)s 5427(number)s 6237(that)s
+6675(may)s 7160(encode)s 7914(the)s 8282(daylight)s 2482 917(sa)m 4(ving)k
+3156(currently)s 4072(in)s 4315(ef)s 6(fect)k 0 356(Unix)m
+519(manual)s 1262(entries)s 1934(state)s 2411(that)s 220 fnt35
+2814 353(@Second)m 240 fnt82 3813 356(can)m 4186(be)s 4453(as)s
+4687(high)s 5155(as)s 5389(61,)s 5720(to)s 5944(allo)s 6(w)k
+6507(for)s 6830(leap)s 7265(seconds.)s 8171(Judicious)s 0 68(use)m
+375(of)s 646(databases)s 1613(can)s 2002(con)s 9(v)k 3(ert)k
+2767(these)s 3314(numbers)s 4189(into)s 4614(useful)s 5253(dates.)s
+5908(F)s 3(or)k 6297(e)s 3(xample,)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 58 64
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(58)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 220 fnt35 480 13207(@Moment&&no)m 3(w @Open { @Da)k 6(y {@Months&&@Month}, @Centur)k -6(y{@Y)k 30(ear} })k
+240 fnt82 0 12709(produces)m 915(something)s 1965(lik)s 2(e)k
+2377(8)s 2544(April,)s 3155(2000)s 3690(gi)s 6(v)k 3(en)k
+4270(a)s 4436(suitable)s 5235(database)s 6114(of)s 6385(months.)s
+240 fnt84 0 11916(3.30.)m 591(@Null)s 240 fnt82 480 11484(This)m
+979(symbol)s 1762(pro)s 3(vides)k 2657(a)s 2846(con)s 9(v)k 3(enient)k
+3967(w)s 2(ay)k 4441(to)s 4703(remo)s 3(v)k 3(e)k
+5493(unw)s 2(anted)k 6503(concatenation)s 7911(symbols.)s 8896(If)s
+0 11196(there)m 544(is)s 765(a)s 942(concatenation)s 2339(symbol)s
+3110(preceding)s 220 fnt35 4117 11193(@Null)m 240 fnt82 4702 11196(,)m
+4821(the)s 220 fnt35 5180 11193(@Null)m 240 fnt82 5836 11196(and)m
+6252(the)s 6611(concatenation)s 8007(symbol)s 8779(are)s 0 10908(both)m
+482(deleted.)s 1335(Otherwise,)s 2423(if)s 2638(there)s 3170(is)s
+3379(a)s 3544(follo)s 6(wing)k 4519(concatenation)s 5903(symbol,)s
+6714(it)s 6905(and)s 7307(the)s 220 fnt35 7654 10905(@Null)m
+240 fnt82 8298 10908(are)m 8643(both)s 0 10620(deleted.)m 794(Otherwise,)s
+220 fnt35 1883 10617(@Null)m 240 fnt82 2528 10620(becomes)m 3416(an)s
+3699(empty)s 4351(object.)s 480 10246(These)m 1107(rules)s 1622(apply)s
+2208(to)s 2447(a)s 2613(fully)s 3118(parenthesized)s 4490(v)s 3(ersion)k
+5248(of)s 5519(the)s 5867(e)s 3(xpression.)k 7051(F)s 3(or)k
+7440(e)s 3(xample,)k 8354(in)s 220 fnt35 480 9745(...)m 13( //1vx @Null |0.5i ...)k
+240 fnt82 0 9290(it)m 202(is)s 423(the)s 782(horizontal)s
+1817(concatenation)s 3213(symbol)s 3984(follo)s 6(wing)k 220 fnt35
+4972 9287(@Null)m 240 fnt82 5628 9290(that)m 6057(disappears,)s 7184(because)s
+8008(in)s 8262(the)s 8621(fully)s 0 9002(parenthesized)m 1372(v)s 3(ersion)k
+220 fnt35 480 8501(...)m 13( //1vx { @Null |0.5i ...)k 13( })k 240 fnt82
+0 8007(there)m 533(is)s 743(no)s 1036(concatenation)s 2421(symbol)s
+3181(preceding)s 4177(the)s 220 fnt35 4525 8004(@Null)m 240 fnt82
+5110 8007(.)m 240 fnt84 0 7214(3.31.)m 591(@Galley)s 1534(and)s
+1975(@F)s 6(or)k 4(ceGalley)k 240 fnt82 480 6737(These)m
+1131(symbols)s 2004(both)s 2511(act)s 2874(as)s 3148(a)s
+3338(placeholder)s 4538(for)s 4900(a)s 5090(g)s 1(alle)k 3(y)k 15(.)k
+5844(That)s 6366(is,)s 6656(the)s 3(y)k 7144(may)s
+7634(be)s 7940(replaced)s 8832(by)s 0 6449(components)m 1210(of)s
+1483(a)s 1651(g)s 1(alle)k 3(y)k 15(.)k
+2383(In)s 2641(the)s 2991(case)s 3460(of)s 220 fnt35
+3734 6446(@F)m 6(orceGalle)k 4(y)k 240 fnt82 5189 6449(the)m
+5539(g)s 1(alle)k 3(y)k 6175(will)s 6604(then)s
+7075(ha)s 4(v)k 3(e)k 7578(a)s 7746(forcing)s
+8492(g)s 1(alle)k 3(y)k 0 6161(ef)m 6(fect)k
+583(at)s 802(this)s 1184(point)s 1723(although)s 2604(it)s
+2783(need)s 3280(not)s 3632(be)s 3901(declared)s 4754(using)s
+220 fnt35 5313 6158(f)m 6(orce into)k 240 fnt82 6202 6161(.)m
+6353(See)s 6740(Section)s 7501(2.7)s 7835(for)s 8160(a)s
+8312(detailed)s 0 5873(discussion)m 1054(of)s 1325(g)s 1(alle)k 3(ys,)k
+2105(forcing)s 2848(g)s 1(alle)k 3(ys,)k 3628(and)s
+4032(tar)s 4(gets.)k 240 fnt84 0 5080(3.32.)m 591(@BeginHeaderComponent,)s
+3466(@EndHeaderComponent,)s 6182(@SetHeaderComponent,)s 591 4792(and)m 1032(@ClearHeaderComponent)s 240 fnt82
+480 4315(Informally)m 15(,)k 1597(header)s 2298(components)s 3510(are)s
+3861(running)s 4663(headers)s 5448(that)s 5871(appear)s 6572(at)s
+6808(the)s 7160(top)s 7523(of)s 7798(the)s 8151(displayed)s
+0 4027(se)m 3(gments)k 936(of)s 1204(g)s 1(alle)k 3(ys.)k
+2039(The)s 3(y)k 2579(are)s 2923(used,)s 3467(for)s
+3802(e)s 3(xample,)k 4714(by)s 5005(the)s 220 fnt35
+5350 4024(@Tb)m 4(l)k 240 fnt82 5917 4027(table)m 6434(formatting)s
+7493(package)s 8330(to)s 8566(place)s 0 3739(running)m 798(headers)s
+1579(at)s 1811(the)s 2159(top)s 2518(of)s 2789(each)s
+3284(page)s 3792(of)s 4063(a)s 4229(multi-page)s 5320(table,)s
+5891(after)s 6387(the)s 6735(\207rst)s 7166(page.)s 480 3365(F)m 3(ormally)k 15(,)k
+1431(a)s 1583(header)s 2266(component)s 3376(of)s 3633(a)s
+3785(g)s 1(alle)k 3(y)k 4405(is)s 4601(an)s
+4870(ordinary)s 5720(component)s 6830(of)s 7087(a)s 7239(g)s 1(alle)k 3(y)k
+7859(\(Section)s 8698(2.7\))s 0 3077(together)m 845(with)s 1330(an)s
+1616(indication)s 2631(that)s 3052(the)s 3403(component)s 4530(is)s
+4742(a)s 4911(header)s 5611(component.)s 6841(When)s 7473(printed,)s
+8260(a)s 8429(header)s 0 2789(component)m 1125(looks)s 1696(e)s 3(xactly)k
+2438(lik)s 2(e)k 2851(it)s 3045(w)s 2(ould)k
+3701(ha)s 4(v)k 3(e)k 4203(done)s 4726(as)s
+4977(an)s 5262(ordinary)s 6127(component;)s 7304(the)s 7653(dif)s 6(ference)k
+8671(is)s 8883(in)s 0 2501(whether)m 830(the)s 1178(component)s
+2302(is)s 2512(printed)s 3247(at)s 3479(all,)s 3824(and)s
+4228(if)s 4445(so)s 4711(where.)s 480 2127(Ev)m 3(ery)k
+1129(ordinary)s 2020(component)s 3171(of)s 3469(e)s 6(v)k 3(ery)k
+4072(g)s 1(alle)k 3(y)k 4733(has)s 5130(associated)s
+6197(with)s 6706(it)s 6925(a)s 7118(sequence)s 8078(of)s
+8376(zero)s 8867(or)s 0 1839(more)m 543(header)s 1236(components.)s
+2553(Whene)s 6(v)k 3(er)k 3583(a)s 3745(ne)s 6(w)k
+4188(tar)s 4(get)k 4783(is)s 4989(attached)s 5839(to)s
+6074(which)s 6712(does)s 7198(not)s 7560(itself)s 8104(occup)s 2(y)k
+8843(an)s 0 1551(entire)m 588(component)s 1700(of)s 1959(its)s
+2223(g)s 1(alle)k 3(y)k 15(,)k 2883(copies)s
+3533(of)s 3792(the)s 4128(header)s 4813(components)s 6009(associated)s
+7037(with)s 7507(the)s 7843(\207rst)s 8262(ordinary)s 0 1263(component)m
+1124(to)s 1363(be)s 1645(promoted)s 2620(into)s 3045(that)s
+3463(tar)s 4(get)k 4062(are)s 4409(promoted)s 5384(into)s
+5809(it)s 6001(\207rst.)s 480 889(The)m 936(condition)s 1926(`which)s
+2676(does)s 3195(not)s 3590(itself)s 4167(occup)s 2(y)k
+4939(an)s 5251(entire)s 5879(component)s 7032(of)s 7332(its)s
+7637(g)s 1(alle)k 3(y')k 8358(ensures)s 0 601(that,)m
+460(for)s 793(e)s 3(xample,)k 1702(when)s 2273(part)s
+2699(of)s 2964(a)s 3125(section)s 3854(has)s 4219(header)s
+4911(components,)s 6169(these)s 6711(are)s 7053(not)s 7414(printed)s
+8144(where)s 8778(the)s 0 313(section)m 735(is)s 947(promoted)s
+1923(into)s 2350(its)s 2627(chapter)s 9(,)k 3430(b)s 4(ut)k
+3793(rather)s 4411(where)s 5053(the)s 5402(chapter)s 6167(is)s
+6378(promoted)s 7355(onto)s 7835(pages.)s 8546(If)s 8778(the)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 59 65
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Symbol
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.32.)m 574(@Be)s 9(ginHeaderComponent,)k 3360(@EndHeaderComponent,)s
+5984(@SetHeaderComponent,)s 574 13555(and)m 1000(@ClearHeaderComponent)s 240 fnt84 8832 13840(59)m
+240 fnt82 0 12917(tar)m 4(get)k 611(occupies)s 1511(the)s
+1871(whole)s 2525(component,)s 3708(then)s 4189(the)s 4549(incoming)s
+5519(g)s 1(alle)k 3(y)k 6165(will)s 6603(not)s
+6981(split)s 7465(at)s 7709(all,)s 8066(so)s 8345(headers)s
+0 12629(w)m 2(ould)k 655(be)s 937(of)s 1208(no)s
+1501(interest)s 2263(there.)s 480 12255(The)m 896(one)s 1286(remaining)s
+2295(question)s 3151(is)s 3348(`Ho)s 6(w)k 3929(is)s
+4126(the)s 4462(sequence)s 5383(of)s 5641(header)s 6326(components)s
+7521(of)s 7780(each)s 8262(ordinary)s 0 11967(component)m 1124(determined?')s
+2477(By)s 2812(def)s 2(ault,)k 3580(the)s 3928(header)s
+4626(components)s 5834(of)s 6106(one)s 6508(component)s 7632(are)s
+7980(the)s 8328(same)s 8876(as)s 0 11679(those)m 561(of)s
+832(the)s 1180(pre)s 6(vious)k 2049(component.)s 3277(W)s 19(e)k
+3646(can)s 4035(sho)s 6(w)k 4589(this)s 4985(graphically)s
+6114(as)s 6364(follo)s 6(ws:)k 240 fnt83 480 11180(C)m
+168 fnt83 645 11093(i)m 240 fnt78 773 11172(:)m 240 fnt83
+903 11180(H)m 168 fnt78 1086 11087(1)m 240 fnt78 1164 11172(,)m
+240 fnt83 1271 11180(H)m 168 fnt78 1454 11087(2)m 240 fnt78
+1546 11172(,)m 1653(\274)s 1951(,)s 240 fnt83 2058 11180(H)m
+168 fnt83 2241 11093(n)m 240 fnt83 480 10892(/)m 480 10604(C)m
+168 fnt83 645 10517(i)m 168 fnt78 711 10511(+)m 824(1)s
+240 fnt78 974 10596(:)m 240 fnt83 1104 10604(H)m 168 fnt78
+1287 10511(1)m 240 fnt78 1365 10596(,)m 240 fnt83 1472 10604(H)m
+168 fnt78 1655 10511(2)m 240 fnt78 1747 10596(,)m 1854(\274)s
+2152(,)s 240 fnt83 2259 10604(H)m 168 fnt83 2442 10517(n)m
+240 fnt82 0 10060(which)m 642(may)s 1108(be)s 1391(read:)s
+1908(`If)s 2217(ordinary)s 3082(component)s 240 fnt83 4206 10062(C)m
+168 fnt83 4371 9975(i)m 240 fnt82 4475 10060(has)m 4846(header)s
+5543(component)s 6667(sequence)s 240 fnt83 7601 10062(H)m 168 fnt78
+7784 9969(1)m 240 fnt78 7862 10054(,)m 240 fnt83 7969 10062(H)m
+168 fnt78 8152 9969(2)m 240 fnt78 8244 10054(,)m 8351(\274)s
+8649(,)s 240 fnt83 8756 10062(H)m 168 fnt83 8939 9975(n)m
+240 fnt82 9019 10060(,)m 0 9772(then)m 468(its)s 742(successor)s
+1717(component)s 240 fnt83 2839 9774(C)m 168 fnt83 3004 9687(i)m
+168 fnt78 3070 9681(+)m 3183(1)s 240 fnt82 3308 9772(has)m
+3676(header)s 4372(component)s 5494(sequence)s 240 fnt83 6426 9774(H)m
+168 fnt78 6609 9681(1)m 240 fnt78 6687 9766(,)m 240 fnt83
+6794 9774(H)m 168 fnt78 6977 9681(2)m 240 fnt78 7069 9766(,)m
+7176(\274)s 7474(,)s 240 fnt83 7581 9774(H)m 168 fnt83
+7764 9687(n)m 240 fnt82 7902 9772(also.)m 16(')k 8501(Using)s
+0 9484(this)m 396(notation,)s 1287(we)s 1622(may)s 2088(no)s 6(w)k
+2549(de\207ne)s 3190(the)s 3538(four)s 3996(symbols)s 4845(that)s
+5263(af)s 6(fect)k 5859(header)s 6556(component)s 7680(sequences:)s
+240 fnt83 480 8985(C)m 168 fnt83 645 8898(i)m 240 fnt78
+773 8977(:)m 240 fnt83 903 8985(H)m 168 fnt78 1086 8892(1)m
+240 fnt78 1164 8977(,)m 240 fnt83 1271 8985(H)m 168 fnt78
+1454 8892(2)m 240 fnt78 1546 8977(,)m 1653(\274)s 1951(,)s
+240 fnt83 2058 8985(H)m 168 fnt83 2241 8898(n)m 240 fnt83
+480 8697(/)m 480 8409(gap)m 220 fnt35 905 8404(@BeginHeaderComponent)m 240 fnt83
+3609 8409(H)m 168 fnt83 3792 8322(n)m 168 fnt78 3894 8316(+)m
+4007(1)s 240 fnt83 480 8121(/)m 480 7833(C)m 168 fnt83
+645 7746(i)m 168 fnt78 711 7740(+)m 824(1)s 240 fnt78
+974 7825(:)m 240 fnt83 1104 7833(H)m 168 fnt78 1287 7740(1)m
+240 fnt78 1365 7825(,)m 240 fnt83 1472 7833(H)m 168 fnt78
+1655 7740(2)m 240 fnt78 1747 7825(,)m 1854(\274)s 2152(,)s
+240 fnt83 2259 7833(H)m 168 fnt83 2442 7746(n)m 240 fnt78
+2534 7825(,)m 240 fnt83 2641 7833(H)m 168 fnt83 2824 7746(n)m
+168 fnt78 2926 7740(+)m 3039(1)s 240 fnt82 0 7289(That)m
+478(is,)s 220 fnt35 723 7286(@BeginHeaderComponent)m 240 fnt82 3394 7289(occup)m 2(ying)k
+4422(an)s 4684(entire)s 5263(component)s 6366(appends)s 7181(a)s
+7326(header)s 8002(component)s 0 7001(to)m 255(the)s 619(sequence)s
+1568(of)s 1856(the)s 2220(follo)s 6(wing)k 3213(ordinary)s
+4093(components.)s 5431(When)s 6076(printed,)s 6876(this)s 7288(header)s
+8002(component)s 0 6713(is)m 217(separated)s 1184(by)s 240 fnt83
+1485 6715(gap)m 240 fnt82 1905 6713(from)m 2436(the)s 2792(follo)s 6(wing)k
+3776(component;)s 4959(if)s 240 fnt83 5183 6715(gap)m 240 fnt82
+5603 6713(is)m 5820(empty)s 6480(it)s 6679(denotes)s 220 fnt35
+7468 6710(0ie)m 240 fnt82 7819 6713(as)m 8076(usual)s 8644(with)s
+0 6425(concatenation)m 1391(g)s 1(aps.)k 2000(The)s 2434(appearance)s
+3572(of)s 3850(the)s 4204(header)s 4908(component)s 6039(will)s
+6471(be)s 6760(e)s 3(xactly)k 7508(as)s 7764(it)s
+7963(w)s 2(ould)k 8625(ha)s 4(v)k 3(e)k
+0 6137(been)m 509(had)s 913(it)s 1105(occurred)s 1999(alone)s
+2573(at)s 2805(that)s 3223(point,)s 3822(rather)s 4438(than)s
+4907(after)s 220 fnt35 5403 6134(@BeginHeaderComponent)m 240 fnt82 8035 6137(.)m
+480 5763(Ne)m 3(xt)k 1002(comes)s 220 fnt35 1664 5760(@EndHeaderComponent)m
+240 fnt82 4126 5763(:)m 240 fnt83 480 5268(C)m 168 fnt83
+645 5181(i)m 240 fnt78 773 5260(:)m 240 fnt83 903 5268(H)m
+168 fnt78 1086 5175(1)m 240 fnt78 1164 5260(,)m 240 fnt83
+1271 5268(H)m 168 fnt78 1454 5175(2)m 240 fnt78 1546 5260(,)m
+1653(\274)s 1951(,)s 240 fnt83 2058 5268(H)m 168 fnt83
+2241 5181(n)m 240 fnt78 2333 5260(,)m 240 fnt83 2440 5268(H)m
+168 fnt83 2623 5181(n)m 168 fnt78 2725 5175(+)m 2838(1)s
+240 fnt83 480 4980(/)m 220 fnt35 480 4687(@EndHeaderComponent)m 240 fnt83
+480 4404(/)m 480 4116(C)m 168 fnt83 645 4029(i)m 168 fnt78
+711 4023(+)m 824(1)s 240 fnt78 974 4108(:)m 240 fnt83
+1104 4116(H)m 168 fnt78 1287 4023(1)m 240 fnt78 1365 4108(,)m
+240 fnt83 1472 4116(H)m 168 fnt78 1655 4023(2)m 240 fnt78
+1747 4108(,)m 1854(\274)s 2152(,)s 240 fnt83 2259 4116(H)m
+168 fnt83 2442 4029(n)m 240 fnt82 0 3572(That)m 520(is,)s
+220 fnt35 809 3569(@EndHeaderComponent)m 240 fnt82 3353 3572(\(which)m 4097(has)s
+4490(no)s 4805(parameters\))s 6003(occup)s 2(ying)k 7074(an)s
+7380(entire)s 8002(component)s 0 3284(deletes)m 722(the)s 1078(last)s
+1477(header)s 2182(component.)s 3418(If)s 3656(the)s 4012(sequence)s
+4953(is)s 5171(empty)s 15(,)k 5869(a)s 6043(w)s 2(arning)k
+6886(message)s 7760(is)s 7978(printed)s 8722(and)s 0 2996(it)m
+193(remains)s 1002(empty)s 15(.)k 220 fnt35 1751 2993(@BeginHeaderComponent)m
+240 fnt82 4445 2996(and)m 220 fnt35 4851 2993(@EndHeaderComponent)m 240 fnt82
+7375 2996(are)m 7724(naturally)s 8629(used)s 0 2708(in)m 243(matching)s
+1186(\(possibly)s 2117(nested\))s 2856(pairs,)s 3427(to)s 3666(introduce)s
+4625(and)s 5029(subsequently)s 6333(retract)s 7001(a)s 7167(header)s
+7864(component.)s 480 2334(Ne)m 3(xt)k 1002(comes)s 220 fnt35
+1664 2331(@SetHeaderComponent)m 240 fnt82 4065 2334(:)m 240 fnt83 480 1839(C)m
+168 fnt83 645 1752(i)m 240 fnt78 773 1831(:)m 240 fnt83
+903 1839(H)m 168 fnt78 1086 1746(1)m 240 fnt78 1164 1831(,)m
+240 fnt83 1271 1839(H)m 168 fnt78 1454 1746(2)m 240 fnt78
+1546 1831(,)m 1653(\274)s 1951(,)s 240 fnt83 2058 1839(H)m
+168 fnt83 2241 1752(n)m 240 fnt83 480 1551(/)m 480 1263(gap)m
+220 fnt35 905 1258(@SetHeaderComponent)m 240 fnt83 3378 1263(H)m 168 fnt83
+3561 1176(n)m 168 fnt78 3663 1170(+)m 3776(1)s 240 fnt83
+480 975(/)m 480 687(C)m 168 fnt83 645 600(i)m 168 fnt78
+711 594(+)m 824(1)s 240 fnt78 974 679(:)m 240 fnt83
+1104 687(H)m 168 fnt83 1287 600(n)m 168 fnt78 1389 594(+)m
+1502(1)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 60 66
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(60)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 220 fnt35 0 13202(@SetHeaderComponent)m
+240 fnt82 2461 13205(clears)m 3068(an)s 3(y)k 3465(current)s
+4201(header)s 4898(components)s 6107(and)s 6511(replaces)s 7344(them)s
+7882(by)s 8176(one)s 8578(of)s 8850(its)s 0 12917(o)m 6(wn.)k
+571(Finally)s 1302(we)s 1637(ha)s 4(v)k 3(e)k
+220 fnt35 2138 12914(@ClearHeaderComponent)m 240 fnt82 4733 12917(:)m 240 fnt83
+480 12418(C)m 168 fnt83 645 12331(i)m 240 fnt78 773 12410(:)m
+240 fnt83 903 12418(H)m 168 fnt78 1086 12325(1)m 240 fnt78
+1164 12410(,)m 240 fnt83 1271 12418(H)m 168 fnt78 1454 12325(2)m
+240 fnt78 1546 12410(,)m 1653(\274)s 1951(,)s 240 fnt83
+2058 12418(H)m 168 fnt83 2241 12331(n)m 240 fnt83 480 12130(/)m
+220 fnt35 480 11837(@ClearHeaderComponent)m 240 fnt83 480 11554(/)m 480 11266(C)m
+168 fnt83 645 11179(i)m 168 fnt78 711 11173(+)m 824(1)s
+240 fnt78 974 11258(:)m 240 fnt82 0 10722(This)m 466(symbol)s
+1216(clears)s 1813(an)s 3(y)k 2200(header)s 2886(components,)s
+4140(lea)s 4(ving)k 4883(the)s 5221(sequence)s 6143(empty)s 15(.)k
+6880(These)s 7497(last)s 7878(tw)s 2(o)k 8277(symbols)s
+0 10434(combine)m 879(less)s 1287(cleanly)s 2030(than)s 2497(the)s
+2844(\207rst)s 3274(tw)s 2(o)k 3683(\(either)s 4363(will)s
+4788(wreck)s 5432(an)s 3(y)k 5828(enclosing)s 220 fnt35
+6796 10431(@BeginHeaderCompo)m 240 fnt82 8998 10434(-)m 220 fnt35 0 10143(nent)m
+240 fnt82 491 10146(\211)m 220 fnt35 679 10143(@EndHeaderComponent)m 240 fnt82
+3209 10146(pair\),)m 3774(b)s 4(ut)k 4145(the)s 3(y)k
+4616(are)s 4971(useful)s 5618(in)s 5869(situations)s 6845(where)s
+7493(the)s 7849(range)s 8444(of)s 8724(one)s 0 9858(header)m
+697(is)s 907(terminated)s 1986(by)s 2280(the)s 2628(start)s
+3098(of)s 3369(the)s 3717(range)s 4304(of)s 4575(the)s
+4923(ne)s 3(xt.)k 480 9484(All)m 859(four)s 1337(symbols)s
+2206(yield)s 2761(the)s 3129(v)s 6(alue)k 220 fnt35
+3717 9481(@Null)m 240 fnt82 4382 9484(where)m 5041(the)s 3(y)k
+5524(appear)s 13(.)k 6332(If)s 6582(the)s 3(y)k
+7064(do)s 7377(not)s 7763(occup)s 2(y)k 8527(entire)s
+0 9196(components)m 1208(of)s 1479(their)s 1976(g)s 1(alle)k 3(y)k 15(,)k
+2648(the)s 3(y)k 3111(are)s 3458(silently)s 4215(ignored.)s
+240 fnt84 0 8403(3.33.)m 591(@NotRe)s 3(v)k 2(ealed)k
+240 fnt82 480 7971(The)m 220 fnt35 938 7968(@NotRe)m 6(v)k 5(ealed)k
+240 fnt82 2495 7971(symbol)m 3285(e)s 3(x)k 3(erts)k
+3931(\207ne)s 4376(control)s 5138(o)s 3(v)k 3(er)k
+5647(the)s 6026(process)s 6824(of)s 7125(e)s 3(xpanding)k
+8204(recepti)s 6(v)k 3(e)k 0 7683(symbols.)m 955(It)s
+1152(may)s 1611(appear)s 2300(only)s 2773(within)s 3433(the)s
+3774(body)s 4300(of)s 4564(a)s 4722(de\207nition,)s 5739(immediately)s
+6979(follo)s 6(wing)k 7949(the)s 8289(name)s 8855(of)s
+0 7395(a)m 166(recepti)s 6(v)k 3(e)k 1088(symbol.)s
+1957(F)s 3(or)k 2346(e)s 3(xample:)k 220 fnt35
+480 6894(def A { @Galle)m 4(y })k 480 6318(def B { @Galle)m 4(y })k 480 5742(def ABList)m
+480 5454({)m 480 5166( A)m 480 4878( // B @NotRe)m 6(v)k 5(ealed)k
+480 4590( // ABList)m 480 4302(})m 240 fnt82 0 3808(The)m 424(meaning)s
+1297(is)s 1503(that)s 1916(the)s 2260(symbol)s 3016(immediately)s
+4259(preceding)s 220 fnt35 5251 3805(@NotRe)m 6(v)k 5(ealed)k
+240 fnt82 6718 3808(,)m 220 fnt35 6821 3805(B)m 240 fnt82
+7015 3808(in)m 7253(this)s 7645(e)s 3(xample,)k 8555(is)s
+8760(not)s 0 3520(re)m 6(v)k 3(ealed)k 851(to)s
+1083(g)s 1(alle)k 3(ys)k 1800(which)s 2435(encounter)s
+220 fnt35 3431 3517(ABList)m 240 fnt82 4113 3520(while)m 4693(searching)s
+5655(for)s 5986(tar)s 4(gets;)k 6723(to)s 6955(such)s
+7444(g)s 1(alle)k 3(ys)k 8161(it)s 8345(appears)s
+0 3232(that)m 220 fnt35 408 3229(ABList)m 240 fnt82 1086 3232(contains)m
+220 fnt35 1923 3229(A)m 240 fnt82 2116 3232(only)m 15(,)k
+2624(not)s 220 fnt35 2979 3229(B)m 240 fnt82 3117 3232(,)m
+3213(hence)s 3816(only)s 4286(g)s 1(alle)k 3(ys)k
+4999(tar)s 4(geted)k 5811(to)s 220 fnt35 6039 3229(A)m
+240 fnt82 6233 3232(will)m 6648(e)s 3(xpand)k 220 fnt35
+7384 3229(ABList)m 240 fnt82 8013 3232(.)m 8166(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+0 2944(after)m 220 fnt35 496 2941(ABList)m 240 fnt82 1185 2944(is)m
+1395(e)s 3(xpanded)k 2368(by)s 2662(such)s 3158(a)s
+3324(g)s 1(alle)k 3(y)k 15(,)k 220 fnt35
+3996 2941(B)m 240 fnt82 4194 2944(will)m 4620(be)s 4902(a)s 4(v)k 6(ailable)k
+5810(as)s 6060(a)s 6226(tar)s 4(get)k 6825(in)s
+7068(the)s 7416(usual)s 7976(w)s 2(ay)k 15(.)k
+480 2570(Apart)m 1081(from)s 1602(this)s 1994(meaning,)s 220 fnt35
+2922 2567(@NotRe)m 6(v)k 5(ealed)k 240 fnt82 4445 2570(has)m
+4812(no)s 5102(ef)s 6(fect)k 5694(at)s 5923(all,)s
+6264(and)s 6665(the)s 7010(body)s 7540(of)s 7808(the)s
+8152(de\207nition)s 0 2282(may)m 501(be)s 819(understood)s 1976(by)s
+2306(deleting)s 220 fnt35 3164 2279(@NotRe)m 6(v)k 5(ealed)k
+240 fnt82 4727 2282(and)m 5166(an)s 3(y)k 5599(preceding)s
+6630(space.)s 7361(Thus,)s 7982(the)s 8366(symbol)s 0 1994(preceding)m
+220 fnt35 1001 1991(@NotRe)m 6(v)k 5(ealed)k 240 fnt82
+2533 1994(may)m 3004(ha)s 4(v)k 3(e)k 3510(named)s
+4211(and)s 4620(right)s 5136(parameters)s 6239(in)s 6487(the)s
+6840(usual)s 7405(w)s 2(ay;)k 7919(these)s 8471(w)s 2(ould)k
+0 1706(follo)m 6(w)k 672(after)s 1168(the)s 220 fnt35
+1516 1703(@NotRe)m 6(v)k 5(ealed)k 240 fnt82 3043 1706(symbol.)m
+480 1332(This)m 944(symbol)s 1692(w)s 2(as)k 2101(introduced)s
+3169(to)s 3396(o)s 3(v)k 3(ercome)k 4377(a)s
+4530(problem)s 5375(with)s 5845(\210oating)s 6616(\207gures)s 7306(treated)s
+8001(as)s 8238(displays.)s 0 1044(It)m 205(turned)s 874(out)s
+1240(to)s 1479(be)s 1761(essential)s 2638(to)s 2877(specify)s
+3621(the)s 3969(layout)s 4627(of)s 4898(a)s 5064(column)s
+5839(\(in)s 6161(part\))s 6660(as)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 61 67
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.33.)m 574(@NotRe)s 3(vealed)k 240 fnt84
+8839 13840(61)m 220 fnt35 480 13251(@BodyT)m 26(e)k 6(xtPlace)k
+480 12963(// @FigurePlace)m 480 12675(// @BodyT)m 26(e)k 6(xtPlace)k 480 12387(// @FigurePlace)m
+480 12099(// @BodyT)m 26(e)k 6(xtPlace)k 480 11811(...)m 240 fnt82
+0 11360(so)m 256(that)s 664(\207gures)s 1356(could)s 1935(alternate)s
+2802(with)s 3274(body)s 3798(te)s 3(xt)k 4202(do)s 6(wn)k
+4776(the)s 5114(column.)s 5986(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+6935(some)s 7486(means)s 8138(w)s 2(as)k 8548(need)s
+8998(-)s 0 11072(ed)m 291(to)s 538(ensure)s 1226(that)s
+1652(in)s 1903(the)s 2259(absence)s 3080(of)s 3359(an)s 3(y)k
+3764(\207gures)s 4474(there)s 5015(could)s 5613(only)s 6101(be)s
+6391(one)s 220 fnt35 6801 11069(@BodyT)m 26(e)k 6(xtPlace)k
+240 fnt82 8527 11072(in)m 8778(the)s 0 10784(column,)m 831(since)s
+1385(otherwise)s 2377(v)s 6(arious)k 3132(problems)s 4080(arose,)s
+4698(for)s 5042(e)s 3(xample)k 5912(the)s 220 fnt35
+6267 10781(@NP)m 240 fnt82 6851 10784(symbol)m 7618(merely)s 8342(causing)s
+0 10496(a)m 174(skip)s 634(from)s 1167(one)s 220 fnt35
+1577 10493(@BodyT)m 26(e)k 6(xtPlace)k 240 fnt82 3303 10496(to)m
+3551(the)s 3907(ne)s 3(xt)k 4385(in)s 4636(the)s
+4992(same)s 5548(column,)s 6381(rather)s 7006(than)s 7483(to)s
+7730(the)s 8087(\207rst)s 8526(in)s 8778(the)s 0 10208(ne)m 3(xt)k
+490(column.)s 1394(Also,)s 1974(without)s 2787(this)s 3204(feature)s
+3944(the)s 4314(optimal)s 5120(page)s 5650(break)s 2(er')k 13(s)k
+6595(attempts)s 7477(to)s 7737(end)s 8163(a)s 8351(column)s
+0 9920(early)m 545(w)s 2(ould)k 1214(be)s 1510(frustrated)s
+2496(by)s 2805(Lout)s 3331(then)s 3814(disco)s 3(v)k 3(ering)k
+4991(that)s 5423(plenty)s 6090(of)s 6375(space)s 6976(e)s 3(xisted)k
+7722(at)s 7968(a)s 8149(follo)s 6(wing)k 220 fnt35
+0 9629(@BodyT)m 26(e)k 6(xtPlace)k 240 fnt82 1703 9632(in)m
+1931(the)s 2263(same)s 2795(column.)s 3662(The)s 4074(solution)s
+4887(is)s 5082(based)s 5669(on)s 220 fnt35 5951 9629(ABList)m
+240 fnt82 6625 9632(abo)m 3(v)k 3(e;)k 7287(each)s
+7767(occurrence)s 8855(of)s 220 fnt35 0 9341(@BodyT)m 26(e)k 6(xtPlace)k
+240 fnt82 1712 9344(after)m 2201(a)s 220 fnt35 2361 9341(@FigurePlace)m
+240 fnt82 3798 9344(is)m 4002(not)s 4361(re)s 6(v)k 3(ealed)k
+5213(in)s 5449(the)s 5791(enclosing)s 6754(de\207nition,)s 7772(and)s
+8169(so)s 8428(cannot)s 0 9056(be)m 282(found)s 899(by)s
+1193(body)s 1727(te)s 3(xt)k 2142(g)s 1(alle)k 3(ys)k
+2866(unless)s 3515(a)s 3682(\207gure)s 4296(has)s 4666(pre)s 6(viously)k
+5724(attached)s 6578(to)s 6817(the)s 7165(preceding)s 220 fnt35
+8162 9053(@Figure)m 240 fnt82 8998 9056(-)m 220 fnt35 0 8765(Place)m
+240 fnt82 540 8768(.)m 240 fnt84 0 8021(3.34.)m 591(The)s
+1046(cr)s 4(oss)k 1614(r)s 4(efer)k 4(ence)k
+2616(symbols)s 3494(&&)s 3941(and)s 4382(&&&)s 240 fnt82
+480 7544(The)m 941(cross)s 1516(reference)s 2493(symbol)s 220 fnt35
+3286 7541(&&)m 240 fnt82 3668 7544(tak)m 2(es)k 4241(the)s
+4623(name)s 5230(of)s 5534(a)s 5734(symbol)s 6527(\(not)s
+7006(an)s 7322(object\))s 8068(for)s 8439(its)s 8749(left)s
+0 7256(parameter)m 9(,)k 1068(and)s 1489(an)s 1788(object)s
+2449(whose)s 3134(v)s 6(alue)k 3718(must)s 4260(be)s
+4559(a)s 4741(simple)s 5451(w)s 2(ord,)k 6064(or)s
+6340(se)s 6(v)k 3(eral)k 7079(simple)s 7788(w)s 2(ords,)k
+8495(for)s 8850(its)s 0 6968(right)m 519(parameter)s 13(.)k
+1633(The)s 2069(result)s 2668(is)s 2887(a)s 3061(cross)s
+3612(reference,)s 4615(which)s 5265(may)s 5740(be)s 6030(thought)s
+6831(of)s 7111(as)s 7369(an)s 7661(arro)s 6(w)k
+8275(pointing)s 0 6680(from)m 524(the)s 872(cross)s 1414(reference)s
+2357(symbol)s 3117(to)s 3356(the)s 3704(be)s 3(ginning)k
+4712(of)s 4983(an)s 5266(in)s 9(v)k 4(ocation)k
+6320(of)s 6591(the)s 6939(named)s 7635(symbol.)s 480 6306(The)m
+894(in)s 9(v)k 4(ocation)k 1934(pointed)s 2696(to,)s
+2975(kno)s 6(wn)k 3665(as)s 3901(the)s 240 fnt83
+4235 6308(tar)m 8(g)k 2(et)k 240 fnt82 4846 6306(of)m
+5103(the)s 5437(cross)s 5965(reference,)s 6945(is)s 7141(generally)s
+8070(one)s 8458(whose)s 220 fnt35 0 6015(@T)m 26(ag)k
+240 fnt82 643 6018(parameter)m 1677(has)s 2067(v)s 6(alue)k
+2655(equal)s 3248(to)s 3507(the)s 3875(right)s 4406(parameter)s
+5440(of)s 5731(the)s 6099(cross)s 6661(reference)s 7624(symbol.)s
+8513(Three)s 0 5730(special)m 759(tags,)s 220 fnt35 1292 5727(preceding)m
+240 fnt82 2243 5730(,)m 220 fnt35 2391 5727(f)m 6(ollo)k 3(wing)k
+240 fnt82 3221 5730(,)m 3369(and)s 220 fnt35 3814 5727(f)m 6(oll_or_prec)k
+240 fnt82 4948 5730(,)m 5097(point)s 5690(respecti)s 6(v)k 3(ely)k
+6930(to)s 7210(the)s 7599(\207rst)s 8072(in)s 9(v)k 4(ocation)k
+0 5442(preceding)m 1006(the)s 1365(cross)s 1918(reference)s 2872(in)s
+3126(the)s 3485(\207nal)s 3976(printed)s 4721(document,)s 5783(to)s
+6033(the)s 6392(\207rst)s 6834(in)s 9(v)k 4(ocation)k
+7899(follo)s 6(wing)k 8887(it,)s 0 5154(and)m 404(to)s
+643(the)s 991(\207rst)s 1422(follo)s 6(wing)k 2399(it)s
+2591(if)s 2808(such)s 3304(e)s 3(xists)k 3896(else)s
+4323(to)s 4562(the)s 4910(\207rst)s 5341(preceding)s 6337(it.)s
+480 4780(A)m 709(cross)s 1249(reference)s 2190(may)s 2654(be)s
+2935(used)s 3430(in)s 3671(four)s 4127(w)s 2(ays:)k
+4782(where)s 5420(an)s 5701(object)s 6343(is)s 6552(e)s 3(xpected,)k
+7504(in)s 7745(which)s 8385(case)s 8850(its)s 0 4492(v)m 6(alue)k
+576(is)s 795(a)s 970(cop)s 2(y)k 1497(of)s
+1777(the)s 2134(tar)s 4(get;)k 2794(with)s 3285(the)s
+220 fnt35 3642 4489(@Open)m 240 fnt82 4457 4492(and)m 220 fnt35
+4870 4489(@Use)m 240 fnt82 5544 4492(symbols;)m 6463(with)s 6954(the)s
+220 fnt35 7311 4489(@T)m 26(agged)k 240 fnt82 8309 4492(symbol;)m
+0 4204(and)m 414(in)s 667(the)s 220 fnt35 1025 4201(into)m
+240 fnt82 1441 4204(clause)m 2105(or)s 220 fnt35 2374 4201(@T)m 26(arget)k
+240 fnt82 3271 4204(symbol)m 4041(of)s 4323(a)s 4499(g)s 1(alle)k 3(y)k
+5143(de\207nition,)s 6177(in)s 6430(which)s 7083(case)s 7560(the)s
+7918(v)s 6(alue)k 8496(of)s 8778(the)s 0 3916(tag)m
+345(must)s 870(be)s 220 fnt35 1152 3913(preceding)m 240 fnt82
+2103 3916(,)m 220 fnt35 2210 3913(f)m 6(ollo)k 3(wing)k
+240 fnt82 3040 3916(,)m 3147(or)s 220 fnt35 3406 3913(f)m 6(oll_or_prec)k
+240 fnt82 4540 3916(.)m 480 3542(W)m 9(ithin)k 1233(an)s
+220 fnt35 1557 3539(into)m 240 fnt82 2004 3542(clause)m 2698(or)s
+220 fnt35 2999 3539(@T)m 26(arget)k 240 fnt82 3927 3542(symbol,)m
+4780(the)s 5169(alternati)s 6(v)k 3(e)k 6265(form)s
+220 fnt35 6830 3539(&&&)m 240 fnt82 7365 3542(is)m 7616(acceptable)s
+8722(and)s 0 3254(indicates)m 900(a)s 1066(forcing)s 1809(g)s 1(alle)k 3(y)k
+2443(\(Section)s 3296(2.7\).)s 480 2880(Except)m 1203(within)s 1870(an)s
+220 fnt35 2151 2877(into)m 240 fnt82 2556 2880(clause)m 3208(or)s
+220 fnt35 3465 2877(@T)m 26(arget)k 240 fnt82 4351 2880(symbol,)m
+5162(the)s 5508(symbol)s 6267(referred)s 7078(to)s 7315(must)s
+7839(ha)s 4(v)k 3(e)k 8339(a)s 220 fnt35
+8503 2877(@T)m 26(ag)k 240 fnt82 0 2592(parameter)m 13(.)k
+1100(This)s 1570(is)s 1775(so)s 2035(e)s 6(v)k 3(en)k
+2530(if)s 2741(the)s 3084(right)s 3589(parameter)s 4597(of)s
+4863(the)s 5205(cross)s 5742(reference)s 6679(is)s 220 fnt35
+6884 2589(preceding)m 240 fnt82 7835 2592(,)m 220 fnt35 7936 2589(f)m 6(ollo)k 3(wing)k
+240 fnt82 8766 2592(,)m 8867(or)s 220 fnt35 0 2301(f)m 6(oll_or_prec)k
+240 fnt82 1134 2304(.)m 240 fnt84 0 1515(3.35.)m 591(@T)s 22(agged)k
+240 fnt82 480 1038(The)m 220 fnt35 924 1035(@T)m 26(agged)k
+240 fnt82 1929 1038(symbol)m 2705(tak)s 2(es)k 3261(a)s
+3444(cross)s 4002(reference)s 4961(for)s 5315(its)s 5607(left)s
+6001(parameter)s 7031(and)s 7451(an)s 7750(object,)s 8458(whose)s
+0 750(v)m 6(alue)k 565(must)s 1087(be)s 1366(a)s
+1528(juxtaposition)s 2831(of)s 3099(simple)s 3788(w)s 2(ords,)k
+4475(or)s 4731(se)s 6(v)k 3(eral)k 5450(w)s 2(ords,)k
+6136(or)s 6392(an)s 6672(empty)s 7320(object,)s 8008(for)s
+8343(its)s 8615(right)s 0 462(parameter)m 13(.)k 1104(It)s
+1307(has)s 1675(the)s 2021(ef)s 6(fect)k 2615(of)s
+2885(attaching)s 3812(its)s 4086(right)s 4595(parameter)s 5607(as)s
+5856(an)s 6137(additional)s 7146(tag)s 7489(to)s 7726(the)s
+8072(in)s 9(v)k 4(ocation)k 0 174(denoted)m 819(by)s
+1117(its)s 1397(left)s 1778(parameter)s 9(,)k 2834(unless)s
+3487(the)s 3839(right)s 4353(parameter)s 5371(is)s 5585(empty)s 15(,)k
+6279(in)s 6526(which)s 7172(case)s 220 fnt35 7643 171(@T)m 26(agged)k
+240 fnt82 8636 174(does)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 62 68
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(62)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(nothing.)m
+896(The)s 1324(result)s 1914(of)s 220 fnt35 2185 13202(@T)m 26(agged)k
+240 fnt82 3174 13205(is)m 3384(al)s 2(w)k 2(ays)k
+220 fnt35 4095 13202(@Null)m 240 fnt82 4680 13205(,)m 4787(which)s
+5429(mak)s 2(es)k 6089(it)s 6281(ef)s 6(fecti)k 6(v)k 3(ely)k
+7340(in)s 9(visible.)k 240 fnt84 0 12412(3.36.)m 591(@Open and @Use)s
+240 fnt82 480 11935(The)m 220 fnt35 904 11932(@Open)m 240 fnt82
+1706 11935(symbol)m 2462(tak)s 2(es)k 2998(a)s 3159(cross)s
+3697(reference)s 4636(or)s 4891(symbol)s 5647(in)s 9(v)k 4(ocation)k
+6696(for)s 7030(its)s 7302(left)s 7675(parameter)s 9(,)k
+8722(and)s 0 11647(an)m 269(arbitrary)s 1130(object,)s 1807(which)s
+2435(must)s 2946(be)s 3214(enclosed)s 4095(in)s 4324(braces,)s
+5027(for)s 5351(its)s 5613(right)s 6110(parameter)s 13(.)k
+7201(The)s 7615(right)s 8112(parameter)s 0 11359(may)m 462(refer)s
+966(to)s 1201(the)s 1544(e)s 3(xported)k 2432(parameters)s
+3525(and)s 3925(nested)s 4589(de\207nitions)s 5646(of)s 5912(the)s
+6256(in)s 9(v)k 4(ocation)k 7305(denoted)s 8117(by)s
+8406(the)s 8749(left)s 0 11071(parameter)m 9(,)k 1050(and)s
+1452(its)s 1725(v)s 6(alue)k 2291(is)s 2499(the)s
+220 fnt35 2844 11068(@Open)m 240 fnt82 3648 11071(symbol')m 13(s)k
+4560(result.)s 5252(The)s 5678(tar)s 4(get)k 6274(of)s
+6543(the)s 6889(cross)s 7428(reference)s 8369(may)s 8832(lie)s
+0 10783(in)m 234(an)s 507(e)s 3(xternal)k 1318(database)s
+2187(\(Section)s 3031(3.37\).)s 3684(An)s 3(y)k 4138(symbol)s
+4888(a)s 4(v)k 6(ailable)k 5787(outside)s 6524(the)s
+220 fnt35 6862 10780(@Open)m 240 fnt82 7658 10783(which)m 8290(happens)s
+0 10495(to)m 239(ha)s 4(v)k 3(e)k 741(the)s
+1089(same)s 1637(name)s 2212(as)s 2462(one)s 2865(of)s
+3137(the)s 3485(symbols)s 4335(made)s 4910(a)s 4(v)k 6(ailable)k
+5818(by)s 6113(the)s 220 fnt35 6462 10492(@Open)m 240 fnt82
+7268 10495(will)m 7695(be)s 7978(una)s 4(v)k 6(ailable)k
+0 10207(within)m 668(the)s 220 fnt35 1016 10204(@Open)m 240 fnt82
+1762 10207(.)m 538 9833(The)m 220 fnt35 963 9830(@Use)m 240 fnt82
+1625 9833(symbol)m 2382(is)s 2589(an)s 220 fnt35 2869 9830(@Open)m
+240 fnt82 3672 9833(symbol)m 4429(in)s 4669(a)s 4832(dif)s 6(ferent)k
+5704(form.)s 6329(It)s 6531(may)s 6994(only)s 7471(appear)s
+8165(among)s 8867(or)s 0 9545(after)m 502(the)s 857(de\207nitions)s
+1925(in)s 2175(Lout')s 13(s)k 2844(input,)s 3450(and)s
+3861(it)s 4060(is)s 4277(equi)s 6(v)k 6(alent)k
+5328(to)s 5574(enclosing)s 6551(the)s 6906(remainder)s 7941(of)s
+8219(the)s 8574(input)s 0 9257(in)m 243(an)s 220 fnt35
+526 9254(@Open)m 240 fnt82 1332 9257(symbol.)m 2201(F)s 3(or)k
+2590(e)s 3(xample,)k 240 fnt83 480 8754(de\207nitions)m 220 fnt35
+480 8461(@Use)m 1145({)s 240 fnt83 1269 8466(x)m 220 fnt35
+1435 8461(})m 480 8173(@Use)m 1145({)s 240 fnt83 1269 8178(y)m
+220 fnt35 1431 8173(})m 240 fnt83 480 7890(r)m 8(est)k
+894(of)s 1175(input)s 240 fnt82 0 7389(is)m 210(equi)s 6(v)k 6(alent)k
+1254(to)s 240 fnt83 480 6886(de\207nitions)m 480 6598(x)m 220 fnt35
+646 6593(@Open)m 480 6305({)m 240 fnt83 960 6310(y)m 220 fnt35
+1122 6305(@Open)m 960 6017({)m 240 fnt83 1084 6022(r)m 8(est)k
+1498(of)s 1779(input)s 220 fnt35 960 5729(})m 480 5441(})m
+240 fnt82 0 4947(The)m 220 fnt35 424 4944(@Use)m 240 fnt82
+1085 4947(symbol)m 1841(allo)s 6(ws)k 2506(a)s 2668(set)s
+2989(of)s 3256(standard)s 4120(packages)s 5044(to)s 5279(be)s
+5557(opened)s 6303(without)s 7090(the)s 7434(incon)s 9(v)k 3(enience)k
+8855(of)s 0 4659(enclosing)m 974(the)s 1327(entire)s 1931(document)s
+2939(in)s 220 fnt35 3187 4656(@Open)m 240 fnt82 3998 4659(symbols.)m
+4964(Such)s 5505(enclosure)s 6482(could)s 7076(cause)s 7668(Basser)s
+8370(Lout)s 8887(to)s 0 4371(run)m 376(out)s 742(of)s
+1013(memory)s 15(.)k 240 fnt84 0 3578(3.37.)m 591(@Database and @SysDatabase)s
+240 fnt82 529 3101(The)m 220 fnt35 945 3098(@Database)m 240 fnt82
+2148 3101(symbol)m 2896(is)s 3095(used)s 3580(to)s 3808(declare)s
+4541(the)s 4877(e)s 3(xistence)k 5808(of)s 6067(a)s
+6222(\207le)s 6571(of)s 6831(symbol)s 7579(in)s 9(v)k 4(ocations)k
+8708(that)s 0 2813(Lout)m 512(may)s 978(refer)s 1487(to)s
+1726(when)s 2302(e)s 6(v)k 6(aluating)k 3339(cross)s
+3881(references.)s 5025(In)s 5281(Basser)s 5978(Lout,)s 6537(for)s
+6875(e)s 3(xample,)k 220 fnt35 480 2312(@Database @Months @W)m 6(eekDa)k 6(ys { standard })k
+240 fnt82 0 1814(means)m 690(that)s 1137(there)s 1698(is)s
+1937(a)s 2131(\207le)s 2521(called)s 220 fnt35 3177 1811(standard.ld)m
+240 fnt82 4339 1814(containing)m 5430(in)s 9(v)k 4(ocations)k
+6600(of)s 6899(the)s 7276(pre)s 6(viously)k 8363(de\207ned)s
+0 1526(symbols)m 220 fnt35 846 1523(@Months)m 240 fnt82 1838 1526(and)m
+220 fnt35 2238 1523(@W)m 6(eekDa)k 6(ys)k 240 fnt82
+3503 1526(.)m 3663(A)s 220 fnt35 3889 1523(@Database)m 240 fnt82
+5100 1526(symbol)m 5856(may)s 6318(appear)s 7011(an)s 3(ywhere)k
+7990(a)s 8152(de\207nition)s 0 1238(or)m 252(a)s 220 fnt35
+411 1235(@Use)m 240 fnt82 1069 1238(symbol)m 1822(may)s 2281(appear)s 13(.)k
+3062(Dif)s 6(ferent)k 3982(de\207nitions)s 5036(packages)s 5957(may)s
+6416(refer)s 6918(to)s 7150(a)s 7309(common)s 8196(database,)s
+0 950(pro)m 3(vided)k 935(the)s 1312(de\207nitions)s 2402(the)s 3(y)k
+2894(gi)s 6(v)k 3(e)k 3382(for)s 3749(its)s
+4054(symbols)s 4932(are)s 5308(compatible.)s 6563(An)s 6942(entry)s
+7516(is)s 7755(interpreted)s 8876(as)s 0 662(though)m 756(it)s
+981(appears)s 1795(at)s 2060(the)s 2441(point)s 3026(where)s
+3699(the)s 4080(cross)s 4655(reference)s 5631(that)s 6082(retrie)s 6(v)k 3(es)k
+6978(it)s 7203(does,)s 7782(which)s 8457(allo)s 6(ws)k
+0 374(symbols)m 866(lik)s 2(e)k 220 fnt35 1296 371(@I)m
+240 fnt82 1639 374(for)m 220 fnt35 1995 371(Slope @F)m 6(ont)k
+240 fnt82 3346 374(to)m 3602(be)s 3902(used)s 4417(in)s
+4678(databases.)s 5776(The)s 6221(database)s 7118(\207le)s 7497(may)s
+7981(not)s 8365(contain)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 63 69
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.37.)m 574(@Database and @SysDatabase)s 240 fnt84 8833 13840(63)m
+220 fnt35 0 13202(@Database)m 240 fnt82 1214 13205(or)m 220 fnt35
+1473 13202(@Include)m 240 fnt82 2455 13205(symbols,)m 3360(and)s 3764(each)s
+4259(in)s 9(v)k 4(ocation)k 5313(within)s 5981(it)s
+6173(must)s 6698(be)s 6980(enclosed)s 7875(in)s 8118(braces.)s
+480 12831(Basser)m 1198(Lout)s 1732(constructs)s 2773(an)s 240 fnt83
+3078 12833(inde)m 4(x)k 3674(\207le)s 240 fnt82 3959 12831(,)m
+4087(which)s 4751(in)s 5016(this)s 5433(e)s 3(xample)k
+6318(is)s 6550(called)s 220 fnt35 7199 12828(standard.li)m 240 fnt82
+8196 12831(,)m 8325(the)s 8695(\207rst)s 0 12543(time)m 481(it)s
+675(e)s 6(v)k 3(er)k 1139(encounters)s 2227(the)s
+2577(database,)s 3509(as)s 3761(an)s 4045(aid)s 4397(to)s
+4638(searching)s 5608(it.)s 5906(If)s 6138(the)s 6488(database)s
+7368(\207le)s 7731(is)s 7943(changed,)s 8850(its)s 0 12255(inde)m 3(x)k
+586(\207le)s 950(must)s 1477(be)s 1762(deleted)s 2512(by)s
+2809(the)s 3159(user)s 3620(so)s 3888(that)s 4309(Basser)s
+5008(Lout)s 5523(kno)s 6(ws)k 6196(to)s 6438(reconstruct)s
+7561(it.)s 7860(There)s 8475(is)s 8688(also)s 0 11967(an)m
+300(installation)s 1435(option)s 2121(which)s 2780(allo)s 6(ws)k
+3466(this)s 3879(deletion)s 4723(to)s 4979(be)s 5278(done)s
+5817(automatically)s 7188(on)s 7502(suitable)s 8318(systems)s 0 11679(\(including)m
+1036(Unix\).)s 480 11305(Basser)m 1210(Lout)s 1756(searches)s 2649(for)s
+3021(databases)s 4021(in)s 4298(the)s 4679(current)s 5449(directory)s
+6398(\207rst,)s 6910(then)s 7412(in)s 7689(a)s 7888(sequence)s
+8855(of)s 0 11017(standard)m 868(places.)s 1629(T)s 19(o)k
+1929(search)s 2596(the)s 2944(standard)s 3812(places)s 4460(only)s 15(,)k
+4978(use)s 220 fnt35 5353 11014(@SysDatabase)m 240 fnt82 6873 11017(.)m
+240 fnt84 0 10224(3.38.)m 591(@Graphic)s 240 fnt82 556 9747(Lout)m
+1084(does)s 1590(not)s 1972(pro)s 3(vide)k 2772(the)s
+3136(v)s 6(ast)k 3592(repertoire)s 4591(of)s 4878(graphical)s
+5838(objects)s 6582(\(lines,)s 7235(circles,)s 7980(box)s 3(es,)k
+8660(etc.\))s 0 9459(required)m 846(by)s 1132(diagrams.)s 2163(Instead,)s
+2952(it)s 3135(pro)s 3(vides)k 3999(an)s 4274(escape)s
+4958(route)s 5497(to)s 5727(some)s 6280(other)s 6823(language)s
+7734(that)s 8144(does)s 8625(ha)s 4(v)k 3(e)k
+0 9171(these)m 547(features,)s 1409(via)s 1761(its)s 220 fnt35
+2037 9168(@Gr)m 2(aphic)k 240 fnt82 3081 9171(symbol:)m 220 fnt35
+480 8673({ 0 0 mo)m 3(v)k 5(eto)k 480 8385( 0 ysiz)m 3(e lineto)k
+480 8097( xsiz)m 3(e ysiz)k 3(e lineto)k 480 7809( xsiz)m 3(e 0 lineto)k
+480 7521( closepath)m 480 7233( strok)m 4(e)k 480 6945(})m 480 6657(@Gr)m 2(aphic)k
+480 6369({ //0.2c)m 480 6081( ||0.2c hello)m 8(, w)k 2(or)k -3(ld ||0.2c)k
+480 5793( //0.2c)m 480 5505(})m 240 fnt82 0 5011(The)m 428(result)s
+1018(of)s 1289(the)s 1637(abo)s 3(v)k 3(e)k
+2259(in)s 9(v)k 4(ocation)k 3313(of)s 3584(the)s
+3932(symbol)s 220 fnt35 4692 5008(@Gr)m 2(aphic)k 240 fnt82
+5736 5011(is)m 1365 422 0 422 240 288 60 480 4249 LoutGr2
+0 0 moveto
+0 ysize lineto
+xsize ysize lineto
+xsize 0 lineto
+closepath
+stroke
+grestore
+113 146(hello,)m 698(w)s 2(orld)k
+grestore
+480 3533(The)m
+909(right)s 1421(parameter)s 2437(al)s 2(w)k 2(ays)k
+3149(appears)s 3931(as)s 4183(part)s 4615(of)s 4888(the)s
+5237(result,)s 5875(and)s 6281(indeed)s 6978(the)s 7327(result)s
+7919(is)s 8130(al)s 2(w)k 2(ays)k 8843(an)s
+0 3245(object)m 651(whose)s 1327(size)s 1761(is)s 1979(identical)s
+2863(to)s 3110(the)s 3465(size)s 3900(of)s 4178(the)s
+4534(right)s 5052(parameter)s 6074(with)s 220 fnt35 6563 3242(@OneCol)m
+240 fnt82 7583 3245(and)m 220 fnt35 7995 3242(@OneRo)m 3(w)k
+240 fnt82 0 2957(applied)m 762(to)s 1001(it.)s 1297(From)s
+1875(no)s 6(w)k 2336(on)s 2633(we)s 2968(refer)s
+3477(to)s 3716(this)s 4112(part)s 4543(of)s 4814(the)s
+5162(result)s 5752(as)s 6002(the)s 240 fnt83 6350 2959(base)m
+240 fnt82 6782 2957(.)m 480 2583(The)m 898(left)s 1264(parameter)s
+2267(is)s 2466(implementation-dependent:)s 5184(that)s 5591(is,)s 5847(its)s
+6112(meaning)s 6978(is)s 7177(not)s 7532(de\207ned)s 8284(by)s
+8567(Lout,)s 0 2295(and)m 421(dif)s 6(ferent)k 1313(implementations)s
+2975(could)s 3582(require)s 4332(dif)s 6(ferent)k 5224(v)s 6(alues)k
+5898(for)s 6253(it.)s 6567(The)s 7012(follo)s 6(wing)k
+8007(description)s 0 2007(applies)m 752(to)s 1016(Basser)s 1737(Lout,)s
+2321(which)s 2988(uses)s 3475(the)s 3848(PostScript)s 4914(page)s
+5447(description)s 6591(language)s 7535([1)s 7709(].)s 7977(Similar)s
+8764(b)s 4(ut)k 0 1719(more)m 559(restricted)s 1517(possibilities)s
+2722(e)s 3(xist)k 3243(with)s 3737(the)s 4098(PDF)s
+4608(back)s 5134(end)s 5550(\(see)s 6003(a)s 6182(separate)s
+7033(document)s 8050(distrib)s 4(uted)k 0 1431(with)m 482(Lout\);)s
+1125(to)s 1364(include)s 2124(both,)s 2657(use)s 3032(the)s
+220 fnt35 3380 1428(@Bac)m 4(kEnd)k 240 fnt82 4525 1431(symbol)m
+5285(lik)s 2(e)k 5697(this:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 64 70
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(64)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 220 fnt35 480 13207({ @Bac)m 4(kEnd @Case {)k
+480 12919( P)m 11(ostScr)k -3(ipt @Y)k 4(ield)k 480 12631( {)m
+480 12343( ...)m 480 12055( })m 480 11767( PDF @Y)m 4(ield)k 480 11479( {)m
+480 11191( ...)m 480 10903( })m 480 10615( })m 480 10327( @Gr)m 2(aphic)k
+480 10039( {)m 480 9751( ...)m 480 9463( })m 480 9175(})m 240 fnt82
+0 8681(Returning)m 1039(to)s 1307(PostScript,)s 2425(the)s 2802(left)s
+3208(parameter)s 4251(refers)s 4874(to)s 5142(a)s 5337(coordinate)s
+6431(system)s 7184(whose)s 7881(origin)s 8538(is)s 8778(the)s
+0 8393(bottom)m 773(left-hand)s 1728(corner)s 2433(of)s 2740(the)s
+3123(base.)s 3747(It)s 3987(may)s 4489(use)s 4899(the)s
+5282(symbols)s 220 fnt35 6166 8390(xsiz)m 3(e)k 240 fnt82
+6751 8393(and)m 220 fnt35 7190 8390(ysiz)m 3(e)k 240 fnt82
+7774 8393(to)m 8048(denote)s 8778(the)s 0 8105(horizontal)m 1031(and)s
+1442(v)s 3(ertical)k 2216(size)s 2650(of)s 2928(the)s
+3283(base;)s 3827(similarly)s 15(,)k 220 fnt35 4774 8102(xmar)m -3(k)k
+240 fnt82 5442 8105(and)m 220 fnt35 5853 8102(ymar)m -3(k)k
+240 fnt82 6521 8105(denote)m 7222(the)s 7577(positions)s 8499(of)s
+8778(the)s 0 7817(base')m 13(s)k 635(column)s 1410(and)s
+1814(ro)s 6(w)k 2234(marks:)s gsave
+480 5454 translate
+180 fnt82 3570 2072 0 1994 180 288 45 LoutGraphic
+gsave
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+180 fnt83 107 1955(ysize)m
+0 1388(ymark)m 180 fnt82 364 253(0)m 2551 1701 850 1134 180 288 45 676 293 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+2551 1701 850 1134 180 288 45 0 0 LoutGr2
+/lfiglightgrey [ lfigbox ] gsave lfigpaintpath grestore
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+2551 1701 850 1134 180 288 45 0 0 LoutGr2
+
+0.015 cm setlinewidth lfiground setlinecap
+0.15 cm /lfigdashed [ -0.3 cm ymark
+xsize ymark 0.3 cm 0 lfigpadd []
+xmark -0.3 cm
+xmark ysize 0 0.3 cm lfigpadd ] lfigdopath
+pop pop
+grestore
+
+grestore
+
+grestore
+end end restore
+grestore
+676 14(0)m 180 fnt83
+1526 15(xmark)m 3227(xsize)s end end restore
+grestore
+0 5003(In)m 265(addition)s 1115(to)s
+1363(these)s 1920(four)s 2387(symbols)s 3245(and)s 3658(0,)s
+3895(lengths)s 4646(may)s 5121(be)s 5412(denoted)s 6238(in)s
+6490(centimetres,)s 7706(inches,)s 8434(points,)s 0 4715(ems,)m 492(f)s -13(')k 13(s,)k
+850(v')s 13(s)k 1180(and)s 1584(s')s 13(s)k
+1887(using)s 2459(the)s 2807(notation)s 240 fnt83 480 4179(l)m
+220 fnt35 666 4174(cm)m 240 fnt82 1197 4177(instead)m 1932(of)s
+2203(Lout')s 13(s)k 240 fnt83 3045 4179(l)m 240 fnt82
+3111 4177(c)m 240 fnt83 480 3891(l)m 220 fnt35 666 3886(in)m
+240 fnt82 1197 3889(instead)m 1932(of)s 2203(Lout')s 13(s)k
+240 fnt83 3045 3891(l)m 240 fnt82 3111 3889(i)m 240 fnt83
+480 3603(l)m 220 fnt35 666 3598(pt)m 240 fnt82 1197 3601(instead)m
+1932(of)s 2203(Lout')s 13(s)k 240 fnt83 3045 3603(l)m
+240 fnt82 3111 3601(p)m 240 fnt83 480 3315(l)m 220 fnt35
+666 3310(em)m 240 fnt82 1197 3313(instead)m 1932(of)s 2203(Lout')s 13(s)k
+240 fnt83 3045 3315(l)m 240 fnt82 3111 3313(m)m 240 fnt83
+480 3027(l)m 220 fnt35 666 3022(ft)m 240 fnt82 1197 3025(instead)m
+1932(of)s 2203(Lout')s 13(s)k 240 fnt83 3045 3027(l)m
+240 fnt82 3111 3025(f)m 240 fnt83 480 2739(l)m 220 fnt35
+666 2734(vs)m 240 fnt82 1197 2737(instead)m 1932(of)s 2203(Lout')s 13(s)k
+240 fnt83 3045 2739(l)m 240 fnt82 3111 2737(v)m 240 fnt83
+480 2451(l)m 220 fnt35 666 2446(sp)m 240 fnt82 1197 2449(instead)m
+1932(of)s 2203(Lout')s 13(s)k 240 fnt83 3045 2451(l)m
+240 fnt82 3111 2449(s)m 0 1908(Note)m 521(that)s 939(there)s
+1472(must)s 1997(be)s 2279(a)s 2445(space)s 3032(between)s
+3886(the)s 4234(number)s 5025(and)s 5429(its)s 5705(unit,)s
+6184(unlik)s 2(e)k 6836(Lout)s 7348(proper)s 13(.)k
+480 1534(A)m 732(point)s 1306(within)s 1996(the)s 2366(base)s
+2869(\(and,)s 3423(with)s 3927(care,)s 4453(a)s 4642(point)s
+5216(outside)s 5985(it\))s 6267(may)s 6755(be)s 7059(denoted)s
+7897(by)s 8213(a)s 8401(pair)s 8855(of)s 0 1246(lengths.)m
+855(F)s 3(or)k 1244(e)s 3(xample,)k 220 fnt35
+480 749(xmar)m -3(k ymar)k -3(k)k 240 fnt82 0 251(is)m
+210(the)s 558(point)s 1110(where)s 1750(the)s 2098(marks)s
+2733(cross,)s 3331(and)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 65 71
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.38.)m 574(@Gr)s 3(aphic)k 240 fnt84
+8833 13840(65)m 220 fnt35 480 13214(0 2 cm)m 240 fnt82 0 12759(is)m
+195(a)s 346(point)s 883(on)s 1164(the)s 1497(left)s
+1859(edge,)s 2402(tw)s 2(o)k 2797(centimetres)s 3933(abo)s 3(v)k 3(e)k
+4539(the)s 4872(bottom)s 5595(left-hand)s 6499(corner)s 13(.)k
+7245(These)s 7857(tw)s 2(o)k 8251(numbers)s 0 12471(are)m
+347(called)s 975(the)s 240 fnt83 1323 12473(x)m 1489(coor)s 8(dinate)k
+240 fnt82 2571 12471(and)m 2975(the)s 240 fnt83 3323 12473(y)m
+3485(coor)s 8(dinate)k 240 fnt82 4567 12471(of)m 4838(the)s
+5186(point.)s 480 12097(The)m 906(\207rst)s 1335(step)s 1770(in)s
+2011(specifying)s 3057(a)s 3221(graphic)s 3988(object)s 4630(is)s
+4837(to)s 5074(de\207ne)s 5712(a)s 240 fnt83 5876 12099(path)m
+240 fnt82 6297 12097(.)m 6458(A)s 6686(path)s 7152(can)s
+7539(be)s 7818(thought)s 8608(of)s 8876(as)s 0 11809(the)m
+349(track)s 888(of)s 1161(a)s 1328(pen)s 1733(mo)s 3(ving)k
+2516(o)s 3(v)k 3(er)k 2996(the)s 3346(page.)s
+3963(The)s 4393(pen)s 4797(may)s 5265(be)s 5548(up)s
+5842(\(not)s 6289(dra)s 3(wing\))k 7199(or)s 7460(do)s 6(wn)k
+8045(\(dra)s 3(wing)k 8960(a)s 0 11521(line)m 414(or)s
+673(curv)s 3(e\))k 1329(as)s 1579(it)s 1771(mo)s 3(v)k 3(es.)k
+2554(The)s 2982(entire)s 3581(path)s 4050(is)s 4260(a)s
+4426(sequence)s 5359(of)s 5630(the)s 5978(follo)s 6(wing)k
+6955(items:)s 240 fnt83 1847 11149(x)m 2013(y)s 220 fnt35
+2175 11144(mo)m 3(v)k 5(eto)k 240 fnt82 3120 11147(Lift)m
+3537(the)s 3885(pen)s 4288(and)s 4692(mo)s 3(v)k 3(e)k
+5274(it)s 5466(to)s 5705(the)s 6053(indicated)s 6987(point.)s
+240 fnt83 2036 10790(x)m 2202(y)s 220 fnt35 2364 10785(lineto)m
+240 fnt82 3120 10788(Put)m 3557(the)s 3963(pen)s 4424(do)s 6(wn)k
+5066(and)s 5528(dra)s 3(w)k 6115(a)s 6339(straight)s
+7173(line)s 7645(to)s 7942(the)s 8348(indicat)s 8998(-)s
+3120 10500(ed)m 3404(point.)s 240 fnt83 702 10141(x)m 868(y)s
+1030(r)s 1188(angle1)s 1879(angle2)s 220 fnt35 2580 10136(arc)m
+240 fnt82 3120 10139(Put)m 3502(the)s 3853(pen)s 4259(do)s 6(wn)k
+4846(and)s 5253(dra)s 3(w)k 5785(a)s 5954(circular)s
+6745(arc)s 7092(whose)s 7763(centre)s 8405(has)s 8779(co)s
+8998(-)s 3120 9851(ordinates)m 240 fnt83 4058 9853(x)m 240 fnt82
+4235 9851(and)m 240 fnt83 4650 9853(y)m 240 fnt82 4823 9851(and)m
+5238(whose)s 5917(radius)s 6563(is)s 240 fnt83 6784 9853(r)m
+240 fnt82 6882 9851(.)m 7057(The)s 7496(arc)s 7851(be)s 3(gins)k
+8535(at)s 8778(the)s 3120 9563(angle)m 240 fnt83 3727 9565(angle1)m
+240 fnt82 4451 9563(measuring)m 5533(counterclockwise)s 7295(from)s 7852(the)s
+8233(point)s 8818(di)s 8998(-)s 3120 9275(rectly)m 3714(to)s
+3949(the)s 4294(right)s 4801(of)s 5069(the)s 5413(centre,)s
+6100(and)s 6500(proceeds)s 7397(counterclockwise)s 3120 8987(to)m 240 fnt83
+3361 8989(angle2)m 240 fnt82 4002 8987(.)m 4168(If)s 4401(the)s
+4751(arc)s 5098(is)s 5310(not)s 5679(the)s 6029(\207rst)s
+6462(thing)s 7010(on)s 7309(the)s 7660(path,)s 8181(a)s
+8350(straight)s 3120 8699(line)m 3549(will)s 3990(be)s 4287(dra)s 3(wn)k
+4954(connecting)s 6072(the)s 6435(current)s 7186(point)s 7753(to)s
+8007(the)s 8370(start)s 8855(of)s 3120 8411(the)m 3468(arc.)s
+240 fnt83 589 8102(x)m 755(y)s 917(r)s 1075(angle1)s
+1766(angle2)s 220 fnt35 2467 8097(arcn)m 240 fnt82 3120 8100(As)m
+3437(for)s 3775(arc,)s 4173(b)s 4(ut)k 4535(the)s
+4883(arc)s 5227(goes)s 5717(clockwise)s 6729(from)s 240 fnt83
+7253 8102(angle1)m 240 fnt82 7944 8100(to)m 240 fnt83 8183 8102(angle2)m
+240 fnt82 8824 8100(.)m 220 fnt35 1955 7738(closepath)m 240 fnt82
+3120 7741(Dra)m 3(w)k 3702(a)s 3868(straight)s 4644(line)s
+5058(back)s 5571(to)s 5810(the)s 6158(point)s 6710(most)s
+7235(recently)s 8058(mo)s 3(v)k 3(ed)k 8762(to.)s
+0 7367(The)m 428(\207rst)s 860(item)s 1344(should)s 2042(al)s 2(w)k 2(ays)k
+2753(be)s 3036(a)s 220 fnt35 3202 7364(mo)m 3(v)k 5(eto)k
+240 fnt82 3907 7367(,)m 220 fnt35 4015 7364(arc)m 240 fnt82
+4315 7367(,)m 4422(or)s 220 fnt35 4682 7364(arcn)m 240 fnt82
+5095 7367(.)m 5259(It)s 5465(should)s 6162(be)s 6445(clear)s
+6968(from)s 7493(this)s 7889(that)s 8308(the)s 8657(path)s
+0 7079(gi)m 6(v)k 3(en)k 580(earlier:)s 220 fnt35
+480 6585(0 0 mo)m 3(v)k 5(eto)k 480 6297(0 ysiz)m 3(e lineto)k
+480 6009(xsiz)m 3(e ysiz)k 3(e lineto)k 480 5721(xsiz)m 3(e 0 lineto)k
+480 5433(closepath)m 240 fnt82 0 4937(traces)m 607(around)s 1330(the)s
+1678(boundary)s 2637(of)s 2908(the)s 3256(base)s 3737(with)s
+4219(the)s 4567(pen)s 4970(do)s 6(wn.)k 480 4563(Once)m
+1039(a)s 1203(path)s 1670(is)s 1877(set)s 2200(up,)s
+2545(we)s 2877(are)s 3222(ready)s 3805(to)s 240 fnt83
+4041 4565(paint)m 240 fnt82 4595 4563(it)m 4785(onto)s 5262(the)s
+5607(page.)s 6221(There)s 6832(are)s 7176(tw)s 2(o)k
+7584(choices:)s 8405(we)s 8737(can)s 0 4275(either)m 240 fnt83
+618 4277(str)m 10(ok)k 2(e)k 240 fnt82 1259 4275(it,)m
+1514(which)s 2172(means)s 2850(to)s 3105(display)s 3866(it)s
+4074(as)s 4340(described;)s 5383(or)s 5658(we)s 6009(can)s
+240 fnt83 6414 4277(\207ll)m 240 fnt82 6742 4275(it,)m 6997(which)s
+7655(means)s 8333(to)s 8588(paint)s 0 3987(e)m 6(v)k 3(erything)k
+1067(inside)s 1694(it)s 1886(gre)s 3(y)k 2362(or)s
+2621(black.)s 3303(F)s 3(or)k 3692(stroking)s 4529(the)s
+4877(tw)s 2(o)k 5287(main)s 5822(options)s 6578(are)s
+240 fnt83 1581 3484(length)m 220 fnt35 2234 3479(setline)m 4(width)k
+240 fnt82 3600 3482(The)m 4028(pen)s 4431(will)s 4857(dra)s 3(w)k
+5386(lines)s 5888(of)s 6159(the)s 6507(gi)s 6(v)k 3(en)k
+7087(width.)s 220 fnt35 1553 2974([)m 240 fnt83 1668 2979(length)m
+220 fnt35 2321 2974(])m 2430(0)s 2605(setdash)s 240 fnt82
+3600 2977(The)m 4034(pen)s 4444(will)s 4876(dra)s 3(w)k
+5412(dashed)s 6142(lines)s 6650(when)s 7233(it)s 7432(is)s
+7648(do)s 6(wn,)k 8289(with)s 8778(the)s 3600 2689(dashes)m
+4289(each)s 4784(of)s 5055(the)s 5403(gi)s 6(v)k 3(en)k
+5983(length.)s 0 2186(These)m 627(options)s 1383(are)s 1730(follo)s 6(wed)k
+2632(by)s 2926(the)s 3274(w)s 2(ord)k 220 fnt35
+3822 2183(strok)m 4(e)k 240 fnt82 4408 2186(.)m 4572(So,)s
+4932(for)s 5270(e)s 3(xample,)k 220 fnt35 480 1688({ 0 0 mo)m 3(v)k 5(eto xsiz)k 3(e 0 lineto)k
+480 1400( 2 pt setline)m 4(width [ 5 pt ] 0 setdash strok)k 4(e)k 480 1112(})m 480 824(@Gr)m 2(aphic { 3i @Wide })k
+240 fnt82 0 328(has)m 370(result)s 4320 0 0 0 240 288 60 480 38 LoutGr2
+0 0 moveto xsize 0 lineto
+2 pt setlinewidth [ 5 pt ] 0 setdash stroke
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 66 72
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(66)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 480 12940(When)m
+1106(\207lling)s 1726(in)s 1965(the)s 2310(re)s 3(gion)k
+2971(enclosed)s 3862(by)s 4153(a)s 4315(path,)s 4830(the)s
+5175(main)s 5706(option)s 6371(is)s 220 fnt35 6578 12937(setg)m 2(r)k 2(a)k 6(y)k
+240 fnt82 7286 12940(,)m 7389(which)s 8027(determines)s 0 12652(the)m
+348(shade)s 949(of)s 1220(gre)s 3(y)k 1696(to)s
+1935(use,)s 2361(on)s 2658(a)s 2824(scale)s 3357(from)s
+3881(0)s 4056(\(black\))s 4781(to)s 5020(1)s 5175(\(white\).)s
+6028(So,)s 6388(for)s 6726(e)s 3(xample,)k 220 fnt35
+480 12154({ 0 0 mo)m 3(v)k 5(eto xsiz)k 3(e 0 lineto 0 ysiz)k 3(e lineto closepath)k
+480 11866( 0.8 setg)m 2(r)k 2(a)k 6(y \207ll)k 480 11578(})m
+480 11290(@Gr)m 2(aphic)k 480 11002({ 2c @Wide 2c @High })m 240 fnt82 0 10503(has)m
+370(result)s 1134 1134 0 1134 240 288 60 480 9079 LoutGr2
+0 0 moveto xsize 0 lineto 0 ysize lineto closepath
+0.8 setgray fill
+grestore
+
+grestore
+480 8363(There)m 1107(are)s 1468(man)s 3(y)k
+2066(other)s 2631(options.)s 3515(The)s 3957(v)s 6(alue)k
+4540(of)s 4825(the)s 5188(left)s 5579(parameter)s 6608(of)s
+220 fnt35 6893 8360(@Gr)m 2(aphic)k 240 fnt82 7952 8363(may)m
+8432(be)s 8729(an)s 3(y)k 0 8075(fragment)m 922(of)s
+1193(the)s 1541(PostScript)s 2583(page)s 3091(description)s 4210(language)s
+5130([1)s 5304(].)s 5547(Here)s 6067(are)s 6414(tw)s 2(o)k
+6824(other)s 7375(e)s 3(xamples:)k 220 fnt35 480 7578(xsiz)m 3(e)k
+1030(2)s 1203(div)s 240 fnt82 0 7124(denoting)m 891(a)s
+1057(length)s 1712(equal)s 2285(to)s 2524(half)s 2967(the)s
+3315(horizontal)s 4339(size)s 4766(of)s 5037(the)s 5385(base,)s
+5917(and)s 220 fnt35 480 6625(gsa)m 4(v)k 5(e)k
+1110(\207ll)s 1363(g)s 2(restore)k 2219(strok)s 4(e)k
+240 fnt82 0 6126(which)m 648(both)s 1138(\207lls)s 1554(and)s
+1965(strok)s 2(es)k 2698(the)s 3053(path.)s 3636(Since)s
+4230(Basser)s 4933(Lout)s 5452(does)s 5949(not)s 6322(check)s
+6948(that)s 7373(the)s 7728(left)s 8112(parameter)s 0 5838(is)m
+209(v)s 6(alid)k 737(PostScript,)s 1824(it)s 2014(is)s
+2222(possible)s 3061(to)s 3298(cause)s 3883(mysterious)s 4981(errors)s
+5586(in)s 5828(the)s 6174(printing)s 6982(de)s 6(vice,)k
+7705(resulting)s 8592(in)s 8833(no)s 0 5550(output,)m 708(if)s
+914(an)s 1186(incorrect)s 2083(v)s 6(alue)k 2640(is)s
+2839(gi)s 6(v)k 3(en.)k 3515(It)s 3709(is)s
+3908(a)s 4063(good)s 4590(idea)s 5037(to)s 5265(encapsulate)s
+6425(graphics)s 7275(objects)s 7992(in)s 8224(carefully)s 0 5262(tested)m
+635(de\207nitions,)s 1772(lik)s 2(e)k 2205(those)s 2786(of)s
+3078(the)s 3446(Diag)s 3985(\207gure)s 4619(dra)s 3(wing)k
+5473(package)s 6334([4)s 6527(,)s 6654(Chapter)s 7492(9],)s
+7818(to)s 8078(be)s 8380(sure)s 8855(of)s 0 4974(a)m 4(v)k 4(oiding)k
+883(these)s 1430(errors.)s 480 4600(PostScript)m 1543(e)s 3(xperts)k
+2302(may)s 2789(\207nd)s 3241(the)s 3610(follo)s 6(wing)k
+4608(information)s 5814(helpful)s 6567(when)s 7164(designing)s 8170(adv)s 6(anced)k
+0 4312(graphics)m 861(features.)s 1780(The)s 2208(left)s 2585(parameter)s
+3599(of)s 220 fnt35 3870 4309(@Gr)m 2(aphic)k 240 fnt82
+4914 4312(may)m 5380(ha)s 4(v)k 3(e)k 5881(tw)s 2(o)k
+6291(parts,)s 6862(separated)s 7822(by)s 220 fnt35 8116 4309(//)m
+240 fnt82 8241 4312(:)m 220 fnt35 480 3804({)m 240 fnt83
+604 3809(\207r)m 2(st)k 1038(part)s 220 fnt35 1501 3804(//)m
+240 fnt83 1686 3809(second)m 2417(part)s 220 fnt35 2880 3804(} @Gr)m 2(aphic)k
+240 fnt83 4058 3809(object)m 240 fnt82 0 3308(If)m 230(there)s
+763(is)s 973(no)s 220 fnt35 1266 3305(//)m 240 fnt82
+1391 3308(,)m 1498(the)s 1846(second)s 2569(part)s 3000(is)s
+3210(tak)s 2(en)k 3783(to)s 4022(be)s 4304(empty)s 15(.)k
+5051(The)s 5479(PostScript)s 6521(output)s 7193(has)s 7563(the)s
+7911(form)s 220 fnt35 480 2851(gsa)m 4(v)k 5(e)k
+240 fnt83 480 2568(x)m 646(y)s 220 fnt35 808 2563(tr)m 2(anslate)k
+240 fnt83 480 2280(Code)m 1039(whic)s 3(h)k 1663(de\207nes)s
+220 fnt35 2383 2275(xsiz)m 3(e)k 240 fnt83 2872 2280(,)m
+220 fnt35 2965 2275(ysiz)m 3(e)k 240 fnt83 3454 2280(,)m
+220 fnt35 3547 2275(xmar)m -3(k)k 240 fnt83 4148 2280(,)m
+220 fnt35 4241 2275(ymar)m -3(k)k 240 fnt83 4842 2280(,)m
+220 fnt35 4935 2275(ft)m 240 fnt83 5053 2280(,)m 220 fnt35
+5146 2275(vs)m 240 fnt83 5359 2280(,)m 5452(and)s 220 fnt35
+5878 2275(sp)m 480 1987(gsa)m 4(v)k 5(e)k 240 fnt83
+480 1704(\207r)m 2(st)k 914(part)s 220 fnt35 480 1411(g)m 2(restore)k
+240 fnt83 480 1128(Code)m 1039(whic)s 3(h)k 1663(r)s 8(ender)k 2(s)k
+2439(the)s 2784(right)s 3313(par)s 3(ameter)k 4372(in)s
+4612(tr)s 3(anslated)k 5645(coor)s 8(dinates)k 480 840(second)m
+1211(part)s 220 fnt35 480 547(g)m 2(restore)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 67 73
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Symbol
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.38.)m 574(@Gr)s 3(aphic)k 240 fnt84
+8831 13840(67)m 240 fnt82 0 13205(where)m 240 fnt83 628 13207(x)m
+240 fnt78 733 13199(,)m 240 fnt83 802 13207(y)m 240 fnt82
+952 13205(is)m 1149(the)s 1485(position)s 2300(of)s 2558(the)s
+2894(lo)s 6(wer)k 3479(left)s 3843(corner)s 4501(of)s
+4759(the)s 5095(base.)s 5671(Ha)s 4(ving)k 6412(tw)s 2(o)k
+6810(parts)s 7312(permits)s 8066(brack)s 2(eting)k 0 12917(operations,)m
+1112(lik)s 2(e)k 220 fnt35 1533 12914(sa)m 4(v)k 5(e)k
+240 fnt82 2049 12917(and)m 220 fnt35 2462 12914(restore)m 240 fnt82
+3206 12917(or)m 220 fnt35 3474 12914(begin)m 240 fnt82 4065 12917(and)m
+220 fnt35 4478 12914(end)m 240 fnt82 4832 12917(,)m 4949(to)s
+5197(enclose)s 5979(an)s 6271(object.)s 7028(See)s 7438(the)s
+7795(source)s 8484(\207le)s 8855(of)s 0 12629(the)m 348(Diag)s
+866(package)s 1706(for)s 2044(e)s 3(xamples.)k 240 fnt84
+0 11836(3.39.)m 591(@PlainGraphic)s 240 fnt82 567 11359(The)m 220 fnt35
+1023 11356(@PlainGr)m 2(aphic)k 240 fnt82 2580 11359(symbol)m 3368(is)s
+3606(a)s 4(v)k 3(ery)k 4211(rudimentary)s 5461(analogue)s
+6408(for)s 6774(plain)s 7337(te)s 3(xt)k 7779(output)s
+8479(of)s 8778(the)s 220 fnt35 0 11068(@Gr)m 2(aphic)k
+240 fnt82 1037 11071(symbol)m 1789(for)s 2119(PostScript)s 3153(output.)s
+3921(Its)s 4202(result)s 4784(is)s 4986(its)s 5254(right)s
+5757(parameter)s 6763(printed)s 7490(on)s 7779(a)s 7937(background)s
+0 10783(created)m 747(by)s 1041(repeated)s 1908(printings)s 2809(of)s
+3080(its)s 3356(left)s 3733(parameter)s 9(,)k 4785(which)s
+5427(must)s 5952(be)s 6234(a)s 6400(simple)s 7093(w)s 2(ord.)k
+7747(F)s 3(or)k 8136(e)s 3(xample,)k 480 10278("." @PlainGraphic 5s @W)m 9(ide)k
+0 9775(w)m 2(ould)k 676(produce)s 1525(\207v)s 3(e)k
+1959(dots.)s 220 fnt35 2544 9772(@PlainGr)m 2(aphic)k 240 fnt82
+4096 9775(is)m 4328(used)s 4847(in)s 5112(the)s 220 fnt35
+5482 9772(tb)m 4(l)k 240 fnt82 5777 9775(table-dra)m 3(wing)k
+7176(package)s 8038(to)s 8299(produce)s 0 9487(plain-te)m 3(xt)k
+972(rules.)s 240 fnt84 0 8694(3.40.)m 591(@IncludeGraphic)s 2491(and)s
+2932(@SysIncludeGraphic)s 240 fnt82 540 8217(These)m 1167(symbols)s 2016(instruct)s
+2792(Lout)s 3304(to)s 3543(incorporate)s 4687(a)s 4853(separately)s
+5875(created)s 6622(illustration:)s 220 fnt35 480 7716(@IncludeGr)m 2(aphic "m)k 3(ypor)k -8(tr)k 2(ait.eps")k
+240 fnt82 0 7218(The)m 457(parameter)s 1500(is)s 1739(implementation-dependent;)s
+4443(in)s 4715(Basser)s 5441(Lout)s 5982(it)s 6203(is)s
+6442(an)s 6754(object)s 7427(whose)s 8124(v)s 6(alue)k
+8721(is)s 8960(a)s 0 6930(simple)m 705(w)s 2(ord)k
+1265(denoting)s 2168(the)s 2528(name)s 3114(of)s 3397(a)s
+3575(\207le.)s 4056(This)s 4544(\207le)s 4917(should)s 5626(ideally)s
+6342(be)s 6636(a)s 6814(PostScript)s 7868(EPS)s 8338(V)s 26(ersion)k
+0 6642(3.0)m 345(\207le)s 696([1)s 870(],)s 1045(since)s
+1582(then)s 2040(Lout)s 2542(will)s 2957(k)s 2(eep)k
+3450(careful)s 4156(track)s 4684(of)s 4944(what)s 5459(resources)s
+6401(are)s 6738(required)s 7581(for)s 7909(printing)s 8708(that)s
+0 6354(\207le.)m 473(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+1437(an)s 3(y)k 1838(PostScript)s 2885(\207le)s 3250(containing)s
+4317(the)s 220 fnt35 4669 6351(%%BoundingBo)m 6(x:)k 240 fnt82
+6464 6354(comment)m 7418(and)s 7826(not)s 8197(requiring)s 0 6066(unusual)m
+800(resources)s 1753(is)s 1963(lik)s 2(ely)k 2559(to)s
+2798(w)s 2(ork.)k 480 5692(The)m 924(result)s 1530(of)s
+220 fnt35 1817 5689(@IncludeGr)m 2(aphic)k 240 fnt82 3584 5692(is)m
+3811(an)s 4110(ordinary)s 4990(Lout)s 5518(object)s 6179(with)s
+6677(marks)s 7328(through)s 8146(its)s 8439(centre.)s 0 5404(It)m
+202(may)s 665(be)s 944(rotated,)s 1711(scaled,)s 2412(and)s
+2813(generally)s 3753(treated)s 4456(lik)s 2(e)k 4865(an)s 3(y)k
+5259(other)s 5807(object.)s 6552(Basser)s 7246(Lout)s 7755(determines)s
+8850(its)s 0 5116(size)m 434(by)s 735(consulting)s 1792(the)s
+2147(bounding)s 3113(box)s 3536(information)s 4728(in)s 4978(the)s
+5333(\207le.)s 5809(If)s 6047(this)s 6450(cannot)s 7155(be)s
+7444(found,)s 8117(a)s 8291(w)s 2(arning)k 0 4828(message)m
+866(is)s 1076(printed)s 1811(and)s 2215(the)s 2563(result)s
+3153(object)s 3797(has)s 4167(zero)s 4631(size.)s 220 fnt35
+480 4451(@IncludeGr)m 2(aphic)k 240 fnt82 2228 4454(searches)m 3085(the)s
+3429(same)s 3973(directories)s 5027(that)s 220 fnt35 5442 4451(@Include)m
+240 fnt82 6421 4454(does)m 6907(\(Section)s 7757(3.42\).)s 220 fnt35
+8416 4451(@Sys)m 240 fnt82 8998 4454(-)m 220 fnt35 0 4163(IncludeGr)m 2(aphic)k
+240 fnt82 1562 4166(is)m 1806(the)s 2188(same)s 2769(as)s
+220 fnt35 3053 4163(@IncludeGr)m 2(aphic)k 240 fnt82 4744 4166(,)m
+4885(e)s 3(xcept)k 5600(that)s 6052(it)s 6278(searches)s
+7172(only)s 7686(the)s 8068(directories)s 0 3878(searched)m 894(by)s
+220 fnt35 1188 3875(@SysInclude)m 240 fnt82 2476 3878(.)m 480 3504(If)m
+720(the)s 1079(\207le)s 1450(name)s 2035(ends)s 2536(in)s
+2789(an)s 3(y)k 3197(of)s 220 fnt35 3478 3501(.gz)m
+240 fnt82 3765 3504(,)m 220 fnt35 3883 3501(-gz)m 240 fnt82
+4182 3504(,)m 220 fnt35 4300 3501(.z)m 240 fnt82 4465 3504(,)m
+220 fnt35 4582 3501(-z)m 240 fnt82 4759 3504(,)m 220 fnt35
+4877 3501(_z)m 240 fnt82 5103 3504(,)m 5220(or)s 220 fnt35
+5490 3501(.Z)m 240 fnt82 5680 3504(,)m 5798(the)s 6156(\207le)s
+6528(will)s 6964(\207rst)s 7406(be)s 7699(uncompressed)s 0 3216(using)m
+565(the)s 220 fnt35 906 3213(gunzip)m 240 fnt82 1597 3216(command)m
+2592(into)s 3010(a)s 3169(temporary)s 4198(\207le)s 4552(called)s
+220 fnt35 5173 3213(lout.eps)m 240 fnt82 5987 3216(in)m 6223(the)s
+6564(current)s 7293(directory)s 15(.)k 8297(This)s 8765(\207le)s
+0 2928(is)m 210(remo)s 3(v)k 3(ed)k 1099(immediately)s
+2347(after)s 2843(it)s 3035(is)s 3245(copied)s 3941(into)s
+4366(the)s 4714(output)s 5386(\207le.)s 240 fnt84 0 2135(3.41.)m
+591(@Pr)s 4(ependGraphic and @SysPr)k 4(ependGraphic)k 240 fnt82 582 1658(These)m
+1252(symbols,)s 2200(which)s 2885(may)s 3394(appear)s 4134(an)s 3(ywhere)k
+5160(that)s 5621(a)s 5830(de\207nition)s 6847(or)s 220 fnt35
+7149 1655(@Use)m 240 fnt82 7857 1658(symbol)m 8660(may)s 0 1370(appear)m 9(,)k
+738(tell)s 1101(Lout)s 1617(to)s 1860(include)s 2624(the)s
+2976(contents)s 3828(of)s 4103(a)s 4273(\207le)s 4637(in)s
+4884(the)s 5236(preamble)s 6185(of)s 6460(its)s 6740(output.)s
+7520(F)s 3(or)k 7913(Basser)s 8614(Lout)s 0 1082(this)m
+418(means)s 1102(that)s 1542(the)s 1912(\207le)s 2295(must)s
+2843(contain)s 3626(PostScript)s 4690(\(and)s 5195(ideally)s 5921(it)s
+6136(w)s 2(ould)k 6813(be)s 3(gin)k 7421(and)s
+7847(end)s 8273(with)s 8778(the)s 220 fnt35 0 791(%%BeginResource)m
+240 fnt82 1941 794(and)m 220 fnt35 2345 791(%%EndResource)m 240 fnt82
+4116 794(comments)m 5150(of)s 5421(DSC)s 5939(3.0\).)s 6482(F)s 3(or)k
+6871(e)s 3(xample,)k 220 fnt35 480 293(@SysPrependGr)m 2(aphic { diagf)k 6(.lpg })k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 68 74
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(68)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(appears)m
+818(at)s 1088(the)s 1474(start)s 1981(of)s 2290(the)s
+2676(Diag)s 3231(package;)s 4165(the)s 4551(\207le)s 220 fnt35
+4949 13202(diagf)m 6(.lpg)k 240 fnt82 5857 13205(contains)m 6743(a)s
+6946(number)s 7775(of)s 8084(PostScript)s 0 12917(de\207nitions)m 1048(used)s
+1532(by)s 1812(Diag)s 2317(for)s 2642(dra)s 3(wing)k
+3462(diagrams.)s 4489(It)s 4680(sa)s 4(v)k 3(es)k
+5229(a)s 5382(lot)s 5680(of)s 5938(space)s 6511(to)s
+6737(include)s 7484(them)s 8008(just)s 8400(once)s 8894(at)s
+0 12629(the)m 334(start)s 789(lik)s 2(e)k 1186(this,)s
+1624(rather)s 2225(than)s 2679(with)s 3146(e)s 6(v)k 3(ery)k
+3708(diagram.)s 220 fnt35 4640 12626(@PrependGr)m 2(aphic)k 240 fnt82
+6498 12629(and)m 220 fnt35 6887 12626(@SysPrependGr)m 2(aphic)k 240 fnt82
+0 12341(search)m 667(for)s 1005(the)s 1353(\207le)s 1714(in)s
+1957(the)s 2305(same)s 2852(places)s 3500(as)s 220 fnt35
+3750 12338(@Include)m 240 fnt82 4732 12341(and)m 220 fnt35 5136 12338(@SysInclude)m
+240 fnt82 6484 12341(respecti)m 6(v)k 3(ely)k 15(.)k
+240 fnt84 0 11548(3.42.)m 591(@Include and @SysInclude)s 240 fnt82 562 11071(These)m
+1212(symbols)s 2083(instruct)s 2882(Lout)s 3417(to)s 3678(temporarily)s
+4869(switch)s 5572(to)s 5834(reading)s 6627(another)s 7426(\207le,)s
+7861(whose)s 8552(name)s 0 10783(appears)m 781(in)s 1024(braces)s
+1685(follo)s 6(wing)k 2662(the)s 3010(symbol.)s 3879(F)s 3(or)k
+4268(e)s 3(xample,)k 220 fnt35 480 10282(@Include { "/usr/lout/f)m 6(ontdefs" })k
+240 fnt82 0 9788(will)m 434(cause)s 1030(the)s 1386(contents)s
+2243(of)s 2522(\207le)s 2892(/usr/lout/fontdefs)s 4596(to)s 4844(be)s
+5134(read)s 5612(at)s 5852(the)s 6209(point)s 6769(it)s
+6970(occurs.)s 7766(After)s 8338(that)s 8765(\207le)s 0 9500(is)m
+214(read,)s 736(the)s 1089(current)s 1829(\207le)s 2194(is)s
+2409(resumed.)s 3387(The)s 3819(included)s 4706(\207le)s 5071(may)s
+5541(contain)s 6307(arbitrary)s 7186(Lout)s 7702(te)s 3(xt,)k
+8169(including)s 0 9212(other)m 220 fnt35 566 9209(@Include)m 240 fnt82
+1564 9212(commands.)m 2780(The)s 3224(\207le)s 3600(is)s 3826(searched)s
+4735(for)s 5089(\207rst)s 5535(in)s 5794(the)s 6157(current)s
+6909(directory)s 15(,)k 7878(then)s 8363(in)s 8621(a)s
+8803(se)s 8998(-)s 0 8924(quence)m 732(of)s 1001(standard)s
+1866(places)s 2512(which)s 3151(are)s 3496(not)s 3859(necessarily)s
+4972(the)s 5318(same)s 5862(places)s 6508(that)s 6923(databases)s
+7888(are)s 8232(searched)s 0 8636(for)m 13(.)k 220 fnt35
+429 8633(@SysInclude)m 240 fnt82 1777 8636(searches)m 2637(the)s 2985(standard)s
+3853(places)s 4501(only)s 15(.)k 240 fnt84 0 7843(3.43.)m
+591(@BackEnd)s 1814(and)s 2255(the)s 2629(PlainT)s 22(ext)k
+3663(and)s 4104(PDF)s 4623(back)s 5172(ends)s 240 fnt82
+547 7411(The)m 220 fnt35 983 7408(@Bac)m 4(kEnd)k 240 fnt82
+2136 7411(symbol,)m 2955(which)s 3605(tak)s 2(es)k 4153(no)s
+4454(parameters,)s 5615(has)s 5993(for)s 6339(its)s 6623(result)s
+7220(a)s 7394(string)s 7999(naming)s 8778(the)s 0 7123(back)m
+523(end)s 938(currently)s 1865(in)s 2119(use.)s 2613(Three)s
+3237(back)s 3761(ends)s 4262(are)s 4620(a)s 4(v)k 6(ailable,)k
+5590(PostScript,)s 6690(PDF)s 7198(and)s 7613(PlainT)s 16(e)k 3(xt.)k
+8698(The)s 0 6835(symbol)m 760(is)s 970(generally)s 1913(used)s
+2410(lik)s 2(e)k 2822(this:)s 220 fnt35 480 6334(@Bac)m 4(kEnd @Case {)k
+480 6046( PlainT)m 26(e)k 6(xt @Y)k 4(ield { ...)k 13( })k
+480 5758( P)m 11(ostScr)k -3(ipt @Y)k 4(ield { ...)k 13( })k
+480 5470( PDF @Y)m 4(ield { ...)k 13( })k 480 5182(})m 240 fnt82
+0 4688(to)m 255(obtain)s 926(dif)s 6(ferent)k 1817(objects)s
+2561(depending)s 3628(on)s 3941(the)s 4305(back)s 4834(end.)s
+5360(No)s 220 fnt35 5722 4685(else)m 240 fnt82 6192 4688(is)m
+6418(required)s 7288(since)s 7851(these)s 8414(are)s 8778(the)s
+0 4400(only)m 480(possible)s 1320(v)s 6(alues.)k 480 4026(When)m
+1101(a)s 220 fnt35 1259 4023(@Case)m 240 fnt82 2037 4026(symbol)m
+2789(has)s 220 fnt35 3151 4023(@Bac)m 4(kEnd)k 240 fnt82
+4287 4026(for)m 4617(its)s 4885(left)s 5253(parameter)s 6259(and)s
+6655(the)s 6994(left)s 7363(parameter)s 8369(of)s 8631(each)s
+220 fnt35 0 3735(@Y)m 4(ield)k 240 fnt82 768 3738(symbol)m
+1544(within)s 2228(it)s 2435(consists)s 3259(of)s 3546(a)s
+3728(sequence)s 4676(of)s 4963(one)s 5381(or)s 5656(more)s
+6218(literal)s 6844(w)s 2(ords)k 7494(\(including)s 220 fnt35
+8546 3735(else)m 240 fnt82 8940 3738(\),)m 0 3450(Lout)m 531(will)s
+976(optimize)s 1888(by)s 2201(e)s 6(v)k 6(aluating)k
+3258(the)s 220 fnt35 3625 3447(@Case)m 240 fnt82 4432 3450(symbol)m
+5211(at)s 5463(the)s 5830(time)s 6330(it)s 6541(is)s
+6771(read.)s 7365(This)s 7861(optimization)s 0 3162(ensures)m 789(that)s
+1228(there)s 1782(is)s 2013(only)s 2514(a)s 2701(small)s
+3294(once-only)s 4326(performance)s 5610(penalty)s 6389(for)s 6748(multiple)s
+7621(back)s 8155(ends,)s 8722(and)s 0 2874(it)m 206(permits)s
+987(these)s 220 fnt35 1548 2871(@Case)m 240 fnt82 2350 2874(symbols)m
+3213(\(b)s 4(ut)k 3668(no)s 3976(other)s 4541(symbols\))s
+5481(to)s 5734(appear)s 6446(within)s 7128(the)s 7490(object)s
+8149(follo)s 6(wing)k 220 fnt35 0 2583(@Include)m 240 fnt82
+982 2586(and)m 220 fnt35 1386 2583(@PrependGr)m 2(aphic)k 240 fnt82
+3259 2586(symbols.)m 480 2212(The)m 918(PlainT)s 16(e)k 3(xt)k
+1899(back)s 2423(end)s 2837(dif)s 6(fers)k 3515(from)s
+4050(the)s 4409(PostScript)s 5461(one)s 5874(in)s 6128(tw)s 2(o)k
+6548(main)s 7094(respects.)s 8038(First,)s 8593(there)s 0 1924(is)m
+226(ef)s 6(fecti)k 6(v)k 3(ely)k 1302(just)s
+1724(one)s 2143(font:)s 2711(although)s 3622(all)s 3932(the)s
+4297(font)s 4759(commands)s 5864(w)s 2(ork)k 6431(e)s 3(xactly)k
+7189(as)s 7456(usual,)s 8085(the)s 3(y)k 8565(don')s 4(t)k
+0 1636(actually)m 817(change)s 1558(an)s 3(ything.)k 2565(Each)s
+3107(character)s 4049(in)s 4299(this)s 4702(font)s 5155(is)s
+5372(tak)s 2(en)k 5953(to)s 6199(be)s 6488(one)s
+6898(tenth)s 7440(of)s 7719(one)s 8128(inch)s 8605(wide)s
+0 1348(and)m 404(20)s 699(points)s 1335(high.)s 1925(Second,)s
+2737(the)s 3085(output)s 3757(is)s 3967(an)s 4250(ordinary)s
+5114(te)s 3(xt)k 5529(\207le,)s 5941(not)s 6307(a)s
+6473(PostScript)s 7515(\207le.)s 480 974(Clearly)m 15(,)k 1306(with)s
+1820(ordinary)s 2716(te)s 3(xt)k 3162(output)s 3866(the)s
+4246(possibility)s 5327(of)s 5630(adv)s 6(anced)k 6618(graphics)s
+7510(features)s 8348(such)s 8876(as)s 0 686(rotation)m 829(and)s
+1262(scaling)s 2022(is)s 2261(curtailed.)s 3290(Ne)s 6(v)k 3(ertheless,)k
+4651(all)s 4974(symbols)s 5852(ha)s 4(v)k 3(e)k
+6383(well-de\207ned)s 7665(\(possibly)s 8626(null\))s 0 398(ef)m 6(fects)k
+706(in)s 976(the)s 1351(PlainT)s 16(e)k 3(xt)k
+2348(back)s 2888(end,)s 3368(so)s 3661(there)s 4221(is)s
+4457(no)s 4777(additional)s 5815(danger)s 6553(of)s 6851(crashing)s
+7741(the)s 8116(system)s 8867(or)s 0 110(obtaining)m 957(grossly)s
+1702(unreasonable)s 3020(output)s 3692(by)s 3986(a)s 4152(change)s
+4886(to)s 5125(PlainT)s 16(e)k 3(xt.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 69 75
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(3.43.)m 574(@Bac)s 4(kEnd)k 1720(and)s
+2146(the)s 2491(PlainT)s 22(e)k 4(xt)k 3458(and)s
+3884(PDF)s 4417(bac)s 4(k)k 4929(ends)s 240 fnt84
+8832 13840(69)m 240 fnt82 480 13249(The)m 905(PlainT)s 16(e)k 3(xt)k
+1872(back)s 2382(end)s 2783(is)s 2990(obtained)s 3869(by)s
+4160(the)s 220 fnt35 4505 13246(-p)m 240 fnt82 4749 13249(option)m
+5415(to)s 5651(Basser)s 6345(Lout.)s 6958(The)s 7383(character)s
+8314(size)s 8737(can)s 0 12961(be)m 282(changed)s 1138(by)s
+1432(adding)s 2137(tw)s 2(o)k 2547(lengths)s 3289(to)s
+3528(the)s 220 fnt35 3876 12958(-p)m 240 fnt82 4123 12961(option,)m
+4842(lik)s 2(e)k 5254(this:)s 220 fnt35 480 12464(lout -p0.1i12p ...)m
+240 fnt82 0 11968(which)m 650(in)s 9(v)k 4(ok)k 2(es)k
+1439(the)s 1795(PlainT)s 16(e)k 3(xt)k 2773(back)s
+3294(end)s 3706(with)s 4196(each)s 4699(character)s 5641(being)s
+6234(0.1)s 6577(inches)s 7247(wide)s 7776(and)s 8188(12)s
+8490(points)s 0 11680(high.)m 595(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+1561(e)s 3(xperience)k 2655(suggests)s 3523(that)s 3947(the)s
+4301(best)s 4752(approach)s 5691(is)s 5907(to)s 6152(de\207ne)s
+6799(all)s 7098(horizontal)s 8128(lengths)s 8876(as)s 0 11392(multiples)m
+943(of)s 1218(the)s 220 fnt35 1569 11389(s)m 240 fnt82
+1736 11392(unit)m 2171(\(the)s 2602(width)s 3208(of)s 3482(a)s
+3652(space,)s 4293(hence)s 4911(the)s 5262(width)s 5868(of)s
+6143(all)s 6439(characters\))s 7538(and)s 7945(to)s 8188(de\207ne)s
+8833(all)s 0 11104(v)m 3(ertical)k 777(lengths)s 1530(as)s
+1791(multiples)s 2742(of)s 3023(the)s 220 fnt35 3382 11101(f)m
+240 fnt82 3511 11104(unit)m 3954(\(the)s 4391(font)s 4847(size,)s
+5336(equal)s 5920(to)s 6169(the)s 6528(height)s 7197(of)s
+7479(e)s 6(v)k 3(ery)k 8066(character\),)s 0 10816(and)m
+404(not)s 770(to)s 1009(change)s 1743(the)s 2091(character)s
+3025(size)s 3452(in)s 3695(the)s 4043(command)s 5045(line.)s
+480 10442(There)m 1098(is)s 1314(a)s 220 fnt35 1486 10439(-P)m
+240 fnt82 1762 10442(option)m 2437(which)s 3085(is)s 3301(identical)s
+4184(with)s 4671(the)s 220 fnt35 5025 10439(-p)m 240 fnt82
+5278 10442(option)m 5953(e)s 3(xcept)k 6640(that)s 7064(it)s
+7262(inserts)s 7942(a)s 8114(form-feed)s 0 10154(character)m 934(between)s
+1788(each)s 2283(tw)s 2(o)k 2693(components)s 3901(of)s
+4172(the)s 4520(output,)s 5239(b)s 4(ut)k 5601(not)s
+5967(before)s 6633(the)s 6981(\207rst)s 7412(or)s 7671(after)s
+8167(the)s 8515(last.)s 480 9780(The)m 911(PDF)s 1412(back)s
+1928(end)s 2336(is)s 2549(obtained)s 3435(by)s 3732(typing)s
+220 fnt35 4401 9777(lout -Z)m 240 fnt82 5017 9780(.)m 5185(It)s
+5393(is)s 5607(similar)s 6332(to)s 6575(PostScript)s 7620(b)s 4(ut)k
+7986(much)s 8579(more)s 0 9492(limited)m 755(in)s 1019(functionality)s 15(.)k
+2411(Consult)s 3237(a)s 3425(separate)s 4284(document)s 5309(distrib)s 4(uted)k
+6407(with)s 6910(Lout)s 7444(for)s 7803(further)s 8534(infor)s
+8998(-)s 0 9204(mation.)m 240 fnt84 0 8461(3.44.)m 591(@V)s 24(erbatim and @RawV)k 24(erbatim)k
+240 fnt82 543 8029(These)m 1173(symbols)s 2026(instruct)s 2805(Lout)s
+3321(to)s 3563(read)s 4036(the)s 4387(follo)s 6(wing)k
+5367(te)s 3(xt)k 5786(\(enclosed)s 6763(in)s 7010(braces\))s
+7751(v)s 3(erbatim,)k 8708(that)s 0 7741(is,)m 266(turning)s
+1010(of)s 6(f)k 1354(all)s 1647(special)s 2365(character)s
+3299(meanings.)s 4380(F)s 3(or)k 4769(e)s 3(xample,)k
+220 fnt35 480 7240(@V)m 17(erbatim { "hello" })k 240 fnt82 0 6746(produces)m
+480 6243("hello")m 220 fnt35 0 5787(@V)m 17(erbatim)k 240 fnt82
+1178 5790(ignores)m 1983(all)s 2325(characters)s 3393(after)s 3938(the)s
+4336(opening)s 5210(brace)s 5833(up)s 6175(to)s 6464(b)s 4(ut)k
+6875(not)s 7291(including)s 8297(the)s 8695(\207rst)s 0 5502(non-white-space)m
+1654(character)s 13(.)k 220 fnt35 2697 5499(@Ra)m 4(wV)k 17(erbatim)k
+240 fnt82 4278 5502(dif)m 6(fers)k 4964(from)s 220 fnt35
+5506 5499(@V)m 17(erbatim)k 240 fnt82 6653 5502(only)m 7151(in)s
+7413(that)s 7849(it)s 8059(ignores)s 8833(all)s 0 5214(characters)m
+1018(after)s 1514(the)s 1862(opening)s 2687(brace)s 3261(up)s
+3554(to)s 3793(b)s 4(ut)k 4155(not)s 4521(including)s
+5479(the)s 5827(\207rst)s 6258(non-white-space)s 7894(character)s 9(,)k
+8867(or)s 0 4926(up)m 302(to)s 551(and)s 965(including)s
+1931(the)s 2289(\207rst)s 2730(ne)s 6(wline)k 3547(character)s 9(,)k
+4528(whiche)s 6(v)k 3(er)k 5585(comes)s 6257(\207rst.)s
+6802(This)s 7287(v)s 6(ariant)k 8014(is)s 8234(useful)s
+8883(in)s 0 4638(cases)m 555(such)s 1051(as)s 220 fnt35
+480 4187(@Ra)m 4(wV)k 17(erbatim {)k 480 3899( v)m 5(ar x:)k 11( Real)k
+480 3611(begin)m 480 3323(})m 240 fnt82 0 2829(where)m 662(the)s
+1033(\207rst)s 1486(line)s 1923(of)s 2217(the)s 2587(v)s 3(erbatim)k
+3516(te)s 3(xt)k 3954(be)s 3(gins)k 4649(with)s
+5154(white)s 5763(space)s 6373(which)s 7038(w)s 2(ould)k
+7715(be)s 8020(ignored)s 8832(by)s 220 fnt35 0 2538(@V)m 17(erbatim)k
+240 fnt82 1069 2541(.)m 1232(Both)s 1754(symbols)s 2602(ignore)s
+3268(all)s 3560(white)s 4146(spaces)s 4820(at)s 5051(the)s
+5398(end)s 5801(of)s 6071(the)s 6418(v)s 3(erbatim)k
+7323(te)s 3(xt,)k 7784(preceding)s 8778(the)s 0 2253(closing)m
+744(brace.)s 240 fnt84 0 1460(3.45.)m 591(@Underline)s 240 fnt82
+533 1028(The)m 220 fnt35 953 1025(@Under)m -3(line)k 240 fnt82
+2160 1028(symbol)m 2912(underlines)s 3951(its)s 4219(right)s 4722(parameter)s 9(,)k
+5767(b)s 4(ut)k 6121(only)s 6593(if)s 6802(that)s
+7212(parameter)s 8218(is)s 8420(a)s 8578(w)s 2(ord)k
+0 740(or)m 259(a)s 425(paragraph:)s 220 fnt35 480 239(W)m 6(e @Under)k -3(line { really do } mean this)k 3(.)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 70 76
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(70)m 240 fnt83 6081 13843(Chapter)m 6931(3.)s
+7205(Pr)s 8(ede\207ned)k 8300(symbols)s 240 fnt82 0 13205(produces)m
+480 12702(W)m 19(e)k 849(really)s 849 1679 12678 12 ul
+1446(do)s 1739(mean)s
+2314(this.)s 0 12199(It)m 204(is)s 412(not)s 776(possible)s
+1614(to)s 1851(underline)s 2808(an)s 3089(arbitrary)s 3962(object)s
+4604(using)s 5174(this)s 5568(symbol;)s 6383(the)s 220 fnt35
+6729 12196(@Under)m -3(line)k 240 fnt82 7942 12199(symbol)m 8700(will)s
+0 11911(be)m 282(ignored)s 1071(if)s 1288(this)s 1684(is)s
+1894(attempted.)s 480 11537(It)m 731(is)s 987(v)s 3(ery)k
+1509(easy)s 2034(to)s 240 fnt83 2319 11539(de\207ne)m 240 fnt82
+2990 11537(a)m 3202(symbol)s 4008(which)s 4696(will)s 5168(underline)s
+6173(an)s 6502(arbitrary)s 7423(object,)s 8160(using)s 8778(the)s
+220 fnt35 0 11246(@Gr)m 2(aphic)k 240 fnt82 1045 11249(symbol.)m
+1915(This)s 2393(raises)s 2988(the)s 3337(question)s 4207(of)s
+4479(wh)s 1(y)k 220 fnt35 4946 11246(@Under)m -3(line)k
+240 fnt82 6163 11249(is)m 6374(needed)s 7111(at)s 7345(all.)s
+7748(The)s 8177(answer)s 8916(is)s 0 10961(that)m 220 fnt35
+418 10958(@Under)m -3(line)k 240 fnt82 1633 10961(has)m 2003(tw)s 2(o)k
+2413(properties)s 3419(that)s 3837(distinguish)s 4944(it)s 5136(from)s
+5660(symbols)s 6509(based)s 7112(on)s 220 fnt35 7409 10958(@Gr)m 2(aphic)k
+240 fnt82 8393 10961(.)m 480 10587(First,)m 1021(when)s 220 fnt35
+1594 10584(@Under)m -3(line)k 240 fnt82 2806 10587(both)m 3286(contains)s
+4130(a)s 4293(paragraph)s 5303(and)s 5704(is)s 5911(used)s
+6404(within)s 7069(a)s 7232(paragraph,)s 8292(as)s 8539(in)s
+8778(the)s 0 10299(e)m 3(xample)k 875(abo)s 3(v)k 3(e,)k
+1561(the)s 1921(inner)s 2485(and)s 2901(outer)s 3465(paragraphs)s
+4577(are)s 4937(mer)s 4(ged)k 5720(into)s 6158(one,)s
+6623(permitting)s 7684(the)s 8045(underlined)s 0 10011(te)m 3(xt)k
+412(to)s 647(break)s 1236(o)s 3(v)k 3(er)k
+1711(se)s 6(v)k 3(eral)k 2430(lines.)s 3041(This)s
+3513(is)s 3720(ho)s 6(w)k 4177(the)s 220 fnt35
+4522 10008(@F)m 6(ont)k 240 fnt82 5230 10011(symbol)m 5986(w)s 2(orks)k
+6617(too,)s 7026(b)s 4(ut)k 7385(symbols)s 8230(based)s
+8829(on)s 220 fnt35 0 9720(@Gr)m 2(aphic)k 240 fnt82
+1044 9723(do)m 1337(not)s 1703(permit)s 2386(this)s 2782(mer)s 4(ging.)k
+480 9349(Second,)m 1292(Adobe)s 1987(font)s 2432(\207les)s 2881(specify)s
+3625(the)s 3973(correct)s 4694(position)s 5522(and)s 5926(thickness)s
+6867(of)s 7138(underlining)s 8294(for)s 8631(each)s 0 9061(font,)m
+501(and)s 914(the)s 220 fnt35 1272 9058(@Under)m -3(line)k
+240 fnt82 2496 9061(symbol)m 3266(follo)s 6(ws)k 4037(these)s
+4593(speci\207cations.)s 6068(The)s 6505(font)s 6960(used)s 7466(is)s
+7685(the)s 8043(font)s 8497(of)s 8778(the)s 0 8773(\207rst)m
+431(object)s 1075(underlined,)s 2205(if)s 2422(it)s 2614(is)s
+2824(a)s 2990(simple)s 3683(w)s 2(ord,)k 4280(or)s
+4539(else)s 4966(the)s 5314(font)s 5759(of)s 6030(the)s
+6378(enclosing)s 7348(paragraph.)s 240 fnt84 0 7980(3.46.)m 591(@P)s 2(ageLabel)k
+240 fnt82 533 7503(The)m 220 fnt35 953 7500(@P)m 8(ageLabel)k
+240 fnt82 2255 7503(symbol)m 3007(associates)s 4005(a)s 4164(page)s
+4664(label)s 5176(in)s 5411(the)s 5751(PostScript)s 6786(output)s
+7450(\207le)s 7804(with)s 8278(the)s 8618(page)s 0 7215(within)m
+688(which)s 1350(\(or)s 1708(just)s 2133(before)s 2819(which\))s
+3552(the)s 3920(symbol)s 4700(occurs,)s 5451(so)s 5737(that)s
+6175(PostScript)s 7237(vie)s 6(wers)k 8045(are)s 8412(able)s
+8887(to)s 0 6927(inde)m 3(x)k 587(the)s 939(page)s
+1450(by)s 1748(this)s 2148(label.)s 2779(\(The)s 3290(label)s
+3813(is)s 4026(printed)s 4765(in)s 5011(the)s 220 fnt35
+5363 6924(%%P)m 8(age)k 240 fnt82 6313 6927(comment)m 7266(preceding)s
+8266(the)s 8618(page)s 0 6639(in)m 243(the)s 591(PostScript)s
+1633(output)s 2305(\207le.\))s 2858(F)s 3(or)k 3247(e)s 3(xample,)k
+220 fnt35 480 6138(@P)m 8(ageLabel iv)k 240 fnt82 0 5639(associates)m
+1018(the)s 1379(label)s 220 fnt35 1910 5636(iv)m 240 fnt82
+2140 5639(with)m 2634(the)s 2995(page.)s 3623(The)s 4064(label)s
+4595(may)s 5074(be)s 5368(an)s 5664(arbitrary)s 6551(object;)s
+7260(if)s 7489(its)s 7778(v)s 6(alue)k 8358(is)s
+8581(not)s 8960(a)s 0 5351(simple)m 693(w)s 2(ord,)k
+1290(it)s 1482(will)s 1908(be)s 2190(replaced)s 3057(by)s
+220 fnt35 3351 5348(?)m 240 fnt82 3459 5351(.)m 220 fnt35
+480 4974(@P)m 8(ageLabel)k 240 fnt82 1799 4977(is)m 2019(unrelated)s
+2977(to)s 3226(Lout')s 13(s)k 3899(cross)s 4451(referencing)s
+5602(mechanism;)s 6813(it)s 7016(is)s 7236(for)s 7585(communicating)s
+0 4689(a)m 176(label)s 706(to)s 956(the)s 1315(PostScript)s
+2368(output)s 3051(\207le,)s 3474(not)s 3851(to)s 4101(other)s
+4662(parts)s 5188(of)s 5470(Lout.)s 6097(The)s 6536(result)s
+7137(of)s 220 fnt35 7419 4686(@P)m 8(ageLabel)k 240 fnt82
+8739 4689(is)m 8960(a)s 0 4401(null)m 427(object.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 71 77
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+480 fnt84 0 12955(Chapter)m 1819(4.)s 2400(Examples)s 240 fnt82
+0 12004(This)m 503(chapter)s 1294(presents)s 2156(some)s 2744(e)s 3(xamples)k
+3723(tak)s 2(en)k 4324(from)s 4875(the)s 5251(v)s 6(arious)k
+6028(packages)s 6983(a)s 4(v)k 6(ailable)k 7919(with)s
+8429(Basser)s 0 11716(Lout.)m 661(The)s 1134(reader)s 1835(who)s
+2346(masters)s 3171(these)s 3763(e)s 3(xamples)k 4759(will)s
+5230(be)s 5557(well)s 6068(prepared)s 7007(to)s 7291(read)s
+7805(the)s 8198(packages)s 0 11428(themselv)m 3(es.)k 1223(The)s
+1650(e)s 3(xamples)k 2600(ha)s 4(v)k 3(e)k
+3100(not)s 3465(been)s 3973(simpli\207ed)s 4986(in)s 5229(an)s 3(y)k
+5625(w)s 2(ay)k 15(,)k 6113(since)s 6659(an)s
+6941(important)s 7929(part)s 8359(of)s 8629(their)s 0 11140(purpose)m
+814(is)s 1024(to)s 1263(sho)s 6(w)k 1817(Lout)s
+2329(in)s 2572(actual)s 3197(practice.)s 240 fnt84 0 10347(4.1.)m
+471(An)s 833(equation)s 1779(f)s 6(ormatting)k 2930(package)s
+240 fnt82 480 9870(In)m 751(this)s 1162(section)s 1911(we)s
+2261(describe)s 3128(the)s 3491(design)s 4189(and)s 4608(implementation)s
+6180(of)s 6466(the)s 6829(Eq)s 7168(equation)s 8065(formatting)s
+0 9582(package.)m 976(Equation)s 1925(formatting)s 3014(mak)s 2(es)k
+3702(a)s 3896(natural)s 4642(\207rst)s 5101(e)s 3(xample,)k
+6043(partly)s 6682(because)s 7523(its)s 7828(requirements)s 0 9294(ha)m 4(v)k 3(e)k
+514(strongly)s 1366(in\210uenced)s 2435(the)s 2797(design)s 3493(of)s
+3778(Lout,)s 4351(and)s 4769(partly)s 5394(because)s 6221(no)s
+6528(cross)s 7084(references)s 8129(or)s 8402(g)s 1(alle)k 3(ys)k
+0 9006(are)m 347(required.)s 480 8632(T)m 19(o)k 777(the)s
+1122(author')s 13(s)k 1939(kno)s 6(wledge,)k 3088(Eq)s
+3409(is)s 3615(the)s 3960(\207rst)s 4388(equation)s 5265(formatter)s
+6209(to)s 6445(be)s 6723(implemented)s 8026(as)s 8273(a)s
+8435(collec)s 8998(-)s 0 8344(tion)m 430(of)s 702(high-)s
+1196(le)s 6(v)k 3(el)k 1707(de\207nitions.)s 2883(This)s
+3360(approach)s 4295(has)s 4666(signi\207cant)s 5724(adv)s 6(antages:)k
+6948(the)s 7297(basics)s 7933(of)s 8206(language)s 0 8056(and)m
+426(layout)s 1106(are)s 1475(tri)s 6(vial,)k 2167(so)s
+2456(the)s 2826(implementor)s 4129(can)s 4540(concentrate)s 5720(on)s
+6039(\207ne-)s 6466(tuning;)s 7212(and)s 7638(the)s 8009(de\207nitions,)s
+0 7768(being)m 585(readily)s 1302(a)s 4(v)k 6(ailable,)k
+2261(can)s 2650(be)s 2932(impro)s 3(v)k 3(ed,)k
+3950(e)s 3(xtended,)k 4918(or)s 5177(e)s 6(v)k 3(en)k
+5677(replaced.)s 480 7394(As)m 808(described)s 1793(in)s 2048(the)s
+2407(User')s 13(s)k 3079(Guide)s 3732([4)s 3925(],)s
+4122(an)s 4416(equation)s 5309(is)s 5530(entered)s 6302(in)s
+6557(a)s 6734(format)s 7441(based)s 8056(on)s 8364(the)s
+8724(one)s 0 7106(introduced)m 1081(by)s 1375(the)s 1723(eqn)s
+2126(language)s 3046(of)s 3317(K)s 6(ernighan)k 4378(and)s
+4782(Cherry)s 5500([2)s 5693(]:)s 220 fnt35 480 6605(@Eq { { x sup 2 + y sup 2 } o)m 3(v)k 5(er 2 })k
+240 fnt82 0 6107(The)m 428(result)s 1018(is)s 168 fnt78
+586 5702(2)m 240 fnt83 480 5642(x)m 240 fnt78 738 5634(+)m
+168 fnt78 1041 5702(2)m 240 fnt83 939 5642(y)m 641 0 0 0 240 288 12 480 5544 LoutGr2
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+240 fnt78
+743 5316(2)m 240 fnt82 0 4805(In)m 256(outline,)s 1027(the)s
+1375(de\207nition)s 2349(of)s 2620(the)s 220 fnt35 2968 4802(@Eq)m
+240 fnt82 3506 4805(symbol)m 4266(is)s 220 fnt35 480 4308(e)m 6(xpor)k -8(t sup o)k 3(v)k 5(er "+" "2" "<=")k
+480 4020(def @Eq)m 480 3732( body @Body)m 480 3444({)m 480 3156( def sup precedence 60 left x r)m -3(ight y { ...)k 13( })k
+480 2868( def o)m 3(v)k 5(er precedence 54 left x r)k -3(ight y { ...)k 13( })k
+480 2580( def "2" { Base @F)m 6(ont "2" })k 480 2292( def "+" { {Symbol Base} @F)m 6(ont "+" })k 480 2004( def "<=" { {Symbol Base} @F)m 6(ont "\\243" })k
+480 1716( ...)m 480 1140( Slope @F)m 6(ont 1.2f @Break 0c @Space @Body)k 480 852(})m 192 fnt84
+4442 0(71)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 72 78
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(72)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 240 fnt82 0 13205(A)m 259(body)s 822(parameter)s
+1865(is)s 2104(used)s 2630(to)s 2898(restrict)s 3649(the)s
+4026(visibility)s 4958(of)s 5258(the)s 5635(equation)s 6545(formatting)s
+7635(symbols)s 8514(\(there)s 0 12917(are)m 366(hundreds)s 1315(of)s
+1606(them\).)s 2347(The)s 2794(equation)s 3695(as)s 3965(a)s
+4151(whole)s 4811(is)s 5041(set)s 5386(in)s 5649(Slope)s
+6269(\(i.e.)s 6704(Italic\))s 7341(font,)s 7853(and)s 8277(symbols)s
+0 12629(such)m 515(as)s 220 fnt35 784 12626("2")m 240 fnt82
+1127 12629(and)m 220 fnt35 1550 12626("+")m 240 fnt82 1899 12629(are)m
+2265(de\207ned)s 3048(when)s 3643(other)s 4213(fonts)s 4762(are)s
+5128(needed.)s 5990(Precedences)s 7241(are)s 7608(used)s 8124(to)s
+8383(resolv)s 3(e)k 0 12341(ambiguities)m 1170(such)s 1670(as)s
+220 fnt35 1925 12338(a sup b o)m 3(v)k 5(er c)k 240 fnt82
+3291 12341(.)m 3459(Eq)s 3788(tak)s 2(es)k 4332(all)s
+4630(spacing)s 5418(decisions)s 6363(on)s 6665(itself,)s 7252(so)s
+7523(to)s 7766(pre)s 6(v)k 3(ent)k 8539(white)s
+0 12053(space)m 574(typed)s 1151(by)s 1432(the)s 1767(user)s
+2212(from)s 2723(interfering,)s 3824(the)s 4158(equation)s 5026(is)s
+5223(enclosed)s 6105(in)s 220 fnt35 6335 12050(0c @Space)m 240 fnt82
+7465 12053(.)m 7616(W)s 19(e)k 7972(will)s 8384(discuss)s
+0 11765(the)m 220 fnt35 348 11762(1.2f @Break)m 240 fnt82 1631 11765(later)m 13(.)k
+480 11391(Thus)m 1015(ha)s 4(v)k 3(e)k 1521(we)s
+1861(disposed)s 2762(of)s 3038(the)s 3391(language)s 4316(design)s
+5003(part)s 5439(of)s 5715(the)s 6068(equation)s 6954(formatting)s
+8020(problem;)s 8934(it)s 0 11103(remains)m 807(no)s 6(w)k
+1268(to)s 1507(de\207ne)s 2148(the)s 2496(twenty)s 3201(or)s
+3460(so)s 3726(symbols)s 4575(with)s 5057(parameters,)s 6211(and)s
+6615(get)s 6967(the)s 7315(layout)s 7973(right.)s 480 10729(Ev)m 3(ery)k
+1115(equation)s 2010(has)s 2393(an)s 240 fnt83 2690 10731(axis)m
+240 fnt82 3070 10729(:)m 3250(an)s 3546(imaginary)s 4583(horizontal)s
+5620(line)s 6048(through)s 6864(the)s 7225(centre)s 7878(of)s
+8163(v)s 6(ariables,)k 0 10441(through)m 795(the)s 1136(bar)s
+1494(of)s 1757(b)s 4(uilt-up)k 2556(fractions,)s 3491(and)s
+3888(so)s 4146(on.)s 4543(W)s 19(e)k 4905(can)s
+5287(satisfy)s 5956(this)s 6345(requirement)s 7552(by)s 7839(ensuring)s
+8708(that)s 0 10153(the)m 362(result)s 966(of)s 1251(each)s
+1761(symbol)s 2535(has)s 2919(a)s 3100(single)s 3741(ro)s 6(w)k
+4175(mark,)s 4788(on)s 5099(the)s 5461(axis.)s 6025(F)s 3(or)k
+6428(e)s 3(xample,)k 7356(the)s 7719(superscripting)s 0 9865(symbol)m
+760(is)s 970(de\207ned)s 1733(as)s 1983(follo)s 6(ws:)k
+220 fnt35 480 9366(def sup)m 480 9078( precedence 60)m 480 8790( associativity left)m 480 8502( left x)m
+480 8214( named gap { @SupGap })m 480 7926( r)m -3(ight y)k 480 7638({)m 480 7350( @HContr)m 2(act @VContr)k 2(act {)k
+480 7062( | @Smaller y)m 480 6774( ^/gap x)m 480 6486( })m 480 6198(})m 240 fnt82
+0 5704(The)m 220 fnt35 430 5701(@VContr)m 2(act)k 240 fnt82
+1684 5704(and)m 220 fnt35 2091 5701(^/)m 240 fnt82 2320 5704(symbols)m
+3171(together)s 4017(ensure)s 4699(that)s 5119(the)s 5470(axis)s
+5908(of)s 6181(the)s 6532(result)s 7124(is)s 7336(the)s
+7687(axis)s 8125(of)s 8398(the)s 8749(left)s 0 5416(parameter)m 13(.)k
+1119(A)s 220 fnt35 1363 5413(gap)m 240 fnt82 1795 5416(parameter)m
+2823(has)s 3207(been)s 3730(pro)s 3(vided)k 4650(for)s
+5002(v)s 6(arying)k 5794(the)s 6156(height)s 6828(of)s
+7113(the)s 7475(superscript,)s 8644(with)s 0 5128(def)m 2(ault)k
+709(v)s 6(alue)k 220 fnt35 1265 5125(@SupGap)m 240 fnt82
+2393 5128(de\207ned)m 3144(else)s 6(where)k 4137(as)s 220 fnt35
+4375 5125(0.40fk)m 240 fnt82 4973 5128(.)m 5124(It)s 5317(is)s
+5515(important)s 6492(that)s 6898(such)s 7382(g)s 1(aps)k
+7859(be)s 8128(e)s 3(xpressed)k 0 4840(in)m 232(units)s
+736(that)s 1142(v)s 6(ary)k 1603(with)s 2073(the)s
+2410(font)s 2843(size,)s 3309(so)s 3563(that)s 3969(the)s 3(y)k
+4420(remain)s 5129(correct)s 5839(when)s 6403(the)s 6739(size)s
+7154(changes.)s 8077(Collecting)s 0 4552(the)m 351(def)s 2(ault)k
+1076(v)s 6(alues)k 1735(into)s 2164(symbols)s 3016(lik)s 2(e)k
+220 fnt35 3432 4549(@SupGap)m 240 fnt82 4515 4552(ensures)m 5287(consistenc)s 3(y)k
+6457(and)s 6865(assists)s 7529(when)s 8109(tuning)s 8778(the)s
+0 4264(v)m 6(alues.)k 769(Here)s 1289(is)s 1499(another)s
+2276(characteristic)s 3600(de\207nition:)s 220 fnt35 480 3814(def o)m 3(v)k 5(er)k
+480 3526( precedence 54)m 480 3238( associativity left)m 480 2950( left x)m 480 2662( named gap { 0.2f })m 480 2374( r)m -3(ight y)k
+480 2086({)m 480 1798( @HContr)m 2(act @VContr)k 2(act {)k 480 1510( |0.5r)m -8(t @OneCol x)k
+480 1222( ^//gap @HLine)m 480 934( //gap |0.5r)m -8(t @OneCol y)k 480 646( })m 480 358(})m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 73 79
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(4.1.)m 454(An)s 774(equation)s 1666(formatting)s
+2730(pac)s 4(ka)k 2(g)k 2(e)k 240 fnt84
+8833 13840(73)m 240 fnt82 0 13205(Both)m 518(parameters)s 1611(are)s
+1953(centred,)s 2758(since)s 3299(we)s 3629(do)s 3917(not)s
+4278(kno)s 6(w)k 4853(which)s 5490(will)s 5911(be)s
+6188(the)s 6530(wider;)s 7181(we)s 7511(use)s 220 fnt35
+7881 13202(@OneCol)m 240 fnt82 8887 13205(to)m 0 12917(mak)m 2(e)k
+570(sure)s 1021(that)s 1437(the)s 1782(entire)s 2379(parameter)s
+3390(is)s 3598(centred,)s 4405(not)s 4769(just)s 5171(its)s
+5445(\207rst)s 5873(column,)s 6696(and)s 220 fnt35 7097 12914(@HContr)m 2(act)k
+240 fnt82 8358 12917(ensures)m 0 12629(that)m 428(the)s 787(fraction)s
+1597(will)s 2034(ne)s 6(v)k 3(er)k 2627(e)s 3(xpand)k
+3385(to)s 3635(\207ll)s 3966(all)s 4269(the)s 4628(a)s 4(v)k 6(ailable)k
+5547(space,)s 6196(as)s 6457(Lout)s 6980(objects)s 7719(ha)s 4(v)k 3(e)k
+8231(a)s 8408(natural)s 0 12341(tendenc)m 3(y)k 915(to)s
+1154(do)s 1447(\(Section)s 2300(2.6\).)s 220 fnt35 2843 12338(@HLine)m
+240 fnt82 3690 12341(is)m 3900(a)s 4066(horizontal)s 5090(line)s
+5504(of)s 5775(the)s 6123(width)s 6725(of)s 6996(the)s
+7344(column:)s 220 fnt35 480 11840(def @HLine)m 480 11552( named line { "0.05 ft setline)m 4(width" })k
+480 11264({ )m 480 10976( { "0 0 mo)m 3(v)k 5(eto xsiz)k 3(e 0 lineto" line "strok)k 4(e" } @Gr)k 2(aphic {})k
+480 10688(})m 240 fnt82 0 10194(Here)m 520(we)s 855(are)s
+1202(relying)s 1932(on)s 2229(the)s 2577(e)s 3(xpanding)k
+3625(tendenc)s 3(y)k 4540(just)s 4945(mentioned.)s 480 9820(The)m
+906(remaining)s 1925(symbols)s 2772(are)s 3116(quite)s 3647(similar)s
+4367(to)s 4603(these)s 5148(ones.)s 5748(W)s 19(e)k
+6114(conclude)s 7032(with)s 7511(a)s 7675(fe)s 6(w)k
+8078(\207ne)s 8490(points)s 0 9532(of)m 271(mathematical)s 1612(typesetting)s
+2714(mentioned)s 3782(by)s 4076(a)s 4242(leading)s 4999(authority)s 15(,)k
+5954(D.)s 6231(E.)s 6481(Knuth)s 7137([5)s 7322(].)s
+480 9158(Some)m 1090(symbols,)s 2004(such)s 2509(as)s 240 fnt78
+2768 9152(\243)m 240 fnt82 2963 9158(and)m 240 fnt78 3376 9152(\271)m
+240 fnt82 3505 9158(,)m 3621(should)s 4327(ha)s 4(v)k 3(e)k
+4837(a)s 5012(thick)s 5560(space)s 6156(on)s 6462(each)s
+6966(side;)s 7472(others,)s 8172(such)s 8677(as)s 240 fnt78
+8937 9152(+)m 240 fnt82 0 8870(and)m 240 fnt78 397 8864(-)m
+240 fnt82 525 8870(,)m 625(ha)s 4(v)k 3(e)k
+1119(a)s 1278(medium)s 2115(space;)s 2751(others)s 3379(ha)s 4(v)k 3(e)k
+3873(a)s 4032(thin)s 4454(space)s 5034(on)s 5324(the)s
+5665(right)s 6169(only)s 15(.)k 6737(This)s 7206(w)s 2(ould)k
+7854(be)s 8129(easy)s 8601(to)s 8833(do)s 0 8582(e)m 3(xcept)k
+681(that)s 1099(these)s 1646(spaces)s 2321(are)s 2668(not)s
+3034(w)s 2(anted)k 3781(in)s 4024(superscripts)s 5216(and)s
+5620(subscripts:)s 168 fnt83 578 8135(n)m 168 fnt78 680 8129(+)m
+793(1)s 240 fnt83 480 8037(r)m 240 fnt78 931 8029(-)m
+1131(1)s 240 fnt82 0 7578(In)m 271(ef)s 6(fect,)k
+929(the)s 1292(de\207nition)s 2281(of)s 2568(such)s 3079(symbols)s
+3943(changes)s 4780(depending)s 5846(on)s 6159(the)s 6522(conte)s 3(xt;)k
+7350(b)s 4(ut)k 7727(Lout)s 8254(does)s 8760(not)s
+0 7290(permit)m 682(such)s 1176(a)s 1340(change.)s 2180(Luckily)s 15(,)k
+3015(the)s 3361(so-called)s 4279(`style')s 4919(information)s 6102(set)s
+6426(by)s 6718(the)s 220 fnt35 7064 7287(@F)m 6(ont)k
+240 fnt82 7716 7290(,)m 220 fnt35 7821 7287(@Break)m 240 fnt82
+8617 7290(,)m 8722(and)s 220 fnt35 0 6999(@Space)m 240 fnt82
+891 7002(symbols)m 1734(can)s 2116(change)s 2844(in)s 3080(this)s
+3470(w)s 2(ay)k 15(.)k 4009(Accordingly)s 15(,)k
+5291(Eq)s 5608(uses)s 6065(the)s 220 fnt35 6406 6999(y)m
+240 fnt82 6568 7002(unit,)m 7040(which)s 7676(is)s 7879(part)s
+8304(of)s 8568(style,)s 0 6714(for)m 338(these)s 885(spaces:)s
+220 fnt35 480 6213(def @MedGap { 0.20y })m 480 5637(def "+" { &@MedGap plus &@MedGap })m 480 5061(def @HSqueez)m 3(e r)k -3(ight x { 0.2f @YUnit x })k
+240 fnt82 0 4562(In)m 261(the)s 615(equation)s 1502(as)s
+1758(a)s 1929(whole,)s 2627(the)s 2981(y)s 3161(unit)s
+3599(is)s 3814(initially)s 4616(set)s 4947(to)s 220 fnt35
+5192 4559(1f)m 240 fnt82 5372 4562(,)m 5484(and)s 5894(so)s
+220 fnt35 6166 4559(@MedGap)m 240 fnt82 7289 4562(ordinarily)m 8291(supplies)s
+0 4274(20%)m 495(of)s 777(this)s 1184(amount.)s 2077(But)s
+2494(superscripts)s 3697(and)s 4112(subscripts)s 5130(are)s 5488(enclosed)s
+6394(in)s 6648(the)s 220 fnt35 7007 4271(@HSqueez)m 3(e)k
+240 fnt82 8314 4274(symbol,)m 0 3986(which,)m 744(by)s 1091(changing)s
+2075(the)s 2476(y)s 2703(unit,)s 3235(ensures)s 4056(that)s
+4527(an)s 3(y)k 220 fnt35 4977 3983(@MedGap)m 240 fnt82
+6147 3986(within)m 6868(them)s 7459(is)s 7722(much)s 8364(smaller)s
+0 3698(than)m 469(usual.)s 240 fnt84 0 2955(4.2.)m 471(P)s 2(aragraphs,)k
+1780(displays,)s 2718(and)s 3159(lists)s 240 fnt82 480 2478(The)m
+914(remaining)s 1942(sections)s 2770(of)s 3047(this)s 3449(chapter)s
+4219(are)s 4572(all)s 4871(based)s 5481(on)s 5784(V)s 26(ersion)k
+6578(2)s 6759(of)s 7036(the)s 7391(DocumentLayout)s 0 2190(package.)m
+941(V)s 26(ersion)k 1722(3,)s 1942(which)s 2577(is)s
+2779(similar)s 3494(b)s 4(ut)k 3849(more)s 4389(elaborate,)s
+5364(is)s 5566(described)s 6533(from)s 7050(the)s 7391(user')s 13(s)k
+7991(perspecti)s 6(v)k 3(e)k 0 1902(in)m 249(the)s
+604(User')s 13(s)k 1272(Guide)s 1920([4)s 2113(].)s
+2363(In)s 2625(26)s 2925(pages)s 3528(of)s 3806(Lout,)s
+4372(the)s 4726(DocumentLaytout)s 6534(package)s 7381(de\207nes)s 8117(man)s 3(y)k
+8707(fea)s 8998(-)s 0 1614(tures)m 506(required)s 1350(in)s
+1583(the)s 1921(formatting)s 2972(of)s 3233(simple)s 3916(documents,)s
+5050(technical)s 5957(reports,)s 6717(and)s 7111(books,)s 7781(including)s
+8728(dis)s 8998(-)s 0 1326(plays,)m 603(lists,)s 1085(page)s
+1584(layout,)s 2280(cross)s 2813(references,)s 3891(tables)s 4490(of)s
+4752(contents,)s 5647(footnotes,)s 6635(\207gures,)s 7384(tables,)s 8039(references,)s
+0 1038(chapters,)m 903(sections,)s 1780(and)s 2184(sorted)s 2826(inde)s 3(x)k 3(es.)k
+480 664(The)m 939(symbols)s 1819(used)s 2347(for)s 2716(separating)s
+3782(paragraphs)s 4913(and)s 5348(producing)s 6403(displays)s 7269(and)s
+7704(lists)s 8170(may)s 8667(lack)s 0 376(the)m 351(e)s 3(xcitement)k
+1459(of)s 1733(more)s 2284(e)s 3(xotic)k 2921(features,)s
+3786(b)s 4(ut)k 4152(the)s 3(y)k 4618(can)s
+5010(teach)s 5574(some)s 6139(important)s 7131(lessons)s 7876(about)s
+8472(rob)s 4(ust)k 0 88(design.)m 786(The)s 1211(follo)s 6(wing)k
+2185(macro)s 2832(for)s 3167(separating)s 4199(paragraphs)s 5296(produces)s
+6207(a)s 6370(0.3)s 6711(cm)s 7060(v)s 3(ertical)k
+7824(space)s 8408(and)s 8809(a)s 8971(1)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 74 80
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(74)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 240 fnt82 0 13205(cm)m 352(indent)s 1010(on)s
+1307(the)s 1655(follo)s 6(wing)k 2632(line,)s 3097(and)s
+3501(is)s 3711(clearly)s 4414(on)s 4711(the)s 5059(right)s
+5570(track:)s 220 fnt35 480 12704(macro @PP { //0.3c &1c })m 240 fnt82 0 12210(Ne)m 6(v)k 3(ertheless)k
+1276(it)s 1468(has)s 1838(se)s 6(v)k 3(eral)k
+2560(major)s 3177(problems.)s 480 11836(The)m 220 fnt35 926 11833(&)m
+240 fnt82 1147 11836(symbol)m 1926(is)s 2154(subject)s 2910(to)s
+3168(widening)s 4130(during)s 4827(line)s 5260(adjustment,)s 6434(so)s
+6719(it)s 6930(should)s 7645(be)s 7946(replaced)s 8832(by)s
+220 fnt35 0 11545(1c @Wide {})m 240 fnt82 1213 11548(.)m 1387(But)s
+1804(then)s 2284(white)s 2882(space)s 3480(follo)s 6(wing)k
+4468(the)s 4827(symbol)s 5597(will)s 6034(af)s 6(fect)k
+6641(the)s 7000(result,)s 7648(so)s 7925(an)s 8219(e)s 3(xtra)k
+220 fnt35 8764 11545(&0i)m 240 fnt82 0 11260(must)m 528(be)s
+814(added.)s 1553(If)s 1787(the)s 2138(document)s 3146(is)s
+3359(printed)s 4098(double)s 4810(spaced,)s 5571(this)s 5971(paragraph)s
+6987(g)s 1(ap)k 7389(will)s 7818(f)s 2(ail)k
+8192(to)s 8435(widen:)s 0 10972(it)m 204(should)s 914(be)s
+1208(e)s 3(xpressed)k 2219(in)s 2475(terms)s 3068(of)s
+3352(the)s 220 fnt35 3712 10969(v)m 240 fnt82 3894 10972(unit,)m
+4386(with)s 4880(mark-to-mark)s 6280(spacing)s 7076(mode.)s 7785(Similarly)s 15(,)k
+8778(the)s 0 10684(paragraph)m 1013(indent)s 1671(should)s 2368(probably)s
+3273(be)s 3555(made)s 4129(proportional)s 5366(to)s 5605(the)s
+5953(font)s 6398(size.)s 480 10310(`Magic)m 1211(numbers')s 2135(lik)s 2(e)k
+220 fnt35 2535 10307(0.3c)m 240 fnt82 2993 10310(should)m 3678(not)s
+4032(be)s 4302(b)s 4(uried)k 4955(in)s 5186(de\207nitions)s
+6235(where)s 6863(the)s 3(y)k 7314(cannot)s 8000(be)s
+8270(changed)s 0 10022(easily)m 15(,)k 649(or)s 908(k)s 2(ept)k
+1378(consistent)s 2394(with)s 2876(similar)s 3598(de\207nitions)s 4659(during)s
+5337(tuning.)s 6113(The)s 3(y)k 6656(are)s 7003(much)s
+7592(better)s 8195(placed)s 8876(as)s 0 9734(symbols,)m 905(possibly)s
+1757(parameters)s 2855(of)s 3126(the)s 3474(enclosing)s 4444(package:)s
+220 fnt35 480 9233(def @DocumentLa)m 6(y)k 4(out)k 480 8945( named @P)m 8(ar)k 2(aGap { 1.3vx })k
+480 8657( named @P)m 8(ar)k 2(aIndent { 2f })k 480 8369( ...)m 480 8081(@Begin)m
+480 7505( macro @PP { //@P)m 8(ar)k 2(aGap @P)k 8(ar)k 2(aIndent @Wide &0i })k
+480 7217( macro @LP { //@P)m 8(ar)k 2(aGap })k 480 6929( ...)m 480 6641(@End @DocumentLa)m 6(y)k 4(out)k
+240 fnt82 0 6143(and)m 404(we)s 739(ha)s 4(v)k 3(e)k
+1240(arri)s 6(v)k 3(ed)k 1965(at)s 2197(the)s
+2545(de\207nition)s 3519(of)s 220 fnt35 3790 6140(@PP)m 240 fnt82
+4356 6143(as)m 4606(it)s 4798(appears)s 5579(in)s 5822(the)s
+6170(DocumentLayout)s 7905(package.)s 480 5769(A)m 710(display)s 1455(is)s
+1665(a)s 1831(table)s 2351(in)s 2594(which)s 3236(the)s
+3584(\207rst)s 4015(column)s 4790(is)s 5000(blank:)s 240 fnt83
+480 5266(pr)m 8(eceding)k 1483(te)s 4(xt)k 220 fnt35
+480 4973(//@DispGap |@DispIndent)m 240 fnt83 3183 4978(display)m 220 fnt35 480 4685(//@DispGap)m
+240 fnt83 480 4402(following)m 1438(te)s 4(xt)k 240 fnt82
+0 3901(Edge-to-edge)m 1345(is)s 1557(the)s 1906(appropriate)s 3052(spacing)s
+3838(mode)s 4427(before)s 5095(and)s 5500(after)s 5998(displays,)s
+6891(since)s 7439(the)s 7789(display)s 8536(could)s 0 3613(be)m
+273(a)s 430(table)s 941(or)s 1191(\207gure)s 1796(whose)s
+2455(mark)s 2998(does)s 3479(not)s 3836(correspond)s 4948(to)s
+5178(a)s 5335(baseline.)s 6273(Thus,)s 220 fnt35 6850 3610(1v)m
+240 fnt82 7132 3613(is)m 7333(a)s 7490(reasonable)s 8558(v)s 6(alue)k
+0 3325(for)m 220 fnt35 338 3322(@DispGap)m 240 fnt82 1406 3325(.)m
+480 2951(The)m 957(ordinary)s 1871(user)s 2379(cannot)s 3126(be)s
+3458(e)s 3(xpected)k 4413(to)s 4702(type)s 5219(the)s
+5617(Lout)s 6179(source)s 6908(sho)s 6(wn)k 7635(abo)s 3(v)k 3(e;)k
+8363(a)s 8579(more)s 0 2663(appropriate)m 1144(syntax)s 1824(is)s
+240 fnt83 480 2160(pr)m 8(eceding)k 1483(te)s 4(xt)k
+220 fnt35 480 1867(@IndentedDispla)m 6(y {)k 240 fnt83 2514 1872(display)m
+220 fnt35 3321 1867(})m 240 fnt83 480 1584(following)m 1438(te)s 4(xt)k
+240 fnt82 0 1083(This)m 491(presents)s 1340(a)s 1521(problem:)s
+2499(if)s 220 fnt35 2731 1080(@IndentedDispla)m 6(y)k 240 fnt82
+4593 1083(is)m 4819(made)s 5408(a)s 5589(de\207nition)s 6578(with)s
+7075(a)s 7256(right)s 7782(parameter)s 9(,)k 8850(its)s
+0 795(result)m 598(will)s 1032(be)s 1322(an)s 1613(object)s
+2265(separated)s 3233(from)s 3765(the)s 4121(surrounding)s 5339(te)s 3(xt)k
+5762(only)s 6250(by)s 6552(white)s 7147(space,)s 7793(hence)s
+8415(part)s 8855(of)s 0 507(the)m 343(paragraph;)s 1405(while)s
+1986(if)s 2197(it)s 2383(is)s 2587(a)s 2747(macro,)s
+3445(the)s 3787(\207nal)s 220 fnt35 4261 504(//@DispGap)m 240 fnt82
+5505 507(cannot)m 6197(be)s 6473(included)s 7349(in)s 7586(it.)s
+7876(The)s 8298(solution)s 0 219(adopted)m 816(in)s 1059(the)s
+1407(DocumentLayout)s 3142(package)s 3982(uses)s 4445(a)s 4611(g)s 1(alle)k 3(y)k
+5245(and)s 5649(a)s 5815(macro:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 75 81
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(4.2.)m 454(P)s 19(ar)k 3(a)k 2(gr)k 3(aphs,)k
+1665(displays,)s 2542(and)s 2968(lists)s 240 fnt84 8833 13840(75)m
+220 fnt35 480 13207( def @DispPlace { @Galle)m 4(y })k 480 12919( def @Disp into { @DispPlace&&preceding })m 480 12631( r)m -3(ight x)k
+480 12343( {)m 480 12055( @OneRo)m 3(w x)k 480 11767( })m 480 11191( macro @IndentedDispla)m 6(y)k
+480 10903( {)m 480 10615( //@DispGap |@DispIndent @DispPlace |)m 480 10327( //@DispGap // @Disp)m 480 10039( })m 0 9542(@DispPlace)m
+240 fnt82 1257 9545(and)m 220 fnt35 1657 9542(@Disp)m 240 fnt82
+2366 9545(are)m 2709(not)s 3070(e)s 3(xported,)k 4007(so)s
+4269(there)s 4798(is)s 5003(no)s 5292(danger)s 5999(of)s
+6266(a)s 6427(name)s 6997(clash)s 7541(with)s 8019(some)s
+8575(other)s 0 9257(symbol.)m 869(The)s 1297(ordinary)s 2161(user')s 13(s)k
+2769(syntax)s 3449(e)s 3(xpands)k 4282(to)s 240 fnt83
+480 8754(pr)m 8(eceding)k 1483(te)s 4(xt)k 220 fnt35
+480 8461(//@DispGap |@DispIndent @DispPlace |)m 480 8173(//@DispGap // @Disp {)m 240 fnt83 2890 8178(display)m 220 fnt35
+3637 8173(})m 240 fnt83 480 7890(following)m 1438(te)s 4(xt)k
+240 fnt82 0 7389(and)m 397(the)s 220 fnt35 737 7386(@Disp)m
+240 fnt82 1442 7389(g)m 1(alle)k 3(y)k 2068(appears)s
+2842(at)s 3066(the)s 3406(preceding)s 220 fnt35 4394 7386(@DispPlace)m
+240 fnt82 5595 7389(,)m 5694(being)s 6272(itself)s 6812(replaced)s
+7671(by)s 220 fnt35 7957 7386(@Null)m 240 fnt82 8542 7389(.)m
+8698(The)s 220 fnt35 0 7098(//)m 240 fnt82 184 7101(symbol)m
+942(protects)s 1748(the)s 2094(preceding)s 220 fnt35 3088 7098(//@DispGap)m
+240 fnt82 4337 7101(from)m 4859(being)s 5443(deleted)s 6189(by)s
+6481(this)s 220 fnt35 6876 7098(@Null)m 240 fnt82 7519 7101(when)m
+8094(there)s 8625(is)s 8833(no)s 0 6813(follo)m 6(wing)k
+977(te)s 3(xt.)k 480 6439(An)m 858(automatically)s 2240(numbered)s
+3283(list)s 3662(could)s 4280(ha)s 4(v)k 3(e)k
+4809(an)s 5121(arbitrarily)s 6156(lar)s 4(ge)k 6713(number)s
+7532(of)s 7831(items,)s 8483(so,)s 8832(by)s 0 6151(analogy)m
+812(with)s 1294(sequences)s 2315(of)s 2586(pages,)s 3238(we)s
+3573(see)s 3934(immmediately)s 5368(that)s 5786(recursion)s 6732(must)s
+7257(be)s 7539(in)s 9(v)k 4(olv)k 3(ed:)k
+220 fnt35 480 5650(def @List r)m -3(ight n)k 2(um)k 480 5362({)m
+480 5074( @DispIndent @Wide n)m 2(um.)k 13( | @ItemPlace)k 480 4786( //@DispGap @List @Ne)m 6(xt n)k 2(um)k
+480 4498(})m 240 fnt82 0 4004(Notice)m 689(ho)s 6(w)k
+1146(the)s 220 fnt35 1490 4001(@Ne)m 6(xt)k 240 fnt82
+2210 4004(symbol)m 2965(w)s 2(orks)k 3595(in)s 3834(conjunction)s
+5017(with)s 5495(the)s 5838(recursion)s 6780(to)s 7015(produce)s
+7838(an)s 8116(ascending)s 0 3716(sequence)m 933(of)s 1204(numbers;)s
+2140(the)s 2488(result)s 3078(of)s 220 fnt35 3349 3713(@List 1)m
+240 fnt82 4113 3716(will)m 4539(be)s 220 fnt35 480 3215(1.)m 13( @ItemPlace)k
+480 2927(2.)m 13( @ItemPlace)k 480 2639(3.)m 13( @ItemPlace)k 480 2351(...)m
+240 fnt82 0 1900(W)m 19(e)k 362(can)s 744(follo)s 6(w)k
+1408(this)s 1797(with)s 2271(items)s 2832(which)s 3466(are)s
+3806(g)s 1(alle)k 3(ys)k 4522(tar)s 4(geted)k
+5338(to)s 220 fnt35 5569 1897(@ItemPlace&&preceding)m 240 fnt82 8010 1900(,)m
+8110(and)s 220 fnt35 8506 1897(@List)m 240 fnt82 0 1612(will)m
+426(e)s 3(xpand)k 1173(just)s 1578(enough)s 2341(to)s
+2580(accommodate)s 3964(them.)s 480 1238(The)m 908(usual)s 1468(problem)s
+2325(with)s 2807(recursi)s 6(v)k 3(e-)k 3741(recepti)s 6(v)k 3(e)k
+4663(symbols)s 5513(no)s 6(w)k 5974(arises:)s 6683(there)s
+7216(is)s 7426(al)s 2(w)k 2(ays)k 8137(one)s
+8540(une)s 3(x)k 8998(-)s 0 950(panded)m 220 fnt35
+753 947(@List)m 240 fnt82 1313 950(,)m 1424(and)s 1832(until)s
+2329(it)s 2525(can)s 2917(be)s 3203(remo)s 3(v)k 3(ed)k
+4096(the)s 4448(g)s 1(alle)k 3(y)k 5086(containing)s
+6152(it)s 6348(will)s 6778(appear)s 7479(to)s 7722(be)s
+8008(incomplete)s 0 662(and)m 394(will)s 810(be)s 1081(pre)s 6(v)k 3(ented)k
+2063(at)s 2285(that)s 2692(point)s 3234(from)s 3747(\210ushing)s
+4562(into)s 4977(its)s 5242(parent)s 5889(\(see)s 6318(page)s
+6816(29\).)s 7289(W)s 19(e)k 7647(adopt)s 8229(the)s
+8566(usual)s 0 374(solution:)m 937(a)s 1104(forcing)s 1847(g)s 1(alle)k 3(y)k
+2482(into)s 2908(a)s 3074(later)s 3558(tar)s 4(get)k
+4158(will)s 4584(replace)s 5330(the)s 5679(last)s 220 fnt35
+6070 371(@List)m 240 fnt82 6691 374(by)m 220 fnt35 6986 371(@Null)m
+240 fnt82 7571 374(.)m 7735(This)s 8212(brings)s 8862(us)s
+0 86(to)m 239(the)s 587(de\207nitions)s 1648(as)s 1898(the)s 3(y)k
+2361(appear)s 3058(in)s 3301(DocumentLayout:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 76 82
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(76)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13207(def @ItemPlace { @Galle)m 4(y })k 480 12919(def @ListItem into { @ItemPlace&&preceding })m
+480 12631( r)m -3(ight x)k 480 12343({ x })m 480 11851(def @EndListPlace { @Galle)m 4(y })k
+480 11563(def @EndList f)m 6(orce into { @EndListPlace&&preceding })k 480 11275({})m 480 10783(def @Ra)m 4(wIndentedList)k
+480 10495( named style r)m -3(ight tag {})k 480 10207( named indent { @DispIndent })m 480 9919( named gap { @DispGap })m 480 9631( named star)m -8(t { 1 })k
+480 9343({)m 480 9055( def @IList r)m -3(ight n)k 2(um)k 480 8767( {)m
+480 8479( indent @Wide {style n)m 2(um} | @ItemPlace)k 480 8191( //gap @IList @Ne)m 6(xt n)k 2(um)k
+480 7903( })m 480 7327( @IList star)m -8(t // @EndListPlace)k 480 7039(})m 240 fnt82
+0 6545(No)m 6(w)k 514(gi)s 6(v)k 3(en)k
+1094(the)s 1442(input)s 220 fnt35 480 6044(@Ra)m 4(wIndentedList)k
+480 5756(@ListItem { \207rst item })m 480 5468(@ListItem { second item })m 480 5180(...)m 480 4892(@ListItem { last item })m 480 4604(@EndList)m
+0 4146(@Ra)m 4(wIndentedList)k 240 fnt82 1908 4149(will)m 2334(e)s 3(xpand)k
+3081(to)s 3320(recei)s 6(v)k 3(e)k 4056(the)s
+4404(items,)s 5028(and)s 5432(will)s 5858(be)s 6140(closed)s
+6809(of)s 6(f)k 7153(by)s 220 fnt35 7447 4146(@EndList)m
+240 fnt82 8397 4149(.)m 480 3775(The)m 220 fnt35 913 3772(indent)m
+240 fnt82 1506 3775(,)m 220 fnt35 1619 3772(gap)m 240 fnt82
+1977 3775(,)m 2089(and)s 220 fnt35 2499 3772(star)m -8(t)k
+240 fnt82 2996 3775(parameters)m 4099(are)s 4452(straightforw)s 2(ard)k
+5986(\(note)s 6538(that)s 6962(the)s 7316(b)s 4(urden)k
+8039(of)s 8316(typing)s 220 fnt35 8987 3772(1)m 240 fnt82
+0 3487(has)m 378(been)s 895(lifted)s 1464(from)s 1996(the)s
+2352(ordinary)s 3224(user\),)s 3816(b)s 4(ut)k 4186(the)s
+220 fnt35 4543 3484(style)m 240 fnt82 5054 3487(parameter)m 6076(has)s
+6454(a)s 6628(parameter)s 7650(of)s 7929(its)s 8213(o)s 6(wn)k
+8686(\(see)s 0 3199(page)m 508(16\).)s 991(It)s 1196(is)s
+1406(used)s 1903(lik)s 2(e)k 2315(this:)s 220 fnt35
+480 2698(def @Ra)m 4(wNumberedList { @Ra)k 4(wIndentedList style { tag.)k 13( } })k 480 2410(def @Ra)m 4(wP)k 8(arenNumberedList { @Ra)k 4(wIndentedList style { \(tag\) } })k
+240 fnt82 0 1911(In)m 220 fnt35 276 1908(@Ra)m 4(wNumberedList)k
+240 fnt82 2294 1911(,)m 220 fnt35 2422 1908(style)m 240 fnt82
+2946 1911(is)m 3176(gi)s 6(v)k 3(en)k 3777(the)s
+4146(v)s 6(alue)k 220 fnt35 4734 1908(tag.)m 240 fnt82
+5081 1911(,)m 5209(where)s 220 fnt35 5870 1908(tag)m 240 fnt82
+6243 1911(is)m 6474(its)s 6771(o)s 6(wn)k 7255(right)s
+7787(parameter)s 9(,)k 8860(so)s 0 1623(the)m 348(v)s 6(alue)k
+916(of)s 220 fnt35 1187 1620({style n)m 2(um})k 240 fnt82
+2321 1623(within)m 220 fnt35 2989 1620(@IList)m 240 fnt82 3670 1623(is)m
+220 fnt35 3880 1620(n)m 2(um.)k 240 fnt82 4347 1623(;)m
+4459(while)s 5046(in)s 220 fnt35 5289 1620(@Ra)m 4(wP)k 8(arenNumberedList)k
+240 fnt82 7884 1623(,)m 220 fnt35 7992 1620({style n)m 2(um})k
+240 fnt82 0 1335(is)m 220 fnt35 219 1332(\(n)m 2(um\))k
+240 fnt82 776 1335(.)m 949(In)s 1215(this)s 1620(w)s 2(ay)k
+2080(we)s 2425(achie)s 6(v)k 3(e)k 3211(an)s
+3503(unlimited)s 4487(v)s 6(ariety)k 5207(of)s 5487(numbering)s
+6587(formats)s 7376(without)s 8176(ha)s 4(ving)k 8887(to)s
+0 1047(re)m 6(write)k 220 fnt35 725 1044(@Ra)m 4(wIndentedList)k
+240 fnt82 2633 1047(o)m 3(v)k 3(er)k 3112(and)s
+3516(o)s 3(v)k 3(er)k 13(.)k 480 673(These)m
+1113(list)s 1470(symbols)s 2325(are)s 2678(objects)s 3412(without)s
+4209(surrounding)s 5425(space,)s 6069(so)s 6341(macros)s 7088(similar)s
+7816(to)s 8061(those)s 8629(used)s 0 385(for)m 338(displays)s
+1173(are)s 1520(needed:)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 77 83
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(4.2.)m 454(P)s 19(ar)k 3(a)k 2(gr)k 3(aphs,)k
+1665(displays,)s 2542(and)s 2968(lists)s 240 fnt84 8831 13840(77)m
+220 fnt35 480 13207(macro @NumberedList { //@DispGap @Ra)m 4(wNumberedList //@DispGap })k 480 12919(macro @P)m 8(arenNumberedList { //@DispGap @Ra)k 4(wP)k 8(arenNumberedList //@DispGap })k
+240 fnt82 0 12423(and)m 404(so)s 670(on.)s 480 12049(Lists)m
+994(numbered)s 2007(by)s 2300(Roman)s 3047(numerals)s 3973(present)s
+4721(a)s 4886(problem,)s 5788(because)s 220 fnt35 6600 12046(@Ne)m 6(xt)k
+240 fnt82 7322 12049(will)m 7747(not)s 8111(increment)s 0 11761(Roman)m
+749(numerals.)s 1789(Instead,)s 2586(the)s 3(y)k 3049(must)s
+3574(be)s 3856(stored)s 4498(in)s 4741(a)s 4907(database:)s
+220 fnt35 480 11260(def @Roman)m 480 10972( left @T)m 26(ag)k 480 10684( r)m -3(ight @V)k 15(al)k
+480 10396({ @V)m 15(al })k 480 9820(@SysDatabase @Roman { standard })m 0 9319(@SysDatabase)m 240 fnt82
+1602 9322(is)m 1835(preferred)s 2790(o)s 3(v)k 3(er)k
+220 fnt35 3292 9319(@Database)m 240 fnt82 4529 9322(here)m 5019(because)s
+5855(this)s 6274(database)s 7176(should)s 7896(be)s 8201(k)s 2(ept)k
+8694(in)s 8960(a)s 0 9034(standard)m 880(place)s 1452(and)s
+1868(shared)s 2562(by)s 2868(e)s 6(v)k 3(eryone.)k
+3912(The)s 4352(database)s 5243(itself,)s 5838(a)s 6016(\207le)s
+6389(called)s 220 fnt35 7029 9031(standard.ld)m 240 fnt82 8174 9034(in)m
+8429(Basser)s 0 8746(Lout,)m 559(contains)s 1407(in)s 9(v)k 4(ocations)k
+2548(of)s 220 fnt35 2819 8743(@Roman)m 240 fnt82 3735 8746(,)m
+3842(each)s 4337(enclosed)s 5232(in)s 5475(braces:)s 220 fnt35
+480 8264({ 1 @Roman i })m 480 7976({ 2 @Roman ii })m 480 7688(...)m 480 7400({ 100 @Roman c })m 240 fnt82
+0 6906(Then)m 220 fnt35 549 6903(@Roman&&12)m 240 fnt82 2065 6906(for)m
+2403(e)s 3(xample)k 3266(has)s 3636(v)s 6(alue)k
+4204(xii,)s 4563(and)s 220 fnt35 480 6405(def @Ra)m 4(wRomanList { @Ra)k 4(wIndentedList style { {@Roman&&tag}.)k 13( } })k
+240 fnt82 0 5906(produces)m 922(a)s 1096(list)s 1454(numbered)s
+2477(by)s 2779(Roman)s 3535(numerals.)s 4583(The)s 5019(counting)s
+5917(still)s 6337(proceeds)s 7246(in)s 7496(Arabic,)s 8261(b)s 4(ut)k
+8631(each)s 0 5618(Arabic)m 719(numeral)s 1573(is)s 1799(con)s 9(v)k 3(erted)k
+2804(to)s 3059(Roman)s 3824(by)s 4134(the)s 4498(cross)s
+5056(reference.)s 6123(Since)s 6726(arbitrary)s 7617(objects)s 8361(may)s
+8844(be)s 0 5330(stored)m 642(in)s 885(databases,)s 1908(arbitrary)s
+2783(\207nite)s 3330(sequences)s 4351(of)s 4622(objects)s 5350(may)s
+5816(be)s 6098(`counted')s 7047(in)s 7290(this)s 7686(w)s 2(ay)k 15(.)k
+240 fnt84 0 4538(4.3.)m 471(P)s 2(age)k 1017(lay)s 6(out)k
+240 fnt82 480 4061(The)m 921(page)s 1443(layout)s 2115(de\207nitions)s
+3190(gi)s 6(v)k 3(en)k 3783(in)s 4040(Section)s
+4828(1.2,)s 5249(although)s 6158(correct,)s 6940(are)s 7301(v)s 3(ery)k
+7791(basic.)s 8460(In)s 8730(this)s 0 3773(section)m 726(we)s
+1053(present)s 1795(the)s 2135(de\207nitions)s 3187(used)s 3676(by)s
+3962(the)s 4302(DocumentLayout)s 6029(package)s 6860(for)s 7190(laying)s
+7833(out)s 8191(the)s 8530(pages)s 0 3485(of)m 271(books,)s
+950(including)s 1906(running)s 2704(page)s 3211(headers)s 3991(and)s
+4394(footers,)s 5164(dif)s 6(ferent)k 6038(formats)s 6817(for)s
+7155(odd)s 7572(and)s 7975(e)s 6(v)k 3(en)k
+8474(pages,)s 0 3197(and)m 404(so)s 670(on.)s 1074(The)s
+1502(present)s 2252(document)s 3256(is)s 3466(produced)s 4415(with)s
+4897(these)s 5444(de\207nitions.)s 480 2823(W)m 19(e)k 846(be)s 3(gin)k
+1429(with)s 1908(a)s 2071(fe)s 6(w)k 2474(de\207nitions)s
+3531(which)s 4170(permit)s 4850(the)s 5195(user)s 5650(to)s
+5885(create)s 6507(cross)s 7046(references)s 8074(of)s 8342(the)s
+8686(`see)s 0 2535(page)m 509(27')s 863(v)s 6(ariety)k
+1576(which)s 2220(will)s 2647(be)s 2931(k)s 2(ept)k
+3403(up)s 3698(to)s 3938(date)s 4394(automatically)s 15(.)k
+5845(The)s 6275(user)s 6734(marks)s 7371(the)s 7721(tar)s 4(get)k
+8322(page)s 8832(by)s 0 2247(placing)m 220 fnt35 756 2244(@P)m 8(ageMar)k -3(k intro)k
+240 fnt82 2454 2247(,)m 2560(for)s 2897(e)s 3(xample,)k
+3810(at)s 4041(the)s 4388(point)s 4939(of)s 5209(interest,)s
+6017(and)s 6420(refers)s 7012(to)s 7250(the)s 7597(mark)s 2(ed)k
+8369(page)s 8876(as)s 220 fnt35 0 1956(@P)m 8(ageOf intro)k
+240 fnt82 1499 1959(else)m 6(where:)k 220 fnt35 480 1459(e)m 6(xpor)k -8(t @T)k 26(ag)k
+480 1171(def @P)m 8(ageMar)k -3(k)k 4(er r)k -3(ight @T)k 26(ag { @Null })k
+480 674(def @P)m 8(ageMar)k -3(k r)k -3(ight x)k 480 386({)m
+480 98( @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged x)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 78 84
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(78)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13210(})m 480 12718(def @P)m 8(ageOf r)k -3(ight x)k
+480 12430({)m 480 12142( @P)m 8(ageMar)k -3(k)k 4(er&&x @Open { @T)k 26(ag })k
+480 11854(})m 240 fnt82 0 11360(W)m 19(e)k 385(will)s
+828(see)s 1206(belo)s 6(w)k 1856(that)s 2291(an)s
+2591(in)s 9(v)k 4(ocation)k 3662(of)s 220 fnt35
+3949 11357(@P)m 8(ageMar)k -3(k)k 4(er)k 240 fnt82
+5435 11360(appears)m 6233(before)s 6916(each)s 7428(page,)s 8004(with)s
+220 fnt35 8503 11357(@T)m 26(ag)k 240 fnt82 0 11072(parameter)m
+1014(equal)s 1587(to)s 1826(the)s 2174(page)s 2682(number)s 13(.)k
+3564(Suppose)s 4432(that)s 220 fnt35 4850 11069(@P)m 8(ageMar)k -3(k intro)k
+240 fnt82 6548 11072(,)m 6655(which)s 7297(e)s 3(xpands)k
+8130(to)s 220 fnt35 480 10571(@P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged intro)k
+240 fnt82 0 10072(happens)m 855(to)s 1113(f)s 2(all)k
+1502(on)s 1819(page)s 2346(27)s 2653(of)s 2944(the)s
+3311(\207nal)s 3810(printed)s 4564(document)s 5588(\(of)s 5957(course,)s
+6707(its)s 7003(v)s 6(alue)k 7590(is)s 220 fnt35
+7819 10069(@Null)m 240 fnt82 8484 10072(which)m 0 9784(mak)m 2(es)k
+686(it)s 905(in)s 9(visible\).)k 1988(Then)s 2564(the)s
+2939(ef)s 6(fect)k 3561(of)s 220 fnt35 3859 9781(@T)m 26(agged)k
+240 fnt82 4874 9784(is)m 5111(to)s 5377(attach)s 220 fnt35
+6030 9781(intro)m 240 fnt82 6536 9784(as)m 6812(an)s 7122(e)s 3(xtra)k
+7683(tag)s 8054(to)s 8320(the)s 8695(\207rst)s 0 9496(in)m 9(v)k 4(ocation)k
+1092(of)s 220 fnt35 1401 9493(@P)m 8(ageMar)k -3(k)k 4(er)k
+240 fnt82 2908 9496(preceding)m 3943(that)s 4399(\207nal)s 4917(point,)s
+5554(and)s 5997(this)s 6431(must)s 6994(be)s 220 fnt35
+7315 9493(@P)m 8(ageMar)k -3(k)k 4(er 27)k 240 fnt82
+9022 9496(.)m 0 9208(Therefore)m 997(the)s 1345(e)s 3(xpression)k
+220 fnt35 480 8707(@P)m 8(ageMar)k -3(k)k 4(er&&intro @Open { @T)k 26(ag })k
+240 fnt82 0 8208(will)m 422(open)s 941(the)s 1285(in)s 9(v)k 4(ocation)k
+220 fnt35 2334 8205(@P)m 8(ageMar)k -3(k)k 4(er 27)k
+240 fnt82 4097 8208(and)m 4497(yield)s 5028(the)s 5372(v)s 6(alue)k
+5936(of)s 6203(its)s 220 fnt35 6474 8205(@T)m 26(ag)k
+240 fnt82 7093 8208(parameter)m 9(,)k 8141(27.)s 8540(Thus,)s
+220 fnt35 0 7917(@P)m 8(ageOf intro)k 240 fnt82 1499 7920(appearing)m
+2495(an)s 3(ywhere)k 3478(in)s 3721(the)s 4069(document)s
+5073(yields)s 5695(27.)s 480 7546(Ne)m 3(xt)k 1009(we)s
+1351(ha)s 4(v)k 3(e)k 1859(some)s 2427(little)s
+2926(de\207nitions)s 3994(for)s 4339(v)s 6(arious)k 5095(parts)s
+5617(of)s 5895(the)s 6250(page.)s 220 fnt35 6873 7543(@FullPlace)m
+240 fnt82 8055 7546(will)m 8488(be)s 8778(the)s 0 7258(tar)m 4(get)k
+599(of)s 870(full-width)s 1882(body)s 2416(te)s 3(xt:)k
+220 fnt35 480 6757(def @FullPlace { @Galle)m 4(y })k 0 6256(@ColPlace)m 240 fnt82
+1151 6259(will)m 1577(be)s 1859(the)s 2207(tar)s 4(get)k
+2806(of)s 3077(body)s 3611(te)s 3(xt)k 4026(within)s
+4694(one)s 5096(column:)s 220 fnt35 480 5758(def @ColPlace { @Galle)m 4(y })k
+0 5257(@T)m 26(opList)k 240 fnt82 972 5260(will)m 1398(be)s
+1680(the)s 2028(tar)s 4(get)k 2627(of)s 2898(\207gures)s
+3600(and)s 4004(tables:)s 220 fnt35 480 4759(e)m 6(xpor)k -8(t @T)k 26(ag)k
+480 4471(def @T)m 26(opList r)k -3(ight @T)k 26(ag)k 480 4183({)m
+480 3895( @Galle)m 4(y)k 480 3607( //@T)m 26(opGap @T)k 26(opList @Ne)k 6(xt @T)k 26(ag)k
+480 3319(})m 240 fnt82 0 2825(W)m 19(e)k 392(ha)s 4(v)k 3(e)k
+916(tak)s 2(en)k 1512(a)s 1702(shortcut)s 2555(here,)s
+3096(a)s 4(v)k 4(oiding)k 4002(an)s 4309(unnecessary)s
+220 fnt35 5555 2822(@T)m 26(opPlace)k 240 fnt82 6753 2825(symbol.)m
+220 fnt35 7645 2822(@F)m 6(ootList)k 240 fnt82 8722 2825(and)m
+220 fnt35 0 2534(@F)m 6(ootSect)k 240 fnt82 1142 2537(de\207ne)m
+1774(a)s 1931(sequence)s 2854(of)s 3116(full-width)s 4119(tar)s 4(gets)k
+4793(at)s 5015(the)s 5354(foot)s 5790(of)s 6052(the)s
+6390(page)s 6889(for)s 7218(footnotes,)s 8205(preceded)s 0 2249(by)m
+294(a)s 460(short)s 998(horizontal)s 2022(line:)s 220 fnt35
+480 1748(e)m 6(xpor)k -8(t @T)k 26(ag)k 480 1460(def @F)m 6(ootList r)k -3(ight @T)k 26(ag)k
+480 1172({)m 480 884( @Galle)m 4(y)k 480 596( //@F)m 6(ootGap @F)k 6(ootList @Ne)k 6(xt @T)k 26(ag)k
+480 308(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 79 85
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(4.3.)m 454(P)s 19(a)k 2(g)k 2(e)k
+976(layout)s 240 fnt84 8832 13840(79)m 220 fnt35 480 13207(def @F)m 6(ootSect)k
+480 12919({)m 480 12631( @F)m 6(ootLen @Wide @HLine)k 480 12343( //@F)m 6(ootGap @F)k 6(ootList 1 ||@F)k 6(ootLen)k
+480 12055(})m 240 fnt82 0 11561(Similarly)m 15(,)k 220 fnt35
+988 11558(@ColF)m 6(ootList)k 240 fnt82 2378 11561(and)m 220 fnt35
+2791 11558(@ColF)m 6(ootSect)k 240 fnt82 4279 11561(pro)m 3(vide)k
+5072(a)s 5247(sequence)s 6189(of)s 6469(tar)s 4(gets)k
+7161(for)s 7508(footnotes)s 8458(within)s 0 11273(one)m 402(column:)s
+220 fnt35 480 10822(e)m 6(xpor)k -8(t @T)k 26(ag)k
+480 10534(def @ColF)m 6(ootList r)k -3(ight @T)k 26(ag)k 480 10246({)m
+480 9958( @Galle)m 4(y)k 480 9670( //@F)m 6(ootGap @ColF)k 6(ootList @Ne)k 6(xt @T)k 26(ag)k
+480 9382(})m 480 8806(def @ColF)m 6(ootSect)k 480 8518({)m 480 8230( @ColF)m 6(ootLen @Wide @HLine)k
+480 7942( //@F)m 6(ootGap @ColF)k 6(ootList 1 ||@ColF)k 6(ootLen)k 480 7654(})m
+240 fnt82 0 7160(The)m 428(ne)s 3(xt)k 897(de\207nition)s
+1871(pro)s 3(vides)k 2743(a)s 2909(horizontal)s 3933(sequence)s
+4866(of)s 5137(one)s 5539(or)s 5798(more)s 6345(columns:)s
+220 fnt35 480 6659(def @ColList r)m -3(ight col)k 480 6371({)m 480 6083( def @Column)m
+480 5795( { @VExpand { @ColPlace //1r)m -8(t @OneRo)k 3(w { //@MidGap @ColF)k 6(ootSect } } })k 480 5219( col @Case {)m
+480 4931( Single @Y)m 4(ield @Column)k 480 4643( Doub)m 4(le @Y)k 4(ield { @Doub)k 4(leColWidth @Wide @Column ||@ColGap @ColList col })k
+480 4355( Multi @Y)m 4(ield { @MultiColWidth @Wide @Column ||@ColGap @ColList col })k 480 4067( })m 480 3779(})m 240 fnt82
+0 3285(Each)m 537(column)s 1315(consists)s 2125(of)s 2399(a)s
+220 fnt35 2568 3282(@ColPlace)m 240 fnt82 3721 3285(at)m 3956(the)s
+4307(top)s 4668(and)s 5075(a)s 220 fnt35 5243 3282(@F)m 6(ootSect)k
+240 fnt82 6397 3285(at)m 6632(the)s 6982(foot.)s 7534(The)s
+220 fnt35 7965 3282(@VExpand)m 240 fnt82 0 2997(symbol)m 772(ensures)s
+1553(that)s 1983(whene)s 6(v)k 3(er)k 2977(a)s
+3156(column)s 3943(comes)s 4618(into)s 5056(e)s 3(xistence,)k
+6061(it)s 6266(will)s 6705(e)s 3(xpand)k 7464(v)s 3(ertically)k
+8429(so)s 8708(that)s 0 2709(the)m 360(bottom-justi\207cation)s 220 fnt35
+2315 2706(//1r)m -8(t)k 240 fnt82 2769 2709(has)m 3152(as)s
+3414(much)s 4016(space)s 4615(as)s 4878(possible)s 5730(to)s
+5982(w)s 2(ork)k 6545(within.)s 7333(The)s 220 fnt35
+7773 2706(col)m 240 fnt82 8112 2709(parameter)m 0 2421(determines)m 1099(whether)s
+1929(the)s 2277(result)s 2867(has)s 3237(a)s 3403(single)s
+4030(column,)s 4855(double)s 5563(columns,)s 6481(or)s 6740(multiple)s
+7592(columns.)s 480 2047(The)m 220 fnt35 908 2044(@P)m 8(age)k
+240 fnt82 1687 2047(symbol)m 2447(places)s 3095(its)s 3371(parameter)s
+4385(in)s 4628(a)s 4794(page)s 5302(of)s 5573(\207x)s 3(ed)k
+6107(width,)s 6759(height,)s 7464(and)s 7868(mar)s 4(gins:)k
+220 fnt35 480 1546(def @P)m 8(age r)k -3(ight x)k 480 1258({)m
+480 970( @P)m 8(ageWidth @Wide @P)k 8(ageHeight @High {)k 480 682( //@P)m 8(ageMargin ||@P)k 8(ageMargin)k
+480 394( @HExpand @VExpand x)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 80 86
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(80)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13207( ||@P)m 8(ageMargin //@P)k 8(ageMargin)k
+480 12919( })m 480 12631(})m 0 12134(@HExpand)m 240 fnt82 1169 12137(and)m
+220 fnt35 1568 12134(@VExpand)m 240 fnt82 2725 12137(ensure)m 3400(that)s
+3814(the)s 4157(right)s 4664(parameter)s 5673(occupies)s 6557(all)s
+6845(the)s 7189(a)s 4(v)k 6(ailable)k 8092(space;)s
+8730(this)s 0 11849(is)m 218(important)s 1215(when)s 1800(the)s
+2156(right)s 2676(parameter)s 3698(is)s 3916(unusually)s 4910(small.)s
+5599(The)s 220 fnt35 6036 11846(@High)m 240 fnt82 6763 11849(symbol)m
+7531(gi)s 6(v)k 3(es)k 8087(the)s 8443(page)s
+8960(a)s 0 11561(single)m 627(ro)s 6(w)k 1047(mark,)s
+1645(ensuring)s 2522(that)s 2940(it)s 3132(will)s 3558(be)s
+3840(printed)s 4575(on)s 4872(a)s 5038(single)s 5665(sheet)s
+6216(of)s 6487(paper)s 7078(\(page)s 7665(29\).)s 480 11187(Ne)m 3(xt)k
+1002(we)s 1337(ha)s 4(v)k 3(e)k 220 fnt35
+1838 11184(@OneP)m 8(age)k 240 fnt82 2972 11187(,)m 3079(de\207ning)s
+3917(a)s 4083(typical)s 4788(page)s 5296(of)s 5567(a)s
+5733(book)s 6274(or)s 6533(other)s 7084(document:)s 220 fnt35
+480 10686(def @OneP)m 8(age)k 480 10398( named @Columns {})m 480 10110( named @P)m 8(ageT)k 26(op {})k
+480 9822( named @P)m 8(ageF)k 6(oot {})k 480 9534({)m 480 9246( @P)m 8(age {)k
+480 8958( @P)m 8(ageT)k 26(op)k 480 8670( //@MidGap @T)m 26(opList)k
+480 8382( //@MidGap @FullPlace)m 480 8094( //@MidGap @ColList @Columns)m 480 7806( // //1r)m -8(t @OneRo)k 3(w { //@MidGap @F)k 6(ootSect //@MidGap @P)k 8(ageF)k 6(oot })k
+480 7518( })m 480 7230(})m 240 fnt82 0 6736(The)m 431(page)s
+943(top)s 1305(and)s 1713(page)s 2224(foot,)s 2720(and)s
+3128(the)s 3479(number)s 4274(of)s 4548(columns,)s 5470(are)s
+5821(parameters)s 6922(that)s 7344(will)s 7773(be)s 8059(gi)s 6(v)k 3(en)k
+8643(later)s 0 6448(when)m 220 fnt35 565 6445(@OneP)m 8(age)k
+240 fnt82 1747 6448(is)m 1946(in)s 9(v)k 4(ok)k 2(ed.)k
+2855(The)s 3272(body)s 3794(of)s 4054(the)s 4390(page)s
+4887(is)s 5085(a)s 5240(straightforw)s 2(ard)k 6756(combination)s
+7998(of)s 8257(pre)s 6(vious)k 0 6160(de\207nitions.)m 1171(The)s
+220 fnt35 1595 6157(//)m 240 fnt82 1777 6160(symbol)m 2533(protects)s
+3337(the)s 3681(follo)s 6(wing)k 220 fnt35 4655 6157(//1r)m -8(t)k
+240 fnt82 5093 6160(from)m 5614(deletion)s 6437(in)s 6677(the)s
+7021(unlik)s 2(ely)k 7854(e)s 6(v)k 3(ent)k
+8419(that)s 8833(all)s 0 5872(the)m 342(preceding)s 1331(symbols)s
+2174(are)s 2514(replaced)s 3375(by)s 220 fnt35 3662 5869(@Null)m
+240 fnt82 4247 5872(.)m 4405(The)s 4826(follo)s 6(wing)k
+5797(object)s 6434(is)s 6638(enclosed)s 7526(in)s 220 fnt35
+7763 5869(@OneRo)m 3(w)k 240 fnt82 8887 5872(to)m 0 5584(ensure)m
+680(that)s 1098(all)s 1391(of)s 1662(it)s 1854(is)s
+2064(bottom-justi\207ed,)s 3698(not)s 4064(just)s 4469(its)s 4745(\207rst)s
+5176(component.)s 480 5210(Before)m 1199(presenting)s 2262(the)s 2624(de\207nition)s
+3612(of)s 3896(a)s 4076(sequence)s 5023(of)s 5308(pages,)s
+5974(we)s 6322(must)s 6861(detour)s 7546(to)s 7799(describe)s
+8665(ho)s 6(w)k 0 4922(running)m 803(page)s 1317(headers)s
+2104(and)s 2513(footers)s 3233(\(lik)s 2(e)k 3730(those)s
+4297(in)s 4545(the)s 4899(present)s 5655(document\))s 6732(are)s
+7085(produced.)s 8146(These)s 8779(are)s 0 4634(based)m 603(on)s
+900(the)s 220 fnt35 1248 4631(@Runner)m 240 fnt82 2250 4634(symbol:)m
+220 fnt35 480 4133(e)m 6(xpor)k -8(t @T)k 26(opOdd @T)k 26(opEv)k 5(en @F)k 6(ootOdd @F)k 6(ootEv)k 5(en)k
+480 3845(def @Runner)m 480 3557( named @T)m 26(opOdd r)k -3(ight @P)k 8(ageNum { @Null })k
+480 3269( named @T)m 26(opEv)k 5(en r)k -3(ight @P)k 8(ageNum { @Null })k
+480 2981( named @F)m 6(ootOdd r)k -3(ight @P)k 8(ageNum { @Null })k 480 2693( named @F)m 6(ootEv)k 5(en r)k -3(ight @P)k 8(ageNum { @Null })k
+480 2405( named @T)m 26(ag {})k 480 2117({ @Null })m 240 fnt82 0 1623(The)m
+440(four)s 910(parameters)s 2020(control)s 2764(the)s 3125(format)s
+3833(of)s 4116(running)s 4926(headers)s 5719(and)s 6136(footers)s
+6862(on)s 7171(odd)s 7601(and)s 8017(e)s 6(v)k 3(en)k
+8530(pages)s 0 1335(respecti)m 6(v)k 3(ely)k 15(.)k
+1294(In)s 9(v)k 4(ocations)k 2448(of)s 220 fnt35
+2719 1332(@Runner)m 240 fnt82 3661 1335(,)m 3768(for)s 4106(e)s 3(xample)k
+220 fnt35 480 834(@Runner)m 480 546( @T)m 26(opEv)k 5(en { @B @P)k 8(ageNum |1r)k -8(t @I { Chapter 4 } })k
+480 258( @T)m 26(opOdd { @I { Examples } |1r)k -8(t @B @P)k 8(ageNum })k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 81 87
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(4.3.)m 454(P)s 19(a)k 2(g)k 2(e)k
+976(layout)s 240 fnt84 8839 13840(81)m 240 fnt82 0 13205(will)m
+416(be)s 687(embedded)s 1719(in)s 1951(the)s 2289(body)s
+2812(te)s 3(xt)k 3217(of)s 3477(the)s 3815(document,)s
+4855(and,)s 5298(as)s 5537(we)s 5862(will)s 6277(see)s
+6628(in)s 6860(a)s 7016(moment,)s 7896(are)s 8232(accessed)s
+0 12917(by)m 220 fnt35 296 12914(@Runner&&f)m 6(ollo)k 3(wing)k
+240 fnt82 2423 12917(cross)m 2967(references)s 4001(on)s 4301(the)s
+4651(pages.)s 5363(Notice)s 6059(ho)s 6(w)k 6522(the)s
+220 fnt35 6873 12914(@P)m 8(ageNum)k 240 fnt82 8112 12917(parameter)m
+0 12629(of)m 265(each)s 753(parameter)s 1761(allo)s 6(ws)k
+2423(the)s 2764(format)s 3454(of)s 3718(the)s 4059(running)s
+4851(header)s 5541(to)s 5774(be)s 6049(speci\207ed)s 6950(while)s
+7531(lea)s 4(ving)k 8277(the)s 8618(page)s 0 12341(number)m
+791(to)s 1030(be)s 1312(substituted)s 2406(later)s 13(.)k
+480 11967(W)m 19(e)k 843(may)s 1303(no)s 6(w)k
+1758(de\207ne)s 220 fnt35 2393 11964(@OddP)m 8(ageList)k 240 fnt82
+3872 11967(,)m 3973(whose)s 4635(result)s 5219(is)s 5423(a)s
+5583(sequence)s 6510(of)s 6775(pages)s 7365(be)s 3(ginning)k
+8367(with)s 8843(an)s 0 11679(odd-numbered)m 1454(page:)s 220 fnt35
+480 11178(def @OddP)m 8(ageList)k 480 10890( named @Columns {})m 480 10602( r)m -3(ight @P)k 8(ageNum)k
+480 10314({)m 480 10026( def @Ev)m 5(enP)k 8(ageList ...)k 480 9450( @P)m 8(ageMar)k -3(k)k 4(er @P)k 8(ageNum)k
+480 9162( // @Runner&&f)m 6(ollo)k 3(wing @Open {)k 480 8874( @OneP)m 8(age)k
+480 8586( @Columns { @Columns })m 480 8298( @P)m 8(ageT)k 26(op { @T)k 26(opOdd @P)k 8(ageNum })k
+480 8010( @P)m 8(ageF)k 6(oot { @F)k 6(ootOdd @P)k 8(ageNum })k
+480 7722( })m 480 7434( // @Ev)m 5(enP)k 8(ageList)k 480 7146( @Columns { @Columns })m
+480 6858( @Ne)m 6(xt @P)k 8(ageNum)k 480 6570(})m 240 fnt82
+0 6076(Ignoring)m 220 fnt35 887 6073(@Ev)m 5(enP)k 8(ageList)k
+240 fnt82 2516 6076(for)m 2865(the)s 3223(moment,)s 4125(notice)s
+4775(\207rst)s 5217(that)s 5645(the)s 6004(in)s 9(v)k 4(ocation)k
+7068(of)s 220 fnt35 7350 6073(@OneP)m 8(age)k 240 fnt82
+8554 6076(is)m 8775(en)s 8998(-)s 0 5788(closed)m 679(in)s
+220 fnt35 932 5785(@Runner&&f)m 6(ollo)k 3(wing @Open)k 240 fnt82
+3815 5788(.)m 3989(Since)s 220 fnt35 4586 5785(@Runner&&f)m 6(ollo)k 3(wing)k
+240 fnt82 6721 5788(refers)m 7324(to)s 7573(the)s 7931(\207rst)s
+8373(in)s 9(v)k 4(oca)k 8998(-)s 0 5500(tion)m
+421(of)s 220 fnt35 684 5497(@Runner)m 240 fnt82 1678 5500(appearing)m
+2666(after)s 3154(itself)s 3694(in)s 3929(the)s 4269(\207nal)s
+4741(printed)s 5468(document,)s 6511(the)s 6851(symbols)s 220 fnt35
+7692 5497(@T)m 26(opOdd)k 240 fnt82 8722 5500(and)m 220 fnt35
+0 5209(@F)m 6(ootOdd)k 240 fnt82 1127 5212(will)m 1562(tak)s 2(e)k
+2023(their)s 2528(v)s 6(alue)k 3105(from)s 3638(the)s
+3995(\207rst)s 4434(in)s 9(v)k 4(ocation)k 5497(of)s
+220 fnt35 5777 5209(@Runner)m 240 fnt82 6788 5212(follo)m 6(wing)k
+7773(the)s 8130(top)s 8498(of)s 8778(the)s 0 4924(page,)m
+554(e)s 6(v)k 3(en)k 1049(though)s 220 fnt35
+1767 4921(@F)m 6(ootOdd)k 240 fnt82 2880 4924(appears)m 3656(at)s
+3883(the)s 4225(foot)s 4665(of)s 4931(the)s 5274(page.)s
+5884(Their)s 220 fnt35 6456 4921(@P)m 8(ageNum)k 240 fnt82
+7687 4924(parameters)m 8779(are)s 0 4636(replaced)m 867(by)s 220 fnt35
+1161 4633(@P)m 8(ageNum)k 240 fnt82 2337 4636(,)m 2444(the)s
+2792(actual)s 3417(page)s 3925(number)s 4716(parameter)s 5730(of)s
+220 fnt35 6001 4633(@OddP)m 8(ageList)k 240 fnt82 7480 4636(.)m
+480 4262(After)m 1043(producing)s 2067(the)s 2415(odd-numbered)s 3869(page,)s
+220 fnt35 4428 4259(@OddP)m 8(ageList)k 240 fnt82 5967 4262(in)m 9(v)k 4(ok)k 2(es)k
+220 fnt35 6748 4259(@Ev)m 5(enP)k 8(ageList)k 240 fnt82
+8307 4262(:)m 220 fnt35 480 3761(def @Ev)m 5(enP)k 8(ageList)k
+480 3473( named @Columns {})m 480 3185( r)m -3(ight @P)k 8(ageNum)k 480 2897({)m
+480 2609( @P)m 8(ageMar)k -3(k)k 4(er @P)k 8(ageNum)k
+480 2321( // @Runner&&f)m 6(ollo)k 3(wing @Open {)k 480 2033( @OneP)m 8(age)k
+480 1745( @Columns { @Columns })m 480 1457( @P)m 8(ageT)k 26(op { @T)k 26(opEv)k 5(en @P)k 8(ageNum })k
+480 1169( @P)m 8(ageF)k 6(oot { @F)k 6(ootEv)k 5(en @P)k 8(ageNum })k
+480 881( })m 480 593( // @OddP)m 8(ageList)k 480 305( @Columns { @Columns })m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 82 88
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(82)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13207( @Ne)m 6(xt @P)k 8(ageNum)k
+480 12919(})m 240 fnt82 0 12425(This)m 465(produces)s 1369(an)s
+1641(e)s 6(v)k 3(en-numbered)k 3167(page,)s 3714(then)s
+4172(passes)s 4823(the)s 5160(ball)s 5562(back)s 6063(to)s
+220 fnt35 6291 12422(@OddP)m 8(ageList)k 240 fnt82 7819 12425(\211)m
+7988(a)s 8142(delightful)s 0 12137(e)m 3(xample)k 877(of)s
+1162(what)s 1701(computer)s 2678(scientists)s 3619(call)s 4032(mutual)s
+4765(recursion.)s 5832(The)s 6274(tw)s 2(o)k 6699(page)s
+7221(types)s 7791(dif)s 6(fer)k 8388(only)s 8883(in)s
+0 11849(their)m 497(running)s 1295(headers)s 2076(and)s 2480(footers,)s
+3250(b)s 4(ut)k 3612(other)s 4163(changes)s 4985(could)s
+5575(easily)s 6186(be)s 6468(made.)s 480 11475(It)m 682(w)s 2(as)k
+1099(foreshado)s 6(wed)k 2489(earlier)s 3153(that)s 3568(an)s
+3847(in)s 9(v)k 4(ocation)k 4897(of)s 220 fnt35
+5164 11472(@P)m 8(ageMar)k -3(k)k 4(er)k 240 fnt82
+6630 11475(w)m 2(ould)k 7281(precede)s 8076(each)s 8567(page,)s
+0 11187(and)m 412(this)s 817(has)s 1195(been)s 1713(done.)s
+2351(Although)s 3322(this)s 220 fnt35 3726 11184(@P)m 8(ageMar)k -3(k)k 4(er)k
+240 fnt82 5204 11187(is)m 5422(a)s 5597(component)s 6729(of)s
+7009(the)s 7365(root)s 7819(g)s 1(alle)k 3(y)k 15(,)k
+8499(it)s 8700(will)s 0 10899(not)m 366(cause)s 953(a)s
+1119(page)s 1627(to)s 1866(be)s 2148(printed,)s 2932(because)s
+3745(Basser)s 4442(Lout)s 4954(skips)s 5497(components)s 6705(of)s
+6976(height)s 7634(zero.)s 240 fnt84 0 10106(4.4.)m 471(Chapters)s
+1468(and)s 1909(sections)s 240 fnt82 480 9629(The)m 905(de\207nitions)s
+1962(of)s 2229(chapters)s 3073(and)s 3473(sections)s 4290(from)s
+4811(the)s 5155(DocumentSetup)s 6746(package)s 7583(of)s 7850(V)s 26(ersion)k
+8634(2)s 8804(\(in)s 0 9341(V)m 26(ersion)k 793(3,)s
+1026(the)s 1379(BookSetup)s 2503(e)s 3(xtension)k 3480(of)s
+3756(DocumentSetup\))s 5432(form)s 5961(the)s 6315(subject)s 7058(of)s
+7334(this)s 7736(section.)s 8583(The)s 3(y)k 0 9053(allo)m 6(w)k
+579(a)s 745(chapter)s 1508(to)s 1747(be)s 2029(entered)s
+2790(lik)s 2(e)k 3202(this:)s 220 fnt35 480 8552(@Chapter)m
+480 8264( @Title { ...)m 13( })k 480 7976( @T)m 26(ag { ...)k 13( })k
+480 7688(@Begin)m 480 7400( ...)m 480 7112(@End @Chapter)m 240 fnt82 0 6616(W)m 9(ithin)k
+712(the)s 1060(chapter)s 1823(a)s 1989(sequence)s 2922(of)s
+3193(sections)s 4014(may)s 4480(be)s 4762(included)s 5644(by)s
+5938(writing)s 220 fnt35 480 6115(@BeginSections)m 480 5827(@Section { ...)m 13( })k
+480 5539(...)m 480 5251(@Section { ...)m 13( })k 480 4963(@EndSections)m 240 fnt82
+0 4508(These)m 627(are)s 974(numbered)s 1989(automatically)s 15(,)k
+3381(and)s 3785(an)s 4068(entry)s 4613(is)s 4823(made)s
+5397(for)s 5735(each)s 6230(in)s 6473(a)s 6639(table)s
+7159(of)s 7430(contents.)s 480 4134(The)m 901(user)s 1352(of)s
+1615(the)s 1956(DocumentSetup)s 3544(package)s 4376(can)s 4758(\207nd)s
+5182(the)s 5522(number)s 6306(of)s 6570(the)s 6910(chapter)s
+7666(or)s 7918(section)s 8644(with)s 0 3846(a)m 176(gi)s 6(v)k 3(en)k
+766(tag)s 1121(by)s 1426(writing)s 220 fnt35 2179 3843(@NumberOf tag)m
+240 fnt82 3838 3846(at)m 4081(an)s 3(y)k 4488(point)s
+5050(in)s 5304(the)s 5662(document.)s 6780(This)s 7267(feature)s
+7995(is)s 8215(based)s 8829(on)s 0 3558(the)m 348(follo)s 6(wing)k
+1325(de\207nitions:)s 220 fnt35 480 3057(e)m 6(xpor)k -8(t @T)k 26(ag)k
+480 2769(def @NumberMar)m -3(k)k 4(er r)k -3(ight @T)k 26(ag { @Null })k
+480 2193(def @NumberOf r)m -3(ight x)k 480 1905({ @NumberMar)m -3(k)k 4(er&&x @Open { @T)k 26(ag } })k
+240 fnt82 0 1406(Each)m 522(chapter)s 1272(and)s 1663(section)s
+2384(will)s 2797(contain)s 3545(one)s 3934(in)s 9(v)k 4(ocation)k
+4975(of)s 220 fnt35 5233 1403(@NumberMar)m -3(k)k 4(er)k
+240 fnt82 6918 1406(;)m 7017(a)s 7170(full)s 7543(e)s 3(xplanation)k
+8700(will)s 0 1118(be)m 282(gi)s 6(v)k 3(en)k
+862(later)s 13(.)k 480 744(A)m 710(sequence)s 1643(of)s
+1914(places)s 2562(for)s 2900(recei)s 6(ving)k 3836(chapters)s
+4683(is)s 4893(easily)s 5504(de\207ned:)s 220 fnt35 480 243(e)m 6(xpor)k -8(t @T)k 26(ag)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 83 89
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(4.4.)m 454(Chapter)s 2(s)k 1385(and)s
+1811(sections)s 240 fnt84 8833 13840(83)m 220 fnt35 480 13207(def @ChapterList r)m -3(ight @T)k 26(ag)k
+480 12919({)m 480 12631( @Galle)m 4(y)k 480 12343( //@ChapterGap @ChapterList @Ne)m 6(xt @T)k 26(ag)k
+480 12055(})m 0 11558(@ChapterGap)m 240 fnt82 1505 11561(will)m 1967(usually)s
+2747(be)s 220 fnt35 3065 11558(1.1b)m 240 fnt82 3484 11561(,)m
+3626(ensuring)s 4539(that)s 4992(each)s 5523(chapter)s 6321(be)s 3(gins)k
+7030(on)s 7362(a)s 7564(ne)s 6(w)k 8046(page.)s
+8698(The)s 220 fnt35 0 11270(@Chapter)m 240 fnt82 1063 11273(g)m 1(alle)k 3(y)k
+1697(itself)s 2245(is)s 2455(de\207ned)s 3218(as)s 3468(follo)s 6(ws:)k
+220 fnt35 480 10772(e)m 6(xpor)k -8(t @F)k 6(ootNote @BeginSections @EndSections @Section)k
+480 10484(def @Chapter f)m 6(orce into { @ChapterList&&preceding })k 480 10196( named @T)m 26(ag {})k 480 9908( named @Title {})m
+480 9620( named @RunningTitle { dft })m 480 9332( body @Body)m 480 9044({)m 480 8756( def @F)m 6(ootNote r)k -3(ight x { @ColF)k 6(ootNote x })k
+480 8180( def @BeginSections ...)m 480 7892( def @EndSections ...)m 480 7604( def @Section ...)m 480 7151( def @ChapterTitle)m 480 6863( {)m
+480 6575( @ChapterNumbers @Case {)m 480 6287( {Y)m 30(es y)k 4(es} @Y)k 4(ield { Chapter {@NumberOf @T)k 26(ag}.)k 13( |2s @Title })k
+480 5999( else @Y)m 4(ield @Title)k 480 5711( })m 480 5423( })m 480 4847( def @ChapterNum)m
+480 4559( {)m 480 4271( @ChapterNumbers @Case {)m 480 3983( {Y)m 30(es y)k 4(es} @Y)k 4(ield { Chapter {@NumberOf @T)k 26(ag} })k
+480 3695( else @Y)m 4(ield @Null)k 480 3407( })m 480 3119( })m 480 2627( r)m 2(agged @Break @BookTitleF)k 6(or)k -5(mat @ChapterTitle)k
+480 2339( // @NumberMar)m -3(k)k 4(er {)k 480 2051( @ChapterList&&@T)m 26(ag @Open { @T)k 26(ag })k
+480 1763( })m 480 1475( // @ChapterList&&preceding @T)m 26(agged @T)k 26(ag)k 480 1187( // @NumberMar)m -3(k)k 4(er&&preceding @T)k 26(agged @T)k 26(ag)k
+480 899( // @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged @T)k 26(ag)k
+480 611( // { @ChapterTitle } @MajorContentsEntr)m -6(y {@P)k 8(ageOf @T)k 26(ag})k 480 323( // @Runner)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 84 90
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(84)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13207( @F)m 6(ootEv)k 5(en { |0.5r)k -8(t 0.8f @F)k 6(ont @B @P)k 8(ageNum })k
+480 12919( @F)m 6(ootOdd { |0.5r)k -8(t 0.8f @F)k 6(ont @B @P)k 8(ageNum })k
+480 12631( // @Body)m 480 12343( //@SectionGap @ChapRefSection)m 480 12055( // @Runner)m 480 11767( @T)m 26(opEv)k 5(en { @B @P)k 8(ageNum |1r)k -8(t @I @ChapterNum })k
+480 11479( @T)m 26(opOdd { @I {@RunningTitle @OrElse @Title} |1r)k -8(t @B @P)k 8(ageNum })k 480 11191(})m
+240 fnt82 0 10697(W)m 19(e)k 371(will)s 800(see)s
+1164(the)s 1515(symbols)s 2366(for)s 2707(sections)s 3531(shortly)s 15(.)k
+4347(Notice)s 5042(ho)s 6(w)k 5506(their)s 6006(use)s
+6384(has)s 6756(been)s 7268(restricted)s 8216(to)s 8458(within)s
+0 10409(the)m 348(right)s 859(parameter)s 1873(of)s 220 fnt35
+2144 10406(@Chapter)m 240 fnt82 3147 10409(,)m 3254(by)s 3548(nesting)s
+4292(them)s 4830(and)s 5234(using)s 5806(a)s 5972(body)s
+6506(parameter)s 13(.)k 480 10035(The)m 956(meaning)s 1882(of)s
+220 fnt35 2202 10032(@F)m 6(ootNote)k 240 fnt82 3422 10035(within)m
+220 fnt35 4139 10032(@Chapter)m 240 fnt82 5250 10035(has)m 5669(been)s
+6227(set)s 6601(to)s 220 fnt35 6889 10032(@ColF)m 6(ootNote)k
+240 fnt82 8328 10035(,)m 8484(which)s 0 9747(produces)m 907(a)s
+1064(footnote)s 1908(tar)s 4(geted)k 2722(to)s 220 fnt35
+2953 9744(@ColF)m 6(ootList)k 240 fnt82 4325 9747(\(see)m 4756(Section)s
+5521(4.3\).)s 6056(In)s 6303(other)s 6845(w)s 2(ords,)k
+7526(footnotes)s 8458(within)s 0 9459(chapters)m 851(go)s 1149(at)s
+1386(the)s 1739(foot)s 2189(of)s 2465(the)s 2818(column,)s
+3648(not)s 4019(at)s 4256(the)s 4609(foot)s 5059(of)s
+5335(the)s 5688(page.)s 6309(\(Of)s 6717(course,)s 7453(in)s
+7701(single-column)s 0 9171(books)m 623(this)s 1018(distinction)s 2083(is)s
+2292(insigni\207cant.\))s 220 fnt35 3721 9168(@ChapterTitle)m 240 fnt82 5188 9171(and)m
+220 fnt35 5591 9168(@ChapterNum)m 240 fnt82 7102 9171(are)m 7448(tri)s 6(vial)k
+8065(de\207nitions)s 0 8883(which)m 642(v)s 6(ary)k 1115(depending)s
+2166(on)s 2463(whether)s 3293(the)s 3641(user)s 4099(has)s
+4469(requested)s 5443(numbered)s 6458(chapters)s 7305(or)s 7564(not.)s
+480 8509(Each)m 1014(in)s 9(v)k 4(ocation)k 2066(of)s
+220 fnt35 2336 8506(@Chapter)m 240 fnt82 3397 8509(has)m 3766(its)s
+4040(o)s 6(wn)k 4503(unique)s 220 fnt35 5209 8506(@T)m 26(ag)k
+240 fnt82 5772 8509(,)m 5878(either)s 6479(supplied)s 7347(by)s
+7639(the)s 7986(user)s 8442(or)s 8699(else)s 0 8221(inserted)m
+835(automatically)s 2210(by)s 2525(Lout.)s 3162(W)s 19(e)k
+3553(no)s 6(w)k 4035(trace)s 4575(the)s 4944(cross)s
+5507(referencing)s 6669(of)s 6961(chapter)s 7745(numbers)s 8641(on)s
+8960(a)s 0 7933(h)m 1(ypothetical)k 1236(third)s 1745(chapter)s
+2508(whose)s 3176(tag)s 3521(is)s 220 fnt35 3731 7930(euclid)m
+240 fnt82 4291 7933(.)m 220 fnt35 480 7556(@ChapterList&&preceding @T)m 26(agged euclid)k
+240 fnt82 4758 7559(attaches)m 220 fnt35 5574 7556(euclid)m 240 fnt82
+6190 7559(as)m 6436(an)s 6715(e)s 3(xtra)k 7245(tag)s
+7586(to)s 7821(the)s 8165(\207rst)s 8592(in)s 9(v)k 4(o)k
+8998(-)s 0 7271(cation)m 653(of)s 220 fnt35 937 7268(@ChapterList)m
+240 fnt82 2350 7271(preceding)m 3359(itself)s 3920(in)s 4176(the)s
+4536(\207nal)s 5029(printed)s 5777(document.)s 6898(But)s 7317(this)s
+220 fnt35 7726 7268(@ChapterList)m 240 fnt82 0 6983(must)m 525(be)s
+807(the)s 1155(tar)s 4(get)k 1754(of)s 2025(the)s
+2373(chapter)s 9(,)k 3174(and)s 3578(so)s 220 fnt35
+480 6482(@ChapterList&&euclid @Open { @T)m 26(ag })k 240 fnt82 0 5983(is)m 200(3,)s
+416(the)s 754(number)s 1534(of)s 1795(the)s 2132(chapter)s
+2885(\()s 220 fnt35 2958 5980(@T)m 26(ag)k 240 fnt82
+3570 5983(refers)m 4153(to)s 4381(the)s 4719(parameter)s 5722(of)s
+220 fnt35 5983 5980(@ChapterList)m 240 fnt82 7323 5983(,)m 7419(not)s
+7775(the)s 8112(parameter)s 0 5695(of)m 220 fnt35 272 5692(@Chapter)m
+240 fnt82 1275 5695(\).)m 1520(Consequently)s 2892(the)s 3242(in)s 9(v)k 4(ocation)k
+4297(of)s 220 fnt35 4570 5692(@NumberMar)m -3(k)k 4(er)k
+240 fnt82 6317 5695(within)m 6986(the)s 7336(chapter)s 8100(is)s
+8312(equal)s 8887(to)s 220 fnt35 0 5404(@NumberMar)m -3(k)k 4(er 3)k
+240 fnt82 1861 5407(.)m 220 fnt35 480 5030(@NumberMar)m -3(k)k 4(er&&preceding @T)k 26(agged euclid)k
+240 fnt82 5137 5033(attaches)m 220 fnt35 5992 5030(euclid)m 240 fnt82
+6646 5033(to)m 220 fnt35 6920 5030(@NumberMar)m -3(k)k 4(er 3)k
+240 fnt82 8876 5033(as)m 0 4745(an)m 283(e)s 3(xtra)k
+817(tag,)s 1216(and)s 1620(so)s 220 fnt35 1886 4742(@NumberOf euclid)m
+240 fnt82 3742 4745(,)m 3849(which)s 4491(e)s 3(xpands)k
+5324(to)s 220 fnt35 480 4244(@NumberMar)m -3(k)k 4(er&&euclid @Open { @T)k 26(ag })k
+240 fnt82 0 3745(must)m 538(be)s 833(equal)s 1419(to)s
+1671(3,)s 1911(as)s 2175(required.)s 3148(This)s 3637(scheme)s
+4423(could)s 5026(be)s 5322(simpli\207ed)s 6349(by)s 6656(placing)s
+7426(the)s 7787(in)s 9(v)k 4(ocation)k 8855(of)s
+220 fnt35 0 3454(@NumberMar)m -3(k)k 4(er)k 240 fnt82
+1758 3457(within)m 220 fnt35 2440 3454(@ChapterList)m 240 fnt82 3854 3457(rather)m
+4484(than)s 4966(within)s 220 fnt35 5648 3454(@Chapter)m 240 fnt82
+6651 3457(,)m 6772(b)s 4(ut)k 7148(it)s 7353(turns)s
+7896(out)s 8276(that)s 8708(that)s 0 3169(scheme)m 773(does)s
+1263(not)s 1629(generalize)s 2666(well)s 3132(to)s 3371(sections)s
+4192(and)s 4596(subsections.)s 480 2795(There)m 1124(is)s 1365(a)s
+1562(trap)s 2017(for)s 2386(the)s 2765(unw)s 2(ary)k
+3566(in)s 3840(the)s 4219(use)s 4625(of)s 220 fnt35
+4927 2792(preceding)m 240 fnt82 5969 2795(and)m 220 fnt35 6404 2792(f)m 6(ollo)k 3(wing)k
+240 fnt82 7234 2795(.)m 7429(Suppose)s 8328(that)s 8778(the)s
+0 2507(in)m 9(v)k 4(ocation)k 1054(of)s 220 fnt35
+1325 2504(@NumberMar)m -3(k)k 4(er)k 240 fnt82 3070 2507(within)m
+220 fnt35 3738 2504(@Chapter)m 240 fnt82 4801 2507(is)m 5011(replaced)s
+5878(by)s 6172(the)s 6520(seemingly)s 7557(equi)s 6(v)k 6(alent)k
+220 fnt35 480 2006(@NumberMar)m -3(k)k 4(er { @ChapterList&&preceding @Open { @T)k 26(ag } })k
+240 fnt82 0 1507(No)m 6(w)k 514(suppose)s 1342(that)s
+220 fnt35 1760 1504(@NumberOf euclid)m 240 fnt82 3676 1507(appears)m 4457(some)s 6(where)k
+5596(within)s 6264(Chapter)s 7081(7.)s 7365(It)s 7570(will)s
+7996(e)s 3(xpand)k 8743(to)s 220 fnt35 480 1006(@NumberMar)m -3(k)k 4(er&&euclid @Open { @T)k 26(ag })k
+240 fnt82 0 507(which)m 642(w)s 2(ould)k 1297(no)s 6(w)k
+1758(be)s 2040(equal)s 2613(to)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 85 91
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(4.4.)m 454(Chapter)s 2(s)k 1385(and)s
+1811(sections)s 240 fnt84 8833 13840(85)m 220 fnt35 480 13207(@ChapterList&&preceding @Open { @T)m 26(ag })k
+240 fnt82 0 12708(whose)m 663(v)s 6(alue,)k 1276(e)s 6(v)k 6(aluated)k
+2233(as)s 2477(it)s 2663(is)s 2868(within)s 3530(Chapter)s
+4342(7,)s 4563(is)s 4767(7,)s 4989(not)s 5349(3.)s
+5628(Use)s 6050(of)s 220 fnt35 6315 12705(preceding)m 240 fnt82
+7321 12708(or)m 220 fnt35 7574 12705(f)m 6(ollo)k 3(wing)k
+240 fnt82 8458 12708(within)m 0 12420(the)m 348(parameter)s 1362(of)s
+1633(a)s 1799(symbol,)s 2611(rather)s 3227(than)s 3696(within)s
+4364(the)s 4712(body)s 15(,)k 5284(is)s 5494(lik)s 2(ely)k
+6090(to)s 6329(be)s 6611(erroneous.)s 480 12046(Much)m 1112(of)s
+1400(the)s 1765(remainder)s 2810(of)s 3098(the)s 3463(de\207nition)s
+4454(of)s 220 fnt35 4742 12043(@Chapter)m 240 fnt82 5822 12046(is)m
+6049(f)s 2(airly)k 6634(self-e)s 3(xplanatory:)k 8366(there)s
+8916(is)s 0 11758(a)m 180(heading,)s 1060(a)s 1241(tag)s
+1601(sent)s 2060(to)s 2314(mark)s 2881(the)s 3244(page)s
+3766(on)s 4078(which)s 4735(the)s 5098(chapter)s 5875(be)s 3(gins,)k
+6619(a)s 220 fnt35 6800 11755(@ContentsEntr)m -6(y)k 240 fnt82
+8492 11758(g)m 1(alle)k 3(y)k 0 11470(sent)m 484(to)s
+762(the)s 1149(table)s 1708(of)s 2018(contents,)s 2961(g)s 1(alle)k 3(ys)k
+3724(for)s 4101(the)s 4489(\207gures)s 5230(and)s 5673(tables)s
+6320(of)s 6630(the)s 7017(chapter)s 7819(to)s 8097(collect)s
+8833(in,)s 220 fnt35 0 11179(@Body)m 240 fnt82 781 11182(where)m
+1421(the)s 1769(body)s 2303(of)s 2574(the)s 2922(chapter)s
+3685(goes,)s 4230(and)s 220 fnt35 4634 11179(@ChapRefSection)m 240 fnt82
+6499 11182(to)m 6738(hold)s 7222(a)s 7388(concluding)s 8505(list)s
+8855(of)s 0 10894(references.)m 1144(This)s 1620(lea)s 4(v)k 3(es)k
+2261(only)s 2741(the)s 3089(tw)s 2(o)k 3499(in)s 9(v)k 4(ocations)k
+4640(of)s 220 fnt35 4911 10891(@Runner)m 240 fnt82 5913 10894(to)m
+6152(e)s 3(xplain.)k 480 10520(The)m 977(\207rst)s 220 fnt35
+1478 10517(@Runner)m 240 fnt82 2550 10520(is)m 2830(just)s 3305(belo)s 6(w)k
+4008(the)s 4426(heading.)s 5418(It)s 5693(will)s 6189(be)s
+6541(the)s 6959(tar)s 4(get)k 7628(of)s 7969(the)s
+220 fnt35 8387 10517(@Run)m 240 fnt82 8998 10520(-)m 220 fnt35
+0 10229(ner&&f)m 6(ollo)k 3(wing)k 240 fnt82 1494 10232(cross)m
+2030(reference)s 2967(at)s 3194(the)s 3536(be)s 3(ginning)k
+4538(of)s 4803(the)s 5146(\207rst)s 5571(page)s 6073(of)s
+6338(the)s 6681(chapter)s 7438(\(see)s 7872(Section)s 8640(4.3\),)s
+0 9944(which)m 642(consequently)s 1959(will)s 2385(ha)s 4(v)k 3(e)k
+2886(null)s 3313(running)s 4111(headers)s 4892(and)s 5296(the)s
+5644(gi)s 6(v)k 3(en)k 6224(footers.)s 480 9570(The)m
+954(second)s 220 fnt35 1724 9567(@Runner)m 240 fnt82 2772 9570(appears)m
+3600(at)s 3878(the)s 4273(v)s 3(ery)k 4795(end)s
+5246(of)s 5563(the)s 5958(chapter)s 9(,)k 6805(hence)s
+7466(on)s 7809(its)s 8132(last)s 8570(page.)s 0 9282(Since)m
+595(no)s 896(in)s 9(v)k 4(ocations)k 2046(of)s
+220 fnt35 2325 9279(@Runner)m 240 fnt82 3335 9282(lie)m 3638(between)s
+4500(it)s 4700(and)s 5113(the)s 5469(\207rst)s 220 fnt35
+5908 9279(@Runner)m 240 fnt82 6850 9282(,)m 6966(it)s 7166(will)s
+7600(be)s 7891(the)s 8247(tar)s 4(get)k 8855(of)s
+220 fnt35 0 8991(@Runner&&f)m 6(ollo)k 3(wing)k 240 fnt82
+2134 8994(on)m 2442(e)s 6(v)k 3(ery)k 3029(page)s
+3547(from)s 4082(the)s 4441(second)s 5175(page)s 5693(of)s
+5975(the)s 6334(chapter)s 7107(to)s 7357(the)s 7716(last,)s
+8165(inclusi)s 6(v)k 3(e,)k 0 8706(and)m 404(will)s
+830(supply)s 1523(the)s 1871(format)s 2567(of)s 2838(their)s
+3335(headers)s 4116(and)s 4520(footers.)s 480 8332(The)m 908(interested)s
+1893(reader)s 2549(might)s 3166(care)s 3618(to)s 3857(predict)s
+4579(the)s 4927(outcome)s 5806(in)s 6048(unusual)s 6848(cases,)s
+7458(such)s 7954(as)s 8203(when)s 8778(the)s 0 8044(heading)m
+811(occupies)s 1699(tw)s 2(o)k 2109(pages,)s 2761(or)s
+3020(when)s 3596(a)s 3762(chapter)s 4524(occupies)s 5412(only)s
+5892(one,)s 6345(or)s 6604(\(assuming)s 7640(a)s 7806(change)s
+8540(to)s 8778(the)s 0 7756(g)m 1(ap)k 386(between)s
+1227(chapters\))s 2138(when)s 2702(a)s 2855(chapter)s 3605(starts)s
+4146(halfw)s 2(ay)k 4956(do)s 6(wn)k 5527(a)s
+5680(page.)s 6283(Such)s 6807(predictions)s 7907(can)s 8283(be)s
+8552(made)s 0 7468(with)m 482(great)s 1019(con\207dence.)s 480 7094(The)m
+903(e)s 3(xpression)k 220 fnt35 1975 7091(@RunningTitle @OrElse @Title)m 240 fnt82
+5125 7094(appearing)m 6116(in)s 6354(the)s 6697(second)s 220 fnt35
+7415 7091(@Runner)m 240 fnt82 8412 7094(returns)m 0 6806(the)m 354(v)s 6(alue)k
+928(of)s 1205(the)s 220 fnt35 1560 6803(@RunningTitle)m 240 fnt82
+3070 6806(parameter)m 4090(of)s 220 fnt35 4368 6803(@Chapter)m 240 fnt82
+5437 6806(if)m 5660(this)s 6063(is)s 6279(not)s 6651(equal)s
+7231(to)s 7476(the)s 7830(def)s 2(ault)k 8558(v)s 6(alue)k
+220 fnt35 0 6515(dft)m 240 fnt82 240 6518(,)m 347(or)s
+220 fnt35 606 6515(@Title)m 240 fnt82 1294 6518(otherwise:)m 220 fnt35
+480 6036(def @OrElse)m 480 5748( left x)m 480 5460( r)m -3(ight y)k 480 5172({)m
+480 4884( x @Case {)m 480 4596( dft @Y)m 4(ield y)k 480 4308( else @Y)m 4(ield x)k
+480 4020( })m 480 3732(})m 240 fnt82 0 3238(This)m 476(produces)s
+1391(the)s 1739(ef)s 6(fect)k 2335(of)s 220 fnt35
+480 2737(named @RunningTitle { @Title })m 240 fnt82 0 2238(which)m 676(unfortunately)s 2052(is)s
+2296(not)s 2696(permissible)s 3887(as)s 4171(it)s 4397(stands,)s
+5136(because)s 220 fnt35 5983 2235(@Title)m 240 fnt82 6705 2238(is)m
+6949(not)s 7349(visible)s 8076(within)s 8778(the)s 0 1950(def)m 2(ault)k
+721(v)s 6(alue)k 1289(of)s 220 fnt35 1560 1947(@RunningTitle)m
+240 fnt82 3004 1950(.)m 480 1576(Finally)m 15(,)k 1249(the)s
+1597(de\207nitions)s 2658(for)s 2996(sections)s 3817(omitted)s 4605(earlier)s
+5273(are)s 5620(as)s 5870(follo)s 6(ws:)k 220 fnt35
+480 1075(def @EndSectionsPlace { @Galle)m 4(y })k 480 787(def @EndSections f)m 6(orce into { @EndSectionsPlace&&preceding } {})k 480 499(macro @BeginSections { //@SectionGap @SectionList 1 // @EndSectionsPlace // })m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 86 92
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(86)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 220 fnt35 480 13207(def @Section f)m 6(orce into { @SectionList&&preceding })k 480 12919( named @T)m 26(ag {})k
+480 12631( named @Title {})m 480 12343( named @RunningTitle { dft })m 480 12055( body @Body)m 480 11767({)m 480 11479( def @SectionTitle)m
+480 11191( {)m 480 10903( @SectionNumbers @Case {)m 480 10615( {Y)m 30(es y)k 4(es} @Y)k 4(ield { {@NumberOf @T)k 26(ag}.)k 13( |2s @Title })k
+480 10327( else @Y)m 4(ield @Title)k 480 10039( })m 480 9751( })m 480 9175( @Heading @Protect @SectionTitle)m
+480 8887( // @NumberMar)m -3(k)k 4(er {)k 480 8599( {@ChapterList&&@T)m 26(ag @Open { @T)k 26(ag }}.{)k
+480 8311( @SectionList&&@T)m 26(ag @Open { @T)k 26(ag }})k 480 8023( })m 480 7735( // @ChapterList&&preceding @T)m 26(agged @T)k 26(ag)k
+480 7447( // @SectionList&&preceding @T)m 26(agged @T)k 26(ag)k 480 7159( // @NumberMar)m -3(k)k 4(er&&preceding @T)k 26(agged @T)k 26(ag)k
+480 6871( // @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged @T)k 26(ag)k
+480 6583( // { &3f @SectionTitle } @ContentsEntr)m -6(y {@P)k 8(ageOf @T)k 26(ag})k 480 6295( //0io @Body)m
+480 6007(})m 240 fnt82 0 5513(The)m 220 fnt35 409 5510(@BeginSections)m
+240 fnt82 2066 5513(macro)m 2696(in)s 9(v)k 4(ok)k 2(es)k
+220 fnt35 3457 5510(@SectionList)m 240 fnt82 4748 5513(,)m 4835(preceded)s
+5736(by)s 6010(the)s 6338(appropriate)s 7462(g)s 1(ap)k
+7840(and)s 8224(follo)s 6(wed)k 0 5225(by)m 284(an)s
+220 fnt35 556 5222(@EndSectsPlace)m 240 fnt82 2307 5225(for)m 2635(closing)s
+3368(the)s 3705(list)s 4045(of)s 4306(sections)s 5116(when)s
+5681(the)s 220 fnt35 6019 5222(@EndSections)m 240 fnt82 7515 5225(symbol)m
+8264(is)s 8463(found.)s 220 fnt35 0 4934(@Section)m 240 fnt82
+997 4937(itself)m 1542(is)s 1749(just)s 2151(a)s 2314(cop)s 2(y)k
+2829(of)s 220 fnt35 3097 4934(@Chapter)m 240 fnt82 4156 4937(with)m
+4635(slight)s 5223(changes)s 6042(to)s 6278(the)s 6623(format.)s
+7420(The)s 7845(parameter)s 8855(of)s 220 fnt35 0 4646(@NumberMar)m -3(k)k 4(er)k
+240 fnt82 1752 4649(is)m 1970(a)s 2143(simple)s 2844(generalization)s
+4262(of)s 4540(the)s 4896(one)s 5305(within)s 220 fnt35
+5981 4646(@Chapter)m 240 fnt82 6984 4649(.)m 7156(Notice)s 7856(that)s
+8282(we)s 8625(ha)s 4(v)k 3(e)k 0 4361(tak)m 2(en)k
+573(care)s 1026(that)s 1444(the)s 1792(v)s 6(alue)k
+2360(of)s 2631(this)s 3027(parameter)s 4041(be)s 4323(a)s
+4489(juxtaposition)s 5795(of)s 6066(simple)s 6759(w)s 2(ords:)k
+7508(although)s 220 fnt35 480 3860({@ChapterList&&@T)m 26(ag @Open { @T)k 26(ag }}.)k 13( &)k
+480 3572({@SectionList&&@T)m 26(ag @Open { @T)k 26(ag }})k 240 fnt82 0 3073(is)m
+210(formally)s 1086(equi)s 6(v)k 6(alent,)k 220 fnt35
+2177 3070(&)m 240 fnt82 2379 3073(w)m 2(as)k 2800(not)s
+3166(permitted)s 4139(within)s 4807(a)s 220 fnt35 4973 3070(@T)m 26(ag)k
+240 fnt82 5596 3073(parameter)m 6610(until)s 7103(recently)s 15(.)k
+480 2699(The)m 930(DocumentSetup)s 2548(package)s 3411(also)s 3872(contains)s
+4743(de\207nitions)s 5826(for)s 6187(subsections)s 7364(in)s 7630(the)s
+8001(same)s 8571(style.)s 0 2411(The)m 3(y)k 564(raise)s
+1091(the)s 1461(question)s 2350(of)s 2643(whether)s 3494(Lout)s
+4028(is)s 4259(capable)s 5066(of)s 5359(producing)s 6404(subsections)s
+7580(should)s 8298(the)s 8668(user)s 0 2123(place)m 220 fnt35
+542 2120(@BeginSections)m 240 fnt82 2159 2123(,)m 220 fnt35 2248 2120(@Section)m
+240 fnt82 3188 2123(,)m 3276(and)s 220 fnt35 3662 2120(@EndSections)m
+240 fnt82 5151 2123(within)m 5800(a)s 240 fnt83 5948 2125(section)m
+240 fnt82 6619 2123(,)m 6708(and)s 7093(whether)s 7905(such)s
+8382(nesting)s 0 1835(could)m 592(proceed)s 1409(to)s 1650(arbitrary)s
+2527(depth.)s 3225(Arbitrary)s 4169(nesting)s 4915(of)s 5188(sections)s
+6011(within)s 6681(sections)s 7504(is)s 7716(a)s 4(v)k 6(ailable)k
+8627(no)s 6(w)k 15(,)k 0 1547(although)m 883(the)s
+1218(numbering)s 2295(w)s 2(ould)k 2937(of)s 3195(course)s
+3862(be)s 4131(wrong.)s 4894(The)s 5309(author)s 5967(has)s
+6324(w)s 2(ork)k 2(ed)k 7083(out)s 7436(de\207nitions)s
+8484(which)s 0 1259(pro)m 3(vide)k 773(correct)s 1484(numbering)s
+2563(to)s 2790(arbitrary)s 3654(depth,)s 4282(with)s 4752(an)s
+5024(arbitrary)s 5888(format)s 6573(for)s 6899(each)s 7383(le)s 6(v)k 3(el.)k
+7991(These)s 8606(were)s 0 971(not)m 376(incorporated)s 1652(into)s
+2087(DocumentSetup)s 3693(because)s 4516(the)s 4874(author)s 5555(considers)s
+6520(sub-)s 6921(subsections)s 8085(to)s 8334(be)s 8627(poor)s
+0 683(style,)m 558(and)s 962(he)s 1244(prefers)s 1957(separate)s
+2795(names)s 3457(for)s 3795(the)s 4143(symbols)s 4992(at)s
+5224(each)s 5719(le)s 6(v)k 3(el.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 87 93
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(4.5.)m 454(Biblio)s 2(gr)k 3(aphies)k
+240 fnt84 8831 13840(87)m 0 13203(4.5.)m 471(Bibliographies)s 240 fnt82
+533 12726(The)m 953(\207rst)s 1376(step)s 1806(in)s 2041(the)s
+2382(production)s 3468(of)s 3731(a)s 3889(bibliograph)s 1(y)k
+5157(is)s 5359(to)s 5591(create)s 6208(a)s 6366(database)s
+7237(of)s 7500(references)s 8523(based)s 0 12438(on)m 297(the)s
+645(de\207nition)s 220 fnt35 480 11987(e)m 6(xpor)k -8(t @T)k 26(ype @A)k 6(uthor @Title @Institution @Number @Pub)k 4(lisher)k
+480 11699( @Y)m 30(ear @Proceedings @Jour)k -5(nal @V)k 17(olume @P)k 8(ages @Comment)k
+480 11123(def @Ref)m 6(erence)k 480 10835( named @T)m 26(ag)k 3270({ )s 11(T)k 26(A)k 6(G? })k
+480 10547( named @T)m 26(ype)k 3270({ )s 11(TYPE? })k 480 10259( named @A)m 6(uthor)k
+3270({ A)s 11(UTHOR? })k 480 9971( named @Title)m 3270({ )s 11(TITLE? })k
+480 9683( named @Institution)m 3270({ INSTITUTION? })s 480 9395( named @Number)m 3270({ NUMBER? })s 480 9107( named @Pub)m 4(lisher)k
+3270({ PUBLISHER? })s 480 8819( named @Y)m 30(ear)k 3270({ )s 19(YEAR? })k
+480 8531( named @Proceedings)m 3270({ PR)s 4(OCEEDINGS? })k 480 8243( named @Jour)m -5(nal)k
+3270({ JOURNAL? })s 480 7955( named @V)m 17(olume)k 3270({ )s 11(V)k 8(OLUME? })k
+480 7667( named @P)m 8(ages)k 3270({ P)s 26(A)k 6(GES? })k
+480 7379( named @Comment)m 3270({ @Null })s 480 7091({ @Null })m 240 fnt82 0 6597(F)m 3(or)k
+389(e)s 3(xample,)k 1303(the)s 1651(database)s 2530(might)s
+3148(contain)s 220 fnt35 480 6096({ @Ref)m 6(erence)k 480 5808( @T)m 26(ag { str)k -3(unk1979style })k
+480 5520( @T)m 26(ype { Book })k 480 5232( @A)m 6(uthor { Str)k -3(unk, )k 8(William and )k 8(White)k 3(, E.)k 13( B)k 4(.)k 13( })k
+480 4944( @Title { )m 11(The Elements of Style })k 480 4656( @Pub)m 4(lisher { MacMillan, third edition })k 480 4368( @Y)m 30(ear { 1979 })k
+480 4080(})m 480 3588({ @Ref)m 6(erence)k 480 3300( @T)m 26(ag { kingston92 })k
+480 3012( @T)m 26(ype { )k 11(T)k 26(echRepor)k -8(t })k
+480 2724( @A)m 6(uthor { Kingston, Jeffre)k 4(y H.)k 13( })k 480 2436( @Title { Document F)m 6(or)k -5(matting with Lout \(Second Edition\) })k
+480 2148( @Number { 449 })m 480 1860( @Institution { Basser Depar)m -8(tment of Computer)k 480 1572(Science F09, Univ)m 5(ersity of Sydne)k 4(y 2006, A)k 6(ustr)k 2(alia })k
+480 1284( @Y)m 30(ear { 1992 })k 480 996(})m 240 fnt82 0 502(Since)m
+596(named)s 1301(parameters)s 2408(are)s 2764(optional,)s 3664(we)s
+4008(ha)s 4(v)k 3(e)k 4519(one)s 4930(for)s
+5277(e)s 6(v)k 3(ery)k 5862(concei)s 6(v)k 6(able)k
+7057(type)s 7534(of)s 7814(attrib)s 4(ute,)k 8722(and)s
+0 214(simply)m 702(lea)s 4(v)k 3(e)k 1252(out)s
+1614(those)s 2172(that)s 2586(do)s 2876(not)s 3238(apply)s
+3821(in)s 4060(an)s 3(y)k 4454(particular)s 5424(reference.)s
+6472(W)s 19(e)k 6837(can)s 7223(print)s 7730(a)s
+7893(reference)s 8832(by)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 88 94
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(88)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 240 fnt82 0 13205(using)m 572(the)s 220 fnt35
+920 13202(@Open)m 240 fnt82 1726 13205(symbol)m 2486(to)s 2725(get)s
+3077(at)s 3309(its)s 3585(attrib)s 4(utes:)k 220 fnt35
+480 12704(@Ref)m 6(erence&&str)k -3(unk1979style @Open)k 480 12416({ @A)m 6(uthor)k 11(, {Slope @F)k 6(ont @Title}.)k 13( @Pub)k 4(lisher)k 11(, @Y)k 30(ear)k 11(.)k 13( })k
+240 fnt82 0 11920(The)m 428(right)s 939(parameter)s 1953(of)s
+220 fnt35 2224 11917(@Open)m 240 fnt82 3030 11920(may)m 3496(use)s
+3871(the)s 4219(e)s 3(xported)k 5111(parameters)s 6209(of)s
+6480(the)s 6828(left,)s 7252(and)s 7656(so)s 7922(the)s
+8270(result)s 8860(is)s 480 11415(W)m 9(illiam)k 1313(Strunk)s
+2012(and)s 2416(E.)s 2666(B.)s 2930(White,)s 240 fnt83
+3681 11417(The)m 4093(Elements)s 5024(of)s 5305(Style)s 240 fnt82
+5762 11415(.)m 5926(Macmillan,)s 7068(1979.)s 0 10916(Incidentally)m 15(,)k
+1235(we)s 1573(are)s 1923(not)s 2292(limited)s 3029(to)s
+3271(just)s 3679(one)s 4084(database)s 4966(of)s 5240(references;)s
+6335(se)s 6(v)k 3(eral)k 220 fnt35 7060 10913(@Database)m
+240 fnt82 8277 10916(symbols)m 0 10628(can)m 380(nominate)s 1317(the)s
+1656(same)s 2193(symbol,)s 2996(and)s 3391(in)s 9(v)k 4(ocations)k
+4523(of)s 4784(that)s 5193(symbol)s 5944(can)s 6324(appear)s
+7011(in)s 7245(the)s 7584(document)s 8578(itself)s 0 10340(as)m
+250(well)s 716(if)s 933(we)s 1268(wish.)s 480 9966(The)m
+930(second)s 1675(step)s 2135(is)s 2368(to)s 2629(create)s
+3276(a)s 3464(database)s 4366(of)s 4659(print)s 5192(styles)s
+5809(for)s 6170(the)s 6540(v)s 6(arious)k 7311(types)s
+7889(of)s 8183(reference)s 0 9678(\(Book,)m 706(T)s 16(echReport,)k
+1926(etc.\),)s 2450(based)s 3053(on)s 3350(the)s 3698(follo)s 6(wing)k
+4675(de\207nition:)s 220 fnt35 480 9177(e)m 6(xpor)k -8(t @Style)k
+480 8889(def @RefStyle)m 480 8601( left @T)m 26(ag)k 480 8313( named @Style r)m -3(ight reftag {})k
+480 8025({})m 240 fnt82 0 7531(Notice)m 682(that)s 1089(the)s
+1426(named)s 2111(parameter)s 220 fnt35 3114 7528(@Style)m 240 fnt82
+3865 7531(has)m 4224(a)s 4379(right)s 4879(parameter)s 220 fnt35
+5882 7528(reftag)m 240 fnt82 6431 7531(.)m 6584(The)s 7001(style)s
+7497(database)s 8365(has)s 8724(one)s 0 7243(entry)m 545(for)s
+883(each)s 1378(type)s 1846(of)s 2117(reference:)s 220 fnt35
+480 6742({ Book @RefStyle @Style)m 480 6454( { @Ref)m 6(erence&&reftag @Open)k 480 6166( { @A)m 6(uthor)k 11(, {Slope @F)k 6(ont @Title}.)k 13( @Pub)k 4(lisher)k 11(, @Y)k 30(ear)k 11(.)k 13( @Comment })k
+480 5878( })m 480 5590(})m 480 5014({ )m 11(T)k 26(echRepor)k -8(t @RefStyle @Style)k
+480 4726( { @Ref)m 6(erence&&reftag @Open)k 480 4438( { @A)m 6(uthor)k 11(, {Slope @F)k 6(ont @Title}.)k 13( )k 11(T)k 26(ech.)k 13( Rep)k 7(.)k 13( @Number \(@Y)k 30(ear\),)k
+480 4150(@Institution.)m 13( @Comment })k 480 3862( })m 480 3574(})m 240 fnt82
+0 3080(and)m 404(so)s 670(on.)s 1074(The)s 1502(follo)s 6(wing)k
+2479(prints)s 3074(the)s 3422(reference)s 4365(whose)s 5033(tag)s
+5378(is)s 220 fnt35 5588 3077(str)m -3(unk1979style)k 240 fnt82
+7180 3080(in)m 7423(the)s 7771(Book)s 8352(style:)s 220 fnt35
+480 2579(@RefStyle&&Book @Open { @Style str)m -3(unk1979style })k 240 fnt82 0 2081(It)m 205(has)s
+575(result)s 480 1626(W)m 9(illiam)k 1313(Strunk)s 2012(and)s
+2416(E.)s 2666(B.)s 2930(White.)s 240 fnt83 3678 1628(The)m
+4090(Elements)s 5021(of)s 5302(Style)s 240 fnt82 5759 1626(.)m
+5923(Macmillan)s 6955(.)s 7119(Third)s 7708(Edition)s 8409(,)s
+8516(1979)s 8987(.)s 0 1127(Notice)m 696(ho)s 6(w)k
+1160(the)s 220 fnt35 1512 1124(@Style)m 240 fnt82 2277 1127(parameter)m
+3295(of)s 220 fnt35 3569 1124(@RefStyle)m 240 fnt82 4675 1127(is)m
+4889(gi)s 6(v)k 3(en)k 5472(the)s 5824(parameter)s
+220 fnt35 6841 1124(str)m -3(unk1979style)k 240 fnt82 8373 1127(,)m
+8484(which)s 0 839(it)m 192(uses)s 655(to)s 894(open)s
+1417(the)s 1765(appropriate)s 2909(reference.)s 480 465(W)m 19(e)k
+858(can)s 1256(consult)s 2017(the)s 220 fnt35 2374 462(@T)m 26(ype)k
+240 fnt82 3121 465(attrib)m 4(ute)k 3977(of)s 4258(a)s
+4433(reference)s 5386(to)s 5634(\207nd)s 6075(out)s 6450(its)s
+6736(style,)s 7303(which)s 7955(brings)s 8613(us)s 8887(to)s
+0 177(the)m 348(follo)s 6(wing)k 1325(de\207nition)s 2299(for)s
+2637(printing)s 3447(out)s 3813(a)s 3979(reference)s 4922(in)s
+5165(the)s 5513(style)s 6020(appropriate)s 7164(to)s 7403(it:)s
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 89 95
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(4.5.)m 454(Biblio)s 2(gr)k 3(aphies)k
+240 fnt84 8832 13840(89)m 220 fnt35 480 13207(def @RefPr)m -3(int)k
+480 12919( r)m -3(ight reftag)k 480 12631({ @RefStyle&&{ @Ref)m 6(erence&&reftag @Open { @T)k 26(ype } })k
+480 12343( @Open { @Style reftag })m 480 12055(})m 240 fnt82 0 11561(F)m 3(or)k
+389(e)s 3(xample,)k 1303(to)s 1542(e)s 6(v)k 6(aluate)k
+220 fnt35 2382 11558(@RefPr)m -3(int str)k -3(unk1979style)k 240 fnt82
+4992 11561(,)m 5099(Lout)s 5611(\207rst)s 6042(e)s 6(v)k 6(aluates)k
+220 fnt35 480 11060(@Ref)m 6(erence&&str)k -3(unk1979style @Open { @T)k 26(ype })k
+240 fnt82 0 10562(whose)m 668(result)s 1258(is)s 220 fnt35
+1468 10559(Book)m 240 fnt82 1968 10562(,)m 2075(and)s 2479(then)s
+2948(e)s 6(v)k 6(aluates)k 220 fnt35 480 10080(@RefStyle&&Book @Open { @Style str)m -3(unk1979style })k
+240 fnt82 0 9582(as)m 266(before.)s 1056(Complicated)s 2353(as)s
+2619(this)s 3032(is,)s 3314(with)s 3813(its)s 4105(tw)s 2(o)k
+4531(databases)s 5515(and)s 5935(cle)s 6(v)k 3(er)k
+6586(passing)s 7373(about)s 7982(of)s 8269(tags,)s 8778(the)s
+0 9294(adv)m 6(antages)k 1098(of)s 1359(separating)s 2384(references)s
+3405(from)s 3919(printing)s 4718(styles)s 5303(are)s 5640(considerable:)s
+7004(printing)s 7804(styles)s 8389(may)s 8844(be)s 0 9006(changed)m
+856(easily)s 15(,)k 1505(and)s 1909(non-e)s 3(xpert)k
+3002(users)s 3544(need)s 4054(ne)s 6(v)k 3(er)k
+4636(see)s 4997(them.)s 480 8632(Finally)m 15(,)k 1243(we)s
+1571(come)s 2138(to)s 2370(the)s 2711(problem)s 3561(of)s
+3825(printing)s 4628(out)s 4987(a)s 5146(numbered)s 6154(list)s
+6498(of)s 6762(references,)s 7842(and)s 8239(referring)s 0 8344(to)m
+251(them)s 802(by)s 1108(number)s 1912(in)s 2167(the)s
+2528(body)s 3074(of)s 3358(the)s 3718(document.)s 4839(The)s
+5279(\207rst)s 5723(step)s 6173(is)s 6396(to)s 6647(create)s
+7285(a)s 7463(numbered)s 8491(list)s 8855(of)s 0 8056(places)m
+648(that)s 1066(g)s 1(alle)k 3(ys)k 1790(containing)s
+2853(references)s 3884(may)s 4350(attach)s 4977(to:)s 220 fnt35
+480 7555(def @Ref)m 6(erenceSection)k 480 7267( named @T)m 26(ag {})k 480 6979( named @Title { Ref)m 6(erences })k
+480 6691( named @RunningTitle { dft })m 480 6403( named style r)m -3(ight tag { tag.)k 13( })k 480 6115( named headstyle r)m -3(ight @Title { @Heading @Title })k
+480 5827( named indent { @DispIndent })m 480 5539( named gap { @DispGap })m 480 5251( named star)m -8(t { 1 })k 480 4963({)m
+480 4675( def @RefList r)m -3(ight n)k 2(um)k 480 4387( {)m 480 4099( @NumberMar)m -3(k)k 4(er n)k 2(um & indent @Wide {style n)k 2(um} | @RefPlace)k
+480 3811( //gap @RefList @Ne)m 6(xt n)k 2(um)k 480 3523( })m 480 2947( @Protect headstyle @Title)m
+480 2659( // @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged @T)k 26(ag)k
+480 2371( // @Title @MajorContentsEntr)m -6(y {@P)k 8(ageOf @T)k 26(ag})k 480 2083( // @Runner)m
+480 1795( @F)m 6(ootEv)k 5(en { |0.5r)k -8(t 0.8f @F)k 6(ont @B @P)k 8(ageNum })k
+480 1507( @F)m 6(ootOdd { |0.5r)k -8(t 0.8f @F)k 6(ont @B @P)k 8(ageNum })k
+480 1219( //@DispGap @RefList star)m -8(t)k 480 931( // @Runner)m 480 643( @T)m 26(opEv)k 5(en { @B @P)k 8(ageNum })k
+480 355( @T)m 26(opOdd { @I {@RunningTitle @OrElse @Title} |1r)k -8(t @B @P)k 8(ageNum })k 480 67(})m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 90 96
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(90)m 240 fnt83 7017 13843(Chapter)m 7867(4.)s
+8141(Examples)s 240 fnt82 0 13205(W)m 19(e)k 378(place)s
+948(the)s 1305(e)s 3(xpression)k 220 fnt35 2392 13202(@Ref)m 6(erenceSection)k
+240 fnt82 4408 13205(at)m 4649(the)s 5007(point)s 5569(where)s
+6218(we)s 6563(w)s 2(ant)k 7096(the)s 7453(list)s
+7814(of)s 8095(references)s 0 12917(to)m 239(appear;)s 988(its)s
+1264(v)s 6(alue)k 1832(is)s 2042(something)s 3092(lik)s 2(e)k
+220 fnt35 480 12416(1.)m 13( @RefPlace)k 480 12128(2.)m 13( @RefPlace)k
+480 11840(3.)m 13( @RefPlace)k 480 11552(...)m 240 fnt82 0 11101(where)m
+220 fnt35 648 11098(@RefPlace)m 240 fnt82 1820 11101(is)m 220 fnt35
+2038 11098(@Galle)m 4(y)k 240 fnt82 2945 11101(as)m 3203(usual.)s
+3880(W)s 19(e)k 4258(can)s 4655(scatter)s 5345(multiple)s
+6205(lists)s 6649(of)s 6928(references)s 7967(through)s 8778(the)s
+0 10813(document)m 1004(if)s 1221(we)s 1555(wish)s 2064(\(at)s
+2375(the)s 2722(end)s 3126(of)s 3397(each)s 3891(chapter)s 9(,)k
+4692(for)s 5030(e)s 3(xample\),)k 6022(simply)s 6727(by)s
+7021(placing)s 220 fnt35 7777 10810(@Ref)m 6(erence)k 240 fnt82
+8998 10813(-)m 220 fnt35 0 10522(Section)m 240 fnt82 777 10525(at)m
+1009(each)s 1504(point.)s 480 10151(Our)m 912(task)s 1358(is)s
+1568(completed)s 2622(by)s 2916(the)s 3264(follo)s 6(wing)k
+4241(de\207nition:)s 220 fnt35 480 9650(def @Ref r)m -3(ight x)k 480 9362({)m
+480 9074( def sendref into { @RefPlace&&f)m 6(ollo)k 3(wing })k 480 8786( r)m -3(ight @K)k 8(e)k 4(y)k
+480 8498( {)m 480 8210( @NumberMar)m -3(k)k 4(er&&preceding @T)k 26(agged x &)k
+480 7922( @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged x &)k
+480 7634( @RefPr)m -3(int x)k 480 7346( })m 480 6770( @NumberMar)m -3(k)k 4(er&&x @Open { @T)k 26(ag } sendref x)k
+480 6482(})m 240 fnt82 0 5988(Gi)m 6(v)k 3(en)k
+633(this)s 1029(de\207nition,)s 2053(the)s 2401(in)s 9(v)k 4(ocation)k
+220 fnt35 3455 5985(@Ref str)m -3(unk1979style)k 240 fnt82 5672 5988(has)m
+6042(result)s 220 fnt35 480 5489(@NumberMar)m -3(k)k 4(er&&str)k -3(unk1979style @Open { @T)k 26(ag })k
+240 fnt82 0 4990(plus)m 450(the)s 798(g)s 1(alle)k 3(y)k
+220 fnt35 1432 4987(sendref str)m -3(unk1979style)k 240 fnt82 3757 4990(.)m
+3921(W)s 19(e)k 4290(\207rst)s 4721(follo)s 6(w)k
+5393(what)s 5918(happens)s 6754(to)s 6993(the)s 7341(g)s 1(alle)k 3(y)k 15(.)k
+480 4616(According)m 1555(to)s 1806(its)s 220 fnt35 2094 4613(into)m
+240 fnt82 2512 4616(clause,)m 3229(the)s 3589(g)s 1(alle)k 3(y)k
+4235(will)s 4673(replace)s 5430(a)s 220 fnt35 5609 4613(@RefPlace)m
+240 fnt82 6785 4616(in)m 7040(the)s 7400(nearest)s 8149(follo)s 6(wing)k
+220 fnt35 0 4325(@Ref)m 6(erenceSection)k 240 fnt82 1946 4328(.)m
+2114(If)s 2348(e)s 6(v)k 3(ery)k 2928(such)s
+3428(g)s 1(alle)k 3(y)k 4066(is)s 4280(a)s
+4450(sorted)s 5096(g)s 1(alle)k 3(y)k 5734(whose)s
+6406(k)s 2(e)k 3(y)k 6805(is)s 7019(the)s
+7371(reference')s 13(s)k 8472(tag,)s 8876(as)s 0 4040(this)m
+396(one)s 798(is,)s 1064(the)s 3(y)k 1527(will)s
+1953(appear)s 2650(sorted)s 3292(by)s 3586(tag.)s 4042(The)s
+4470(g)s 1(alle)k 3(y')k 13(s)k 5260(object)s
+5904(is)s 220 fnt35 480 3539(@NumberMar)m -3(k)k 4(er&&preceding @T)k 26(agged str)k -3(unk1979style &)k
+480 3251(@P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged str)k -3(unk1979style &)k
+480 2963(@RefPr)m -3(int str)k -3(unk1979style)k 240 fnt82 0 2465(The)m
+428(result)s 1017(of)s 1287(the)s 220 fnt35 1634 2462(@T)m 26(agged)k
+240 fnt82 2622 2465(symbol)m 3381(is)s 3590(al)s 2(w)k 2(ays)k
+220 fnt35 4300 2462(@Null)m 240 fnt82 4885 2465(,)m 4991(so)s
+5256(this)s 5651(prints)s 6245(the)s 220 fnt35 6592 2462(str)m -3(unk1979style)k
+240 fnt82 8183 2465(reference)m 0 2177(in)m 243(the)s 591(appropriate)s
+1735(style)s 2242(at)s 2474(the)s 220 fnt35 2822 2174(@RefPlace)m
+240 fnt82 3926 2177(,)m 4033(as)s 4283(desired.)s 480 1803(No)m 6(w)k
+220 fnt35 1043 1800(@NumberMar)m -3(k)k 4(er&&preceding)k 240 fnt82
+4081 1803(is)m 4341(the)s 4739(nearest)s 5524(preceding)s 6570(in)s 9(v)k 4(ocation)k
+7674(of)s 220 fnt35 7995 1800(@Number)m 240 fnt82 8998 1803(-)m
+220 fnt35 0 1512(Mar)m -3(k)k 4(er)k 240 fnt82
+775 1515(in)m 1051(the)s 1432(\207nal)s 1946(document.)s 3087(This)s
+3596(must)s 4155(be)s 4470(the)s 4851(in)s 9(v)k 4(ocation)k
+5939(of)s 220 fnt35 6243 1512(@NumberMar)m -3(k)k 4(er)k
+240 fnt82 8021 1515(just)m 8460(before)s 0 1227(the)m 220 fnt35
+378 1224(@RefPlace)m 240 fnt82 1572 1227(that)m 2020(recei)s 6(v)k 3(ed)k
+2908(the)s 3286(g)s 1(alle)k 3(y)k 15(,)k
+3988(and)s 4423(so)s 4719(this)s 5145(in)s 9(v)k 4(ocation)k
+6229(of)s 220 fnt35 6530 1224(@NumberMar)m -3(k)k 4(er)k
+240 fnt82 8305 1227(is)m 8546(gi)s 6(v)k 3(en)k
+220 fnt35 0 936(str)m -3(unk1979style)k 240 fnt82 1585 939(as)m
+1827(an)s 2102(additional)s 3105(tag)s 3442(by)s 3728(the)s
+220 fnt35 4068 936(@T)m 26(agged)k 240 fnt82 5050 939(symbol.)m
+5911(Its)s 6192(original)s 6982(tag)s 7319(w)s 2(as)k
+7732(the)s 8072(number)s 8855(of)s 0 651(the)m 348(reference)s
+1291(place,)s 1902(which)s 2544(means)s 3206(that)s 220 fnt35
+480 150(@NumberMar)m -3(k)k 4(er&&str)k -3(unk1979style @Open { @T)k 26(ag })k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 91 97
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(4.5.)m 454(Biblio)s 2(gr)k 3(aphies)k
+240 fnt84 8839 13840(91)m 240 fnt82 0 13205(has)m 370(for)s
+708(its)s 984(result)s 1574(the)s 1922(number)s 2713(of)s
+2984(the)s 3332(reference)s 4275(place)s 4835(that)s 5253(recei)s 6(v)k 3(ed)k
+6111(the)s 220 fnt35 6459 13202(str)m -3(unk1979style)k 240 fnt82
+8051 13205(g)m 1(alle)k 3(y)k 15(,)k 8722(and)s
+0 12917(this)m 396(is)s 606(the)s 954(desired)s 1702(result)s
+2292(of)s 220 fnt35 2563 12914(@Ref str)m -3(unk1979style)k 240 fnt82
+4720 12917(.)m 480 12543(It)m 674(might)s 1281(seem)s 1821(that)s
+2228(if)s 2434(we)s 2758(refer)s 3256(to)s 3483(the)s
+220 fnt35 3820 12540(str)m -3(unk1979style)k 240 fnt82 5401 12543(reference)m
+6333(twice,)s 6946(tw)s 2(o)k 7345(copies)s 7996(will)s
+8411(be)s 8681(sent)s 0 12255(to)m 247(the)s 603(reference)s
+1554(list)s 1914(and)s 2326(it)s 2526(will)s 2961(appear)s
+3666(twice.)s 4355(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+5324(when)s 5908(more)s 6463(than)s 6941(one)s 7351(sorted)s
+8001(g)s 1(alle)k 3(y)k 8644(with)s 0 11967(the)m
+341(same)s 881(k)s 2(e)k 3(y)k 1269(is)s
+1472(sent)s 1910(to)s 2142(the)s 2483(same)s 3023(place,)s
+3627(only)s 4100(one)s 4495(of)s 4759(them)s 5290(is)s
+5493(printed)s 6221(\(Section)s 7067(1.4\);)s 7551(so)s 7810(pro)s 3(vided)k
+8708(that)s 0 11679(sorted)m 642(g)s 1(alle)k 3(ys)k
+1366(are)s 1713(used)s 2210(there)s 2743(is)s 2953(no)s
+3246(problem.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 92 98
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+480 fnt84 0 12955(Refer)m 8(ences)k 240 fnt82 0 12358([1])m
+480(Adobe)s 1182(Systems,)s 2094(Inc..)s 240 fnt83 2631 12360(P)m 19(ostScript)k
+3680(Langua)s 2(g)k 2(e)k 4696(Refer)s 8(ence)k
+5704(Manual,)s 6550(Second)s 7316(Edition)s 240 fnt82 8014 12358(.)m
+8186(Addison-)s 480 12070(W)m 19(esle)k 3(y)k 1169(,)s
+1276(1990)s 1751(.)s 0 11567([2])m 480(Brian)s 1132(W)s 22(.)k
+1504(K)s 6(ernighan)k 2630(and)s 3098(Lorinda)s 3980(L.)s
+4294(Cherry)s 15(.)k 5172(A)s 5466(system)s 6255(for)s
+6657(typesetting)s 7824(mathematics)s 9022(.)s 240 fnt83 480 11281(Communications)m
+2158(of)s 2439(the)s 2784(A)s 7(CM)k 240 fnt84
+3351 11278(18)m 240 fnt82 3585 11279(,)m 3692(182\211193)s 4576(\(1975\))s
+5203(.)s 0 10778([3])m 480(Jef)s 6(fre)k 3(y)k
+1177(H.)s 1443(Kingston.)s 240 fnt83 2475 10780(The)m 2876(Basser)s
+3581(Lout)s 4074(Document)s 5111(F)s 25(ormatting)k 6219(System)s
+6929(\(V)s 26(er)k 2(sion)k 7767(3\))s 240 fnt82
+7956 10778(.)m 8109(Computer)s 480 10490(program)m 1290(,)s 1408(1995)s
+1874(.)s 2050(Publicly)s 2913(a)s 4(v)k 6(ailable)k
+3833(in)s 4088(the)s 240 fnt83 4448 10492(jef)m 4(f)k
+240 fnt82 4855 10490(subdirectory)m 6116(of)s 6399(the)s 6759(home)s
+7359(directory)s 8287(of)s 240 fnt83 8570 10492(ftp)m 240 fnt82
+8887 10490(to)m 480 10202(host)m 240 fnt83 950 10204(ftp.cs.su.oz.au)m 240 fnt82
+2373 10202(with)m 2866(login)s 3427(name)s 240 fnt83 4012 10204(anonymous)m
+240 fnt82 5171 10202(or)m 240 fnt83 5442 10204(ftp)m 240 fnt82
+5758 10202(and)m 6174(an)s 3(y)k 6582(non-empty)s 7685(passw)s 2(ord)k
+8657(\(e.g.)s 240 fnt83 480 9916(none)m 240 fnt82 939 9914(\).)m
+1175(Lout)s 1680(distrib)s 4(utions)k 2914(are)s 3254(also)s
+3685(a)s 4(v)k 6(ailable)k 4585(from)s 5102(the)s
+240 fnt83 5443 9916(comp.sour)m 8(ces.misc)k 240 fnt82 7291 9914(ne)m 6(wsgroup,)k
+8436(and)s 8832(by)s 480 9626(electronic)m 1474(mail)s 1953(from)s
+2477(the)s 2825(author)s 13(.)k 3587(All)s 3947(enquiries)s
+4874(to)s 240 fnt83 5113 9628(jef)m 4(f@cs.su.oz.au)k 240 fnt82
+6672 9626(.)m 0 9121([4])m 480(Jef)s 6(fre)k 3(y)k
+1187(H.)s 1463(Kingston.)s 240 fnt83 2504 9123(A)m 2698(User')s 9(s)k
+3380(Guide)s 4017(to)s 4255(the)s 4599(Lout)s 5101(Document)s
+6148(F)s 25(ormatting)k 7266(System)s 7985(\(V)s 26(er)k 2(sion)k
+8833(3\))s 240 fnt82 9022 9121(.)m 480 8833(Basser)m 1177(Department)s
+2365(of)s 2636(Computer)s 3653(Science)s 4392(,)s 4499(Uni)s 6(v)k 3(ersity)k
+5553(of)s 5824(Sydne)s 3(y)k 6534(,)s 6641(1995)s
+7107(.)s 0 8328([5])m 480(Donald)s 1243(E.)s 1493(Knuth.)s
+240 fnt83 2256 8330(The)m 2668(T)s 2764 8282(E)m 2872 8330(X)m
+3028(Book)s 240 fnt82 3524 8328(.)m 3688(Addison-W)s 19(esle)k 3(y)k
+5268(,)s 5375(1984)s 5849(.)s 0 7823([6])m 480(Brian)s
+1048(K.)s 1305(Reid.)s 1900(A)s 2110(High-)s 2657(Le)s 6(v)k 3(el)k
+3227(Approach)s 4207(to)s 4426(Computer)s 5423(Document)s 6459(Production)s
+7506(.)s 7650(In)s 240 fnt83 7885 7825(Pr)m 10(oceedings)k
+480 7537(of)m 745(the)s 1073(7th)s 1417(Symposium)s 2548(on)s
+2825(the)s 3153(Principles)s 4174(of)s 4438(Pr)s 10(o)k 2(gr)k 3(amming)k
+5804(Langua)s 2(g)k 2(es)k 6891(\(POPL\),)s 7723(Las)s
+8107(V)s 26(e)k 9(gas)k 8695(NV)s 240 fnt82
+9019 7535(,)m 480 7247(pages)m 1076(24\21131)s 1651(,)s 1758(1980)s
+2233(.)s 0 6742([7])m 480(W)s 9(illiam)k 1313(Strunk)s
+2012(and)s 2416(E.)s 2666(B.)s 2930(White.)s 240 fnt83
+3678 6744(The)m 4090(Elements)s 5021(of)s 5302(Style)s 240 fnt82
+5759 6742(.)m 5923(Macmillan)s 6955(.)s 7119(Third)s 7708(Edition)s
+8409(,)s 8516(1979)s 8987(.)s 192 fnt84 4439 2(92)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 93 99
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+480 fnt84 0 12962(Index)m 220 fnt35 0 12365(adjust)m 641(@Break)s
+240 fnt82 1444 12368(,)m 1551(42)s 0 12080(Adjustment)m 1176(of)s
+1447(object)s 2038(,)s 2145(49)s 0 11792(Adobe)m 695(Systems,)s
+1599(Inc.)s 1955(,)s 2062(41)s 0 11504(Alignment)m 240 fnt83
+1083 11506(see)m 240 fnt82 1441 11504(mark)m 1993(alignment)s 0 11216(Associati)m 6(vity)k
+1256(,)s 1363(22)s 220 fnt35 0 10637(b)m 240 fnt82
+174 10640(unit)m 553(,)s 660(37)s 240 10352(use)m 615(in)s
+220 fnt35 858 10349(//1.1b)m 240 fnt82 1406 10352(,)m 1513(27)s
+220 fnt35 0 10061(@Bac)m 4(kEnd)k 240 fnt82 1145 10064(symbol)m
+1852(,)s 1959(68)s 220 fnt35 0 9773(@Bac)m 4(kg)k 2(round)k
+240 fnt82 1436 9776(symbol)m 2143(,)s 2250(53)s 220 fnt35
+0 9485(@Begin)m 240 fnt82 829 9488(symbol)m 1536(,)s 1643(36)s
+220 fnt35 0 9197(@BeginHeaderComponent)m 240 fnt82 2692 9200(symbol)m 3399(,)s
+3506(59)s 0 8912(Bibliographies)m 1406(,)s 1513(87)s 0 8624(Body)m
+574(of)s 845(a)s 1011(de\207nition)s 1932(,)s 2039(4)s
+220 fnt35 0 8333(body)m 240 fnt82 534 8336(parameter)m 1495(,)s
+1602(17)s 0 8048(Braces)m 648(,)s 755(3)s 220 fnt35
+0 7469(c)m 240 fnt82 165 7472(unit)m 544(,)s 651(37)s
+220 fnt35 0 7181(@Case)m 240 fnt82 787 7184(symbol)m 1494(,)s
+1601(56)s 0 6896(Centring)m 837(,)s 944(37)s 220 fnt35
+0 6605(@Chapter)m 240 fnt82 1063 6608(e)m 3(xample)k 1873(,)s
+1980(83)s 0 6320(Chapters)m 901(and)s 1305(sections)s 2073(,)s
+2180(82)s 220 fnt35 0 6029(@Char)m 240 fnt82 758 6032(symbol)m
+1465(,)s 1572(41)s 0 5744(Cherry)m 15(,)k 756(L.)s
+953(,)s 1060(71)s 220 fnt35 0 5453(@ClearHeaderComponent)m 240 fnt82
+2655 5456(symbol)m 3362(,)s 3469(60)s 220 fnt35 0 5165(clines)m
+613(@Break)s 240 fnt82 1416 5168(,)m 1523(42)s 220 fnt35
+0 4877(@ColList)m 240 fnt82 948 4880(e)m 3(xample)k 1758(,)s
+1865(79)s 0 4592(Column)m 829(mark)s 1328(,)s 1435(1)s
+0 4304(Comment)m 951(,)s 1058(15)s 0 4016(Comment)m 1004(character)s
+1885(,)s 1992(13)s 220 fnt35 0 3725(@Common)m 240 fnt82
+1159 3728(symbol)m 1866(,)s 1973(54)s 0 3440(Components)m 1262(of)s
+1533(a)s 1699(g)s 1(alle)k 3(y)k 2280(,)s
+2387(26)s 240 3152(promotion)m 1294(of)s 1512(,)s 1619(29)s
+0 2864(Concatenation)m 1439(symbols)s 2235(,)s 2342(36)s 0 2576(Contraction)m
+1186(of)s 1457(object)s 2048(,)s 2155(49)s 220 fnt35
+0 2285(cr)m 2(agged)k 839(@Break)s 240 fnt82 1642 2288(,)m
+1749(42)s 0 2000(Cross)m 596(reference)s 1486(,)s 1593(7)s
+220 fnt35 0 1709(@CurrLang)m 240 fnt82 1185 1712(symbol)m 1892(,)s
+1999(46)s 220 fnt35 0 1133(d)m 240 fnt82 170 1136(unit)m
+549(,)s 656(37)s 220 fnt35 0 845(@Database)m 240 fnt82
+1214 848(symbol)m 1921(,)s 2028(62)s 4816 12365(Date,)m 5374(printing)s
+6184(of)s 6455(current)s 7138(,)s 7245(57)s 4816 12077(Def)m 2(ault)k
+5590(v)s 6(alue)k 6158(of)s 6429(parameter)s 7390(,)s
+7497(15)s 4816 11789(De\207nitions)m 5877(,)s 5984(4)s 4816 11501(Delimiter)m
+5737(,)s 5844(13)s 4816 11213(Diag)m 5334(diagram-dra)s 3(wing)k
+7030(package)s 7817(,)s 7924(66)s 4816 10925(Diagrams)m 5743(,)s
+5850(63)s 4816 10637(DocumentLayout)m 6551(package)s 7338(,)s 7445(73)s
+5056 10349(chapters)m 5903(and)s 6307(sections)s 7075(,)s 7182(82)s
+5056 10061(displays)m 5838(,)s 5945(74)s 5056 9773(lists)m 5438(,)s
+5545(75)s 5056 9485(page)m 5564(layout)s 6169(,)s 6276(77)s
+5056 9197(paragraphs)m 6103(,)s 6210(73)s 220 fnt35 4816 8618(e)m
+240 fnt82 4990 8621(g)m 1(ap)k 5388(mode)s 5923(,)s
+6030(37)s 4816 8333(Edge-to-edge)m 6160(g)s 1(ap)k 6558(mode)s
+7093(,)s 7200(37)s 220 fnt35 4816 8042(@Enclose)m 240 fnt82
+5818 8045(,)m 5925(31)s 220 fnt35 4816 7754(@End)m 240 fnt82
+5477 7757(symbol)m 6184(,)s 6291(36)s 220 fnt35 4816 7466(@EndHeaderComponent)m
+240 fnt82 7338 7469(symbol)m 8045(,)s 8152(59)s 4816 7181(Eq)m
+5140(equation)s 6021(formatting)s 7082(package)s 7869(,)s 7976(71)s
+220 fnt35 4816 6890(@Eq)m 240 fnt82 5354 6893(e)m 3(xample)k
+6164(,)s 6271(71)s 4816 6605(Escape)m 5549(character)s 6430(,)s
+6537(13)s 220 fnt35 4816 6314(@Ev)m 5(enP)k 8(ageList)k
+240 fnt82 6435 6317(e)m 3(xample)k 7245(,)s 7352(81)s
+4816 6029(Expansion)m 5884(of)s 6155(object)s 6746(,)s 6853(48)s
+220 fnt35 4816 5738(e)m 6(xpor)k -8(t)k 240 fnt82
+5484 5741(clause)m 6084(,)s 6191(18)s 220 fnt35 4816 5162(f)m
+240 fnt82 4934 5165(unit)m 5313(,)s 5420(37)s 4816 4877(F)m 3(ace)k
+5320(of)s 5591(a)s 5757(font)s 6149(,)s 6256(40)s
+4816 4589(F)m 3(amily)k 5544(of)s 5815(a)s 5981(font)s
+6373(,)s 6480(40)s 220 fnt35 4816 4298(f)m 6(ollo)k 3(wing)k
+240 fnt82 5653 4301(,)m 5760(8)s 220 fnt35 4816 4010(f)m 6(ollo)k 3(wing)k
+240 fnt82 5653 4013(,)m 5760(8)s 4816 3725(F)m 3(onts)k
+5343(,)s 5450(40)s 220 fnt35 4816 3434(f)m 6(ontdef)k
+240 fnt82 5485 3437(,)m 5592(41)s 220 fnt35 4816 3146(@F)m 6(ont)k
+240 fnt82 5528 3149(symbol)m 6235(,)s 6342(40)s 220 fnt35
+4816 2858(@F)m 6(ootSect)k 240 fnt82 5967 2861(e)m 3(xample)k
+6777(,)s 6884(78)s 4816 2573(F)m 3(orcing)k 5610(g)s 1(alle)k 3(y)k
+6191(,)s 6298(29)s 4816 2285(F)m 3(ormfeed)k 5747(,)s
+5854(13)s 4816 1709(Galle)m 3(ys)k 5541(,)s 5648(10)s
+5056 1421(in)m 5299(detail)s 5831(,)s 5938(25)s 220 fnt35
+4816 1130(@Galle)m 4(y)k 5654(@F)s 6(orceGalle)k 4(y)k
+240 fnt82 7107 1133(symbol)m 7814(,)s 7921(58)s 8155(,)s
+4816 845(Gap)m 5215(,)s 5322(37)s 192 fnt84 4440 2(93)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 94 100
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(94)m 240 fnt83 8539 13843(Inde)m 4(x)k
+240 fnt82 0 13249(Gap)m 452(mode)s 987(,)s 1094(37)s
+220 fnt35 0 12958(@Gr)m 2(aphic)k 240 fnt82 1044 12961(symbol)m
+1751(,)s 1858(63)s 220 fnt35 0 12382(h)m 240 fnt82
+168 12385(g)m 1(ap)k 566(mode)s 1101(,)s 1208(37)s
+220 fnt35 0 12094(@HAdjust)m 240 fnt82 1046 12097(symbol)m 1753(,)s
+1860(49)s 220 fnt35 0 11806(@HContr)m 2(act)k 240 fnt82
+1264 11809(symbol)m 1971(,)s 2078(49)s 220 fnt35 0 11518(@HCo)m 3(v)k 5(er)k
+240 fnt82 1018 11521(symbol)m 1725(,)s 1832(50)s 0 11233(Header)m
+750(component)s 1874(of)s 2145(g)s 1(alle)k 3(y)k
+2726(,)s 2833(58)s 0 10945(Height)m 711(of)s 982(an)s
+1265(object)s 1856(,)s 1963(24)s 220 fnt35 0 10654(@HExpand)m
+240 fnt82 1173 10657(symbol)m 1880(,)s 1987(48)s 220 fnt35
+0 10366(@High)m 240 fnt82 719 10369(symbol)m 1426(,)s 1533(48)s
+220 fnt35 0 10078(@HLimited)m 240 fnt82 1135 10081(symbol)m 1842(,)s
+1949(49)s 220 fnt35 0 9790(@Hline)m 240 fnt82 773 9793(e)m 3(xample)k
+1583(,)s 1690(73)s 0 9505(Horizontal)m 1077(concatenation)s 2409(,)s
+2516(36)s 220 fnt35 0 9214(@HScale)m 240 fnt82 981 9217(symbol)m
+1688(,)s 1795(50)s 220 fnt35 0 8926(@HShift)m 240 fnt82
+875 8929(symbol)m 1582(,)s 1689(48)s 220 fnt35 0 8638(@HSpan)m
+240 fnt82 939 8641(symbol)m 1646(,)s 1753(51)s 220 fnt35
+0 8350(h)m 6(yphen)k 760(@Break)s 240 fnt82 1563 8353(,)m
+1670(43)s 0 8065(Hyphenation)m 1294(g)s 1(ap)k 1692(mode)s
+2227(,)s 2334(39)s 0 7777(Hyphenation)m 1294(g)s 1(ap)k
+1692(mode)s 2227(,)s 2334(37)s 0 7201(Identi\207er)m 882(,)s
+989(13)s 220 fnt35 0 6910(impor)m -8(t)k 240 fnt82
+673 6913(clause)m 1273(,)s 1380(18)s 0 6625(In-paragraph)m 1291(concatenation)s
+2623(,)s 2730(37)s 220 fnt35 0 6334(@Include)m 240 fnt82
+982 6337(symbol)m 1689(,)s 1796(68)s 220 fnt35 0 6046(@IncludeGr)m 2(aphic)k
+240 fnt82 1751 6049(symbol)m 2458(,)s 2565(67)s 220 fnt35
+0 5758(@IndentedDispla)m 6(y)k 240 fnt82 1847 5761(e)m 3(xample)k
+2657(,)s 2764(74)s 220 fnt35 0 5470(@IndentedList)m 240 fnt82
+1474 5473(e)m 3(xample)k 2284(,)s 2391(75)s 0 5185(Inde)m 3(x)k
+597(\207le)s 958(\(for)s 1375(databases\))s 2366(,)s 2473(63)s
+220 fnt35 0 4894(@Inser)m -8(t)k 240 fnt82 836 4897(symbol)m
+1543(,)s 1650(54)s 220 fnt35 0 4606(into)m 240 fnt82
+406 4609(clause)m 1006(,)s 1113(10)s 0 4321(In)m 9(v)k 4(ocation)k
+1067(of)s 1338(a)s 1504(symbol)s 2211(,)s 2318(4)s
+220 fnt35 0 3454(k)m 240 fnt82 170 3457(g)m 1(ap)k
+568(mode)s 1103(,)s 1210(37)s 0 3169(K)m 6(ernighan,)k
+1111(B.)s 1322(,)s 1429(71)s 0 2881(K)m 6(erning)k
+778(,)s 885(40)s 0 2593(K)m 6(erning)k 831(g)s 1(ap)k
+1229(mode)s 1764(,)s 1871(37)s 220 fnt35 0 2302(@K)m 8(er)k -5(nShr)k -3(ink)k
+240 fnt82 1367 2305(symbol)m 2074(,)s 2181(53)s 220 fnt35
+0 2014(@K)m 8(e)k 4(y)k 240 fnt82 647 2017(parameter)m
+1608(,)s 1715(32)s 0 1729(Knuth,)m 706(D.)s 930(,)s
+1037(73)s 220 fnt35 0 1150(langdef)m 240 fnt82 776 1153(language)m
+1696(de\207nition)s 2617(,)s 2724(46)s 220 fnt35 0 862(@Language)m
+240 fnt82 1251 865(symbol)m 1958(,)s 2065(46)s 220 fnt35
+0 574(@LClos)m 240 fnt82 836 577(symbol)m 1543(,)s 1650(14)s
+0 289(LCM)m 573(\207le)s 881(,)s 988(41)s 4816 13249(Length)m
+5498(,)s 5605(37)s 220 fnt35 4816 12958(@LEn)m 4(v)k
+240 fnt82 5594 12961(symbol)m 6301(,)s 6408(14)s 4816 12673(Letter)m
+5445(character)s 6326(,)s 6433(13)s 4816 12385(Lig)m 1(atures)k
+5715(,)s 5822(40)s 220 fnt35 4816 12094(lines)m 5319(@Break)s
+240 fnt82 6122 12097(,)m 6229(42)s 220 fnt35 4816 11806(@LInput)m
+240 fnt82 5705 11809(symbol)m 6412(,)s 6519(14)s 4816 11521(Literal)m
+5506(w)s 2(ord)k 6001(,)s 6108(14)s 220 fnt35
+4816 11230(@LUse)m 240 fnt82 5603 11233(symbol)m 6310(,)s 6417(14)s
+220 fnt35 4816 10942(@L)m 24(Vis)k 240 fnt82 5494 10945(symbol)m
+6201(,)s 6308(14)s 220 fnt35 4816 10366(m)m 240 fnt82
+5045 10369(unit)m 5424(,)s 5531(37)s 4816 10081(Macro)m 5440(,)s
+5547(15)s 4816 9793(Mark)m 5395(alignment)s 6358(,)s 6465(1)s
+5056 9505(in)m 5299(detail)s 5831(,)s 5938(28)s 4816 9217(Mark-to-mark)m
+6230(g)s 1(ap)k 6628(mode)s 7163(,)s 7270(37)s
+220 fnt35 4816 8926(@Meld)m 240 fnt82 5562 8929(symbol)m 6269(,)s
+6376(54)s 220 fnt35 4816 8638(@Merge)m 240 fnt82 5713 8641(symbol)m
+6420(,)s 6527(33)s 220 fnt35 4816 8350(@Moment)m 240 fnt82
+5888 8353(symbol)m 6595(,)s 6702(57)s 220 fnt35 4816 7774(named)m
+240 fnt82 5535 7777(parameter)m 6496(,)s 6603(15)s 4816 7489(Nested)m
+5538(de\207nitions)s 6546(,)s 6653(17)s 220 fnt35 4816 7198(@Ne)m 6(xt)k
+240 fnt82 5540 7201(symbol)m 6247(,)s 6354(56)s 220 fnt35
+4816 6910(noh)m 6(yphen)k 5820(@Break)s 240 fnt82 6623 6913(,)m
+6730(43)s 220 fnt35 4816 6622(@NotRe)m 6(v)k 5(ealed)k
+240 fnt82 6343 6625(symbol)m 7050(,)s 7157(60)s 220 fnt35
+4816 6334(@Null)m 240 fnt82 5461 6337(symbol)m 6168(,)s 6275(58)s
+4816 6049(Numbered)m 5884(list)s 6182(,)s 6289(75)s 220 fnt35
+4816 5758(@NumberOf)m 240 fnt82 6108 5761(e)m 3(xample)k 6918(,)s
+7025(82)s 220 fnt35 4816 5182(o)m 240 fnt82 4991 5185(g)m 1(ap)k
+5389(mode)s 5924(,)s 6031(37)s 4816 4897(Object)m 5460(,)s
+5567(1)s 220 fnt35 4816 4606(@OddP)m 8(ageList)k 240 fnt82
+6355 4609(e)m 3(xample)k 7165(,)s 7272(81)s 220 fnt35
+4816 4318(@OneCol)m 240 fnt82 5828 4321(symbol)m 6535(,)s 6642(47)s
+220 fnt35 4816 4030(@OneOf)m 240 fnt82 5743 4033(symbol)m 6450(,)s
+6557(55)s 220 fnt35 4816 3742(@OneP)m 8(age)k 240 fnt82
+6010 3745(e)m 3(xample)k 6820(,)s 6927(80)s 220 fnt35
+4816 3454(@OneRo)m 3(w)k 240 fnt82 5947 3457(symbol)m 6654(,)s
+6761(47)s 220 fnt35 4816 3166(@Open)m 240 fnt82 5622 3169(symbol)m
+6329(,)s 6436(62)s 4816 2881(Optimal)m 5654(g)s 1(alle)k 3(y)k
+6288(breaking)s 7125(,)s 7232(35)s 220 fnt35 4816 2590(@Optimiz)m 3(e)k
+240 fnt82 5953 2593(symbol)m 6660(,)s 6767(35)s 220 fnt35
+4816 2302(or)m 2(agged)k 5667(@Break)s 240 fnt82 6470 2305(,)m
+6577(42)s 220 fnt35 4816 2014(@OrElse)m 240 fnt82 5761 2017(e)m 3(xample)k
+6571(,)s 6678(85)s 4816 1729(Other)m 5420(character)s 6301(,)s
+6408(13)s 220 fnt35 4816 1438(outdent)m 5604(@Break)s 240 fnt82
+6407 1441(,)m 6514(42)s 220 fnt35 4816 1150(@Outline)m 240 fnt82
+5785 1153(symbol)m 6492(,)s 6599(46)s 220 fnt35 4816 862(o)m 3(v)k 5(er)k
+240 fnt82 5295 865(e)m 3(xample)k 6105(,)s 6212(72)s
+4816 577(Ov)m 3(erstrik)k 2(e)k 5875(g)s 1(ap)k
+6273(mode)s 6808(,)s 6915(37)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 95 101
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(Inde)m 4(x)k 240 fnt84 8833 13840(95)m
+220 fnt35 0 13246(p)m 240 fnt82 174 13249(unit)m 553(,)s
+660(37)s 220 fnt35 0 12958(@P)m 26(Adjust)k 240 fnt82
+1008 12961(symbol)m 1715(,)s 1822(49)s 220 fnt35 0 12670(@P)m 8(age)k
+240 fnt82 779 12673(e)m 3(xample)k 1589(,)s 1696(79)s
+0 12385(P)m 3(age)k 518(layout)s 240 12097(principles)m 1233(of)s
+1451(,)s 1558(5)s 240 11809(in)m 483(practice)s 1241(,)s
+1348(77)s 220 fnt35 0 11518(@P)m 8(ageLabel)k 240 fnt82
+1309 11521(symbol)m 2016(,)s 2123(70)s 220 fnt35 0 11230(@P)m 8(ageOf)k
+240 fnt82 1016 11233(e)m 3(xample)k 1826(,)s 1933(77)s
+0 10945(P)m 3(aragraph)k 1023(breaking)s 1860(,)s 1967(3)s
+240 10657(in)m 483(detail)s 1015(,)s 1122(39)s 0 10369(P)m 3(arameter)k
+971(,)s 1078(4)s 220 fnt35 240 10078(body)m 240 fnt82
+774 10081(parameter)m 1735(,)s 1842(17)s 220 fnt35 240 9790(named)m
+240 fnt82 959 9793(parameter)m 1920(,)s 2027(15)s 220 fnt35
+0 9502(@PlainGr)m 2(aphic)k 240 fnt82 1530 9505(symbol)m 2237(,)s
+2344(67)s 0 9217(PostScript)m 989(,)s 1096(ii)s 240 8929(used)m
+737(by)s 220 fnt35 1031 8926(@Gr)m 2(aphic)k 240 fnt82
+2022 8929(,)m 2129(63)s 240 8641(used)m 737(by)s 220 fnt35
+1031 8638(@IncludeGr)m 2(aphic)k 240 fnt82 2729 8641(,)m 2836(67)s
+240 8353(used)m 737(by)s 220 fnt35 1031 8350(@PrependGr)m 2(aphic)k
+240 fnt82 2851 8353(,)m 2958(67)s 220 fnt35 0 8062(@PP)m
+240 fnt82 566 8065(e)m 3(xample)k 1376(,)s 1483(74)s
+0 7777(Precedence)m 1091(,)s 1198(22)s 220 fnt35 0 7486(preceding)m
+240 fnt82 958 7489(,)m 1065(8)s 220 fnt35 0 7198(@PrependGr)m 2(aphic)k
+240 fnt82 1873 7201(symbol)m 2580(,)s 2687(67)s 0 6913(Principal)m
+917(mark)s 1416(,)s 1523(37)s 240 6625(ef)m 6(fect)k
+836(on)s 220 fnt35 1133 6622(@OneCol)m 240 fnt82 2145 6625(and)m
+220 fnt35 2549 6622(@OneRo)m 3(w)k 240 fnt82 3627 6625(,)m
+3734(47)s 0 6337(Promotion)m 1067(of)s 1338(components)s 2493(,)s
+2600(29)s 0 5761(Quote)m 641(character)s 1522(,)s 1629(13)s
+0 5473(Quoted)m 763(w)s 2(ord)k 1258(,)s 1365(14)s
+220 fnt35 0 4894(r)m 240 fnt82 133 4897(unit)m 512(,)s
+619(37)s 220 fnt35 0 4606(r)m 2(agged)k 729(@Break)s
+240 fnt82 1532 4609(,)m 1639(42)s 220 fnt35 0 4318(@Ra)m 4(wV)k 17(erbatim)k
+240 fnt82 1563 4321(symbol)m 2270(,)s 2377(69)s 0 4033(Recepti)m 6(v)k 3(e)k
+1003(symbol)s 1710(,)s 1817(11)s 0 3745(Recursion)m 974(,)s
+1081(5)s 220 fnt35 0 3454(@Ref)m 240 fnt82 621 3457(e)m 3(xample)k
+1431(,)s 1538(90)s 220 fnt35 0 3166(@Ref)m 6(erence)k
+240 fnt82 1281 3169(e)m 3(xample)k 2091(,)s 2198(87)s
+220 fnt35 0 2878(@Ref)m 6(erenceSection)k 240 fnt82 2006 2881(e)m 3(xample)k
+2816(,)s 2923(89)s 0 2593(Reid,)m 559(Brian)s 1147(K.)s
+1371(,)s 1478(7)s 0 2305(Right)m 592(justi\207cation)s 1724(,)s
+1831(37)s 220 fnt35 0 2014(r)m -3(lines)k 579(@Break)s
+240 fnt82 1382 2017(,)m 1489(42)s 0 1729(Roman)m 749(numerals)s
+1623(,)s 1730(77)s 0 1441(Root)m 526(g)s 1(alle)k 3(y)k
+1107(,)s 1214(11)s 240 1153(in)m 483(detail)s 1015(,)s
+1122(28)s 240 865(printing)m 1050(of)s 1268(,)s 1375(29)s
+240 577(size)m 667(of)s 938(components)s 2146(of)s 2364(,)s
+2471(25)s 220 fnt35 0 286(@Rotate)m 240 fnt82 921 289(symbol)m
+1628(,)s 1735(52)s 4816 13247(Rotation)m 5697(of)s 5968(object)s
+6559(,)s 6666(52)s 4816 12959(Ro)m 6(w)k 5317(mark)s
+5816(,)s 5923(2)s 220 fnt35 4816 12668(rr)m 2(agged)k
+5618(@Break)s 240 fnt82 6421 12671(,)m 6528(42)s 220 fnt35
+4816 12380(@Rump)m 240 fnt82 5676 12383(symbol)m 6383(,)s 6490(54)s
+220 fnt35 4816 12092(@Runner)m 240 fnt82 5818 12095(e)m 3(xample)k
+6628(,)s 6735(80)s 220 fnt35 4816 11516(s)m 240 fnt82
+4979 11519(unit)m 5358(,)s 5465(37)s 5056 11231(and)m 220 fnt35
+5460 11228(@Space)m 240 fnt82 6357 11231(symbol)m 7064(,)s 7171(43)s
+220 fnt35 4816 10940(@Scale)m 240 fnt82 5639 10943(symbol)m 6346(,)s
+6453(52)s 4816 10655(Scaling)m 5586(of)s 5857(object)s 6448(,)s
+6555(50)s 4816 10367(Scribe)m 5429(,)s 5536(7)s 220 fnt35
+4816 10076(@Section)m 240 fnt82 5816 10079(e)m 3(xample)k 6626(,)s
+6733(85)s 220 fnt35 4816 9788(@SetHeaderComponent)m 240 fnt82 7277 9791(symbol)m
+7984(,)s 8091(60)s 220 fnt35 4816 9500(@SetColor)m 240 fnt82
+5951 9503(symbol)m 6658(,)s 6765(45)s 220 fnt35 4816 9212(@SetColour)m
+240 fnt82 6073 9215(symbol)m 6780(,)s 6887(45)s 4816 8927(Size)m
+5283(of)s 5554(an)s 5837(object)s 6428(,)s 6535(24)s
+4816 8639(small)m 5388(capitals)s 6115(,)s 6222(41)s 4816 8351(Sorted)m
+5498(g)s 1(alle)k 3(ys)k 6169(,)s 6276(32)s
+4816 8063(Space)m 5390(,)s 5497(13)s 5056 7775(when)m 5632(signi\207cant)s
+6635(,)s 6742(38)s 220 fnt35 4816 7484(@Space)m 240 fnt82
+5713 7487(symbol)m 6420(,)s 6527(43)s 220 fnt35 4816 7196(@Star)m -8(tHSpan)k
+240 fnt82 6226 7199(symbol)m 6933(,)s 7040(51)s 220 fnt35
+4816 6908(@Star)m -8(tHVSpan)k 240 fnt82 6372 6911(symbol)m 7079(,)s
+7186(51)s 220 fnt35 4816 6620(@Star)m -8(tVSpan)k 240 fnt82
+6214 6623(symbol)m 6921(,)s 7028(51)s 4816 6335(Style)m 5363(of)s
+5634(an)s 5917(object)s 6508(,)s 6615(23)s 220 fnt35
+4816 6044(sup)m 240 fnt82 5222 6047(e)m 3(xample)k 6032(,)s
+6139(72)s 4816 5759(Symbol)m 5563(,)s 5670(4)s 220 fnt35
+4816 5468(@SysDatabase)m 240 fnt82 6396 5471(symbol)m 7103(,)s 7210(63)s
+220 fnt35 4816 5180(@SysInclude)m 240 fnt82 6164 5183(symbol)m 6871(,)s
+6978(68)s 220 fnt35 4816 4892(@SysIncludeGr)m 2(aphic)k 240 fnt82
+6933 4895(symbol)m 7640(,)s 7747(67)s 220 fnt35 4816 4604(@SysPrependGr)m 2(aphic)k
+240 fnt82 7055 4607(symbol)m 7762(,)s 7869(67)s 220 fnt35
+4816 4028(t)m 240 fnt82 4933 4031(g)m 1(ap)k 5331(mode)s
+5866(,)s 5973(37)s 4816 3743(T)m 19(ables)k 5432(,)s
+5539(2)s 4816 3455(T)m 19(ab)k 4(ulation)k 5886(g)s 1(ap)k
+6284(mode)s 6819(,)s 6926(37)s 220 fnt35 4816 3164(@T)m 26(ag)k
+240 fnt82 5439 3167(parameter)m 9(,)k 6491(def)s 2(ault)k
+7212(v)s 6(alue)k 7780(of)s 7998(,)s 8105(16)s
+220 fnt35 4816 2876(@T)m 26(agged)k 240 fnt82 5805 2879(symbol)m
+6512(,)s 6619(61)s 4816 2591(T)m 19(ar)k 4(get)k
+5476(of)s 5747(cross)s 6289(reference)s 7179(,)s 7286(8)s
+4816 2303(T)m 19(ar)k 4(get)k 5476(of)s 5747(a)s
+5913(g)s 1(alle)k 3(y)k 6494(,)s 6601(11)s
+220 fnt35 4816 2012(@T)m 26(arget)k 240 fnt82 5703 2015(symbol)m
+6410(,)s 6517(30)s 5056 1727(in)m 5299(detail)s 5831(,)s
+5938(25)s 4816 1439(T)m 4912 1391(E)m 5020 1439(X)m 5056 1151(h)m 1(yphenation)k
+6243(,)s 6350(39)s 5056 863(optimal)m 5841(paragraph)s 6854(breaking)s
+7691(,)s 7798(39)s 4816 575(T)m 16(e)k 3(xtual)k
+5582(unit)s 5961(,)s 6068(13)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 96 102
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(96)m 240 fnt83 8539 13843(Inde)m 4(x)k
+220 fnt35 0 13245(@Under)m -3(line)k 240 fnt82 1215 13248(symbol)m
+1922(,)s 2029(69)s 0 12960(Underscore)m 1158(character)s 2039(,)s
+2146(13)s 220 fnt35 0 12669(@Use)m 240 fnt82 665 12672(symbol)m
+1372(,)s 1479(62)s 220 fnt35 0 12093(v)m 240 fnt82
+169 12096(unit)m 548(,)s 655(37)s 240 11808(ef)m 6(fect)k
+836(on)s 1133(paragraph)s 2146(breaking)s 2983(,)s 3090(42)s
+220 fnt35 0 11517(@V)m 17(Adjust)k 240 fnt82 1017 11520(symbol)m
+1724(,)s 1831(49)s 220 fnt35 0 11229(@VContr)m 2(act)k
+240 fnt82 1252 11232(symbol)m 1959(,)s 2066(49)s 220 fnt35
+0 10941(@VCo)m 3(v)k 5(er)k 240 fnt82 1006 10944(symbol)m
+1713(,)s 1820(50)s 220 fnt35 0 10653(@V)m 17(erbatim)k
+240 fnt82 1129 10656(symbol)m 1836(,)s 1943(69)s 0 10368(V)m 26(ertical)k
+797(concatenation)s 2129(,)s 2236(36)s 220 fnt35 0 10077(@VExpand)m
+240 fnt82 1161 10080(symbol)m 1868(,)s 1975(48)s 220 fnt35
+0 9789(@VLimited)m 240 fnt82 1123 9792(symbol)m 1830(,)s 1937(49)s
+220 fnt35 0 9501(@VScale)m 240 fnt82 969 9504(symbol)m 1676(,)s
+1783(50)s 220 fnt35 0 9213(@VShift)m 240 fnt82 863 9216(symbol)m
+1570(,)s 1677(48)s 220 fnt35 0 8925(@VSpan)m 240 fnt82
+927 8928(symbol)m 1634(,)s 1741(51)s 220 fnt35 0 8349(w)m
+240 fnt82 216 8352(unit)m 595(,)s 702(37)s 0 8064(White)m
+640(space)s 1174(,)s 1281(13)s 240 7776(when)m 816(signi\207cant)s
+1819(,)s 1926(38)s 220 fnt35 0 7485(@Wide)m 240 fnt82
+774 7488(symbol)m 1481(,)s 1588(48)s 0 7200(W)m 9(idth)k
+646(of)s 917(an)s 1200(object)s 1791(,)s 1898(24)s
+0 6912(W)m 19(ord)k 531(,)s 638(14)s 220 fnt35
+0 6333(x)m 240 fnt82 168 6336(g)m 1(ap)k 566(mode)s
+1101(,)s 1208(37)s 220 fnt35 0 5757(@Y)m 4(ield)k
+240 fnt82 753 5760(symbol)m 1460(,)s 1567(56)s 220 fnt35
+0 5469(@YUnit)m 240 fnt82 814 5472(symbol)m 1521(,)s 1628(44)s
+220 fnt35 0 4893(@ZUnit)m 240 fnt82 802 4896(symbol)m 1509(,)s
+1616(44)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Trailer
+%%DocumentNeededResources: font Helvetica
+%%+ font Helvetica-Oblique
+%%+ font Symbol
+%%+ font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Times-BoldItalic
+%%DocumentSuppliedResources: procset LoutStartUp
+%%+ procset LoutTabPrependGraphic
+%%+ procset LoutFigPrependGraphic
+%%+ procset LoutBasicSetup
+%%+ encoding vec2
+%%Pages: 102
+%%EOF
diff --git a/doc/expert/preface b/doc/expert/preface
index 826487f..5dae00b 100644
--- a/doc/expert/preface
+++ b/doc/expert/preface
@@ -21,7 +21,7 @@ This manual presents Version 3 of Basser Lout, publicly released in
September 1994 @Cite { $kingston1995lout.program }. This manual was
rendered into PostScript
postscript @Index { PostScript }
-by Version 3.19 of the Basser Lout interpreter, using the symbols
+by Version 3.20 of the Basser Lout interpreter, using the symbols
described in the User's Guide @Cite { $kingston1995lout.user }.
@DP
@Heading { Acknowledgment. } Version 3 has benefited from hundreds of
diff --git a/doc/slides/README b/doc/slides/README
index 9279092..acbd629 100644
--- a/doc/slides/README
+++ b/doc/slides/README
@@ -15,4 +15,4 @@ after the second run. A copy of the final
outfile.ps is included.
Jeff Kingston
-9 March 2000
+8 April 2000
diff --git a/doc/slides/all b/doc/slides/all
index 98c7d6c..6e5f02e 100644
--- a/doc/slides/all
+++ b/doc/slides/all
@@ -500,7 +500,7 @@ begin
DoPriAbstract(root^.rightchild);
end;
end;
-} &0io
+} |0io
}
@End @Overhead
diff --git a/doc/slides/outfile.ps b/doc/slides/outfile.ps
new file mode 100644
index 0000000..5a8bd75
--- /dev/null
+++ b/doc/slides/outfile.ps
@@ -0,0 +1,4473 @@
+%!PS-Adobe-3.0
+%%Creator: Basser Lout Version 3.20 (April 2000)
+%%CreationDate: Sat Apr 8 14:54:15 2000
+%%DocumentData: Binary
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%DocumentMedia: A4 595 842 0 white ()
+%%PageOrder: Ascend
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 842
+%%EndComments
+
+%%BeginProlog
+%%BeginResource: procset LoutStartUp
+/m { 3 1 roll moveto show } bind def
+/mo { 3 1 roll moveto true charpath stroke } bind def
+/s { exch currentpoint exch pop moveto show } bind def
+/so { exch currentpoint exch pop moveto true charpath stroke } bind def
+/k { exch neg 0 rmoveto show } bind def
+/ko { exch neg 0 rmoveto true charpath stroke } bind def
+/ul { gsave setlinewidth dup 3 1 roll
+ moveto lineto stroke grestore } bind def
+/in { 1440 mul } def
+/cm { 567 mul } def
+/pt { 20 mul } def
+/em { 120 mul } def
+/sp { louts mul } def
+/vs { loutv mul } def
+/ft { loutf mul } def
+/dg { } def
+
+/LoutGraphic {
+ /louts exch def
+ /loutv exch def
+ /loutf exch def
+ /ymark exch def
+ /xmark exch def
+ /ysize exch def
+ /xsize exch def
+} def
+
+/LoutGr2 { gsave translate LoutGraphic gsave } def
+
+/LoutFont
+{ findfont exch scalefont setfont
+} bind def
+
+/LoutRecode {
+ { findfont dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding exch def
+ currentdict end definefont pop
+ }
+ stopped pop
+} bind def
+
+/BeginEPSF {
+ /LoutEPSFState save def
+ /dict_count countdictstack def
+ /op_count count 1 sub def
+ userdict begin
+ /showpage { } def
+ 0 setgray 0 setlinecap
+ 1 setlinewidth 0 setlinejoin
+ 10 setmiterlimit [] 0 setdash newpath
+ /languagelevel where
+ { pop languagelevel
+ 1 ne
+ { false setstrokeadjust false setoverprint
+ } if
+ } if
+} bind def
+
+/EndEPSF {
+ count op_count sub { pop } repeat
+ countdictstack dict_count sub { end } repeat
+ LoutEPSFState restore
+} bind def
+%%EndResource
+
+%%BeginResource: encoding vec2
+/vec2 [
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
+/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /A /B /C /D /E /F /G
+/H /I /J /K /L /M /N /O
+/P /Q /R /S /T /U /V /W
+/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+/quoteleft /a /b /c /d /e /f /g
+/h /i /j /k /l /m /n /o
+/p /q /r /s /t /u /v /w
+/x /y /z /braceleft /bar /braceright /asciitilde /.notdef
+/quotesinglbase /quotedblbase /ellipsis /OE /oe /quotedblleft /quotedblright /fi
+/fl /endash /emdash /bullet /dagger /daggerdbl /florin /fraction
+/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
+/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
+] def
+%%EndResource
+
+%%BeginResource: procset LoutTabPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/tabf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Tab %
+% %
+% To assist in avoiding name clashes, the names %
+% of all these symbols begin with "ltab". %
+% %
+% Jeffrey H. Kingston %
+% 24 September 1991 %
+% 22 December 1992 %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% linewidth ltabhs -
+% horizontal single line
+/ltabhs
+{ 0 0 moveto xsize 0 lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhsp -
+% horizontal single line with projecting ends
+/ltabhsp
+{ 0 0 moveto xsize 0 lineto
+ setlinewidth 2 setlinecap stroke
+} def
+
+% linewidth ltabhd -
+% horizontal double line
+/ltabhd
+{ dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch 3 mul moveto xsize exch 3 mul lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhdb -
+% horizontal double line below mark
+/ltabhdb
+{ dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch -3 mul moveto xsize exch -3 mul lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhdnw -
+% horizontal double line with northwest corner
+/ltabhdnw
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ xsize exch 3 mul moveto
+ -3 mul exch 3 mul lineto
+ -3 mul 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdne -
+% horizontal double line with northeast corner
+/ltabhdne
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch 3 mul moveto
+ 3 mul xsize add exch 3 mul lineto
+ 3 mul xsize add 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdsw -
+% horizontal double line with southwest corner
+/ltabhdsw
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ xsize exch -3 mul moveto
+ -3 mul exch -3 mul lineto
+ -3 mul 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdse -
+% horizontal double line with southeast corner
+/ltabhdse
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch -3 mul moveto
+ 3 mul xsize add exch -3 mul lineto
+ 3 mul xsize add 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabvs -
+% vertical single line
+/ltabvs
+{ 0 0 moveto 0 ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabvd -
+% vertical double line
+/ltabvd
+{ dup dup
+ 0 0 moveto 0 ysize lineto
+ -3 mul 0 moveto -3 mul ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabvdr -
+% vertical double line to right of mark
+/ltabvdr
+{ dup dup
+ 0 0 moveto 0 ysize lineto
+ 3 mul 0 moveto 3 mul ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+%%EndResource
+
+%%BeginResource: procset LoutFigPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/figf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Fig Jeffrey H. Kingston %
+% Version 2.0 (includes CIRCUM label) January 1992 %
+% %
+% To assist in avoiding name clashes, the names of all symbols %
+% defined here begin with "lfig". However, this is not feasible %
+% with user-defined labels and some labels used by users. %
+% %
+% <point> is two numbers, a point. %
+% <length> is one number, a length %
+% <angle> is one number, an angle in degrees %
+% <dashlength> is one number, the preferred length of a dash %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+errordict begin
+ /handleerror
+ {
+ { /Times-Roman findfont 8 pt scalefont setfont
+ 0 setgray 4 pt 4 pt moveto
+ $error /errorname get
+ dup lfigdict exch known
+ { lfigdict exch get }
+ { 30 string cvs } ifelse
+ show
+ ( Command: ) show
+ $error /command get 30 string cvs show
+ } stopped {} if
+ showpage stop
+ } def
+end
+
+% concat strings: <string> <string> lfigconcat <string>
+% must be defined outside lfigdict since used in lfigpromotelabels
+/lfigconcat
+{ 2 copy length exch length add string
+ dup 0 4 index putinterval
+ dup 3 index length 3 index putinterval
+ 3 1 roll pop pop
+} def
+
+% <string> lfigdebugprint -
+% must be defined outside lfigdict since used in arbitrary places
+% /lfigdebugprint
+% { print
+% (; operand stack:\n) print
+% count copy
+% count 2 idiv
+% { ==
+% (\n) print
+% } repeat
+% (\n) print
+% } def
+
+/lfigdict 120 dict def
+lfigdict begin
+
+% error messages
+/dictfull (dictfull error: too many labels?) def
+/dictstackoverflow (dictstackoverflow error: labels nested too deeply?) def
+/execstackoverflow (execstackoverflow error: figure nested too deeply?) def
+/limitcheck (limitcheck error: figure nested too deeply or too large?) def
+/syntaxerror (syntaxerror error: syntax error in text of figure?) def
+/typecheck (typecheck error: syntax error in text of figure?) def
+/undefined (undefined error: unknown or misspelt label?) def
+/VMError (VMError error: run out of memory?) def
+
+% push pi onto stack: - lfigpi <num>
+/lfigpi 3.14159 def
+
+% arc directions
+/clockwise false def
+/anticlockwise true def
+
+% maximum of two numbers: <num> <num> lfigmax <num>
+/lfigmax { 2 copy gt { pop } { exch pop } ifelse } def
+
+% minimum of two numbers: <num> <num> lfigmin <num>
+/lfigmin { 2 copy lt { pop } { exch pop } ifelse } def
+
+% add two points: <point> <point> lfigpadd <point>
+/lfigpadd { exch 3 1 roll add 3 1 roll add exch } def
+
+% subtract first point from second: <point> <point> lfigpsub <point>
+/lfigpsub { 3 2 roll sub 3 1 roll exch sub exch } def
+
+% max two points: <point> <point> lfigpmax <point>
+/lfigpmax { exch 3 1 roll lfigmax 3 1 roll lfigmax exch } def
+
+% min two points: <point> <point> lfigpmin <point>
+/lfigpmin { exch 3 1 roll lfigmin 3 1 roll lfigmin exch } def
+
+% scalar multiplication: <point> <num> lfigpmul <point>
+/lfigpmul { dup 3 1 roll mul 3 1 roll mul exch } def
+
+% point at angle and distance: <point> <length> <angle> lfigatangle <point>
+/lfigatangle { 2 copy cos mul 3 1 roll sin mul lfigpadd } def
+
+% angle from one point to another: <point> <point> lfigangle <angle>
+/lfigangle { lfigpsub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+
+% distance between two points: <point> <point> lfigdistance <length>
+/lfigdistance { lfigpsub dup mul exch dup mul add sqrt } def
+
+% difference in x coords: <point> <point> lfigxdistance <length>
+/lfigxdistance { pop 3 1 roll pop sub } def
+
+%difference in y coords: <point> <point> lfigydistance <length>
+/lfigydistance { 3 1 roll pop sub exch pop } def
+
+% stroke a solid line: <length> <dashlength> lfigsolid -
+/lfigsolid
+{ pop pop [] 0 setdash stroke
+} def
+
+% stroke a lfigdashed line: <length> <dashlength> lfigdashed -
+/lfigdashed
+{ 2 copy div 2 le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch dup ] 0 setdash }
+ { dup [ exch 4 2 roll 2 copy div
+ 1 sub 2 div ceiling dup 4 1 roll
+ 1 add mul sub exch div ] 0 setdash
+ } ifelse stroke
+} def
+
+% stroke a lfigcdashed line: <length> <dashlength> lfigcdashed -
+/lfigcdashed
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch dup ] dup 0 get 2 div setdash }
+ { dup [ 4 2 roll exch 2 copy exch div
+ 2 div ceiling div 1 index sub
+ ] exch 2 div setdash
+ } ifelse stroke
+} def
+
+% stroke a dotted line: <length> <dashlength> lfigdotted -
+/lfigdotted
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch 0 exch ] 0 setdash }
+ { 1 index exch div ceiling div
+ [ 0 3 2 roll ] 0 setdash
+ } ifelse stroke
+} def
+
+% stroke a noline line: <length> <dashlength> lfignoline -
+/lfignoline
+{ pop pop
+} def
+
+% painting (i.e. filling): - lfigwhite - (etc.)
+/lfignopaint { } def
+/lfignochange { fill } def
+/lfigdarkblue { 0.0 0.0 0.5 setrgbcolor fill } def
+/lfigblue { 0.0 0.0 1.0 setrgbcolor fill } def
+/lfiglightblue { 0.5 0.5 1.0 setrgbcolor fill } def
+/lfigdarkgreen { 0.0 0.5 0.0 setrgbcolor fill } def
+/lfiggreen { 0.0 1.0 0.0 setrgbcolor fill } def
+/lfiglightgreen { 0.5 1.0 0.5 setrgbcolor fill } def
+/lfigdarkred { 0.5 0.0 0.0 setrgbcolor fill } def
+/lfigred { 1.0 0.0 0.0 setrgbcolor fill } def
+/lfiglightred { 1.0 0.5 0.5 setrgbcolor fill } def
+/lfigdarkcyan { 0.0 0.5 0.5 setrgbcolor fill } def
+/lfigcyan { 0.0 1.0 1.0 setrgbcolor fill } def
+/lfiglightcyan { 0.5 1.0 1.0 setrgbcolor fill } def
+/lfigdarkmagenta { 0.5 0.0 0.5 setrgbcolor fill } def
+/lfigmagenta { 1.0 0.0 1.0 setrgbcolor fill } def
+/lfiglightmagenta { 1.0 0.5 1.0 setrgbcolor fill } def
+/lfigdarkyellow { 0.5 0.5 0.0 setrgbcolor fill } def
+/lfigyellow { 1.0 1.0 0.0 setrgbcolor fill } def
+/lfiglightyellow { 1.0 1.0 0.5 setrgbcolor fill } def
+/lfigdarkgray { 0.2 0.2 0.2 setrgbcolor fill } def
+/lfiggray { 0.5 0.5 0.5 setrgbcolor fill } def
+/lfiglightgray { 0.8 0.8 0.8 setrgbcolor fill } def
+/lfigdarkgrey { 0.2 0.2 0.2 setrgbcolor fill } def
+/lfiggrey { 0.5 0.5 0.5 setrgbcolor fill } def
+/lfiglightgrey { 0.8 0.8 0.8 setrgbcolor fill } def
+/lfigblack { 0.0 0.0 0.0 setrgbcolor fill } def
+/lfigwhite { 1.0 1.0 1.0 setrgbcolor fill } def
+
+% line caps (and joins, not currently used)
+/lfigbutt 0 def
+/lfiground 1 def
+/lfigprojecting 2 def
+/lfigmiter 0 def
+/lfigbevel 2 def
+
+% shape and labels of the @Box symbol
+/lfigbox
+{
+ 0 0 /SW lfigpointdef
+ xsize 0 /SE lfigpointdef
+ xsize ysize /NE lfigpointdef
+ 0 ysize /NW lfigpointdef
+ SE 0.5 lfigpmul /S lfigpointdef
+ NW 0.5 lfigpmul /W lfigpointdef
+ W SE lfigpadd /E lfigpointdef
+ S NW lfigpadd /N lfigpointdef
+ NE 0.5 lfigpmul /CTR lfigpointdef
+ [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @CurveBox symbol
+/lfigcurvebox
+{
+
+ xsize 0.5 mul ysize 0.5 mul /CTR lfigpointdef
+ xsize 0.5 mul 0 /S lfigpointdef
+ xsize ysize 0.5 mul /E lfigpointdef
+ xsize 0.5 mul ysize /N lfigpointdef
+ 0 ysize 0.5 mul /W lfigpointdef
+
+ xmark 0.293 mul xmark 0.293 mul /SW lfigpointdef
+ xsize xmark 0.293 mul sub xmark 0.293 mul /SE lfigpointdef
+ xsize xmark 0.293 mul sub ysize xmark 0.293 mul sub /NE lfigpointdef
+ xmark 0.293 mul ysize xmark 0.293 mul sub /NW lfigpointdef
+
+ [ xsize ysize 0.5 lfigpmul xmark /lfigcurveboxcircum cvx ] lfigcircumdef
+
+ xmark 0
+ xsize xmark sub 0
+ [ xsize xmark sub xmark ]
+ xsize xmark
+ xsize ysize xmark sub
+ [ xsize xmark sub ysize xmark sub ]
+ xsize xmark sub ysize
+ xmark ysize
+ [ xmark ysize xmark sub ]
+ 0 ysize xmark sub
+ 0 xmark
+ [ xmark xmark ]
+ xmark 0
+} def
+
+% shadow of the @ShadowBox symbol
+% its shape and labels are done, somewhat inaccurately, with lfigbox
+/lfigshadow
+{ xmark 2 mul 0 moveto xsize 0 lineto
+ xsize ysize xmark 2 mul sub lineto
+ xsize xmark sub ysize xmark 2 mul sub lineto
+ xsize xmark sub xmark lineto
+ xmark 2 mul xmark lineto closepath fill
+} def
+
+% shape and labels of the @Square symbol
+/lfigsquare
+{
+ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ CTR xsize xsize ysize ysize lfigpmax 0.5 lfigpmul lfigpadd /NE lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+ SW 0.5 lfigpmul SE 0.5 lfigpmul lfigpadd /S lfigpointdef
+ NW 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /N lfigpointdef
+ SW 0.5 lfigpmul NW 0.5 lfigpmul lfigpadd /W lfigpointdef
+ SE 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /E lfigpointdef
+ [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @Diamond symbol
+/lfigdiamond
+{
+ xsize 0 0.5 lfigpmul /S lfigpointdef
+ 0 ysize 0.5 lfigpmul /W lfigpointdef
+ S W lfigpadd /CTR lfigpointdef
+ CTR W lfigpadd /N lfigpointdef
+ CTR S lfigpadd /E lfigpointdef
+ [ xsize ysize 0.5 lfigpmul /lfigdiamondcircum cvx ] lfigcircumdef
+ S E N W S
+} def
+
+% shape and labels of the @Ellipse symbol
+/lfigellipse
+{
+ xsize 0 0.5 lfigpmul /S lfigpointdef
+ 0 ysize 0.5 lfigpmul /W lfigpointdef
+ S W lfigpadd /CTR lfigpointdef
+ CTR W lfigpadd /N lfigpointdef
+ CTR S lfigpadd /E lfigpointdef
+ CTR xsize 0 0.3536 lfigpmul lfigpadd 0 ysize 0.3536 lfigpmul lfigpadd /NE lfigpointdef
+ 0 ysize 0.3536 lfigpmul CTR xsize 0 0.3536 lfigpmul lfigpadd lfigpsub /SE lfigpointdef
+ xsize 0 0.3536 lfigpmul CTR lfigpsub 0 ysize 0.3536 lfigpmul lfigpadd /NW lfigpointdef
+ 0 ysize 0.3536 lfigpmul xsize 0 0.3536 lfigpmul CTR lfigpsub lfigpsub /SW lfigpointdef
+ [ xsize ysize 0.5 lfigpmul /lfigellipsecircum cvx ] lfigcircumdef
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @Circle symbol
+/lfigcircle
+{
+ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ CTR xsize 0 ysize 0 lfigpmax 0.5 lfigpmul lfigpadd /E lfigpointdef
+ CTR 0 0 CTR E lfigdistance 45 lfigatangle lfigpadd /NE lfigpointdef
+ CTR 0 0 CTR E lfigdistance 90 lfigatangle lfigpadd /N lfigpointdef
+ CTR 0 0 CTR E lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+ CTR 0 0 CTR E lfigdistance 180 lfigatangle lfigpadd /W lfigpointdef
+ CTR 0 0 CTR E lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+ CTR 0 0 CTR E lfigdistance 270 lfigatangle lfigpadd /S lfigpointdef
+ CTR 0 0 CTR E lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+ [ S E lfigpsub /lfigellipsecircum cvx ] lfigcircumdef
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @HLine and @HArrow symbols
+/lfighline
+{
+ 0 ymark lfigprevious /FROM lfigpointdef
+ xsize ymark lfigprevious /TO lfigpointdef
+} def
+
+% shape and labels of the @VLine and @VArrow symbols
+/lfigvline
+{
+ xmark ysize lfigprevious /FROM lfigpointdef
+ xmark 0 lfigprevious /TO lfigpointdef
+} def
+
+% points of a polygon around base with given no of sides, vert init angle:
+% <sides> <angle> figpolygon <point> ... <point>
+/lfigpolygon
+{ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ 90 sub CTR 2 copy lfigmax 5 3 roll
+ [ 4 copy pop /lfigpolycircum cvx ] lfigcircumdef
+ exch dup 360 exch div exch
+ 1 1 3 2 roll
+ { 4 string cvs (P) exch lfigconcat cvn
+ 6 copy pop pop lfigatangle 2 copy 10 2 roll
+ 3 2 roll lfigpointdef
+ dup 3 1 roll add exch
+ } for
+ pop lfigatangle
+} def
+
+% next array element: <array> <index> lfiggetnext <array> <index> <any> true
+% or <array> <index> false
+/lfiggetnext
+{ 2 copy exch length ge
+ { false }
+ { 2 copy get exch 1 add exch true } ifelse
+} def
+
+% check whether thing is number: <any> lfigisnumbertype <any> <bool>
+/lfigisnumbertype
+{ dup type dup
+ /integertype eq exch /realtype eq or
+} def
+
+% check whether thing is an array: <any> lfigisarraytype <any> <bool>
+/lfigisarraytype { dup type /arraytype eq } def
+
+% get next item: <array> <index> lfiggetnextitem <array> <index> 0
+% or <array> <index> <array> 1
+% or <array> <index> <point> 2
+/lfiggetnextitem
+{ lfiggetnext
+ { lfigisarraytype
+ { 1
+ }
+ { lfigisnumbertype
+ { 3 1 roll
+ lfiggetnext
+ { lfigisnumbertype
+ { 4 3 roll exch 2
+ }
+ { pop 3 2 roll pop 0
+ } ifelse
+ }
+ { 3 2 roll pop 0
+ } ifelse
+ }
+ { pop 0
+ } ifelse
+ } ifelse
+ }
+ { 0
+ } ifelse
+} def
+
+% set arc path: bool x1 y1 x2 y2 x0 y0 lfigsetarc <angle> <angle> <dist>
+% the path goes from x1 y1 to x2 y2 about centre x0 y0,
+% anticlockwise if bool is true else clockwise.
+% The orientations of backwards pointing and forwards pointing
+% arrowheads are returned in the two angles, and
+% the length of the arc is returned in <dist>.
+/lfigsetarc
+{
+ 20 dict begin
+ matrix currentmatrix 8 1 roll
+ 2 copy translate 2 copy 8 2 roll
+ 4 2 roll lfigpsub 6 2 roll lfigpsub
+ dup /y1 exch def dup mul /y1s exch def
+ dup /x1 exch def dup mul /x1s exch def
+ dup /y2 exch def dup mul /y2s exch def
+ dup /x2 exch def dup mul /x2s exch def
+
+ y1s y2s eq
+ { -1
+ }
+ { y1s x2s mul y2s x1s mul sub y1s y2s sub div
+ } ifelse
+ /da exch def
+
+ x1s x2s eq
+ { -1
+ }
+ { x1s y2s mul x2s y1s mul sub x1s x2s sub div
+ } ifelse
+ /db exch def
+
+ da 0 gt db 0 gt and
+ { /LMax da sqrt db sqrt lfigmax def
+ /scalex da sqrt LMax div def
+ /scaley db sqrt LMax div def
+ scalex scaley scale
+ 0 0 LMax
+ 0 0 x1 scalex mul y1 scaley mul lfigangle
+ 0 0 x2 scalex mul y2 scaley mul lfigangle
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 5 2 roll % res1 res2 ang1 ang2 anticlockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if lfigpi mul LMax mul 180 div
+ }
+ { 0 0 x1 y1 lfigdistance 0 0 x2 y2 lfigdistance eq
+ 0 0 x1 y1 lfigdistance 0 gt and
+ { 0 0
+ 0 0 x1 y1 lfigdistance
+ 0 0 x1 y1 lfigangle
+ 0 0 x2 y2 lfigangle
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ 5 2 roll % res1 res2 ang1 ang2 clockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if lfigpi mul 0 0 x1 y1 lfigdistance mul 180 div
+ }
+ { x2 y2 lineto pop
+ x2 y2 x1 y1 lfigangle
+ x1 y1 x2 y2 lfigangle
+ x1 y1 x2 y2 lfigdistance
+ } ifelse
+ } ifelse
+ 4 -1 roll setmatrix
+ end
+} def
+
+% lfigsetcurve: set up a Bezier curve from x0 y0 to x3 y3
+% and return arrowhead angles and length of curve (actually 0)
+% x0 y0 x1 y1 x2 y2 x3 y3 lfigsetcurve <angle> <angle> <length>
+/lfigsetcurve
+{ 8 copy curveto pop pop
+ lfigangle
+ 5 1 roll
+ 4 2 roll lfigangle
+ exch
+ 0
+} def
+
+% lfigpaintpath: paint a path of the given shape
+% /paint [ shape ] lfigpaintpath -
+/lfigpaintpath
+{
+ 10 dict begin
+ 0 newpath
+ /prevseen false def
+ /curveseen false def
+ { lfiggetnextitem
+ dup 0 eq { pop exit }
+ { 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /curveseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr
+ lfigsetcurve pop pop pop
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ lfigsetarc pop pop pop
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ } ifelse
+ }
+ { xcurr ycurr moveto
+ } ifelse
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop pop pop cvx exec
+ end
+} def
+
+% stroke a path of the given shape in the given linestyle and dash length.
+% Return the origin and angle of the backward and forward arrow heads.
+% dashlength /linestyle [shape] lfigdopath [<point> <angle>] [<point> <angle>]
+/lfigdopath
+{
+ 10 dict begin
+ 0
+ /prevseen false def
+ /curveseen false def
+ /backarrow [] def
+ /fwdarrow [] def
+ {
+ lfiggetnextitem
+ dup 0 eq { pop exit }
+ {
+ 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /prevseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { newpath xprev yprev moveto
+ curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr lfigsetcurve
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ lfigsetarc
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ xcurr ycurr xprev yprev lfigangle dup 180 sub
+ xprev yprev xcurr ycurr lfigdistance
+ } ifelse
+ 6 index 6 index cvx exec
+ [ xprev yprev 5 -1 roll ]
+ backarrow length 0 eq
+ { /backarrow exch def }
+ { pop } ifelse
+ [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def
+ } if
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop
+ pop pop pop pop
+ backarrow length 0 eq { [ 0 0 0 ] } { backarrow } ifelse
+ fwdarrow length 0 eq { [ 0 0 0 ] } { fwdarrow } ifelse
+ end
+} def
+
+% lfigdoarrow: draw an arrow head of given form
+% dashlength /lstyle /pstyle hfrac height width [ <point> <angle> ] lfigdoarrow -
+/lfigdoarrow
+{ matrix currentmatrix 8 1 roll
+ dup 0 get 1 index 1 get translate
+ 2 get rotate
+ [ 2 index neg 2 index 0 0
+ 3 index 3 index neg
+ 1 index 10 index mul 0
+ 7 index 7 index ]
+ 4 1 roll pop pop pop
+ dup 3 1 roll
+ gsave lfigpaintpath grestore lfigdopath pop pop
+ setmatrix
+} def
+
+% arrow head styles
+/lfigopen 0.0 def
+/lfighalfopen 0.5 def
+/lfigclosed 1.0 def
+
+% stroke no arrows, forward, back, and both
+/lfignoarrow { pop pop pop pop pop pop pop pop } def
+/lfigforward { 7 -1 roll lfigdoarrow pop } def
+/lfigback { 8 -2 roll pop lfigdoarrow } def
+/lfigboth { 8 -1 roll 7 copy lfigdoarrow pop 7 -1 roll lfigdoarrow } def
+
+% lfigprevious: return previous point on path
+/lfigprevious
+{ lfigisnumbertype
+ { 2 copy }
+ { lfigisarraytype
+ { 2 index 2 index }
+ { 0 0 }
+ ifelse
+ } ifelse
+} def
+
+% label a point in 2nd top dictionary: <point> /name lfigpointdef -
+/lfigpointdef
+{
+ % (Entering lfigpointdef) lfigdebugprint
+ [ 4 2 roll transform
+ /itransform cvx ] cvx
+ currentdict end
+ 3 1 roll
+ % currentdict length currentdict maxlength lt
+ % { def }
+ % { exec moveto (too many labels) show stop }
+ % ifelse
+ def
+ begin
+ % (Leaving lfigpointdef) lfigdebugprint
+} def
+
+% promote labels from second top to third top dictionary
+% <string> lfigpromotelabels -
+/lfigpromotelabels
+{
+ % (Entering lfigpromotelabels) lfigdebugprint
+ currentdict end exch currentdict end
+ { exch 20 string cvs 2 index
+ (@) lfigconcat exch lfigconcat cvn exch def
+ } forall pop begin
+ % (Leaving lfigpromotelabels) lfigdebugprint
+} def
+
+% show labels (except CIRCUM): - lfigshowlabels -
+/lfigshowlabels
+{
+ % (Entering lfigshowlabels) lfigdebugprint
+ currentdict end
+ currentdict
+ { 1 index 20 string cvs (CIRCUM) search % if CIRCUM in key
+ { pop pop pop pop pop }
+ { pop cvx exec 2 copy
+ newpath 1.5 pt 0 360 arc
+ 0 setgray fill
+ /Times-Roman findfont 8 pt scalefont setfont
+ moveto 0.2 cm 0.1 cm rmoveto 20 string cvs show
+ }
+ ifelse
+ } forall
+ begin
+ % (Leaving lfigshowlabels) lfigdebugprint
+} def
+
+% fix an angle to 0 <= res < 360: <angle> lfigfixangle <angle>
+/lfigfixangle
+{
+ % (Entering lfigfixangle) lfigdebugprint
+ { dup 0 ge { exit } if
+ 360 add
+ } loop
+ { dup 360 lt { exit } if
+ 360 sub
+ } loop
+ % (Leaving lfigfixangle) lfigdebugprint
+} def
+
+% find point on circumference of box: alpha a b lfigboxcircum x y
+/lfigboxcircum
+{
+ % (Entering lfigboxcircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ 0 0 a b lfigangle /theta exch def
+
+ % if alpha <= theta, return (a, a*tan(alpha))
+ alpha theta le
+ { a a alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 180 - theta, return (b*cot(alpha), b)
+ alpha 180 theta sub le
+ { b alpha cos mul alpha sin div b }
+ {
+ % else if alpha <= 180 + theta, return (-a, -a*tan(alpha))
+ alpha 180 theta add le
+ { a neg a neg alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 360 - theta, return (-b*cot(alpha), -b)
+ alpha 360 theta sub le
+ { b neg alpha cos mul alpha sin div b neg }
+ {
+ % else 360 - theta <= alpha, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigboxcircum) lfigdebugprint
+} def
+
+% find quadratic roots (assume a != 0): a b c lfigqroots x1 x2 2
+% or x2 1
+% or 0
+/lfigqroots
+{
+ 4 dict begin
+ /c exch def
+ /b exch def
+ /a exch def
+ /disc b b mul 4 a c mul mul sub def
+ disc 0 lt
+ { 0
+ }
+ { disc 0 eq
+ { b neg 2 a mul div
+ 1
+ }
+ { b neg disc sqrt add 2 a mul div
+ b neg disc sqrt sub 2 a mul div
+ 2
+ }
+ ifelse
+ }
+ ifelse
+ end
+} def
+
+% work our which quadrant: <angle> lfigquadrant <0-3>
+/lfigquadrant
+{ dup 90 lt
+ { pop 0
+ }
+ { dup 180 lt
+ { pop 1
+ }
+ { 270 lt
+ { 2
+ }
+ { 3
+ } ifelse
+ } ifelse
+ } ifelse
+} def
+
+% find curvebox circum, assuming upper right quadrant: alpha a b xmk lfigcb x y
+/lfigcb
+{
+ 6 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ /alpha exch def
+ /theta1 0 0 a b xmk sub lfigangle def
+ /theta2 0 0 a xmk sub b lfigangle def
+ alpha theta1 le
+ { % if alpha <= theta1, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ }
+ { alpha theta2 ge
+ { % else if alpha > theta2, return (b*cot(alpha), b)
+ b alpha cos mul alpha sin div b
+ }
+ {
+ % else, return the intersection of line and circle
+ a xmk sub b xmk sub xmk 0 0 alpha lfigcircleintersect
+ dup 0 eq
+ { % should never happen, just return any reasonable point
+ pop
+ a b 0.5 lfigpmul
+ }
+ { 1 eq
+ { % should never happen, just return the point on top of stack
+ }
+ { % the usual case, two points on stack, return the larger
+ lfigpmax
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+} def
+
+% find point on circumference of curvebox: alpha a b xmk lfigcurveboxcircum x y
+/lfigcurveboxcircum
+{
+ % (Entering lfigcurveboxcircum) lfigdebugprint
+ 5 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+
+ % work out which quadrant we are in, and reflect accordingly
+ /quad alpha lfigquadrant def
+ quad 0 eq
+ { alpha a b xmk lfigcb
+ }
+ { quad 1 eq
+ { 180 alpha sub a b xmk lfigcb exch neg exch
+ }
+ { quad 2 eq
+ { alpha 180 sub a b xmk lfigcb neg exch neg exch
+ }
+ { 360 alpha sub a b xmk lfigcb neg
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigcurveboxcircum) lfigdebugprint
+} def
+
+% find point on circumference of diamond: alpha a b lfigdiamondcircum x y
+/lfigdiamondcircum
+{
+ % (Entering lfigdiamondcircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ b alpha cos abs mul a alpha sin abs mul add /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving lfigdiamondcircum) lfigdebugprint
+} def
+
+% find point on circumference of ellipse: alpha a b lfigellipsecircum x y
+/lfigellipsecircum
+{
+ % (Entering lfigellipsecircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ b alpha cos mul dup mul a alpha sin mul dup mul add sqrt /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving lfigellipsecircum) lfigdebugprint
+} def
+
+% find point of intersection of two lines each defined by two points
+% x1 y1 x2 y2 x3 y3 x4 y4 lfiglineintersect x y
+/lfiglineintersect
+{
+ % (Entering lfiglineintersect) lfigdebugprint
+ 13 dict begin
+ /y4 exch def
+ /x4 exch def
+ /y3 exch def
+ /x3 exch def
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ x2 x1 sub /x21 exch def
+ x4 x3 sub /x43 exch def
+ y2 y1 sub /y21 exch def
+ y4 y3 sub /y43 exch def
+ y21 x43 mul y43 x21 mul sub /det exch def
+
+ % calculate x
+ y21 x43 mul x1 mul
+ y43 x21 mul x3 mul sub
+ y3 y1 sub x21 mul x43 mul add
+ det div
+
+ % calculate y
+ x21 y43 mul y1 mul
+ x43 y21 mul y3 mul sub
+ x3 x1 sub y21 mul y43 mul add
+ det neg div
+
+ end
+ % (Leaving lfiglineintersect) lfigdebugprint
+} def
+
+% find point on circumference of polygon
+% alpha radius num theta lfigpolycircum x y
+/lfigpolycircum
+{
+ % (Entering lfigpolycircum) lfigdebugprint
+ 13 dict begin
+ /theta exch def
+ /num exch def
+ /radius exch def
+ /alpha exch def
+
+ % calculate delta, the angle from theta to alpha
+ alpha theta sub lfigfixangle
+
+ % calculate the angle which is the multiple of 360/num closest to delta
+ 360 num div div truncate 360 num div mul theta add /anglea exch def
+
+ % calculate the next multiple of 360/num after anglea
+ anglea 360 num div add /angleb exch def
+
+ % intersect the line through these two points with the alpha line
+ anglea cos anglea sin angleb cos angleb sin
+ 0 0 alpha cos 2 mul alpha sin 2 mul
+ lfiglineintersect radius lfigpmul
+
+ end
+ % (Leaving lfigpolycircum) lfigdebugprint
+} def
+
+% find point of intersection of a point and a circle
+% x0 y0 r x1 y1 theta lfigcircleintersect xa ya xb yb 2
+% or xb yb 1
+% or 0
+/lfigcircleintersect
+{
+ % (Entering lfigcircleintersect) lfigdebugprint
+ 15 dict begin
+ /theta exch def
+ /y1 exch def
+ /x1 exch def
+ /r exch def
+ /y0 exch def
+ /x0 exch def
+
+ % if sin(theta) = 0 then line is horizontal and y must be y1
+ theta sin abs 0.00001 lt
+ {
+ /a 1 def
+ /b -2 x0 mul def
+ /c x0 dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c lfigqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 1
+ }
+ { y1 exch y1 2
+ } ifelse
+ } ifelse
+ }
+ {
+ /ct theta cos theta sin div def
+ /a ct ct mul 1 add def
+ /b ct x1 x0 sub mul y1 add y0 sub 2 mul def
+ /c x1 x0 sub dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c lfigqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xb yb 1
+ }
+ { y1 add /ya exch def
+ ya y1 sub ct mul x1 add /xa exch def
+ y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xa ya xb yb 2
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigcircleintersect) lfigdebugprint
+} def
+
+% add CIRCUM operator with this body: <array> lfigcircumdef -
+/lfigcircumdef
+{ % (Entering lfigcircumdef) lfigdebugprint
+ /CIRCUM exch cvx
+ currentdict end
+ 3 1 roll
+ % currentdict length currentdict maxlength lt
+ % { def }
+ % { exec moveto (too many labels) show stop }
+ % ifelse
+ def
+ begin
+ % (Leaving lfigcircumdef) lfigdebugprint
+} def
+
+end
+%%EndResource
+
+%%BeginResource: procset LoutGraphPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/graphf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Graph (Version 1.0) %
+% %
+% Version 1.0 by Jeffrey H. Kingston, December 1993. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+errordict begin
+ /handleerror
+ {
+ { /Times-Roman findfont 8 pt scalefont setfont
+ 0 setgray 4 pt 4 pt moveto
+ $error /errorname get
+ dup lgraphdict exch known
+ { lgraphdict exch get }
+ { 30 string cvs } ifelse
+ show
+ ( Command: ) show
+ $error /command get 30 string cvs show
+ } stopped {} if
+ showpage stop
+ } def
+end
+
+/lgraphdict 200 dict def
+lgraphdict begin
+
+% error messages
+/dictfull (dictfull error) def
+/dictstackoverflow (dictstackoverflow error) def
+/execstackoverflow (execstackoverflow error: expression too complex?) def
+/limitcheck (limitcheck error: graph too complex or too large?) def
+/syntaxerror (syntaxerror error: syntax error in text of graph?) def
+/typecheck (typecheck error: syntax error in text of graph?) def
+/undefined (undefined error: unknown or misspelt symbol?) def
+/rangecheck (rangecheck error: undefined expression (e.g. divide by zero)?) def
+/VMError (VMError error: run out of memory?) def
+
+% random number between x and y inclusive: x y dorand num
+/dorand { 1 index sub 1 add rand exch mod add } def
+
+% log to given base: base num dolog num
+/dolog { ln exch ln div } def
+
+% maximum of two numbers: <num> <num> max <num>
+/max { 2 copy gt { pop } { exch pop } ifelse } def
+
+% add two points: <point> <point> padd <point>
+/padd { exch 3 1 roll add 3 1 roll add exch } def
+
+% subtract first point from second: <point> <point> psub <point>
+/psub { 3 2 roll sub 3 1 roll exch sub exch } def
+
+% distance between two points: <point> <point> distance <length>
+/distance { psub dup mul exch dup mul add sqrt } def
+
+% point at angle and distance: <point> <length> <angle> atangle <point>
+/atangle { 2 copy cos mul 3 1 roll sin mul padd } def
+
+% angle from one point to another: <point> <point> angle <angle>
+/angle { psub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+
+
+% set up for line
+% - linesetup <length> <dashlength>
+/linesetup
+{ newpath
+ xcurr ycurr trpoint xprev yprev trpoint
+ 4 copy moveto lineto distance dashlength
+} def
+
+% set up for icon-avoiding line
+% - ilinesetup <length> <dashlength>
+/ilinesetup
+{ newpath
+ xprev yprev trpoint xcurr ycurr trpoint 4 copy
+ 4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle
+ 6 2 roll 4 2 roll
+ 4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle
+ 4 copy moveto lineto distance dashlength
+} def
+
+
+% stroke a solid line: <length> <dashlength> solid -
+/solid
+{ pop pop [] 0 setdash linewidth setlinewidth stroke
+} def
+
+% stroke a dashed line: <length> <dashlength> dashed -
+/dashed
+{ 2 copy 2 mul le 1 index 0 le or
+ { exch pop 1 pt max [ exch dup ] 0 setdash }
+ { dup [ exch 4 2 roll 2 copy div
+ 1 sub 2 div ceiling dup 4 1 roll
+ 1 add mul sub exch div ] 0 setdash
+ } ifelse linewidth setlinewidth stroke
+} def
+
+% stroke a cdashed line: <length> <dashlength> cdashed -
+/cdashed
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt max [ exch dup ] dup 0 get 2 div setdash }
+ { dup [ 4 2 roll exch 2 copy exch div
+ 2 div ceiling div 1 index sub
+ ] exch 2 div setdash
+ } ifelse linewidth setlinewidth stroke
+} def
+
+% stroke a dotted line: <length> <dashlength> dotted -
+/dotted
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt max [ exch 0 exch ] 0 setdash }
+ { 1 index exch div ceiling div 0.99999 mul
+ [ 0 3 2 roll ] 0 setdash
+ } ifelse gsave 1 setlinecap linewidth setlinewidth stroke grestore newpath
+} def
+
+% stroke a noline line: <length> <dashlength> noline -
+/noline
+{ pop pop
+} def
+
+% stroke a y histogram: - yhisto -
+/yhisto
+{ xprev yleft trpoint yextra sub moveto
+ xprev yprev trpoint lineto
+ xcurr yprev trpoint lineto
+ xcurr yleft trpoint yextra sub lineto
+ linewidth setlinewidth stroke
+} def
+
+% stroke an x histogram: - xhisto -
+/xhisto
+{ xleft yprev trpoint exch xextra sub exch moveto
+ xcurr yprev trpoint lineto
+ xcurr ycurr trpoint lineto
+ xleft ycurr trpoint exch xextra sub exch lineto
+ linewidth setlinewidth stroke
+} def
+
+% stroke a surface y histogram: - surfaceyhisto -
+/surfaceyhisto
+{ firstpair
+ { xprev yleft trpoint yextra sub moveto
+ xprev yprev trpoint lineto
+ }
+ { xprev yprev trpoint moveto
+ } ifelse
+ xcurr yprev trpoint lineto
+ lastpair
+ { xcurr yleft trpoint yextra sub lineto
+ }
+ { xcurr ycurr trpoint lineto
+ } ifelse
+ linewidth setlinewidth stroke
+} def
+
+% stroke a surface x histogram: - surfacexhisto -
+/surfacexhisto
+{ firstpair
+ { xleft yprev trpoint exch xextra sub exch moveto
+ }
+ { xprev yprev trpoint moveto
+ } ifelse
+ xcurr yprev trpoint lineto
+ xcurr ycurr trpoint lineto
+ lastpair
+ { xleft ycurr trpoint exch xextra sub exch lineto
+ } if
+ linewidth setlinewidth stroke
+} def
+
+% stroke a filled y histogram: - filledyhisto -
+/filledyhisto
+{
+ linewidth setlinewidth
+ xprev yleft trpoint exch currentlinewidth 2 div add exch yextra sub moveto
+ xprev yprev trpoint exch currentlinewidth 2 div add exch lineto
+ xcurr yprev trpoint exch currentlinewidth 2 div sub exch lineto
+ xcurr yleft trpoint exch currentlinewidth 2 div sub exch yextra sub lineto
+ closepath fill
+} def
+
+% stroke a filled x histogram: - filledxhisto -
+/filledxhisto
+{
+ linewidth setlinewidth
+ xleft yprev trpoint currentlinewidth 2 div add exch xextra sub exch moveto
+ xcurr yprev trpoint currentlinewidth 2 div add lineto
+ xcurr ycurr trpoint currentlinewidth 2 div sub lineto
+ xleft ycurr trpoint currentlinewidth 2 div sub exch xextra sub exch lineto
+ closepath fill
+} def
+
+
+% cross: show a small cross
+/cross
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg symbolsize neg rmoveto
+ symbolsize 2 mul symbolsize 2 mul rlineto
+ 0 symbolsize -2 mul rmoveto
+ symbolsize -2 mul symbolsize 2 mul rlineto
+ [] 0 setdash stroke
+} def
+
+% plus: show a small plus
+/plus
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg 0 rmoveto
+ symbolsize 2 mul 0 rlineto
+ symbolsize neg symbolsize neg rmoveto
+ 0 symbolsize 2 mul rlineto
+ [] 0 setdash stroke
+} def
+
+% square: show a small square
+/square
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg symbolsize neg rmoveto
+ symbolsize 2 mul 0 rlineto
+ 0 symbolsize 2 mul rlineto
+ symbolsize -2 mul 0 rlineto
+ closepath [] 0 setdash stroke
+} def
+
+% filledsquare: show a small filled square
+/filledsquare
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg symbolsize neg rmoveto
+ symbolsize 2 mul 0 rlineto
+ 0 symbolsize 2 mul rlineto
+ symbolsize -2 mul 0 rlineto
+ closepath gsave [] 0 setdash stroke grestore fill
+} def
+
+% diamond: show a small diamond
+/diamond
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg 0 rmoveto
+ symbolsize symbolsize neg rlineto
+ symbolsize symbolsize rlineto
+ symbolsize neg symbolsize rlineto
+ closepath [] 0 setdash stroke
+} def
+
+% filleddiamond: show a small filled diamond
+/filleddiamond
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg 0 rmoveto
+ symbolsize symbolsize neg rlineto
+ symbolsize symbolsize rlineto
+ symbolsize neg symbolsize rlineto
+ closepath gsave [] 0 setdash stroke grestore fill
+} def
+
+% circle: show a small circle
+/circle
+{ newpath
+ xcurr ycurr trpoint symbolsize 0 360 arc [] 0 setdash stroke
+} def
+
+% filledcircle: show a small filled circle
+/filledcircle
+{ newpath
+ xcurr ycurr trpoint symbolsize 0 360 arc gsave [] 0 setdash stroke grestore fill
+} def
+
+% triangle: show a small triangle
+/triangle
+{ newpath
+ xcurr ycurr trpoint moveto
+ 0 symbolsize 1.5 mul rmoveto
+ symbolsize neg symbolsize -2.5 mul rlineto
+ symbolsize 2 mul 0 rlineto
+ closepath [] 0 setdash stroke
+} def
+
+% filledtriangle: show a small filled triangle
+/filledtriangle
+{ newpath
+ xcurr ycurr trpoint moveto
+ 0 symbolsize 1.5 mul rmoveto
+ symbolsize neg symbolsize -2.5 mul rlineto
+ symbolsize 2 mul 0 rlineto
+ closepath gsave [] 0 setdash stroke grestore fill
+} def
+
+
+%plog: like log only with a base, and protected from failing if <= 0
+% base x plog res
+/plog { dup 0 le { pop pop 0 } { ln exch ln div } ifelse } def
+
+% xtr: transform one x value logarithmically if xlog > 1
+% <num> xtr <num>
+/xtr
+{ xlog 1 gt
+ { xlog exch plog
+ } if
+} def
+
+% ytr: transform one y value logarithmically if ylog > 1
+% <num> ytr <num>
+/ytr
+{ ylog 1 gt
+ { ylog exch plog
+ } if
+} def
+
+% % trpoint: transform (x, y) in graph space into (x', y') in print space
+% % x y trpoint x' y'
+% /trpoint
+% { exch xtr trxmin sub trxmax trxmin sub div xwidth mul xextra add
+% exch ytr trymin sub trymax trymin sub div ywidth mul yextra add
+% } def
+
+
+% trpoint: transform (x, y) in graph space into (x', y') in print space
+% x y trpoint x' y'
+/trpoint
+{ exch xtr xdecr { trxmax exch sub } { trxmin sub } ifelse
+ trxmax trxmin sub div xwidth mul xextra add
+
+ exch ytr ydecr { trymax exch sub } { trymin sub } ifelse
+ trymax trymin sub div ywidth mul yextra add
+} def
+
+
+% yonly: interpolate x values 1, 2, ... into data
+% [ data ] yonly [ newdata ]
+/yonly
+{ dup /tmp exch def
+ length [ exch 1 exch 1 exch
+ { dup tmp exch 1 sub get
+ } for
+ ]
+} def
+
+% xonly: interpolate y values 1, 2, ... into data
+% [ data ] yonly [ newdata ]
+/xonly
+{ dup /tmp exch def
+ length [ exch 1 exch 1 exch
+ { dup tmp exch 1 sub get exch
+ } for
+ ]
+} def
+
+% xandy: no interpolation of x or y values
+% [ data ] xandy [ data ]
+/xandy {} def
+
+
+% expstringwidth: calculate width of string containing optional exponent
+% <string> expstringwidth <width>
+/expstringwidth
+{ (^) search
+ { exch pop stringwidth pop exch stringwidth pop 0.7 mul add }
+ { stringwidth pop }
+ ifelse
+} def
+
+% expstringshow: show string containing optional exponent
+% <string> expstringshow -
+/expstringshow
+{ (^) search
+ { exch pop show 0 0.5 ft rmoveto
+ gsave currentfont 0.7 scalefont setfont show grestore
+ }
+ { show
+ }
+ ifelse
+} def
+
+% concatenate two strings: <string> <string> strconcat <string>
+/strconcat
+{ 2 copy length exch length add string
+ dup 0 4 index putinterval
+ dup 3 index length 3 index putinterval
+ 3 1 roll pop pop
+} def
+
+% lgen: generate one label automatically
+% num lgen num string
+/lgen { dup 20 string cvs } def
+
+% loglgen: generate one logarithmic label (with exponent)
+% <base> <exponent> loglgen <string>
+/loglgen
+{ 20 string cvs exch 20 string cvs
+ (^) strconcat exch strconcat
+} def
+
+
+% printxtick: print one x tick
+% xpos printxtick -
+/printxtick
+{ newpath
+ yleft trpoint moveto 0 yextra neg rmoveto
+ 0 xticklength neg rlineto [] 0 setdash stroke
+} def
+
+% printxlabel: print one x label
+% (xlabel) xpos printxlabel -
+/printxlabel
+{ yleft trpoint moveto 0 yextra neg rmoveto
+ 0 xticklength neg rmoveto 0 0.9 ft neg rmoveto
+ xlog 1 gt { 0 0.3 ft neg rmoveto } if
+ dup expstringwidth -2 div 0 rmoveto expstringshow
+} def
+
+% printytick: print one y tick
+% ypos printytick -
+/printytick
+{ newpath
+ xleft exch trpoint moveto xextra neg 0 rmoveto
+ yticklength neg 0 rlineto [] 0 setdash stroke
+} def
+
+% printylabel: print one y label
+% (ylabel) ypos printylabel -
+/printylabel
+{ xleft exch trpoint moveto xextra neg 0 rmoveto
+ yticklength neg 0 rmoveto -0.3 ft -0.3 ft rmoveto
+ dup expstringwidth neg 0 rmoveto expstringshow
+} def
+
+% printrtick: print one r tick
+% ypos printrtick -
+/printrtick
+{ newpath
+ xright exch trpoint moveto xextra 0 rmoveto
+ rticklength 0 rlineto [] 0 setdash stroke
+} def
+
+% printrlabel: print one r label
+% (rlabel) ypos printrlabel -
+/printrlabel
+{ xright exch trpoint moveto xextra 0 rmoveto
+ rticklength 0 rmoveto 0.3 ft -0.3 ft rmoveto
+ expstringshow
+} def
+
+% printticks: print ticks and labels
+% /tickproc /labelproc [ tickandlabeldata ] min printticks -
+/printticks
+{ /prev exch def
+ { dup type dup dup /integertype eq exch /realtype eq or
+ { pop dup /prev exch def 2 index cvx exec
+ }
+ { /stringtype eq
+ { prev 2 index cvx exec
+ }
+ { pop
+ } ifelse
+ } ifelse
+ } forall
+ pop pop
+} def
+
+
+% printxaxistick: print one x axis tick
+% xpos printxaxistick -
+/printxaxistick
+{ newpath
+ yaxis trpoint moveto 0 xticklength -2 div rmoveto
+ 0 xticklength rlineto [] 0 setdash stroke
+} def
+
+% printxaxislabel: print one x axis label
+% (xlabel) xpos printxaxislabel -
+/printxaxislabel
+{ yaxis trpoint moveto
+ 0 xticklength -2 div rmoveto 0 0.9 ft neg rmoveto
+ xlog 1 gt { 0 0.3 ft neg rmoveto } if
+ dup expstringwidth -2 div 0 rmoveto expstringshow
+} def
+
+% printyaxistick: print one y axis tick
+% ypos printyaxistick -
+/printyaxistick
+{ newpath
+ xaxis exch trpoint moveto
+ yticklength -2 div 0 rmoveto
+ yticklength 0 rlineto [] 0 setdash stroke
+} def
+
+% printyaxislabel: print one y axis label
+% (ylabel) ypos printyaxislabel -
+/printyaxislabel
+{ xaxis exch trpoint moveto
+ yticklength -2 div 0 rmoveto -0.3 ft -0.3 ft rmoveto
+ dup expstringwidth neg 0 rmoveto expstringshow
+} def
+
+
+% <val> minmax -
+% perform minv := min(minv, val); maxv := max(maxv, val)
+% allowing for the possibility of minv, maxv, val being false (undefined)
+/minmax
+{ dup false eq
+ { pop }
+ { minv false eq
+ { dup /minv exch def /maxv exch def }
+ { dup minv lt
+ { /minv exch def }
+ { dup maxv gt
+ { /maxv exch def }
+ { pop }
+ ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+} def
+
+% <ticks> ticksundef <ticks> <bool>
+% returns true iff the ticks array is undefined (one false entry)
+/ticksundef
+{ dup length 1 eq
+ { dup 0 get false eq
+ }
+ { false }
+ ifelse
+} def
+
+% <number> integral <boolean>
+% true if the number has an integral value
+/integral { dup round eq } def
+
+% ticksep ticks xory alldata minval maxval axis base ticksandlimits ticks min max base
+% ticksandlimits: sort out value of x or y ticks and limits and log base
+/ticksandlimits
+{ /base exch def
+ /minv false def
+ /maxv false def
+
+ % min and max of user-supplied minval, maxval, and axis
+ minmax minmax minmax
+
+ % min and max of data points
+ { 0 get dup dup length 1 sub 3 index exch 2 exch
+ { get minmax dup
+ } for pop pop
+ } forall
+ pop dup
+
+ % min and max of tick values
+ { dup type /stringtype eq
+ { pop } { minmax } ifelse
+ } forall
+
+ % fix minv and maxv if undefined (false) or equal
+ minv false eq
+ { /minv -1 def /maxv 1 def }
+ { minv maxv eq
+ { minv 0 lt
+ { /minv 2 minv mul def /maxv 0 def
+ }
+ { minv 0 eq
+ { /minv -1 def /maxv 1 def
+ }
+ { /minv 0 def /maxv 2 maxv mul def
+ } ifelse
+ } ifelse
+ } if
+ } ifelse
+
+ % invent ticks if undefined
+ ticksundef
+ { pop /ticksep exch def
+
+ % if base is reasonable and minv is positive, logarithmic ticks
+ base 1 gt minv 0 gt and
+ {
+ % get integral log of minv and maxv
+ /logminv base minv plog floor cvi def
+ /logmaxv base maxv plog ceiling cvi def
+
+ % if minv close to base, make it 1; reset minv and maxv
+ logminv 1 eq logmaxv 4 ge and { /logminv 0 def } if
+ /minv base logminv exp def
+ /maxv base logmaxv exp def
+
+ % ticks := [ base**logminv, ... , base**logmaxv ]
+ [ logminv 1 logmaxv
+ { dup base exch exp
+ exch base exch loglgen
+ } for
+ ]
+ }
+ { % non-logarithmic ticks
+ {
+ % fix tick separation if undefined (0) or too small
+ /base 0 def
+ /delta maxv minv sub def
+ ticksep delta 30 div le
+ { /ticksep 10 delta log 1 sub ceiling exp def
+ ticksep delta 2 div ge
+ { /ticksep ticksep 2 div def }
+ { ticksep delta 5 div lt
+ { /ticksep 2 ticksep mul def
+ } if
+ } ifelse
+ } if
+
+ % adjust minv and maxv to be multiples of ticksep
+ /minv minv ticksep div floor ticksep mul def
+ /maxv maxv ticksep div ceiling ticksep mul def
+ /delta maxv minv sub def
+
+ % if minv or maxv near zero, move to zero and redo
+ minv ticksep eq
+ { /minv 0 def }
+ { maxv ticksep neg eq { /maxv 0 def } { exit } ifelse
+ } ifelse
+ } loop
+
+ % if minv, maxv, and ticksep are all integral, set "makeint" to true
+ /makeint minv integral maxv integral ticksep integral and and def
+
+ % ticks := [ minv, minv+ticksep, ... , maxv ]
+ [ 0 1 delta ticksep div round
+ { ticksep mul minv add makeint { cvi } if lgen }
+ for
+ ]
+ } ifelse
+ }
+ { exch pop
+ } ifelse
+ minv maxv base
+} def
+
+% xset: set up all data for x axis, including limits and ticks
+% xticksep xticks 0 alldata xmin xmax xlog xextra xdecr xaxis xticklength xset -
+/xset
+{ /xticklength exch def
+ /xaxis exch def
+ /xdecr exch def
+ /xextra exch def
+ xaxis exch ticksandlimits
+ /xlog exch def /xmax exch def /xmin exch def /xticks exch def
+ /xleft xdecr { xmax } { xmin } ifelse def
+ /xright xdecr { xmin } { xmax } ifelse def
+ /xwidth xsize xextra 2 mul sub def
+ /trxmin xmin xtr def /trxmax xmax xtr def
+} def
+
+% yset: set up all data for y axis, including limits and yticks
+% yticksep yticks 0 alldata ymin ymax ylog yextra ydecr yaxis yticklength yset -
+/yset
+{ /yticklength exch def
+ /yaxis exch def
+ /ydecr exch def
+ /yextra exch def
+ yaxis exch ticksandlimits
+ /ylog exch def /ymax exch def /ymin exch def /yticks exch def
+ /yleft ydecr { ymax } { ymin } ifelse def
+ /yright ydecr { ymin } { ymax } ifelse def
+ /ywidth ysize yextra 2 mul sub def
+ /trymin ymin ytr def /trymax ymax ytr def
+} def
+
+% rset: set up all data for y axis (again), but including limits and rticks
+% rticksep rticks 0 alldata ymin ymax ylog yextra ydecr yaxis rticklength rset -
+/rset
+{ /rticklength exch def
+ /yaxis exch def
+ /ydecr exch def
+ /yextra exch def
+ yaxis exch ticksandlimits
+ /ylog exch def /ymax exch def /ymin exch def /rticks exch def
+ /yleft ydecr { ymax } { ymin } ifelse def
+ /yright ydecr { ymin } { ymax } ifelse def
+ /ywidth ysize yextra 2 mul sub def
+ /trymin ymin ytr def /trymax ymax ytr def
+} def
+
+% norset: set up data for no rticks
+% - norset -
+/norset
+{ /rticklength 0 def
+ /rticks [] def
+} def
+
+% framestyle: print a frame around the graph
+/framestyle
+{ 0 0 moveto xsize 0 lineto xsize ysize lineto
+ 0 ysize lineto closepath stroke
+ /printxtick /printxlabel xticks xleft printticks
+ /printytick /printylabel yticks ymin printticks
+ /printrtick /printrlabel rticks ymin printticks
+} def
+
+% nonestyle: print nothing around the graph
+/nonestyle
+{
+} def
+
+% axesstyle: print axes for the graph (unless axis values missing)
+/axesstyle
+{
+ xaxis false eq yaxis false eq or
+ { framestyle }
+ { xaxis yaxis trpoint dup 0 exch moveto xsize exch lineto
+ dup 0 moveto ysize lineto stroke
+ /printxaxistick /printxaxislabel xticks xleft printticks
+ /printyaxistick /printyaxislabel yticks ymin printticks
+ } ifelse
+} def
+
+% rundata: run all data sets
+/rundata
+{ alldata
+ { gsave
+ dup dup dup dup
+ 4 get /dopaint exch def
+ 3 get /initrun exch def
+ 2 get /pairs exch def
+ 1 get /points exch def
+ 0 get /data exch def
+ dopaint
+ { data length 4 ge
+ { initrun
+ newpath
+ data 0 get ymin trpoint yextra sub moveto
+ 0 2 data length 2 sub
+ { dup 1 add
+ data exch get /ycurr exch def
+ data exch get /xcurr exch def
+ xcurr ycurr trpoint lineto
+ } for
+ data dup length 2 sub get ymin trpoint yextra sub lineto
+ closepath fill
+ } if
+ } if
+ initrun
+ data length 2 ge
+ {
+ /xcurr data 0 get def
+ /ycurr data 1 get def
+ points
+ data length 4 ge
+ { 2 2 data length 2 sub
+ { /xprev xcurr def
+ /yprev ycurr def
+ dup dup 2 eq /firstpair exch def
+ data length 2 sub eq /lastpair exch def
+ dup 1 add
+ data exch get /ycurr exch def
+ data exch get /xcurr exch def
+ pairs
+ points
+ } for
+ } if
+ } if
+ grestore
+ } forall
+} def
+
+end
+%%EndResource
+
+%%BeginResource: procset LoutBasicSetup
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/bsf.lpg
+
+% width height linethickness louteuro -
+% draw a Euro symbol of this width and height with this line thickness
+/louteuro {
+ 20 dict begin
+ /eurothick exch def
+ /euroheight exch def
+ /eurowidth exch def
+ /eurostrokewidth euroheight 0.8 mul def
+ /eurostep eurothick 60 cos mul 60 sin div def
+ /eurotheta 40 def
+
+ % llx lly width thickness louteurobox -
+ % draw angled box starting at (llx, lly) with given width and thickness
+ /louteurobox
+ {
+ /euroboxthick exch def
+ /euroboxwidth exch def
+ newpath moveto euroboxwidth 0 rlineto
+ eurostep euroboxthick rlineto
+ euroboxwidth neg 0 rlineto closepath fill
+ } def
+
+ % lower cross stroke
+ 0 euroheight 2 div eurothick 1.5 mul sub
+ eurostrokewidth eurothick louteurobox
+
+ % upper cross stroke
+ 0 euroheight 2 div eurothick 0.5 mul add
+ eurostrokewidth eurostep 2 mul add eurothick louteurobox
+
+ % circular part
+ /eurohctr eurowidth euroheight 2 div eurotheta cos mul sub def
+ /eurovctr euroheight 2 div def
+ newpath
+ eurohctr eurovctr eurovctr eurotheta 350 eurotheta sub arc
+ eurohctr eurovctr eurovctr eurothick sub 365 eurotheta sub eurotheta arcn
+ closepath fill
+ end
+} def
+
+% path for @FullWidthRule symbol
+/LoutRule
+{ 0 0 moveto xsize 0 lineto
+} def
+
+% path for @Box symbol
+/LoutBox
+{ 0 0 moveto xsize 0 lineto
+ xsize ysize lineto 0 ysize lineto
+ closepath
+} def
+
+% path for @CurveBox symbol
+/LoutCurveBox
+{ xmark 0 moveto
+ xsize xmark sub xmark xmark 270 360 arc
+ xsize xmark sub ysize xmark sub xmark 0 90 arc
+ xmark ysize xmark sub xmark 90 180 arc
+ xmark xmark xmark 180 270 arc
+ closepath
+} def
+
+% path for @ShadowBox symbol
+/LoutShadowBox
+{ xmark 2 mul 0 moveto xsize 0 lineto
+ xsize ysize xmark 2 mul sub lineto
+ xsize xmark sub ysize xmark 2 mul sub lineto
+ xsize xmark sub xmark lineto
+ xmark 2 mul xmark lineto
+ closepath
+} def
+
+% set up dictionary containing margin note data: parity LoutMargSet -
+/LoutMargSet
+{ /LoutMargDict 12 dict def
+ LoutMargDict begin
+ /parity exch def
+ /matr matrix currentmatrix def
+ /rightx xsize def
+ /lefty ysize def % highest allowable point for top of next left note
+ /righty ysize def % highest allowable point for top of next right note
+ /max { 2 copy gt { pop } { exch pop } ifelse } def
+ /min { 2 copy lt { pop } { exch pop } ifelse } def
+ end
+} def
+
+%translate coordinate system for marginal notes: type LoutMargShift -
+% where type 0 is left margin, 1 is right margin, 2 is outer, 3 is inner
+/LoutMargShift
+{ LoutMargDict begin
+
+ % y coordinate of top of note, in margin coords, before vertical adjust
+ 0 ysize transform matr itransform exch pop
+
+ % decide whether left or right margin based on type and parity
+ exch [ 0 1 parity 1 parity sub ] exch get 0 eq
+ {
+ % left margin: adjust top of note downwards if overlaps previous note
+ lefty min
+
+ % bottom of note is new lefty position and also translate position
+ ysize sub dup /lefty exch def
+
+ % want right edge of note at coordinate zero
+ xsize neg exch
+ }
+ {
+ % right margin: adjust top of note downwards if overlaps previous note
+ righty min
+
+ % bottom of note is new righty position and also translate position
+ ysize sub dup /righty exch def
+
+ % want left edge of note at coordinate rightx
+ rightx exch
+ } ifelse
+
+ % stack now contains coord of bottom left corner in margin coordinates
+ matr setmatrix translate
+ end
+} def
+
+% create LoutPageDict with left, right, foot, top for @Place symbol users
+/LoutPageSet
+{
+ /LoutPageDict 5 dict def
+ LoutPageDict begin
+ /matr matrix currentmatrix def
+ /left 0 def
+ /right xsize def
+ /foot 0 def
+ /top ysize def
+ end
+
+} def
+
+%%EndResource
+
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Times-Roman
+/Times-Romanfnt82 vec2 /Times-Roman LoutRecode
+/fnt82 { /Times-Romanfnt82 LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Helvetica-Oblique
+/Helvetica-Obliquefnt36 vec2 /Helvetica-Oblique LoutRecode
+/fnt36 { /Helvetica-Obliquefnt36 LoutFont } def
+%%EndSetup
+
+%%Page: 1 1
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+%%+ font Helvetica-Oblique
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 9002(1)s 600 fnt35 691 11623(A)m
+1250(Pr)s 6(actical)k 3667(Introduction)s 6922(to)s 7566(the)s
+3956 10183(Lout)m 616 8743(Document)m 3500(F)s 18(or)k -15(matting)k
+6490(System)s 400 fnt35 2882 6881(Jeffre)m 8(y)k 4180(H.)s
+4656(Kingston)s 400 fnt36 1395 5779(Basser)m 2794(Dept.)s 3834(of)s
+4333(Computer)s 6242(Science)s 2251 5299(The)m 3058(Univ)s 10(ersity)k
+4951(of)s 5450(Sydne)s 8(y)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 2 2
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8990(2)s 400 fnt84 2988 11377(A)m
+3363(simple)s 4565(input)s 5575(\207le)s 360 fnt35 800 9646(@SysInclude { doc })m
+800 9166(@Doc @T)m 43(e)k 10(xt @Begin)k 800 8686(Hello)m 14(, w)k 3(or)k -5(ld)k
+800 8206(@End @T)m 43(e)k 10(xt)k 400 fnt84 0 6379(Ho)m 4(w)k
+889(to)s 1313(f)s 10(ormat)k 2579(it)s 360 fnt35
+800 5633(lout \207lename > out.ps)m 800 5153(ghostvie)m 7(w out.ps)k 800 4673(mpr out.ps)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 3 3
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8997(3)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(Hello,)m 2505(w)s 4(orld)k
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 4 4
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8990(4)s 400 fnt84 2339 11377(Headings)m
+4026(and)s 4762(paragraphs)s 360 fnt35 800 9646(@SysInclude { doc })m 800 9166(@Doc @T)m 43(e)k 10(xt @Begin)k
+800 8686(@Heading { Introduction })m 800 8206(@PP)m 800 7726(The design of the Lout f)m 10(or)k -9(matting)k
+800 7246(system w)m 5(as under)k -14(tak)k 7(en with the)k 800 6766(needs of the @I { ordinar)m -10(y user })k
+800 6286(v)m 9(er)k -10(y m)k 3(uch in mind.)k 800 5806(@End @T)m 43(e)k 10(xt)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 5 5
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12478(lout)m 8995(5)s gsave
+0 666 translate
+400 fnt82 8640 10080 1440 8456 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt84 1440 8364(Intr)m 7(oduction)k
+400 fnt82 2240 7742(The)m 2953(design)s 4090(of)s 4543(the)s
+5123(Lout)s 1440 7262(formatting)m 3215(system)s 4423(w)s 4(as)k
+5123(undertak)s 4(en)k 1440 6782(with)m 2245(the)s 2825(needs)s
+3818(of)s 4271(the)s 400 fnt83 4851 6784(or)m 14(dinary)k
+6328(user)s 400 fnt82 1440 6302(v)m 6(ery)k 2234(much)s
+3217(in)s 3622(mind.)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 6 6
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8991(6)s 400 fnt84 3817 11376(Displays)m
+360 fnt35 800 9652(Y)m 50(ou cer)k -14(tainly don't w)k 5(ant to retur)k -9(n to)k
+800 9172(his of\207ce and repor)m -14(t:)k 800 8692(@IndentedDispla)m 10(y @I {)k 800 8212(`I can't \207nd an ef\207cient algor)m -5(ithm, I)k
+800 7732(guess I'm just too dumb)m 14(.)k 36(')k 800 7252(})m 800 6772(T)m 43(o a)k 7(v)k 9(oid ser)k -5(ious damage to y)k 7(our)k
+800 6292(position in the compan)m 5(y)k 36(, it w)k 3(ould)k 800 5812(be better if ...)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 7 7
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8994(7)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(Y)m 44(ou)k
+2173(certainly)s 3657(don')s 7(t)k 4591(w)s 4(ant)k
+5460(to)s 5856(return)s 6901(to)s 1440 7887(his)m 1990(of\207ce)s
+2991(and)s 3665(report:)s 400 fnt83 2240 7048(`I)m 2626(can')s 12(t)k
+3542(\207nd)s 4252(an)s 4742(ef\207cient)s 2240 6568(algorithm,)m 3970(I)s
+4223(guess)s 5201(I'm)s 5848(just)s 6532(too)s 2240 6088(dumb)m 16(.)k 56(')k
+400 fnt82 1440 5330(T)m 32(o)k 1940(a)s 8(v)k 8(oid)k
+2909(serious)s 4124(damage)s 5458(to)s 5857(your)s 1440 4850(position)m
+2822(in)s 3227(the)s 3807(compan)s 6(y)k 26(,)k
+5418(it)s 5740(w)s 4(ould)k 6831(be)s 1440 4370(better)m
+2449(if)s 2813(\202)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 8 8
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8994(8)s 400 fnt84 2299 11376(P)m 4(aragraph)k
+4229(br)s 7(eaking)k 5847(styles)s 360 fnt35 800 9652(Y)m 50(ou cer)k -14(tainly don't w)k 5(ant to retur)k -9(n to)k
+800 9172(his of\207ce and repor)m -14(t:)k 800 8692(@ID { r)m 3(agged noh)k 10(yphen } @Break @I {)k
+800 8212(`I can't \207nd an ef\207cient algor)m -5(ithm, I)k 800 7732(guess I'm just too dumb)m 14(.)k 36(')k
+800 7252(})m 800 6772(T)m 43(o a)k 7(v)k 9(oid ser)k -5(ious damage to y)k 7(our)k
+800 6292(position in the compan)m 5(y)k 36(, it w)k 3(ould)k 800 5812(be better if ...)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 9 9
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8992(9)s gsave
+0 666 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(Y)m 44(ou)k
+2173(certainly)s 3657(don')s 7(t)k 4591(w)s 4(ant)k
+5460(to)s 5856(return)s 6901(to)s 1440 7887(his)m 1990(of\207ce)s
+2991(and)s 3665(report:)s 400 fnt83 2240 7048(`I)m 2626(can')s 12(t)k
+3542(\207nd)s 4252(an)s 4742(ef\207cient)s 2240 6568(algorithm,)m 3970(I)s
+4223(guess)s 5201(I'm)s 5848(just)s 6532(too)s 2240 6088(dumb)m 16(.)k 56(')k
+400 fnt82 1440 5330(T)m 32(o)k 1940(a)s 8(v)k 8(oid)k
+2909(serious)s 4124(damage)s 5458(to)s 5857(your)s 1440 4850(position)m
+2822(in)s 3227(the)s 3807(compan)s 6(y)k 26(,)k
+5418(it)s 5740(w)s 4(ould)k 6831(be)s 1440 4370(better)m
+2449(if)s 2813(\202)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 10 10
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8909(10)s 400 fnt84 4128 11376(Lists)m
+360 fnt35 800 9722(@Heading { Oper)m 3(ating Instr)k -5(uctions })k 800 9242(@NumberedList)m
+800 8762(@ListItem { Press small g)m 3(reen le)k 10(v)k 9(er)k 18(.)k 21( })k
+800 8282(@ListItem { )m 14(W)k 14(ait appro)k 10(ximately 10 seconds)k 800 7802(until red light \210ashes)m 5(.)k 21( })k
+800 7322(@ListItem { If smok)m 7(e emerges from rear of unit,)k 800 6842(call Ser)m -10(vice Depar)k -14(tment.)k 21( })k
+800 6362(@EndList)m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 11 11
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8922(11)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8456 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt84 1440 8364(Operating)m
+3287(Instructions)s 400 fnt82 1440 7529(1.)m 2240(Press)s 3166(small)s
+4123(green)s 5104(le)s 10(v)k 6(er)k 22(.)k
+1440 6689(2.)m 2240(W)s 32(ait)k 3077(approximately)s 5468(10)s
+5952(seconds)s 2240 6209(until)m 3065(red)s 3672(light)s 4505(\210ashes.)s
+1440 5369(3.)m 2240(If)s 2626(smok)s 4(e)k 3757(emer)s 7(ges)k
+5164(from)s 6040(rear)s 6760(of)s 2240 4889(unit,)m 3040(call)s
+3708(Service)s 4997(Department.)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 12 12
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(12)s 400 fnt84 3062 11377(T)m 36(echnical)k
+4780(r)s 7(eports)k 360 fnt35 800 9646(@SysInclude { repor)m -14(t })k
+800 9166(@Repor)m -14(t)k 800 8686( @Title { ...)m 21( })k 800 8206( @A)m 10(uthor { ...)k 21( })k
+800 7726( @Institution { ...)m 21( })k 800 7246( @DateLine { ...)m 21( })k 800 6766(//)m
+800 6286(@Abstr)m 3(act { ...)k 21( })k 800 5806(@Section { ...)m 21( })k
+800 5326(@Section { ...)m 21( })k 800 4846(@Section { ...)m 21( })k 800 4366(@Appendix { ...)m 21( })k
+800 3886(@Appendix { ...)m 21( })k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 13 13
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8917(13)s 400 fnt84 3840 11376(Sections)m
+360 fnt35 800 9720(@Section)m 800 9240( @T)m 43(ag { dfs })k 800 8760( @Title { Depth-\207rst search })m
+800 8280(@Begin)m 800 7800(@PP)m 800 7320(W)m 10(e tur)k -9(n no)k 5(w to our \207rst algor)k -5(ithm)k
+800 6840(on gener)m 3(al g)k 3(r)k 3(aphs ...)k 800 6360(@End @Section)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 14 14
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(14)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8456 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt84 1440 8364(10.6.)m
+2424(Depth-\207rst)s 4386(sear)s 7(ch)k 400 fnt82 2240 7742(W)m 32(e)k
+2854(turn)s 3592(no)s 10(w)k 4359(to)s 4758(our)s
+5391(\207rst)s 1440 7262(algorithm)m 3093(on)s 3587(general)s 4854(graphs)s
+6003(\202)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 15 15
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12478(lout)m 8915(15)s 400 fnt84 3142 11375(Cr)m 7(oss)k
+4199(r)s 7(efer)k 7(ences)k 360 fnt35 800 9722(F)m 10(or fur)k -14(ther inf)k 10(or)k -9(mation, consult)k
+800 9242(Section @NumberOf dfs on page)m 800 8762(@P)m 14(ageOf { dfs }.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 16 16
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8911(16)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(F)m 6(or)k
+2089(further)s 3276(information,)s 5341(consult)s 1440 7887(Section)m 2732(10.6)s
+3520(on)s 4014(page)s 4860(245.)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 17 17
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(17)s 400 fnt84 3612 11377(Refer)m 7(ences)k
+360 fnt35 800 9723(@Database @Ref)m 10(erence { m)k 5(yrefs })k 800 9243(...)m
+800 8763(F)m 10(or the details)k 5(, consult the User')k 18(s)k 800 8283(Guide @Cite { $kingston1995lout.user }.)m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 18 18
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(18)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(F)m 6(or)k
+2089(the)s 2669(details,)s 3889(consult)s 5143(the)s 5723(User')s 22(s)k
+1440 7887(Guide)m 2508([1].)s 1440 7263(\202)m 400 fnt84 1440 6637(Refer)m 7(ences)k
+400 fnt82 1440 5879(1.)m 2240(Jef)s 10(fre)k 6(y)k
+3422(H.)s 3883(Kingston.)s 400 fnt83 5621 5881(A)m 5947(User')s 16(s)k
+2240 5401(Guide)m 3304(to)s 3703(the)s 4279(Lout)s 5119(Document)s
+2240 4921(F)m 42(ormatting)k 4107(System)s 5308(\(V)s 44(er)k 4(sion)k
+2240 4441(3\))m 400 fnt82 2556 4439(.)m 2829(Basser)s 3992(Department)s
+5977(of)s 2240 3959(Computer)m 3938(Science)s 5171(,)s 5349(Uni)s 10(v)k 6(ersity)k
+2240 3479(of)m 2693(Sydne)s 6(y)k 3876(,)s 4054(1995)s
+4830(.)s 1440 2642(2.)m 2240(\202)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 19 19
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8912(19)s 400 fnt84 2601 11375(Database)m
+4269(\207le)s 4872(myr)s 7(efs.ld)k 360 fnt35 800 9644({ @Ref)m 10(erence)k
+800 9164( @T)m 43(ag { kingston1995lout.user })k 800 8684( @T)m 43(ype { Book })k 800 8204( @A)m 10(uthor { Jeffre)k 7(y H.)k 21( Kingston })k
+800 7724( @Title { A User')m 18(s Guide to the Lout)k 800 7244(Document F)m 10(or)k -9(matting System \(V)k 28(ersion 3\) })k
+800 6764( @Institution { Basser Depar)m -14(tment of)k 800 6284(Computer Science })m 800 5804( @Address { Univ)m 9(ersity of Sydne)k 7(y)k
+800 5324(2006, A)m 10(ustr)k 3(alia })k 800 4844( @Y)m 50(ear { 1994 })k
+800 4364(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 20 20
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8909(20)s 400 fnt84 2965 11375(Books)m
+4097(\(and)s 4966(theses\))s 400 fnt82 0 9650(\213)m 800(T)s 14(itle)k
+1632(page,)s 2564(pref)s 4(ace,)k 3912(introduction)s 0 8810(\213)m
+800(Automatic)s 2574(table)s 3442(of)s 3895(contents)s 0 8053(\213)m
+800(Pref)s 4(atory)k 2372(pages)s 3365(numbered)s 5060(in)s
+5465(Roman)s 6713(numerals)s 0 7213(\213)m 800(Chapters,)s 2397(sections,)s
+3861(subsections,)s 5880(appendices)s 0 6374(\213)m 800(References)s 2656(at)s
+3044(end)s 3718(of)s 4171(chapters)s 5585(or)s 6018(book)s
+0 5535(\213)m 800(Running)s 2265(page)s 3111(headers)s 0 4695(\213)m
+800(Odd-e)s 10(v)k 6(en)k 2453(page)s 3299(formats)s
+0 3855(\213)m 800(Sorted)s 1940(inde)s 6(x)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 21 21
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8922(21)s 400 fnt84 2631 11377(Making)m
+4057(a)s 4353(sorted)s 5509(index)s 360 fnt35 800 9646(@PP)m
+800 9166(There are se)m 10(v)k 9(er)k 3(al possib)k 7(le w)k 5(a)k 10(ys to implement the)k
+800 8686(@I P)m 14(ar)k -14(tition procedure)k 5(,)k 800 8206(par)m -14(tition @Inde)k 10(x { @I P)k 14(ar)k -14(tition \(in {@I Quic)k 7(ksor)k -14(t}\) })k
+800 7726(b)m 7(ut the f)k 10(ollo)k 5(wing seems to be the best.)k 21( Star)k -14(ting ...)k
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 22 22
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(22)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8462 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt84 1440 8370(Index)m
+400 fnt82 1440 7795(\202)m 1440 7315(partial)m 2552(order)s 16(,)k
+3557(227)s 400 fnt83 1440 6837(P)m 32(artition)k 400 fnt82
+2941 6835(\(in)m 400 fnt83 3479 6837(Quic)m 8(ksort)k 400 fnt82
+5052 6835(\),)m 5363(189)s 1440 6355(postorder)m 3049(tra)s 8(v)k 6(ersal)k
+1840 5875(of)m 2293(binary)s 3404(tree,)s 4180(19)s 1840 5395(topological)m
+3730(ordering,)s 5262(229)s 1440 4915(\202)m
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 23 23
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8917(23)s 400 fnt84 2785 11376(Equation)m
+4455(f)s 10(ormatting)k 360 fnt35 800 9645(@SysInclude { eq })m 800 9165(...)m
+800 8685(Since @Eq { )m 18(T\(n-i\) = )k 18(T\(0\) = 0 } w)k 3(e ha)k 7(v)k 9(e)k
+800 8205(@IndentedDispla)m 10(y @Eq {)k 800 7725(T\(n\) = big sum from i=0 to n-1 2 sup i = 2 sup n - 1)m 800 7245(})m 800 6765(f)m 10(or the n)k 3(umber of disk mo)k 5(v)k 9(es made b)k 7(y the )k 18(T)k 43(o)k 5(w)k 3(ers)k
+800 6285(of Hanoi algor)m -5(ithm, giv)k 9(en @Eq { n } disks)k 5(.)k
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 24 24
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(24)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8457 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1440 8367(Since)m 400 fnt83
+2419 8369(T)m 400 fnt78 2691 8357(\()m 400 fnt83 2831 8369(n)m
+400 fnt78 3141 8357(-)m 400 fnt83 3475 8369(i)m 400 fnt78
+3601 8357(\))m 3852(=)s 400 fnt83 4207 8369(T)m 400 fnt78
+4479 8357(\()m 4619(0)s 4828(\))s 5079(=)s 5434(0)s
+400 fnt82 5723 8367(we)m 6280(ha)s 8(v)k 6(e)k
+400 fnt83 2240 7204(T)m 400 fnt78 2512 7192(\()m 400 fnt83
+2652 7204(n)m 400 fnt78 2862 7192(\))m 3113(=)s 280 fnt83
+3468 7622(n)m 280 fnt78 3640 7613(-)m 3829(1)s 520 fnt78
+3522 7162(\345)m 280 fnt83 3483 6864(i)m 280 fnt78 3599 6855(=)m
+3791(0)s 280 fnt83 4149 7367(i)m 400 fnt78 3959 7192(2)m
+4363(=)s 280 fnt83 4908 7400(n)m 400 fnt78 4718 7192(2)m
+5161(-)s 5495(1)s 400 fnt82 1440 6098(for)m 2006(the)s
+2586(number)s 3907(of)s 4360(disk)s 5128(mo)s 6(v)k 6(es)k
+6243(made)s 1440 5618(by)m 1930(the)s 2510(T)s 32(o)k 10(wers)k
+3749(of)s 4202(Hanoi)s 5268(algorithm,)s 1440 5138(gi)m 10(v)k 6(en)k
+400 fnt83 2406 5140(n)m 400 fnt82 2696 5138(disks.)m
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 25 25
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12478(lout)m 8915(25)s 400 fnt84 3035 11375(Another)m
+4550(equation)s 360 fnt35 800 9644(@CenteredDispla)m 10(y @Eq {)k 800 9164(big int supp 1 on 0 )m 21(`)k
+800 8684(dx o)m 5(v)k 9(er sqr)k -14(t { 1 - x sup 2 })k 800 8204(= pi o)m 5(v)k 9(er 2)k
+800 7724(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 26 26
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Symbol
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8911(26)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+676 fnt78 3159 7423(\362)m
+280 fnt78 3355 7972(1)m 3355 7281(0)m 400 fnt83 3991 7782(dx)m
+1187 0 0 0 400 480 20 3587 7697 LoutGr2
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+gsave
+0 7292 translate
+1.0000 1.2231 scale
+400 fnt78 3587 -100(\326)m
+grestore
+981 0 0 0 400 480 20 3793 7617 LoutGr2
+0 0 moveto xsize 0 lineto 0.03 ft setlinewidth 2 setlinecap stroke
+grestore
+
+grestore
+400 fnt78 3853 7251(1)m 4129(-)s
+280 fnt78 4641 7365(2)m 400 fnt83 4463 7263(x)m 400 fnt78
+4914 7597(=)m 5269 7784(p)m gsave
+5269 7697 translate
+400 fnt83 212 0 0 0 400 480 20 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+5280 7317(2)m
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 27 27
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(27)s 400 fnt84 3991 11383(T)m 36(ables)k
+360 fnt35 800 9729(@SysInclude { tab })m 800 9249(...)m 800 8769(@T)m 43(ab)k
+800 8289( @Fmta { @Col @I A ! @Col B })m 800 7809({)m 800 7329(@Ro)m 5(w)k 5(a)k
+800 6849( A { F)m 10(or)k -14(tr)k 3(an })k 800 6369( B { )m 18(The \207rst ...)k 21( language })k
+800 5889(@Ro)m 5(w)k 5(a)k 800 5409( A { Algol-60 })m 800 4929( B { Said to be ...)m 21( successors })k
+800 4449(@Ro)m 5(w)k 5(a)k 800 3969( A { P)m 14(ascal })k
+800 3489( B { )m 18(The f)k 10(amous ...)k 21( successors })k 800 3009(})m
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 28 28
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(28)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt83 1440 8177(F)m 42(ortr)k 6(an)k
+400 fnt82 3178 8175(The)m 3891(\207rst)s 4612(high-le)s 10(v)k 6(el)k
+3178 7695(programming)m 5442(language)s 400 fnt83 1440 6950(Algol-60)m 400 fnt82
+3178 6948(Said)m 3985(to)s 4384(be)s 4853(a)s 5130(better)s
+3178 6468(language)m 4712(than)s 5494(most)s 6371(of)s 6824(its)s
+3178 5988(successors)m 400 fnt83 1440 5327(P)m 32(ascal)k 400 fnt82
+3178 5325(The)m 3891(most)s 4768(f)s 4(amous)k 6024(of)s
+3178 4845(Algol-60')m 22(s)k 4971(successors)s
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 29 29
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8912(29)s 400 fnt84 3357 11375(Another)m
+4872(table)s 360 fnt35 800 10201(@T)m 43(ab)k 800 9721( hmargin { 0.4c })m
+800 9241( vmargin { 0.3v })m 800 8761( side { single })m 800 8281( @Fmta { @Col @B @CC X @Ov)m 9(er A,B)k 7(,C })k
+800 7801( @Fmtb { @Col @I A ! @Col B !! @Col C })m 800 7321({)m 800 6361(@Ro)m 5(w)k 5(a abo)k 5(v)k 9(e { single })k
+800 5881( X { )m 18(V)k 25(alue of mathematical ...)k 21( dollars\) })k 800 4921(@Ro)m 5(wb abo)k 5(v)k 9(e { doub)k 7(le })k
+800 4441( A { Quadr)m 3(atic f)k 10(or)k -9(m)k 3(ula })k
+800 3961( B { @Eq { x ^= { ...)m 21( } o)k 5(v)k 9(er 2a } })k 800 3481( C { 3^.5 })m
+800 2521(@Ro)m 5(wb belo)k 5(w { single })k 800 2041( A { Binomial theorem })m 800 1561( B { @Eq { \( a + b \) sup n ^= ...)m 21( b sup n-k } })k
+800 1081( C { 12^ })m 800 601(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 30 30
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8909(30)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+gsave
+1440 8640 translate
+0.5938 0.5938 scale
+0 144 0 144 400 480 100 0 -144 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+226 0 0 0 400 480 100 0 0 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+0 344 0 159 400 480 100 0 -488 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 144 0 0 400 480 100 0 -632 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+8889 0 0 0 400 480 100 226 0 LoutGr2
+0.5 pt ltabhs
+grestore
+
+grestore
+400 fnt84 226 -421(V)m 36(alue)k
+1281(of)s 1736(mathematical)s 4157(f)s 10(ormulae)k 5793(\(millions)s
+7369(of)s 7824(dollars\))s gsave
+9115 0 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhsp
+grestore
+
+grestore
+gsave
+9341 -144 translate
+400 fnt82 360 144 0 144 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+9341 -488 translate
+400 fnt82 360 344 0 159 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+9341 -632 translate
+400 fnt82 360 144 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+0 -776 translate
+400 fnt82 0 144 0 144 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+0 -632 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+gsave
+0 -1867 translate
+400 fnt82 0 1091 0 480 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+0 -2011 translate
+400 fnt82 0 144 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+226 -632 translate
+400 fnt82 2985 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+400 fnt83 226 -1475(Quadr)m 6(atic)k
+1955(formula)s gsave
+3211 -632 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+gsave
+3437 -632 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+gsave
+3663 -632 translate
+400 fnt82 4255 0 1260 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+4725(x)s 400 fnt78 5063 -1487(=)m 5418 -1207(-)m
+400 fnt83 5652 -1195(b)m 400 fnt78 5962 -1207(\261)m gsave
+0 -1146 translate
+1.0000 1.3937 scale
+6297 -100(\326)m
+
+grestore
+gsave
+6503 -776 translate
+400 fnt83 1415 0 0 0 400 480 20 LoutGraphic
+gsave
+0 0 moveto xsize 0 lineto 0.03 ft setlinewidth 2 setlinecap stroke
+grestore
+
+grestore
+280 fnt78 6753 -1028(2)m 400 fnt83 6563 -1195(b)m 400 fnt78
+7006 -1207(-)m 7340(4)s 400 fnt83 7548 -1195(ac)m 2500 0 0 0 400 480 20 5418 -1387 LoutGr2
+0 0 moveto xsize 0 lineto 0.05 ft setlinewidth stroke
+grestore
+
+grestore
+400 fnt78
+6467 -1767(2)m 400 fnt83 6677 -1755(a)m gsave
+7918 -632 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+gsave
+8144 -776 translate
+400 fnt82 0 144 0 144 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8144 -632 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+gsave
+8144 -1867 translate
+400 fnt82 0 1091 0 480 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8144 -2011 translate
+400 fnt82 0 144 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8370 -632 translate
+400 fnt82 745 0 390 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhd
+grestore
+
+grestore
+400 fnt82 8587 -1477(3)m
+8760(.5)s 226 0 0 0 400 480 100 9115 -632 LoutGr2
+0.5 pt ltabhd
+grestore
+
+grestore
+360 144 0 144 400 480 100 9341 -776 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+360 1091 0 480 400 480 100 9341 -1867 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+360 144 0 0 400 480 100 9341 -2011 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 144 0 144 400 480 100 0 -2155 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 863 0 449 400 480 100 0 -3018 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+0 144 0 0 400 480 100 0 -3162 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+226 0 0 0 400 480 100 0 -3162 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+400 fnt83 226 -2657(Binomial)m 1791(theor)s 14(em)k
+gsave
+226 -3162 translate
+400 fnt82 2985 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+3211 -3162 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+3437 -3162 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+400 fnt78 3663 -2669(\()m 400 fnt83 3803 -2657(a)m 400 fnt78
+4114 -2669(+)m 400 fnt83 4449 -2657(b)m 280 fnt83 4770 -2463(n)m
+400 fnt78 4659 -2669(\))m 5063(=)s 336 fnt78 5549 -2290(\245)m
+520 fnt78 5484 -2699(\345)m 280 fnt83 5418 -3005(k)m 280 fnt78
+5588 -3014(=)m 5780(0)s gsave
+0 -2560 translate
+1.0000 2.3652 scale
+400 fnt78 5932 -100(\()m
+grestore
+400 fnt83
+6112 -2417(n)m 6115 -2893(k)m gsave
+0 -2560 translate
+1.0000 2.3652 scale
+400 fnt78 6362 -100(\))m
+grestore
+280 fnt83
+6684 -2501(k)m 400 fnt83 6493 -2657(a)m 280 fnt83 7022 -2488(n)m
+280 fnt78 7194 -2497(-)m 280 fnt83 7383 -2488(k)m 400 fnt83
+6832 -2657(b)m gsave
+3663 -3162 translate
+400 fnt82 4255 0 1260 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+7918 -3162 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+gsave
+8144 -2155 translate
+400 fnt82 0 144 0 144 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8144 -3018 translate
+400 fnt82 0 863 0 449 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8144 -3162 translate
+400 fnt82 0 144 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabvs
+grestore
+
+grestore
+gsave
+8144 -3162 translate
+400 fnt82 226 0 0 0 400 480 100 LoutGraphic
+gsave
+0.5 pt ltabhs
+grestore
+
+grestore
+400 fnt82 8370 -2659(12)m 745 0 390 0 400 480 100 8370 -3162 LoutGr2
+0.5 pt ltabhs
+grestore
+
+grestore
+226 0 0 0 400 480 100 9115 -3162 LoutGr2
+0.5 pt ltabhsp
+grestore
+
+grestore
+360 144 0 144 400 480 100 9341 -2155 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+360 863 0 449 400 480 100 9341 -3018 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+360 144 0 0 400 480 100 9341 -3162 LoutGr2
+0.5 pt ltabvs
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 31 31
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8922(31)s 400 fnt84 3123 11382(P)m 4(ascal)k
+4297(pr)s 7(ograms)k 360 fnt35 800 9651(@SysInclude { pas })m 800 9171(...)m
+800 8691(@ID @P)m 14(as {)k 800 8211(procedure DoPr)m -5(iAbstr)k 3(act\(root:)k 18( Pr)k -5(iEntr)k -10(y\);)k
+800 7731(begin)m 800 7251( if root^.leftchild <> nil then begin)m 800 6771( DoPr)m -5(iAbstr)k 3(act\(root^.leftchild\);)k
+800 6291( wr)m -5(ite\(', '\);)k 800 5811( end;)m 800 5331( Pr)m -5(iK)k 14(e)k 7(yAbstr)k 3(act\(root^.k)k 7(e)k 7(y\);)k
+800 4851( wr)m -5(ite\(':'\);)k 800 4371( Pr)m -5(iV)k 25(alueAbstr)k 3(act\(root^.v)k 9(alue\);)k
+800 3891( if root^.r)m -5(ightchild <> nil then begin)k 800 3411( wr)m -5(ite\(', '\);)k 800 2931( DoPr)m -5(iAbstr)k 3(act\(root^.r)k -5(ightchild\);)k
+800 2451( end;)m 800 1971(end;)m 800 1491(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 32 32
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Symbol
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(32)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8455 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+400 fnt84 1440 8363(pr)m 7(ocedur)k 7(e)k
+400 fnt83 3270 8367(DoPriAbstr)m 6(act)k 400 fnt82 5622 8365(\()m
+400 fnt83 5744 8367(r)m 18(oot)k 400 fnt82 6399 8365(:)m
+400 fnt83 6576 8367(PriEntry)m 400 fnt82 7966 8365(\);)m 400 fnt84
+1440 7883(begin)m 1840 7403(if)m 400 fnt83 2206 7407(r)m 18(oot)k
+320 fnt78 2861 7415(\255)m 400 fnt82 3043 7405(.)m 400 fnt83
+3116 7407(leftc)m 6(hild)k 400 fnt78 4529 7395(\271)m 400 fnt84
+4845 7403(nil)m 5380(then)s 6228(begin)s 400 fnt83 2240 6927(DoPriAbstr)m 6(act)k
+400 fnt82 4592 6925(\()m 400 fnt83 4714 6927(r)m 18(oot)k
+320 fnt78 5369 6935(\255)m 400 fnt82 5551 6925(.)m 400 fnt83
+5624 6927(leftc)m 6(hild)k 400 fnt82 6937 6925(\);)m 400 fnt83
+2240 6447(write)m 400 fnt82 3048 6445(\(',)m 3492('\);)s 400 fnt84
+1840 5963(end)m 400 fnt82 2453 5965(;)m 400 fnt83 1840 5487(PriK)m 14(e)k 12(yAbstr)k 6(act)k
+400 fnt82 4298 5485(\()m 400 fnt83 4420 5487(r)m 18(oot)k
+320 fnt78 5075 5495(\255)m 400 fnt82 5257 5485(.)m 400 fnt83
+5330 5487(k)m 4(e)k 12(y)k 400 fnt82 5838 5485(\);)m
+400 fnt83 1840 5007(write)m 400 fnt82 2648 5005(\(':'\);)m 400 fnt83
+1840 4527(PriV)m 44(alueAbstr)k 6(act)k 400 fnt82 4592 4525(\()m
+400 fnt83 4714 4527(r)m 18(oot)k 320 fnt78 5369 4535(\255)m
+400 fnt82 5551 4525(.)m 400 fnt83 5624 4527(value)m 400 fnt82
+6477 4525(\);)m 400 fnt84 1840 4043(if)m 400 fnt83 2206 4047(r)m 18(oot)k
+320 fnt78 2861 4055(\255)m 400 fnt82 3043 4045(.)m 400 fnt83
+3116 4047(rightc)m 6(hild)k 400 fnt78 4796 4035(\271)m 400 fnt84
+5112 4043(nil)m 5647(then)s 6495(begin)s 400 fnt83 2240 3567(write)m
+400 fnt82 3048 3565(\(',)m 3492('\);)s 400 fnt83 2240 3087(DoPriAbstr)m 6(act)k
+400 fnt82 4592 3085(\()m 400 fnt83 4714 3087(r)m 18(oot)k
+320 fnt78 5369 3095(\255)m 400 fnt82 5551 3085(.)m 400 fnt83
+5624 3087(rightc)m 6(hild)k 400 fnt82 7204 3085(\);)m 400 fnt84
+1840 2603(end)m 400 fnt82 2453 2605(;)m 400 fnt84 1440 2123(end)m
+400 fnt82 2053 2125(;)m
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 33 33
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8917(33)s 400 fnt84 3304 11376(Basic)m
+4308(graphics)s 360 fnt35 800 9645(45d @Rotate 1.5 @Scale @Bo)m 10(x {)k 800 9165( Hello)m 14(, w)k 3(or)k -5(ld)k
+800 8685(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 34 34
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(34)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+gsave
+2528 5722 translate
+45.0000 rotate
+gsave
+0 0 translate
+1.5000 1.5000 scale
+gsave
+0 -254 translate
+360 fnt35 2027 526 108 254 360 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+108 161(Hello)m 14(,)k
+1080(w)s 3(or)k -5(ld)k
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 35 35
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12478(lout)m 8915(35)s 400 fnt84 2908 11375(Adv)m 4(anced)k
+4704(graphics)s 360 fnt35 800 9644(@SysInclude { \207g })m 800 9164(...)m 800 8684(@Fig {)m
+800 8204(@Bo)m 10(x)k 800 7724( margin { 0c })m 800 7244( paint { b)m 7(lac)k 7(k })k
+800 6764(@Ellipse)m 800 6284( linestyle { noline })m 800 5804( paint { white })m 800 5324({ Hello)m 14(, w)k 3(or)k -5(ld })k
+800 4844(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 36 36
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8911(36)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8231 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+5760 781 226 372 400 480 100 1440 7859 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+2442 781 226 372 400 480 100 0 0 LoutGr2
+/lfigblack [ lfigbox ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+2442 781 226 372 400 480 100 0 0 LoutGr2
+/lfigwhite [ lfigellipse ] gsave lfigpaintpath grestore
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfignoline [ lfigellipse ] lfigdopath
+pop pop
+grestore
+226 282(Hello,)m 1291(w)s 4(orld)k
+
+grestore
+
+grestore
+end end restore
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 37 37
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(37)s 400 fnt84 3302 11376(P)m 8(oint)k
+4304(labelling)s 360 fnt35 800 9645(@Fig {)m 800 9165(A::)m 800 8685({)m
+800 8205( 1::)m 18( @Ellipse { 3c @Wide 2c @High })k 800 7725( //3c)m 800 7245( 2::)m 18( @Bo)k 10(x { 3c @Wide 2c @High })k
+800 6765(})m 800 6285(@Sho)m 5(wLabels)k 800 5805(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 38 38
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8914(38)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8414 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+5760 4873 0 4647 400 480 100 1440 3767 LoutGr2
+grestore save gsave 200 dict begin lfigdict begin
+grestore
+2153 4873 0 4647 400 480 100 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+2153 1586 226 1360 400 480 100 0 3287 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+2153 1586 226 1360 400 480 100 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigellipse ] lfigdopath
+pop pop
+grestore
+
+grestore
+(1) lfigpromotelabels
+grestore
+2153 1586 226 1360 400 480 100 0 0 LoutGr2
+currentdict end 200 dict begin begin
+grestore
+2153 1586 226 1360 400 480 100 0 0 LoutGr2
+
+0.5 pt setlinewidth lfiground setlinecap
+0.15 cm /lfigsolid [ lfigbox ] lfigdopath
+pop pop
+grestore
+
+grestore
+(2) lfigpromotelabels
+grestore
+(A) lfigpromotelabels
+grestore
+3507 4873 0 4647 400 480 100 2253 0 LoutGr2
+lfigshowlabels
+grestore
+
+grestore
+end end restore
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 39 39
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8912(39)s 400 fnt84 3895 11375(Graphs)m
+340 fnt35 800 9035(@Gr)m 3(aph)k 800 8555( abo)m 5(v)k 8(ecaption { Ne)k 6(w South )k 13(W)k 13(ales road deaths)k
+800 8075(\(per 100 million v)m 8(ehicle km\) })k 800 7595({)m 800 7115( @Data points { plus } pairs { dashed })m 800 6635( { 1963 5.6 1971 4.3 1976 3.7 1979 3.4)m
+800 6155( 1982 2.9 1985 2.3 1988 2.0 })m 800 5675(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 40 40
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8909(40)s gsave
+0 667 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+1631 8367(Ne)m 10(w)k
+2463(South)s 3491(W)s 32(ales)k 4540(road)s 5347(deaths)s
+1717 7887(\(per)m 2460(100)s 3151(million)s 4400(v)s 6(ehicle)k
+5639(km\))s 5103 3402 0 3402 400 480 100 1440 4116 LoutGr2
+grestore
+
+gsave xsize ysize lgraphdict begin /ysize exch def /xsize exch def
+/alldata [ [ [ 1963 5.6 1971 4.3 1976 3.7 1979 3.4 1982 2.9 1985 2.3 1988 2.0 ] xandy
+{ plus }
+{ ilinesetup dashed }
+{ /dashlength 0.2 ft def
+ /linewidth currentlinewidth def
+ /symbolsize 0.15 ft def }
+{ false }
+] ] def
+0 [ false ] 0 alldata false false 0
+0.5 cm false false 0.5 ft xset
+0 [ false ] 1 alldata false false 0
+0.5 cm false false 0.5 ft yset
+norset
+rundata framestyle
+grestore
+end
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 41 41
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Helvetica
+/pgsave save def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+1 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8922(41)s 360 fnt35 800 10484(-2p @F)m 10(ont @Gr)k 3(aph)k
+800 10004( style { ax)m 10(es })k 800 9524( xor)m -5(igin { 0 } y)k 7(or)k -5(igin { 0 })k
+800 9044( xtic)m 7(ks { 10@ 50@ 100@ 200@ 500@ })k 800 8564( objects { @NE at { 300 2 } @I { Exponential })m 800 8084( @SE at { ...)m 21( } @I { Unif)k 10(or)k -9(m } })k
+800 7604( belo)m 5(wcaption { @I n })k 800 7124({)m 800 6644( @Data points { \207lledcircle } { ...)m 21( })k
+800 6164( @Data points { \207lledcircle } { ...)m 21( })k 800 5204( @Data pairs { dashed })m 800 4724( { 10 2 500 2 })m 800 3764( @Data pairs { dashed })m
+800 3284( {)m 800 2804( xloop from { 10 } to { 500 } b)m 7(y { 20 } do)k 800 2324( {)m 800 1844( x sqr)m -14(t { pi*x / 4 } + 1)k
+800 1364( })m 800 884( })m 800 404(})m
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 42 42
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+400 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 400 480 100 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 12588 0 12588 400 480 100 1417 -14005 LoutGr2
+0 LoutMargSet
+grestore
+160 fnt82 0 12479(lout)m 8910(42)s gsave
+0 668 translate
+400 fnt82 8640 10080 1440 8640 400 480 100 LoutGraphic
+gsave
+LoutBox stroke
+grestore
+gsave
+1440 4671 translate
+360 fnt82 5670 3969 0 3969 360 480 90 LoutGraphic
+gsave
+grestore
+
+gsave xsize ysize lgraphdict begin /ysize exch def /xsize exch def
+/alldata [ [ [ 10 1.97 50 2.01 100 2.00 200 2.0 500 2.00 ] xandy
+{ filledcircle }
+{ }
+{ /dashlength 0.2 ft def
+ /linewidth currentlinewidth def
+ /symbolsize 0.15 ft def }
+{ false }
+]
+[ [ 10 3.53 50 7.45 100 9.32 200 13.41 500 21.63 ] xandy
+{ filledcircle }
+{ }
+{ /dashlength 0.2 ft def
+ /linewidth currentlinewidth def
+ /symbolsize 0.15 ft def }
+{ false }
+]
+[ [ 10 2 500 2 ] xandy
+{ }
+{ linesetup cdashed }
+{ /dashlength 0.2 ft def
+ /linewidth currentlinewidth def
+ /symbolsize 0.15 ft def }
+{ false }
+]
+[ [ 10 20 500 { /xval exch def xval 3.14159 xval mul 4 div sqrt 1 add } for ] xandy
+{ }
+{ linesetup cdashed }
+{ /dashlength 0.2 ft def
+ /linewidth currentlinewidth def
+ /symbolsize 0.15 ft def }
+{ false }
+] ] def
+0 [ 10 lgen 50 lgen 100 lgen 200 lgen 500 lgen ] 0 alldata false false 0
+0 false 0 0.5 ft xset
+0 [ false ] 1 alldata false false 0
+0 false 0 0.5 ft yset
+norset
+rundata axesstyle
+grestore
+1953 535 0 535 360 480 90 0 -535 LoutGr2
+300 2 trpoint translate 0 ysize translate gsave
+grestore
+360 fnt83 108 182(Exponential)m
+grestore
+grestore
+1428 533 0 533 360 480 90 0 -533 LoutGr2
+300 3.14159 300 4 div mul sqrt 1 add trpoint translate 0 0 translate gsave
+grestore
+360 fnt83 108 182(Uniform)m grestore
+grestore
+end
+
+grestore
+360 fnt83 4189 3901(n)m
+grestore
+
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Trailer
+%%DocumentNeededResources: font Helvetica
+%%+ font Helvetica-Oblique
+%%+ font Symbol
+%%+ font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%DocumentSuppliedResources: procset LoutStartUp
+%%+ procset LoutTabPrependGraphic
+%%+ procset LoutFigPrependGraphic
+%%+ procset LoutGraphPrependGraphic
+%%+ procset LoutBasicSetup
+%%+ encoding vec2
+%%Pages: 42
+%%EOF
diff --git a/doc/user/README b/doc/user/README
index 0fc5704..0cf3731 100644
--- a/doc/user/README
+++ b/doc/user/README
@@ -34,4 +34,4 @@ A copy of the final PostScript output file (A4 paper size) is
stored at "ftp://ftp.cs.su.oz.au/jeff/lout/lout-3.19.user.ps.gz".
Jeffrey H. Kingston
-9 March 2000
+8 April 2000
diff --git a/doc/user/all b/doc/user/all
index a4bb049..64eaf96 100644
--- a/doc/user/all
+++ b/doc/user/all
@@ -7,6 +7,7 @@
@SysInclude { diag }
@SysInclude { cprint }
@SysInclude { eiffel }
+@SysInclude { perl }
@SysInclude { book }
# @Include { letterbook } # for testing Letter size formatting
@@ -20,8 +21,8 @@ Lout
Document Formatting System
}
@Author { Jeffrey H. Kingston }
- @Edition { Version 3.19
-March, 2000 }
+ @Edition { Version 3.20
+April, 2000 }
@Publisher {
Copyright @CopyRight 1991, 2000 Jeffrey H. Kingston,
Basser Department of Computer Science,
@@ -42,7 +43,7 @@ The University of Sydney 2006, Australia. ISBN 0 86758 951 5.
@Include { bgr }
@Include { dia }
@Include { gra }
-@Include { cpp }
+@Include { prg }
@Include { pascal }
@Include { ap_qck }
@Include { ap_byp }
diff --git a/doc/user/cpp_chan b/doc/user/cpp_chan
deleted file mode 100644
index bee0493..0000000
--- a/doc/user/cpp_chan
+++ /dev/null
@@ -1,91 +0,0 @@
-@Section
- @Title { Changing the appearance of all programs simultaneously }
- @Tag { cpsetup }
-@Begin
-@PP
-We have just seen that the {@Code "@CP"}, {@Code "@Eiffel"} etc. symbols
-have many options for changing the appearance of the program text. However,
-most people would not want to have a different style for every program text
-in their document; they want to define the style once at the start, and have
-all their program texts come out in that style without laboriously setting
-options on every symbol. You do this by copying the setup file and
-changing it.
-@PP
-For general information about how to make your own setup file, consult
-Section {@NumberOf setup}. The options that determine the default
-values are in the @Code "@Use" clause which occupies most of the setup
-file. Here is the @Code "@Use" clause from {@Code cprint}:
-cprint. @Index @Code "@CPSetup"
-@ID @Code @Tbl
- mv { 0.5vx }
- aformat { @Cell A | @Cell B | @Cell C }
- bformat { @Cell { " #" A } | @Cell { "{" B } | @Cell "}" }
-{
-@Rowa A { "@Use { @CPSetup" }
-@Rowb A { "pipe" } B { }
-@Rowb A { "style" } B { fixed }
-
-@Rowa
-@Rowb A { "fixedfont" } B { Courier }
-@Rowb A { "fixedstrings" } B { Base }
-@Rowb A { "fixedidentifiers" } B { Base }
-@Rowb A { "fixedcomments" } B { Base }
-@Rowb A { "fixedkeywords" } B { Base }
-@Rowb A { "fixednumbers" } B { Base }
-@Rowb A { "fixedoperators" } B { Base }
-@Rowb A { "fixedsize" } B { -1.0p }
-@Rowb A { "fixedline" } B { 1.0vx }
-@Rowb A { "fixedtabin" } B { 8 }
-@Rowb A { "fixedtabout" } B { 8s }
-
-@Rowa
-@Rowb A { "varyingfont" } B { }
-@Rowb A { "varyingstrings" } B { Slope }
-@Rowb A { "varyingidentifiers" } B { Slope }
-@Rowb A { "varyingcomments" } B { Base }
-@Rowb A { "varyingkeywords" } B { Bold }
-@Rowb A { "varyingnumbers" } B { Base }
-@Rowb A { "varyingoperators" } B { Base }
-@Rowb A { "varyingsize" } B { 1.0f }
-@Rowb A { "varyingline" } B { 1.0vx }
-@Rowb A { "varyingtabin" } B { 8 }
-@Rowb A { "varyingtabout" } B { 3f }
-
-@Rowa
-@Rowb A { "symbolfont" } B { }
-@Rowb A { "symbolstrings" } B { Slope }
-@Rowb A { "symbolidentifiers" } B { Slope }
-@Rowb A { "symbolcomments" } B { Base }
-@Rowb A { "symbolkeywords" } B { Bold }
-@Rowb A { "symbolnumbers" } B { Base }
-@Rowb A { "symboloperators" } B { Base }
-@Rowb A { "symbolsize" } B { 1.0f }
-@Rowb A { "symbolline" } B { 1.0vx }
-@Rowb A { "symboltabin" } B { 8 }
-@Rowb A { "symboltabout" } B { 3f }
-
-@Rowa A { "}" }
-}
-This shows the default font families, font faces, font sizes, line
-spacings, and tab settings in force for the three styles, and also that
-the default style is {@Code "fixed"}. Notice that the font family name
-for @Code "fixed" style is {@Code "Courier"}, but for the other styles is
-empty. This causes the @Code "fixed" style to always switch to Courier,
-and the other styles to use the same font family as in the surrounding
-document. The @Code pipe option will be explained in Section {@NumberOf pipes}.
-@PP
-To change a default value, delete the preceding @Code "#" and change the
-part between braces. For example, suppose you are happy with @Code "fixed"
-except that you want bold keywords. Then one line needs to be changed, to
-@ID @Code "fixedkeywords { Bold }"
-Or suppose you like @Code "varying" as it stands, but would like it to be
-the default style rather than {@Code "fixed"}. Again, only one line needs
-to be changed, to {@Code "style { varying }"}.
-@PP
-The setup files for the other languages are identical to this one, except
-that the symbol after @Code "@Use" is different, and some of the
-default values may be different. Changing an option affects only the
-language of that setup file; if you have multiple languages you can
-have multiple setup files and change their options quite independently
-of each other.
-@End @Section
diff --git a/doc/user/preface b/doc/user/preface
index 3634a89..2f258eb 100644
--- a/doc/user/preface
+++ b/doc/user/preface
@@ -18,7 +18,7 @@ gnu. @Index { GNU Public License }
primary source is directory
@ID @Code "ftp://ftp.cs.usyd.edu.au/jeff/lout"
in which may be found a gzipped tar file containing the main distribution
-(currently {@Code "lout-3.19.tar.gz"}), and various other things including
+(currently {@Code "lout-3.20.tar.gz"}), and various other things including
a PostScript version of this guide. The distribution contains source code,
libraries, documentation, license, and installation instructions.
@PP
diff --git a/doc/user/cpp b/doc/user/prg
index 0e7748a..ec473aa 100644
--- a/doc/user/cpp
+++ b/doc/user/prg
@@ -30,6 +30,8 @@ At the time of writing, the available programming languages are:
eiffel. @Index { Eiffel program printing }
c. @Index { C and C++ program printing }
blue. @Index { Blue program printing }
+perl. @Index { Perl program printing }
+pod. @Index { Pod (for Perl) printing }
@CD @Tbl
mv { 0.5vx }
af { Italic }
@@ -61,26 +63,41 @@ blue. @Index { Blue program printing }
C { "@Blue" }
D { varying }
E { Yes }
+@Rowb
+ A { Perl }
+ B { perl }
+ C { "@Perl" }
+ D { fixed }
+ E { No }
+@Rowb
+ A { Pod }
+ B { pod }
+ C { "@Pod" }
+ D { varying }
+ E { No }
}
C and C++ are handled together since, for formatting purposes, they
differ only in that C++ has some additional keywords plus an extra
way to make comments. Whenever we mention C from now on, we mean
-both C and C++. The second to fifth columns of this table will be
+both C and C++. See Section {@NumberOf prg_perl} for more on Perl
+and its handmaiden Pod. The second to fifth columns of this table will be
explained at various points later in this chapter.
@PP
The list of languages is likely to expand, because the @Code "prg2lout"
-program has been designed to make it easy to add new languages. Consult
-the instructions at the top of the source file of that program if you
-want to try it yourself.
+program has been designed to make it relatively easy to add new languages
+(you don't have to write executable code, just declare a lot of records
+describing your language). Consult the instructions at the top of the
+source file of that program ({@I prg2lout.c}) if you want to try it yourself.
@BeginSections
-@Include { cpp_lone }
-@Include { cpp_embe }
-@Include { cpp_opti }
-@Include { cpp_chan }
-@Include { cpp_tabs }
-@Include { cpp_comm }
-@Include { cpp_prog }
-@Include { cpp_pipe }
-@Include { cpp_erro }
+@Include { prg_lone }
+@Include { prg_embe }
+@Include { prg_opti }
+@Include { prg_chan }
+@Include { prg_tabs }
+@Include { prg_comm }
+@Include { prg_prog }
+@Include { prg_pipe }
+@Include { prg_erro }
+@Include { prg_perl }
@EndSections
@End @Chapter
diff --git a/doc/user/prg_chan b/doc/user/prg_chan
new file mode 100644
index 0000000..6273b7d
--- /dev/null
+++ b/doc/user/prg_chan
@@ -0,0 +1,108 @@
+@Section
+ @Title { Changing the appearance of all programs simultaneously }
+ @Tag { cpsetup }
+@Begin
+@PP
+We have just seen that the {@Code "@CP"}, {@Code "@Eiffel"} etc. symbols
+have many options for changing the appearance of the program text. However,
+most people would not want to have a different style for every program text
+in their document; they want to define the style once at the start, and have
+all their program texts come out in that style without laboriously setting
+options on every symbol. You do this by copying the setup file and
+changing it.
+@PP
+For general information about how to make your own setup file, consult
+Section {@NumberOf setup}. The options that determine the default
+values are in the @Code "@Use" clause which occupies most of the setup
+file. Here is part of the @Code "@Use" clause from {@Code cprint}:
+cprint. @Index @Code "@CPSetup"
+@ID @Code @Tbl
+ mv { 0.5vx }
+ aformat { @Cell A | @Cell B | @Cell C }
+ bformat { @Cell { " #" A } | @Cell { "{" B } | @Cell "}" }
+{
+@Rowa A { "@Use { @CPSetup" }
+@Rowb A { "pipe" } B { }
+@Rowb A { "style" } B { fixed }
+
+@Rowa
+@Rowb A { "fixedfont" } B { Courier }
+@Rowb A { "fixedsize" } B { -1.0p }
+@Rowb A { "fixedline" } B { 1.0vx }
+@Rowb A { "fixedtabin" } B { 8 }
+@Rowb A { "fixedtabout" } B { 8s }
+
+@Rowa
+@Rowb A { "fixedidentifiers" } B { Base }
+@Rowb A { "fixedkeywords" } B { Base }
+@Rowb A { "fixedoperators" } B { Base }
+@Rowb A { "fixednumbers" } B { Base }
+@Rowb A { "fixedstrings" } B { Base }
+@Rowb A { "fixedcomments" } B { Base }
+
+@Rowa
+@Rowb A { "fixedidentifiersformat" } B { "@Body" }
+@Rowb A { "fixedkeywordsformat" } B { "@Body" }
+@Rowb A { "fixedoperatorsformat" } B { "@Body" }
+@Rowb A { "fixednumbersformat" } B { "@Body" }
+@Rowb A { "fixedstringsformat" } B { "@Body" }
+@Rowb A { "fixedcommentsformat" } B { "@Body" }
+
+@Rowa
+@Rowa A { "..." }
+
+@Rowa
+@Rowa A { "}" }
+}
+The @Code pipe option will be explained in Section {@NumberOf pipes}. The
+options whose name begins with @Code "fixed" apply only when
+@Code style is {@Code fixed}; there are corresponding options, not
+shown, which apply when @Code style is {@Code varying} and {@Code symbol}.
+@PP
+We can see in this extract that the default value of @Code style is
+{@Code fixed}. We can also see the default font family, font face, font size,
+line spacing, and tab settings when the style is {@Code "fixed"}. The
+font family name for @Code "fixed" style is {@Code "Courier"}, but for the
+other styles (not shown) it is empty. This causes the @Code "fixed" style
+to always switch to Courier, and the other styles to use the same font
+family as in the surrounding document.
+@PP
+The @Code fixedidentifiersformat option allows you to make a more
+radical change to the format of identifiers than just the font. Within
+this option, @Code "@Body" stands for the identifier being formatted, and
+by applying Lout symbols to it, you apply them to every identifier. For
+example,
+@ID @Code "fixedidentifiersformat { red @Colour @Body }"
+will cause identifiers to be printed red.
+@FootNote {
+@Code "@Colour" is not a Lout primitive like, say, {@Code "@Font"}; it is
+defined when you write @Code "@SysInclude { doc }" or the equivalent for
+the other document types. This is true of quite a few generally useful
+symbols, including {@Code "@Box"} and {@Code "@I"}. If you want to use
+these symbols here, you must include your setup file @I after
+@Code "@SysInclude { doc }" or whatever, the reverse of the usual
+arrangement, so that they are defined before Lout reads your setup
+file. This reversal is carried out automatically when formatting
+programs independently of any document, so you can use these symbols
+in a setup file given by a @Code { -S } command line flag.
+} If you do use exotic formats, remember that in some programming languages,
+comments and even strings may occupy more than one line: {@Code "@Box"},
+for example, will give a logical but probably unwanted result when
+formatting a multi-line string.
+@PP
+As always with setup files, to change a default value, delete the preceding
+@Code "#" and change the part between braces. For example, suppose you are
+happy with @Code "fixed" except that you want bold keywords. Then one line
+needs to be changed, to
+@ID @Code "fixedkeywords { Bold }"
+Or suppose you like @Code "varying" as it stands, but would like it to be
+the default style rather than {@Code "fixed"}. Again, only one line needs
+to be changed, to {@Code "style { varying }"}.
+@PP
+The setup files for the other languages are identical to this one, except
+that the symbol after @Code "@Use" is different, and some of the
+default values may be different. Changing an option affects only the
+language of that setup file; if you have multiple languages you can
+have multiple setup files and change their options quite independently
+of each other.
+@End @Section
diff --git a/doc/user/cpp_comm b/doc/user/prg_comm
index 96ac110..a679f4f 100644
--- a/doc/user/cpp_comm
+++ b/doc/user/prg_comm
@@ -16,7 +16,7 @@ formfeed. @Index { formfeed in program texts }
character, control-L, without any comment; whatever the language, a formfeed
in program text is taken to be a request to start a new page.) Or, to
make a heading in an Eiffel program, do this:
-@ID @Code "--@ @Display @Heading { treeprint() }"
+@ID @Code "--@ @Display @Heading { treeprint }"
(Eiffel comments begin with @Code "--" and end at the end of the
line.) Other possible uses for this feature include index entries and
margin notes. Incredible as it may seem, you can even write
diff --git a/doc/user/cpp_embe b/doc/user/prg_embe
index 0cefc84..cfa84d4 100644
--- a/doc/user/cpp_embe
+++ b/doc/user/prg_embe
@@ -66,8 +66,7 @@ equivalent for other languages), so that Lout does not confuse program
braces with Lout braces. In that case the program text must not
contain {@Code "@End"}; and in either case the program text must not
include @Code "@Include" or @Code "@SysInclude" unless you are really
-including a file at that point (which is allowed, and follows the
-rules given for @Code "@Verbatim" in Section {@NumberOf verbatim}).
+including a file at that point (Section {@NumberOf pipes}).
@PP
If your Lout document contains program texts in several languages,
simply add one @Code "@SysInclude" line for each of them and proceed
@@ -77,6 +76,6 @@ a viable alternative is
These symbols cause the text between braces to be set verbatim in
a fixed-width font, as explained elsewhere in this guide. This fallback
method will not handle tab and formfeed characters very well. Again,
-use @Code "@Begin" and @Code "@End @Verbatim" instead of braces if
-your program text contains unbalanced braces.
+use @Code "@Verbatim @Begin ... @End @Verbatim" if your program text
+contains unbalanced braces.
@End @Section
diff --git a/doc/user/cpp_erro b/doc/user/prg_erro
index ff89591..7ebbe3e 100644
--- a/doc/user/cpp_erro
+++ b/doc/user/prg_erro
@@ -27,7 +27,7 @@ line number, and column number pointing to the Lout symbol
({@Code "@CP"}, {@Code "@Eiffel"} etc.) whose program text caused the
error message, like this:
@ID @Code @Verbatim {
-lout file "cpp_tabs" (from "cpp" line 80, from "all" line 45):
+lout file "prg_tabs" (from "prg" line 96, from "all" line 46):
56,23: prg2lout 2,1: program text ended within comment
}
This is an actual message produced when formatting this chapter. The
diff --git a/doc/user/cpp_lone b/doc/user/prg_lone
index a377d86..1717998 100644
--- a/doc/user/cpp_lone
+++ b/doc/user/prg_lone
@@ -31,6 +31,11 @@ Select an inter-line spacing size in Lout units. The default is
@Code -v1.1fx meaning 1.1 times the font size measured from baseline
to baseline.
}
+@TI { {@Code -S}{@I file} } {
+Use @I file as the setup file for printing your language. This allows
+you to change all the options mentioned in subsequent sections, rather
+than just the few given here.
+}
@EndList
There are also {@Code -t} and {@Code -T} options for dealing with tab
characters (Section {@NumberOf tabs}).
diff --git a/doc/user/cpp_opti b/doc/user/prg_opti
index 538bda2..9eb1818 100644
--- a/doc/user/cpp_opti
+++ b/doc/user/prg_opti
@@ -1,6 +1,6 @@
@Section
@Title { Changing the appearance of a program }
- @Tag { cpp_opti }
+ @Tag { prg_opti }
@Begin
@PP
The {@Code "@CP"}, {@Code "@Eiffel"} etc. symbols have a number of
@@ -69,37 +69,33 @@ default values:
"@CP [ or @Eiffel, @Blue, etc. ]"
" style { fixed }"
" font { Courier }"
-" strings { Base }"
-" identifiers { Base }"
-" comments { Base }"
-" keywords { Base }"
-" numbers { Base }"
-" operators { Base }"
" size { -1.0p }"
" line { 1.0vx }"
" tabin { 8 }"
" tabout { 8s }"
+" identifiers { Base }"
+" keywords { Base }"
+" operators { Base }"
+" numbers { Base }"
+" strings { Base }"
+" comments { Base }"
"{"
" ..."
"}"
}
We are already familiar with {@Code "style"}. After that comes
-{@Code "font"}, which determines the font family to use, followed
-by six options giving the particular faces within that family in which to
-print strings, identifiers, comments, keywords, numbers, and
-operators. {@Code "Base"} means the basic face; other commonly available
-choices are {@Code "Slope"} and {@Code "Bold"}. These options may all be
-set to different faces if desired. The default values shown are correct
-for @Code "style { fixed }" only; the other styles have other defaults
-(Section {@NumberOf cpsetup}).
-@PP
-The @Code "size" option is the font size to use, and @Code "line" is the
-inter-line spacing. The default values specify that @Code "size" is
-to be one point smaller than in the surrounding document; this was done
-to compensate for Courier's relatively large appearance compared
-to other fonts of the same nominal size. Again, these defaults are
-different for different values of {@Code "style"}.
+{@Code "font"}, which determines the font family to use, {@Code "size"},
+the font size to use, and {@Code "line"}, the inter-line spacing. The
+default value for @Code "size" asks for one point smaller than in the
+surrounding document; this was done to compensate for Courier's relatively
+large appearance compared to other fonts of the same nominal size.
@PP
The @Code "tabin" and @Code "tabout" options are the subject of
-Section {@NumberOf tabs}.
+Section {@NumberOf tabs}. After them come six options giving the
+particular font faces in which to print identifiers, keywords, operators,
+numbers, strings, and comments. {@Code "Base"} means the basic face; other
+commonly available choices are {@Code "Slope"} and {@Code "Bold"}. These
+options may all be set to different faces if desired. The default values
+shown are correct for @Code "style { fixed }" only; the other styles
+have other defaults (Section {@NumberOf cpsetup}).
@End @Section
diff --git a/doc/user/prg_perl b/doc/user/prg_perl
new file mode 100644
index 0000000..4a14860
--- /dev/null
+++ b/doc/user/prg_perl
@@ -0,0 +1,108 @@
+@Section
+ @Title { Notes on Perl and Pod }
+ @Tag { prg_perl }
+@Begin
+@PP
+The Perl programming language
+@FootNote { My thanks to Mark Summerfield for help with Perl and Pod. }
+is quite a difficult one for the @Code { prg2lout } program to deal with,
+and our boast that programs can be included with `absolutely no
+modifications' is not quite true for Perl.
+@PP
+Here is the complete list of problem areas. In most cases their
+effect is to get the formatting wrong over a short region, which is not
+perhaps so disastrous; and it should be easy to modify your Perl program
+without changing its meaning, to work around these problems. After all,
+in Perl there is always more than one way to do it.
+@NumberedList
+
+@LI {
+@I Here-documents such as
+@ID @Verbatim {
+<<"EOF"
+These lines will be read as though
+enclosed in double quotes
+EOF
+}
+will be handled correctly only if the string appearing immediately after
+the @Perl { << } operator (that is, the string used to terminate the
+here-document) is one of @Perl { EOF }, @Perl { EOT }, @Perl { END },
+and the empty string, all optionally enclosed in quotes of any of the
+three kinds. If this condition is not met, then the here-document will
+be treated as Perl program text. If the condition is met, there is still
+another problem: everything after the @Perl { << } symbol on the same
+line will be treated (incorrectly) as a string; the worst consequence
+of this is that stacked here-documents will not be printed properly.
+}
+
+@LI {
+When @Code { prg2lout } is scanning the program text looking for the
+beginning of a lexical unit, it may come upon a @Code "/" character,
+and this @I initial @Code "/" (not subsequent ones in the same lexical
+unit) it finds difficult to interpret, since it may be the beginning
+of a regular expression, to be formatted like a string, or it may be a
+complete lexical unit denoting division. The program chooses the regular
+expression (or equivalently, string) interpretation if the @Code "/"
+character is immediately preceded by @Code { "q" }, @Code { "qq" },
+@Code { "qx" }, @Code { "qw" }, @Code { "qr" }, @Code { "m" },
+@Code { "s" }, @Code { "y" }, or @Code { "tr" }. It also chooses the
+regular expression interpretation if the @Code "/" character appears
+at the start of a line, or if it is
+immediately preceded by zero, one, or two space or tab characters, which
+are themselves immediately preceded by a complete lexical unit which is
+one of @Code { "(" }, @Code { "=" }, @Code { "=~" }, @Code { "!~" },
+@Code { "split" }, @Code { "if" }, @Code { "not" }, @Code { "unless" },
+@Code { "for" }, @Code { "foreach" }, and @Code { "while" }. Otherwise
+it chooses the division interpretation. In the rare cases where this
+rule fails, you can force @Code { prg2lout } to choose the regular expression
+interpretation by placing an @Code { m } in front of the initial @Code "/"
+(this does not change the meaning of the program), and you can force the
+division interpretation by placing at least three spaces before the
+@Code "/" character.
+}
+
+@LI {
+The @Code { prg2lout } program recognises complete substitution operators,
+such as @Code "s/abc/ABC/" and {@Code "s{abc}{ABC}"}, as individual lexical
+units, and it formats them as it does strings. However, its rule for
+deciding where these units end is rather simple-minded: at the start,
+it works out what character finishes the unit (in the examples above,
+@Code "/" and @Code "}" respectively), and scans along until it reaches
+the second occurrence of this character not preceded by the @Code "\\"
+escape character. This is inadequate in two respects. Firstly,
+@ID @Code "s{{}}{}"
+is a complete legal substitution expression in Perl, but @Code { prg2lout }
+will think it ends after the second {@Code "}"}, and so format the rest
+of it wrongly. Secondly, and more seriously,
+@ID @Code "s{abc}<ABC>"
+is also allowed in Perl, but @Code { prg2lout } does not understand that
+the finishing character can change in this way, so in this example it will
+keep scanning forever, looking for the second @Code "}" character, which is
+disastrous.
+}
+
+@EndList
+Further work may eliminate some of these problems.
+@PP
+The Pod language is used by Perl programmers for creating documentation,
+and may be found within Perl programs or standing alone. Lout supports
+both arrangements without any special action by the user. At the
+beginning of the @Code perl setup line, the following line has been placed:
+@ID @Code "@SysInclude { pod }"
+Thus, asking for Perl always gives you Pod as well. If you are using
+your own setup files for both languages, it is probably better to
+break this connection by deleting this line from your copy of the
+@Code perl setup file and placing
+@ID @Code {
+"@Include { mypod }"
+"@Include { myperl }"
+}
+at the start of your document in the usual way.
+@PP
+Because Pod is a documentation language rather than a programming
+language, the setup file options listed in Section {@NumberOf cpsetup}
+do not really apply. So for Pod only these have been discarded and replaced
+by a completely different set of options, controlling such things as
+the size of headings and the gaps between list items, which you can
+find documented in the @Code { pod } setup file.
+@End @Section
diff --git a/doc/user/cpp_pipe b/doc/user/prg_pipe
index afbb87e..afbb87e 100644
--- a/doc/user/cpp_pipe
+++ b/doc/user/prg_pipe
diff --git a/doc/user/cpp_prog b/doc/user/prg_prog
index a049e3d..8d343f6 100644
--- a/doc/user/cpp_prog
+++ b/doc/user/prg_prog
@@ -7,7 +7,7 @@ The standard reference for the Eiffel language @Cite { $meyer1992eiffel }
specifies that identifiers within comments may or should be enclosed
in ` and ' so that they may be noticed and printed in an italic
font:
-@ID lines @Break @F @Verbatim {
+@ID @Code @Verbatim {
@ID @Eiffel {
deposit(amount: REAL) is
-- deposit `amount' dollars
diff --git a/doc/user/cpp_tabs b/doc/user/prg_tabs
index 3a04bfa..3a04bfa 100644
--- a/doc/user/cpp_tabs
+++ b/doc/user/prg_tabs
diff --git a/doc/user/user.ps b/doc/user/user.ps
new file mode 100644
index 0000000..203f7e3
--- /dev/null
+++ b/doc/user/user.ps
@@ -0,0 +1,5202 @@
+%!PS-Adobe-3.0
+%%Creator: Basser Lout Version 3.19 (March 2000)
+%%CreationDate: Mon Apr 3 16:16:36 2000
+%%DocumentData: Binary
+%%DocumentNeededResources: (atend)
+%%DocumentSuppliedResources: (atend)
+%%DocumentMedia: A4 595 842 0 white ()
+%%PageOrder: Ascend
+%%Pages: (atend)
+%%BoundingBox: 0 0 595 842
+%%EndComments
+
+%%BeginProlog
+%%BeginResource: procset LoutStartUp
+/m { 3 1 roll moveto show } bind def
+/mo { 3 1 roll moveto true charpath stroke } bind def
+/s { exch currentpoint exch pop moveto show } bind def
+/so { exch currentpoint exch pop moveto true charpath stroke } bind def
+/k { exch neg 0 rmoveto show } bind def
+/ko { exch neg 0 rmoveto true charpath stroke } bind def
+/ul { gsave setlinewidth dup 3 1 roll
+ moveto lineto stroke grestore } bind def
+/in { 1440 mul } def
+/cm { 567 mul } def
+/pt { 20 mul } def
+/em { 120 mul } def
+/sp { louts mul } def
+/vs { loutv mul } def
+/ft { loutf mul } def
+/dg { } def
+
+/LoutGraphic {
+ /louts exch def
+ /loutv exch def
+ /loutf exch def
+ /ymark exch def
+ /xmark exch def
+ /ysize exch def
+ /xsize exch def
+} def
+
+/LoutGr2 { gsave translate LoutGraphic gsave } def
+
+/LoutFont
+{ findfont exch scalefont setfont
+} bind def
+
+/LoutRecode {
+ { findfont dup length dict begin
+ {1 index /FID ne {def} {pop pop} ifelse} forall
+ /Encoding exch def
+ currentdict end definefont pop
+ }
+ stopped pop
+} bind def
+
+/BeginEPSF {
+ /LoutEPSFState save def
+ /dict_count countdictstack def
+ /op_count count 1 sub def
+ userdict begin
+ /showpage { } def
+ 0 setgray 0 setlinecap
+ 1 setlinewidth 0 setlinejoin
+ 10 setmiterlimit [] 0 setdash newpath
+ /languagelevel where
+ { pop languagelevel
+ 1 ne
+ { false setstrokeadjust false setoverprint
+ } if
+ } if
+} bind def
+
+/EndEPSF {
+ count op_count sub { pop } repeat
+ countdictstack dict_count sub { end } repeat
+ LoutEPSFState restore
+} bind def
+%%EndResource
+
+%%BeginResource: encoding vec2
+/vec2 [
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+/space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quoteright
+/parenleft /parenright /asterisk /plus /comma /hyphen /period /slash
+/zero /one /two /three /four /five /six /seven
+/eight /nine /colon /semicolon /less /equal /greater /question
+/at /A /B /C /D /E /F /G
+/H /I /J /K /L /M /N /O
+/P /Q /R /S /T /U /V /W
+/X /Y /Z /bracketleft /backslash /bracketright /asciicircum /underscore
+/quoteleft /a /b /c /d /e /f /g
+/h /i /j /k /l /m /n /o
+/p /q /r /s /t /u /v /w
+/x /y /z /braceleft /bar /braceright /asciitilde /.notdef
+/quotesinglbase /quotedblbase /ellipsis /OE /oe /quotedblleft /quotedblright /fi
+/fl /endash /emdash /bullet /dagger /daggerdbl /florin /fraction
+/dotlessi /grave /acute /circumflex /tilde /macron /breve /dotaccent
+/dieresis /.notdef /ring /cedilla /.notdef /hungarumlaut /ogonek /caron
+/space /exclamdown /cent /sterling /currency /yen /brokenbar /section
+/dieresis /copyright /ordfeminine /guillemotleft /logicalnot /hyphen /registered /macron
+/degree /plusminus /twosuperior /threesuperior /acute /mu /paragraph /periodcentered
+/cedilla /onesuperior /ordmasculine /guillemotright /onequarter /onehalf /threequarters /questiondown
+/Agrave /Aacute /Acircumflex /Atilde /Adieresis /Aring /AE /Ccedilla
+/Egrave /Eacute /Ecircumflex /Edieresis /Igrave /Iacute /Icircumflex /Idieresis
+/Eth /Ntilde /Ograve /Oacute /Ocircumflex /Otilde /Odieresis /multiply
+/Oslash /Ugrave /Uacute /Ucircumflex /Udieresis /Yacute /Thorn /germandbls
+/agrave /aacute /acircumflex /atilde /adieresis /aring /ae /ccedilla
+/egrave /eacute /ecircumflex /edieresis /igrave /iacute /icircumflex /idieresis
+/eth /ntilde /ograve /oacute /ocircumflex /otilde /odieresis /divide
+/oslash /ugrave /uacute /ucircumflex /udieresis /yacute /thorn /ydieresis
+] def
+%%EndResource
+
+%%BeginResource: procset LoutTabPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/tabf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Tab %
+% %
+% To assist in avoiding name clashes, the names %
+% of all these symbols begin with "ltab". %
+% %
+% Jeffrey H. Kingston %
+% 24 September 1991 %
+% 22 December 1992 %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% linewidth ltabhs -
+% horizontal single line
+/ltabhs
+{ 0 0 moveto xsize 0 lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhsp -
+% horizontal single line with projecting ends
+/ltabhsp
+{ 0 0 moveto xsize 0 lineto
+ setlinewidth 2 setlinecap stroke
+} def
+
+% linewidth ltabhd -
+% horizontal double line
+/ltabhd
+{ dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch 3 mul moveto xsize exch 3 mul lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhdb -
+% horizontal double line below mark
+/ltabhdb
+{ dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch -3 mul moveto xsize exch -3 mul lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabhdnw -
+% horizontal double line with northwest corner
+/ltabhdnw
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ xsize exch 3 mul moveto
+ -3 mul exch 3 mul lineto
+ -3 mul 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdne -
+% horizontal double line with northeast corner
+/ltabhdne
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch 3 mul moveto
+ 3 mul xsize add exch 3 mul lineto
+ 3 mul xsize add 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdsw -
+% horizontal double line with southwest corner
+/ltabhdsw
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ xsize exch -3 mul moveto
+ -3 mul exch -3 mul lineto
+ -3 mul 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabhdse -
+% horizontal double line with southeast corner
+/ltabhdse
+{ dup dup dup dup
+ 0 0 moveto xsize 0 lineto
+ 0 exch -3 mul moveto
+ 3 mul xsize add exch -3 mul lineto
+ 3 mul xsize add 0 lineto
+ setlinewidth 0 setlinejoin 2 setlinecap stroke
+} def
+
+% linewidth ltabvs -
+% vertical single line
+/ltabvs
+{ 0 0 moveto 0 ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabvd -
+% vertical double line
+/ltabvd
+{ dup dup
+ 0 0 moveto 0 ysize lineto
+ -3 mul 0 moveto -3 mul ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+
+% linewidth ltabvdr -
+% vertical double line to right of mark
+/ltabvdr
+{ dup dup
+ 0 0 moveto 0 ysize lineto
+ 3 mul 0 moveto 3 mul ysize lineto
+ setlinewidth 0 setlinecap stroke
+} def
+%%EndResource
+
+%%BeginResource: procset LoutTblPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/tblf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Tbl Jeffrey H. Kingston %
+% Version 1.0 June 1998 %
+% %
+% To assist in avoiding name clashes, the names of all symbols %
+% defined here begin with "ltbl". %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% painting (i.e. filling): - ltblwhite - (etc.)
+/ltblnopaint { } def
+/ltblnochange { fill } def
+/ltbldarkblue { 0.0 0.0 0.5 setrgbcolor fill } def
+/ltblblue { 0.0 0.0 1.0 setrgbcolor fill } def
+/ltbllightblue { 0.5 0.5 1.0 setrgbcolor fill } def
+/ltbldarkgreen { 0.0 0.5 0.0 setrgbcolor fill } def
+/ltblgreen { 0.0 1.0 0.0 setrgbcolor fill } def
+/ltbllightgreen { 0.5 1.0 0.5 setrgbcolor fill } def
+/ltbldarkred { 0.5 0.0 0.0 setrgbcolor fill } def
+/ltblred { 1.0 0.0 0.0 setrgbcolor fill } def
+/ltbllightred { 1.0 0.5 0.5 setrgbcolor fill } def
+/ltbldarkcyan { 0.0 0.5 0.5 setrgbcolor fill } def
+/ltblcyan { 0.0 1.0 1.0 setrgbcolor fill } def
+/ltbllightcyan { 0.5 1.0 1.0 setrgbcolor fill } def
+/ltbldarkmagenta { 0.5 0.0 0.5 setrgbcolor fill } def
+/ltblmagenta { 1.0 0.0 1.0 setrgbcolor fill } def
+/ltbllightmagenta { 1.0 0.5 1.0 setrgbcolor fill } def
+/ltbldarkyellow { 0.5 0.5 0.0 setrgbcolor fill } def
+/ltblyellow { 1.0 1.0 0.0 setrgbcolor fill } def
+/ltbllightyellow { 1.0 1.0 0.5 setrgbcolor fill } def
+/ltbldarkgray { 0.2 0.2 0.2 setrgbcolor fill } def
+/ltblgray { 0.5 0.5 0.5 setrgbcolor fill } def
+/ltbllightgray { 0.8 0.8 0.8 setrgbcolor fill } def
+/ltbldarkgrey { 0.2 0.2 0.2 setrgbcolor fill } def
+/ltblgrey { 0.5 0.5 0.5 setrgbcolor fill } def
+/ltbllightgrey { 0.8 0.8 0.8 setrgbcolor fill } def
+/ltblblack { 0.0 0.0 0.0 setrgbcolor fill } def
+/ltblwhite { 1.0 1.0 1.0 setrgbcolor fill } def
+%%EndResource
+
+%%BeginResource: procset LoutFigPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/figf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Fig Jeffrey H. Kingston %
+% Version 2.0 (includes CIRCUM label) January 1992 %
+% %
+% To assist in avoiding name clashes, the names of all symbols %
+% defined here begin with "lfig". However, this is not feasible %
+% with user-defined labels and some labels used by users. %
+% %
+% <point> is two numbers, a point. %
+% <length> is one number, a length %
+% <angle> is one number, an angle in degrees %
+% <dashlength> is one number, the preferred length of a dash %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+errordict begin
+ /handleerror
+ {
+ { /Times-Roman findfont 8 pt scalefont setfont
+ 0 setgray 4 pt 4 pt moveto
+ $error /errorname get
+ dup lfigdict exch known
+ { lfigdict exch get }
+ { 30 string cvs } ifelse
+ show
+ ( Command: ) show
+ $error /command get 30 string cvs show
+ } stopped {} if
+ showpage stop
+ } def
+end
+
+% concat strings: <string> <string> lfigconcat <string>
+% must be defined outside lfigdict since used in lfigpromotelabels
+/lfigconcat
+{ 2 copy length exch length add string
+ dup 0 4 index putinterval
+ dup 3 index length 3 index putinterval
+ 3 1 roll pop pop
+} def
+
+% <string> lfigdebugprint -
+% must be defined outside lfigdict since used in arbitrary places
+% /lfigdebugprint
+% { print
+% (; operand stack:\n) print
+% count copy
+% count 2 idiv
+% { ==
+% (\n) print
+% } repeat
+% (\n) print
+% } def
+
+/lfigdict 120 dict def
+lfigdict begin
+
+% error messages
+/dictfull (dictfull error: too many labels?) def
+/dictstackoverflow (dictstackoverflow error: labels nested too deeply?) def
+/execstackoverflow (execstackoverflow error: figure nested too deeply?) def
+/limitcheck (limitcheck error: figure nested too deeply or too large?) def
+/syntaxerror (syntaxerror error: syntax error in text of figure?) def
+/typecheck (typecheck error: syntax error in text of figure?) def
+/undefined (undefined error: unknown or misspelt label?) def
+/VMError (VMError error: run out of memory?) def
+
+% push pi onto stack: - lfigpi <num>
+/lfigpi 3.14159 def
+
+% arc directions
+/clockwise false def
+/anticlockwise true def
+
+% maximum of two numbers: <num> <num> lfigmax <num>
+/lfigmax { 2 copy gt { pop } { exch pop } ifelse } def
+
+% minimum of two numbers: <num> <num> lfigmin <num>
+/lfigmin { 2 copy lt { pop } { exch pop } ifelse } def
+
+% add two points: <point> <point> lfigpadd <point>
+/lfigpadd { exch 3 1 roll add 3 1 roll add exch } def
+
+% subtract first point from second: <point> <point> lfigpsub <point>
+/lfigpsub { 3 2 roll sub 3 1 roll exch sub exch } def
+
+% max two points: <point> <point> lfigpmax <point>
+/lfigpmax { exch 3 1 roll lfigmax 3 1 roll lfigmax exch } def
+
+% min two points: <point> <point> lfigpmin <point>
+/lfigpmin { exch 3 1 roll lfigmin 3 1 roll lfigmin exch } def
+
+% scalar multiplication: <point> <num> lfigpmul <point>
+/lfigpmul { dup 3 1 roll mul 3 1 roll mul exch } def
+
+% point at angle and distance: <point> <length> <angle> lfigatangle <point>
+/lfigatangle { 2 copy cos mul 3 1 roll sin mul lfigpadd } def
+
+% angle from one point to another: <point> <point> lfigangle <angle>
+/lfigangle { lfigpsub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+
+% distance between two points: <point> <point> lfigdistance <length>
+/lfigdistance { lfigpsub dup mul exch dup mul add sqrt } def
+
+% difference in x coords: <point> <point> lfigxdistance <length>
+/lfigxdistance { pop 3 1 roll pop sub } def
+
+%difference in y coords: <point> <point> lfigydistance <length>
+/lfigydistance { 3 1 roll pop sub exch pop } def
+
+% stroke a solid line: <length> <dashlength> lfigsolid -
+/lfigsolid
+{ pop pop [] 0 setdash stroke
+} def
+
+% stroke a lfigdashed line: <length> <dashlength> lfigdashed -
+/lfigdashed
+{ 2 copy div 2 le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch dup ] 0 setdash }
+ { dup [ exch 4 2 roll 2 copy div
+ 1 sub 2 div ceiling dup 4 1 roll
+ 1 add mul sub exch div ] 0 setdash
+ } ifelse stroke
+} def
+
+% stroke a lfigcdashed line: <length> <dashlength> lfigcdashed -
+/lfigcdashed
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch dup ] dup 0 get 2 div setdash }
+ { dup [ 4 2 roll exch 2 copy exch div
+ 2 div ceiling div 1 index sub
+ ] exch 2 div setdash
+ } ifelse stroke
+} def
+
+% stroke a dotted line: <length> <dashlength> lfigdotted -
+/lfigdotted
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt lfigmax [ exch 0 exch ] 0 setdash }
+ { 1 index exch div ceiling div
+ [ 0 3 2 roll ] 0 setdash
+ } ifelse stroke
+} def
+
+% stroke a noline line: <length> <dashlength> lfignoline -
+/lfignoline
+{ pop pop
+} def
+
+% painting (i.e. filling): - lfigwhite - (etc.)
+/lfignopaint { } def
+/lfignochange { fill } def
+/lfigdarkblue { 0.0 0.0 0.5 setrgbcolor fill } def
+/lfigblue { 0.0 0.0 1.0 setrgbcolor fill } def
+/lfiglightblue { 0.5 0.5 1.0 setrgbcolor fill } def
+/lfigdarkgreen { 0.0 0.5 0.0 setrgbcolor fill } def
+/lfiggreen { 0.0 1.0 0.0 setrgbcolor fill } def
+/lfiglightgreen { 0.5 1.0 0.5 setrgbcolor fill } def
+/lfigdarkred { 0.5 0.0 0.0 setrgbcolor fill } def
+/lfigred { 1.0 0.0 0.0 setrgbcolor fill } def
+/lfiglightred { 1.0 0.5 0.5 setrgbcolor fill } def
+/lfigdarkcyan { 0.0 0.5 0.5 setrgbcolor fill } def
+/lfigcyan { 0.0 1.0 1.0 setrgbcolor fill } def
+/lfiglightcyan { 0.5 1.0 1.0 setrgbcolor fill } def
+/lfigdarkmagenta { 0.5 0.0 0.5 setrgbcolor fill } def
+/lfigmagenta { 1.0 0.0 1.0 setrgbcolor fill } def
+/lfiglightmagenta { 1.0 0.5 1.0 setrgbcolor fill } def
+/lfigdarkyellow { 0.5 0.5 0.0 setrgbcolor fill } def
+/lfigyellow { 1.0 1.0 0.0 setrgbcolor fill } def
+/lfiglightyellow { 1.0 1.0 0.5 setrgbcolor fill } def
+/lfigdarkgray { 0.2 0.2 0.2 setrgbcolor fill } def
+/lfiggray { 0.5 0.5 0.5 setrgbcolor fill } def
+/lfiglightgray { 0.8 0.8 0.8 setrgbcolor fill } def
+/lfigdarkgrey { 0.2 0.2 0.2 setrgbcolor fill } def
+/lfiggrey { 0.5 0.5 0.5 setrgbcolor fill } def
+/lfiglightgrey { 0.8 0.8 0.8 setrgbcolor fill } def
+/lfigblack { 0.0 0.0 0.0 setrgbcolor fill } def
+/lfigwhite { 1.0 1.0 1.0 setrgbcolor fill } def
+
+% line caps (and joins, not currently used)
+/lfigbutt 0 def
+/lfiground 1 def
+/lfigprojecting 2 def
+/lfigmiter 0 def
+/lfigbevel 2 def
+
+% shape and labels of the @Box symbol
+/lfigbox
+{
+ 0 0 /SW lfigpointdef
+ xsize 0 /SE lfigpointdef
+ xsize ysize /NE lfigpointdef
+ 0 ysize /NW lfigpointdef
+ SE 0.5 lfigpmul /S lfigpointdef
+ NW 0.5 lfigpmul /W lfigpointdef
+ W SE lfigpadd /E lfigpointdef
+ S NW lfigpadd /N lfigpointdef
+ NE 0.5 lfigpmul /CTR lfigpointdef
+ [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @CurveBox symbol
+/lfigcurvebox
+{
+
+ xsize 0.5 mul ysize 0.5 mul /CTR lfigpointdef
+ xsize 0.5 mul 0 /S lfigpointdef
+ xsize ysize 0.5 mul /E lfigpointdef
+ xsize 0.5 mul ysize /N lfigpointdef
+ 0 ysize 0.5 mul /W lfigpointdef
+
+ xmark 0.293 mul xmark 0.293 mul /SW lfigpointdef
+ xsize xmark 0.293 mul sub xmark 0.293 mul /SE lfigpointdef
+ xsize xmark 0.293 mul sub ysize xmark 0.293 mul sub /NE lfigpointdef
+ xmark 0.293 mul ysize xmark 0.293 mul sub /NW lfigpointdef
+
+ [ xsize ysize 0.5 lfigpmul xmark /lfigcurveboxcircum cvx ] lfigcircumdef
+
+ xmark 0
+ xsize xmark sub 0
+ [ xsize xmark sub xmark ]
+ xsize xmark
+ xsize ysize xmark sub
+ [ xsize xmark sub ysize xmark sub ]
+ xsize xmark sub ysize
+ xmark ysize
+ [ xmark ysize xmark sub ]
+ 0 ysize xmark sub
+ 0 xmark
+ [ xmark xmark ]
+ xmark 0
+} def
+
+% shadow of the @ShadowBox symbol
+% its shape and labels are done, somewhat inaccurately, with lfigbox
+/lfigshadow
+{ xmark 2 mul 0 moveto xsize 0 lineto
+ xsize ysize xmark 2 mul sub lineto
+ xsize xmark sub ysize xmark 2 mul sub lineto
+ xsize xmark sub xmark lineto
+ xmark 2 mul xmark lineto closepath fill
+} def
+
+% shape and labels of the @Square symbol
+/lfigsquare
+{
+ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ CTR xsize xsize ysize ysize lfigpmax 0.5 lfigpmul lfigpadd /NE lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+ CTR 0 0 CTR NE lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+ SW 0.5 lfigpmul SE 0.5 lfigpmul lfigpadd /S lfigpointdef
+ NW 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /N lfigpointdef
+ SW 0.5 lfigpmul NW 0.5 lfigpmul lfigpadd /W lfigpointdef
+ SE 0.5 lfigpmul NE 0.5 lfigpmul lfigpadd /E lfigpointdef
+ [ CTR NE lfigpsub /lfigboxcircum cvx ] lfigcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @Diamond symbol
+/lfigdiamond
+{
+ xsize 0 0.5 lfigpmul /S lfigpointdef
+ 0 ysize 0.5 lfigpmul /W lfigpointdef
+ S W lfigpadd /CTR lfigpointdef
+ CTR W lfigpadd /N lfigpointdef
+ CTR S lfigpadd /E lfigpointdef
+ [ xsize ysize 0.5 lfigpmul /lfigdiamondcircum cvx ] lfigcircumdef
+ S E N W S
+} def
+
+% shape and labels of the @Ellipse symbol
+/lfigellipse
+{
+ xsize 0 0.5 lfigpmul /S lfigpointdef
+ 0 ysize 0.5 lfigpmul /W lfigpointdef
+ S W lfigpadd /CTR lfigpointdef
+ CTR W lfigpadd /N lfigpointdef
+ CTR S lfigpadd /E lfigpointdef
+ CTR xsize 0 0.3536 lfigpmul lfigpadd 0 ysize 0.3536 lfigpmul lfigpadd /NE lfigpointdef
+ 0 ysize 0.3536 lfigpmul CTR xsize 0 0.3536 lfigpmul lfigpadd lfigpsub /SE lfigpointdef
+ xsize 0 0.3536 lfigpmul CTR lfigpsub 0 ysize 0.3536 lfigpmul lfigpadd /NW lfigpointdef
+ 0 ysize 0.3536 lfigpmul xsize 0 0.3536 lfigpmul CTR lfigpsub lfigpsub /SW lfigpointdef
+ [ xsize ysize 0.5 lfigpmul /lfigellipsecircum cvx ] lfigcircumdef
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @Circle symbol
+/lfigcircle
+{
+ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ CTR xsize 0 ysize 0 lfigpmax 0.5 lfigpmul lfigpadd /E lfigpointdef
+ CTR 0 0 CTR E lfigdistance 45 lfigatangle lfigpadd /NE lfigpointdef
+ CTR 0 0 CTR E lfigdistance 90 lfigatangle lfigpadd /N lfigpointdef
+ CTR 0 0 CTR E lfigdistance 135 lfigatangle lfigpadd /NW lfigpointdef
+ CTR 0 0 CTR E lfigdistance 180 lfigatangle lfigpadd /W lfigpointdef
+ CTR 0 0 CTR E lfigdistance 225 lfigatangle lfigpadd /SW lfigpointdef
+ CTR 0 0 CTR E lfigdistance 270 lfigatangle lfigpadd /S lfigpointdef
+ CTR 0 0 CTR E lfigdistance 315 lfigatangle lfigpadd /SE lfigpointdef
+ [ S E lfigpsub /lfigellipsecircum cvx ] lfigcircumdef
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @HLine and @HArrow symbols
+/lfighline
+{
+ 0 ymark lfigprevious /FROM lfigpointdef
+ xsize ymark lfigprevious /TO lfigpointdef
+} def
+
+% shape and labels of the @VLine and @VArrow symbols
+/lfigvline
+{
+ xmark ysize lfigprevious /FROM lfigpointdef
+ xmark 0 lfigprevious /TO lfigpointdef
+} def
+
+% points of a polygon around base with given no of sides, vert init angle:
+% <sides> <angle> figpolygon <point> ... <point>
+/lfigpolygon
+{ xsize ysize 0.5 lfigpmul /CTR lfigpointdef
+ 90 sub CTR 2 copy lfigmax 5 3 roll
+ [ 4 copy pop /lfigpolycircum cvx ] lfigcircumdef
+ exch dup 360 exch div exch
+ 1 1 3 2 roll
+ { 4 string cvs (P) exch lfigconcat cvn
+ 6 copy pop pop lfigatangle 2 copy 10 2 roll
+ 3 2 roll lfigpointdef
+ dup 3 1 roll add exch
+ } for
+ pop lfigatangle
+} def
+
+% next array element: <array> <index> lfiggetnext <array> <index> <any> true
+% or <array> <index> false
+/lfiggetnext
+{ 2 copy exch length ge
+ { false }
+ { 2 copy get exch 1 add exch true } ifelse
+} def
+
+% check whether thing is number: <any> lfigisnumbertype <any> <bool>
+/lfigisnumbertype
+{ dup type dup
+ /integertype eq exch /realtype eq or
+} def
+
+% check whether thing is an array: <any> lfigisarraytype <any> <bool>
+/lfigisarraytype { dup type /arraytype eq } def
+
+% get next item: <array> <index> lfiggetnextitem <array> <index> 0
+% or <array> <index> <array> 1
+% or <array> <index> <point> 2
+/lfiggetnextitem
+{ lfiggetnext
+ { lfigisarraytype
+ { 1
+ }
+ { lfigisnumbertype
+ { 3 1 roll
+ lfiggetnext
+ { lfigisnumbertype
+ { 4 3 roll exch 2
+ }
+ { pop 3 2 roll pop 0
+ } ifelse
+ }
+ { 3 2 roll pop 0
+ } ifelse
+ }
+ { pop 0
+ } ifelse
+ } ifelse
+ }
+ { 0
+ } ifelse
+} def
+
+% set arc path: bool x1 y1 x2 y2 x0 y0 lfigsetarc <angle> <angle> <dist>
+% the path goes from x1 y1 to x2 y2 about centre x0 y0,
+% anticlockwise if bool is true else clockwise.
+% The orientations of backwards pointing and forwards pointing
+% arrowheads are returned in the two angles, and
+% the length of the arc is returned in <dist>.
+/lfigsetarc
+{
+ 20 dict begin
+ matrix currentmatrix 8 1 roll
+ 2 copy translate 2 copy 8 2 roll
+ 4 2 roll lfigpsub 6 2 roll lfigpsub
+ dup /y1 exch def dup mul /y1s exch def
+ dup /x1 exch def dup mul /x1s exch def
+ dup /y2 exch def dup mul /y2s exch def
+ dup /x2 exch def dup mul /x2s exch def
+
+ y1s y2s eq
+ { -1
+ }
+ { y1s x2s mul y2s x1s mul sub y1s y2s sub div
+ } ifelse
+ /da exch def
+
+ x1s x2s eq
+ { -1
+ }
+ { x1s y2s mul x2s y1s mul sub x1s x2s sub div
+ } ifelse
+ /db exch def
+
+ da 0 gt db 0 gt and
+ { /LMax da sqrt db sqrt lfigmax def
+ /scalex da sqrt LMax div def
+ /scaley db sqrt LMax div def
+ scalex scaley scale
+ 0 0 LMax
+ 0 0 x1 scalex mul y1 scaley mul lfigangle
+ 0 0 x2 scalex mul y2 scaley mul lfigangle
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 5 2 roll % res1 res2 ang1 ang2 anticlockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if lfigpi mul LMax mul 180 div
+ }
+ { 0 0 x1 y1 lfigdistance 0 0 x2 y2 lfigdistance eq
+ 0 0 x1 y1 lfigdistance 0 gt and
+ { 0 0
+ 0 0 x1 y1 lfigdistance
+ 0 0 x1 y1 lfigangle
+ 0 0 x2 y2 lfigangle
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ 5 2 roll % res1 res2 ang1 ang2 clockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if lfigpi mul 0 0 x1 y1 lfigdistance mul 180 div
+ }
+ { x2 y2 lineto pop
+ x2 y2 x1 y1 lfigangle
+ x1 y1 x2 y2 lfigangle
+ x1 y1 x2 y2 lfigdistance
+ } ifelse
+ } ifelse
+ 4 -1 roll setmatrix
+ end
+} def
+
+% lfigsetcurve: set up a Bezier curve from x0 y0 to x3 y3
+% and return arrowhead angles and length of curve (actually 0)
+% x0 y0 x1 y1 x2 y2 x3 y3 lfigsetcurve <angle> <angle> <length>
+/lfigsetcurve
+{ 8 copy curveto pop pop
+ lfigangle
+ 5 1 roll
+ 4 2 roll lfigangle
+ exch
+ 0
+} def
+
+% lfigpaintpath: paint a path of the given shape
+% /paint [ shape ] lfigpaintpath -
+/lfigpaintpath
+{
+ 10 dict begin
+ 0 newpath
+ /prevseen false def
+ /curveseen false def
+ { lfiggetnextitem
+ dup 0 eq { pop exit }
+ { 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /curveseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr
+ lfigsetcurve pop pop pop
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ lfigsetarc pop pop pop
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ } ifelse
+ }
+ { xcurr ycurr moveto
+ } ifelse
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop pop pop cvx exec
+ end
+} def
+
+% stroke a path of the given shape in the given linestyle and dash length.
+% Return the origin and angle of the backward and forward arrow heads.
+% dashlength /linestyle [shape] lfigdopath [<point> <angle>] [<point> <angle>]
+/lfigdopath
+{
+ 10 dict begin
+ 0
+ /prevseen false def
+ /curveseen false def
+ /backarrow [] def
+ /fwdarrow [] def
+ {
+ lfiggetnextitem
+ dup 0 eq { pop exit }
+ {
+ 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /prevseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { newpath xprev yprev moveto
+ curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr lfigsetcurve
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ lfigsetarc
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ xcurr ycurr xprev yprev lfigangle dup 180 sub
+ xprev yprev xcurr ycurr lfigdistance
+ } ifelse
+ 6 index 6 index cvx exec
+ [ xprev yprev 5 -1 roll ]
+ backarrow length 0 eq
+ { /backarrow exch def }
+ { pop } ifelse
+ [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def
+ } if
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop
+ pop pop pop pop
+ backarrow length 0 eq { [ 0 0 0 ] } { backarrow } ifelse
+ fwdarrow length 0 eq { [ 0 0 0 ] } { fwdarrow } ifelse
+ end
+} def
+
+% lfigdoarrow: draw an arrow head of given form
+% dashlength /lstyle /pstyle hfrac height width [ <point> <angle> ] lfigdoarrow -
+/lfigdoarrow
+{ matrix currentmatrix 8 1 roll
+ dup 0 get 1 index 1 get translate
+ 2 get rotate
+ [ 2 index neg 2 index 0 0
+ 3 index 3 index neg
+ 1 index 10 index mul 0
+ 7 index 7 index ]
+ 4 1 roll pop pop pop
+ dup 3 1 roll
+ gsave lfigpaintpath grestore lfigdopath pop pop
+ setmatrix
+} def
+
+% arrow head styles
+/lfigopen 0.0 def
+/lfighalfopen 0.5 def
+/lfigclosed 1.0 def
+
+% stroke no arrows, forward, back, and both
+/lfignoarrow { pop pop pop pop pop pop pop pop } def
+/lfigforward { 7 -1 roll lfigdoarrow pop } def
+/lfigback { 8 -2 roll pop lfigdoarrow } def
+/lfigboth { 8 -1 roll 7 copy lfigdoarrow pop 7 -1 roll lfigdoarrow } def
+
+% lfigprevious: return previous point on path
+/lfigprevious
+{ lfigisnumbertype
+ { 2 copy }
+ { lfigisarraytype
+ { 2 index 2 index }
+ { 0 0 }
+ ifelse
+ } ifelse
+} def
+
+% label a point in 2nd top dictionary: <point> /name lfigpointdef -
+/lfigpointdef
+{
+ % (Entering lfigpointdef) lfigdebugprint
+ [ 4 2 roll transform
+ /itransform cvx ] cvx
+ currentdict end
+ 3 1 roll
+ % currentdict length currentdict maxlength lt
+ % { def }
+ % { exec moveto (too many labels) show stop }
+ % ifelse
+ def
+ begin
+ % (Leaving lfigpointdef) lfigdebugprint
+} def
+
+% promote labels from second top to third top dictionary
+% <string> lfigpromotelabels -
+/lfigpromotelabels
+{
+ % (Entering lfigpromotelabels) lfigdebugprint
+ currentdict end exch currentdict end
+ { exch 20 string cvs 2 index
+ (@) lfigconcat exch lfigconcat cvn exch def
+ } forall pop begin
+ % (Leaving lfigpromotelabels) lfigdebugprint
+} def
+
+% show labels (except CIRCUM): - lfigshowlabels -
+/lfigshowlabels
+{
+ % (Entering lfigshowlabels) lfigdebugprint
+ currentdict end
+ currentdict
+ { 1 index 20 string cvs (CIRCUM) search % if CIRCUM in key
+ { pop pop pop pop pop }
+ { pop cvx exec 2 copy
+ newpath 1.5 pt 0 360 arc
+ 0 setgray fill
+ /Times-Roman findfont 8 pt scalefont setfont
+ moveto 0.2 cm 0.1 cm rmoveto 20 string cvs show
+ }
+ ifelse
+ } forall
+ begin
+ % (Leaving lfigshowlabels) lfigdebugprint
+} def
+
+% fix an angle to 0 <= res < 360: <angle> lfigfixangle <angle>
+/lfigfixangle
+{
+ % (Entering lfigfixangle) lfigdebugprint
+ { dup 0 ge { exit } if
+ 360 add
+ } loop
+ { dup 360 lt { exit } if
+ 360 sub
+ } loop
+ % (Leaving lfigfixangle) lfigdebugprint
+} def
+
+% find point on circumference of box: alpha a b lfigboxcircum x y
+/lfigboxcircum
+{
+ % (Entering lfigboxcircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ 0 0 a b lfigangle /theta exch def
+
+ % if alpha <= theta, return (a, a*tan(alpha))
+ alpha theta le
+ { a a alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 180 - theta, return (b*cot(alpha), b)
+ alpha 180 theta sub le
+ { b alpha cos mul alpha sin div b }
+ {
+ % else if alpha <= 180 + theta, return (-a, -a*tan(alpha))
+ alpha 180 theta add le
+ { a neg a neg alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 360 - theta, return (-b*cot(alpha), -b)
+ alpha 360 theta sub le
+ { b neg alpha cos mul alpha sin div b neg }
+ {
+ % else 360 - theta <= alpha, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigboxcircum) lfigdebugprint
+} def
+
+% find quadratic roots (assume a != 0): a b c lfigqroots x1 x2 2
+% or x2 1
+% or 0
+/lfigqroots
+{
+ 4 dict begin
+ /c exch def
+ /b exch def
+ /a exch def
+ /disc b b mul 4 a c mul mul sub def
+ disc 0 lt
+ { 0
+ }
+ { disc 0 eq
+ { b neg 2 a mul div
+ 1
+ }
+ { b neg disc sqrt add 2 a mul div
+ b neg disc sqrt sub 2 a mul div
+ 2
+ }
+ ifelse
+ }
+ ifelse
+ end
+} def
+
+% work our which quadrant: <angle> lfigquadrant <0-3>
+/lfigquadrant
+{ dup 90 lt
+ { pop 0
+ }
+ { dup 180 lt
+ { pop 1
+ }
+ { 270 lt
+ { 2
+ }
+ { 3
+ } ifelse
+ } ifelse
+ } ifelse
+} def
+
+% find curvebox circum, assuming upper right quadrant: alpha a b xmk lfigcb x y
+/lfigcb
+{
+ 6 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ /alpha exch def
+ /theta1 0 0 a b xmk sub lfigangle def
+ /theta2 0 0 a xmk sub b lfigangle def
+ alpha theta1 le
+ { % if alpha <= theta1, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ }
+ { alpha theta2 ge
+ { % else if alpha > theta2, return (b*cot(alpha), b)
+ b alpha cos mul alpha sin div b
+ }
+ {
+ % else, return the intersection of line and circle
+ a xmk sub b xmk sub xmk 0 0 alpha lfigcircleintersect
+ dup 0 eq
+ { % should never happen, just return any reasonable point
+ pop
+ a b 0.5 lfigpmul
+ }
+ { 1 eq
+ { % should never happen, just return the point on top of stack
+ }
+ { % the usual case, two points on stack, return the larger
+ lfigpmax
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+} def
+
+% find point on circumference of curvebox: alpha a b xmk lfigcurveboxcircum x y
+/lfigcurveboxcircum
+{
+ % (Entering lfigcurveboxcircum) lfigdebugprint
+ 5 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+
+ % work out which quadrant we are in, and reflect accordingly
+ /quad alpha lfigquadrant def
+ quad 0 eq
+ { alpha a b xmk lfigcb
+ }
+ { quad 1 eq
+ { 180 alpha sub a b xmk lfigcb exch neg exch
+ }
+ { quad 2 eq
+ { alpha 180 sub a b xmk lfigcb neg exch neg exch
+ }
+ { 360 alpha sub a b xmk lfigcb neg
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigcurveboxcircum) lfigdebugprint
+} def
+
+% find point on circumference of diamond: alpha a b lfigdiamondcircum x y
+/lfigdiamondcircum
+{
+ % (Entering lfigdiamondcircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ b alpha cos abs mul a alpha sin abs mul add /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving lfigdiamondcircum) lfigdebugprint
+} def
+
+% find point on circumference of ellipse: alpha a b lfigellipsecircum x y
+/lfigellipsecircum
+{
+ % (Entering lfigellipsecircum) lfigdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ lfigfixangle /alpha exch def
+ b alpha cos mul dup mul a alpha sin mul dup mul add sqrt /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving lfigellipsecircum) lfigdebugprint
+} def
+
+% find point of intersection of two lines each defined by two points
+% x1 y1 x2 y2 x3 y3 x4 y4 lfiglineintersect x y
+/lfiglineintersect
+{
+ % (Entering lfiglineintersect) lfigdebugprint
+ 13 dict begin
+ /y4 exch def
+ /x4 exch def
+ /y3 exch def
+ /x3 exch def
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ x2 x1 sub /x21 exch def
+ x4 x3 sub /x43 exch def
+ y2 y1 sub /y21 exch def
+ y4 y3 sub /y43 exch def
+ y21 x43 mul y43 x21 mul sub /det exch def
+
+ % calculate x
+ y21 x43 mul x1 mul
+ y43 x21 mul x3 mul sub
+ y3 y1 sub x21 mul x43 mul add
+ det div
+
+ % calculate y
+ x21 y43 mul y1 mul
+ x43 y21 mul y3 mul sub
+ x3 x1 sub y21 mul y43 mul add
+ det neg div
+
+ end
+ % (Leaving lfiglineintersect) lfigdebugprint
+} def
+
+% find point on circumference of polygon
+% alpha radius num theta lfigpolycircum x y
+/lfigpolycircum
+{
+ % (Entering lfigpolycircum) lfigdebugprint
+ 13 dict begin
+ /theta exch def
+ /num exch def
+ /radius exch def
+ /alpha exch def
+
+ % calculate delta, the angle from theta to alpha
+ alpha theta sub lfigfixangle
+
+ % calculate the angle which is the multiple of 360/num closest to delta
+ 360 num div div truncate 360 num div mul theta add /anglea exch def
+
+ % calculate the next multiple of 360/num after anglea
+ anglea 360 num div add /angleb exch def
+
+ % intersect the line through these two points with the alpha line
+ anglea cos anglea sin angleb cos angleb sin
+ 0 0 alpha cos 2 mul alpha sin 2 mul
+ lfiglineintersect radius lfigpmul
+
+ end
+ % (Leaving lfigpolycircum) lfigdebugprint
+} def
+
+% find point of intersection of a point and a circle
+% x0 y0 r x1 y1 theta lfigcircleintersect xa ya xb yb 2
+% or xb yb 1
+% or 0
+/lfigcircleintersect
+{
+ % (Entering lfigcircleintersect) lfigdebugprint
+ 15 dict begin
+ /theta exch def
+ /y1 exch def
+ /x1 exch def
+ /r exch def
+ /y0 exch def
+ /x0 exch def
+
+ % if sin(theta) = 0 then line is horizontal and y must be y1
+ theta sin abs 0.00001 lt
+ {
+ /a 1 def
+ /b -2 x0 mul def
+ /c x0 dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c lfigqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 1
+ }
+ { y1 exch y1 2
+ } ifelse
+ } ifelse
+ }
+ {
+ /ct theta cos theta sin div def
+ /a ct ct mul 1 add def
+ /b ct x1 x0 sub mul y1 add y0 sub 2 mul def
+ /c x1 x0 sub dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c lfigqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xb yb 1
+ }
+ { y1 add /ya exch def
+ ya y1 sub ct mul x1 add /xa exch def
+ y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xa ya xb yb 2
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving lfigcircleintersect) lfigdebugprint
+} def
+
+% add CIRCUM operator with this body: <array> lfigcircumdef -
+/lfigcircumdef
+{ % (Entering lfigcircumdef) lfigdebugprint
+ /CIRCUM exch cvx
+ currentdict end
+ 3 1 roll
+ % currentdict length currentdict maxlength lt
+ % { def }
+ % { exec moveto (too many labels) show stop }
+ % ifelse
+ def
+ begin
+ % (Leaving lfigcircumdef) lfigdebugprint
+} def
+
+end
+%%EndResource
+
+%%BeginResource: procset LoutGraphPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/graphf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Graph (Version 1.0) %
+% %
+% Version 1.0 by Jeffrey H. Kingston, December 1993. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+errordict begin
+ /handleerror
+ {
+ { /Times-Roman findfont 8 pt scalefont setfont
+ 0 setgray 4 pt 4 pt moveto
+ $error /errorname get
+ dup lgraphdict exch known
+ { lgraphdict exch get }
+ { 30 string cvs } ifelse
+ show
+ ( Command: ) show
+ $error /command get 30 string cvs show
+ } stopped {} if
+ showpage stop
+ } def
+end
+
+/lgraphdict 200 dict def
+lgraphdict begin
+
+% error messages
+/dictfull (dictfull error) def
+/dictstackoverflow (dictstackoverflow error) def
+/execstackoverflow (execstackoverflow error: expression too complex?) def
+/limitcheck (limitcheck error: graph too complex or too large?) def
+/syntaxerror (syntaxerror error: syntax error in text of graph?) def
+/typecheck (typecheck error: syntax error in text of graph?) def
+/undefined (undefined error: unknown or misspelt symbol?) def
+/rangecheck (rangecheck error: undefined expression (e.g. divide by zero)?) def
+/VMError (VMError error: run out of memory?) def
+
+% random number between x and y inclusive: x y dorand num
+/dorand { 1 index sub 1 add rand exch mod add } def
+
+% log to given base: base num dolog num
+/dolog { ln exch ln div } def
+
+% maximum of two numbers: <num> <num> max <num>
+/max { 2 copy gt { pop } { exch pop } ifelse } def
+
+% add two points: <point> <point> padd <point>
+/padd { exch 3 1 roll add 3 1 roll add exch } def
+
+% subtract first point from second: <point> <point> psub <point>
+/psub { 3 2 roll sub 3 1 roll exch sub exch } def
+
+% distance between two points: <point> <point> distance <length>
+/distance { psub dup mul exch dup mul add sqrt } def
+
+% point at angle and distance: <point> <length> <angle> atangle <point>
+/atangle { 2 copy cos mul 3 1 roll sin mul padd } def
+
+% angle from one point to another: <point> <point> angle <angle>
+/angle { psub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+
+
+% set up for line
+% - linesetup <length> <dashlength>
+/linesetup
+{ newpath
+ xcurr ycurr trpoint xprev yprev trpoint
+ 4 copy moveto lineto distance dashlength
+} def
+
+% set up for icon-avoiding line
+% - ilinesetup <length> <dashlength>
+/ilinesetup
+{ newpath
+ xprev yprev trpoint xcurr ycurr trpoint 4 copy
+ 4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle
+ 6 2 roll 4 2 roll
+ 4 copy angle symbolsize 1.5 mul exch 4 2 roll pop pop atangle
+ 4 copy moveto lineto distance dashlength
+} def
+
+
+% stroke a solid line: <length> <dashlength> solid -
+/solid
+{ pop pop [] 0 setdash linewidth setlinewidth stroke
+} def
+
+% stroke a dashed line: <length> <dashlength> dashed -
+/dashed
+{ 2 copy 2 mul le 1 index 0 le or
+ { exch pop 1 pt max [ exch dup ] 0 setdash }
+ { dup [ exch 4 2 roll 2 copy div
+ 1 sub 2 div ceiling dup 4 1 roll
+ 1 add mul sub exch div ] 0 setdash
+ } ifelse linewidth setlinewidth stroke
+} def
+
+% stroke a cdashed line: <length> <dashlength> cdashed -
+/cdashed
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt max [ exch dup ] dup 0 get 2 div setdash }
+ { dup [ 4 2 roll exch 2 copy exch div
+ 2 div ceiling div 1 index sub
+ ] exch 2 div setdash
+ } ifelse linewidth setlinewidth stroke
+} def
+
+% stroke a dotted line: <length> <dashlength> dotted -
+/dotted
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt max [ exch 0 exch ] 0 setdash }
+ { 1 index exch div ceiling div 0.99999 mul
+ [ 0 3 2 roll ] 0 setdash
+ } ifelse gsave 1 setlinecap linewidth setlinewidth stroke grestore newpath
+} def
+
+% stroke a noline line: <length> <dashlength> noline -
+/noline
+{ pop pop
+} def
+
+% stroke a y histogram: - yhisto -
+/yhisto
+{ xprev yleft trpoint yextra sub moveto
+ xprev yprev trpoint lineto
+ xcurr yprev trpoint lineto
+ xcurr yleft trpoint yextra sub lineto
+ linewidth setlinewidth stroke
+} def
+
+% stroke an x histogram: - xhisto -
+/xhisto
+{ xleft yprev trpoint exch xextra sub exch moveto
+ xcurr yprev trpoint lineto
+ xcurr ycurr trpoint lineto
+ xleft ycurr trpoint exch xextra sub exch lineto
+ linewidth setlinewidth stroke
+} def
+
+% stroke a surface y histogram: - surfaceyhisto -
+/surfaceyhisto
+{ firstpair
+ { xprev yleft trpoint yextra sub moveto
+ xprev yprev trpoint lineto
+ }
+ { xprev yprev trpoint moveto
+ } ifelse
+ xcurr yprev trpoint lineto
+ lastpair
+ { xcurr yleft trpoint yextra sub lineto
+ }
+ { xcurr ycurr trpoint lineto
+ } ifelse
+ linewidth setlinewidth stroke
+} def
+
+% stroke a surface x histogram: - surfacexhisto -
+/surfacexhisto
+{ firstpair
+ { xleft yprev trpoint exch xextra sub exch moveto
+ }
+ { xprev yprev trpoint moveto
+ } ifelse
+ xcurr yprev trpoint lineto
+ xcurr ycurr trpoint lineto
+ lastpair
+ { xleft ycurr trpoint exch xextra sub exch lineto
+ } if
+ linewidth setlinewidth stroke
+} def
+
+% stroke a filled y histogram: - filledyhisto -
+/filledyhisto
+{
+ linewidth setlinewidth
+ xprev yleft trpoint exch currentlinewidth 2 div add exch yextra sub moveto
+ xprev yprev trpoint exch currentlinewidth 2 div add exch lineto
+ xcurr yprev trpoint exch currentlinewidth 2 div sub exch lineto
+ xcurr yleft trpoint exch currentlinewidth 2 div sub exch yextra sub lineto
+ closepath fill
+} def
+
+% stroke a filled x histogram: - filledxhisto -
+/filledxhisto
+{
+ linewidth setlinewidth
+ xleft yprev trpoint currentlinewidth 2 div add exch xextra sub exch moveto
+ xcurr yprev trpoint currentlinewidth 2 div add lineto
+ xcurr ycurr trpoint currentlinewidth 2 div sub lineto
+ xleft ycurr trpoint currentlinewidth 2 div sub exch xextra sub exch lineto
+ closepath fill
+} def
+
+
+% cross: show a small cross
+/cross
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg symbolsize neg rmoveto
+ symbolsize 2 mul symbolsize 2 mul rlineto
+ 0 symbolsize -2 mul rmoveto
+ symbolsize -2 mul symbolsize 2 mul rlineto
+ [] 0 setdash stroke
+} def
+
+% plus: show a small plus
+/plus
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg 0 rmoveto
+ symbolsize 2 mul 0 rlineto
+ symbolsize neg symbolsize neg rmoveto
+ 0 symbolsize 2 mul rlineto
+ [] 0 setdash stroke
+} def
+
+% square: show a small square
+/square
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg symbolsize neg rmoveto
+ symbolsize 2 mul 0 rlineto
+ 0 symbolsize 2 mul rlineto
+ symbolsize -2 mul 0 rlineto
+ closepath [] 0 setdash stroke
+} def
+
+% filledsquare: show a small filled square
+/filledsquare
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg symbolsize neg rmoveto
+ symbolsize 2 mul 0 rlineto
+ 0 symbolsize 2 mul rlineto
+ symbolsize -2 mul 0 rlineto
+ closepath gsave [] 0 setdash stroke grestore fill
+} def
+
+% diamond: show a small diamond
+/diamond
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg 0 rmoveto
+ symbolsize symbolsize neg rlineto
+ symbolsize symbolsize rlineto
+ symbolsize neg symbolsize rlineto
+ closepath [] 0 setdash stroke
+} def
+
+% filleddiamond: show a small filled diamond
+/filleddiamond
+{ newpath
+ xcurr ycurr trpoint moveto
+ symbolsize neg 0 rmoveto
+ symbolsize symbolsize neg rlineto
+ symbolsize symbolsize rlineto
+ symbolsize neg symbolsize rlineto
+ closepath gsave [] 0 setdash stroke grestore fill
+} def
+
+% circle: show a small circle
+/circle
+{ newpath
+ xcurr ycurr trpoint symbolsize 0 360 arc [] 0 setdash stroke
+} def
+
+% filledcircle: show a small filled circle
+/filledcircle
+{ newpath
+ xcurr ycurr trpoint symbolsize 0 360 arc gsave [] 0 setdash stroke grestore fill
+} def
+
+% triangle: show a small triangle
+/triangle
+{ newpath
+ xcurr ycurr trpoint moveto
+ 0 symbolsize 1.5 mul rmoveto
+ symbolsize neg symbolsize -2.5 mul rlineto
+ symbolsize 2 mul 0 rlineto
+ closepath [] 0 setdash stroke
+} def
+
+% filledtriangle: show a small filled triangle
+/filledtriangle
+{ newpath
+ xcurr ycurr trpoint moveto
+ 0 symbolsize 1.5 mul rmoveto
+ symbolsize neg symbolsize -2.5 mul rlineto
+ symbolsize 2 mul 0 rlineto
+ closepath gsave [] 0 setdash stroke grestore fill
+} def
+
+
+%plog: like log only with a base, and protected from failing if <= 0
+% base x plog res
+/plog { dup 0 le { pop pop 0 } { ln exch ln div } ifelse } def
+
+% xtr: transform one x value logarithmically if xlog > 1
+% <num> xtr <num>
+/xtr
+{ xlog 1 gt
+ { xlog exch plog
+ } if
+} def
+
+% ytr: transform one y value logarithmically if ylog > 1
+% <num> ytr <num>
+/ytr
+{ ylog 1 gt
+ { ylog exch plog
+ } if
+} def
+
+% % trpoint: transform (x, y) in graph space into (x', y') in print space
+% % x y trpoint x' y'
+% /trpoint
+% { exch xtr trxmin sub trxmax trxmin sub div xwidth mul xextra add
+% exch ytr trymin sub trymax trymin sub div ywidth mul yextra add
+% } def
+
+
+% trpoint: transform (x, y) in graph space into (x', y') in print space
+% x y trpoint x' y'
+/trpoint
+{ exch xtr xdecr { trxmax exch sub } { trxmin sub } ifelse
+ trxmax trxmin sub div xwidth mul xextra add
+
+ exch ytr ydecr { trymax exch sub } { trymin sub } ifelse
+ trymax trymin sub div ywidth mul yextra add
+} def
+
+
+% yonly: interpolate x values 1, 2, ... into data
+% [ data ] yonly [ newdata ]
+/yonly
+{ dup /tmp exch def
+ length [ exch 1 exch 1 exch
+ { dup tmp exch 1 sub get
+ } for
+ ]
+} def
+
+% xonly: interpolate y values 1, 2, ... into data
+% [ data ] yonly [ newdata ]
+/xonly
+{ dup /tmp exch def
+ length [ exch 1 exch 1 exch
+ { dup tmp exch 1 sub get exch
+ } for
+ ]
+} def
+
+% xandy: no interpolation of x or y values
+% [ data ] xandy [ data ]
+/xandy {} def
+
+
+% expstringwidth: calculate width of string containing optional exponent
+% <string> expstringwidth <width>
+/expstringwidth
+{ (^) search
+ { exch pop stringwidth pop exch stringwidth pop 0.7 mul add }
+ { stringwidth pop }
+ ifelse
+} def
+
+% expstringshow: show string containing optional exponent
+% <string> expstringshow -
+/expstringshow
+{ (^) search
+ { exch pop show 0 0.5 ft rmoveto
+ gsave currentfont 0.7 scalefont setfont show grestore
+ }
+ { show
+ }
+ ifelse
+} def
+
+% concatenate two strings: <string> <string> strconcat <string>
+/strconcat
+{ 2 copy length exch length add string
+ dup 0 4 index putinterval
+ dup 3 index length 3 index putinterval
+ 3 1 roll pop pop
+} def
+
+% lgen: generate one label automatically
+% num lgen num string
+/lgen { dup 20 string cvs } def
+
+% loglgen: generate one logarithmic label (with exponent)
+% <base> <exponent> loglgen <string>
+/loglgen
+{ 20 string cvs exch 20 string cvs
+ (^) strconcat exch strconcat
+} def
+
+
+% printxtick: print one x tick
+% xpos printxtick -
+/printxtick
+{ newpath
+ yleft trpoint moveto 0 yextra neg rmoveto
+ 0 xticklength neg rlineto [] 0 setdash stroke
+} def
+
+% printxlabel: print one x label
+% (xlabel) xpos printxlabel -
+/printxlabel
+{ yleft trpoint moveto 0 yextra neg rmoveto
+ 0 xticklength neg rmoveto 0 0.9 ft neg rmoveto
+ xlog 1 gt { 0 0.3 ft neg rmoveto } if
+ dup expstringwidth -2 div 0 rmoveto expstringshow
+} def
+
+% printytick: print one y tick
+% ypos printytick -
+/printytick
+{ newpath
+ xleft exch trpoint moveto xextra neg 0 rmoveto
+ yticklength neg 0 rlineto [] 0 setdash stroke
+} def
+
+% printylabel: print one y label
+% (ylabel) ypos printylabel -
+/printylabel
+{ xleft exch trpoint moveto xextra neg 0 rmoveto
+ yticklength neg 0 rmoveto -0.3 ft -0.3 ft rmoveto
+ dup expstringwidth neg 0 rmoveto expstringshow
+} def
+
+% printrtick: print one r tick
+% ypos printrtick -
+/printrtick
+{ newpath
+ xright exch trpoint moveto xextra 0 rmoveto
+ rticklength 0 rlineto [] 0 setdash stroke
+} def
+
+% printrlabel: print one r label
+% (rlabel) ypos printrlabel -
+/printrlabel
+{ xright exch trpoint moveto xextra 0 rmoveto
+ rticklength 0 rmoveto 0.3 ft -0.3 ft rmoveto
+ expstringshow
+} def
+
+% printticks: print ticks and labels
+% /tickproc /labelproc [ tickandlabeldata ] min printticks -
+/printticks
+{ /prev exch def
+ { dup type dup dup /integertype eq exch /realtype eq or
+ { pop dup /prev exch def 2 index cvx exec
+ }
+ { /stringtype eq
+ { prev 2 index cvx exec
+ }
+ { pop
+ } ifelse
+ } ifelse
+ } forall
+ pop pop
+} def
+
+
+% printxaxistick: print one x axis tick
+% xpos printxaxistick -
+/printxaxistick
+{ newpath
+ yaxis trpoint moveto 0 xticklength -2 div rmoveto
+ 0 xticklength rlineto [] 0 setdash stroke
+} def
+
+% printxaxislabel: print one x axis label
+% (xlabel) xpos printxaxislabel -
+/printxaxislabel
+{ yaxis trpoint moveto
+ 0 xticklength -2 div rmoveto 0 0.9 ft neg rmoveto
+ xlog 1 gt { 0 0.3 ft neg rmoveto } if
+ dup expstringwidth -2 div 0 rmoveto expstringshow
+} def
+
+% printyaxistick: print one y axis tick
+% ypos printyaxistick -
+/printyaxistick
+{ newpath
+ xaxis exch trpoint moveto
+ yticklength -2 div 0 rmoveto
+ yticklength 0 rlineto [] 0 setdash stroke
+} def
+
+% printyaxislabel: print one y axis label
+% (ylabel) ypos printyaxislabel -
+/printyaxislabel
+{ xaxis exch trpoint moveto
+ yticklength -2 div 0 rmoveto -0.3 ft -0.3 ft rmoveto
+ dup expstringwidth neg 0 rmoveto expstringshow
+} def
+
+
+% <val> minmax -
+% perform minv := min(minv, val); maxv := max(maxv, val)
+% allowing for the possibility of minv, maxv, val being false (undefined)
+/minmax
+{ dup false eq
+ { pop }
+ { minv false eq
+ { dup /minv exch def /maxv exch def }
+ { dup minv lt
+ { /minv exch def }
+ { dup maxv gt
+ { /maxv exch def }
+ { pop }
+ ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+} def
+
+% <ticks> ticksundef <ticks> <bool>
+% returns true iff the ticks array is undefined (one false entry)
+/ticksundef
+{ dup length 1 eq
+ { dup 0 get false eq
+ }
+ { false }
+ ifelse
+} def
+
+% <number> integral <boolean>
+% true if the number has an integral value
+/integral { dup round eq } def
+
+% ticksep ticks xory alldata minval maxval axis base ticksandlimits ticks min max base
+% ticksandlimits: sort out value of x or y ticks and limits and log base
+/ticksandlimits
+{ /base exch def
+ /minv false def
+ /maxv false def
+
+ % min and max of user-supplied minval, maxval, and axis
+ minmax minmax minmax
+
+ % min and max of data points
+ { 0 get dup dup length 1 sub 3 index exch 2 exch
+ { get minmax dup
+ } for pop pop
+ } forall
+ pop dup
+
+ % min and max of tick values
+ { dup type /stringtype eq
+ { pop } { minmax } ifelse
+ } forall
+
+ % fix minv and maxv if undefined (false) or equal
+ minv false eq
+ { /minv -1 def /maxv 1 def }
+ { minv maxv eq
+ { minv 0 lt
+ { /minv 2 minv mul def /maxv 0 def
+ }
+ { minv 0 eq
+ { /minv -1 def /maxv 1 def
+ }
+ { /minv 0 def /maxv 2 maxv mul def
+ } ifelse
+ } ifelse
+ } if
+ } ifelse
+
+ % invent ticks if undefined
+ ticksundef
+ { pop /ticksep exch def
+
+ % if base is reasonable and minv is positive, logarithmic ticks
+ base 1 gt minv 0 gt and
+ {
+ % get integral log of minv and maxv
+ /logminv base minv plog floor cvi def
+ /logmaxv base maxv plog ceiling cvi def
+
+ % if minv close to base, make it 1; reset minv and maxv
+ logminv 1 eq logmaxv 4 ge and { /logminv 0 def } if
+ /minv base logminv exp def
+ /maxv base logmaxv exp def
+
+ % ticks := [ base**logminv, ... , base**logmaxv ]
+ [ logminv 1 logmaxv
+ { dup base exch exp
+ exch base exch loglgen
+ } for
+ ]
+ }
+ { % non-logarithmic ticks
+ {
+ % fix tick separation if undefined (0) or too small
+ /base 0 def
+ /delta maxv minv sub def
+ ticksep delta 30 div le
+ { /ticksep 10 delta log 1 sub ceiling exp def
+ ticksep delta 2 div ge
+ { /ticksep ticksep 2 div def }
+ { ticksep delta 5 div lt
+ { /ticksep 2 ticksep mul def
+ } if
+ } ifelse
+ } if
+
+ % adjust minv and maxv to be multiples of ticksep
+ /minv minv ticksep div floor ticksep mul def
+ /maxv maxv ticksep div ceiling ticksep mul def
+ /delta maxv minv sub def
+
+ % if minv or maxv near zero, move to zero and redo
+ minv ticksep eq
+ { /minv 0 def }
+ { maxv ticksep neg eq { /maxv 0 def } { exit } ifelse
+ } ifelse
+ } loop
+
+ % if minv, maxv, and ticksep are all integral, set "makeint" to true
+ /makeint minv integral maxv integral ticksep integral and and def
+
+ % ticks := [ minv, minv+ticksep, ... , maxv ]
+ [ 0 1 delta ticksep div round
+ { ticksep mul minv add makeint { cvi } if lgen }
+ for
+ ]
+ } ifelse
+ }
+ { exch pop
+ } ifelse
+ minv maxv base
+} def
+
+% xset: set up all data for x axis, including limits and ticks
+% xticksep xticks 0 alldata xmin xmax xlog xextra xdecr xaxis xticklength xset -
+/xset
+{ /xticklength exch def
+ /xaxis exch def
+ /xdecr exch def
+ /xextra exch def
+ xaxis exch ticksandlimits
+ /xlog exch def /xmax exch def /xmin exch def /xticks exch def
+ /xleft xdecr { xmax } { xmin } ifelse def
+ /xright xdecr { xmin } { xmax } ifelse def
+ /xwidth xsize xextra 2 mul sub def
+ /trxmin xmin xtr def /trxmax xmax xtr def
+} def
+
+% yset: set up all data for y axis, including limits and yticks
+% yticksep yticks 0 alldata ymin ymax ylog yextra ydecr yaxis yticklength yset -
+/yset
+{ /yticklength exch def
+ /yaxis exch def
+ /ydecr exch def
+ /yextra exch def
+ yaxis exch ticksandlimits
+ /ylog exch def /ymax exch def /ymin exch def /yticks exch def
+ /yleft ydecr { ymax } { ymin } ifelse def
+ /yright ydecr { ymin } { ymax } ifelse def
+ /ywidth ysize yextra 2 mul sub def
+ /trymin ymin ytr def /trymax ymax ytr def
+} def
+
+% rset: set up all data for y axis (again), but including limits and rticks
+% rticksep rticks 0 alldata ymin ymax ylog yextra ydecr yaxis rticklength rset -
+/rset
+{ /rticklength exch def
+ /yaxis exch def
+ /ydecr exch def
+ /yextra exch def
+ yaxis exch ticksandlimits
+ /ylog exch def /ymax exch def /ymin exch def /rticks exch def
+ /yleft ydecr { ymax } { ymin } ifelse def
+ /yright ydecr { ymin } { ymax } ifelse def
+ /ywidth ysize yextra 2 mul sub def
+ /trymin ymin ytr def /trymax ymax ytr def
+} def
+
+% norset: set up data for no rticks
+% - norset -
+/norset
+{ /rticklength 0 def
+ /rticks [] def
+} def
+
+% framestyle: print a frame around the graph
+/framestyle
+{ 0 0 moveto xsize 0 lineto xsize ysize lineto
+ 0 ysize lineto closepath stroke
+ /printxtick /printxlabel xticks xleft printticks
+ /printytick /printylabel yticks ymin printticks
+ /printrtick /printrlabel rticks ymin printticks
+} def
+
+% nonestyle: print nothing around the graph
+/nonestyle
+{
+} def
+
+% axesstyle: print axes for the graph (unless axis values missing)
+/axesstyle
+{
+ xaxis false eq yaxis false eq or
+ { framestyle }
+ { xaxis yaxis trpoint dup 0 exch moveto xsize exch lineto
+ dup 0 moveto ysize lineto stroke
+ /printxaxistick /printxaxislabel xticks xleft printticks
+ /printyaxistick /printyaxislabel yticks ymin printticks
+ } ifelse
+} def
+
+% rundata: run all data sets
+/rundata
+{ alldata
+ { gsave
+ dup dup dup dup
+ 4 get /dopaint exch def
+ 3 get /initrun exch def
+ 2 get /pairs exch def
+ 1 get /points exch def
+ 0 get /data exch def
+ dopaint
+ { data length 4 ge
+ { initrun
+ newpath
+ data 0 get ymin trpoint yextra sub moveto
+ 0 2 data length 2 sub
+ { dup 1 add
+ data exch get /ycurr exch def
+ data exch get /xcurr exch def
+ xcurr ycurr trpoint lineto
+ } for
+ data dup length 2 sub get ymin trpoint yextra sub lineto
+ closepath fill
+ } if
+ } if
+ initrun
+ data length 2 ge
+ {
+ /xcurr data 0 get def
+ /ycurr data 1 get def
+ points
+ data length 4 ge
+ { 2 2 data length 2 sub
+ { /xprev xcurr def
+ /yprev ycurr def
+ dup dup 2 eq /firstpair exch def
+ data length 2 sub eq /lastpair exch def
+ dup 1 add
+ data exch get /ycurr exch def
+ data exch get /xcurr exch def
+ pairs
+ points
+ } for
+ } if
+ } if
+ grestore
+ } forall
+} def
+
+end
+%%EndResource
+
+%%BeginResource: procset LoutFigPrependGraphic
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/diagf.lpg
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% PostScript @SysPrependGraphic file for @Diag Jeffrey H. Kingston %
+% Version 2.0 (includes CIRCUM label) September 1996 %
+% %
+% To assist in avoiding name clashes, the names of all symbols %
+% defined here begin with "ldiag". However, this is not feasible %
+% with user-defined labels and some labels used by users. %
+% %
+% <point> is two numbers, a point. %
+% <length> is one number, a length %
+% <angle> is one number, an angle in degrees %
+% <dashlength> is one number, the preferred length of a dash %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+errordict begin
+ /handleerror
+ {
+ { /Times-Roman findfont 8 pt scalefont setfont
+ 0 setgray 4 pt 4 pt moveto
+ $error /errorname get
+ dup ldiagdict exch known
+ { ldiagdict exch get }
+ { 50 string cvs } ifelse
+ show
+ ( Command: ) show
+ $error /command get 50 string cvs show
+ } stopped {} if
+ showpage stop
+ } def
+end
+
+% begin diagram: <maxlabels> ldiagbegin -
+% must be defined outside ldiagdict since it loads it
+/ldiagbegin
+{ xsize 0 0 ysize ldiagdict begin
+ 5 -1 roll /ldiagmaxlabels exch def
+ (@Diag) ldiagpushtagdict
+ /OOY ldiagpointdef /OOX ldiagpointdef 0 0 /OOO ldiagpointdef
+} def
+
+% end diagram: - ldiagend -
+/ldiagend
+{ ldiagpoptagdict end
+} def
+
+% concat strings: <string> <string> ldiagconcat <string>
+% must be defined outside ldiagdict since used in ldiagpromotelabels
+/ldiagconcat
+{ 2 copy length exch length add string
+ dup 0 4 index putinterval
+ dup 3 index length 3 index putinterval
+ 3 1 roll pop pop
+} def
+
+/ldiagdebugposy 432 def
+/ldiagdebugposx 72 def
+
+% <string> <int> ldiagdebugprint -
+% must be defined outside ldiagdict since used in arbitrary places
+% print count or <int> stack entries, which ever is the smaller
+/ldiagdebugprint
+{
+ exch
+ gsave
+ initgraphics
+ ldiagdebugposy 72 lt
+ { /ldiagdebugposx ldiagdebugposx 144 add store
+ /ldiagdebugposy 432 store
+ }
+ {
+ /ldiagdebugposy ldiagdebugposy 12 sub store
+ } ifelse
+ ldiagdebugposx ldiagdebugposy moveto
+ /Times-Roman findfont 10 scalefont setfont
+ 0 setgray show
+ count 1 sub 2 copy lt { pop } { exch pop } ifelse 1 sub
+ 0 exch 1 exch
+ {
+ /ldiagdebugposy ldiagdebugposy 12 sub store
+ ldiagdebugposx 12 add ldiagdebugposy moveto
+ index 50 string cvs show
+ } for
+ grestore
+} def
+
+/ldiagdict 200 dict def
+ldiagdict begin
+
+% error messages
+/dictfull (dictfull error: too many labels?) def
+/dictstackoverflow (dictstackoverflow error: labels nested too deeply?) def
+/execstackoverflow (execstackoverflow error: figure nested too deeply?) def
+/limitcheck (limitcheck error: figure nested too deeply or too large?) def
+/syntaxerror (syntaxerror error: syntax error in text of figure?) def
+/typecheck (typecheck error: syntax error in text of figure?) def
+/undefined (undefined error: unknown or misspelt label?) def
+/VMError (VMError error: run out of memory?) def
+
+% push pi onto stack: - ldiagpi <num>
+/ldiagpi 3.14159 def
+
+% push e onto stack: - ldiage <num>
+/ldiage 2.71828 def
+
+% arc directions
+/clockwise false def
+/anticlockwise true def
+
+% test equality between two angles: <angle> <angle> ldiagangleeq <bool>
+/ldiagangleeq { ldiagfixangle exch ldiagfixangle eq } def
+
+% test inequality between two angles: <angle> <angle> ldiaganglene <bool>
+/ldiaganglene { ldiagangleeq not } def
+
+% maximum of two numbers: <num> <num> ldiagmax <num>
+/ldiagmax { 2 copy gt { pop } { exch pop } ifelse } def
+
+% minimum of two numbers: <num> <num> ldiagmin <num>
+/ldiagmin { 2 copy lt { pop } { exch pop } ifelse } def
+
+% add two points: <point> <point> ldiagpadd <point>
+/ldiagpadd
+{
+ % (Entering padd) 4 ldiagdebugprint
+ exch 3 1 roll add 3 1 roll add exch
+ % (Leaving padd) 2 ldiagdebugprint
+} def
+
+% subtract first point from second: <point> <point> ldiagpsub <point>
+/ldiagpsub { 3 2 roll sub 3 1 roll exch sub exch } def
+
+% max two points: <point> <point> ldiagpmax <point>
+/ldiagpmax { exch 3 1 roll ldiagmax 3 1 roll ldiagmax exch } def
+
+% min two points: <point> <point> ldiagpmin <point>
+/ldiagpmin { exch 3 1 roll ldiagmin 3 1 roll ldiagmin exch } def
+
+% scalar multiplication: <point> <num> ldiagpmul <point>
+/ldiagpmul { dup 3 1 roll mul 3 1 roll mul exch } def
+
+% point at angle and distance: <point> <length> <angle> ldiagatangle <point>
+/ldiagatangle { 2 copy cos mul 3 1 roll sin mul ldiagpadd } def
+
+% angle from one point to another: <point> <point> ldiagangleto <angle>
+/ldiagangleto { ldiagpsub 2 copy 0 eq exch 0 eq and {pop} {exch atan} ifelse } def
+
+% distance between two points: <point> <point> ldiagdistance <length>
+/ldiagdistance { ldiagpsub dup mul exch dup mul add sqrt } def
+
+% stroke a solid line: <length> <dashlength> ldiagsolid -
+/ldiagsolid
+{ pop pop [] 0 setdash 1 setlinecap stroke
+} def
+
+% stroke a dashed line: <length> <dashlength> ldiagdashed -
+/ldiagdashed
+{ 2 copy div 2 le 1 index 0 le or
+ { exch pop 1 pt ldiagmax [ exch dup ] 0 setdash }
+ { dup [ exch 4 2 roll 2 copy div
+ 1 sub 2 div ceiling dup 4 1 roll
+ 1 add mul sub exch div ] 0 setdash
+ } ifelse 0 setlinecap stroke
+} def
+
+% stroke a cdashed line: <length> <dashlength> ldiagcdashed -
+/ldiagcdashed
+{ % (Entering ldiagcdashed) 2 ldiagdebugprint
+ 2 copy le 1 index 0 le or
+ { exch pop 1 pt ldiagmax [ exch dup ] dup 0 get 2 div setdash }
+ { dup [ 4 2 roll exch 2 copy exch div
+ 2 div ceiling div 1 index sub
+ ] exch 2 div setdash
+ } ifelse 0 setlinecap stroke
+ % (Leaving ldiagcdashed) 0 ldiagdebugprint
+} def
+
+% stroke a dotted line: <length> <dashlength> ldiagdotted -
+/ldiagdotted
+{ 2 copy le 1 index 0 le or
+ { exch pop 1 pt ldiagmax [ exch 0 exch ] 0 setdash }
+ { 1 index exch div ceiling div
+ [ 0 3 2 roll ] 0 setdash
+ } ifelse 1 setlinecap stroke
+} def
+
+% stroke a noline line: <length> <dashlength> ldiagnoline -
+/ldiagnoline
+{ pop pop
+} def
+
+% painting (i.e. filling): - ldiagwhite - (etc.)
+/ldiagnopaint { } def
+/ldiagnochange { fill } def
+/ldiagdarkblue { 0.0 0.0 0.5 setrgbcolor fill } def
+/ldiagblue { 0.0 0.0 1.0 setrgbcolor fill } def
+/ldiaglightblue { 0.5 0.5 1.0 setrgbcolor fill } def
+/ldiagdarkgreen { 0.0 0.5 0.0 setrgbcolor fill } def
+/ldiaggreen { 0.0 1.0 0.0 setrgbcolor fill } def
+/ldiaglightgreen { 0.5 1.0 0.5 setrgbcolor fill } def
+/ldiagdarkred { 0.5 0.0 0.0 setrgbcolor fill } def
+/ldiagred { 1.0 0.0 0.0 setrgbcolor fill } def
+/ldiaglightred { 1.0 0.5 0.5 setrgbcolor fill } def
+/ldiagdarkcyan { 0.0 0.5 0.5 setrgbcolor fill } def
+/ldiagcyan { 0.0 1.0 1.0 setrgbcolor fill } def
+/ldiaglightcyan { 0.5 1.0 1.0 setrgbcolor fill } def
+/ldiagdarkmagenta { 0.5 0.0 0.5 setrgbcolor fill } def
+/ldiagmagenta { 1.0 0.0 1.0 setrgbcolor fill } def
+/ldiaglightmagenta { 1.0 0.5 1.0 setrgbcolor fill } def
+/ldiagdarkyellow { 0.5 0.5 0.0 setrgbcolor fill } def
+/ldiagyellow { 1.0 1.0 0.0 setrgbcolor fill } def
+/ldiaglightyellow { 1.0 1.0 0.5 setrgbcolor fill } def
+/ldiagdarkgray { 0.2 0.2 0.2 setrgbcolor fill } def
+/ldiaggray { 0.5 0.5 0.5 setrgbcolor fill } def
+/ldiaglightgray { 0.8 0.8 0.8 setrgbcolor fill } def
+/ldiagdarkgrey { 0.2 0.2 0.2 setrgbcolor fill } def
+/ldiaggrey { 0.5 0.5 0.5 setrgbcolor fill } def
+/ldiaglightgrey { 0.8 0.8 0.8 setrgbcolor fill } def
+/ldiagblack { 0.0 0.0 0.0 setrgbcolor fill } def
+/ldiagwhite { 1.0 1.0 1.0 setrgbcolor fill } def
+
+% shape and labels of the @Box symbol
+/ldiagbox
+{
+ 0 0 /SW ldiagpointdef
+ xsize 0 /SE ldiagpointdef
+ xsize ysize /NE ldiagpointdef
+ 0 ysize /NW ldiagpointdef
+ SE 0.5 ldiagpmul /S ldiagpointdef
+ NW 0.5 ldiagpmul /W ldiagpointdef
+ W SE ldiagpadd /E ldiagpointdef
+ S NW ldiagpadd /N ldiagpointdef
+ NE 0.5 ldiagpmul /CTR ldiagpointdef
+
+ 0 dg /S@ANGLE ldiagangledef
+ 45 dg /SE@ANGLE ldiagangledef
+ 90 dg /E@ANGLE ldiagangledef
+ 135 dg /NE@ANGLE ldiagangledef
+ 180 dg /N@ANGLE ldiagangledef
+ 225 dg /NW@ANGLE ldiagangledef
+ 270 dg /W@ANGLE ldiagangledef
+ 315 dg /SW@ANGLE ldiagangledef
+
+ [ CTR NE ldiagpsub /ldiagboxcircum cvx ] ldiagcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @CurveBox symbol
+% <margin> ldiagcurvebox <shape>
+/ldiagcurvebox
+{
+
+ % (Entering ldiagcurvebox) 1 ldiagdebugprint
+ ldiagdecodelength /cbmgn exch def
+
+ xsize 0.5 mul ysize 0.5 mul /CTR ldiagpointdef
+ xsize 0.5 mul 0 /S ldiagpointdef
+ xsize ysize 0.5 mul /E ldiagpointdef
+ xsize 0.5 mul ysize /N ldiagpointdef
+ 0 ysize 0.5 mul /W ldiagpointdef
+
+ cbmgn 0.293 mul cbmgn 0.293 mul /SW ldiagpointdef
+ xsize cbmgn 0.293 mul sub cbmgn 0.293 mul /SE ldiagpointdef
+ xsize cbmgn 0.293 mul sub ysize cbmgn 0.293 mul sub /NE ldiagpointdef
+ cbmgn 0.293 mul ysize cbmgn 0.293 mul sub /NW ldiagpointdef
+
+ 0 dg /S@ANGLE ldiagangledef
+ 45 dg /SE@ANGLE ldiagangledef
+ 90 dg /E@ANGLE ldiagangledef
+ 135 dg /NE@ANGLE ldiagangledef
+ 180 dg /N@ANGLE ldiagangledef
+ 225 dg /NW@ANGLE ldiagangledef
+ 270 dg /W@ANGLE ldiagangledef
+ 315 dg /SW@ANGLE ldiagangledef
+
+ [ xsize ysize 0.5 ldiagpmul cbmgn /ldiagcurveboxcircum cvx ] ldiagcircumdef
+
+ cbmgn 0
+ xsize cbmgn sub 0
+ [ xsize cbmgn sub cbmgn ]
+ xsize cbmgn
+ xsize ysize cbmgn sub
+ [ xsize cbmgn sub ysize cbmgn sub ]
+ xsize cbmgn sub ysize
+ cbmgn ysize
+ [ cbmgn ysize cbmgn sub ]
+ 0 ysize cbmgn sub
+ 0 cbmgn
+ [ cbmgn cbmgn ]
+ cbmgn 0
+
+ % (Leaving ldiagcurvebox) 0 ldiagdebugprint
+} def
+
+% shadow of the @ShadowBox symbol
+% its shape and labels are done, somewhat inaccurately, with ldiagbox
+% <shadowmargin> ldiagshadow -
+/ldiagshadow
+{
+ /lfshm exch def
+
+ lfshm 0 moveto
+ 0 lfshm neg rlineto
+ xsize 0 rlineto
+ 0 ysize rlineto
+ lfshm neg 0 rlineto
+ xsize 0 lineto
+ closepath fill
+
+} def
+
+% shape and labels of the @Square symbol
+/ldiagsquare
+{
+ xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef
+ CTR xsize xsize ysize ysize ldiagpmax 0.5 ldiagpmul ldiagpadd /NE ldiagpointdef
+ CTR 0 0 CTR NE ldiagdistance 135 ldiagatangle ldiagpadd /NW ldiagpointdef
+ CTR 0 0 CTR NE ldiagdistance 225 ldiagatangle ldiagpadd /SW ldiagpointdef
+ CTR 0 0 CTR NE ldiagdistance 315 ldiagatangle ldiagpadd /SE ldiagpointdef
+ SW 0.5 ldiagpmul SE 0.5 ldiagpmul ldiagpadd /S ldiagpointdef
+ NW 0.5 ldiagpmul NE 0.5 ldiagpmul ldiagpadd /N ldiagpointdef
+ SW 0.5 ldiagpmul NW 0.5 ldiagpmul ldiagpadd /W ldiagpointdef
+ SE 0.5 ldiagpmul NE 0.5 ldiagpmul ldiagpadd /E ldiagpointdef
+
+ 0 dg /S@ANGLE ldiagangledef
+ 45 dg /SE@ANGLE ldiagangledef
+ 90 dg /E@ANGLE ldiagangledef
+ 135 dg /NE@ANGLE ldiagangledef
+ 180 dg /N@ANGLE ldiagangledef
+ 225 dg /NW@ANGLE ldiagangledef
+ 270 dg /W@ANGLE ldiagangledef
+ 315 dg /SW@ANGLE ldiagangledef
+
+ [ CTR NE ldiagpsub /ldiagboxcircum cvx ] ldiagcircumdef
+ SW SE NE NW SW
+} def
+
+% shape and labels of the @Diamond symbol
+/ldiagdiamond
+{
+ xsize 0 0.5 ldiagpmul /S ldiagpointdef
+ 0 ysize 0.5 ldiagpmul /W ldiagpointdef
+ S W ldiagpadd /CTR ldiagpointdef
+ CTR W ldiagpadd /N ldiagpointdef
+ CTR S ldiagpadd /E ldiagpointdef
+ E N ldiagpadd 0.5 ldiagpmul /NE ldiagpointdef
+ N W ldiagpadd 0.5 ldiagpmul /NW ldiagpointdef
+ S W ldiagpadd 0.5 ldiagpmul /SW ldiagpointdef
+ S E ldiagpadd 0.5 ldiagpmul /SE ldiagpointdef
+
+ 0 dg /S@ANGLE ldiagangledef
+ 90 dg /E@ANGLE ldiagangledef
+ 180 dg /N@ANGLE ldiagangledef
+ 270 dg /W@ANGLE ldiagangledef
+ S E ldiagangleto /SE@ANGLE ldiagangledef
+ E N ldiagangleto /NE@ANGLE ldiagangledef
+ N W ldiagangleto /NW@ANGLE ldiagangledef
+ W S ldiagangleto /SW@ANGLE ldiagangledef
+
+ [ xsize ysize 0.5 ldiagpmul /ldiagdiamondcircum cvx ] ldiagcircumdef
+ S E N W S
+} def
+
+% shape and labels of the @Ellipse symbol
+/ldiagellipse
+{
+ xsize 0 0.5 ldiagpmul /S ldiagpointdef
+ 0 ysize 0.5 ldiagpmul /W ldiagpointdef
+ S W ldiagpadd /CTR ldiagpointdef
+ CTR W ldiagpadd /N ldiagpointdef
+ CTR S ldiagpadd /E ldiagpointdef
+ CTR xsize 0 0.3536 ldiagpmul ldiagpadd 0 ysize 0.3536 ldiagpmul ldiagpadd /NE ldiagpointdef
+ 0 ysize 0.3536 ldiagpmul CTR xsize 0 0.3536 ldiagpmul ldiagpadd ldiagpsub /SE ldiagpointdef
+ xsize 0 0.3536 ldiagpmul CTR ldiagpsub 0 ysize 0.3536 ldiagpmul ldiagpadd /NW ldiagpointdef
+ 0 ysize 0.3536 ldiagpmul xsize 0 0.3536 ldiagpmul CTR ldiagpsub ldiagpsub /SW ldiagpointdef
+ [ xsize ysize 0.5 ldiagpmul /ldiagellipsecircum cvx ] ldiagcircumdef
+
+ 0 dg /S@ANGLE ldiagangledef
+ 90 dg /E@ANGLE ldiagangledef
+ 180 dg /N@ANGLE ldiagangledef
+ 270 dg /W@ANGLE ldiagangledef
+
+ S E ldiagangleto /SE@ANGLE ldiagangledef
+ E N ldiagangleto /NE@ANGLE ldiagangledef
+ N W ldiagangleto /NW@ANGLE ldiagangledef
+ W S ldiagangleto /SW@ANGLE ldiagangledef
+
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @Circle symbol
+/ldiagcircle
+{
+ xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef
+ CTR xsize 0 ysize 0 ldiagpmax 0.5 ldiagpmul ldiagpadd /E ldiagpointdef
+ CTR 0 0 CTR E ldiagdistance 45 ldiagatangle ldiagpadd /NE ldiagpointdef
+ CTR 0 0 CTR E ldiagdistance 90 ldiagatangle ldiagpadd /N ldiagpointdef
+ CTR 0 0 CTR E ldiagdistance 135 ldiagatangle ldiagpadd /NW ldiagpointdef
+ CTR 0 0 CTR E ldiagdistance 180 ldiagatangle ldiagpadd /W ldiagpointdef
+ CTR 0 0 CTR E ldiagdistance 225 ldiagatangle ldiagpadd /SW ldiagpointdef
+ CTR 0 0 CTR E ldiagdistance 270 ldiagatangle ldiagpadd /S ldiagpointdef
+ CTR 0 0 CTR E ldiagdistance 315 ldiagatangle ldiagpadd /SE ldiagpointdef
+ [ S E ldiagpsub /ldiagellipsecircum cvx ] ldiagcircumdef
+
+ 0 dg /S@ANGLE ldiagangledef
+ 45 dg /SE@ANGLE ldiagangledef
+ 90 dg /E@ANGLE ldiagangledef
+ 135 dg /NE@ANGLE ldiagangledef
+ 180 dg /N@ANGLE ldiagangledef
+ 225 dg /NW@ANGLE ldiagangledef
+ 270 dg /W@ANGLE ldiagangledef
+ 315 dg /SW@ANGLE ldiagangledef
+
+ S [ CTR ] E [ CTR ] N [ CTR ] W [ CTR ] S
+} def
+
+% shape and labels of the @VLine and @VArrow symbols
+/ldiagvline
+{
+ xmark ysize ldiagprevious /FROM ldiagpointdef
+ xmark 0 ldiagprevious /TO ldiagpointdef
+} def
+
+% points of a polygon around base with given no of sides, vert init angle:
+% <sides> <angle> ldiagpolygon <point> ... <point>
+/ldiagpolygon
+{ exch round cvi exch
+ xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef
+ 90 sub CTR 2 copy ldiagmax 5 3 roll
+ [ 4 copy pop /ldiagpolycircum cvx ] ldiagcircumdef
+ exch dup 360 exch div exch
+ 1 1 3 2 roll
+ { 4 string cvs (P) exch ldiagconcat
+ 3 copy exch pop (@ANGLE) ldiagconcat cvn exch 90 add exch ldiagangledef
+ cvn 6 copy pop pop ldiagatangle 2 copy 10 2 roll
+ 3 2 roll ldiagpointdef
+ dup 3 1 roll add exch
+ } for
+ pop ldiagatangle
+} def
+
+% shape and labels of the @Isosceles triangle symbol
+/ldiagisosceles
+{
+ xsize ysize 0.5 ldiagpmul /CTR ldiagpointdef
+ 0 0 /SW ldiagpointdef
+ xsize 0 /SE ldiagpointdef
+ xsize 0.5 mul ysize /N ldiagpointdef
+ xsize 0.5 mul 0 /S ldiagpointdef
+ SE 0.5 ldiagpmul N 0.5 ldiagpmul ldiagpadd /NE ldiagpointdef
+ SW 0.5 ldiagpmul N 0.5 ldiagpmul ldiagpadd /NW ldiagpointdef
+
+ [ xsize ysize /ldiagisoscelescircum cvx ] ldiagcircumdef
+
+ 0 dg /SW@ANGLE ldiagangledef
+ 0 dg /SE@ANGLE ldiagangledef
+ 180 dg /N@ANGLE ldiagangledef
+ 0 dg /S@ANGLE ldiagangledef
+ SE N ldiagangleto /NE@ANGLE ldiagangledef
+ N SW ldiagangleto /NW@ANGLE ldiagangledef
+
+ SW SE N SW
+} def
+
+% next array element: <array> <index> ldiaggetnext <array> <index> <any> true
+% or <array> <index> false
+/ldiaggetnext
+{ 2 copy exch length ge
+ { false }
+ { 2 copy get exch 1 add exch true } ifelse
+} def
+
+% check whether thing is number: <any> ldiagisnumbertype <any> <bool>
+/ldiagisnumbertype
+{ dup type dup
+ /integertype eq exch /realtype eq or
+} def
+
+% check whether thing is an array: <any> ldiagisarraytype <any> <bool>
+/ldiagisarraytype { dup type /arraytype eq } def
+
+% check whether thing is an array: <any> ldiagisnametype <any> <bool>
+/ldiagisnametype { dup type /nametype eq } def
+
+% get next item: <array> <index> ldiaggetnextitem <array> <index> 0
+% or <array> <index> <array> 1
+% or <array> <index> <point> 2
+/ldiaggetnextitem
+{ ldiaggetnext
+ { ldiagisarraytype
+ { 1
+ }
+ { ldiagisnumbertype
+ { 3 1 roll
+ ldiaggetnext
+ { ldiagisnumbertype
+ { 4 3 roll exch 2
+ }
+ { pop 3 2 roll pop 0
+ } ifelse
+ }
+ { 3 2 roll pop 0
+ } ifelse
+ }
+ { pop 0
+ } ifelse
+ } ifelse
+ }
+ { 0
+ } ifelse
+} def
+
+% approximate equality: num1 num2 approxeq <boolean>
+/approxeq
+{ dup 0 eq
+ { pop 0 eq
+ }
+ { dup 3 1 roll sub exch div abs 0.001 lt
+ } ifelse
+} def
+
+% set arc path: bool x1 y1 x2 y2 x0 y0 ldiagsetarc <angle> <angle> <dist>
+% the path goes from x1 y1 to x2 y2 about centre x0 y0,
+% anticlockwise if bool is true else clockwise.
+% The orientations of backwards pointing and forwards pointing
+% arrowheads are returned in the two angles, and
+% the length of the arc is returned in <dist>.
+/ldiagsetarc
+{
+ % (Entering ldiagsetarc) 7 ldiagdebugprint
+ 20 dict begin
+ matrix currentmatrix 8 1 roll
+ 2 copy translate 2 copy 8 2 roll
+ 4 2 roll ldiagpsub 6 2 roll ldiagpsub
+ dup /y1 exch def dup mul /y1s exch def
+ dup /x1 exch def dup mul /x1s exch def
+ dup /y2 exch def dup mul /y2s exch def
+ dup /x2 exch def dup mul /x2s exch def
+ /dist1 0 0 x1 y1 ldiagdistance def
+ /dist2 0 0 x2 y2 ldiagdistance def
+
+ y1s y2s approxeq
+ { -1
+ }
+ { y1s x2s mul y2s x1s mul sub y1s y2s sub div
+ } ifelse
+ /da exch def
+
+ x1s x2s approxeq
+ { -1
+ }
+ { x1s y2s mul x2s y1s mul sub x1s x2s sub div
+ } ifelse
+ /db exch def
+
+ da 0 gt db 0 gt and
+ {
+ % ( case 1, ellipse) 0 ldiagdebugprint
+ /LMax da sqrt db sqrt ldiagmax def
+ /scalex da sqrt LMax div def
+ /scaley db sqrt LMax div def
+ scalex scaley scale
+ 0 0 LMax
+ 0 0 x1 scalex mul y1 scaley mul ldiagangleto
+ 0 0 x2 scalex mul y2 scaley mul ldiagangleto
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ dup sin scaley mul exch cos scalex mul atan
+ 5 2 roll % res1 res2 ang1 ang2 anticlockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if ldiagpi mul LMax mul 180 div
+ }
+ {
+ dist1 dist2 approxeq
+ % x1 y1 dist1 ( x1 y1, d) 3 ldiagdebugprint pop pop pop
+ % x2 y2 dist2 ( x2 y2, d) 3 ldiagdebugprint pop pop pop
+ {
+ % ( case 2, circle) 0 ldiagdebugprint
+ 0 0
+ dist1
+ 0 0 x1 y1 ldiagangleto
+ 0 0 x2 y2 ldiagangleto
+ 2 copy eq { 360 add } if
+ 2 copy 8 2 roll
+ 5 index { arc } { arcn } ifelse
+ 2 index 1 index
+ { 90 sub } { 90 add } ifelse
+ 2 index 2 index
+ { 90 add } { 90 sub } ifelse
+ 5 2 roll % res1 res2 ang1 ang2 clockwise
+ { exch sub } { sub } ifelse
+ dup 0 le { 360 add } if
+ ldiagpi mul dist1 mul 180 div
+ }
+ {
+ % ( case 3, line) 0 ldiagdebugprint
+ x2 y2 lineto pop
+ x2 y2 x1 y1 ldiagangleto
+ x1 y1 x2 y2 ldiagangleto
+ x1 y1 x2 y2 ldiagdistance
+ } ifelse
+ } ifelse
+ 4 -1 roll setmatrix
+ end
+ % (Leaving ldiagsetarc) 3 ldiagdebugprint
+} def
+
+% ldiagsetcurve: set up a Bezier curve from x0 y0 to x3 y3
+% and return arrowhead angles and length of curve (actually 0)
+% x0 y0 x1 y1 x2 y2 x3 y3 ldiagsetcurve <angle> <angle> <length>
+/ldiagsetcurve
+{ 8 copy curveto pop pop
+ ldiagangleto
+ 5 1 roll
+ 4 2 roll ldiagangleto
+ exch
+ 0
+} def
+
+% ldiagsetpath: convert a Diag path into a PostScript path
+% [ shape ] ldiagsetpath
+/ldiagsetpath
+{
+ 10 dict begin
+ 0 newpath
+ /prevseen false def
+ /curveseen false def
+ { ldiaggetnextitem
+ dup 0 eq { pop exit }
+ { 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /curveseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr
+ ldiagsetcurve pop pop pop
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ ldiagsetarc pop pop pop
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ } ifelse
+ }
+ { xcurr ycurr moveto
+ } ifelse
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop pop pop
+ end
+} def
+
+% ldiagpaintpath: paint a path of the given shape
+% /paint [ shape ] ldiagpaintpath -
+/ldiagpaintpath
+{
+ ldiagsetpath cvx exec
+} def
+
+% stroke a path of the given shape in the given linestyle and dash length.
+% Return the origin and angle of the backward and forward arrow heads.
+% dashlength /linestyle [shape] ldiagdopath [<point> <angle>] [<point> <angle>]
+/ldiagdopath
+{
+ 10 dict begin
+ 0
+ /prevseen false def
+ /curveseen false def
+ /backarrow [] def
+ /fwdarrow [] def
+ {
+ ldiaggetnextitem
+ dup 0 eq { pop exit }
+ {
+ 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /prevseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { newpath xprev yprev moveto
+ curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr ldiagsetcurve
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ ldiagsetarc
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ xcurr ycurr xprev yprev ldiagangleto dup 180 sub
+ xprev yprev xcurr ycurr ldiagdistance
+ } ifelse
+ 6 index 6 index cvx exec
+ [ xprev yprev 5 -1 roll ]
+ backarrow length 0 eq
+ { /backarrow exch def }
+ { pop } ifelse
+ [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def
+ } if
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop
+ pop pop pop pop
+ backarrow length 0 eq { [ 0 0 0 ] } { backarrow } ifelse
+ fwdarrow length 0 eq { [ 0 0 0 ] } { fwdarrow } ifelse
+ end
+} def
+
+
+% stroke a path of the given shape in the given linestyle and dash length.
+% dashlength [ /linestyle ] [shape] ldiagdosegpath -
+/ldiagdosegpath
+{
+ 12 dict begin
+ 1 index /seg exch def
+ 1 index length /seglength exch def
+ 0 /segcount exch def
+ 0
+ /prevseen false def
+ /curveseen false def
+ /backarrow [] def
+ /fwdarrow [] def
+ {
+ ldiaggetnextitem
+ dup 0 eq { pop exit }
+ {
+ 1 eq
+ { /curveseen true def
+ /curve exch def
+ curve length 0 eq { /prevseen false def } if
+ }
+ { /ycurr exch def
+ /xcurr exch def
+ prevseen
+ { newpath xprev yprev moveto
+ curveseen
+ { curve length 4 eq
+ { xprev yprev
+ curve 0 get curve 1 get
+ curve 2 get curve 3 get
+ xcurr ycurr ldiagsetcurve
+ }
+ { xprev yprev xcurr ycurr
+ curve length 1 ge { curve 0 get } { 0 } ifelse
+ curve length 2 ge { curve 1 get } { 0 } ifelse
+ curve length 3 ge { curve 2 get } { true } ifelse
+ 7 1 roll
+ ldiagsetarc
+ } ifelse
+ }
+ { xcurr ycurr lineto
+ xcurr ycurr xprev yprev ldiagangleto dup 180 sub
+ xprev yprev xcurr ycurr ldiagdistance
+ } ifelse
+ 6 index seg segcount seglength mod get cvx exec
+ /segcount segcount 1 add def
+ [ xprev yprev 5 -1 roll ]
+ backarrow length 0 eq
+ { /backarrow exch def }
+ { pop } ifelse
+ [ xcurr ycurr 4 -1 roll ] /fwdarrow exch def
+ } if
+ /xprev xcurr def
+ /yprev ycurr def
+ /prevseen true def
+ /curveseen false def
+ } ifelse
+ } ifelse
+ } loop
+ pop pop pop pop
+ end
+} def
+
+% ldiagnodebegin: start of node parameters
+% ldiagnodebegin -
+/ldiagnodebegin
+{ % (Entering ldiagnodebegin) 0 ldiagdebugprint
+ ldiagmaxlabels dict begin
+} def
+
+% ldiagnodeend: end of node parameters (so do the node)
+% <outline> <dashlength> <style> <linewidth> <paint> ldiagnodeend -
+/ldiagnodeend
+{
+ % (Entering ldiagnodeend) 0 ldiagdebugprint
+ end % matches begin in ldiagnodebegin
+ 4 index gsave ldiagpaintpath grestore
+ 3 index ldiagsetpath clip newpath
+ 2 mul setlinewidth
+ 3 -1 roll ldiagdosegpath
+ % (Leaving ldiagnodeend) 0 ldiagdebugprint
+} def
+
+% ldiaglinkbegin: start of link parameters
+% <direct> ldiaglinkbegin -
+/ldiaglinkbegin
+{ ldiagmaxlabels dict begin
+ 1 eq /direct exch def
+} def
+
+% ldiaglinkend: end of link parameters (so do the link)
+% <outline> <dashlength> <style> <linewidth> ldiaglinkend -
+/ldiaglinkend
+{
+ end % matches begin in ldiaglinkbegin
+ setlinewidth
+ 3 -1 roll ldiagdosegpath
+} def
+
+% ldiagdoarrow: draw an arrow head of given form
+% dashlength /lstyle /pstyle hfrac height width [ <point> <angle> ] ldiagdoarrow -
+/ldiagdoarrow
+{ matrix currentmatrix 8 1 roll
+ dup 0 get 1 index 1 get translate
+ 2 get rotate
+ [ 2 index neg 2 index 0 0
+ 3 index 3 index neg
+ 1 index 10 index mul 0
+ 7 index 7 index ]
+ 4 1 roll pop pop pop
+ dup 3 1 roll
+ gsave ldiagpaintpath grestore ldiagdopath pop pop
+ setmatrix
+} def
+
+% arrow head styles
+/ldiagopen 0.0 def
+/ldiaghalfopen 0.5 def
+/ldiagclosed 1.0 def
+
+% stroke no arrows, forward, back, and both
+/ldiagnoarrow { pop pop pop pop pop pop pop pop } def
+/ldiagforward { 7 -1 roll ldiagdoarrow pop } def
+/ldiagback { 8 -2 roll pop ldiagdoarrow } def
+/ldiagboth { 8 -1 roll 7 copy ldiagdoarrow pop 7 -1 roll ldiagdoarrow } def
+
+% ldiagprevious: return previous point on path
+/ldiagprevious
+{ ldiagisnumbertype
+ { 2 copy }
+ { ldiagisarraytype
+ { 2 index 2 index }
+ { 0 0 }
+ ifelse
+ } ifelse
+} def
+
+% Tag dictionary operators
+%
+% Diag's tag dictionaries are kept on the same stack as other dictionaries,
+% since there is nowhere else to put them. However, they are managed like
+% a separate stack using the following operators:
+%
+% <tag> ldiagpushtagdict - Push a new, empty tag dictionary
+% ldiagtoptagdict dict Find the top tag dictionary
+% ldiagpoptagdict - Pop and destroy the top tag dictionary
+% ldiagpopuptagdict - Pop top tag dict and promote its entries
+% ldiagdebugtagdict - Debug print of dictionary stack
+%
+% They are distinguished from other dictionaries by containing /ldiagtagdict,
+% whose value is the <tag> which is used by ldiagpopuptagdict,
+% and they are hopefully never the target of any non-tag definition because
+% they are never the top dictionary, since push places the new dict second.
+
+/ldiagpushtagdict
+{ ldiagmaxlabels dict dup
+ currentdict end exch begin begin
+ exch /ldiagtagdict exch put
+} def
+
+/ldiagtoptagdict
+{ /ldiagtagdict where not
+ { (Diag internal error: no tag dictionary) show stop
+ } if
+} def
+
+/ldiagpoptagdict
+{
+ % (Entering poptagdict) 0 ldiagdebugprint
+ % ldiagdebugtagdict
+ mark
+ { currentdict end
+ dup /ldiagtagdict known
+ { exit
+ } if
+ } loop
+ pop
+ counttomark
+ { begin
+ } repeat
+ pop
+ % (Leaving poptagdict) 0 ldiagdebugprint
+ % ldiagdebugtagdict
+} def
+
+% promote labels from top tag dictionary to second top tag dictionary
+% each prefixed by <string>@ if <string> (value of /ldiagtagdict) is not empty
+% - ldiagpopuptagdict -
+/ldiagpopuptagdict
+{
+ ldiagtagdict
+ % (Entering ldiagpopuptagdict) 1 ldiagdebugprint
+ % ldiagdebugtagdict
+ ldiagtoptagdict ldiagpoptagdict ldiagtoptagdict exch
+ { exch 50 string cvs 3 index
+ dup length 0 ne
+ { (@) ldiagconcat
+ } if
+ exch ldiagconcat cvn exch 2 index 3 1 roll put
+ } forall
+ pop pop
+ % (Leaving ldiagpopuptagdict) 0 ldiagdebugprint
+ % ldiagdebugtagdict
+} def
+
+% debug tag dictionary stack
+/ldiagdebugtagdict
+{ (Entering ldiagdebugtagdict) 0 ldiagdebugprint
+ 30 array dictstack
+ { dup /ldiagtagdict known
+ { dup /ldiagtagdict get 0 ldiagdebugprint
+ { pop 50 string cvs ( ) exch ldiagconcat
+ dup 0 ldiagdebugprint
+ pop
+ }
+ forall
+ }
+ { pop (other) 0 ldiagdebugprint
+ } ifelse
+ } forall
+ (Leaving ldiagdebugtagdict) 0 ldiagdebugprint
+} def
+
+% label a point in top tag dictionary: <point> /name ldiagpointdef -
+/ldiagpointdef
+{
+ % (Entering ldiagpointdef) 3 ldiagdebugprint
+ [ 4 2 roll transform /itransform cvx ] cvx
+ ldiagtoptagdict 3 1 roll put
+ % (Leaving ldiagpointdef) 0 ldiagdebugprint
+} def
+
+% label an angle in top tag dictionary: <angle> /name ldiagangledef -
+/ldiagangledef
+{
+ % (Entering ldiagangledef) 2 ldiagdebugprint
+ exch ldiagfixangle ldiagtoptagdict 3 1 roll put
+ % (Leaving ldiagangledef) 0 ldiagdebugprint
+} def
+
+% add CIRCUM operator with this body: <array> ldiagcircumdef -
+/ldiagcircumdef
+{ % (Entering ldiagcircumdef) 1 ldiagdebugprint
+ /CIRCUM exch cvx
+ ldiagtoptagdict 3 1 roll put
+ % currentdict end
+ % 3 1 roll
+ % def
+ % begin
+ % (Leaving ldiagcircumdef) 0 ldiagdebugprint
+} def
+
+% show points (except CIRCUM and ANGLE): - ldiagshowpoints -
+/ldiagshowpoints
+{
+ % (Entering ldiagshowpoints) 0 ldiagdebugprint
+ ldiagtoptagdict
+ { 1 index 50 string cvs
+ (ldiagdebugpos) search
+ { pop pop pop pop pop }
+ {
+ (CIRCUM) search % if CIRCUM in key
+ { pop pop pop pop pop }
+ {
+ (ANGLE) search % if ANGLE in key
+ {
+ pop pop pop pop pop
+ }
+ {
+ (ldiagtagdict) search
+ {
+ pop pop pop pop pop
+ }
+ {
+ pop cvx exec
+ newpath 2.0 pt 0 360 arc 0 setgray fill pop
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ } forall
+ % (Leaving ldiagshowpoints) 0 ldiagdebugprint
+} def
+
+
+/ldiagshowtags
+{
+ % (Entering ldiagshowtags) 0 ldiagdebugprint
+ ldiagtoptagdict
+ { 1 index 50 string cvs
+ % dup 0 ldiagdebugprint
+ (ldiagdebugpos) search
+ { pop pop pop pop pop }
+ {
+ (CIRCUM) search % if CIRCUM in key
+ { pop pop pop pop pop }
+ {
+ (ANGLE) search % if ANGLE in key
+ {
+ pop pop pop pop pop
+ }
+ {
+ (ldiagtagdict) search
+ {
+ pop pop pop pop pop
+ }
+ {
+ pop cvx exec 2 copy
+ gsave
+ newpath 2.0 pt 0 360 arc 0 setgray fill
+ /Times-Roman findfont 8 pt scalefont setfont
+ translate 40 rotate 0.2 cm 0.1 cm moveto 20 string cvs show
+ grestore
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ } forall
+ % (Leaving ldiagshowtags) 0 ldiagdebugprint
+} def
+
+
+% show angles: - ldiagshowangles -
+/ldiagshowangles
+{
+ % (Entering ldiagshowangles) 0 ldiagdebugprint
+ ldiagtoptagdict
+ { 1 index 20 string cvs
+ % dup 0 ldiagdebugprint
+ (ldiagdebugpos) search
+ { pop pop pop pop pop }
+ {
+ (ldiagtagdict) search
+ {
+ pop pop pop pop pop
+ }
+ {
+ (CIRCUM) search % if CIRCUM in key
+ { pop pop pop pop pop }
+ {
+ (@ANGLE) search % if ANGLE in key, draw the angle at the point
+ {
+ % (showing ANGLE) 5 ldiagdebugprint
+ gsave exch pop exch pop cvx
+ % (about to execute) 1 ldiagdebugprint
+ exec translate rotate 0.8 0.8 scale pop
+ newpath 0 0 2.0 pt 0 360 arc 0 setgray fill
+ newpath 4 pt 0 moveto 9 pt 0 lineto
+ 9 pt 1.5 pt lineto 11 pt 0 lineto 9 pt -1.5 pt lineto
+ 9 pt 0 lineto [] 0 setdash 4 pt setlinewidth 0 setlinejoin
+ stroke grestore
+ % (finished ANGLE) 5 ldiagdebugprint
+ }
+ {
+ % else must be a point, we aren't showing those
+ pop pop pop
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ } forall
+ % (Leaving ldiagshowangles) 0 ldiagdebugprint
+} def
+
+% fix an angle to 0 <= res < 360: <angle> ldiagfixangle <angle>
+/ldiagfixangle
+{
+ % (Entering ldiagfixangle) 1 ldiagdebugprint
+ { dup 0 ge { exit } if
+ 360 add
+ } loop
+ { dup 360 lt { exit } if
+ 360 sub
+ } loop
+ % (Leaving ldiagfixangle) 1 ldiagdebugprint
+} def
+
+% find point on circumference of box: alpha a b ldiagboxcircum x y
+/ldiagboxcircum
+{
+ % (Entering ldiagboxcircum) 3 ldiagdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ ldiagfixangle /alpha exch def
+ 0 0 a b ldiagangleto /theta exch def
+
+ % if alpha <= theta, return (a, a*tan(alpha))
+ alpha theta le
+ { a a alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 180 - theta, return (b*cot(alpha), b)
+ alpha 180 theta sub le
+ { b alpha cos mul alpha sin div b }
+ {
+ % else if alpha <= 180 + theta, return (-a, -a*tan(alpha))
+ alpha 180 theta add le
+ { a neg a neg alpha sin mul alpha cos div }
+ {
+ % else if alpha <= 360 - theta, return (-b*cot(alpha), -b)
+ alpha 360 theta sub le
+ { b neg alpha cos mul alpha sin div b neg }
+ {
+ % else 360 - theta <= alpha, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving ldiagboxcircum) 2 ldiagdebugprint
+} def
+
+% find quadratic roots (assume a != 0): a b c ldiagqroots x1 x2 2
+% or x2 1
+% or 0
+/ldiagqroots
+{
+ 4 dict begin
+ /c exch def
+ /b exch def
+ /a exch def
+ /disc b b mul 4 a c mul mul sub def
+ disc 0 lt
+ { 0
+ }
+ { disc 0 eq
+ { b neg 2 a mul div
+ 1
+ }
+ { b neg disc sqrt add 2 a mul div
+ b neg disc sqrt sub 2 a mul div
+ 2
+ }
+ ifelse
+ }
+ ifelse
+ end
+} def
+
+% work our which quadrant: <angle> ldiagquadrant <0-3>
+/ldiagquadrant
+{ dup 90 lt
+ { pop 0
+ }
+ { dup 180 lt
+ { pop 1
+ }
+ { 270 lt
+ { 2
+ }
+ { 3
+ } ifelse
+ } ifelse
+ } ifelse
+} def
+
+% find curvebox circum, assuming upper right quadrant: alpha a b xmk ldiagcb x y
+/ldiagcb
+{
+ 6 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ /alpha exch def
+ /theta1 0 0 a b xmk sub ldiagangleto def
+ /theta2 0 0 a xmk sub b ldiagangleto def
+ alpha theta1 le
+ { % if alpha <= theta1, return (a, a*tan(alpha))
+ a a alpha sin mul alpha cos div
+ }
+ { alpha theta2 ge
+ { % else if alpha > theta2, return (b*cot(alpha), b)
+ b alpha cos mul alpha sin div b
+ }
+ {
+ % else, return the intersection of line and circle
+ a xmk sub b xmk sub xmk 0 0 alpha ldiagcircleintersect
+ dup 0 eq
+ { % should never happen, just return any reasonable point
+ pop
+ a b 0.5 ldiagpmul
+ }
+ { 1 eq
+ { % should never happen, just return the point on top of stack
+ }
+ { % the usual case, two points on stack, return the larger
+ ldiagpmax
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+} def
+
+% find point on circumference of curvebox: alpha a b xmk ldiagcurveboxcircum x y
+/ldiagcurveboxcircum
+{
+ % (Entering ldiagcurveboxcircum) 4 ldiagdebugprint
+ 5 dict begin
+ /xmk exch def
+ /b exch def
+ /a exch def
+ ldiagfixangle /alpha exch def
+
+ % work out which quadrant we are in, and reflect accordingly
+ /quad alpha ldiagquadrant def
+ quad 0 eq
+ { alpha a b xmk ldiagcb
+ }
+ { quad 1 eq
+ { 180 alpha sub a b xmk ldiagcb exch neg exch
+ }
+ { quad 2 eq
+ { alpha 180 sub a b xmk ldiagcb neg exch neg exch
+ }
+ { 360 alpha sub a b xmk ldiagcb neg
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving ldiagcurveboxcircum) 2 ldiagdebugprint
+} def
+
+% find point on circumference of diamond: alpha a b ldiagdiamondcircum x y
+/ldiagdiamondcircum
+{
+ % (Entering ldiagdiamondcircum) 3 ldiagdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ ldiagfixangle /alpha exch def
+ b alpha cos abs mul a alpha sin abs mul add /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving ldiagdiamondcircum) 2 ldiagdebugprint
+} def
+
+% find point on circumference of ellipse: alpha a b ldiagellipsecircum x y
+/ldiagellipsecircum
+{
+ % (Entering ldiagellipsecircum) 3 ldiagdebugprint
+ 4 dict begin
+ /b exch def
+ /a exch def
+ ldiagfixangle /alpha exch def
+ b alpha cos mul dup mul a alpha sin mul dup mul add sqrt /denom exch def
+ a b mul alpha cos mul denom div
+ a b mul alpha sin mul denom div
+ end
+ % (Leaving ldiagellipsecircum) 2 ldiagdebugprint
+} def
+
+% find point on circumference of isosceles: alpha a b ldiagisoscelescircum x y
+/ldiagisoscelescircum
+{
+ % (Entering ldiagisoscelescircum) 3 ldiagdebugprint
+ 7 dict begin
+ /b exch def
+ /a exch def
+ /alpha exch ldiagfixangle def
+ /theta1 90 def
+ /theta2 a b 0.5 ldiagpmul 0 0 ldiagangleto def
+ /theta3 a b 0.5 ldiagpmul a 0 ldiagangleto def
+ alpha theta1 ge alpha theta2 le and
+ { 0 0 a 2 div b
+ }
+ { alpha theta2 ge alpha theta3 le and
+ { 0 0 a 0
+ }
+ { a 0 a 2 div b
+ } ifelse
+ } ifelse
+ a 2 div b 2 div 2 copy 1 ft alpha ldiagatangle ldiaglineintersect
+ a 2 div b 2 div 4 2 roll ldiagpsub
+ end
+ % (Leaving ldiagisoscelescircum) 2 ldiagdebugprint
+} def
+
+% find point of intersection of two lines each defined by two points
+% x1 y1 x2 y2 x3 y3 x4 y4 ldiaglineintersect x y
+/ldiaglineintersect
+{
+ % (Entering ldiaglineintersect) 8 ldiagdebugprint
+ 13 dict begin
+ /y4 exch def
+ /x4 exch def
+ /y3 exch def
+ /x3 exch def
+ /y2 exch def
+ /x2 exch def
+ /y1 exch def
+ /x1 exch def
+ x2 x1 sub /x21 exch def
+ x4 x3 sub /x43 exch def
+ y2 y1 sub /y21 exch def
+ y4 y3 sub /y43 exch def
+ y21 x43 mul y43 x21 mul sub /det exch def
+
+ % calculate x
+ y21 x43 mul x1 mul
+ y43 x21 mul x3 mul sub
+ y3 y1 sub x21 mul x43 mul add
+ det div
+
+ % calculate y
+ x21 y43 mul y1 mul
+ x43 y21 mul y3 mul sub
+ x3 x1 sub y21 mul y43 mul add
+ det neg div
+
+ end
+ % (Leaving ldiaglineintersect) 2 ldiagdebugprint
+} def
+
+% find point on circumference of polygon
+% alpha radius num theta ldiagpolycircum x y
+/ldiagpolycircum
+{
+ % (Entering ldiagpolycircum) 4 ldiagdebugprint
+ 13 dict begin
+ /theta exch def
+ /num exch def
+ /radius exch def
+ /alpha exch def
+
+ % calculate delta, the angle from theta to alpha
+ alpha theta sub ldiagfixangle
+
+ % calculate the angle which is the multiple of 360/num closest to delta
+ 360 num div div truncate 360 num div mul theta add /anglea exch def
+
+ % calculate the next multiple of 360/num after anglea
+ anglea 360 num div add /angleb exch def
+
+ % intersect the line through these two points with the alpha line
+ anglea cos anglea sin angleb cos angleb sin
+ 0 0 alpha cos 2 mul alpha sin 2 mul
+ ldiaglineintersect radius ldiagpmul
+
+ end
+ % (Leaving ldiagpolycircum) 2 ldiagdebugprint
+} def
+
+% find point of intersection of a line and a circle
+% x0 y0 r x1 y1 theta ldiagcircleintersect xa ya xb yb 2
+% or xb yb 1
+% or 0
+/ldiagcircleintersect
+{
+ % (Entering ldiagcircleintersect) 6 ldiagdebugprint
+ 15 dict begin
+ /theta exch def
+ /y1 exch def
+ /x1 exch def
+ /r exch def
+ /y0 exch def
+ /x0 exch def
+
+ % if sin(theta) = 0 then line is horizontal and y must be y1
+ theta sin abs 0.00001 lt
+ {
+ /a 1 def
+ /b -2 x0 mul def
+ /c x0 dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c ldiagqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 1
+ }
+ { y1 exch y1 2
+ } ifelse
+ } ifelse
+ }
+ {
+ /ct theta cos theta sin div def
+ /a ct ct mul 1 add def
+ /b ct x1 x0 sub mul y1 add y0 sub 2 mul def
+ /c x1 x0 sub dup mul y1 y0 sub dup mul add r dup mul sub def
+ a b c ldiagqroots dup
+ 0 eq
+ { pop
+ 0
+ }
+ { 1 eq
+ { y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xb yb 1
+ }
+ { y1 add /ya exch def
+ ya y1 sub ct mul x1 add /xa exch def
+ y1 add /yb exch def
+ yb y1 sub ct mul x1 add /xb exch def
+ xa ya xb yb 2
+ } ifelse
+ } ifelse
+ } ifelse
+ end
+ % (Leaving ldiagcircleintersect) 1 ldiagdebugprint
+} def
+
+% find line which is the perpendicular bisector of two points, defined
+% by two points
+% x1 y1 x2 y2 ldiaglinebetween x3 y3 x4 y4
+/ldiaglinebetween
+{ % (Entering ldiaglinebetween) 4 ldiagdebugprint
+ /y2 exch def /x2 exch def
+ /y1 exch def /x1 exch def
+
+ % let x3, y3 be the point halfway between the two points
+ x1 y1 x2 y2 ldiagpadd 0.5 ldiagpmul
+ /y3 exch def /x3 exch def
+
+ % find a point perpendicular to x3, y3
+ x3 y3 50 x1 y1 x2 y2 ldiagangleto 90 dg add ldiagatangle
+
+ % plus x3 y3 gives the two points
+ x3 y3
+
+ % (Leaving ldiaglinebetween) 4 ldiagdebugprint
+} def
+
+% find <proc>@<string>: <proc> <string> ldiagfindlabel <any> true
+% <proc> <string> false
+/ldiagfindlabel
+{
+ % (Entering ldiagfindlabel) 2 ldiagdebugprint
+ exch dup length 1 ne
+ { exch false
+ % (Leaving ldiagfindabel (length not 1)) 3 ldiagdebugprint
+ }
+ { dup 0 get type /nametype ne
+ { exch false
+ % (Leaving ldiagfindabel (not a name)) 3 ldiagdebugprint
+ }
+ { dup 0 get 50 string cvs (@) ldiagconcat 2 index ldiagconcat dup where
+ { exch get exch pop exch pop cvx exec true
+ % (Leaving ldiagfindlabel with success) 100 ldiagdebugprint
+ }
+ {
+ pop exch false
+ % (Leaving ldiagfindabel (concat not sensible)) 3 ldiagdebugprint
+ } ifelse
+ } ifelse
+ } ifelse
+} bind def
+
+% execute <proc>@<string> or else default: <proc> <string> ldiagdolabel <various>
+/ldiagdolabel
+{
+ % (Entering ldiagdolabel) 2 ldiagdebugprint
+ ldiagfindlabel not
+ {
+ dup (CIRCUM) eq
+ { pop pop pop 0 0
+ }
+ {
+ dup (ANGLE) eq
+ { pop pop 0
+ }
+ { pop cvx exec
+ } ifelse
+ } ifelse
+ } if
+ % (Leaving ldiagdolabel) 2 ldiagdebugprint
+} bind def
+
+% execute a proc depending on whether number is negative, zero, or positive
+% procneg proczero procpos number ldiagsigncase <anything>
+/ldiagsigncase
+{
+ % (Entering ldiagsigncase) 4 ldiagdebugprint
+ dup 0 lt
+ { pop pop pop exec
+ }
+ { 0 gt
+ { exch pop exch pop exec
+ }
+ { pop exch pop exec
+ } ifelse
+ } ifelse
+ % (Leaving ldiagsigncase) 0 ldiagdebugprint
+} bind def
+
+% execute proci if angle is in ith quadrant
+% proc45 proc270 proc180 proc90 proc0 proc315 proc225 proc135 angle ldiagquadcase <anything>
+/ldiagquadcase
+{
+ % (Entering ldiagquadcase) 9 ldiagdebugprint
+ round ldiagfixangle cvi dup 90 mod 0 eq
+ { 90 idiv 4 add } { 90 idiv } ifelse
+ 8 exch roll pop pop pop pop pop pop pop exec
+ % (Leaving ldiagquadcase) 0 ldiagdebugprint
+} bind def
+
+% decode Lout length into PostScript length
+% <string> ldiagdecodelength <number>
+/ldiagdecodelength
+{
+ % (Entering ldiagdecodelength) 1 ldiagdebugprint
+ (f) search
+ { exch pop exch pop cvr ft
+ }
+ { (c) search
+ { exch pop exch pop cvr cm
+ }
+ { (p) search
+ { exch pop exch pop cvr pt
+ }
+ { (m) search
+ { exch pop exch pop cvr em
+ }
+ { (s) search
+ { exch pop exch pop cvr sp
+ }
+ { (v) search
+ { exch pop exch pop cvr vs
+ }
+ { (i) search
+ { exch pop exch pop cvr in
+ }
+ { pop 0
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ } ifelse
+ % (Leaving ldiagdecodelength) 1 ldiagdebugprint
+} def
+
+% implement aabout function
+% logical form: <circum> <extra> <centre> aabout <point>
+% actual form: { <labelorpoint> } cvlit <length> [ <point> ] cvx aabout <point>
+/ldiagaabout
+{
+ /centre exch def
+ /extra exch def
+ /circum exch def
+
+ /ZXCTR [ centre ] cvx def
+ /ZFCTR [ circum (CTR) ldiagdolabel ] cvx def
+ /ZAREF ZFCTR ZXCTR ldiagangleto def
+ /ZAMIN 0 dg def
+ /ZPMIN [ circum (CTR) ldiagdolabel ZAREF ZAMIN sub
+ circum (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 extra ZAREF ZAMIN sub ldiagatangle
+ ldiagpadd ] cvx def
+
+ /ZAMAX 90 dg def
+ /ZPMAX [ circum (CTR) ldiagdolabel ZAREF ZAMAX sub
+ circum (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 extra ZAREF ZAMAX sub ldiagatangle
+ ldiagpadd ] cvx def
+
+ 1 1 20
+ { /xval exch def
+ /ZAMID ZAMIN ZAMAX add 0.5 mul def
+ /ZPMID [ circum (CTR) ldiagdolabel ZAREF ZAMID sub
+ circum (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 extra ZAREF ZAMID sub ldiagatangle
+ ldiagpadd ] cvx def
+ ZPMID ZXCTR ldiagdistance ZFCTR ZXCTR ldiagdistance gt
+ {
+ /ZAMAX [ ZAMID ] cvx def
+ /ZPMAX [ ZPMID ] cvx def
+ }
+ {
+ /ZAMIN [ ZAMID ] cvx def
+ /ZPMIN [ ZPMID ] cvx def
+ } ifelse
+ } for
+ ZPMID
+} def
+
+% implement cabout function
+% logical form: <circum> <extra> <centre> cabout <point>
+% actual form: { <labelorpoint> } cvlit <length> [ <point> ] cvx cabout <point>
+/ldiagcabout
+{
+ /centre exch def
+ /extra exch def
+ /circum exch def
+
+ /ZXCTR [ centre ] cvx def
+ /ZFCTR [ circum (CTR) ldiagdolabel ] cvx def
+ /ZAREF ZFCTR ZXCTR ldiagangleto def
+ /ZAMIN 0 dg def
+ /ZPMIN [ circum (CTR) ldiagdolabel ZAREF ZAMIN add
+ circum (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 extra ZAREF ZAMIN add ldiagatangle
+ ldiagpadd ] cvx def
+
+ /ZAMAX 90 dg def
+ /ZPMAX [ circum (CTR) ldiagdolabel ZAREF ZAMAX add
+ circum (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 extra ZAREF ZAMAX add ldiagatangle
+ ldiagpadd ] cvx def
+
+ 1 1 20
+ { /xval exch def
+ /ZAMID ZAMIN ZAMAX add 0.5 mul def
+ /ZPMID [ circum (CTR) ldiagdolabel ZAREF ZAMID add
+ circum (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 extra ZAREF ZAMID add ldiagatangle
+ ldiagpadd ] cvx def
+ ZPMID ZXCTR ldiagdistance ZFCTR ZXCTR ldiagdistance gt
+ {
+ /ZAMAX [ ZAMID ] cvx def
+ /ZPMAX [ ZPMID ] cvx def
+ }
+ {
+ /ZAMIN [ ZAMID ] cvx def
+ /ZPMIN [ ZPMID ] cvx def
+ } ifelse
+ } for
+ ZPMID
+} def
+
+% fromarrowlength toarrowlength { from } { to } xindent zindent ldiaglinepath -
+/ldiaglinepath
+{
+ % (entering ldiaglinepath) 0 ldiagdebugprint
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagangleto
+ /FROM@ANGLE ldiagangledef
+ from (CTR) ldiagdolabel FROM@ANGLE from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength FROM@ANGLE ldiagatangle ldiagpadd
+ /FROM ldiagpointdef
+
+ FROM@ANGLE /TO@ANGLE ldiagangledef
+ to (CTR) ldiagdolabel TO@ANGLE 180 dg sub to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength TO@ANGLE 180 dg sub ldiagatangle ldiagpadd /TO ldiagpointdef
+
+ FROM 0.5 ldiagpmul TO 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+ FROM@ANGLE /LMID@ANGLE ldiagangledef
+
+ /XINDENT xindent FROM LMID ldiagdistance ldiagmin def
+ FROM 0 0 XINDENT FROM@ANGLE ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ FROM@ANGLE /LFROM@ANGLE ldiagangledef
+
+ /ZINDENT zindent TO LMID ldiagdistance ldiagmin def
+ 0 0 ZINDENT FROM@ANGLE ldiagatangle TO ldiagpsub /LTO ldiagpointdef
+ FROM@ANGLE /LTO@ANGLE ldiagangledef
+
+ direct { FROM TO } { FROM LFROM LMID LTO TO } ifelse
+
+ % (leaving ldiaglinepath) 0 ldiagdebugprint
+} def
+
+% fromarrowlength toarrowlength { from } { to } xindent zindent pathgap ldiagdoublelinepath -
+/ldiagdoublelinepath
+{
+ % (entering ldiagdoublelinepath) 0 ldiagdebugprint
+ /pathgap exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagangleto
+ /FROM@ANGLE ldiagangledef
+ from (CTR) ldiagdolabel FROM@ANGLE from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength FROM@ANGLE ldiagatangle ldiagpadd
+ /FROM ldiagpointdef
+
+ FROM@ANGLE /TO@ANGLE ldiagangledef
+ to (CTR) ldiagdolabel TO@ANGLE 180 dg sub to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength TO@ANGLE 180 dg sub ldiagatangle ldiagpadd /TO ldiagpointdef
+
+ FROM 0.5 ldiagpmul TO 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+ FROM@ANGLE /LMID@ANGLE ldiagangledef
+
+ /XINDENT xindent FROM LMID ldiagdistance ldiagmin def
+ FROM 0 0 XINDENT FROM@ANGLE ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ FROM@ANGLE /LFROM@ANGLE ldiagangledef
+
+ /ZINDENT zindent TO LMID ldiagdistance ldiagmin def
+ 0 0 ZINDENT FROM@ANGLE ldiagatangle TO ldiagpsub /LTO ldiagpointdef
+ FROM@ANGLE /LTO@ANGLE ldiagangledef
+
+ direct {
+ FROM pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle
+ TO pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle
+ []
+ FROM pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle
+ TO pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle
+ }
+ {
+ FROM pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle
+ LFROM pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle
+ LMID pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle
+ LTO pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle
+ TO pathgap 2 div FROM@ANGLE 90 dg sub ldiagatangle
+ []
+ FROM pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle
+ LFROM pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle
+ LMID pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle
+ LTO pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle
+ TO pathgap 2 div FROM@ANGLE 90 dg add ldiagatangle
+ } ifelse
+
+ % (leaving ldiagdoublelinepath) 0 ldiagdebugprint
+} def
+
+% fromarrowlen toarrowlen { from } { to } xindent zindent bias ldiagacurvepath -
+/ldiagacurvepath
+{
+ % (entering ldiagacurvepath) 0 ldiagdebugprint
+ /bias exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ %/B1 bias 0.02 ft ldiagmax def
+ %/B2 from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagdistance 0.5 mul def
+ %/BIAS B1 B2 ldiagmin def
+ /BIAS bias 0.02 ft ldiagmax def
+ /XMID [ from (CTR) ldiagdolabel 0.5 ldiagpmul
+ to (CTR) ldiagdolabel 0.5 ldiagpmul ldiagpadd ] cvx def
+ /XTOP [ XMID 0 0 BIAS from (CTR) ldiagdolabel to (CTR) ldiagdolabel
+ ldiagangleto 90 dg sub ldiagatangle ldiagpadd ] cvx def
+ /CTR [ from (CTR) ldiagdolabel XTOP ldiaglinebetween
+ to (CTR) ldiagdolabel XTOP ldiaglinebetween
+ ldiaglineintersect ] cvx def
+
+ from fromarrowlength [ CTR ] cvx ldiagaabout /FROM ldiagpointdef
+ from (CTR) ldiagdolabel FROM ldiagdistance 0 gt
+ { from (CTR) ldiagdolabel FROM ldiagangleto
+ }
+ { CTR FROM ldiagangleto 90 dg add
+ } ifelse /FROM@ANGLE ldiagangledef
+
+ to toarrowlength [ CTR ] cvx ldiagcabout /TO ldiagpointdef
+ TO to (CTR) ldiagdolabel ldiagdistance 0 gt
+ { TO to (CTR) ldiagdolabel ldiagangleto
+ }
+ { CTR TO ldiagangleto 90 dg add
+ } ifelse /TO@ANGLE ldiagangledef
+
+ /RADIUS CTR FROM ldiagdistance def
+ CTR 0 0 RADIUS CTR FROM ldiagangleto 360 dg CTR TO ldiagangleto
+ add CTR FROM ldiagangleto sub cvi 360 mod 0.5 mul add
+ ldiagatangle ldiagpadd /LMID ldiagpointdef
+ CTR LMID ldiagangleto 90 dg add /LMID@ANGLE ldiagangledef
+
+ /XINDENT xindent FROM LMID ldiagdistance ldiagmin def
+ CTR 0 0 RADIUS CTR FROM 0 0 XINDENT FROM@ANGLE ldiagatangle
+ ldiagpadd ldiagangleto ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ CTR LFROM ldiagangleto 90 dg add /LFROM@ANGLE ldiagangledef
+
+ /ZINDENT zindent TO LMID ldiagdistance ldiagmin def
+ CTR 0 0 RADIUS CTR TO 0 0 ZINDENT TO@ANGLE 180 dg add
+ ldiagatangle ldiagpadd ldiagangleto ldiagatangle ldiagpadd /LTO ldiagpointdef
+ CTR LTO ldiagangleto 90 dg add /LTO@ANGLE ldiagangledef
+
+ direct
+ { FROM [CTR] TO }
+ { FROM [CTR] LFROM [CTR] LMID [CTR] LTO [CTR] TO }
+ ifelse
+
+ % (leaving ldiagacurvepath) 0 ldiagdebugprint
+} def
+
+% fromarrowlen toarrowlen { from } { to } xindent zindent bias ldiagccurvepath -
+/ldiagccurvepath
+{
+ % (entering ldiagccurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /bias exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ %/B1 bias 0.02 ft ldiagmax def
+ %/B2 from (CTR) ldiagdolabel to (CTR) ldiagdolabel ldiagdistance 0.5 mul def
+ %/BIAS B1 B2 ldiagmin def
+ /BIAS bias 0.02 ft ldiagmax def
+ /XMID [ from (CTR) ldiagdolabel 0.5 ldiagpmul
+ to (CTR) ldiagdolabel 0.5 ldiagpmul ldiagpadd ] cvx def
+ /XTOP [ XMID 0 0 BIAS from (CTR) ldiagdolabel to (CTR) ldiagdolabel
+ ldiagangleto 90 dg add ldiagatangle ldiagpadd ] cvx def
+ /CTR [ from (CTR) ldiagdolabel XTOP ldiaglinebetween
+ to (CTR) ldiagdolabel XTOP ldiaglinebetween ldiaglineintersect ] cvx def
+
+ from fromarrowlength [ CTR ] cvx ldiagcabout /FROM ldiagpointdef
+ from (CTR) ldiagdolabel FROM ldiagdistance 0 gt
+ { from (CTR) ldiagdolabel FROM ldiagangleto }
+ { CTR FROM ldiagangleto 90 dg sub }
+ ifelse /FROM@ANGLE ldiagangledef
+
+ to toarrowlength [ CTR ] cvx ldiagaabout /TO ldiagpointdef
+ TO to (CTR) ldiagdolabel ldiagdistance 0 gt
+ { TO to (CTR) ldiagdolabel ldiagangleto }
+ { CTR TO ldiagangleto 90 dg sub }
+ ifelse /TO@ANGLE ldiagangledef
+
+ /RADIUS [ CTR FROM ldiagdistance ] cvx def
+ CTR 0 0 RADIUS CTR TO ldiagangleto 360 dg CTR FROM ldiagangleto add
+ CTR TO ldiagangleto sub cvi 360 cvi mod 2 div add ldiagatangle
+ ldiagpadd /LMID ldiagpointdef
+ CTR LMID ldiagangleto 90 dg sub /LMID@ANGLE ldiagangledef
+
+ /XINDENT [ xindent FROM LMID ldiagdistance ldiagmin ] cvx def
+ CTR 0 0 RADIUS CTR FROM 0 0 XINDENT FROM@ANGLE ldiagatangle ldiagpadd
+ ldiagangleto ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ CTR LFROM ldiagangleto 90 dg sub /LFROM@ANGLE ldiagangledef
+
+ /ZINDENT [ zindent TO LMID ldiagdistance ldiagmin ] cvx def
+ CTR 0 0 RADIUS CTR TO 0 0 ZINDENT TO@ANGLE 180 dg add ldiagatangle
+ ldiagpadd ldiagangleto ldiagatangle ldiagpadd /LTO ldiagpointdef
+ CTR LTO ldiagangleto 90 dg sub /LTO@ANGLE ldiagangledef
+
+ direct
+ { FROM [CTR clockwise] TO }
+ { FROM [CTR clockwise] LFROM [CTR clockwise]
+ LMID [CTR clockwise] LTO [CTR clockwise] TO }
+ ifelse
+ % (leaving ldiagccurvepath) 0 ldiagdebugprint
+} def
+
+
+% farr tarr { from } { to } xindent zindent [frompt] [topt] ldiagbezierpath -
+/ldiagbezierpath
+{
+ % (entering ldiagbezierpath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ cvx /topt exch def
+ cvx /frompt exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ from (CTR) ldiagdolabel frompt ldiagangleto /FROM@ANGLE ldiagangledef
+ from (CTR) ldiagdolabel FROM@ANGLE from (CIRCUM) ldiagdolabel
+ ldiagpadd 0 0 fromarrowlength FROM@ANGLE ldiagatangle ldiagpadd
+ /FROM ldiagpointdef
+
+ topt to (CTR) ldiagdolabel ldiagangleto /TO@ANGLE ldiagangledef
+ to (CTR) ldiagdolabel TO@ANGLE 180 dg add to (CIRCUM) ldiagdolabel
+ ldiagpadd 0 0 toarrowlength TO@ANGLE 180 dg add ldiagatangle ldiagpadd
+ /TO ldiagpointdef
+
+ FROM 0 0 xindent FROM@ANGLE ldiagatangle ldiagpadd
+ /LFROM ldiagpointdef
+ FROM@ANGLE /LFROM@ANGLE ldiagangledef
+
+ TO 0 0 zindent TO@ANGLE 180 dg add ldiagatangle ldiagpadd
+ /LTO ldiagpointdef
+ TO@ANGLE /LTO@ANGLE ldiagangledef
+
+ FROM TO ldiagpadd frompt ldiagpadd topt ldiagpadd 0.25 ldiagpmul
+ /LMID ldiagpointdef
+
+ FROM [frompt topt] TO
+
+ % (leaving ldiagbezierpath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+
+% farr tarr { from } { to } xindent zindent ldiagvhlinepath -
+/ldiagvhlinepath
+{
+ % (entering ldiagvhlinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ /CTR [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel exch pop ] cvx def
+ /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+ /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+
+ from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef
+ FANG /FROM@ANGLE ldiagangledef
+
+ to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef
+ TANG 180 dg add /TO@ANGLE ldiagangledef
+
+ /FDIST [ FROM CTR ldiagdistance ] cvx def
+ /TDIST [ TO CTR ldiagdistance ] cvx def
+ /XINDENT [ xindent FDIST ldiagmin ] cvx def
+ /ZINDENT [ zindent TDIST ldiagmin ] cvx def
+ FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ FROM@ANGLE /LFROM@ANGLE ldiagangledef
+ TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef
+ TO@ANGLE /LTO@ANGLE ldiagangledef
+
+ CTR /LMID ldiagpointdef
+ 0 0 1 ft FANG 180 dg add ldiagatangle
+ 0 0 1 ft TANG 180 dg add ldiagatangle
+ ldiagangleto /LMID@ANGLE ldiagangledef
+
+ FROM LFROM LMID LTO TO
+
+ % (leaving ldiagvhlinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+% farr tarr { from } { to } xindent zindent radius ldiagvhcurvepath -
+/ldiagvhcurvepath
+{
+ % (entering ldiagvhcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /radius exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ /CTR [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel exch pop ] cvx def
+ /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+ /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+
+ from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef
+ FANG /FROM@ANGLE ldiagangledef
+
+ to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef
+ TANG 180 dg add /TO@ANGLE ldiagangledef
+
+ /FDIST [ FROM CTR ldiagdistance ] cvx def
+ /TDIST [ TO CTR ldiagdistance ] cvx def
+ /RADIUS [ radius FDIST TDIST ldiagmin ldiagmin ] cvx def
+ /XINDENT [ xindent FDIST RADIUS sub ldiagmin ] cvx def
+ /ZINDENT [ zindent TDIST RADIUS sub ldiagmin ] cvx def
+
+ FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ FROM@ANGLE /LFROM@ANGLE ldiagangledef
+ TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef
+ TO@ANGLE /LTO@ANGLE ldiagangledef
+
+ /FCTR [ CTR 0 0 RADIUS FROM@ANGLE 180 dg add ldiagatangle ldiagpadd ] cvx def
+ /TCTR [ CTR 0 0 RADIUS TO@ANGLE ldiagatangle ldiagpadd ] cvx def
+ /XCTR [ CTR 0 0 RADIUS FROM@ANGLE 180 dg add ldiagatangle ldiagpadd
+ 0 0 RADIUS TO@ANGLE ldiagatangle ldiagpadd ] cvx def
+ XCTR 0 0 RADIUS XCTR CTR ldiagangleto ldiagatangle ldiagpadd
+ /LMID ldiagpointdef
+ FCTR TCTR ldiagangleto /LMID@ANGLE ldiagangledef
+
+ FROM LFROM FCTR
+ {[XCTR clockwise]} {} {} {} {} {[XCTR]} {[XCTR clockwise]} {[XCTR]}
+ FCTR TCTR ldiagangleto ldiagquadcase
+ TCTR LTO TO
+
+ % (leaving ldiagvhcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+% farr tarr { from } { to } xindent zindent ldiaghvlinepath -
+/ldiaghvlinepath
+{
+ % (entering ldiaghvlinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ /CTR [ to (CTR) ldiagdolabel pop from (CTR) ldiagdolabel exch pop ] cvx def
+ /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+ /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+
+ from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef
+ FANG /FROM@ANGLE ldiagangledef
+
+ to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef
+ TANG 180 dg add /TO@ANGLE ldiagangledef
+
+ /FDIST [ FROM CTR ldiagdistance ] cvx def
+ /TDIST [ TO CTR ldiagdistance ] cvx def
+ /XINDENT [ xindent FDIST ldiagmin ] cvx def
+ /ZINDENT [ zindent TDIST ldiagmin ] cvx def
+
+ FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ FROM@ANGLE /LFROM@ANGLE ldiagangledef
+ TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef
+ TO@ANGLE /LTO@ANGLE ldiagangledef
+
+ CTR /LMID ldiagpointdef
+ 0 0 1 ft FANG 180 dg add ldiagatangle
+ 0 0 1 ft TANG 180 dg add ldiagatangle ldiagangleto
+ /LMID@ANGLE ldiagangledef
+
+ FROM LFROM LMID LTO TO
+
+ % (leaving ldiaghvlinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+% farr tarr { from } { to } xindent zindent radius ldiaghvcurvepath -
+/ldiaghvcurvepath
+{
+ % (entering ldiaghvcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /radius exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ /CTR [ to (CTR) ldiagdolabel pop from (CTR) ldiagdolabel exch pop ] cvx def
+ /FANG [ from (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+ /TANG [ to (CTR) ldiagdolabel CTR ldiagangleto ] cvx def
+
+ from (CTR) ldiagdolabel FANG from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength FANG ldiagatangle ldiagpadd /FROM ldiagpointdef
+ FANG /FROM@ANGLE ldiagangledef
+
+ to (CTR) ldiagdolabel TANG to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength TANG ldiagatangle ldiagpadd /TO ldiagpointdef
+ TANG 180 dg add /TO@ANGLE ldiagangledef
+
+ /FDIST [ FROM CTR ldiagdistance ] cvx def
+ /TDIST [ TO CTR ldiagdistance ] cvx def
+ /RADIUS [ radius FDIST TDIST ldiagmin ldiagmin ] cvx def
+ /XINDENT [ xindent FDIST RADIUS sub ldiagmin ] cvx def
+ /ZINDENT [ zindent TDIST RADIUS sub ldiagmin ] cvx def
+ FROM 0 0 XINDENT FANG ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ FROM@ANGLE /LFROM@ANGLE ldiagangledef
+ TO 0 0 ZINDENT TANG ldiagatangle ldiagpadd /LTO ldiagpointdef
+ TO@ANGLE /LTO@ANGLE ldiagangledef
+
+ /FCTR [ CTR 0 0 RADIUS FROM@ANGLE 180 dg add ldiagatangle ldiagpadd ] cvx def
+ /TCTR [ CTR 0 0 RADIUS TO@ANGLE ldiagatangle ldiagpadd ] cvx def
+ /XCTR [ CTR 0 0 RADIUS FROM@ANGLE 180 dg add ldiagatangle ldiagpadd
+ 0 0 RADIUS TO@ANGLE ldiagatangle ldiagpadd ] cvx def
+ XCTR 0 0 RADIUS XCTR CTR ldiagangleto ldiagatangle ldiagpadd
+ /LMID ldiagpointdef
+ FCTR TCTR ldiagangleto /LMID@ANGLE ldiagangledef
+
+ FROM LFROM FCTR
+ {[XCTR]} {} {} {} {} {[XCTR clockwise]} {[XCTR]} {[XCTR clockwise]}
+ FCTR TCTR ldiagangleto ldiagquadcase
+ TCTR LTO TO
+
+ % (leaving ldiaghvcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+% farr tarr { from } { to } xindent zindent bias ldiaglvrlinepath -
+/ldiaglvrlinepath
+{
+ % (entering ldiaglvrlinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /bias exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ from (CTR) ldiagdolabel 180 dg from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength 180 dg ldiagatangle ldiagpadd /FROM ldiagpointdef
+ 180 dg /FROM@ANGLE ldiagangledef
+
+ to (CTR) ldiagdolabel 180 dg to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength 180 dg ldiagatangle ldiagpadd /TO ldiagpointdef
+ 0 dg /TO@ANGLE ldiagangledef
+
+ /XLEFT [ FROM pop TO pop ldiagmin bias sub ] cvx def
+ XLEFT FROM exch pop /P1 ldiagpointdef
+ XLEFT TO exch pop /P2 ldiagpointdef
+ /VERT [ P1 P2 ldiagangleto ] cvx def
+ P1 P1 0 0 1 ft 180 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle
+ ldiagpadd ldiagangleto /P1@ANGLE ldiagangledef
+ P2 P2 0 0 1 ft 0 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle
+ ldiagpadd ldiagangleto /P2@ANGLE ldiagangledef
+
+ P1 0.5 ldiagpmul P2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+ VERT /LMID@ANGLE ldiagangledef
+
+ /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def
+ /ZINDENT [ zindent P2 TO ldiagdistance ldiagmin ] cvx def
+ XINDENT 0 FROM ldiagpsub /LFROM ldiagpointdef
+ 180 dg /LFROM@ANGLE ldiagangledef
+ ZINDENT 0 TO ldiagpsub /LTO ldiagpointdef
+ 0 dg /LTO@ANGLE ldiagangledef
+
+ FROM LFROM P1 LMID P2 LTO TO
+
+ % (leaving ldiaglvrlinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+% farr tarr { from } { to } xindent zindent bias radius ldiaglvrcurvepath -
+/ldiaglvrcurvepath
+{
+ % (entering ldiaglvrcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /radius exch def
+ /bias exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ from (CTR) ldiagdolabel 180 dg from (CIRCUM) ldiagdolabel ldiagpadd 0 0
+ fromarrowlength 180 dg ldiagatangle ldiagpadd /FROM ldiagpointdef
+ 180 dg /FROM@ANGLE ldiagangledef
+ to (CTR) ldiagdolabel 180 dg to (CIRCUM) ldiagdolabel ldiagpadd 0 0
+ toarrowlength 180 dg ldiagatangle ldiagpadd /TO ldiagpointdef
+ 0 dg /TO@ANGLE ldiagangledef
+ /XLEFT [ FROM pop TO pop ldiagmin bias sub ] cvx def
+ /XP1 [ XLEFT FROM exch pop ] cvx def
+ /XP2 [ XLEFT TO exch pop ] cvx def
+ /VERT [ XP1 XP2 ldiagangleto ] cvx def
+ XP1 0.5 ldiagpmul XP2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+ VERT /LMID@ANGLE ldiagangledef
+ /XINDENT [ xindent FROM XP1 ldiagdistance ldiagmin ] cvx def
+ /ZINDENT [ zindent XP2 TO ldiagdistance ldiagmin ] cvx def
+ XINDENT 0 FROM ldiagpsub /LFROM ldiagpointdef
+ 180 dg /LFROM@ANGLE ldiagangledef
+ ZINDENT 0 TO ldiagpsub /LTO ldiagpointdef
+ 0 dg /LTO@ANGLE ldiagangledef
+ /RADIUS [ radius XP1 XP2 ldiagdistance 2 div ldiagmin ] cvx def
+ /XP1PRE [ XP1 0 0 RADIUS 0 dg ldiagatangle ldiagpadd ] cvx def
+ /XP1POST [ XP1 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def
+ /XP1CTR [ XP1PRE 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def
+ XP1CTR 0 0 RADIUS XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd
+ /P1 ldiagpointdef
+ XP1PRE XP1POST ldiagangleto /P1@ANGLE ldiagangledef
+ /XP2PRE [ 0 0 RADIUS VERT ldiagatangle XP2 ldiagpsub ] cvx def
+ /XP2POST [ XP2 0 0 RADIUS 0 dg ldiagatangle ldiagpadd ] cvx def
+ /XP2CTR [ XP2PRE 0 0 RADIUS 0 dg ldiagatangle ldiagpadd ] cvx def
+ XP2CTR 0 0 RADIUS XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd
+ /P2 ldiagpointdef
+ XP2PRE XP2POST ldiagangleto /P2@ANGLE ldiagangledef
+ FROM LFROM XP1PRE
+ { } { [XP1CTR] P1 [XP1CTR] } { } { [XP1CTR clockwise] P1 [XP1CTR clockwise] }
+ { } { } { } { } VERT round ldiagquadcase
+ XP1POST LMID XP2PRE
+ { } { [XP2CTR] P2 [XP2CTR] } { } { [XP2CTR clockwise] P2 [XP2CTR clockwise] }
+ { } { } { } { } VERT round ldiagquadcase
+ XP2POST LTO TO
+
+ % (leaving ldiaglvrcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+% farr tarr { from } { to } xindent zindent bias ldiagrvllinepath -
+/ldiagrvllinepath
+{
+ % (entering ldiagrvllinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /bias exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ from (CTR) ldiagdolabel 0 dg from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength 0 dg ldiagatangle ldiagpadd /FROM ldiagpointdef
+ 0 dg /FROM@ANGLE ldiagangledef
+ to (CTR) ldiagdolabel 0 dg to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength 0 dg ldiagatangle ldiagpadd /TO ldiagpointdef
+ 180 dg /TO@ANGLE ldiagangledef
+ /XRIGHT [ FROM pop TO pop ldiagmax bias add ] cvx def
+ XRIGHT FROM exch pop /P1 ldiagpointdef
+ XRIGHT TO exch pop /P2 ldiagpointdef
+ /VERT [ P1 P2 ldiagangleto ] cvx def
+ P1 P1 0 0 1 ft 0 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle
+ ldiagpadd ldiagangleto /P1@ANGLE ldiagangledef
+ P2 P2 0 0 1 ft 180 dg ldiagatangle ldiagpadd 0 0 1 ft VERT ldiagatangle
+ ldiagpadd ldiagangleto /P2@ANGLE ldiagangledef
+ P1 0.5 ldiagpmul P2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+ VERT /LMID@ANGLE ldiagangledef
+ /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def
+ /ZINDENT [ zindent P2 TO ldiagdistance ldiagmin ] cvx def
+ FROM XINDENT 0 ldiagpadd /LFROM ldiagpointdef
+ 0 dg /LFROM@ANGLE ldiagangledef
+ TO ZINDENT 0 ldiagpadd /LTO ldiagpointdef
+ 180 dg /LTO@ANGLE ldiagangledef
+ FROM LFROM P1 LMID P2 LTO TO
+
+ % (leaving ldiagrvllinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+
+% farr tarr { from } { to } xindent zindent bias radius ldiagrvlcurvepath -
+/ldiagrvlcurvepath
+{
+ % (entering ldiagrvlcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /radius exch def
+ /bias exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ from (CTR) ldiagdolabel 0 dg from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength 0 dg ldiagatangle ldiagpadd /FROM ldiagpointdef
+ 0 dg /FROM@ANGLE ldiagangledef
+ to (CTR) ldiagdolabel 0 dg to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength 0 dg ldiagatangle ldiagpadd /TO ldiagpointdef
+ 180 dg /TO@ANGLE ldiagangledef
+ /XRIGHT [ FROM pop TO pop ldiagmax bias add ] cvx def
+ /XP1 [ XRIGHT FROM exch pop ] cvx def
+ /XP2 [ XRIGHT TO exch pop ] cvx def
+ /VERT [ XP1 XP2 ldiagangleto ] cvx def
+ XP1 0.5 ldiagpmul XP2 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+ VERT /LMID@ANGLE ldiagangledef
+ /XINDENT [ xindent FROM XP1 ldiagdistance ldiagmin ] cvx def
+ /ZINDENT [ zindent XP2 TO ldiagdistance ldiagmin ] cvx def
+ FROM XINDENT 0 ldiagpadd /LFROM ldiagpointdef
+ 0 dg /LFROM@ANGLE ldiagangledef
+ TO ZINDENT 0 ldiagpadd /LTO ldiagpointdef
+ 180 dg /LTO@ANGLE ldiagangledef
+ /RADIUS [ radius XP1 XP2 ldiagdistance 0.5 mul ldiagmin ] cvx def
+ /XP1PRE [ XP1 0 0 RADIUS 180 dg ldiagatangle ldiagpadd ] cvx def
+ /XP1POST [ XP1 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def
+ /XP1CTR [ XP1PRE 0 0 RADIUS VERT ldiagatangle ldiagpadd ] cvx def
+ XP1CTR 0 0 RADIUS XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd
+ /P1 ldiagpointdef
+ XP1PRE XP1POST ldiagangleto /P1@ANGLE ldiagangledef
+ /XP2PRE [ 0 0 RADIUS VERT ldiagatangle XP2 ldiagpsub ] cvx def
+ /XP2POST [ XP2 0 0 RADIUS 180 dg ldiagatangle ldiagpadd ] cvx def
+ /XP2CTR [ XP2PRE 0 0 RADIUS 180 dg ldiagatangle ldiagpadd ] cvx def
+ XP2CTR 0 0 RADIUS XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd
+ /P2 ldiagpointdef
+ XP2PRE XP2POST ldiagangleto /P2@ANGLE ldiagangledef
+ FROM LFROM XP1PRE
+ {} {[XP1CTR clockwise] P1 [XP1CTR clockwise]} {} {[XP1CTR] P1 [XP1CTR]}
+ {} {} {} {} VERT round ldiagquadcase
+ XP1POST LMID XP2PRE
+ {} {[XP2CTR clockwise] P2 [XP2CTR clockwise]} {} {[XP2CTR] P2 [XP2CTR]}
+ {} {} {} {} VERT round ldiagquadcase
+ XP2POST LTO TO
+
+ % (leaving ldiagrvlcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+% farr tarr { from } { to } xindent zindent bias fbias tbias ldiagdwraplinepath -
+/ldiagdwraplinepath
+{
+ % (entering ldiagdwraplinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /tbias exch def
+ /fbias exch def
+ /bias exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop
+ lt { 180 dg } { 0 dg } ifelse ] cvx def
+ from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd 0 0
+ fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef
+ DIRN /FROM@ANGLE ldiagangledef
+ to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef
+ DIRN /TO@ANGLE ldiagangledef
+ FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd /P1 ldiagpointdef
+ DIRN 180 dg eq { 225 dg } { -45 dg } ifelse /P1@ANGLE ldiagangledef
+ TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd
+ /P4 ldiagpointdef
+ DIRN 180 dg eq { 135 dg } { 45 dg } ifelse /P4@ANGLE ldiagangledef
+ /YC [ from (CTR) ldiagdolabel 270 dg from (CIRCUM) ldiagdolabel ldiagpadd
+ exch pop to (CTR) ldiagdolabel 270 dg to (CIRCUM) ldiagdolabel ldiagpadd
+ exch pop ldiagmin bias 0 ldiagmax sub ] cvx def
+ P1 pop YC /P2 ldiagpointdef
+ P4@ANGLE 180 dg sub /P2@ANGLE ldiagangledef
+ P4 pop YC /P3 ldiagpointdef
+ P1@ANGLE 180 dg sub /P3@ANGLE ldiagangledef
+ /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def
+ FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ FROM@ANGLE /LFROM@ANGLE ldiagangledef
+ /ZINDENT [ zindent TO P4 ldiagdistance ldiagmin ] cvx def
+ TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef
+ TO@ANGLE /LTO@ANGLE ldiagangledef
+ P2 0.5 ldiagpmul P3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+ DIRN 180 dg sub /LMID@ANGLE ldiagangledef
+ FROM P1 P2 P3 P4 TO
+
+ % (leaving ldiagdwraplinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+% farr tarr { from } { to } xindent zindent bias fbias tbias radius
+% ldiagdwrapcurvepath -
+/ldiagdwrapcurvepath
+{
+ % (entering ldiagdwrapcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /radius exch def
+ /tbias exch def
+ /fbias exch def
+ /bias exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt
+ { 180 dg } { 0 dg } ifelse ] cvx def
+ /CLOCK [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt
+ { anticlockwise } { clockwise } ifelse ] cvx def
+ from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef
+ DIRN /FROM@ANGLE ldiagangledef
+ to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef
+ DIRN /TO@ANGLE ldiagangledef
+ /XP1 [ FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd ] cvx def
+ /XP4 [ TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd ] cvx def
+ /YC [ from (CTR) ldiagdolabel 270 dg from (CIRCUM) ldiagdolabel ldiagpadd
+ exch pop to (CTR) ldiagdolabel 270 dg to (CIRCUM) ldiagdolabel ldiagpadd
+ exch pop ldiagmin bias 0 ldiagmax sub ] cvx def
+ /XP2 [ XP1 pop YC ] cvx def
+ /XP3 [ XP4 pop YC ] cvx def
+ /RP1 [ radius XP1 FROM ldiagdistance XP1 XP2 ldiagdistance 2 div
+ ldiagmin ldiagmin ] cvx def
+ /XP1PRE [ XP1 0 0 RP1 XP1 FROM ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP1POST [ XP1 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP1CTR [ XP1PRE 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ XP1CTR 0 0 RP1 XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd /P1 ldiagpointdef
+ XP1CTR P1 ldiagangleto DIRN add 90 dg sub /P1@ANGLE ldiagangledef
+ /RP2 [ radius XP1 XP2 ldiagdistance 2 div XP2 XP3 ldiagdistance 2 div
+ ldiagmin ldiagmin ] cvx def
+ /XP2PRE [ XP2 0 0 RP2 XP2 XP1 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP2POST [ XP2 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP2CTR [ XP2PRE 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ XP2CTR 0 0 RP2 XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd /P2 ldiagpointdef
+ XP2CTR P2 ldiagangleto DIRN add 90 dg sub /P2@ANGLE ldiagangledef
+ /RP3 [ radius XP2 XP3 ldiagdistance 2 div XP3 XP4 ldiagdistance 2 div
+ ldiagmin ldiagmin ] cvx def
+ /XP3PRE [ XP3 0 0 RP3 XP3 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP3POST [ XP3 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP3CTR [ XP3PRE 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ XP3CTR 0 0 RP3 XP3CTR XP3 ldiagangleto ldiagatangle ldiagpadd /P3 ldiagpointdef
+ XP3CTR P3 ldiagangleto DIRN add 90 dg sub /P3@ANGLE ldiagangledef
+ /RP4 [ radius XP4 XP3 ldiagdistance 2 div XP4 TO ldiagdistance
+ ldiagmin ldiagmin ] cvx def
+ /XP4PRE [ XP4 0 0 RP4 XP4 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP4POST [ XP4 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP4CTR [ XP4PRE 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ XP4CTR 0 0 RP4 XP4CTR XP4 ldiagangleto ldiagatangle ldiagpadd /P4 ldiagpointdef
+ XP4CTR P4 ldiagangleto DIRN add 90 dg sub /P4@ANGLE ldiagangledef
+ /XINDENT [ xindent FROM XP1PRE ldiagdistance ldiagmin ] cvx def
+ FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ FROM@ANGLE /LFROM@ANGLE ldiagangledef
+ XP2 0.5 ldiagpmul XP3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+ DIRN 180 dg sub /LMID@ANGLE ldiagangledef
+ /ZINDENT [ zindent TO XP4POST ldiagdistance ldiagmin ] cvx def
+ TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef
+ TO@ANGLE /LTO@ANGLE ldiagangledef
+ FROM LFROM
+ XP1PRE [XP1CTR CLOCK] XP1POST
+ XP2PRE [XP2CTR CLOCK] XP2POST
+ LMID
+ XP3PRE [XP3CTR CLOCK] XP3POST
+ XP4PRE [XP4CTR CLOCK] XP4POST
+ LTO TO
+
+ % (leaving ldiagdwrapcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+% farr tarr { from } { to } xindent zindent bias fbias tbias ldiaguwraplinepath -
+/ldiaguwraplinepath
+{
+ % (entering ldiaguwraplinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /tbias exch def
+ /fbias exch def
+ /bias exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt
+ { 180 dg } { 0 dg } ifelse ] cvx def
+ from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef
+ DIRN /FROM@ANGLE ldiagangledef
+ to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef
+ DIRN /TO@ANGLE ldiagangledef
+ FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd /P1 ldiagpointdef
+ DIRN 180 dg eq { 135 dg } { 45 dg } ifelse /P1@ANGLE ldiagangledef
+ TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd
+ /P4 ldiagpointdef
+ DIRN 180 dg eq { 225 dg } { -45 dg } ifelse /P4@ANGLE ldiagangledef
+ /YC [ from (CTR) ldiagdolabel 90 dg from (CIRCUM) ldiagdolabel ldiagpadd
+ exch pop to (CTR) ldiagdolabel 90 dg to (CIRCUM) ldiagdolabel ldiagpadd
+ exch pop ldiagmax bias 0 ldiagmax add ] cvx def
+ P1 pop YC /P2 ldiagpointdef
+ P4@ANGLE 180 dg sub /P2@ANGLE ldiagangledef
+ P4 pop YC /P3 ldiagpointdef
+ P1@ANGLE 180 dg sub /P3@ANGLE ldiagangledef
+ /XINDENT [ xindent FROM P1 ldiagdistance ldiagmin ] cvx def
+ FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ FROM@ANGLE /LFROM@ANGLE ldiagangledef
+ /ZINDENT [ zindent TO P4 ldiagdistance ldiagmin ] cvx def
+ TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef
+ TO@ANGLE /LTO@ANGLE ldiagangledef
+ P2 0.5 ldiagpmul P3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+ DIRN 180 dg sub /LMID@ANGLE ldiagangledef
+ FROM P1 P2 P3 P4 TO
+
+ % (leaving ldiaguwraplinepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+% farr tarr { from } { to } xindent zindent bias fbias tbias radius
+% ldiaguwrapcurvepath -
+/ldiaguwrapcurvepath
+{
+ % (entering ldiaguwrapcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+ /radius exch def
+ /tbias exch def
+ /fbias exch def
+ /bias exch def
+ /zindent exch def
+ /xindent exch def
+ cvlit /to exch def
+ cvlit /from exch def
+ /toarrowlength exch def
+ /fromarrowlength exch def
+
+ /DIRN [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt
+ { 180 dg } { 0 dg } ifelse ] cvx def
+ /CLOCK [ from (CTR) ldiagdolabel pop to (CTR) ldiagdolabel pop lt
+ { clockwise } { anticlockwise } ifelse ] cvx def
+ from (CTR) ldiagdolabel DIRN from (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 fromarrowlength DIRN ldiagatangle ldiagpadd /FROM ldiagpointdef
+ DIRN /FROM@ANGLE ldiagangledef
+ to (CTR) ldiagdolabel DIRN 180 dg add to (CIRCUM) ldiagdolabel ldiagpadd
+ 0 0 toarrowlength DIRN 180 dg add ldiagatangle ldiagpadd /TO ldiagpointdef
+ DIRN /TO@ANGLE ldiagangledef
+ /XP1 [ FROM 0 0 fbias 0 ldiagmax DIRN ldiagatangle ldiagpadd ] cvx def
+ /XP4 [ TO 0 0 tbias 0 ldiagmax DIRN 180 dg add ldiagatangle ldiagpadd ] cvx def
+ /YC [ from (CTR) ldiagdolabel 90 dg from (CIRCUM) ldiagdolabel ldiagpadd
+ exch pop to (CTR) ldiagdolabel 90 dg to (CIRCUM) ldiagdolabel ldiagpadd
+ exch pop ldiagmax bias 0 ldiagmax add ] cvx def
+ /XP2 [ XP1 pop YC ] cvx def
+ /XP3 [ XP4 pop YC ] cvx def
+ /RP1 [ radius XP1 FROM ldiagdistance XP1 XP2 ldiagdistance 2 div
+ ldiagmin ldiagmin ] cvx def
+ /XP1PRE [ XP1 0 0 RP1 XP1 FROM ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP1POST [ XP1 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP1CTR [ XP1PRE 0 0 RP1 XP1 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ XP1CTR 0 0 RP1 XP1CTR XP1 ldiagangleto ldiagatangle ldiagpadd /P1 ldiagpointdef
+ XP1CTR P1 ldiagangleto DIRN add 90 dg add /P1@ANGLE ldiagangledef
+ /RP2 [ radius XP1 XP2 ldiagdistance 2 div XP2 XP3 ldiagdistance 2 div
+ ldiagmin ldiagmin ] cvx def
+ /XP2PRE [ XP2 0 0 RP2 XP2 XP1 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP2POST [ XP2 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP2CTR [ XP2PRE 0 0 RP2 XP2 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ XP2CTR 0 0 RP2 XP2CTR XP2 ldiagangleto ldiagatangle ldiagpadd /P2 ldiagpointdef
+ XP2CTR P2 ldiagangleto DIRN add 90 dg add /P2@ANGLE ldiagangledef
+ /RP3 [ radius XP2 XP3 ldiagdistance 2 div XP3 XP4 ldiagdistance 2 div
+ ldiagmin ldiagmin ] cvx def
+ /XP3PRE [ XP3 0 0 RP3 XP3 XP2 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP3POST [ XP3 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP3CTR [ XP3PRE 0 0 RP3 XP3 XP4 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ XP3CTR 0 0 RP3 XP3CTR XP3 ldiagangleto ldiagatangle ldiagpadd /P3 ldiagpointdef
+ XP3CTR P3 ldiagangleto DIRN add 90 dg add /P3@ANGLE ldiagangledef
+ /RP4 [ radius XP4 XP3 ldiagdistance 2 div XP4 TO ldiagdistance
+ ldiagmin ldiagmin ] cvx def
+ /XP4PRE [ XP4 0 0 RP4 XP4 XP3 ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP4POST [ XP4 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ /XP4CTR [ XP4PRE 0 0 RP4 XP4 TO ldiagangleto ldiagatangle ldiagpadd ] cvx def
+ XP4CTR 0 0 RP4 XP4CTR XP4 ldiagangleto ldiagatangle ldiagpadd /P4 ldiagpointdef
+ XP4CTR P4 ldiagangleto DIRN add 90 dg add /P4@ANGLE ldiagangledef
+ /XINDENT [ xindent FROM XP1PRE ldiagdistance ldiagmin ] cvx def
+ FROM 0 0 XINDENT DIRN ldiagatangle ldiagpadd /LFROM ldiagpointdef
+ FROM@ANGLE /LFROM@ANGLE ldiagangledef
+ XP2 0.5 ldiagpmul XP3 0.5 ldiagpmul ldiagpadd /LMID ldiagpointdef
+ DIRN 180 dg sub /LMID@ANGLE ldiagangledef
+ /ZINDENT [ zindent TO XP4POST ldiagdistance ldiagmin ] cvx def
+ TO 0 0 ZINDENT DIRN 180 dg add ldiagatangle ldiagpadd /LTO ldiagpointdef
+ TO@ANGLE /LTO@ANGLE ldiagangledef
+ FROM LFROM
+ XP1PRE [XP1CTR CLOCK] XP1POST
+ XP2PRE [XP2CTR CLOCK] XP2POST
+ LMID
+ XP3PRE [XP3CTR CLOCK] XP3POST
+ XP4PRE [XP4CTR CLOCK] XP4POST
+ LTO TO
+
+ % (leaving ldiaguwrapcurvepath) 0 ldiagdebugprint
+ % count ( stack size is) 1 ldiagdebugprint pop
+} def
+
+% shape and labels of the @SolidArrowHead symbol
+% - ldiagsolidarrowhead -
+/ldiagsolidarrowhead
+{
+ 0 0 xsize ysize 0.5 mul 0 ysize
+} def
+
+% shape and labels of the @OpenArrowHead symbol
+% <pathwidth> ldiagopenarrowhead -
+/ldiagopenarrowhead
+{
+ /pathwidth exch def
+ /PSW [ 0 0 ] cvx def
+ /PNW [ 0 ysize ] cvx def
+ /PE [ xsize ysize 0.5 mul ] cvx def
+ /REL [ 0 0 pathwidth PE PNW ldiagangleto 90 add ldiagatangle ] cvx def
+ /PNA [ 0 ysize 0.5 mul pathwidth 0.5 mul add ] cvx def
+ /PSA [ 0 ysize 0.5 mul pathwidth 0.5 mul sub ] cvx def
+ /PNI [ PNA PNA xsize 0 ldiagpadd PNW REL ldiagpadd
+ PE REL ldiagpadd ldiaglineintersect ] cvx def
+ /PSI [ 0 pathwidth PNI ldiagpsub ] cvx def
+
+ PSW PE PNW PNI PNA PSA PSI PSW
+} def
+
+% shape and labels of the @HalfOpenArrowHead symbol
+% <pathwidth> ldiaghalfopenarrowhead -
+/ldiaghalfopenarrowhead
+{
+ /pathwidth exch def
+ 0 0
+ xsize ysize 0.5 mul
+ 0 ysize
+ xsize 0.3 mul ysize 0.5 mul pathwidth 0.5 mul add
+ 0 ysize 0.5 mul pathwidth 0.5 mul add
+ 0 ysize 0.5 mul pathwidth 0.5 mul sub
+ xsize 0.3 mul ysize 0.5 mul pathwidth 0.5 mul sub
+ 0 0
+} def
+
+% shape and labels of the @SolidCurvedArrowHead symbol
+% - ldiagsolidcurvedarrowhead -
+/ldiagsolidcurvedarrowhead
+{
+ 0 0
+ [0 0 xsize ysize 0.5 mul ldiaglinebetween
+ xsize 0 xsize ysize ldiaglineintersect clockwise]
+ xsize ysize 0.5 mul
+ [xsize ysize 0.5 mul 0 ysize ldiaglinebetween
+ xsize 0 xsize ysize ldiaglineintersect clockwise]
+ 0 ysize
+} def
+
+% shape and labels of the @OpenCurvedArrowHead symbol
+% <pathwidth> ldiagopencurvedarrowhead -
+/ldiagopencurvedarrowhead
+{
+ /pathwidth exch def
+ /LR [ 0 0 xsize ysize 0.5 mul ldiaglinebetween
+ xsize 0 xsize ysize ldiaglineintersect
+ ] cvx def
+ /UR [ xsize ysize 0.5 mul 0 ysize ldiaglinebetween
+ xsize 0 xsize ysize ldiaglineintersect
+ ] cvx def
+ /PW2 [ pathwidth 0.5 mul ] cvx def
+ /UMID [
+ 0 ysize 0.5 mul PW2 add
+ xsize ysize 0.5 mul PW2 add
+ 0 ysize 0 0 1 ft UR 0 ysize ldiagangleto 90 add ldiagatangle
+ ldiagpadd 0 ysize ldiaglineintersect
+ ] cvx def
+ /LMID [ 0 pathwidth UMID ldiagpsub ] cvx def
+ 0 0
+ [LR clockwise]
+ xsize ysize 0.5 mul
+ [UR clockwise]
+ 0 ysize
+ UMID
+ 0 ysize 0.5 mul PW2 add
+ 0 ysize 0.5 mul PW2 sub
+ LMID
+ 0 0
+} def
+
+% shape and labels of the @HalfOpenCurvedArrowHead symbol
+% <pathwidth> ldiaghalfopencurvedarrowhead -
+/ldiaghalfopencurvedarrowhead
+{
+ /pathwidth exch def
+ /LR [ 0 0 xsize ysize 0.5 mul ldiaglinebetween
+ xsize 0 xsize ysize ldiaglineintersect
+ ] cvx def
+ /UR [ xsize ysize 0.5 mul 0 ysize ldiaglinebetween
+ xsize 0 xsize ysize ldiaglineintersect
+ ] cvx def
+ /BR [ 0 0 LR 0 ysize UR ldiaglineintersect ] cvx def
+ /BRAD [ 0 0 BR ldiagdistance ] cvx def
+ /PW2 [ pathwidth 0.5 mul ] cvx def
+ /XDIST [ BRAD dup mul PW2 dup mul sub sqrt ] cvx def
+ /UMID [ BR XDIST PW2 ldiagpadd ] cvx def
+ /LMID [ BR XDIST 0 PW2 sub ldiagpadd ] cvx def
+ 0 0
+ [LR clockwise]
+ xsize ysize 0.5 mul
+ [UR clockwise]
+ 0 ysize
+ [BR clockwise]
+ UMID
+ 0 ysize 0.5 mul PW2 add
+ 0 ysize 0.5 mul PW2 sub
+ LMID
+ [BR clockwise]
+ 0 0
+} def
+
+end
+%%EndResource
+
+%%BeginResource: procset LoutBasicSetup
+% @PrependGraphic file /export/home/6monthspace/jeff/lout.lib/include/bsf.lpg
+
+% width height linethickness louteuro -
+% draw a Euro symbol of this width and height with this line thickness
+/louteuro {
+ 20 dict begin
+ /eurothick exch def
+ /euroheight exch def
+ /eurowidth exch def
+ /eurostrokewidth euroheight 0.8 mul def
+ /eurostep eurothick 60 cos mul 60 sin div def
+ /eurotheta 40 def
+
+ % llx lly width thickness louteurobox -
+ % draw angled box starting at (llx, lly) with given width and thickness
+ /louteurobox
+ {
+ /euroboxthick exch def
+ /euroboxwidth exch def
+ newpath moveto euroboxwidth 0 rlineto
+ eurostep euroboxthick rlineto
+ euroboxwidth neg 0 rlineto closepath fill
+ } def
+
+ % lower cross stroke
+ 0 euroheight 2 div eurothick 1.5 mul sub
+ eurostrokewidth eurothick louteurobox
+
+ % upper cross stroke
+ 0 euroheight 2 div eurothick 0.5 mul add
+ eurostrokewidth eurostep 2 mul add eurothick louteurobox
+
+ % circular part
+ /eurohctr eurowidth euroheight 2 div eurotheta cos mul sub def
+ /eurovctr euroheight 2 div def
+ newpath
+ eurohctr eurovctr eurovctr eurotheta 350 eurotheta sub arc
+ eurohctr eurovctr eurovctr eurothick sub 365 eurotheta sub eurotheta arcn
+ closepath fill
+ end
+} def
+
+% path for @FullWidthRule symbol
+/LoutRule
+{ 0 0 moveto xsize 0 lineto
+} def
+
+% path for @Box symbol
+/LoutBox
+{ 0 0 moveto xsize 0 lineto
+ xsize ysize lineto 0 ysize lineto
+ closepath
+} def
+
+% path for @CurveBox symbol
+/LoutCurveBox
+{ xmark 0 moveto
+ xsize xmark sub xmark xmark 270 360 arc
+ xsize xmark sub ysize xmark sub xmark 0 90 arc
+ xmark ysize xmark sub xmark 90 180 arc
+ xmark xmark xmark 180 270 arc
+ closepath
+} def
+
+% path for @ShadowBox symbol
+/LoutShadowBox
+{ xmark 2 mul 0 moveto xsize 0 lineto
+ xsize ysize xmark 2 mul sub lineto
+ xsize xmark sub ysize xmark 2 mul sub lineto
+ xsize xmark sub xmark lineto
+ xmark 2 mul xmark lineto
+ closepath
+} def
+
+% set up dictionary containing margin note data: parity LoutMargSet -
+/LoutMargSet
+{ /LoutMargDict 12 dict def
+ LoutMargDict begin
+ /parity exch def
+ /matr matrix currentmatrix def
+ /rightx xsize def
+ /lefty ysize def % highest allowable point for top of next left note
+ /righty ysize def % highest allowable point for top of next right note
+ /max { 2 copy gt { pop } { exch pop } ifelse } def
+ /min { 2 copy lt { pop } { exch pop } ifelse } def
+ end
+} def
+
+%translate coordinate system for marginal notes: type LoutMargShift -
+% where type 0 is left margin, 1 is right margin, 2 is outer, 3 is inner
+/LoutMargShift
+{ LoutMargDict begin
+
+ % y coordinate of top of note, in margin coords, before vertical adjust
+ 0 ysize transform matr itransform exch pop
+
+ % decide whether left or right margin based on type and parity
+ exch [ 0 1 parity 1 parity sub ] exch get 0 eq
+ {
+ % left margin: adjust top of note downwards if overlaps previous note
+ lefty min
+
+ % bottom of note is new lefty position and also translate position
+ ysize sub dup /lefty exch def
+
+ % want right edge of note at coordinate zero
+ xsize neg exch
+ }
+ {
+ % right margin: adjust top of note downwards if overlaps previous note
+ righty min
+
+ % bottom of note is new righty position and also translate position
+ ysize sub dup /righty exch def
+
+ % want left edge of note at coordinate rightx
+ rightx exch
+ } ifelse
+
+ % stack now contains coord of bottom left corner in margin coordinates
+ matr setmatrix translate
+ end
+} def
+
+% create LoutPageDict with left, right, foot, top for @Place symbol users
+/LoutPageSet
+{
+ /LoutPageDict 5 dict def
+ LoutPageDict begin
+ /matr matrix currentmatrix def
+ /left 0 def
+ /right xsize def
+ /foot 0 def
+ /top ysize def
+ end
+
+} def
+
+%%EndResource
+
+%%EndProlog
+
+%%BeginSetup
+%%IncludeResource: font Times-Roman
+/Times-Romanfnt82 vec2 /Times-Roman LoutRecode
+/fnt82 { /Times-Romanfnt82 LoutFont } def
+%%IncludeResource: font Helvetica
+/Helveticafnt35 vec2 /Helvetica LoutRecode
+/fnt35 { /Helveticafnt35 LoutFont } def
+%%IncludeResource: font Symbol
+/fnt78 { /Symbol LoutFont } def
+%%EndSetup
+
+%%Page: 11 1
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+1 LoutMargSet
+grestore
+240 fnt83 0 13843(1.10.)m 574(Notes)s 1174(on)s 1468(P)s 19(erl)k
+1920(and)s 2346(P)s 19(od)k 240 fnt84 8839 13840(11)m
+0 13250(1.10.)m 591(Notes)s 1216(on)s 1525(P)s 4(erl)k
+2000(and)s 2441(P)s 4(od)k 240 fnt82 480 12818(The)m
+923(Perl)s 1378(programming)s 2749(language)s 153 fnt82 3609 12907(1)m
+240 fnt82 3744 12818(is)m 3970(quite)s 4520(a)s 4702(dif\207cult)s
+5533(one)s 5951(for)s 6305(the)s 220 fnt35 6668 12815(prg2lout)m
+240 fnt82 7532 12818(program)m 8418(to)s 8673(deal)s 0 12530(with,)m
+526(and)s 924(our)s 1297(boast)s 1855(that)s 2267(programs)s
+3215(can)s 3598(be)s 3873(included)s 4749(with)s 5225(`absolutely)s
+6335(no)s 6621(modi\207cations')s 8029(is)s 8233(not)s 8592(quite)s
+0 12242(true)m 427(for)s 765(Perl.)s 480 11868(Here)m 1000(is)s
+1211(the)s 1560(complete)s 2493(list)s 2844(of)s 3116(problem)s
+3974(areas.)s 4629(In)s 4885(most)s 5411(cases)s 5967(the)s
+6316(ef)s 6(fect)k 6912(is)s 7123(to)s 7363(get)s
+7716(the)s 8065(formatting)s 0 11580(wrong)m 675(o)s 3(v)k 3(er)k
+1164(a)s 1341(short)s 1889(re)s 3(gion,)k 2615(which)s
+3267(is)s 3488(not)s 3864(perhaps)s 4670(so)s 4946(disastrous;)s
+6025(and)s 6439(it)s 6642(should)s 7349(be)s 7642(easy)s
+8131(to)s 8381(modify)s 0 11292(your)m 507(Perl)s 955(program)s
+1834(without)s 2634(changing)s 3574(its)s 3859(meaning,)s 4799(to)s
+5046(w)s 2(ork)k 5606(around)s 6338(these)s 6894(problems.)s
+7957(After)s 8529(all,)s 8883(in)s 0 11004(Perl)m 439(there)s
+972(is)s 1182(al)s 2(w)k 2(ays)k 1893(more)s
+2440(than)s 2909(one)s 3311(w)s 2(ay)k 3762(to)s
+4001(do)s 4294(it.)s 0 10499(1.)m 240 fnt83 480 10501(Her)m 8(e-documents)k
+240 fnt82 2108 10499(such)m 2604(as)s 960 10047(<<"EOF")m 960 9759(These lines will be read as though)m
+960 9471(enclosed in double quotes)m 960 9183(EOF)m 480 8729(will)m 910(be)s 1196(handled)s
+2017(correctly)s 2923(only)s 3407(if)s 3629(the)s 3981(string)s
+4583(used)s 5084(to)s 5327(terminate)s 6289(the)s 6641(document)s
+7649(is)s 7864(one)s 8270(of)s 240 fnt83 8546 8731(EOF)m
+240 fnt82 9019 8729(,)m 240 fnt83 480 8443(EO)m 9(T)k
+240 fnt82 941 8441(,)m 240 fnt83 1040 8443(END)m 240 fnt82
+1514 8441(,)m 1613(and)s 2009(the)s 2348(empty)s 2992(string.)s
+3692(This)s 4160(terminating)s 5305(string)s 5894(may)s 6352(be)s
+6626(enclosed)s 7512(in)s 7747(all)s 8032(three)s 8556(kinds)s
+480 8153(of)m 761(quotes,)s 1504(or)s 1773(in)s 2027(none.)s
+2668(An)s 3(ything)k 3633(after)s 4140(the)s 4498(<<)s
+4833(symbol)s 5604(on)s 5911(the)s 6270(same)s 6827(line)s
+7252(will)s 7689(be)s 7981(treated)s 8699(as)s 8960(a)s
+480 7865(string,)m 1131(which)s 1773(means)s 2435(that)s 2853(stack)s 2(ed)k
+3626(here-documents)s 5204(will)s 5630(not)s 5996(be)s 6278(printed)s
+7013(properly)s 15(.)k 0 7362(2.)m 480(When)s 220 fnt35
+1115 7359(prg2lout)m 240 fnt82 1969 7362(is)m 2186(scanning)s 3096(the)s
+3451(program)s 4327(looking)s 5118(for)s 5463(the)s 5817(be)s 3(ginning)k
+6832(of)s 7109(a)s 7281(le)s 3(xical)k 7976(unit,)s
+8461(it)s 8660(may)s 480 7074(come)m 1074(upon)s 1632(a)s
+220 fnt35 1819 7071(/)m 240 fnt82 1964 7074(character)m 9(,)k
+2957(and)s 3382(this)s 240 fnt83 3799 7076(initial)m 220 fnt35
+4450 7071(/)m 240 fnt82 4594 7074(\(not)m 5060(subsequent)s 6205(ones)s
+6716(in)s 6980(the)s 7349(same)s 7917(le)s 3(xical)k
+8626(unit\))s 480 6786(it)m 691(\207nds)s 1227(dif\207cult)s 2062(to)s
+2320(interpret,)s 3254(since)s 3820(it)s 4031(may)s 4517(be)s
+4818(the)s 5185(be)s 3(ginning)k 6212(of)s 6502(a)s
+6687(re)s 3(gular)k 7439(e)s 3(xpression,)k 8585(to)s
+8844(be)s 480 6498(formatted)m 1460(lik)s 2(e)k 1865(a)s
+2024(string,)s 2668(or)s 2920(it)s 3105(may)s 3564(be)s
+3839(a)s 3998(complete)s 4923(le)s 3(xical)k 5604(unit)s
+6029(denoting)s 6913(di)s 6(vision.)k 7835(The)s 8256(program)s
+480 6210(chooses)m 1308(the)s 1675(re)s 3(gular)k 2427(e)s 3(xpression)k
+3524(\(or)s 3881(equi)s 6(v)k 6(alently)k 15(,)k
+5162(string\))s 5853(interpretation)s 7216(if)s 7452(the)s 220 fnt35
+7819 6207(/)m 240 fnt82 7962 6210(character)m 8916(is)s 480 5922(immediately)m
+1714(preceded)s 2620(by)s 220 fnt35 2900 5919(q)m 240 fnt82
+3009 5922(,)m 220 fnt35 3101 5919(qq)m 240 fnt82 3332 5922(,)m
+220 fnt35 3424 5919(qx)m 240 fnt82 3654 5922(,)m 220 fnt35
+3747 5919(qw)m 240 fnt82 4025 5922(,)m 220 fnt35 4117 5919(qr)m
+240 fnt82 4312 5922(,)m 220 fnt35 4405 5919(m)m 240 fnt82
+4574 5922(,)m 220 fnt35 4666 5919(s)m 240 fnt82 4769 5922(,)m
+220 fnt35 4861 5919(y)m 240 fnt82 4969 5922(,)m 5062(or)s
+220 fnt35 5306 5919(tr)m 240 fnt82 5440 5922(.)m 5590(It)s
+5780(also)s 6203(chooses)s 6998(the)s 7331(re)s 3(gular)k
+8049(e)s 3(xpression)k 480 5634(interpretation)m 1834(if)s 2063(the)s
+220 fnt35 2423 5631(/)m 240 fnt82 2558 5634(character)m 3504(is)s
+3726(immediately)s 4986(preceded)s 5918(by)s 6224(zero,)s 6754(one,)s
+7219(or)s 7489(tw)s 2(o)k 7911(space)s 8510(or)s
+8781(tab)s 480 5346(characters,)m 1549(which)s 2186(are)s 2528(themselv)s 3(es)k
+3633(immediately)s 4876(preceded)s 5792(by)s 6081(a)s 6242(complete)s
+7169(le)s 3(xical)k 7852(unit)s 8279(which)s 8916(is)s
+480 5058(either)m 220 fnt35 1078 5055(=)m 240 fnt82 1198 5058(,)m
+220 fnt35 1300 5055(=~)m 240 fnt82 1543 5058(,)m 220 fnt35
+1645 5055(!~)m 240 fnt82 1821 5058(,)m 220 fnt35 1923 5055(split)m
+240 fnt82 2308 5058(,)m 2410(or)s 220 fnt35 2664 5055(if)m
+240 fnt82 2770 5058(.)m 2929(Otherwise)s 3961(it)s 4148(chooses)s
+4952(the)s 5295(di)s 6(vision)k 6112(interpretation.)s 7557(In)s
+7808(the)s 8151(rare)s 8571(cases)s 480 4770(where)m 1120(this)s
+1517(rule)s 1945(f)s 2(ails,)k 2460(you)s 2876(can)s
+3266(force)s 220 fnt35 3812 4767(prg2lout)m 240 fnt82 4661 4770(to)m
+4901(choose)s 5622(the)s 5971(re)s 3(gular)k 6705(e)s 3(xpression)k
+7783(interpretation)s 480 4482(by)m 777(placing)s 1537(an)s 220 fnt35
+1823 4479(m)m 240 fnt82 2055 4482(in)m 2301(front)s 2829(of)s
+3103(the)s 3454(initial)s 220 fnt35 4068 4479(/)m 240 fnt82
+4195 4482(\(this)m 4673(does)s 5167(not)s 5536(change)s 6273(the)s
+6624(meaning)s 7504(of)s 7778(the)s 8130(program\),)s 480 4194(and)m
+910(you)s 1352(can)s 1768(force)s 2341(the)s 2716(di)s 6(vision)k
+3565(interpretation)s 4935(by)s 5256(placing)s 6040(at)s 6299(least)s
+6823(three)s 7383(spaces)s 8085(before)s 8778(the)s 220 fnt35
+480 3903(/)m 240 fnt82 604 3906(character)m 13(.)k 0 3448(3.)m
+480(The)s 220 fnt35 910 3445(prg2lout)m 240 fnt82 1761 3448(program)m
+2634(recognises)s 3697(complete)s 4632(substitution)s 5808(operators,)s 6807(such)s
+7306(as)s 220 fnt35 7559 3445(s/abc/ABC/)m 240 fnt82 8722 3448(and)m
+220 fnt35 480 3157(s{abc}{ABC})m 240 fnt82 1677 3160(,)m 1799(as)s
+2065(indi)s 6(vidual)k 3100(le)s 3(xical)k 3804(units,)s
+4392(and)s 4812(it)s 5019(formats)s 5815(them)s 6369(as)s
+6635(it)s 6843(does)s 7349(strings.)s 8166(Ho)s 6(we)k 6(v)k 3(er)k 9(,)k
+480 2872(its)m 774(rule)s 1219(for)s 1575(deciding)s 2470(where)s
+3128(these)s 3693(units)s 4227(end)s 4650(is)s 4878(rather)s
+5512(simple-minded:)s 7130(at)s 7380(the)s 7746(start,)s 8281(it)s
+8492(w)s 2(orks)k 480 2584(out)m 846(what)s 1372(character)s
+2306(\207nishes)s 3089(the)s 3438(unit)s 3870(\(in)s 4193(the)s
+4541(e)s 3(xamples)k 5493(abo)s 3(v)k 3(e,)k
+220 fnt35 6167 2581(/)m 240 fnt82 6291 2584(and)m 220 fnt35
+6696 2581(})m 240 fnt82 6820 2584(respecti)m 6(v)k 3(ely\),)k
+8152(and)s 8557(scans)s 480 2296(along)m 1070(until)s 1569(it)s
+1767(reaches)s 2540(the)s 2894(second)s 3622(occurrence)s 4732(of)s
+5009(this)s 5411(character)s 6351(not)s 6722(preceded)s 7649(by)s
+7949(the)s 220 fnt35 8303 2293(\\)m 240 fnt82 8433 2296(escape)m
+480 2008(character)m 13(.)k 1505(This)s 1981(is)s 2191(inadequate)s
+3283(in)s 3526(tw)s 2(o)k 3936(respects.)s 4869(Firstly)s 15(,)k
+220 fnt35 960 1510(s{{}}{})m 240 fnt82 480 1016(is)m 698(a)s
+872(complete)s 1812(le)s 3(g)k 1(al)k 2336(substitution)s
+3517(e)s 3(xpression)k 4602(in)s 4853(Perl,)s 5353(b)s 4(ut)k
+220 fnt35 5723 1013(prg2lout)m 240 fnt82 6579 1016(will)m 7013(think)s
+7575(it)s 7775(ends)s 8273(after)s 8778(the)s 480 728(second)m
+220 fnt35 1203 725(})m 240 fnt82 1267 728(,)m 1374(and)s
+1778(so)s 2044(format)s 2740(the)s 3088(rest)s 3492(of)s
+3763(it)s 3955(wrongly)s 15(.)k 4902(Secondly)s 15(,)k
+5885(and)s 6289(more)s 6836(seriously)s 15(,)k 1134 0 0 0 240 288 60 0 307 LoutGr2
+0 0 moveto xsize 0 lineto stroke
+grestore
+
+grestore
+122 fnt82
+0 112(1)m 192 fnt82 58 42(My)m 368(thanks)s 909(to)s
+1101(Mark)s 1563(Summer\207eld)s 2598(for)s 2868(help)s 3241(with)s
+3627(Perl)s 3978(and)s 4302(Pod.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Page: 12 2
+%%BeginPageSetup
+%%PageResources: font Times-Roman
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%+ font Helvetica
+/pgsave save def
+%%IncludeResource: font Times-Bold
+/Times-Boldfnt84 vec2 /Times-Bold LoutRecode
+/fnt84 { /Times-Boldfnt84 LoutFont } def
+%%IncludeResource: font Times-Italic
+/Times-Italicfnt83 vec2 /Times-Italic LoutRecode
+/fnt83 { /Times-Italicfnt83 LoutFont } def
+0.0500 dup scale 10 setlinewidth
+%%EndPageSetup
+gsave
+0 0 translate
+240 fnt82 0.0 0.0 0.0 setrgbcolor 11900 16840 0 16840 240 288 60 LoutGraphic
+gsave
+LoutPageSet
+grestore
+gsave
+0 16840 translate
+0.0000 rotate
+9066 14006 0 14006 240 288 60 1417 -15423 LoutGr2
+0 LoutMargSet
+grestore
+240 fnt84 0 13840(12)m 240 fnt83 5981 13843(Chapter)m 6831(1.)s
+7105(Computer)s 8128(Pr)s 10(o)k 2(gr)k 3(ams)k
+220 fnt35 960 13207(s{abc}<ABC>)m 240 fnt82 480 12713(is)m 711(also)s
+1171(allo)s 6(wed)k 2001(in)s 2266(Perl,)s 2778(b)s 4(ut)k
+220 fnt35 3162 12710(prg2lout)m 240 fnt82 4031 12713(does)m 4543(not)s
+4930(understand)s 6060(that)s 6499(the)s 6869(\207nishing)s 7781(character)s
+8737(can)s 480 12425(change)m 1215(in)s 1459(this)s 1856(w)s 2(ay)k 15(,)k
+2346(so)s 2613(in)s 2858(this)s 3255(e)s 3(xample)k
+4119(it)s 4312(will)s 4739(k)s 2(eep)k 5244(scanning)s
+6149(fore)s 6(v)k 3(er)k 9(,)k 6928(looking)s
+7714(for)s 8053(the)s 8403(second)s 220 fnt35 480 12134(})m
+240 fnt82 604 12137(character)m 9(,)k 1576(which)s 2218(is)s
+2428(disastrous.)s 0 11640(Further)m 763(w)s 2(ork)k 1314(may)s
+1780(eliminate)s 2724(some)s 3285(of)s 3556(these)s 4103(problems.)s
+480 11266(The)m 953(Pod)s 1429(language)s 2394(is)s 2650(used)s
+3192(by)s 3531(Perl)s 4015(programmers)s 5386(for)s 5769(creating)s
+6636(documentation,)s 8210(and)s 8660(may)s 0 10978(be)m 313(found)s
+961(within)s 1660(Perl)s 2131(programs)s 3116(or)s 3406(standing)s
+4301(alone.)s 5015(Lout)s 5558(supports)s 6451(both)s 6965(arrangements)s
+8335(without)s 0 10690(an)m 3(y)k 418(special)s 1157(action)s
+1819(by)s 2134(the)s 2503(user)s 13(.)k 3073(At)s
+3393(the)s 3762(be)s 3(ginning)k 4792(of)s 5084(the)s
+220 fnt35 5453 10687(per)m -3(l)k 240 fnt82 5888 10690(setup)m
+6467(line,)s 6953(the)s 7322(follo)s 6(wing)k 8320(line)s
+8756(has)s 0 10402(been)m 509(placed:)s 220 fnt35 480 9901(@SysInclude { pod })m
+240 fnt82 0 9403(Thus,)m 576(asking)s 1244(for)s 1571(Perl)s
+2000(al)s 2(w)k 2(ays)k 2700(gi)s 6(v)k 3(es)k
+3237(you)s 3641(Pod)s 4062(as)s 4301(well.)s 4866(If)s
+5085(you)s 5490(are)s 5826(using)s 6388(your)s 6876(o)s 6(wn)k
+7330(setup)s 7877(\207les)s 8316(for)s 8643(both)s 0 9115(languages,)m
+1068(it)s 1265(is)s 1480(probably)s 2390(better)s 2998(to)s
+3242(break)s 3839(this)s 4240(connection)s 5352(by)s 5651(deleting)s
+6479(this)s 6880(line)s 7299(from)s 7828(your)s 8332(cop)s 2(y)k
+8855(of)s 0 8827(the)m 220 fnt35 348 8824(per)m -3(l)k
+240 fnt82 762 8827(setup)m 1320(\207le)s 1681(and)s 2085(placing)s
+220 fnt35 480 8326(@Include { m)m 3(ypod })k 480 8038(@Include { m)m 3(yper)k -3(l })k
+240 fnt82 0 7540(at)m 232(the)s 580(start)s 1050(of)s
+1321(your)s 1820(document)s 2824(in)s 3067(the)s 3415(usual)s
+3975(w)s 2(ay)k 15(.)k 480 7166(Because)m 1341(Pod)s
+1781(is)s 2000(a)s 2174(documentation)s 3662(language)s 4591(rather)s
+5215(than)s 5693(a)s 5868(programming)s 7231(language,)s 8211(the)s
+8568(setup)s 0 6878(\207le)m 376(options)s 1148(listed)s 1739(in)s
+1998(Section)s 2787(1.4)s 3157(are)s 3520(mostly)s 4241(of)s
+4527(no)s 4836(rele)s 6(v)k 6(ance.)k 5919(So)s
+6241(for)s 6594(Pod)s 7041(only)s 7537(these)s 8100(ha)s 4(v)k 3(e)k
+8617(been)s 0 6590(discarded)m 987(and)s 1405(replaced)s 2285(by)s
+2593(a)s 2772(completely)s 3902(dif)s 6(ferent)k 4791(set)s
+5129(of)s 5414(options,)s 6239(controlling)s 7355(such)s 7864(things)s
+8514(as)s 8778(the)s 0 6302(size)m 448(of)s 741(headings)s
+1664(and)s 2090(the)s 2460(g)s 1(aps)k 2970(between)s
+3846(list)s 4219(items,)s 4864(which)s 5528(you)s 5964(can)s
+6375(\207nd)s 6828(documented)s 8077(in)s 8342(the)s 220 fnt35
+8712 6299(pod)m 240 fnt82 0 6014(setup)m 558(\207le.)s 480 5640(The)m
+955(only)s 1483(kno)s 6(wn)k 2234(problem)s 3139(with)s
+3669(Pod)s 4147(formatting)s 5256(is)s 5513(that)s 5979(the)s
+220 fnt35 6375 5637(E<>)m 240 fnt82 6874 5640(constructs)m 7942(enclosing)s
+8960(a)s 0 5352(character)m 963(number)s 1783(or)s 2072(a)s
+2267(`non-numeric)s 3650(HTML)s 4415(entity')s 5100(\(to)s 5447(quote)s
+6065(the)s 6442(author)s 7142(of)s 7443(Pod\))s 7973(will)s
+8429(appear)s 0 5064(v)m 3(erbatim)k 906(rather)s 1522(than)s
+1991(being)s 2576(replaced)s 3443(by)s 3737(the)s 4085(characters)s
+5103(the)s 3(y)k 5566(represent.)s
+grestore
+
+grestore
+
+grestore
+
+pgsave restore
+showpage
+
+%%Trailer
+%%DocumentNeededResources: font Courier
+%%+ font Helvetica
+%%+ font Symbol
+%%+ font Times-Roman
+%%+ font Times-Italic
+%%+ font Times-Bold
+%%+ font Times-Italic
+%%DocumentSuppliedResources: procset LoutStartUp
+%%+ procset LoutTabPrependGraphic
+%%+ procset LoutTblPrependGraphic
+%%+ procset LoutFigPrependGraphic
+%%+ procset LoutGraphPrependGraphic
+%%+ procset LoutFigPrependGraphic
+%%+ procset LoutBasicSetup
+%%+ encoding vec2
+%%Pages: 2
+%%EOF
diff --git a/doc/user/vcpp b/doc/user/vcpp
deleted file mode 100644
index b7c18ca..0000000
--- a/doc/user/vcpp
+++ /dev/null
@@ -1 +0,0 @@
-vi cpp cpp_lone cpp_embe cpp_opti cpp_chan cpp_tabs cpp_comm cpp_prog cpp_pipe cpp_erro
diff --git a/doc/user/vprg b/doc/user/vprg
new file mode 100644
index 0000000..21668ba
--- /dev/null
+++ b/doc/user/vprg
@@ -0,0 +1 @@
+vi prg prg_lone prg_embe prg_opti prg_chan prg_tabs prg_comm prg_prog prg_pipe prg_erro prg_perl
diff --git a/externs.h b/externs.h
index 0ee9b59..c1eca07 100644
--- a/externs.h
+++ b/externs.h
@@ -1,6 +1,6 @@
/*@externs.h:External Declarations:Directories and file conventions@**********/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
@@ -95,7 +95,7 @@ extern nl_catd MsgCat;
/* */
/*****************************************************************************/
-#define LOUT_VERSION AsciiToFull("Basser Lout Version 3.19 (March 2000)")
+#define LOUT_VERSION AsciiToFull("Basser Lout Version 3.20 (April 2000)")
#define CROSS_DB AsciiToFull("lout")
#define SOURCE_SUFFIX AsciiToFull(".lt")
#define INDEX_SUFFIX AsciiToFull(".li")
diff --git a/include/README b/include/README
index 008aac8..1a2389a 100644
--- a/include/README
+++ b/include/README
@@ -32,6 +32,8 @@ Setup files (containing mainly lists of options settable by the user)
cprint C and C++
eiffel Eiffel
blue Blue
+ perl Perl + Pod
+ pod Pod
Source files (containing Lout and PostScript source code for the packages)
--------------------------------------------------------------------------
@@ -58,24 +60,26 @@ Source files (containing Lout and PostScript source code for the packages)
graphf The Graph graph drawing package
graphf.etc A file included by graphf
graphf.lpg A PostScript prepend file needed by graphf
- progf Programming language formatting (for use by prg2lout)
- cprintf C and C++
- eiffelf Eiffel
- bluef Blue
pasf Pascal
modulaf Modula-2
latin2.fd Latin2 font definitions file (placeholder file)
russian.fd Russian font definitions file (placeholder file)
+ cprintf C and C++
+ eiffelf Eiffel
+ bluef Blue
+ perlf Perl
+ podf Pod
+
Miscellaneous
-------------
fontdefs Standard font definitions file
langdefs Standard language definitions file
- mydefs Empty file for if the user doesn't have one
+ mydefs Empty file for if the user doesn't have a mydefs
ts The ToySetup package (an expert users' intro. example)
init A Lout source file used during installation (lout -x)
Jeffrey H. Kingston
-9 March 2000
+8 April 2000
diff --git a/include/blue b/include/blue
index 78c5d33..94ae775 100644
--- a/include/blue
+++ b/include/blue
@@ -2,18 +2,19 @@
# #
# Lout setup file for Blue program printing #
# #
+# Version 3.0 #
# Jeffrey H. Kingston #
-# 23 February 2000 #
+# 5 April 2000 #
# #
###############################################################################
###############################################################################
# #
-# The @SysInclude { bluef } line #
+# @SysInclude line #
# #
-# This line causes Lout to read the definitions for Blue, and should #
-# not be touched. #
+# This line causes Lout to read the definitions for this programming #
+# language, and should not be touched. #
# #
###############################################################################
@@ -22,7 +23,7 @@
###############################################################################
# #
-# The @BlueSetup @Use clause #
+# @Use clause #
# #
# To change the default value of any option, delete the # at the start of #
# its line and change the value between braces. #
@@ -30,42 +31,72 @@
###############################################################################
@Use { @BlueSetup
- # style { varying @OrIfPlain fixed } # fixed, varying, or symbol
- # pipe { } # pipe source through this
-
- # fixedfont { Courier } # font family if fixed
- # fixedstrings { Base } # string face if fixed
- # fixedidentifiers { Base } # identifier face if fixed
- # fixedcomments { Base } # comment face if fixed
- # fixedkeywords { Base } # keyword face if fixed
- # fixednumbers { Base } # number face if fixed
- # fixedoperators { Base } # operator face if fixed
- # fixedsize { -1.0p } # font size if fixed
- # fixedline { 1.0vx } # line-space if fixed
- # fixedtabin { 8 } # tab interval if fixed
- # fixedtabout { 8s } # tab width if fixed
-
- # varyingfont { } # font family if varying
- # varyingstrings { Slope } # string face if varying
- # varyingidentifiers { Slope } # identifier face if varying
- # varyingcomments { Base } # comment face if varying
- # varyingkeywords { Bold } # keyword face if varying
- # varyingnumbers { Base } # number face if varying
- # varyingoperators { Base } # operator face if varying
- # varyingsize { 1.0f } # font size if varying
- # varyingline { 1.0vx } # line-space if varying
- # varyingtabin { 8 } # tab interval if varying
- # varyingtabout { 3f } # tab width if varying
-
- # symbolfont { } # font family if symbol
- # symbolstrings { Slope } # string face if symbol
- # symbolidentifiers { Slope } # identifier face if symbol
- # symbolcomments { Base } # comment face if symbol
- # symbolkeywords { Bold } # keyword face if symbol
- # symbolnumbers { Base } # number face if symbol
- # symboloperators { Base } # operator face if symbol
- # symbolsize { 1.0f } # font size if symbol
- # symbolline { 1.0vx } # line-space if symbol
- # symboltabin { 8 } # tab interval if symbol
- # symboltabout { 3f } # tab width if symbol
+ # pipe { } # pipe source through this
+ # style { varying @OrIfPlain fixed } # fixed, varying, or symbol
+
+ # the following options apply when style is "fixed"
+
+ # fixedfont { Courier } # font family
+ # fixedsize { -1.0p } # font size
+ # fixedline { 1.0vx } # line-space
+ # fixedtabin { 8 } # tab interval
+ # fixedtabout { 8s } # tab width
+
+ # fixedidentifiers { Base } # identifier face
+ # fixedkeywords { Base } # keyword face
+ # fixedoperators { Base } # operator face
+ # fixednumbers { Base } # number face
+ # fixedstrings { Base } # string face
+ # fixedcomments { Base } # comment face
+
+ # fixedidentifiersformat { @Body } # identifiers format
+ # fixedkeywordsformat { @Body } # keywords format
+ # fixedoperatorsformat { @Body } # operators format
+ # fixednumbersformat { @Body } # numbers format
+ # fixedstringsformat { @Body } # strings format
+ # fixedcommentsformat { @Body } # comments format
+
+ # the following options apply when style is "varying"
+
+ # varyingfont { } # font family
+ # varyingsize { 1.0f } # font size
+ # varyingline { 1.0vx } # line-space
+ # varyingtabin { 8 } # tab interval
+ # varyingtabout { 3f } # tab width
+
+ # varyingidentifiers { Slope } # identifier face
+ # varyingkeywords { Bold } # keyword face
+ # varyingoperators { Base } # operator face
+ # varyingnumbers { Base } # number face
+ # varyingstrings { Slope } # string face
+ # varyingcomments { Base } # comment face
+
+ # varyingidentifiersformat { @Body } # identifiers format
+ # varyingkeywordsformat { @Body } # keywords format
+ # varyingoperatorsformat { @Body } # operators format
+ # varyingnumbersformat { @Body } # numbers format
+ # varyingstringsformat { @Body } # strings format
+ # varyingcommentsformat { @Body } # comments format
+
+ # the following options apply when style is "symbol"
+
+ # symbolfont { } # font family
+ # symbolsize { 1.0f } # font size
+ # symbolline { 1.0vx } # line-space
+ # symboltabin { 8 } # tab interval
+ # symboltabout { 3f } # tab width
+
+ # symbolidentifiers { Slope } # identifier face
+ # symbolkeywords { Bold } # keyword face
+ # symboloperators { Base } # operator face
+ # symbolnumbers { Base } # number face
+ # symbolstrings { Slope } # string face
+ # symbolcomments { Base } # comment face
+
+ # symbolidentifiersformat { @Body } # identifiers format
+ # symbolkeywordsformat { @Body } # keywords format
+ # symboloperatorsformat { @Body } # operators format
+ # symbolnumbersformat { @Body } # numbers format
+ # symbolstringsformat { @Body } # strings format
+ # symbolcommentsformat { @Body } # comments format
}
diff --git a/include/bluef b/include/bluef
index 2966814..3574516 100644
--- a/include/bluef
+++ b/include/bluef
@@ -3,9 +3,11 @@
# #
# Lout @BlueSetup package for formatting Blue programs #
# #
-# Version 2.0 by Jeffrey H. Kingston, February 2000. #
+# Version 3.0 #
+# Jeffrey H. Kingston #
+# 5 April 2000 #
# #
-# This package uses a filtered body parameter to convert Blue source #
+# This package uses a filtered body parameter to convert program source #
# code into Lout source. The filter program is prg2lout, which is #
# distributed with Lout and should be compiled and installed wherever #
# Lout itself is. #
@@ -14,68 +16,96 @@
export @Blue
def @BlueSetup
+ named pipe { } # pipe through this first
named style
named @OrIfPlain left x right y
{ @BackEnd @Case { PlainText @Yield y else @Yield x } }
- { varying @OrIfPlain fixed } # print style
- named pipe { } # pipe through this first
-
- named fixedfont { Courier } # font family if fixed
- named fixedstrings { Base } # string face if fixed
- named fixedidentifiers { Base } # identifier face if fixed
- named fixedcomments { Base } # comment face if fixed
- named fixedkeywords { Base } # keyword face if fixed
- named fixednumbers { Base } # number face if fixed
- named fixedoperators { Base } # operator face if fixed
- named fixedsize { -1.0p } # font size if fixed
- named fixedline { 1.0vx } # line-space if fixed
- named fixedtabin { 8 } # tab interval if fixed
- named fixedtabout { 8s } # tab width if fixed
-
- named varyingfont { } # font family if varying
- named varyingstrings { Slope } # string face if varying
- named varyingidentifiers { Slope } # identifier face if varying
- named varyingcomments { Base } # comment face if varying
- named varyingkeywords { Bold } # keyword face if varying
- named varyingnumbers { Base } # number face if varying
- named varyingoperators { Base } # operator face if varying
- named varyingsize { 1.0f } # font size if varying
- named varyingline { 1.0vx } # line-space if varying
- named varyingtabin { 8 } # tab interval if varying
- named varyingtabout { 3f } # tab width if varying
-
- named symbolfont { } # font family if symbol
- named symbolstrings { Slope } # string face if symbol
- named symbolidentifiers { Slope } # identifier face if symbol
- named symbolcomments { Base } # comment face if symbol
- named symbolkeywords { Bold } # keyword face if symbol
- named symbolnumbers { Base } # number face if symbol
- named symboloperators { Base } # operator face if symbol
- named symbolsize { 1.0f } # font size if symbol
- named symbolline { 1.0vx } # line-space if symbol
- named symboltabin { 8 } # tab interval if symbol
- named symboltabout { 3f } # tab width if symbol
+ { varying @OrIfPlain fixed } # print style
+
+ # the following options apply when style is "fixed"
+ named fixedfont { Courier }# font family
+ named fixedsize { -1.0p } # font size
+ named fixedline { 1.0vx } # line-space
+ named fixedtabin { 8 } # tab interval
+ named fixedtabout { 8s } # tab width
+
+ named fixedidentifiers { Base } # identifier face
+ named fixedkeywords { Base } # keyword face
+ named fixedoperators { Base } # operator face
+ named fixednumbers { Base } # number face
+ named fixedstrings { Base } # string face
+ named fixedcomments { Base } # comment face
+
+ named fixedidentifiersformat right @Body { @Body } # identifier format
+ named fixedkeywordsformat right @Body { @Body } # keyword format
+ named fixedoperatorsformat right @Body { @Body } # operators format
+ named fixednumbersformat right @Body { @Body } # number format
+ named fixedstringsformat right @Body { @Body } # string format
+ named fixedcommentsformat right @Body { @Body } # comment format
+
+ # the following options apply when style is "varying"
+ named varyingfont { } # font family
+ named varyingsize { 1.0f } # font size
+ named varyingline { 1.0vx } # line-space
+ named varyingtabin { 8 } # tab interval
+ named varyingtabout { 3f } # tab width
+
+ named varyingidentifiers { Slope } # identifier face
+ named varyingkeywords { Bold } # keyword face
+ named varyingoperators { Base } # operator face
+ named varyingnumbers { Base } # number face
+ named varyingstrings { Slope } # string face
+ named varyingcomments { Base } # comment face
+
+ named varyingidentifiersformat right @Body { @Body } # identifier format
+ named varyingkeywordsformat right @Body { @Body } # keyword format
+ named varyingoperatorsformat right @Body { @Body } # operators format
+ named varyingnumbersformat right @Body { @Body } # number format
+ named varyingstringsformat right @Body { @Body } # string format
+ named varyingcommentsformat right @Body { @Body } # comment format
+
+ # the following options apply when style is "symbol"
+ named symbolfont { } # font family
+ named symbolsize { 1.0f } # font size
+ named symbolline { 1.0vx } # line-space
+ named symboltabin { 8 } # tab interval
+ named symboltabout { 3f } # tab width
+
+ named symbolidentifiers { Slope } # identifier face
+ named symbolkeywords { Bold } # keyword face
+ named symboloperators { Base } # operator face
+ named symbolnumbers { Base } # number face
+ named symbolstrings { Slope } # string face
+ named symbolcomments { Base } # comment face
+
+ named symbolidentifiersformat right @Body { @Body } # identifier format
+ named symbolkeywordsformat right @Body { @Body } # keyword format
+ named symboloperatorsformat right @Body { @Body } # operators format
+ named symbolnumbersformat right @Body { @Body } # number format
+ named symbolstringsformat right @Body { @Body } # string format
+ named symbolcommentsformat right @Body { @Body } # comment format
@Begin
export
- "$>" @S @D @C @K @N @O @A @ST @ED @M
+ @PI @PK @PO @PN @PS @PC @PA @PM @PD
+ @A "$>"
def @Blue
named style { style } # style
named pipe { pipe } # pipe through this first
named font { dft } # font family
- named strings { dft } # string font
- named identifiers { dft } # ident. font
- named comments { dft } # comment font
- named keywords { dft } # keyword font
- named numbers { dft } # number font
- named operators { dft } # operator font
named size { dft } # font size
named line { dft } # line-space
named tabin { dft } # tab interval
named tabout { dft } # tab width
+ named identifiers { dft } # ident. font
+ named keywords { dft } # keyword font
+ named operators { dft } # operator font
+ named numbers { dft } # number font
+ named strings { dft } # string font
+ named comments { dft } # comment font
body @Body # filtered, see below
@Begin
@@ -97,6 +127,18 @@ def @BlueSetup
}
}
+
+ def @Else # returns x, or y if x is dft
+ left x
+ right y
+ {
+ x @Case {
+ dft @Yield y
+ else @Yield x
+ }
+ }
+
+
def @InitTab
{
tabin @Test
@@ -105,6 +147,7 @@ def @BlueSetup
ifsymbol { symboltabin }
}
+
def @InitTabWidth
{
tabout @Test
@@ -113,6 +156,7 @@ def @BlueSetup
ifsymbol { symboltabout }
}
+
def @Filter
{
pipe @Case {
@@ -128,6 +172,7 @@ def @BlueSetup
}
}
+
def @InitFontFamily
{
font @Test
@@ -136,6 +181,7 @@ def @BlueSetup
ifsymbol { symbolfont }
}
+
def @InitSize
{
size @Test
@@ -144,6 +190,7 @@ def @BlueSetup
ifsymbol { symbolsize }
}
+
def @InitLine
{
line @Test
@@ -152,120 +199,153 @@ def @BlueSetup
ifsymbol { symbolline }
}
- def @S # for formatting strings
+
+ def @PI # for formatting identifiers
right x
{
- # "\"" &
- strings @Test
- iffixed { fixedstrings }
- ifvarying { varyingstrings }
- ifsymbol { symbolstrings }
- @Font x
- # & "\""
+ style @Case {
+ fixed @Yield fixedidentifiersformat {
+ { identifiers @Else fixedidentifiers } @Font x
+ }
+ varying @Yield varyingidentifiersformat {
+ { identifiers @Else varyingidentifiers } @Font x
+ }
+ symbol @Yield symbolidentifiersformat {
+ { identifiers @Else symbolidentifiers } @Font x
+ }
+ }
}
-# def "`"
-# {
-# style @Case {
-# symbol @Yield { "`" }
-# else @Yield { "'" }
-# }
-# }
- def @D # for formatting identifiers
+ def @PK # for formatting keywords
right x
{
- identifiers @Test
- iffixed { fixedidentifiers }
- ifvarying { varyingidentifiers }
- ifsymbol { symbolidentifiers }
- @Font x
+ style @Case {
+ fixed @Yield fixedkeywordsformat {
+ { keywords @Else fixedkeywords } @Font x
+ }
+ varying @Yield varyingkeywordsformat {
+ { keywords @Else varyingkeywords } @Font x
+ }
+ symbol @Yield symbolkeywordsformat {
+ { keywords @Else symbolkeywords } @Font x
+ }
+ }
}
- def @C # for formatting comments
+
+ def @PO # for formatting operators
right x
{
- comments @Test
- iffixed { fixedcomments }
- ifvarying { varyingcomments }
- ifsymbol { symbolcomments }
- @Font x
+ style @Case {
+ fixed @Yield fixedoperatorsformat {
+ { operators @Else fixedoperators } @Font x
+ }
+ varying @Yield varyingoperatorsformat {
+ { operators @Else varyingoperators } @Font x
+ }
+ symbol @Yield symboloperatorsformat {
+ { operators @Else symboloperators } @Font x
+ }
+ }
}
- def @K # for formatting keywords
+
+ def @PN # for formatting numbers
right x
{
- keywords @Test
- iffixed { fixedkeywords }
- ifvarying { varyingkeywords }
- ifsymbol { symbolkeywords }
- @Font x
+ style @Case {
+ fixed @Yield fixednumbersformat {
+ { numbers @Else fixednumbers } @Font x
+ }
+ varying @Yield varyingnumbersformat {
+ { numbers @Else varyingnumbers } @Font x
+ }
+ symbol @Yield symbolnumbersformat {
+ { numbers @Else symbolnumbers } @Font x
+ }
+ }
}
- def @N # for formatting numbers
+
+ def @PS # for formatting strings
right x
{
- numbers @Test
- iffixed { fixednumbers }
- ifvarying { varyingnumbers }
- ifsymbol { symbolnumbers }
- @Font x
+ style @Case {
+ fixed @Yield fixedstringsformat {
+ { strings @Else fixedstrings } @Font x
+ }
+ varying @Yield varyingstringsformat {
+ { strings @Else varyingstrings } @Font x
+ }
+ symbol @Yield symbolstringsformat {
+ { strings @Else symbolstrings } @Font x
+ }
+ }
}
- def @O # for formatting operators
+
+ def @PC # for formatting comments
right x
{
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font x
+ style @Case {
+ fixed @Yield fixedcommentsformat {
+ { comments @Else fixedcomments } @Font x
+ }
+ varying @Yield varyingcommentsformat {
+ { comments @Else varyingcomments } @Font x
+ }
+ symbol @Yield symbolcommentsformat {
+ { comments @Else symbolcomments } @Font x
+ }
+ }
}
- def @A # get characters from the Adobe Symbol font
- left sym
- right x
+
+ def @PA # for formatting asterisks
{
- style @Case {
- symbol @Yield { { Symbol Base } @Font @Char sym }
- else @Yield { x }
+ @PO @BackEnd @Case {
+ PlainText @Yield "*"
+ else @Yield { "0.5w" @VShift "*" }
}
}
- def @ST # for formatting asterisks
- right x
+
+ def @PM # for formatting minus signs
{
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font "0.5w" @VShift x
+ @PO @BackEnd @Case {
+ PlainText @Yield "-"
+ else @Yield style @Case {
+ fixed @Yield "-"
+ else @Yield { { Symbol Base } @Font @Char "minus" }
+ }
+ }
}
- def @ED # for formatting larger dots
- right x
+
+ def @PD # for formatting dots, if wanted larger
{
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font @BackEnd @Case {
- PlainText @Yield x
- else @Yield { "1.2f" @Font "+0.05f" @VShift @O x &"0.05f" }
+ @PO @BackEnd @Case {
+ PlainText @Yield "."
+ else @Yield { "1.4f" @Font "+0.04f" @VShift "." &"0.05f" }
}
}
- macro "$>" { {} & }
- def @M right x
+ def @A # get characters from the Adobe Symbol font
+ left sym
+ right x
{
style @Case {
- fixed @Yield "-"
- varying @Yield { { Symbol Base } @Font @Char minus }
- symbol @Yield { { Symbol Base } @Font @Char minus }
+ symbol @Yield { { Symbol Base } @Font @Char sym }
+ else @Yield { x }
}
}
+
+ macro "$>" { {} & }
+
+
{ @InitFontFamily Base @InitSize } @Font
{ @InitLine lines } @Break @Body
diff --git a/include/cprint b/include/cprint
index e720b22..b3d69c5 100644
--- a/include/cprint
+++ b/include/cprint
@@ -1,19 +1,20 @@
###############################################################################
# #
-# Lout setup file for C program printing #
+# Lout setup file for C and C++ program printing #
# #
+# Version 3.0 #
# Jeffrey H. Kingston #
-# 23 February 2000 #
+# 5 April 2000 #
# #
###############################################################################
###############################################################################
# #
-# The @SysInclude { cprintf } line #
+# @SysInclude line #
# #
-# This line causes Lout to read the definitions for C, and should #
-# not be touched. #
+# This line causes Lout to read the definitions for this programming #
+# language, and should not be touched. #
# #
###############################################################################
@@ -22,7 +23,7 @@
###############################################################################
# #
-# The @CPSetup @Use clause #
+# @Use clause #
# #
# To change the default value of any option, delete the # at the start of #
# its line and change the value between braces. #
@@ -30,42 +31,72 @@
###############################################################################
@Use { @CPSetup
- # style { fixed } # fixed, varying, or symbol
- # pipe { } # pipe source through this
-
- # fixedfont { Courier } # font family if fixed
- # fixedstrings { Base } # string face if fixed
- # fixedidentifiers { Base } # identifier face if fixed
- # fixedcomments { Base } # comment face if fixed
- # fixedkeywords { Base } # keyword face if fixed
- # fixednumbers { Base } # number face if fixed
- # fixedoperators { Base } # operator face if fixed
- # fixedsize { -1.0p } # font size if fixed
- # fixedline { 1.0vx } # line-space if fixed
- # fixedtabin { 8 } # tab interval if fixed
- # fixedtabout { 8s } # tab width if fixed
-
- # varyingfont { } # font family if varying
- # varyingstrings { Slope } # string face if varying
- # varyingidentifiers { Slope } # identifier face if varying
- # varyingcomments { Base } # comment face if varying
- # varyingkeywords { Bold } # keyword face if varying
- # varyingnumbers { Base } # number face if varying
- # varyingoperators { Base } # operator face if varying
- # varyingsize { 1.0f } # font size if varying
- # varyingline { 1.0vx } # line-space if varying
- # varyingtabin { 8 } # tab interval if varying
- # varyingtabout { 3f } # tab width if varying
-
- # symbolfont { } # font family if symbol
- # symbolstrings { Slope } # string face if symbol
- # symbolidentifiers { Slope } # identifier face if symbol
- # symbolcomments { Base } # comment face if symbol
- # symbolkeywords { Bold } # keyword face if symbol
- # symbolnumbers { Base } # number face if symbol
- # symboloperators { Base } # operator face if symbol
- # symbolsize { 1.0f } # font size if symbol
- # symbolline { 1.0vx } # line-space if symbol
- # symboltabin { 8 } # tab interval if symbol
- # symboltabout { 3f } # tab width if symbol
+ # pipe { } # pipe source through this
+ # style { fixed } # fixed, varying, or symbol
+
+ # the following options apply when style is "fixed"
+
+ # fixedfont { Courier } # font family
+ # fixedsize { -1.0p } # font size
+ # fixedline { 1.0vx } # line-space
+ # fixedtabin { 8 } # tab interval
+ # fixedtabout { 8s } # tab width
+
+ # fixedidentifiers { Base } # identifier face
+ # fixedkeywords { Base } # keyword face
+ # fixedoperators { Base } # operator face
+ # fixednumbers { Base } # number face
+ # fixedstrings { Base } # string face
+ # fixedcomments { Base } # comment face
+
+ # fixedidentifiersformat { @Body } # identifiers format
+ # fixedkeywordsformat { @Body } # keywords format
+ # fixedoperatorsformat { @Body } # operators format
+ # fixednumbersformat { @Body } # numbers format
+ # fixedstringsformat { @Body } # strings format
+ # fixedcommentsformat { @Body } # comments format
+
+ # the following options apply when style is "varying"
+
+ # varyingfont { } # font family
+ # varyingsize { 1.0f } # font size
+ # varyingline { 1.0vx } # line-space
+ # varyingtabin { 8 } # tab interval
+ # varyingtabout { 3f } # tab width
+
+ # varyingidentifiers { Slope } # identifier face
+ # varyingkeywords { Bold } # keyword face
+ # varyingoperators { Base } # operator face
+ # varyingnumbers { Base } # number face
+ # varyingstrings { Slope } # string face
+ # varyingcomments { Base } # comment face
+
+ # varyingidentifiersformat { @Body } # identifiers format
+ # varyingkeywordsformat { @Body } # keywords format
+ # varyingoperatorsformat { @Body } # operators format
+ # varyingnumbersformat { @Body } # numbers format
+ # varyingstringsformat { @Body } # strings format
+ # varyingcommentsformat { @Body } # comments format
+
+ # the following options apply when style is "symbol"
+
+ # symbolfont { } # font family
+ # symbolsize { 1.0f } # font size
+ # symbolline { 1.0vx } # line-space
+ # symboltabin { 8 } # tab interval
+ # symboltabout { 3f } # tab width
+
+ # symbolidentifiers { Slope } # identifier face
+ # symbolkeywords { Bold } # keyword face
+ # symboloperators { Base } # operator face
+ # symbolnumbers { Base } # number face
+ # symbolstrings { Slope } # string face
+ # symbolcomments { Base } # comment face
+
+ # symbolidentifiersformat { @Body } # identifiers format
+ # symbolkeywordsformat { @Body } # keywords format
+ # symboloperatorsformat { @Body } # operators format
+ # symbolnumbersformat { @Body } # numbers format
+ # symbolstringsformat { @Body } # strings format
+ # symbolcommentsformat { @Body } # comments format
}
diff --git a/include/cprintf b/include/cprintf
index 313b110..5a2ce50 100644
--- a/include/cprintf
+++ b/include/cprintf
@@ -1,11 +1,13 @@
###############################################################################
# #
-# Lout @CPSetup package for formatting C programs #
+# Lout @CPSetup package for formatting C and C++ programs #
# #
-# Version 2.0 by Jeffrey H. Kingston, February 2000. #
+# Version 3.0 #
+# Jeffrey H. Kingston #
+# 5 April 2000 #
# #
-# This package uses a filtered body parameter to convert C source #
+# This package uses a filtered body parameter to convert program source #
# code into Lout source. The filter program is prg2lout, which is #
# distributed with Lout and should be compiled and installed wherever #
# Lout itself is. #
@@ -14,69 +16,96 @@
export @CP
def @CPSetup
+ named pipe { } # pipe through this first
named style
- named @OrIfPlain left x right y
- { @BackEnd @Case { PlainText @Yield y else @Yield x } }
- { fixed } # print style
-
- named pipe { } # pipe through this first
-
- named fixedfont { Courier } # font family if fixed
- named fixedstrings { Base } # string face if fixed
- named fixedidentifiers { Base } # identifier face if fixed
- named fixedcomments { Base } # comment face if fixed
- named fixedkeywords { Base } # keyword face if fixed
- named fixednumbers { Base } # number face if fixed
- named fixedoperators { Base } # operator face if fixed
- named fixedsize { -1.0p } # font size if fixed
- named fixedline { 1.0vx } # line-space if fixed
- named fixedtabin { 8 } # tab interval if fixed
- named fixedtabout { 8s } # tab width if fixed
-
- named varyingfont { } # font family if varying
- named varyingstrings { Slope } # string face if varying
- named varyingidentifiers { Slope } # identifier face if varying
- named varyingcomments { Base } # comment face if varying
- named varyingkeywords { Bold } # keyword face if varying
- named varyingnumbers { Base } # number face if varying
- named varyingoperators { Base } # operator face if varying
- named varyingsize { 1.0f } # font size if varying
- named varyingline { 1.0vx } # line-space if varying
- named varyingtabin { 8 } # tab interval if varying
- named varyingtabout { 3f } # tab width if varying
-
- named symbolfont { } # font family if symbol
- named symbolstrings { Slope } # string face if symbol
- named symbolidentifiers { Slope } # identifier face if symbol
- named symbolcomments { Base } # comment face if symbol
- named symbolkeywords { Bold } # keyword face if symbol
- named symbolnumbers { Base } # number face if symbol
- named symboloperators { Base } # operator face if symbol
- named symbolsize { 1.0f } # font size if symbol
- named symbolline { 1.0vx } # line-space if symbol
- named symboltabin { 8 } # tab interval if symbol
- named symboltabout { 3f } # tab width if symbol
+ named @OrIfPlain left x right y
+ { @BackEnd @Case { PlainText @Yield y else @Yield x } }
+ { fixed } # print style
+
+ # the following options apply when style is "fixed"
+ named fixedfont { Courier }# font family
+ named fixedsize { -1.0p } # font size
+ named fixedline { 1.0vx } # line-space
+ named fixedtabin { 8 } # tab interval
+ named fixedtabout { 8s } # tab width
+
+ named fixedidentifiers { Base } # identifier face
+ named fixedkeywords { Base } # keyword face
+ named fixedoperators { Base } # operator face
+ named fixednumbers { Base } # number face
+ named fixedstrings { Base } # string face
+ named fixedcomments { Base } # comment face
+
+ named fixedidentifiersformat right @Body { @Body } # identifier format
+ named fixedkeywordsformat right @Body { @Body } # keyword format
+ named fixedoperatorsformat right @Body { @Body } # operators format
+ named fixednumbersformat right @Body { @Body } # number format
+ named fixedstringsformat right @Body { @Body } # string format
+ named fixedcommentsformat right @Body { @Body } # comment format
+
+ # the following options apply when style is "varying"
+ named varyingfont { } # font family
+ named varyingsize { 1.0f } # font size
+ named varyingline { 1.0vx } # line-space
+ named varyingtabin { 8 } # tab interval
+ named varyingtabout { 3f } # tab width
+
+ named varyingidentifiers { Slope } # identifier face
+ named varyingkeywords { Bold } # keyword face
+ named varyingoperators { Base } # operator face
+ named varyingnumbers { Base } # number face
+ named varyingstrings { Slope } # string face
+ named varyingcomments { Base } # comment face
+
+ named varyingidentifiersformat right @Body { @Body } # identifier format
+ named varyingkeywordsformat right @Body { @Body } # keyword format
+ named varyingoperatorsformat right @Body { @Body } # operators format
+ named varyingnumbersformat right @Body { @Body } # number format
+ named varyingstringsformat right @Body { @Body } # string format
+ named varyingcommentsformat right @Body { @Body } # comment format
+
+ # the following options apply when style is "symbol"
+ named symbolfont { } # font family
+ named symbolsize { 1.0f } # font size
+ named symbolline { 1.0vx } # line-space
+ named symboltabin { 8 } # tab interval
+ named symboltabout { 3f } # tab width
+
+ named symbolidentifiers { Slope } # identifier face
+ named symbolkeywords { Bold } # keyword face
+ named symboloperators { Base } # operator face
+ named symbolnumbers { Base } # number face
+ named symbolstrings { Slope } # string face
+ named symbolcomments { Base } # comment face
+
+ named symbolidentifiersformat right @Body { @Body } # identifier format
+ named symbolkeywordsformat right @Body { @Body } # keyword format
+ named symboloperatorsformat right @Body { @Body } # operators format
+ named symbolnumbersformat right @Body { @Body } # number format
+ named symbolstringsformat right @Body { @Body } # string format
+ named symbolcommentsformat right @Body { @Body } # comment format
@Begin
export
- "$>" @S @D @C @K @N @O @A @ST @ED @M
+ @PI @PK @PO @PN @PS @PC @PA @PM @PD
+ @A "$>"
def @CP
named style { style } # style
named pipe { pipe } # pipe through this first
named font { dft } # font family
- named strings { dft } # string font
- named identifiers { dft } # ident. font
- named comments { dft } # comment font
- named keywords { dft } # keyword font
- named numbers { dft } # number font
- named operators { dft } # operator font
named size { dft } # font size
named line { dft } # line-space
named tabin { dft } # tab interval
named tabout { dft } # tab width
+ named identifiers { dft } # ident. font
+ named keywords { dft } # keyword font
+ named operators { dft } # operator font
+ named numbers { dft } # number font
+ named strings { dft } # string font
+ named comments { dft } # comment font
body @Body # filtered, see below
@Begin
@@ -98,6 +127,18 @@ def @CPSetup
}
}
+
+ def @Else # returns x, or y if x is dft
+ left x
+ right y
+ {
+ x @Case {
+ dft @Yield y
+ else @Yield x
+ }
+ }
+
+
def @InitTab
{
tabin @Test
@@ -106,6 +147,7 @@ def @CPSetup
ifsymbol { symboltabin }
}
+
def @InitTabWidth
{
tabout @Test
@@ -114,6 +156,7 @@ def @CPSetup
ifsymbol { symboltabout }
}
+
def @Filter
{
pipe @Case {
@@ -129,6 +172,7 @@ def @CPSetup
}
}
+
def @InitFontFamily
{
font @Test
@@ -137,6 +181,7 @@ def @CPSetup
ifsymbol { symbolfont }
}
+
def @InitSize
{
size @Test
@@ -145,6 +190,7 @@ def @CPSetup
ifsymbol { symbolsize }
}
+
def @InitLine
{
line @Test
@@ -153,120 +199,153 @@ def @CPSetup
ifsymbol { symbolline }
}
- def @S # for formatting strings
+
+ def @PI # for formatting identifiers
right x
{
- # "\"" &
- strings @Test
- iffixed { fixedstrings }
- ifvarying { varyingstrings }
- ifsymbol { symbolstrings }
- @Font x
- # & "\""
+ style @Case {
+ fixed @Yield fixedidentifiersformat {
+ { identifiers @Else fixedidentifiers } @Font x
+ }
+ varying @Yield varyingidentifiersformat {
+ { identifiers @Else varyingidentifiers } @Font x
+ }
+ symbol @Yield symbolidentifiersformat {
+ { identifiers @Else symbolidentifiers } @Font x
+ }
+ }
}
-# def "`"
-# {
-# style @Case {
-# symbol @Yield { "`" }
-# else @Yield { "'" }
-# }
-# }
- def @D # for formatting identifiers
+ def @PK # for formatting keywords
right x
{
- identifiers @Test
- iffixed { fixedidentifiers }
- ifvarying { varyingidentifiers }
- ifsymbol { symbolidentifiers }
- @Font x
+ style @Case {
+ fixed @Yield fixedkeywordsformat {
+ { keywords @Else fixedkeywords } @Font x
+ }
+ varying @Yield varyingkeywordsformat {
+ { keywords @Else varyingkeywords } @Font x
+ }
+ symbol @Yield symbolkeywordsformat {
+ { keywords @Else symbolkeywords } @Font x
+ }
+ }
}
- def @C # for formatting comments
+
+ def @PO # for formatting operators
right x
{
- comments @Test
- iffixed { fixedcomments }
- ifvarying { varyingcomments }
- ifsymbol { symbolcomments }
- @Font x
+ style @Case {
+ fixed @Yield fixedoperatorsformat {
+ { operators @Else fixedoperators } @Font x
+ }
+ varying @Yield varyingoperatorsformat {
+ { operators @Else varyingoperators } @Font x
+ }
+ symbol @Yield symboloperatorsformat {
+ { operators @Else symboloperators } @Font x
+ }
+ }
}
- def @K # for formatting keywords
+
+ def @PN # for formatting numbers
right x
{
- keywords @Test
- iffixed { fixedkeywords }
- ifvarying { varyingkeywords }
- ifsymbol { symbolkeywords }
- @Font x
+ style @Case {
+ fixed @Yield fixednumbersformat {
+ { numbers @Else fixednumbers } @Font x
+ }
+ varying @Yield varyingnumbersformat {
+ { numbers @Else varyingnumbers } @Font x
+ }
+ symbol @Yield symbolnumbersformat {
+ { numbers @Else symbolnumbers } @Font x
+ }
+ }
}
- def @N # for formatting numbers
+
+ def @PS # for formatting strings
right x
{
- numbers @Test
- iffixed { fixednumbers }
- ifvarying { varyingnumbers }
- ifsymbol { symbolnumbers }
- @Font x
+ style @Case {
+ fixed @Yield fixedstringsformat {
+ { strings @Else fixedstrings } @Font x
+ }
+ varying @Yield varyingstringsformat {
+ { strings @Else varyingstrings } @Font x
+ }
+ symbol @Yield symbolstringsformat {
+ { strings @Else symbolstrings } @Font x
+ }
+ }
}
- def @O # for formatting operators
+
+ def @PC # for formatting comments
right x
{
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font x
+ style @Case {
+ fixed @Yield fixedcommentsformat {
+ { comments @Else fixedcomments } @Font x
+ }
+ varying @Yield varyingcommentsformat {
+ { comments @Else varyingcomments } @Font x
+ }
+ symbol @Yield symbolcommentsformat {
+ { comments @Else symbolcomments } @Font x
+ }
+ }
}
- def @A # get characters from the Adobe Symbol font
- left sym
- right x
+
+ def @PA # for formatting asterisks
{
- style @Case {
- symbol @Yield { { Symbol Base } @Font @Char sym }
- else @Yield { x }
+ @PO @BackEnd @Case {
+ PlainText @Yield "*"
+ else @Yield { "0.5w" @VShift "*" }
}
}
- def @ST # for formatting asterisks
- right x
+
+ def @PM # for formatting minus signs
{
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font "0.5w" @VShift x
+ @PO @BackEnd @Case {
+ PlainText @Yield "-"
+ else @Yield style @Case {
+ fixed @Yield "-"
+ else @Yield { { Symbol Base } @Font @Char "minus" }
+ }
+ }
}
-
- def @ED # for formatting larger dots (not used in C)
- right x
+
+
+ def @PD # for formatting dots, if wanted larger
{
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font @BackEnd @Case {
- PlainText @Yield x
- else @Yield { "1.2f" @Font "+0.05f" @VShift @O x &"0.05f" }
+ @PO @BackEnd @Case {
+ PlainText @Yield "."
+ else @Yield { "1.4f" @Font "+0.04f" @VShift "." &"0.05f" }
}
}
- macro "$>" { {} & }
- def @M right x
+ def @A # get characters from the Adobe Symbol font
+ left sym
+ right x
{
style @Case {
- fixed @Yield "-"
- varying @Yield { { Symbol Base } @Font @Char minus }
- symbol @Yield { { Symbol Base } @Font @Char minus }
+ symbol @Yield { { Symbol Base } @Font @Char sym }
+ else @Yield { x }
}
}
+
+ macro "$>" { {} & }
+
+
{ @InitFontFamily Base @InitSize } @Font
{ @InitLine lines } @Break @Body
diff --git a/include/eiffel b/include/eiffel
index a55d5f7..e31a170 100644
--- a/include/eiffel
+++ b/include/eiffel
@@ -2,18 +2,19 @@
# #
# Lout setup file for Eiffel program printing #
# #
+# Version 3.0 #
# Jeffrey H. Kingston #
-# 23 February 2000 #
+# 5 April 2000 #
# #
###############################################################################
###############################################################################
# #
-# The @SysInclude { eiffelf } line #
+# @SysInclude line #
# #
-# This line causes Lout to read the definitions for Eiffel, and should #
-# not be touched. #
+# This line causes Lout to read the definitions for this programming #
+# language, and should not be touched. #
# #
###############################################################################
@@ -22,7 +23,7 @@
###############################################################################
# #
-# The @EiffelSetup @Use clause #
+# @Use clause #
# #
# To change the default value of any option, delete the # at the start of #
# its line and change the value between braces. #
@@ -30,42 +31,72 @@
###############################################################################
@Use { @EiffelSetup
- # style { varying @OrIfPlain fixed } # fixed, varying, or symbol
- # pipe { } # pipe source through this
-
- # fixedfont { Courier } # font family if fixed
- # fixedstrings { Base } # string face if fixed
- # fixedidentifiers { Base } # identifier face if fixed
- # fixedcomments { Base } # comment face if fixed
- # fixedkeywords { Base } # keyword face if fixed
- # fixednumbers { Base } # number face if fixed
- # fixedoperators { Base } # operator face if fixed
- # fixedsize { -1.0p } # font size if fixed
- # fixedline { 1.0vx } # line-space if fixed
- # fixedtabin { 8 } # tab interval if fixed
- # fixedtabout { 8s } # tab width if fixed
-
- # varyingfont { } # font family if varying
- # varyingstrings { Slope } # string face if varying
- # varyingidentifiers { Slope } # identifier face if varying
- # varyingcomments { Base } # comment face if varying
- # varyingkeywords { Bold } # keyword face if varying
- # varyingnumbers { Base } # number face if varying
- # varyingoperators { Base } # operator face if varying
- # varyingsize { 1.0f } # font size if varying
- # varyingline { 1.0vx } # line-space if varying
- # varyingtabin { 8 } # tab interval if varying
- # varyingtabout { 3f } # tab width if varying
-
- # symbolfont { } # font family if symbol
- # symbolstrings { Slope } # string face if symbol
- # symbolidentifiers { Slope } # identifier face if symbol
- # symbolcomments { Base } # comment face if symbol
- # symbolkeywords { Bold } # keyword face if symbol
- # symbolnumbers { Base } # number face if symbol
- # symboloperators { Base } # operator face if symbol
- # symbolsize { 1.0f } # font size if symbol
- # symbolline { 1.0vx } # line-space if symbol
- # symboltabin { 8 } # tab interval if symbol
- # symboltabout { 3f } # tab width if symbol
+ # pipe { } # pipe source through this
+ # style { varying @OrIfPlain fixed } # fixed, varying, or symbol
+
+ # the following options apply when style is "fixed"
+
+ # fixedfont { Courier } # font family
+ # fixedsize { -1.0p } # font size
+ # fixedline { 1.0vx } # line-space
+ # fixedtabin { 8 } # tab interval
+ # fixedtabout { 8s } # tab width
+
+ # fixedidentifiers { Base } # identifier face
+ # fixedkeywords { Base } # keyword face
+ # fixedoperators { Base } # operator face
+ # fixednumbers { Base } # number face
+ # fixedstrings { Base } # string face
+ # fixedcomments { Base } # comment face
+
+ # fixedidentifiersformat { @Body } # identifiers format
+ # fixedkeywordsformat { @Body } # keywords format
+ # fixedoperatorsformat { @Body } # operators format
+ # fixednumbersformat { @Body } # numbers format
+ # fixedstringsformat { @Body } # strings format
+ # fixedcommentsformat { @Body } # comments format
+
+ # the following options apply when style is "varying"
+
+ # varyingfont { } # font family
+ # varyingsize { 1.0f } # font size
+ # varyingline { 1.0vx } # line-space
+ # varyingtabin { 8 } # tab interval
+ # varyingtabout { 3f } # tab width
+
+ # varyingidentifiers { Slope } # identifier face
+ # varyingkeywords { Bold } # keyword face
+ # varyingoperators { Base } # operator face
+ # varyingnumbers { Base } # number face
+ # varyingstrings { Slope } # string face
+ # varyingcomments { Base } # comment face
+
+ # varyingidentifiersformat { @Body } # identifiers format
+ # varyingkeywordsformat { @Body } # keywords format
+ # varyingoperatorsformat { @Body } # operators format
+ # varyingnumbersformat { @Body } # numbers format
+ # varyingstringsformat { @Body } # strings format
+ # varyingcommentsformat { @Body } # comments format
+
+ # the following options apply when style is "symbol"
+
+ # symbolfont { } # font family
+ # symbolsize { 1.0f } # font size
+ # symbolline { 1.0vx } # line-space
+ # symboltabin { 8 } # tab interval
+ # symboltabout { 3f } # tab width
+
+ # symbolidentifiers { Slope } # identifier face
+ # symbolkeywords { Bold } # keyword face
+ # symboloperators { Base } # operator face
+ # symbolnumbers { Base } # number face
+ # symbolstrings { Slope } # string face
+ # symbolcomments { Base } # comment face
+
+ # symbolidentifiersformat { @Body } # identifiers format
+ # symbolkeywordsformat { @Body } # keywords format
+ # symboloperatorsformat { @Body } # operators format
+ # symbolnumbersformat { @Body } # numbers format
+ # symbolstringsformat { @Body } # strings format
+ # symbolcommentsformat { @Body } # comments format
}
diff --git a/include/eiffelf b/include/eiffelf
index 5ba94e1..2beaa6e 100644
--- a/include/eiffelf
+++ b/include/eiffelf
@@ -3,9 +3,11 @@
# #
# Lout @EiffelSetup package for formatting Eiffel programs #
# #
-# Version 2.0 by Jeffrey H. Kingston, February 2000. #
+# Version 3.0 #
+# Jeffrey H. Kingston #
+# 5 April 2000 #
# #
-# This package uses a filtered body parameter to convert Eiffel source #
+# This package uses a filtered body parameter to convert program source #
# code into Lout source. The filter program is prg2lout, which is #
# distributed with Lout and should be compiled and installed wherever #
# Lout itself is. #
@@ -14,68 +16,96 @@
export @Eiffel
def @EiffelSetup
+ named pipe { } # pipe through this first
named style
named @OrIfPlain left x right y
{ @BackEnd @Case { PlainText @Yield y else @Yield x } }
- { varying @OrIfPlain fixed } # print style
- named pipe { } # pipe through this first
-
- named fixedfont { Courier } # font family if fixed
- named fixedstrings { Base } # string face if fixed
- named fixedidentifiers { Base } # identifier face if fixed
- named fixedcomments { Base } # comment face if fixed
- named fixedkeywords { Base } # keyword face if fixed
- named fixednumbers { Base } # number face if fixed
- named fixedoperators { Base } # operator face if fixed
- named fixedsize { -1.0p } # font size if fixed
- named fixedline { 1.0vx } # line-space if fixed
- named fixedtabin { 8 } # tab interval if fixed
- named fixedtabout { 8s } # tab width if fixed
-
- named varyingfont { } # font family if varying
- named varyingstrings { Slope } # string face if varying
- named varyingidentifiers { Slope } # identifier face if varying
- named varyingcomments { Base } # comment face if varying
- named varyingkeywords { Bold } # keyword face if varying
- named varyingnumbers { Base } # number face if varying
- named varyingoperators { Base } # operator face if varying
- named varyingsize { 1.0f } # font size if varying
- named varyingline { 1.0vx } # line-space if varying
- named varyingtabin { 8 } # tab interval if varying
- named varyingtabout { 3f } # tab width if varying
-
- named symbolfont { } # font family if symbol
- named symbolstrings { Slope } # string face if symbol
- named symbolidentifiers { Slope } # identifier face if symbol
- named symbolcomments { Base } # comment face if symbol
- named symbolkeywords { Bold } # keyword face if symbol
- named symbolnumbers { Base } # number face if symbol
- named symboloperators { Base } # operator face if symbol
- named symbolsize { 1.0f } # font size if symbol
- named symbolline { 1.0vx } # line-space if symbol
- named symboltabin { 8 } # tab interval if symbol
- named symboltabout { 3f } # tab width if symbol
+ { varying @OrIfPlain fixed } # print style
+
+ # the following options apply when style is "fixed"
+ named fixedfont { Courier }# font family
+ named fixedsize { -1.0p } # font size
+ named fixedline { 1.0vx } # line-space
+ named fixedtabin { 8 } # tab interval
+ named fixedtabout { 8s } # tab width
+
+ named fixedidentifiers { Base } # identifier face
+ named fixedkeywords { Base } # keyword face
+ named fixedoperators { Base } # operator face
+ named fixednumbers { Base } # number face
+ named fixedstrings { Base } # string face
+ named fixedcomments { Base } # comment face
+
+ named fixedidentifiersformat right @Body { @Body } # identifier format
+ named fixedkeywordsformat right @Body { @Body } # keyword format
+ named fixedoperatorsformat right @Body { @Body } # operators format
+ named fixednumbersformat right @Body { @Body } # number format
+ named fixedstringsformat right @Body { @Body } # string format
+ named fixedcommentsformat right @Body { @Body } # comment format
+
+ # the following options apply when style is "varying"
+ named varyingfont { } # font family
+ named varyingsize { 1.0f } # font size
+ named varyingline { 1.0vx } # line-space
+ named varyingtabin { 8 } # tab interval
+ named varyingtabout { 3f } # tab width
+
+ named varyingidentifiers { Slope } # identifier face
+ named varyingkeywords { Bold } # keyword face
+ named varyingoperators { Base } # operator face
+ named varyingnumbers { Base } # number face
+ named varyingstrings { Slope } # string face
+ named varyingcomments { Base } # comment face
+
+ named varyingidentifiersformat right @Body { @Body } # identifier format
+ named varyingkeywordsformat right @Body { @Body } # keyword format
+ named varyingoperatorsformat right @Body { @Body } # operators format
+ named varyingnumbersformat right @Body { @Body } # number format
+ named varyingstringsformat right @Body { @Body } # string format
+ named varyingcommentsformat right @Body { @Body } # comment format
+
+ # the following options apply when style is "symbol"
+ named symbolfont { } # font family
+ named symbolsize { 1.0f } # font size
+ named symbolline { 1.0vx } # line-space
+ named symboltabin { 8 } # tab interval
+ named symboltabout { 3f } # tab width
+
+ named symbolidentifiers { Slope } # identifier face
+ named symbolkeywords { Bold } # keyword face
+ named symboloperators { Base } # operator face
+ named symbolnumbers { Base } # number face
+ named symbolstrings { Slope } # string face
+ named symbolcomments { Base } # comment face
+
+ named symbolidentifiersformat right @Body { @Body } # identifier format
+ named symbolkeywordsformat right @Body { @Body } # keyword format
+ named symboloperatorsformat right @Body { @Body } # operators format
+ named symbolnumbersformat right @Body { @Body } # number format
+ named symbolstringsformat right @Body { @Body } # string format
+ named symbolcommentsformat right @Body { @Body } # comment format
@Begin
export
- "$>" @S @D @C @K @N @O @A @ST @ED @M
+ @PI @PK @PO @PN @PS @PC @PA @PM @PD
+ @A "$>"
def @Eiffel
named style { style } # style
named pipe { pipe } # pipe through this first
named font { dft } # font family
- named strings { dft } # string font
- named identifiers { dft } # ident. font
- named comments { dft } # comment font
- named keywords { dft } # keyword font
- named numbers { dft } # number font
- named operators { dft } # operator font
named size { dft } # font size
named line { dft } # line-space
named tabin { dft } # tab interval
named tabout { dft } # tab width
+ named identifiers { dft } # ident. font
+ named keywords { dft } # keyword font
+ named operators { dft } # operator font
+ named numbers { dft } # number font
+ named strings { dft } # string font
+ named comments { dft } # comment font
body @Body # filtered, see below
@Begin
@@ -97,6 +127,18 @@ def @EiffelSetup
}
}
+
+ def @Else # returns x, or y if x is dft
+ left x
+ right y
+ {
+ x @Case {
+ dft @Yield y
+ else @Yield x
+ }
+ }
+
+
def @InitTab
{
tabin @Test
@@ -105,6 +147,7 @@ def @EiffelSetup
ifsymbol { symboltabin }
}
+
def @InitTabWidth
{
tabout @Test
@@ -113,6 +156,7 @@ def @EiffelSetup
ifsymbol { symboltabout }
}
+
def @Filter
{
pipe @Case {
@@ -128,6 +172,7 @@ def @EiffelSetup
}
}
+
def @InitFontFamily
{
font @Test
@@ -136,6 +181,7 @@ def @EiffelSetup
ifsymbol { symbolfont }
}
+
def @InitSize
{
size @Test
@@ -144,6 +190,7 @@ def @EiffelSetup
ifsymbol { symbolsize }
}
+
def @InitLine
{
line @Test
@@ -152,120 +199,153 @@ def @EiffelSetup
ifsymbol { symbolline }
}
- def @S # for formatting strings
+
+ def @PI # for formatting identifiers
right x
{
- # "\"" &
- strings @Test
- iffixed { fixedstrings }
- ifvarying { varyingstrings }
- ifsymbol { symbolstrings }
- @Font x
- # & "\""
+ style @Case {
+ fixed @Yield fixedidentifiersformat {
+ { identifiers @Else fixedidentifiers } @Font x
+ }
+ varying @Yield varyingidentifiersformat {
+ { identifiers @Else varyingidentifiers } @Font x
+ }
+ symbol @Yield symbolidentifiersformat {
+ { identifiers @Else symbolidentifiers } @Font x
+ }
+ }
}
-# def "`"
-# {
-# style @Case {
-# symbol @Yield { "`" }
-# else @Yield { "'" }
-# }
-# }
- def @D # for formatting identifiers
+ def @PK # for formatting keywords
right x
{
- identifiers @Test
- iffixed { fixedidentifiers }
- ifvarying { varyingidentifiers }
- ifsymbol { symbolidentifiers }
- @Font x
+ style @Case {
+ fixed @Yield fixedkeywordsformat {
+ { keywords @Else fixedkeywords } @Font x
+ }
+ varying @Yield varyingkeywordsformat {
+ { keywords @Else varyingkeywords } @Font x
+ }
+ symbol @Yield symbolkeywordsformat {
+ { keywords @Else symbolkeywords } @Font x
+ }
+ }
}
- def @C # for formatting comments
+
+ def @PO # for formatting operators
right x
{
- comments @Test
- iffixed { fixedcomments }
- ifvarying { varyingcomments }
- ifsymbol { symbolcomments }
- @Font x
+ style @Case {
+ fixed @Yield fixedoperatorsformat {
+ { operators @Else fixedoperators } @Font x
+ }
+ varying @Yield varyingoperatorsformat {
+ { operators @Else varyingoperators } @Font x
+ }
+ symbol @Yield symboloperatorsformat {
+ { operators @Else symboloperators } @Font x
+ }
+ }
}
- def @K # for formatting keywords
+
+ def @PN # for formatting numbers
right x
{
- keywords @Test
- iffixed { fixedkeywords }
- ifvarying { varyingkeywords }
- ifsymbol { symbolkeywords }
- @Font x
+ style @Case {
+ fixed @Yield fixednumbersformat {
+ { numbers @Else fixednumbers } @Font x
+ }
+ varying @Yield varyingnumbersformat {
+ { numbers @Else varyingnumbers } @Font x
+ }
+ symbol @Yield symbolnumbersformat {
+ { numbers @Else symbolnumbers } @Font x
+ }
+ }
}
- def @N # for formatting numbers
+
+ def @PS # for formatting strings
right x
{
- numbers @Test
- iffixed { fixednumbers }
- ifvarying { varyingnumbers }
- ifsymbol { symbolnumbers }
- @Font x
+ style @Case {
+ fixed @Yield fixedstringsformat {
+ { strings @Else fixedstrings } @Font x
+ }
+ varying @Yield varyingstringsformat {
+ { strings @Else varyingstrings } @Font x
+ }
+ symbol @Yield symbolstringsformat {
+ { strings @Else symbolstrings } @Font x
+ }
+ }
}
- def @O # for formatting operators
+
+ def @PC # for formatting comments
right x
{
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font x
+ style @Case {
+ fixed @Yield fixedcommentsformat {
+ { comments @Else fixedcomments } @Font x
+ }
+ varying @Yield varyingcommentsformat {
+ { comments @Else varyingcomments } @Font x
+ }
+ symbol @Yield symbolcommentsformat {
+ { comments @Else symbolcomments } @Font x
+ }
+ }
}
- def @A # get characters from the Adobe Symbol font
- left sym
- right x
+
+ def @PA # for formatting asterisks
{
- style @Case {
- symbol @Yield { { Symbol Base } @Font @Char sym }
- else @Yield { x }
+ @PO @BackEnd @Case {
+ PlainText @Yield "*"
+ else @Yield { "0.5w" @VShift "*" }
}
}
- def @ST # for formatting asterisks
- right x
+
+ def @PM # for formatting minus signs
{
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font "0.5w" @VShift x
+ @PO @BackEnd @Case {
+ PlainText @Yield "-"
+ else @Yield style @Case {
+ fixed @Yield "-"
+ else @Yield { { Symbol Base } @Font @Char "minus" }
+ }
+ }
}
- def @ED # for formatting larger dots
- right x
+
+ def @PD # for formatting dots, if wanted larger
{
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font @BackEnd @Case {
- PlainText @Yield x
- else @Yield { "1.2f" @Font "+0.05f" @VShift @O x &"0.05f" }
+ @PO @BackEnd @Case {
+ PlainText @Yield "."
+ else @Yield { "1.4f" @Font "+0.04f" @VShift "." &"0.05f" }
}
}
- macro "$>" { {} & }
- def @M right x
+ def @A # get characters from the Adobe Symbol font
+ left sym
+ right x
{
style @Case {
- fixed @Yield "-"
- varying @Yield { { Symbol Base } @Font @Char minus }
- symbol @Yield { { Symbol Base } @Font @Char minus }
+ symbol @Yield { { Symbol Base } @Font @Char sym }
+ else @Yield { x }
}
}
+
+ macro "$>" { {} & }
+
+
{ @InitFontFamily Base @InitSize } @Font
{ @InitLine lines } @Break @Body
diff --git a/include/perl b/include/perl
new file mode 100644
index 0000000..86561a9
--- /dev/null
+++ b/include/perl
@@ -0,0 +1,102 @@
+###############################################################################
+# #
+# Lout setup file for Perl program printing #
+# #
+# Version 3.0 #
+# Jeffrey H. Kingston #
+# 5 April 2000 #
+# #
+###############################################################################
+
+
+###############################################################################
+# #
+# @SysInclude line #
+# #
+# This line causes Lout to read the definitions for this programming #
+# language, and should not be touched. #
+# #
+###############################################################################
+
+@SysInclude { perlf }
+
+
+###############################################################################
+# #
+# @Use clause #
+# #
+# To change the default value of any option, delete the # at the start of #
+# its line and change the value between braces. #
+# #
+###############################################################################
+
+@Use { @PerlSetup
+ # pipe { } # pipe source through this
+ # style { fixed } # fixed, varying, or symbol
+
+ # the following options apply when style is "fixed"
+
+ # fixedfont { Courier } # font family
+ # fixedsize { -1.0p } # font size
+ # fixedline { 1.0vx } # line-space
+ # fixedtabin { 8 } # tab interval
+ # fixedtabout { 8s } # tab width
+
+ # fixedidentifiers { Base } # identifier face
+ # fixedkeywords { Base } # keyword face
+ # fixedoperators { Base } # operator face
+ # fixednumbers { Base } # number face
+ # fixedstrings { Base } # string face
+ # fixedcomments { Base } # comment face
+
+ # fixedidentifiersformat { @Body } # identifiers format
+ # fixedkeywordsformat { @Body } # keywords format
+ # fixedoperatorsformat { @Body } # operators format
+ # fixednumbersformat { @Body } # numbers format
+ # fixedstringsformat { @Body } # strings format
+ # fixedcommentsformat { @Body } # comments format
+
+ # the following options apply when style is "varying"
+
+ # varyingfont { } # font family
+ # varyingsize { 1.0f } # font size
+ # varyingline { 1.0vx } # line-space
+ # varyingtabin { 8 } # tab interval
+ # varyingtabout { 3f } # tab width
+
+ # varyingidentifiers { Slope } # identifier face
+ # varyingkeywords { Bold } # keyword face
+ # varyingoperators { Base } # operator face
+ # varyingnumbers { Base } # number face
+ # varyingstrings { Slope } # string face
+ # varyingcomments { Base } # comment face
+
+ # varyingidentifiersformat { @Body } # identifiers format
+ # varyingkeywordsformat { @Body } # keywords format
+ # varyingoperatorsformat { @Body } # operators format
+ # varyingnumbersformat { @Body } # numbers format
+ # varyingstringsformat { @Body } # strings format
+ # varyingcommentsformat { @Body } # comments format
+
+ # the following options apply when style is "symbol"
+
+ # symbolfont { } # font family
+ # symbolsize { 1.0f } # font size
+ # symbolline { 1.0vx } # line-space
+ # symboltabin { 8 } # tab interval
+ # symboltabout { 3f } # tab width
+
+ # symbolidentifiers { Slope } # identifier face
+ # symbolkeywords { Bold } # keyword face
+ # symboloperators { Base } # operator face
+ # symbolnumbers { Base } # number face
+ # symbolstrings { Slope } # string face
+ # symbolcomments { Base } # comment face
+
+ # symbolidentifiersformat { @Body } # identifiers format
+ # symbolkeywordsformat { @Body } # keywords format
+ # symboloperatorsformat { @Body } # operators format
+ # symbolnumbersformat { @Body } # numbers format
+ # symbolstringsformat { @Body } # strings format
+ # symbolcommentsformat { @Body } # comments format
+}
diff --git a/include/perlf b/include/perlf
new file mode 100644
index 0000000..20604d3
--- /dev/null
+++ b/include/perlf
@@ -0,0 +1,354 @@
+
+###############################################################################
+# #
+# Lout @PerlSetup package for formatting Perl programs #
+# #
+# Version 3.0 #
+# Jeffrey H. Kingston #
+# 5 April 2000 #
+# #
+# This package uses a filtered body parameter to convert program source #
+# code into Lout source. The filter program is prg2lout, which is #
+# distributed with Lout and should be compiled and installed wherever #
+# Lout itself is. #
+# #
+###############################################################################
+
+export @Perl
+def @PerlSetup
+ named pipe { } # pipe through this first
+ named style
+ named @OrIfPlain left x right y
+ { @BackEnd @Case { PlainText @Yield y else @Yield x } }
+ { fixed } # print style
+
+ # the following options apply when style is "fixed"
+ named fixedfont { Courier }# font family
+ named fixedsize { -1.0p } # font size
+ named fixedline { 1.0vx } # line-space
+ named fixedtabin { 8 } # tab interval
+ named fixedtabout { 8s } # tab width
+
+ named fixedidentifiers { Base } # identifier face
+ named fixedkeywords { Base } # keyword face
+ named fixedoperators { Base } # operator face
+ named fixednumbers { Base } # number face
+ named fixedstrings { Base } # string face
+ named fixedcomments { Base } # comment face
+
+ named fixedidentifiersformat right @Body { @Body } # identifier format
+ named fixedkeywordsformat right @Body { @Body } # keyword format
+ named fixedoperatorsformat right @Body { @Body } # operators format
+ named fixednumbersformat right @Body { @Body } # number format
+ named fixedstringsformat right @Body { @Body } # string format
+ named fixedcommentsformat right @Body { @Body } # comment format
+
+ # the following options apply when style is "varying"
+ named varyingfont { } # font family
+ named varyingsize { 1.0f } # font size
+ named varyingline { 1.0vx } # line-space
+ named varyingtabin { 8 } # tab interval
+ named varyingtabout { 3f } # tab width
+
+ named varyingidentifiers { Slope } # identifier face
+ named varyingkeywords { Bold } # keyword face
+ named varyingoperators { Base } # operator face
+ named varyingnumbers { Base } # number face
+ named varyingstrings { Slope } # string face
+ named varyingcomments { Base } # comment face
+
+ named varyingidentifiersformat right @Body { @Body } # identifier format
+ named varyingkeywordsformat right @Body { @Body } # keyword format
+ named varyingoperatorsformat right @Body { @Body } # operators format
+ named varyingnumbersformat right @Body { @Body } # number format
+ named varyingstringsformat right @Body { @Body } # string format
+ named varyingcommentsformat right @Body { @Body } # comment format
+
+ # the following options apply when style is "symbol"
+ named symbolfont { } # font family
+ named symbolsize { 1.0f } # font size
+ named symbolline { 1.0vx } # line-space
+ named symboltabin { 8 } # tab interval
+ named symboltabout { 3f } # tab width
+
+ named symbolidentifiers { Slope } # identifier face
+ named symbolkeywords { Bold } # keyword face
+ named symboloperators { Base } # operator face
+ named symbolnumbers { Base } # number face
+ named symbolstrings { Slope } # string face
+ named symbolcomments { Base } # comment face
+
+ named symbolidentifiersformat right @Body { @Body } # identifier format
+ named symbolkeywordsformat right @Body { @Body } # keyword format
+ named symboloperatorsformat right @Body { @Body } # operators format
+ named symbolnumbersformat right @Body { @Body } # number format
+ named symbolstringsformat right @Body { @Body } # string format
+ named symbolcommentsformat right @Body { @Body } # comment format
+
+@Begin
+
+ export
+
+ @PI @PK @PO @PN @PS @PC @PA @PM @PD
+ @A "$>"
+
+ def @Perl
+ named style { style } # style
+ named pipe { pipe } # pipe through this first
+ named font { dft } # font family
+ named size { dft } # font size
+ named line { dft } # line-space
+ named tabin { dft } # tab interval
+ named tabout { dft } # tab width
+ named identifiers { dft } # ident. font
+ named keywords { dft } # keyword font
+ named operators { dft } # operator font
+ named numbers { dft } # number font
+ named strings { dft } # string font
+ named comments { dft } # comment font
+ body @Body # filtered, see below
+ @Begin
+
+ def @Test # returns x unless x is dft
+ left x
+ named iffixed {}
+ named ifvarying {}
+ named ifsymbol {}
+ {
+ x @Case {
+ dft @Yield {
+ style @Case {
+ fixed @Yield { iffixed }
+ varying @Yield { ifvarying }
+ symbol @Yield { ifsymbol }
+ }
+ }
+ else @Yield x
+ }
+ }
+
+
+ def @Else # returns x, or y if x is dft
+ left x
+ right y
+ {
+ x @Case {
+ dft @Yield y
+ else @Yield x
+ }
+ }
+
+
+ def @InitTab
+ {
+ tabin @Test
+ iffixed { fixedtabin }
+ ifvarying { varyingtabin }
+ ifsymbol { symboltabin }
+ }
+
+
+ def @InitTabWidth
+ {
+ tabout @Test
+ iffixed { fixedtabout }
+ ifvarying { varyingtabout }
+ ifsymbol { symboltabout }
+ }
+
+
+ def @Filter
+ {
+ pipe @Case {
+ "" @Yield {
+ "prg2lout -r -lPerl" -i{@FilterIn} -o{@FilterOut} -e{@FilterErr}
+ -t{@InitTab} -T{@InitTabWidth}
+ }
+ else @Yield {
+ "cat" @FilterIn "|" pipe "|"
+ "prg2lout -r -lPerl" -o{@FilterOut}
+ -e{@FilterErr} -t{@InitTab} -T{@InitTabWidth}
+ }
+ }
+ }
+
+
+ def @InitFontFamily
+ {
+ font @Test
+ iffixed { fixedfont }
+ ifvarying { varyingfont }
+ ifsymbol { symbolfont }
+ }
+
+
+ def @InitSize
+ {
+ size @Test
+ iffixed { fixedsize }
+ ifvarying { varyingsize }
+ ifsymbol { symbolsize }
+ }
+
+
+ def @InitLine
+ {
+ line @Test
+ iffixed { fixedline }
+ ifvarying { varyingline }
+ ifsymbol { symbolline }
+ }
+
+
+ def @PI # for formatting identifiers
+ right x
+ {
+ style @Case {
+ fixed @Yield fixedidentifiersformat {
+ { identifiers @Else fixedidentifiers } @Font x
+ }
+ varying @Yield varyingidentifiersformat {
+ { identifiers @Else varyingidentifiers } @Font x
+ }
+ symbol @Yield symbolidentifiersformat {
+ { identifiers @Else symbolidentifiers } @Font x
+ }
+ }
+ }
+
+
+ def @PK # for formatting keywords
+ right x
+ {
+ style @Case {
+ fixed @Yield fixedkeywordsformat {
+ { keywords @Else fixedkeywords } @Font x
+ }
+ varying @Yield varyingkeywordsformat {
+ { keywords @Else varyingkeywords } @Font x
+ }
+ symbol @Yield symbolkeywordsformat {
+ { keywords @Else symbolkeywords } @Font x
+ }
+ }
+ }
+
+
+ def @PO # for formatting operators
+ right x
+ {
+ style @Case {
+ fixed @Yield fixedoperatorsformat {
+ { operators @Else fixedoperators } @Font x
+ }
+ varying @Yield varyingoperatorsformat {
+ { operators @Else varyingoperators } @Font x
+ }
+ symbol @Yield symboloperatorsformat {
+ { operators @Else symboloperators } @Font x
+ }
+ }
+ }
+
+
+ def @PN # for formatting numbers
+ right x
+ {
+ style @Case {
+ fixed @Yield fixednumbersformat {
+ { numbers @Else fixednumbers } @Font x
+ }
+ varying @Yield varyingnumbersformat {
+ { numbers @Else varyingnumbers } @Font x
+ }
+ symbol @Yield symbolnumbersformat {
+ { numbers @Else symbolnumbers } @Font x
+ }
+ }
+ }
+
+
+ def @PS # for formatting strings
+ right x
+ {
+ style @Case {
+ fixed @Yield fixedstringsformat {
+ { strings @Else fixedstrings } @Font x
+ }
+ varying @Yield varyingstringsformat {
+ { strings @Else varyingstrings } @Font x
+ }
+ symbol @Yield symbolstringsformat {
+ { strings @Else symbolstrings } @Font x
+ }
+ }
+ }
+
+
+ def @PC # for formatting comments
+ right x
+ {
+ style @Case {
+ fixed @Yield fixedcommentsformat {
+ { comments @Else fixedcomments } @Font x
+ }
+ varying @Yield varyingcommentsformat {
+ { comments @Else varyingcomments } @Font x
+ }
+ symbol @Yield symbolcommentsformat {
+ { comments @Else symbolcomments } @Font x
+ }
+ }
+ }
+
+
+ def @PA # for formatting asterisks
+ {
+ @PO @BackEnd @Case {
+ PlainText @Yield "*"
+ else @Yield { "0.5w" @VShift "*" }
+ }
+ }
+
+
+ def @PM # for formatting minus signs
+ {
+ @PO @BackEnd @Case {
+ PlainText @Yield "-"
+ else @Yield style @Case {
+ fixed @Yield "-"
+ else @Yield { { Symbol Base } @Font @Char "minus" }
+ }
+ }
+ }
+
+
+ def @PD # for formatting dots, if wanted larger
+ {
+ @PO @BackEnd @Case {
+ PlainText @Yield "."
+ else @Yield { "1.4f" @Font "+0.04f" @VShift "." &"0.05f" }
+ }
+ }
+
+
+ def @A # get characters from the Adobe Symbol font
+ left sym
+ right x
+ {
+ style @Case {
+ symbol @Yield { { Symbol Base } @Font @Char sym }
+ else @Yield { x }
+ }
+ }
+
+
+ macro "$>" { {} & }
+
+
+ { @InitFontFamily Base @InitSize } @Font
+ { @InitLine lines } @Break @Body
+
+ @End @Perl
+
+@End @PerlSetup
diff --git a/include/pod b/include/pod
new file mode 100644
index 0000000..e827a24
--- /dev/null
+++ b/include/pod
@@ -0,0 +1,164 @@
+###############################################################################
+# #
+# Lout setup file for Pod documentation printing #
+# #
+# Note: although Pod is treated like a programming language in some #
+# respects, the setup file options below are largely unrelated to #
+# the setup file options for other languages. #
+# #
+# Version 3.0 #
+# Jeffrey H. Kingston #
+# 5 April 2000 #
+# #
+###############################################################################
+
+
+###############################################################################
+# #
+# @SysInclude line #
+# #
+# This line causes Lout to read the definitions for this programming #
+# language, and should not be touched. #
+# #
+###############################################################################
+
+@SysInclude { podf }
+
+
+###############################################################################
+# #
+# @Use clause #
+# #
+# To change the default value of any option, delete the # at the start of #
+# its line and change the value between braces. #
+# #
+# Pod has two quite different kinds of paragraphs: verbatim and non- #
+# verbatim. When we say "verbatim" and "text" below we refer to these. #
+# There is no paragraph breaking option for verbatim since line breaks #
+# are honoured. #
+# #
+###############################################################################
+
+@Use { @PodSetup
+ # pipe { } # pipe source through this
+ # style { varying @OrIfPlain fixed } # fixed, varying, or symbol
+
+ # the following options apply when style is "fixed"
+
+ # fixedtextfont { Courier Base -1p } # text font
+ # fixedtextbreak { adjust 1.0vx hyphen } # text para breaking
+ # fixedverbatimfont { Courier Base } # verbatim font
+ # fixedtabin { 8 } # tab interval
+ # fixedtabout { 8s } # tab width
+
+ # fixedparagap { 1.0v } # gap between paras
+ # fixedlistgap { 1.0v } # gap within lists
+ # fixedlistindent { 0s } # list label indent
+ # fixedlistrightindent { 0s } # list right indent
+ # fixedlistlabelwidth { 2.0f } # default label space
+ # fixedlistlabelfont { } # list label font
+ # fixedlistlabelformat { @Body } # list label format
+
+ # fixedaheadfont { Bold +4p } # =head1 font
+ # fixedaheadbreak { lines 1.1vx } # =head1 para break
+ # fixedaheadformat { @DP @Body } # =head1 format
+ # fixedbheadfont { Bold +2p } # =head2 font
+ # fixedbheadbreak { lines 1.1vx } # =head2 para break
+ # fixedbheadformat { @Body } # =head2 format
+ # fixedcheadfont { Bold } # =head3 font
+ # fixedcheadbreak { lines 1.1vx } # =head3 para break
+ # fixedcheadformat { @Body } # =head3 format
+
+ # fixeditalicfont { Slope } # font of I<>
+ # fixeditalicformat { @Body } # format of I<>
+ # fixedboldfont { Bold } # font of B<>
+ # fixedboldformat { @Body } # format of B<>
+ # fixedcodefont { Base } # font of C<>
+ # fixedcodeformat { @Body } # format of C<>
+ # fixedfilefont { Slope } # font of F<>
+ # fixedfileformat { @Body } # format of F<>
+ # fixedlinkfont { Slope } # font of L<>
+ # fixedlinkformat { @Underline @Body } # format of L<>
+ # fixedindexfont { Slope } # font of X<>
+ # fixedindexformat { @Body } # format of X<>
+
+
+ # the following options apply when style is "varying"
+
+ # varyingtextfont { } # text font
+ # varyingtextbreak { adjust 1.0vx hyphen } # text para breaking
+ # varyingverbatimfont { Courier Base -1p } # verbatim font
+ # varyingtabin { 8 } # tab interval
+ # varyingtabout { 8s } # tab width
+
+ # varyingparagap { 1.0v } # gap between paras
+ # varyinglistgap { 1.0v } # gap within lists
+ # varyinglistindent { 0s } # list label indent
+ # varyinglistrightindent { 0s } # list right indent
+ # varyinglistlabelwidth { 2.0f } # default label space
+ # varyinglistlabelfont { } # list label font
+ # varyinglistlabelformat { @Body } # list label format
+
+ # varyingaheadfont { Bold +4p } # =head1 font
+ # varyingaheadbreak { lines 1.1vx } # =head1 para break
+ # varyingaheadformat { @DP @Body } # =head1 format
+ # varyingbheadfont { Bold +2p } # =head2 font
+ # varyingbheadbreak { lines 1.1vx } # =head2 para break
+ # varyingbheadformat { @Body } # =head2 format
+ # varyingcheadfont { Bold } # =head3 font
+ # varyingcheadbreak { lines 1.1vx } # =head3 para break
+ # varyingcheadformat { @Body } # =head3 format
+
+ # varyingitalicfont { Slope } # font of I<>
+ # varyingitalicformat { @Body } # format of I<>
+ # varyingboldfont { Bold } # font of B<>
+ # varyingboldformat { @Body } # format of B<>
+ # varyingcodefont { Courier Base -1p } # font of C<>
+ # varyingcodeformat { @Body } # format of C<>
+ # varyingfilefont { Slope } # font of F<>
+ # varyingfileformat { @Body } # format of F<>
+ # varyinglinkfont { Slope } # font of L<>
+ # varyinglinkformat { @Underline @Body } # format of L<>
+ # varyingindexfont { Slope } # font of X<>
+ # varyingindexformat { @Body } # format of X<>
+
+ # the following options apply when style is "symbol"
+
+ # symboltextfont { } # text font
+ # symboltextbreak { adjust 1.0vx hyphen } # text para breaking
+ # symbolverbatimfont { Courier Base -1p } # verbatim font
+ # symboltabin { 8 } # tab interval
+ # symboltabout { 8s } # tab width
+
+ # symbolparagap { 1.0v } # gap between paras
+ # symbollistgap { 1.0v } # gap within lists
+ # symbollistindent { 0s } # list label indent
+ # symbollistrightindent { 0s } # list right indent
+ # symbollistlabelwidth { 2.0f } # default label space
+ # symbollistlabelfont { } # list label font
+ # symbollistlabelformat { @Body } # list label format
+
+ # symbolaheadfont { Bold +4p } # =head1 font
+ # symbolaheadbreak { lines 1.1vx } # =head1 para break
+ # symbolaheadformat { @DP @Body } # =head1 format
+ # symbolbheadfont { Bold +2p } # =head2 font
+ # symbolbheadbreak { lines 1.1vx } # =head2 para break
+ # symbolbheadformat { @Body } # =head2 format
+ # symbolcheadfont { Bold } # =head3 font
+ # symbolcheadbreak { lines 1.1vx } # =head3 para break
+ # symbolcheadformat { @Body } # =head3 format
+
+ # symbolitalicfont { Slope } # font of I<>
+ # symbolitalicformat { @Body } # format of I<>
+ # symbolboldfont { Bold } # font of B<>
+ # symbolboldformat { @Body } # format of B<>
+ # symbolcodefont { Courier Base -1p } # font of C<>
+ # symbolcodeformat { @Body } # format of C<>
+ # symbolfilefont { Slope } # font of F<>
+ # symbolfileformat { @Body } # format of F<>
+ # symbollinkfont { Slope } # font of L<>
+ # symbollinkformat { @Underline @Body } # format of L<>
+ # symbolindexfont { Slope } # font of X<>
+ # symbolindexformat { @Body } # format of X<>
+
+}
diff --git a/include/podf b/include/podf
new file mode 100644
index 0000000..108f455
--- /dev/null
+++ b/include/podf
@@ -0,0 +1,513 @@
+
+###############################################################################
+# #
+# Lout @PodSetup package for formatting Pod programs #
+# #
+# Jeffrey H. Kingston #
+# 25 March 2000 #
+# #
+# This package uses a filtered body parameter to convert Pod source #
+# code into Lout source. The filter program is prg2lout, which is #
+# distributed with Lout and should be compiled and installed wherever #
+# Lout itself is. #
+# #
+###############################################################################
+
+export @Pod
+def @PodSetup
+ named pipe { } # pipe through this first
+ named style
+ named @OrIfPlain left x right y
+ { @BackEnd @Case { PlainText @Yield y else @Yield x } }
+ { varying @OrIfPlain fixed } # print style
+
+
+ # the following options apply when style is "fixed"
+
+ named fixedtextfont { Courier Base -1p } # text font
+ named fixedtextbreak { adjust 1.0vx hyphen } # text para breaking
+ named fixedverbatimfont { Courier Base } # verbatim font
+ named fixedtabin { 8 } # tab interval
+ named fixedtabout { 8s } # tab width
+
+ named fixedparagap { 1.0v } # gap between paras
+ named fixedlistgap { 1.0v } # gap within lists
+ named fixedlistindent { 0s } # list label indent
+ named fixedlistrightindent { 0s } # list right indent
+ named fixedlistlabelwidth { 2.0f } # default label space
+ named fixedlistlabelfont { } # list label font
+ named fixedlistlabelformat right @Body { @Body } # list label format
+
+ named fixedaheadfont { Bold +4p } # =head1 font
+ named fixedaheadbreak { lines 1.1vx } # =head1 para break
+ named fixedaheadformat right @Body { @DP @Body } # =head1 format
+ named fixedbheadfont { Bold +2p } # =head2 font
+ named fixedbheadbreak { lines 1.1vx } # =head2 para break
+ named fixedbheadformat right @Body { @Body } # =head2 format
+ named fixedcheadfont { Bold } # =head3 font
+ named fixedcheadbreak { lines 1.1vx } # =head3 para break
+ named fixedcheadformat right @Body { @Body } # =head3 format
+
+ named fixeditalicfont { Slope } # font of I<>
+ named fixeditalicformat right @Body { @Body } # format of I<>
+ named fixedboldfont { Bold } # font of B<>
+ named fixedboldformat right @Body { @Body } # format of B<>
+ named fixedcodefont { Base } # font of C<>
+ named fixedcodeformat right @Body { @Body } # format of C<>
+ named fixedfilefont { Slope } # font of F<>
+ named fixedfileformat right @Body { @Body } # format of F<>
+ named fixedlinkfont { Slope } # font of L<>
+ named fixedlinkformat right @Body { @Underline @Body } # format of L<>
+ named fixedindexfont { Slope } # font of X<>
+ named fixedindexformat right @Body { @Body } # format of X<>
+
+
+ # the following options apply when style is "varying"
+
+ named varyingtextfont { } # text font
+ named varyingtextbreak { adjust 1.0vx hyphen } # text para breaking
+ named varyingverbatimfont { Courier Base -1p } # verbatim font
+ named varyingtabin { 8 } # tab interval
+ named varyingtabout { 8s } # tab width
+
+ named varyingparagap { 1.0v } # gap between paras
+ named varyinglistgap { 1.0v } # gap within lists
+ named varyinglistindent { 0s } # list label indent
+ named varyinglistrightindent { 0s } # list right indent
+ named varyinglistlabelwidth { 2.0f } # default label space
+ named varyinglistlabelfont { } # list label font
+ named varyinglistlabelformat right @Body { @Body } # list label format
+
+ named varyingaheadfont { Bold +4p } # =head1 font
+ named varyingaheadbreak { lines 1.1vx } # =head1 para break
+ named varyingaheadformat right @Body{ @DP @Body } # =head1 format
+ named varyingbheadfont { Bold +2p } # =head2 font
+ named varyingbheadbreak { lines 1.1vx } # =head2 para break
+ named varyingbheadformat right @Body{ @Body } # =head2 format
+ named varyingcheadfont { Bold } # =head3 font
+ named varyingcheadbreak { lines 1.1vx } # =head3 para break
+ named varyingcheadformat right @Body{ @Body } # =head3 format
+
+ named varyingitalicfont { Slope } # font of I<>
+ named varyingitalicformat right @Body { @Body } # format of I<>
+ named varyingboldfont { Bold } # font of B<>
+ named varyingboldformat right @Body { @Body } # format of B<>
+ named varyingcodefont { Courier Base -1p } # font of C<>
+ named varyingcodeformat right @Body { @Body } # format of C<>
+ named varyingfilefont { Slope } # font of F<>
+ named varyingfileformat right @Body { @Body } # format of F<>
+ named varyinglinkfont { Slope } # font of L<>
+ named varyinglinkformat right @Body { @Underline @Body } # format of L<>
+ named varyingindexfont { Slope } # font of X<>
+ named varyingindexformat right @Body{ @Body } # format of X<>
+
+ # the following options apply when style is "symbol"
+
+ named symboltextfont { } # text font
+ named symboltextbreak { adjust 1.0vx hyphen } # text para breaking
+ named symbolverbatimfont { Courier Base -1p } # verbatim font
+ named symboltabin { 8 } # tab interval
+ named symboltabout { 8s } # tab width
+
+ named symbolparagap { 1.0v } # gap between paras
+ named symbollistgap { 1.0v } # gap within lists
+ named symbollistindent { 0s } # list label indent
+ named symbollistrightindent { 0s } # list right indent
+ named symbollistlabelwidth { 2.0f } # default label space
+ named symbollistlabelfont { } # list label font
+ named symbollistlabelformat right @Body { @Body } # list label format
+
+ named symbolaheadfont { Bold +4p } # =head1 font
+ named symbolaheadbreak { lines 1.1vx } # =head1 para break
+ named symbolaheadformat right @Body { @DP @Body } # =head1 format
+ named symbolbheadfont { Bold +2p } # =head2 font
+ named symbolbheadbreak { lines 1.1vx } # =head2 para break
+ named symbolbheadformat right @Body { @Body } # =head2 format
+ named symbolcheadfont { Bold } # =head3 font
+ named symbolcheadbreak { lines 1.1vx } # =head3 para break
+ named symbolcheadformat right @Body { @Body } # =head3 format
+
+ named symbolitalicfont { Slope } # font of I<>
+ named symbolitalicformat right @Body{ @Body } # format of I<>
+ named symbolboldfont { Bold } # font of B<>
+ named symbolboldformat right @Body { @Body } # format of B<>
+ named symbolcodefont { Courier Base -1p } # font of C<>
+ named symbolcodeformat right @Body { @Body } # format of C<>
+ named symbolfilefont { Slope } # font of F<>
+ named symbolfileformat right @Body { @Body } # format of F<>
+ named symbollinkfont { Slope } # font of L<>
+ named symbollinkformat right @Body { @Underline @Body } # format of L<>
+ named symbolindexfont { Slope } # font of X<>
+ named symbolindexformat right @Body { @Body } # format of X<>
+
+@Begin
+
+
+ export
+
+ @PV @PPG @PLG @PLI @PLRI @PLLW @PLL @PHA @PHB @PHC
+ @PFI @PFB @PFC @PFF @PFL @PFX @A "$>"
+
+ def @Pod
+ named style { style } # style
+ named pipe { pipe } # pipe through this
+ named textfont { dft } # text font
+ named textbreak { dft } # text para breaking
+ named verbatimfont { dft } # verbatim font
+ named tabin { dft } # tab interval
+ named tabout { dft } # tab width
+ named paragap { dft } # gap between paras
+ named listgap { dft } # gap within lists
+ named listindent { dft } # list label indent
+ named listrightindent { dft } # list right indent
+ named listlabelwidth { dft } # default label space
+ named listlabelfont { dft } # list label font
+ named aheadfont { dft } # =head1 font
+ named aheadbreak { dft } # =head1 para break
+ named bheadfont { dft } # =head2 font
+ named bheadbreak { dft } # =head2 para break
+ named cheadfont { dft } # =head3 font
+ named cheadbreak { dft } # =head3 para break
+ named italicfont { dft } # font of I<>
+ named boldfont { dft } # font of B<>
+ named codefont { dft } # font of C<>
+ named filefont { dft } # font of F<>
+ named linkfont { dft } # font of L<>
+ named indexfont { dft } # font of X<>
+ body @Body # filtered, see below
+ @Begin
+
+ def @Test # returns x unless x is dft
+ left x
+ named iffixed {}
+ named ifvarying {}
+ named ifsymbol {}
+ {
+ x @Case {
+ dft @Yield {
+ style @Case {
+ fixed @Yield { iffixed }
+ varying @Yield { ifvarying }
+ symbol @Yield { ifsymbol }
+ }
+ }
+ else @Yield x
+ }
+ }
+
+
+ def @Else # returns x, or y if x is dft
+ left x
+ right y
+ {
+ x @Case {
+ dft @Yield y
+ else @Yield x
+ }
+ }
+
+
+ def @InitTab
+ {
+ tabin @Test
+ iffixed { fixedtabin }
+ ifvarying { varyingtabin }
+ ifsymbol { symboltabin }
+ }
+
+
+ def @InitTabWidth
+ {
+ tabout @Test
+ iffixed { fixedtabout }
+ ifvarying { varyingtabout }
+ ifsymbol { symboltabout }
+ }
+
+
+ def @Filter
+ {
+ pipe @Case {
+ "" @Yield {
+ "prg2lout -r -lPod" -i{@FilterIn} -o{@FilterOut} -e{@FilterErr}
+ -t{@InitTab} -T{@InitTabWidth}
+ }
+ else @Yield {
+ "cat" @FilterIn "|" pipe "|"
+ "prg2lout -r -lPod" -o{@FilterOut}
+ -e{@FilterErr} -t{@InitTab} -T{@InitTabWidth}
+ }
+ }
+ }
+
+
+ def @InitFont
+ {
+ textfont @Test
+ iffixed { fixedtextfont }
+ ifvarying { varyingtextfont }
+ ifsymbol { symboltextfont }
+ }
+
+
+
+ def @InitBreak
+ {
+ textbreak @Test
+ iffixed { fixedtextbreak }
+ ifvarying { varyingtextbreak }
+ ifsymbol { symboltextbreak }
+ }
+
+
+ def printverbatim
+ right x
+ {
+ def verbfont
+ {
+ verbatimfont @Test
+ iffixed { fixedverbatimfont }
+ ifvarying { varyingverbatimfont }
+ ifsymbol { symbolverbatimfont }
+ }
+
+ def verbatimstrut { @VContract { 0.5v @High ^/ / 0.5v @High } }
+
+ @OneCol verbfont @Font x |0io verbatimstrut
+ }
+
+
+ macro @PV { // printverbatim }
+
+
+ def paragraphgap
+ {
+ paragap @Test
+ iffixed { fixedparagap }
+ ifvarying { varyingparagap }
+ ifsymbol { symbolparagap }
+ }
+
+
+ macro @PPG { //paragraphgap }
+
+
+ def @PLG
+ {
+ listgap @Test
+ iffixed { fixedlistgap }
+ ifvarying { varyinglistgap }
+ ifsymbol { symbollistgap }
+ }
+
+
+ def @PLI
+ {
+ listindent @Test
+ iffixed { fixedlistindent }
+ ifvarying { varyinglistindent }
+ ifsymbol { symbollistindent }
+ }
+
+
+ def @PLRI
+ {
+ listrightindent @Test
+ iffixed { fixedlistrightindent }
+ ifvarying { varyinglistrightindent }
+ ifsymbol { symbollistrightindent }
+ }
+
+
+ def @PLLW right x
+ {
+ def defaultwidth
+ {
+ listlabelwidth @Test
+ iffixed { fixedlistlabelwidth }
+ ifvarying { varyinglistlabelwidth }
+ ifsymbol { symbollistlabelwidth }
+ }
+
+ def givenwidth
+ {
+ style @Case {
+ fixed @Yield { x"s" }
+ varying @Yield { x"f" }
+ symbol @Yield { x"f" }
+ }
+ }
+
+ x @Case {
+ "" @Yield defaultwidth
+ else @Yield givenwidth
+ }
+ }
+
+
+ def @PLL right x
+ {
+ def value
+ {
+ x @Case {
+ "*" @Yield @Bullet
+ else @Yield x
+ }
+ }
+
+ style @Case {
+ fixed @Yield fixedlistlabelformat {
+ { listlabelfont @Else fixedlistlabelfont } @Font value }
+ varying @Yield varyinglistlabelformat {
+ { listlabelfont @Else varyinglistlabelfont } @Font value }
+ symbol @Yield symbollistlabelformat {
+ { listlabelfont @Else symbollistlabelfont } @Font value }
+ }
+ }
+
+
+ def @PHA right x
+ {
+ style @Case {
+ fixed @Yield fixedaheadformat {
+ { aheadfont @Else fixedaheadfont } @Font
+ { aheadbreak @Else fixedaheadbreak } @Break x }
+ varying @Yield varyingaheadformat {
+ { aheadfont @Else varyingaheadfont } @Font
+ { aheadbreak @Else varyingaheadbreak } @Break x }
+ symbol @Yield symbolaheadformat {
+ { aheadfont @Else symbolaheadfont } @Font
+ { aheadbreak @Else varyingaheadbreak } @Break x }
+ }
+ }
+
+
+ def @PHB right x
+ {
+ style @Case {
+ fixed @Yield fixedbheadformat {
+ { bheadfont @Else fixedbheadfont } @Font
+ { bheadbreak @Else fixedbheadbreak } @Break x }
+ varying @Yield varyingbheadformat {
+ { bheadfont @Else varyingbheadfont } @Font
+ { bheadbreak @Else varyingbheadbreak } @Break x }
+ symbol @Yield symbolbheadformat {
+ { bheadfont @Else symbolbheadfont } @Font
+ { bheadbreak @Else varyingbheadbreak } @Break x }
+ }
+ }
+
+
+ def @PHC right x
+ {
+ style @Case {
+ fixed @Yield fixedcheadformat {
+ { cheadfont @Else fixedcheadfont } @Font
+ { cheadbreak @Else fixedcheadbreak } @Break x }
+ varying @Yield varyingcheadformat {
+ { cheadfont @Else varyingcheadfont } @Font
+ { cheadbreak @Else varyingcheadbreak } @Break x }
+ symbol @Yield symbolcheadformat {
+ { cheadfont @Else symbolcheadfont } @Font
+ { cheadbreak @Else varyingcheadbreak } @Break x }
+ }
+ }
+
+
+ def @PFI right x
+ {
+ style @Case {
+ fixed @Yield fixeditalicformat {
+ { italicfont @Else fixeditalicfont } @Font x }
+ varying @Yield varyingitalicformat {
+ { italicfont @Else varyingitalicfont } @Font x }
+ symbol @Yield symbolitalicformat {
+ { italicfont @Else symbolitalicfont } @Font x }
+ }
+ }
+
+
+ def @PFB right x
+ {
+ style @Case {
+ fixed @Yield fixedboldformat {
+ { boldfont @Else fixedboldfont } @Font x }
+ varying @Yield varyingboldformat {
+ { boldfont @Else varyingboldfont } @Font x }
+ symbol @Yield symbolboldformat {
+ { boldfont @Else symbolboldfont } @Font x }
+ }
+ }
+
+
+ def @PFC right x
+ {
+ style @Case {
+ fixed @Yield fixedcodeformat {
+ { codefont @Else fixedcodefont } @Font x }
+ varying @Yield varyingcodeformat {
+ { codefont @Else varyingcodefont } @Font x }
+ symbol @Yield symbolcodeformat {
+ { codefont @Else symbolcodefont } @Font x }
+ }
+ }
+
+
+ def @PFF right x
+ {
+ style @Case {
+ fixed @Yield fixedfileformat {
+ { filefont @Else fixedfilefont } @Font x }
+ varying @Yield varyingfileformat {
+ { filefont @Else varyingfilefont } @Font x }
+ symbol @Yield symbolfileformat {
+ { filefont @Else symbolfilefont } @Font x }
+ }
+ }
+
+
+ def @PFL right x
+ {
+ style @Case {
+ fixed @Yield fixedlinkformat {
+ { linkfont @Else fixedlinkfont } @Font x }
+ varying @Yield varyinglinkformat {
+ { linkfont @Else varyinglinkfont } @Font x }
+ symbol @Yield symbollinkformat {
+ { linkfont @Else symbollinkfont } @Font x }
+ }
+ }
+
+
+ def @PFX right x
+ {
+ style @Case {
+ fixed @Yield fixedindexformat {
+ { indexfont @Else fixedindexfont } @Font x }
+ varying @Yield varyingindexformat {
+ { indexfont @Else varyingindexfont } @Font x }
+ symbol @Yield symbolindexformat {
+ { indexfont @Else symbolindexfont } @Font x }
+ }
+ }
+
+
+ def @A # get characters from the Adobe Symbol font
+ left sym
+ right x
+ {
+ style @Case {
+ symbol @Yield { { Symbol Base } @Font @Char sym }
+ else @Yield { x }
+ }
+ }
+
+
+ macro "$>" { {} & }
+
+
+ @InitFont @Font @InitBreak @Break @Body
+
+ @End @Pod
+
+@End @PodSetup
diff --git a/include/progf b/include/progf
deleted file mode 100644
index ec864df..0000000
--- a/include/progf
+++ /dev/null
@@ -1,281 +0,0 @@
-
-###############################################################################
-# #
-# Lout @ProgSetup package for formatting computer programs (Version 1.4) #
-# #
-# Version 1.0 by Jeffrey H. Kingston, February 2000. #
-# Adapted from the original @CPrint package. #
-# #
-# This package uses a filtered body parameter to convert program source #
-# code into Lout source. The filter program is prg2lout, which is #
-# distributed with Lout and should be compiled and installed wherever #
-# Lout itself is. #
-# #
-# This package is intended for use by prg2lout's stand-alone mode. #
-# If you are adding a new language, a better place to start would be #
-# files eiffelf and eiffel rather than progf. #
-# #
-###############################################################################
-
-export @Prog
-def @ProgSetup
- named language { "missing_language" } # programming language
- named style
- named @OrIfPlain left x right y
- { @BackEnd @Case { PlainText @Yield y else @Yield x } }
- { varying @OrIfPlain fixed } # print style
- named pipe { } # pipe through this first
-
- named fixedfont { Courier } # font family if fixed
- named fixedstrings { Base } # string face if fixed
- named fixedidentifiers { Base } # identifier face if fixed
- named fixedcomments { Base } # comment face if fixed
- named fixedkeywords { Base } # keyword face if fixed
- named fixednumbers { Base } # number face if fixed
- named fixedoperators { Base } # operator face if fixed
- named fixedsize { -1.0p } # font size if fixed
- named fixedline { 1.0vx } # line-space if fixed
- named fixedtabin { 8 } # tab interval if fixed
- named fixedtabout { 8s } # tab width if fixed
-
- named varyingfont { } # font family if varying
- named varyingstrings { Slope } # string face if varying
- named varyingidentifiers { Slope } # identifier face if varying
- named varyingcomments { Base } # comment face if varying
- named varyingkeywords { Bold } # keyword face if varying
- named varyingnumbers { Base } # number face if varying
- named varyingoperators { Base } # operator face if varying
- named varyingsize { 1.0f } # font size if varying
- named varyingline { 1.0vx } # line-space if varying
- named varyingtabin { 8 } # tab interval if varying
- named varyingtabout { 3f } # tab width if varying
-
- named symbolfont { } # font family if symbol
- named symbolstrings { Slope } # string face if symbol
- named symbolidentifiers { Slope } # identifier face if symbol
- named symbolcomments { Base } # comment face if symbol
- named symbolkeywords { Bold } # keyword face if symbol
- named symbolnumbers { Base } # number face if symbol
- named symboloperators { Base } # operator face if symbol
- named symbolsize { 1.0f } # font size if symbol
- named symbolline { 1.0vx } # line-space if symbol
- named symboltabin { 8 } # tab interval if symbol
- named symboltabout { 3f } # tab width if symbol
-
-@Begin
-
- export
-
- "$>" @S @D @C @K @N @O @A @ST @ED @M
-
- def @Prog
- named language { language } # language
- named style { style } # style
- named pipe { pipe } # pipe through this first
- named font { dft } # font family
- named strings { dft } # string font
- named identifiers { dft } # ident. font
- named comments { dft } # comment font
- named keywords { dft } # keyword font
- named numbers { dft } # number font
- named operators { dft } # operator font
- named size { dft } # font size
- named line { dft } # line-space
- named tabin { dft } # tab interval
- named tabout { dft } # tab width
- body @Body # filtered, see below
- @Begin
-
- def @Test # returns x unless x is dft
- left x
- named iffixed {}
- named ifvarying {}
- named ifsymbol {}
- {
- x @Case {
- dft @Yield {
- style @Case {
- fixed @Yield { iffixed }
- varying @Yield { ifvarying }
- symbol @Yield { ifsymbol }
- }
- }
- else @Yield x
- }
- }
-
- def @InitTab
- {
- tabin @Test
- iffixed { fixedtabin }
- ifvarying { varyingtabin }
- ifsymbol { symboltabin }
- }
-
- def @InitTabWidth
- {
- tabout @Test
- iffixed { fixedtabout }
- ifvarying { varyingtabout }
- ifsymbol { symboltabout }
- }
-
- def @Filter
- {
- pipe @Case {
- "" @Yield {
- "prg2lout -r -l" language -i{@FilterIn} -o{@FilterOut} -e{@FilterErr}
- -t{@InitTab} -T{@InitTabWidth}
- }
- else @Yield {
- "cat" @FilterIn "|" pipe "|"
- "prg2lout -r -l" language -o{@FilterOut}
- -e{@FilterErr} -t{@InitTab} -T{@InitTabWidth}
- }
- }
- }
-
- def @InitFontFamily
- {
- font @Test
- iffixed { fixedfont }
- ifvarying { varyingfont }
- ifsymbol { symbolfont }
- }
-
- def @InitSize
- {
- size @Test
- iffixed { fixedsize }
- ifvarying { varyingsize }
- ifsymbol { symbolsize }
- }
-
- def @InitLine
- {
- line @Test
- iffixed { fixedline }
- ifvarying { varyingline }
- ifsymbol { symbolline }
- }
-
- def @S # for formatting strings
- right x
- {
- # "\"" &
- strings @Test
- iffixed { fixedstrings }
- ifvarying { varyingstrings }
- ifsymbol { symbolstrings }
- @Font x
- # & "\""
- }
-
-# def "`"
-# {
-# style @Case {
-# symbol @Yield { "`" }
-# else @Yield { "'" }
-# }
-# }
-
- def @D # for formatting identifiers
- right x
- {
- identifiers @Test
- iffixed { fixedidentifiers }
- ifvarying { varyingidentifiers }
- ifsymbol { symbolidentifiers }
- @Font x
- }
-
- def @C # for formatting comments
- right x
- {
- comments @Test
- iffixed { fixedcomments }
- ifvarying { varyingcomments }
- ifsymbol { symbolcomments }
- @Font x
- }
-
- def @K # for formatting keywords
- right x
- {
- keywords @Test
- iffixed { fixedkeywords }
- ifvarying { varyingkeywords }
- ifsymbol { symbolkeywords }
- @Font x
- }
-
- def @N # for formatting numbers
- right x
- {
- numbers @Test
- iffixed { fixednumbers }
- ifvarying { varyingnumbers }
- ifsymbol { symbolnumbers }
- @Font x
- }
-
- def @O # for formatting operators
- right x
- {
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font x
- }
-
- def @A # get characters from the Adobe Symbol font
- left sym
- right x
- {
- style @Case {
- symbol @Yield { { Symbol Base } @Font @Char sym }
- else @Yield { x }
- }
- }
-
- def @ST # for formatting asterisks
- right x
- {
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font "0.5w" @VShift x
- }
-
- def @ED # for formatting larger dots
- right x
- {
- operators @Test
- iffixed { fixedoperators }
- ifvarying { varyingoperators }
- ifsymbol { symboloperators }
- @Font @BackEnd @Case {
- PlainText @Yield x
- else @Yield { "1.2f" @Font "+0.05f" @VShift @O x &"0.05f" }
- }
- }
-
- macro "$>" { {} & }
-
- def @M right x
- {
- style @Case {
- fixed @Yield "-"
- varying @Yield { { Symbol Base } @Font @Char minus }
- symbol @Yield { { Symbol Base } @Font @Char minus }
- }
- }
-
- { @InitFontFamily Base @InitSize } @Font
- { @InitLine lines } @Break @Body
-
- @End @Prog
-
-@End @ProgSetup
diff --git a/man/prg2lout.1 b/man/prg2lout.1
index 7014e46..27232c7 100644
--- a/man/prg2lout.1
+++ b/man/prg2lout.1
@@ -93,6 +93,14 @@ is sufficiently large. For example,
.B -T0.5i
produces half-inch tab intervals.
.TP
+.BI \-S " filename"
+Use
+.I filename
+as the setup file instead of the system default setup file. The setup
+file determines the value of all formatting options not given to
+.I prg2lout
+as command line arguments.
+.TP
.B \-u
Print usage information on stderr, including available languages, and exit.
.TP
diff --git a/man/prg2lout.txt b/man/prg2lout.txt
index 991315d..848c4ff 100644
--- a/man/prg2lout.txt
+++ b/man/prg2lout.txt
@@ -68,6 +68,12 @@ OPTIONS
is sufficiently large. For example, -T0.5i produces
half-inch tab intervals.
+ -S filename
+ Use filename as the setup file instead of the system
+ default setup file. The setup file determines the
+ value of all formatting options not given to prg2lout
+ as command line arguments.
+
-u Print usage information on stderr, including available
languages, and exit.
diff --git a/prg2lout.c b/prg2lout.c
index c8ba048..d592edb 100644
--- a/prg2lout.c
+++ b/prg2lout.c
@@ -1,6 +1,7 @@
+
/*****************************************************************************/
/* */
-/* PRG2LOUT: A PROGRAM TO CONVERT PROGRAM SOURCES INTO LOUT (VERSION 1.0) */
+/* PRG2LOUT: A PROGRAM TO CONVERT PROGRAM SOURCES INTO LOUT (VERSION 2.0) */
/* COPYRIGHT (C) 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.su.oz.au) */
@@ -23,50 +24,123 @@
/* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* */
/*****************************************************************************/
-#include <stdio.h>
-#include <stdlib.h>
+
+
+/*****************************************************************************/
+/* */
+/* GENERAL INTRODUCTION TO PRG2LOUT */
+/* */
+/* The best way to see what the aim of prg2lout as currently conceived is, */
+/* is to look in file cprint at the setup file options. You will see that */
+/* the aim is to provide three basic styles: fixed (essentially mono font), */
+/* varying (essentially varying-width font with various faces for different */
+/* elements at the user's choice), and symbol (similar to varying). */
+/* */
+/* The elements currently aimed for are strings, identifiers, comments, */
+/* keywords, numbers, and operators, and the end user is able to choose, */
+/* for each of these kinds of elements, which font to set them in. */
+/* */
+/* This is achieved by a simple division of labour: prg2lout does the */
+/* classifying of the input into a sequence of these elements, and the Lout */
+/* end (cprint and cprintf, or their clones for other languages) does the */
+/* formatting. For example, the C text */
+/* */
+/* inc = inc + 1 */
+/* */
+/* would be classified by prg2lout into identifier, operator, identifier, */
+/* operator, number; and consequently prg2lout would emit */
+/* */
+/* @PI{"inc"} @PO{"="} @PI{"inc"} @PO{"+"} @PN{"1"} */
+/* */
+/* which is readable by Lout, thanks to having quotes around everything */
+/* potentially dangerous, and clearly tells Lout, by means of the commands */
+/* @PC, @PI, etc., how each part of the input has been classified. */
+/* */
+/* The actual classification is carried out by prg2lout as follows. Each */
+/* programming language is described to prg2lout as a collection of tokens; */
+/* you say what the token begins with, what's a legal character inside the */
+/* token, and how it ends. You also say which command (@PC, @PI etc.) to */
+/* emit when a token of that kind is found. Prg2lout does the rest. */
+/* */
+/* Prg2lout knows all about tricky problems such as multi-line tokens (it */
+/* breaks them up into single-line pieces) and backslash in Lout strings */
+/* (it replaces any \ within an output string by \\, " by \", etc.). It */
+/* also handles tab characters and formfeed characters properly, and it */
+/* produces intelligible error messages when unexpected things happen, */
+/* such as input terminating in the middle of a string. This attention to */
+/* detail is a strong reason for using prg2lout rather than something more */
+/* ad-hoc, such as @Verbatim or a quick script. */
+/* */
+/*****************************************************************************/
+
/*****************************************************************************/
/* */
-/* How to add another language to prg2lout's list */
+/* HOW TO ADD ANOTHER LANGUAGE TO PRG2LOUT */
+/* */
+/* Step 1. Construct clones of (say) eiffel and eiffelf (these are in */
+/* $LOUTLIB/include) with every occurrence of eiffel or Eiffel in them */
+/* changed to your language as appropriate. Install your files in the */
+/* Lout system include directory alongside eiffel and eiffelf. */
/* */
-/* Step 1. Have a browse through the token declarations below, and work */
+/* It is good to clone the files exactly because that way all program */
+/* formatting works the same way, and one chapter of the User's Guide */
+/* covers the lot. However if your language has some unique element, not */
+/* readily classifiable as a string, identifier, comment, keyword, */
+/* number, or operator, it is possible to emit a different command of */
+/* your choice for the new element; but then your clones of eiffel and */
+/* eiffelf have to be extended to handle that command. */
+/* */
+/* Step 2. Have a browse through the token declarations below, and work */
/* out which of them you need for your language. If you need a token that */
/* isn't there already, you'll have to define it; there are many examples */
-/* there to help you. */
+/* and documentation there to help you. The tokens for Perl are rather */
+/* complicated and don't make a good model for most languages, so look */
+/* more at the C and Eiffel ones. */
/* */
-/* Step 2. Browse through the language declarations, and declare your */
+/* Step 3. Browse through the language declarations, and declare your */
/* language following those examples: first you give a set of one or more */
-/* alternative names for your language, then the default printing style for */
-/* it (either "fixed", "varying", or "symbol"), then you list the tokens */
-/* of the language, then you list the keywords. */
+/* alternative names for your language, then some other things, including */
+/* the list of tokens of the language, and its keywords. */
/* */
-/* Step 3. Add your language variable to the list in the initializer of */
+/* Step 4. Add your language variable to the list in the initializer of */
/* variable languages, as you can see the others have been done. */
/* */
-/* Step 4. If any lists of initializers now contain more than */
+/* Step 5. If any lists of initializers now contain more than */
/* MAX_ARRAY_LENGTH-1 elements, increase MAX_ARRAY_LENGTH until they don't. */
+/* The gcc compiler will warn you if you forget to do this. */
/* */
-/* Step 5. Recompile and reinstall prg2lout, test "prg2lout -u" then */
+/* Step 6. Recompile and reinstall prg2lout, test "prg2lout -u" then */
/* "prg2lout -l <mylanguage> <myfile> | lout -s > out.ps". */
/* */
-/* Step 6. Send your tested and verified changes to jeff@cs.usyd.edu.au */
-/* for incorporation in the next Lout release. If you do this, please */
-/* try hard to ensure that your changes conform to the formal definition */
-/* of your language. */
+/* Step 7. Send your tested and tidied files to me for incorporation */
+/* in the next Lout release. If you do this, please try hard to ensure */
+/* that your new code conforms to the formal definition of your language. */
+/* Feel free to email me for advice as you go along. */
+/* */
+/* Jeff Kingston */
+/* jeff@cs.usyd.edu.au */
/* */
/*****************************************************************************/
-
+
+#include <stdio.h>
+#include <stdlib.h>
+#define FALSE 0
+#define TRUE 1
+#define BOOLEAN unsigned
+
/*****************************************************************************/
/* */
/* Character sets */
/* */
-/* Here are prg2lout's definitions of various commonly needed sets of */
+/* These are prg2lout's definitions of various commonly needed sets of */
/* characters. May need enhancement for Latin1 etc. */
/* */
/*****************************************************************************/
+#define AllCharacters NULL /* code will recognize NULL and do this */
+
char AllPrintable[] =
" !\"#$%&'()*+,-./0123456789:;<=>?@[\\]^_`\\{|}~\
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" ;
@@ -75,18 +149,14 @@ char AllPrintablePlusNL[] =
" !\"#$%&'()*+,-./0123456789:;<=>?@[\\]^_`\\{|}~\
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\n" ;
+char AllPrintablePlusTab[] =
+ " !\"#$%&'()*+,-./0123456789:;<=>?@[\\]^_`\\{|}~\
+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\t" ;
+
char AllPrintableTabNL[] =
" !\"#$%&'()*+,-./0123456789:;<=>?@[\\]^_`\\{|}~\
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\n\t" ;
-char NotDoubleQuote[] =
- " !#$%&'()*+,-./0123456789:;<=>?@[\\]^_`\\{|}~\
-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" ;
-
-char NotQuote[] =
- " !#$%&\"()*+,-./0123456789:;<=>?@[\\]^_`\\{|}~\
-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" ;
-
char Letters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" ;
char Letter_Digit[] =
@@ -100,287 +170,1797 @@ char Letter_Digit[] =
#define SepDigits "0", "1", "2", "3", "4", "5", "6", "7", "8", "9"
+#define HexDigits "A", "a", "B", "b", "C", "c", "D", "d", "E", "e", "F", "f"
+
/*****************************************************************************/
/* */
/* TOKEN - put your token declarations in this section */
/* */
+/* The fields of token_rec have the following meanings: */
+/* */
+/* name */
+/* The name of this token, e.g. "string" or "identifier". This field */
+/* is used only by error messages generated by prg2lout; for example, */
+/* prg2lout might print the message "input ended within string". */
+/* */
+/* print_style */
+/* */
+/* print_style What gets printed */
+/* ------------------------------------------------------- */
+/* PRINT_WHOLE_QUOTED command{"token"} */
+/* PRINT_NODELIMS_QUOTED command{"token-minus-delims"} */
+/* PRINT_WHOLE_UNQUOTED command{token} */
+/* PRINT_NODELIMS_UNQUOTED command{token-minus-delims} */
+/* PRINT_NODELIMS_INNER command{inner} */
+/* PRINT_COMMAND_ONLY command */
+/* */
+/* If command (see next) is empty then the braces {} are not printed. */
+/* */
+/* PRINT_WHOLE_QUOTED. This command is the most frequently used one; */
+/* it prints the token, enclosed in braces and quotes, preceded by the */
+/* command. The quotes ensure that the result is legal Lout; any " or */
+/* \ in the token is printed with a preceding \ as required in Lout. */
+/* The usual arrangement for handling white space is that none of the */
+/* tokens contain it; when it is encountered prg2lout generates the */
+/* appropriate Lout without being told (a space for a space, a newline */
+/* for a newline, @NP for a formfeed, and something clever for tab */
+/* which does the required thing). However, you can define a token */
+/* that contains white space if you wish. If you do this, the */
+/* quotation marks will be temporarily closed off, the white space */
+/* handled as just described, then the quotes opened again. */
+/* */
+/* PRINT_NODELIMS_QUOTED. This is like PRINT_WHOLE_QUOTED except that */
+/* the opening and closing delimiters of the token are omitted from */
+/* the print. This is useful occasionally when these delimiters are */
+/* formatting markers, not intended to be printed. */
+/* */
+/* PRINT_WHOLE_UNQUOTED. This style prints the command and braces */
+/* as usual, but omits the quotes and prints the token absolutely */
+/* verbatim. In general this is not going to produce legal Lout, */
+/* but it is useful in two cases: when the token is a Lout escape, */
+/* so that it is the user's responsibility to ensure that its content */
+/* is legal Lout; and when the command is another filter command, so */
+/* that the token content will not go directly into Lout anyway, it */
+/* will go through the other filter first. */
+/* */
+/* PRINT_NODELIMS_UNQUOTED. This is like PRINT_WHOLE_UNQUOTED except */
+/* that the opening and closing delimiters of the token are omitted. */
+/* */
+/* PRINT_NODELIMS_INNER. Like PRINT_NODELIMS_UNQUOTED except that the */
+/* inner part (i.e. not delimiters) is formatted in the same language. */
+/* */
+/* PRINT_COMMAND_ONLY. This ignores the token and prints just the */
+/* command, presumably because the command says it all for that token. */
+/* When using PRINT_COMMAND_ONLY you will probably need to finish your */
+/* command with a space: since there are no following braces in this */
+/* print style, your command will run into the next one otherwise. */
+/* */
/*****************************************************************************/
-#define MAX_CHAR 256
-#define MAX_STRING_LENGTH 101
-#define MAX_ARRAY_LENGTH 101
+
+/*****************************************************************************/
+/* */
+/* Meaning of TOKEN fields (ctd.) */
+/* */
+/* command */
+/* The Lout command to print. This command could be an legal Lout; */
+/* programming language setup files offer the following Lout symbols */
+/* that make the most common commands: */
+/* */
+/* @PI for formatting identifiers */
+/* @PK for formatting keywords */
+/* @PO for formatting operators */
+/* @PN for formatting numbers */
+/* @PS for formatting strings */
+/* @PC for formatting comments */
+/* @PA for printing an asterisk (lower on the line than usual) */
+/* @PM for printing a minus sign (longer than a hyphen) */
+/* @PD for printing a dot (.), only larger than usual */
+/* */
+/* The last three require PRINT_COMMAND_ONLY (they take no parameter). */
+/* If command is NULL or "", then no command will be printed and */
+/* furthermore the token will not be enclosed in the usual braces. */
+/* */
+/* alternate_command */
+/* Every language has a list of keywords. Just before printing each */
+/* token, it is compared against the keywords. If it is one of them, */
+/* then alternate_command is used instead of command. For example, */
+/* identifiers usually have command @PI and alternate_command @PK. */
+/* */
+/* following_command */
+/* Print this Lout command (or commands) after the token. */
+/* */
+/* start_line_only */
+/* A Boolean field. If TRUE, this token is to be recognized only */
+/* if it occurs at the very start of a line. */
+/* */
+/* starts[] */
+/* This field holds an array of strings. If prg2lout discovers any */
+/* one of these strings while it is not reading some other token, */
+/* then it deems that this token has begun. The recognized string */
+/* is the token's "starting delimiter". */
+/* */
+/* starts2[], ends2[] */
+/* These fields each hold an array of strings, and the two arrays */
+/* must have equal length. If they have length zero, these fields */
+/* do not apply. Otherwise, they modify the meaning of starts[] and */
+/* end_delimiter below. Their effect is best seen by looking at some */
+/* examples from Perl, their only user at the time of writing: */
+/* */
+/* q/hello/ qq/hello/ qq?hello? qq{hello} */
+/* */
+/* These strings may begin with q, qq, qx, and several other things; */
+/* this is then followed by a single character which determines the */
+/* string terminator; e.g. / means "terminate with /", { means */
+/* "terminate with }", etc. This is implemented by putting these */
+/* pairs of strings in corresponding places in starts[] and ends[]. */
+/* */
+/* starts: { "q", "qq", "qx" } */
+/* starts2: { "/", "?", "{" } */
+/* ends2: { "/", "?", "}" } */
+/* */
+/* PerlQTypeToken is a larger example of this. */
+/* */
+/*****************************************************************************/
+
+
+/*****************************************************************************/
+/* */
+/* Meaning of TOKEN fields (ctd.) */
+/* */
+/* legal */
+/* This string defines the set of legal characters inside this token. */
+/* For example, numbers might have "0123456789." for this field, since */
+/* these are the characters that are legal within numbers, usually. */
+/* */
+/* escape */
+/* This string defines a single character which is the escape */
+/* character for this token. That is, if we are reading this token */
+/* and come upon this character, the character following it is */
+/* treated differently. An empty string "" means no escape character. */
+/* */
+/* escape_legal */
+/* This string defines the set of characters which are legal after */
+/* the escape character just mentioned. If any one of these appears */
+/* immediately after the escape character, it is deemed to be part */
+/* of the token even if without the preceding escape it would not be. */
+/* */
+/* inner_escape */
+/* end_inner_escape */
+/* The inner_escape string should be either empty (in which case it */
+/* does not apply), or else it should contain a single character, the */
+/* "inner escape" character. An inner escape is a temporary suspension */
+/* of a token, reverting to the original language. It is used to set */
+/* program text within comments. For example, in Eiffel and Blue, */
+/* inner_escape is "`" and end_inner_escape is "'" and so we can write */
+/* */
+/* -- increment `balance' by `amount' */
+/* */
+/* to treat balance and amount as identifiers within a comment token. */
+/* The inner escape is not limited to one token, it may have any */
+/* number of tokens, and they may have inner escapes too; prg2lout */
+/* imposes no limit on the depth of nesting of inner escapes. */
+/* */
+/* end_delimiter */
+/* This string shows how the token ends; for example, a string would */
+/* have end_delimiter ". If empty, it means that the token ends */
+/* just before the first character encountered that is not legal (see */
+/* "legal" above). For example, identifiers and numbers would have */
+/* empty end_delimiter. If ends2[] is not empty then end_delimiter */
+/* is ignored, since ends2[] explains how the token ends. */
+/* */
+/* end_start_line_only */
+/* A BOOLEAN field. If true, the end delimiter is to be recognized */
+/* only if it occurs at the very start of a line. */
+/* */
+/* want_two_ends */
+/* A Boolean feature used only by Perl; TRUE means that end_delimiter */
+/* (or ends2[]) has to be encountered twice before the token ends, */
+/* rather than the usual once. Used by PerSTypeToken to recognise */
+/* */
+/* s/abc/ABC/ */
+/* */
+/* and similar things as single tokens. Note that this works without */
+/* modification on s{abc}{ABC} provided { is legal within strings: as */
+/* long as the token terminates at the second }, we are safe. */
+/* */
+/*****************************************************************************/
+
+
+#define MAX_CHAR 256
+#define MAX_ARRAY_LENGTH 401
+#define PRINT_WHOLE_QUOTED 1
+#define PRINT_NODELIMS_QUOTED 2
+#define PRINT_WHOLE_UNQUOTED 3
+#define PRINT_NODELIMS_UNQUOTED 4
+#define PRINT_NODELIMS_INNER 5
+#define PRINT_COMMAND_ONLY 6
typedef struct token_rec {
- char *name; /* the name of this token, e.g. "string" */
- char *command; /* the Lout command for it, e.g. "@D" */
- char *alternate_command; /* the alternate command for it, e.g. "@K" */
- char *starts[MAX_ARRAY_LENGTH]; /* strings that start this token */
- char *legal; /* legal characters in this token */
- char *escape; /* the escape character e.g. "\\", or "" */
- char *escape_legal; /* legal characters after escape character */
- char *inner_escape; /* inner escape, e.g. "`", or else "" */
- char *end_inner_escape; /* end inner escape, e.g. "'" */
- char *end_delimiter; /* the end delimiter, else "" */
+ char *name;
+ int print_style;
+ char *command;
+ char *alternate_command;
+ char *following_command;
+ BOOLEAN start_line_only;
+ char *starts[MAX_ARRAY_LENGTH];
+ char *starts2[MAX_ARRAY_LENGTH];
+ char *ends2[MAX_ARRAY_LENGTH];
+ char *legal;
+ char *escape;
+ char *escape_legal;
+ char *inner_escape;
+ char *end_inner_escape;
+ char *end_delimiter;
+ BOOLEAN end_start_line_only;
+ BOOLEAN want_two_ends;
/* The following options are initialized by the program, so don't you */
- char chtype[MAX_CHAR]; /* character types within token */
+ char chtype[MAX_CHAR]; /* character types within token */
char escape_chtype[MAX_CHAR]; /* character types after escape */
} TOKEN;
+
+/*****************************************************************************/
+/* */
+/* Tokens defining strings and literal characters in non-Perl languages. */
+/* */
+/*****************************************************************************/
TOKEN CStringToken = {
"string", /* used by error messages involving this token */
- "@S", /* Lout command for formatting strings */
- "", /* No alternate command */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PS", /* Lout command for formatting strings */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
{ "\"" }, /* strings begin with a " character */
- NotDoubleQuote, /* inside, any printable except " is OK */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllPrintable, /* inside, any printable is OK */
"\\", /* within strings, \\ is the escape character */
AllPrintablePlusNL, /* after escape char, any printable char or nl OK */
"", /* strings do not permit "inner escapes" */
"", /* and so there is no end innner escape either */
- "\"" /* strings end with a " character */
+ "\"", /* strings end with a " character */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
TOKEN CCharacterToken = {
"character", /* used by error messages involving this token */
- "@C", /* Lout command for formatting characters */
- "", /* No alternate command */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PC", /* Lout command for formatting characters */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
{ "'" }, /* characters begin with a ' character */
- NotQuote, /* inside, any printable except ' is OK */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllPrintable, /* inside, any printable character is OK */
"\\", /* within characters, \\ is the escape character */
AllPrintable, /* after escape char, any printable char is OK */
"", /* characters do not permit "inner escapes" */
"", /* and so there is no end innner escape either */
- "'" /* characters end with a ' character */
+ "'", /* characters end with a ' character */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
+
TOKEN EiffelStringToken = {
"string", /* used by error messages involving this token */
- "@S", /* Lout command for formatting strings */
- "", /* No alternate command */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PS", /* Lout command for formatting strings */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
{ "\"" }, /* strings begin with a " character */
- NotDoubleQuote, /* inside, any printable except " is OK */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllPrintable, /* inside, any printable except " is OK */
"%", /* within strings, % is the escape character */
AllPrintable, /* after escape char, any printable char is OK */
"", /* strings do not permit "inner escapes" */
"", /* and so there is no end innner escape either */
- "\"" /* strings end with a " character */
+ "\"", /* strings end with a " character */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
TOKEN EiffelCharacterToken = {
"character", /* used by error messages involving this token */
- "@C", /* Lout command for formatting characters */
- "", /* No alternate command */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PC", /* Lout command for formatting characters */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
{ "'" }, /* characters begin with a ' character */
- NotQuote, /* inside, any printable except ' is OK */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllPrintable, /* inside, any printable except ' is OK */
"%", /* within characters, % is the escape character */
AllPrintable, /* after escape char, any printable char is OK */
"", /* characters do not permit "inner escapes" */
"", /* and so there is no end innner escape either */
- "'" /* characters end with a ' character */
+ "'", /* characters end with a ' character */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
+
+
+/*****************************************************************************/
+/* */
+/* Identifiers, in the form common to most programming languages. */
+/* */
+/*****************************************************************************/
TOKEN IdentifierToken = {
"identifier", /* used by error messages involving this token */
- "@D", /* Lout command for formatting identifiers */
- "@K", /* Alternate command (for keywords) */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PI", /* Lout command for formatting identifiers */
+ "@PK", /* Alternate command (for keywords) */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
{ SepLetters, "_" }, /* identifiers begin with any letter or _ */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
Letter_Digit, /* inside, letters, underscores, digits are OK */
"", /* no escape character within identifiers */
"", /* so nothing legal after escape char either */
"", /* identifiers do not permit "inner escapes" */
"", /* and so there is no end innner escape either */
- "" /* identifiers do not end with a delimiter */
+ "", /* identifiers do not end with a delimiter */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
+
+/*****************************************************************************/
+/* */
+/* Numbers, in the form common to most programming languages. */
+/* */
+/*****************************************************************************/
+
TOKEN NumberToken = {
"number", /* used by error messages involving this token */
- "@N", /* Lout command for formatting numbers */
- "", /* No alternate command */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PN", /* Lout command for formatting numbers */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
{ SepDigits }, /* numbers must begin with a digit */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
"0123456789.eE", /* inside, digits, decimal point, exponent */
"", /* no escape character within numbers */
"", /* so nothing legal after escape char either */
"", /* numbers do not permit "inner escapes" */
"", /* and so there is no end innner escape either */
- "" /* numbers do not end with a delimiter */
+ "", /* numbers do not end with a delimiter */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
+
+
+/*****************************************************************************/
+/* */
+/* Tokens defining comments in various languages. */
+/* */
+/*****************************************************************************/
TOKEN CCommentToken = {
"comment", /* used by error messages involving this token */
- "@C", /* Lout command for formatting comments */
- "", /* No alternate command */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PC", /* Lout command for formatting comments */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
{ "/*" }, /* comments begin with this character pair */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
AllPrintableTabNL, /* inside, any printable char, tab, or nl is OK */
"", /* no escape character within comments */
"", /* so nothing legal after escape char either */
"", /* C comments do not permit "inner escapes" */
"", /* and so there is no end innner escape either */
- "*/" /* comments end with this character pair */
-};
-
-TOKEN CCommentEscapeToken = {
- "Lout escape", /* used by error messages involving this token */
- NULL, /* no Lout command since passed through unformatted */
- "", /* No alternate command */
- { "/*@" }, /* comments begin with this character pair */
- AllPrintableTabNL, /* inside, any printable char, tab, or nl is OK */
- "", /* no escape character within comments */
- "", /* so nothing legal after escape char either */
- "", /* no "inner escape" in escape comments */
- "", /* so no end of "inner escape" either */
- "*/" /* comments end with this character pair */
+ "*/", /* comments end with this character pair */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
TOKEN CPPCommentToken = {
"comment", /* used by error messages involving this token */
- "@C", /* Lout command for formatting comments */
- "", /* No alternate command */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PC", /* Lout command for formatting comments */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
{ "//" }, /* comments begin with this character pair */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
AllPrintable, /* inside, any printable char is OK (not NL) */
"", /* no escape character within comments */
"", /* so nothing legal after escape char either */
"", /* C comments do not permit "inner escapes" */
"", /* and so there is no end innner escape either */
- "" /* no end delimiter (end of line will end it) */
+ "", /* no end delimiter (end of line will end it) */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
+
-TOKEN CPPCommentEscapeToken = {
- "Lout escape", /* used by error messages involving this token */
- NULL, /* no Lout command since passed through unformatted */
- "", /* No alternate command */
- { "//@" }, /* comments begin with this character pair */
+TOKEN EiffelCommentToken = {
+ "comment", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PC", /* Lout command for formatting comments */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "--" }, /* comments begin with this character pair */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
AllPrintable, /* inside, any printable char is OK */
"", /* no escape character within comments */
"", /* so nothing legal after escape char either */
- "", /* no "inner escape" in escape comments */
- "", /* so no end of "inner escape" either */
- "" /* no end delimiter (end of line will end it) */
+ "`", /* start of "inner escape" in Eiffel comment */
+ "'", /* end of "inner escape" in Eiffel comment */
+ "", /* no ending delimiter; end of line will end it */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
-TOKEN EiffelCommentToken = {
+TOKEN BlueCommentToken = {
"comment", /* used by error messages involving this token */
- "@C", /* Lout command for formatting comments */
- "", /* No alternate command */
- { "--" }, /* comments begin with this character pair */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PC", /* Lout command for formatting comments */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "==", "--" }, /* comments begin with this character pair */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
AllPrintable, /* inside, any printable char is OK */
"", /* no escape character within comments */
"", /* so nothing legal after escape char either */
- "`", /* start of "inner escape" in Eiffel comment */
- "'", /* end of "inner escape" in Eiffel comment */
- "" /* no ending delimiter; end of line will end it */
+ "`", /* start of "inner escape" in Blue comment */
+ "'", /* end of "inner escape" in Blue comment */
+ "", /* no ending delimiter; end of line will end it */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
-TOKEN EiffelCommentEscapeToken = {
+
+/*****************************************************************************/
+/* */
+/* Tokens defining escape comments in various languages. */
+/* */
+/* See discussion of "inner escapes" above for more information. */
+/* */
+/*****************************************************************************/
+
+TOKEN CCommentEscapeToken = {
"Lout escape", /* used by error messages involving this token */
- NULL, /* no Lout command since passed through unformatted */
- "", /* No alternate command */
- { "--@" }, /* comments begin with this character pair */
+ PRINT_NODELIMS_UNQUOTED, /* print this token unformatted */
+ "", /* no Lout command since we are printing raw */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "/*@" }, /* escape comments begin with this delimiter */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllPrintableTabNL, /* inside, any printable char, tab, or nl is OK */
+ "", /* no escape character within comments */
+ "", /* so nothing legal after escape char either */
+ "", /* no "inner escape" in escape comments */
+ "", /* so no end of "inner escape" either */
+ "*/", /* comments end with this character pair */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN CPPCommentEscapeToken = {
+ "Lout escape", /* used by error messages involving this token */
+ PRINT_NODELIMS_UNQUOTED, /* print this token unformatted */
+ "", /* no Lout command since we are printing raw */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "//@" }, /* escape comments begin with this delimiter */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
AllPrintable, /* inside, any printable char is OK */
"", /* no escape character within comments */
"", /* so nothing legal after escape char either */
"", /* no "inner escape" in escape comments */
"", /* so no end of "inner escape" either */
- "" /* no ending delimiter; end of line will end it */
+ "", /* no end delimiter (end of line will end it) */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
+
-TOKEN BlueCommentToken = {
- "comment", /* used by error messages involving this token */
- "@C", /* Lout command for formatting comments */
- "", /* No alternate command */
- { "==", "--" }, /* comments begin with this character pair */
+TOKEN EiffelCommentEscapeToken = {
+ "Lout escape", /* used by error messages involving this token */
+ PRINT_NODELIMS_UNQUOTED, /* print this token unformatted */
+ "", /* no Lout command since we are printing raw */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "--@" }, /* escape comments begin with this delimiter */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
AllPrintable, /* inside, any printable char is OK */
"", /* no escape character within comments */
"", /* so nothing legal after escape char either */
- "`", /* start of "inner escape" in Blue comment */
- "'", /* end of "inner escape" in Blue comment */
- "" /* no ending delimiter; end of line will end it */
+ "", /* no "inner escape" in escape comments */
+ "", /* so no end of "inner escape" either */
+ "", /* no ending delimiter; end of line will end it */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
TOKEN BlueCommentEscapeToken = {
"Lout escape", /* used by error messages involving this token */
- NULL, /* no Lout command since passed through unformatted */
- "", /* No alternate command */
- { "==@", "--@" }, /* comments begin with this character pair */
+ PRINT_NODELIMS_UNQUOTED, /* print this token unformatted */
+ "", /* no Lout command since we are printing raw */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "==@", "--@" }, /* escape comments begin with these delimiters */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
AllPrintable, /* inside, any printable char is OK */
"", /* no escape character within comments */
"", /* so nothing legal after escape char either */
"", /* no "inner escape" in escape comments */
"", /* so no end of "inner escape" either */
- "" /* no ending delimiter; end of line will end it */
+ "", /* no ending delimiter; end of line will end it */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
};
+
+/*****************************************************************************/
+/* */
+/* Tokens which are fixed strings, hence simpler than the above. */
+/* */
+/*****************************************************************************/
#define FixedToken(str, command) /* define fixed-string token */ \
{ \
str, /* name used for debugging only */ \
+ PRINT_WHOLE_QUOTED, /* print this token as usual */ \
+ command, /* Lout command for formatting this */ \
+ "", /* no alternate command */ \
+ "", /* no following command */ \
+ FALSE, /* token not just start of line */ \
+ { str }, /* token begins (and ends!) with this */ \
+ { NULL }, /* no start2 needed */ \
+ { NULL }, /* so no end2 either */ \
+ "", /* nothing inside, since no inside */ \
+ "", "", /* no escape character */ \
+ "", "", /* no inner escape; no end inner esc */ \
+ "", /* no ending delimiter */ \
+ FALSE, /* end not have to be at line start */ \
+ FALSE, /* don't end delimiter twice to stop */ \
+}
+
+TOKEN HashToken = FixedToken("#", "@PO");
+TOKEN ExclamationToken = FixedToken("!", "@PO");
+TOKEN PercentToken = FixedToken("%", "@PO");
+TOKEN HatToken = FixedToken("^", "@PO");
+TOKEN AmpersandToken = FixedToken("&", "@PO");
+TOKEN SlashToken = FixedToken("/", "@PO");
+TOKEN ArrowToken = FixedToken("->", "arrowright @A @PO");
+TOKEN BackSlashToken = FixedToken("\\", "@PO");
+TOKEN LeftParenToken = FixedToken("(", "@PO");
+TOKEN RightParenToken = FixedToken(")", "@PO");
+TOKEN PlusToken = FixedToken("+", "plus @A @PO");
+TOKEN EqualToken = FixedToken("=", "equal @A @PO");
+TOKEN LeftBraceToken = FixedToken("{", "@PO");
+TOKEN RightBraceToken = FixedToken("}", "@PO");
+TOKEN BarToken = FixedToken("|", "@PO");
+TOKEN CircumToken = FixedToken("~", "@PO");
+TOKEN LeftBracketToken = FixedToken("[", "@PO");
+TOKEN RightBracketToken = FixedToken("]", "@PO");
+TOKEN SemicolonToken = FixedToken(";", "@PO");
+TOKEN ColonToken = FixedToken(":", "@PO");
+TOKEN LessToken = FixedToken("<", "less @A @PO");
+TOKEN GreaterToken = FixedToken(">", "greater @A @PO");
+TOKEN QuestionToken = FixedToken("?", "@PO");
+TOKEN CommaToken = FixedToken(",", "@PO");
+TOKEN DotToken = FixedToken(".", "@PO");
+TOKEN LessEqualToken = FixedToken("<=", "lessequal @A @PO");
+TOKEN GreaterEqualToken = FixedToken(">=", "greaterequal @A @PO");
+TOKEN CNotEqualToken = FixedToken("!=", "notequal @A @PO");
+TOKEN EiffelNotEqualToken = FixedToken("/=", "notequal @A @PO");
+TOKEN BlueNotEqualToken = FixedToken("<>", "notequal @A @PO");
+TOKEN AssignToken = FixedToken(":=", "@PO");
+TOKEN QuestionAssignToken = FixedToken("?=", "@PO");
+TOKEN DollarToken = FixedToken("$", "@PO");
+TOKEN ImpliesToken = FixedToken("=>", "implies @A @PO");
+
+
+/*****************************************************************************/
+/* */
+/* Fixed-string tokens that are to be printed COMMAND_ONLY (no parameter). */
+/* */
+/*****************************************************************************/
+
+#define NoParameterToken(str, command) /* define fixed-string token */ \
+{ \
+ str, /* name used for debugging only */ \
+ PRINT_COMMAND_ONLY, /* print only the command */ \
command, /* Lout command for formatting this */ \
- "", /* No alternate command */ \
+ "", /* no alternate command */ \
+ "", /* no following command */ \
+ FALSE, /* token not just start of line */ \
{ str }, /* token begins (and ends!) with this */ \
+ { NULL }, /* no start2 needed */ \
+ { NULL }, /* so no end2 either */ \
"", /* nothing inside, since no inside */ \
- "", /* no escape character */ \
- "", /* so nothing after escape character */ \
- "", /* no inner escape either */ \
- "", /* so no end inner escape */ \
- "" /* no ending delimiter */ \
+ "", "", /* no escape character */ \
+ "", "", /* no inner escape; no end inner esc */ \
+ "", /* no ending delimiter */ \
+ FALSE, /* end not have to be at line start */ \
+ FALSE, /* don't end delimiter twice to stop */ \
+}
+
+TOKEN StarToken = NoParameterToken("*", "{@PA}");
+TOKEN MinusToken = NoParameterToken("-", "{@PM}");
+TOKEN EiffelDotToken = NoParameterToken(".", "{@PD}");
+
+
+/*****************************************************************************/
+/* */
+/* Perl (quarantined from other languages since it's very different). */
+/* */
+/* Perl code co-authored by Jeffrey H. Kingston and Mark Summerfield */
+/* March 2000 */
+/* */
+/* In the comments below, WCS refers to "Programming Perl", Second */
+/* Edition (1996), by Wall, Christiansen, and Schwartz. However Perl */
+/* has changed since then and this code also reflects those changes. */
+/* */
+/*****************************************************************************/
+
+/*****************************************************************************/
+/* */
+/* Perl's strings and regular expressions */
+/* */
+/* The table in WCS pp. 41 is a good summary of the possibilities: */
+/* */
+/* '' q// */
+/* "" qq// */
+/* `` qx// */
+/* () qw// */
+/* // m// */
+/* s/// s/// */
+/* y/// tr/// */
+/* */
+/* To this must be added the following quotation, which begins just */
+/* below the table: */
+/* */
+/* Any non-alphabetic, non-whitespace delimiter can be used in place */
+/* of /. If the opening delimiter is a parenthesis, bracket, brace, */
+/* or angle bracket, the closing delimiter will be the matching */
+/* construct. (Embedded occurrences of the delimiters must match in */
+/* pairs.) ... Finally, for two-string constructs like s/// and tr///, */
+/* if the first pair of quotes is a bracketing pair, then the second */
+/* part gets its own starting quote character, which needn't be the */
+/* same as the first pair. So you can write things like s{foo}(bar) */
+/* or tr[a-z][A-Z]. Whitespace is allowed between the two inner quote */
+/* characters, so you could even write that last one as */
+/* */
+/* tr [a-z] */
+/* [A-Z] */
+/* */
+/* At present the tokens below have three problems implementing this: */
+/* */
+/* (1) When / appears without anything in front, it will be recognized */
+/* as a division operator, hence the following regular expression */
+/* will be treated as ordinary Perl, not as a regular expression; */
+/* */
+/* (2) When the delimiters are a matching pair, embedded occurrences */
+/* are not recognised as such: the first closing delimiter will be */
+/* taken to close the pair; */
+/* */
+/* (3) The case s{foo}(bar) is not implemented; the second bracketing */
+/* pair must be the same as the first; in fact prg2lout will keep */
+/* going, looking for a second closing brace, in this example. */
+/* */
+/*****************************************************************************/
+
+
+TOKEN PerlSingleQuoteStringToken = {
+ "''-string", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PS", /* Lout command for formatting strings */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "'" }, /* strings begin with a ' character */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllCharacters, /* inside, any character at all is OK */
+ "\\", /* within strings, \\ is the escape character */
+ "\\'", /* after escape, only \ and ' are OK (WCS p. 39) */
+ "", /* strings do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "\'", /* strings end with a ' character */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PerlDoubleQuoteStringToken = {
+ "\"\"-string", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PS", /* Lout command for formatting strings */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "\"" }, /* strings begin with a " character */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllCharacters, /* inside, any character at all is OK */
+ "\\", /* within strings, \\ is the escape character */
+ AllCharacters, /* after escape char, any character at all is OK */
+ "", /* strings do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "\"", /* strings end with a " character */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PerlBackQuoteStringToken = {
+ "``-string", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PS", /* Lout command for formatting strings */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "`" }, /* strings begin with a ` character */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllCharacters, /* inside, any character at all is OK */
+ "\\", /* within strings, \\ is the escape character */
+ AllCharacters, /* after escape char, any character at all is OK */
+ "", /* strings do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "`", /* strings end with a ` character */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+
+TOKEN PerlQTypeStringToken = {
+ "q-type-string", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PS", /* Lout command for formatting strings */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "q", "qq", "qx", "qw", "qr", "m" }, /* q-type strings begin with these */
+ { "/", "(", "[", "{", "<", "!", "%", "#", "|", ",", ":", ";" }, /*start2 */
+ { "/", ")", "]", "}", ">", "!", "%", "#", "|", ",", ":", ";" }, /* end2 */
+ AllCharacters, /* inside, any character at all is OK */
+ "\\", /* within strings, \\ is the escape character */
+ AllCharacters, /* after escape char, any character at all is OK */
+ "", /* strings do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "", /* will be using end2 for the end delimiter here */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PerlSTypeStringToken = {
+ "s-type-string", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PS", /* Lout command for formatting strings */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "s", "y", "tr" }, /* s-type strings begin with these */
+ { "/", "(", "[", "{", "<", "!", "%", "#", "|", ",", ":", ";" }, /*start2 */
+ { "/", ")", "]", "}", ">", "!", "%", "#", "|", ",", ":", ";" }, /* end2 */
+ AllCharacters, /* inside, any character at all is OK */
+ "\\", /* within strings, \\ is the escape character */
+ AllCharacters, /* after escape char, any character at all is OK */
+ "", /* strings do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "", /* will be using end2 for the end delimiter here */
+ FALSE, /* end delimiter does not have to be at line start */
+ TRUE, /* need to see end delimiter twice to stop */
+};
+
+
+/*****************************************************************************/
+/* */
+/* Perl "bare" regular expressions */
+/* */
+/* By a bare regular expression, we mean one that is not preceded */
+/* by q, qq, m etc. These are distinguished from division by being */
+/* preceded by one of =, =~, !~, split, if, not, unless, for, foreach, */
+/* or while, with up to two white space characters intervening. */
+/* */
+/*****************************************************************************/
+
+#define PerlREToken(start, com) \
+{ \
+ "regexp", /* used by error messages */ \
+ PRINT_NODELIMS_QUOTED,/* no delims since we supply them */ \
+ com, /* the command */ \
+ "", /* no alternate command */ \
+ "@PS{\"/\"}", /* following command (final /) */ \
+ FALSE, /* token allowed not just start of line */ \
+ { start }, /* preceding token in this case */ \
+ { "/", " /", "\t/", " /", " \t/", "\t /", "\t\t/" }, /* start2 */ \
+ { "/", "/", "/", "/", "/", "/", "/" }, /* end2 */ \
+ AllCharacters, /* any character OK inside */ \
+ "\\", /* \\ is the escape character */ \
+ AllCharacters, /* after escape char, any is OK */ \
+ "", /* no inner escapes */ \
+ "", /* no end innner escape either */ \
+ "", /* will be using end2 here */ \
+ FALSE, /* no need to end at line start */ \
+ FALSE, /* don't want end delimiter twice */ \
+}
+
+TOKEN PerlRegExpLPar = PerlREToken("(", "@PO{\"(\"} @PS{\"/\"}@PS");
+TOKEN PerlRegExpEq = PerlREToken("=", "@PO{\"=\"} @PS{\"/\"}@PS");
+TOKEN PerlRegExpMatch = PerlREToken("=~", "@PO{\"=~\"} @PS{\"/\"}@PS");
+TOKEN PerlRegExpNoMatch = PerlREToken("!~", "@PO{\"!~\"} @PS{\"/\"}@PS");
+TOKEN PerlRegExpSplit = PerlREToken("split", "@PK{split} @PS{\"/\"}@PS");
+TOKEN PerlRegExpIf = PerlREToken("if", "@PK{if} @PS{\"/\"}@PS");
+TOKEN PerlRegExpNot = PerlREToken("not", "@PK{not} @PS{\"/\"}@PS");
+TOKEN PerlRegExpUnless = PerlREToken("unless", "@PK{unless} @PS{\"/\"}@PS");
+TOKEN PerlRegExpFor = PerlREToken("for", "@PK{for} @PS{\"/\"}@PS");
+TOKEN PerlRegExpForEach = PerlREToken("foreach","@PK{foreach} @PS{\"/\"}@PS");
+TOKEN PerlRegExpWhile = PerlREToken("while", "@PK{while} @PS{\"/\"}@PS");
+
+TOKEN PerlRegExpStartLineToken =
+{
+ "regexp", /* used by error messages */
+ PRINT_WHOLE_QUOTED, /* we can print the whole thing this time */
+ "@PS", /* the command */
+ "", /* no alternate command */
+ "", /* no following command */
+ TRUE, /* token allowed only at start of line */
+ { "/" }, /* starting delimiter (so easy!) */
+ { NULL }, /* no start2 */
+ { NULL }, /* no end2 */
+ AllCharacters, /* any character OK inside */
+ "\\", /* \\ is the escape character */
+ AllCharacters, /* after escape char, any is OK */
+ "", /* no inner escapes */
+ "", /* no end innner escape either */
+ "/", /* ending delimiter */
+ FALSE, /* no need to end at line start */
+ FALSE, /* don't want end delimiter twice */
+};
+
+
+/*****************************************************************************/
+/* */
+/* Perl's here-documents */
+/* */
+/* At present the only terminating strings recognized are EOT, EOF, END, */
+/* and the empty string. These may all be quoted in the usual ways. */
+/* */
+/*****************************************************************************/
+
+#define X(startstr, endstr, startcom, endcom) \
+{ \
+ "here-document", /* used by error messages */ \
+ PRINT_NODELIMS_QUOTED,/* no delims since we supply them */ \
+ startcom, /* the command */ \
+ "", /* no alternate command */ \
+ endcom, /* following command (final /) */ \
+ FALSE, /* token allowed not just start of line */ \
+ { startstr }, /* starting delimiter */ \
+ { NULL }, /* no start2 */ \
+ { NULL }, /* no end2 */ \
+ AllCharacters, /* any character OK inside */ \
+ "", "", /* no escape character */ \
+ "", "", /* no inner escapes */ \
+ endstr, /* token ends with this */ \
+ TRUE, /* must be found at line start */ \
+ FALSE, /* don't want end delimiter twice */ \
+}
+
+#define sEOT "\n@PS{\"EOT\"}\n"
+#define sEOF "\n@PS{\"EOF\"}\n"
+#define sEND "\n@PS{\"END\"}\n"
+#define sBLA "\n@PS{\"\"}\n"
+
+TOKEN HereEOTuq = X("<<EOT", "EOT\n", "@PO{<<}@PS{\"EOT\"}@PS", sEOT);
+TOKEN HereEOTdq = X("<<\"EOT\"","EOT\n", "@PO{<<}@PS{\"\\\"EOT\\\"\"}@PS",sEOT);
+TOKEN HereEOTfq = X("<<'EOT'", "EOT\n", "@PO{<<}@PS{\"'EOT'\"}@PS", sEOT);
+TOKEN HereEOTbq = X("<<`EOT`", "EOT\n", "@PO{<<}@PS{\"`EOT`\"}@PS", sEOT);
+
+TOKEN HereEOFuq = X("<<EOF", "EOF\n", "@PO{<<}@PS{\"EOF\"}@PS", sEOF);
+TOKEN HereEOFdq = X("<<\"EOF\"","EOF\n", "@PO{<<}@PS{\"\\\"EOF\\\"\"}@PS",sEOF);
+TOKEN HereEOFfq = X("<<'EOF'", "EOF\n", "@PO{<<}@PS{\"'EOF'\"}@PS", sEOF);
+TOKEN HereEOFbq = X("<<`EOF`", "EOF\n", "@PO{<<}@PS{\"`EOF`\"}@PS", sEOF);
+
+TOKEN HereENDuq = X("<<END", "END\n", "@PO{<<}@PS{\"END\"}@PS", sEND);
+TOKEN HereENDdq = X("<<\"END\"","END\n", "@PO{<<}@PS{\"\\\"END\\\"\"}@PS",sEND);
+TOKEN HereENDfq = X("<<'END'", "END\n", "@PO{<<}@PS{\"'END'\"}@PS", sEND);
+TOKEN HereENDbq = X("<<`END`", "END\n", "@PO{<<}@PS{\"`END`\"}@PS", sEND);
+
+TOKEN HereBLAuq = X("<< ", "\n", "@PO{<<} @PS", sBLA);
+TOKEN HereBLAdq = X("<<\"\"", "\n", "@PO{<<}@PS{\"\\\"\\\"\"}@PS", sBLA);
+TOKEN HereBLAfq = X("<<''", "\n", "@PO{<<}@PS{\"''\"}@PS", sBLA);
+TOKEN HereBLAbq = X("<<``", "\n", "@PO{<<}@PS{\"``\"}@PS", sBLA);
+
+
+/*****************************************************************************/
+/* */
+/* Perl's identifiers */
+/* */
+/* "Names that start with a letter or underscore may be of any */
+/* length ... and may contain letters, digits, and underscores. */
+/* Names that start with a digit may only contain more digits. */
+/* Names that start with anything else are limited to that one */
+/* character (like $? or $$) and generally have a predefined */
+/* significance to Perl." (WCS page 38) */
+/* */
+/* In addition we have to consider that variable names may be preceded */
+/* by $, @, %, &, or *. Whether these are part of the variable or not is */
+/* rather doubtful. We will treat $ and @ as part of the variable and the */
+/* others not (since they occur elsewhere in the token list anyway); plus */
+/* we have a separate token type for identifiers beginning with $ and */
+/* followed by one character, which we will list explicitly. */
+/* */
+/*****************************************************************************/
+
+TOKEN PerlIdentifierToken = {
+ "identifier", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PI", /* Lout command for formatting identifiers */
+ "@PK", /* Alternate command (for keywords) */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ {SepLetters,"_","$","@"}, /* identifiers begin with these */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ Letter_Digit, /* inside, letters, underscores, digits are OK */
+ "", /* no escape character within identifiers */
+ "", /* so nothing legal after escape char either */
+ "", /* identifiers do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "", /* identifiers do not end with a delimiter */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PerlSpecialIdentifierToken = {
+ "special identifier", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PI", /* Lout command for formatting identifiers */
+ "@PK", /* Alternate command (for keywords) */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "$_", "$.", "$/", "$,", "$\\", "$\"", "$;", "$^L", "$:",
+ "$^A", "$#", "$?", "$!", "$@", "$$", "$<", "$>", "$(",
+ "$)", "$0", "$[", "$]", "$^D", "$^E", "$^F", "$^H", "$^I",
+ "$^M", "$^O", "$^P", "$^T", "$^W", "$^X"
+ }, /* all possible values of special variables */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ "", /* nothing allowed inside, since ends after start */
+ "", /* no escape character within identifiers */
+ "", /* so nothing legal after escape char either */
+ "", /* identifiers do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "", /* identifiers do not end with a delimiter */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+
+/*****************************************************************************/
+/* */
+/* Perl's numeric literals */
+/* */
+/* These are defined in WCS page 39 basically by giving these examples: */
+/* */
+/* 12345 # integer */
+/* 12345.67 # floating point */
+/* 6.02E23 # scientific notation */
+/* 0xffff # hexadecimal */
+/* 0377 # octal */
+/* 4_294_967_296 # underline for legibility */
+/* */
+/* Implementation is straightforward; hexadecimal is a separate token. */
+/* */
+/*****************************************************************************/
+
+TOKEN PerlLiteralNumberToken = {
+ "number", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PN", /* Lout command for formatting numbers */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { SepDigits }, /* numbers must begin with a digit */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ "0123456789.eE_", /* inside, digits, point, exponent, underscore */
+ "", /* no escape character within numbers */
+ "", /* so nothing legal after escape char either */
+ "", /* numbers do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "", /* numbers do not end with a delimiter */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PerlHexNumberToken = {
+ "number", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PN", /* Lout command for formatting numbers */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "0x" }, /* hex numbers must begin with 0x */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ "0123456789AaBbCcDdEeFf", /* inside, hexadecimal digits */
+ "", /* no escape character within numbers */
+ "", /* so nothing legal after escape char either */
+ "", /* numbers do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "", /* numbers do not end with a delimiter */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+
+/*****************************************************************************/
+/* */
+/* Perl's comments */
+/* */
+/* "Comments are indicated by the # character and extend to the end of */
+/* the line." (WCS page 35). To this we have added the usual Lout escape */
+/* comment beginning with #@. */
+/* */
+/*****************************************************************************/
+
+TOKEN PerlCommentToken = {
+ "comment", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
+ "@PC", /* Lout command for formatting comments */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "#" }, /* comments begin with this character */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllPrintable, /* inside, any printable char is OK (not NL) */
+ "", /* no escape character within comments */
+ "", /* so nothing legal after escape char either */
+ "", /* C comments do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "", /* no end delimiter (end of line will end it) */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PerlCommentEscapeToken = {
+ "Lout escape", /* used by error messages involving this token */
+ PRINT_NODELIMS_UNQUOTED, /* print this token unformatted */
+ "", /* no Lout command since we are printing raw */
+ "", /* no alternate command */
+ "", /* no following command */
+ FALSE, /* token allowed anywhere, not just start of line */
+ { "#@" }, /* comments begin with this character pair */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllPrintable, /* inside, any printable char is OK */
+ "", /* no escape character within comments */
+ "", /* so nothing legal after escape char either */
+ "", /* no "inner escape" in escape comments */
+ "", /* so no end of "inner escape" either */
+ "", /* no end delimiter (end of line will end it) */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+
+/*****************************************************************************/
+/* */
+/* Perl's POD sub-language */
+/* */
+/* Pod is handled as a completely different language. However we need */
+/* one Perl token which recognizes an entire Pod interpolation and prints */
+/* it enclosed in @Pod { ... } so that Lout knows to call back later on it. */
+/* */
+/* "A line beginning with = is assumed to introduce some documentation, */
+/* which continues until another line is reached beginning with =cut" */
+/* (WCS page36). Strictly speaking this is only valid at points where */
+/* a statement would be legal, but that is beyond prg2lout to implement. */
+/* */
+/*****************************************************************************/
+
+TOKEN PerlPodToken = {
+ "perl-pod", /* used by error messages involving this token */
+ PRINT_NODELIMS_UNQUOTED, /* unquoted but with a command enclosing it */
+ "@DP @Pod", /* Lout command for formatting Pod */
+ "", /* no alternate command */
+ "@DP\n", /* following command */
+ TRUE, /* token allowed at start of line only */
+ { "=", "=pod" }, /* pod insert begins with either of these */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllCharacters, /* inside, any character at all is OK */
+ "", /* no escape character within pod comments */
+ "", /* so nothing legal after escape char either */
+ "", /* pod comments do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "=cut", /* pod comments end with this string */
+ TRUE, /* end delimiter must be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+
+/*****************************************************************************/
+/* */
+/* Perl's operators */
+/* */
+/* Only those not already in the C/C++ list are given here. */
+/* */
+/*****************************************************************************/
+
+TOKEN PerlIncrementToken = FixedToken( "++", "@PO" ) ;
+TOKEN PerlDecrementToken = FixedToken( "--", "@PO" ) ;
+TOKEN PerlExponentiateToken = FixedToken( "**", "@PO" ) ;
+TOKEN PerlMatchToken = FixedToken( "=~", "@PO" ) ;
+TOKEN PerlNotMatchToken = FixedToken( "!~", "@PO" ) ;
+TOKEN PerlEqualToken = FixedToken( "==", "@PO" ) ;
+TOKEN PerlAssignToken = FixedToken( "=", "@PO" ) ;
+TOKEN PerlBitLeftShiftToken = FixedToken( "<<", "@PO" ) ;
+TOKEN PerlBitRightShiftToken = FixedToken( ">>", "@PO" ) ;
+TOKEN PerlSpaceshipToken = FixedToken( "<=>", "@PO" ) ;
+TOKEN PerlAndToken = FixedToken( "&&", "@PO" ) ;
+TOKEN PerlOrToken = FixedToken( "||", "@PO" ) ;
+TOKEN PerlRange2Token = FixedToken( "..", "@PO" ) ;
+TOKEN PerlRange3Token = FixedToken( "...", "@PO" ) ;
+TOKEN PerlFileTestrToken = FixedToken( "-r", "@PO" ) ;
+TOKEN PerlFileTestwToken = FixedToken( "-w", "@PO" ) ;
+TOKEN PerlFileTestxToken = FixedToken( "-x", "@PO" ) ;
+TOKEN PerlFileTestoToken = FixedToken( "-o", "@PO" ) ;
+TOKEN PerlFileTestRToken = FixedToken( "-R", "@PO" ) ;
+TOKEN PerlFileTestWToken = FixedToken( "-W", "@PO" ) ;
+TOKEN PerlFileTestXToken = FixedToken( "-X", "@PO" ) ;
+TOKEN PerlFileTestOToken = FixedToken( "-O", "@PO" ) ;
+TOKEN PerlFileTesteToken = FixedToken( "-e", "@PO" ) ;
+TOKEN PerlFileTestzToken = FixedToken( "-z", "@PO" ) ;
+TOKEN PerlFileTestsToken = FixedToken( "-s", "@PO" ) ;
+TOKEN PerlFileTestfToken = FixedToken( "-f", "@PO" ) ;
+TOKEN PerlFileTestdToken = FixedToken( "-d", "@PO" ) ;
+TOKEN PerlFileTestlToken = FixedToken( "-l", "@PO" ) ;
+TOKEN PerlFileTestpToken = FixedToken( "-p", "@PO" ) ;
+TOKEN PerlFileTestSToken = FixedToken( "-S", "@PO" ) ;
+TOKEN PerlFileTestbToken = FixedToken( "-b", "@PO" ) ;
+TOKEN PerlFileTestcToken = FixedToken( "-c", "@PO" ) ;
+TOKEN PerlFileTesttToken = FixedToken( "-t", "@PO" ) ;
+TOKEN PerlFileTestuToken = FixedToken( "-u", "@PO" ) ;
+TOKEN PerlFileTestgToken = FixedToken( "-g", "@PO" ) ;
+TOKEN PerlFileTestkToken = FixedToken( "-k", "@PO" ) ;
+TOKEN PerlFileTestTToken = FixedToken( "-T", "@PO" ) ;
+TOKEN PerlFileTestBToken = FixedToken( "-B", "@PO" ) ;
+TOKEN PerlFileTestMToken = FixedToken( "-M", "@PO" ) ;
+TOKEN PerlFileTestAToken = FixedToken( "-A", "@PO" ) ;
+TOKEN PerlFileTestCToken = FixedToken( "-C", "@PO" ) ;
+
+
+/*****************************************************************************/
+/* */
+/* Pod (Plain Old Documentation, used with Perl) tokens */
+/* */
+/* Pod is treated as a completely different language to Perl. It is */
+/* quite possible to use Pod alone without Perl; or, thanks to the */
+/* PerlPodToken, to embed Pod in Perl in the usual way. Quotations below */
+/* are from Larry Wall's documentation, communicated by Mark Summerfield. */
+/* */
+/*****************************************************************************/
+
+/*****************************************************************************/
+/* */
+/* Pod Verbatim paragraphs */
+/* */
+/* "A verbatim paragraph [is] distinguished by being indented (that is, it */
+/* starts with a space or tab). It should be reproduced exactly, with */
+/* tabs assumed to be on 8-column boundaries. There are no special */
+/* formatting escapes." */
+/* */
+/* By a "paragraph" is meant a sequence of lines down to the next empty */
+/* line; but we will handle verbatim paragraphs one line at a time. */
+/* It also seems that an empty line in the input has to become an empty */
+/* line in the output; so we include a token for that. */
+/* */
+/*****************************************************************************/
+
+TOKEN PodVerbatimLineToken = {
+ "verbatim-para", /* used by error messages involving this token */
+ PRINT_WHOLE_QUOTED, /* printing the whole paragraph quoted */
+ "@PV ", /* Lout command for formatting verbatim line */
+ "", /* no alternate command */
+ "", /* no following command */
+ TRUE, /* token allowed at start of line only */
+ { "\t", " " }, /* command begins with this */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllPrintablePlusTab, /* inside, any printable char except newline is OK */
+ "", "", /* no escape character within verbatim lines */
+ "", "", /* no "inner escapes" within verbatim lines */
+ "", /* ends at end of line */
+ FALSE, /* don't need to be at start of line to end it */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PodEmptyLineToken = {
+ "pod-empty-line", /* used by error messages involving this token */
+ PRINT_COMMAND_ONLY, /* printing just the command */
+ "@PPG\n", /* Lout command for formatting Pod empty line */
+ "", /* no alternate command */
+ "", /* no following command */
+ TRUE, /* token allowed at start of line only */
+ { "\n" }, /* command begins with this */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ "", /* nothing inside */
+ "", "", /* no escape character */
+ "", "", /* no inner escape */
+ "", /* token will end with the end of the line */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+
+/*****************************************************************************/
+/* */
+/* Pod Command paragraphs */
+/* */
+/* "All command paragraphs start with =, followed by an identifier, */
+/* followed by arbitrary text that the command can use." */
+/* */
+/* "[A] command lasts up until the end of the paragraph, not the line. */
+/* Hence, ... you can see the empty lines after each command to end */
+/* its paragraph." */
+/* */
+/*****************************************************************************/
+
+/*****************************************************************************/
+/* */
+/* Pod command paragraphs: =pod */
+/* */
+/* "The =pod directive does nothing beyond telling the compiler to lay off */
+/* parsing code through the next =cut." */
+/* */
+/*****************************************************************************/
+
+TOKEN PodIgnoreToken = {
+ "pod-cut", /* used by error messages involving this token */
+ PRINT_COMMAND_ONLY, /* printing just the command */
+ "", /* Lout command for formatting Pod cut (nothing) */
+ "", /* no alternate command */
+ "", /* no following command */
+ TRUE, /* token allowed at start of line only */
+ { "=pod", "=cut" }, /* command begins with this */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllCharacters, /* anything at all can be inside */
+ "", /* no escape character */
+ "", /* so nothing legal after escape char either */
+ "", /* cut tokens do not permit "inner escapes" */
+ "", /* and so there is no end innner escape either */
+ "\n", /* token will end with the end of the line */
+ TRUE, /* end delimiter (\n) has to be at a line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+
+/*****************************************************************************/
+/* */
+/* Pod command paragraphs: =head1, =head2 (and =head3, folklore extension) */
+/* */
+/* "... produce first and second level heading" */
+/* */
+/*****************************************************************************/
+
+TOKEN PodHeading1Token = {
+ "=head1", /* used by error messages involving this token */
+ PRINT_NODELIMS_QUOTED, /* print without delimiters */
+ "@PHA", /* Lout command for formatting Pod heading */
+ "", /* no alternate command */
+ "", /* following command */
+ TRUE, /* token allowed at start of line only */
+ {"=head1","head1"}, /* command begins with this */
+ { " ", "\t" }, /* helps to skip following white space */
+ { "\n", "\n" }, /* token ends at end of line */
+ AllCharacters, /* anything in the heading */
+ "", "", /* no escape character; nothing legal after escape */
+ "", "", /* no inner escapes; no end inner escape */
+ "\n\n", /* token will end with the first blank line */
+ FALSE, /* end delimiter (\n) has to be at a line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PodHeading2Token = {
+ "=head2", /* used by error messages involving this token */
+ PRINT_NODELIMS_QUOTED, /* print without delimiters */
+ "@PHB", /* Lout command for formatting Pod heading */
+ "", /* no alternate command */
+ "", /* following command */
+ TRUE, /* token allowed at start of line only */
+ { "=head2" }, /* command begins with this */
+ { " ", "\t" }, /* helps to skip following white space */
+ { "\n", "\n" }, /* token ends at end of line */
+ AllCharacters, /* anything in the heading */
+ "", "", /* no escape character; nothing legal after escape */
+ "", "", /* no inner escapes; no end inner escape */
+ "\n\n", /* token will end with the first blank line */
+ FALSE, /* end delimiter (\n) has to be at a line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PodHeading3Token = {
+ "=head3", /* used by error messages involving this token */
+ PRINT_NODELIMS_QUOTED, /* print without delimiters */
+ "@PHC", /* Lout command for formatting Pod heading */
+ "", /* no alternate command */
+ "", /* following command */
+ TRUE, /* token allowed at start of line only */
+ { "=head3" }, /* command begins with this */
+ { " ", "\t" }, /* helps to skip following white space */
+ { "\n", "\n" }, /* token ends at end of line */
+ AllCharacters, /* anything in the heading */
+ "", "", /* no escape character; nothing legal after escape */
+ "", "", /* no inner escapes; no end inner escape */
+ "\n\n", /* token will end with the first blank line */
+ FALSE, /* end delimiter (\n) has to be at a line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+
+/*****************************************************************************/
+/* */
+/* Pod command paragraphs: =over, =item, and =back (for lists) */
+/* */
+/*****************************************************************************/
+
+TOKEN PodOverToken = {
+ "=over", /* used by error messages involving this token */
+ PRINT_NODELIMS_UNQUOTED, /* just a number after =over, so this is safe */
+ "@RawTaggedList gap{@PLG}indent{@PLI}rightindent{@PLRI}labelwidth{@PLLW ",
+ "", /* no alternate command */
+ "} // {", /* open brace to match } at first item */
+ TRUE, /* token allowed at start of line only */
+ { "=over" }, /* command begins with this */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllCharacters, /* inside, any printable char is OK */
+ "", "", /* no escape character; nothing legal after escape */
+ "", "", /* no inner escapes; no end inner escape */
+ "\n", /* token will end with the end of the line */
+ TRUE, /* end delimiter (\n) has to be at a line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PodItemToken = {
+ "=item", /* used by error messages involving this token */
+ PRINT_NODELIMS_QUOTED,/* printing just what follows =item on the line */
+ "@Null //}\n@TI {@PLL", /* Lout command for formatting Pod item */
+ "", /* no alternate command */
+ "} {", /* open brace to enclose the item content */
+ TRUE, /* token allowed at start of line only */
+ { "=item" }, /* command begins with this */
+ { " ", "\t" }, /* helps to skip following white space */
+ { "\n\n", "\n\n" }, /* token will end at blank line */
+ AllPrintableTabNL, /* any printable inside */
+ "", "", /* no escape character; nothing legal after escape */
+ "", "", /* no inner escapes; no end inner escape */
+ "", /* see ends2[] */
+ FALSE, /* end delimiter (\n) must already be at start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PodBackToken = {
+ "=back", /* used by error messages involving this token */
+ PRINT_COMMAND_ONLY, /* printing just the command */
+ "@Null // }\n@EndList\n", /* Lout command for formatting Pod back */
+ "", /* no alternate command */
+ "", /* no following command */
+ TRUE, /* token allowed at start of line only */
+ { "=back" }, /* command begins with this */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllCharacters, /* anything inside (in principle) */
+ "", "", /* no escape character; nothing legal after escape */
+ "", "", /* no inner escapes; no end inner escape */
+ "\n", /* token will end with the next blank line */
+ TRUE, /* end delimiter (\n) has to be at a line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+
+/*****************************************************************************/
+/* */
+/* Pod command paragraphs: =for, =begin, =end */
+/* */
+/* "passed directly to particular formatters. A formatter that can utilize */
+/* that format will use the section, otherwise it will be ignored." */
+/* */
+/* So I've put in a "=begin lout" token, also recognized as "=begin Lout". */
+/* */
+/*****************************************************************************/
+
+TOKEN PodForToken = {
+ "=for", /* used by error messages involving this token */
+ PRINT_COMMAND_ONLY, /* printing just the command */
+ "", /* Lout command for formatting Pod for (nothing) */
+ "", "", /* no alternate command; no following command */
+ TRUE, /* token allowed at start of line only */
+ { "=for" }, /* command begins with this */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllCharacters, /* anything inside */
+ "", "", /* no escape character; nothing legal after escape */
+ "", "", /* no inner escapes; no end inner escape */
+ "\n", /* token will end with the end of the line */
+ TRUE, /* end delimiter (\n) has to be at a line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PodBeginToken = {
+ "=begin", /* used by error messages involving this token */
+ PRINT_COMMAND_ONLY, /* printing just the command */
+ "", /* Lout command for formatting Pod for (nothing) */
+ "", "", /* no alternate command; no following command */
+ TRUE, /* token allowed at start of line only */
+ { "=begin" }, /* command begins with this */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllCharacters, /* anything inside */
+ "", "", /* no escape character; nothing legal after escape */
+ "", "", /* no inner escapes; no end inner escape */
+ "=end", /* token will end with =end character */
+ TRUE, /* end delimiter has to be at a line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+TOKEN PodBeginLoutToken = {
+ "=begin lout", /* used by error messages involving this token */
+ PRINT_NODELIMS_UNQUOTED,/* this is a Lout escape, no delims or quotes */
+ "", /* Lout command for formatting Pod for (nothing) */
+ "", "", /* no alternate command; no following command */
+ TRUE, /* token allowed at start of line only */
+ { "=begin lout", "=begin Lout" }, /* command begins with this */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ AllCharacters, /* anything inside */
+ "", "", /* no escape character; nothing legal after escape */
+ "", "", /* no inner escapes; no end inner escape */
+ "=end", /* token will end with =end character */
+ TRUE, /* end delimiter has to be at a line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+
+/*****************************************************************************/
+/* */
+/* Pod "Ordinary Block of Text" paragraphs */
+/* */
+/* "It will be filled, and maybe even justified" - I'm setting the whole */
+/* Pod in adjust @Break, and making sure that verbatim and command */
+/* paragraphs don't get adjusted. So no special requirements here, it */
+/* should all happen without any explicit tokens, given that I've set */
+/* the Pod language up to simply echo any characters (suitably quoted if */
+/* necessary in Lout) that don't match anything else. */
+/* */
+/*****************************************************************************/
+
+/*****************************************************************************/
+/* */
+/* Pod interior sequences (recursive) */
+/* */
+/* I<text> Italicize text */
+/* B<text> Embolden text */
+/* S<text> Text containing non-break spaces */
+/* C<code> Code "render in typewriter font, or ..." */
+/* */
+/* Alternatively, instead of "<" .. ">" we may use "<< " .. " >>", or */
+/* "<<< " .. " >>>", etc. (Note the whitespace.) */
+/* */
+/*****************************************************************************/
+
+#define RecursiveToken(str, command) /* Pod recursive token */ \
+{ \
+ str, /* name used for debugging only */ \
+ PRINT_NODELIMS_INNER, /* recursively format the inside */ \
+ command, /* Lout command for formatting this */ \
+ "", "", /* no alternate command; no following */ \
+ FALSE, /* token not just start of line */ \
+ { str }, /* token begins with this */ \
+ { "<", "<< ", "<<< ", "<<<< " }, /* start2 */ \
+ { ">", " >>", " >>>", " >>>>" }, /* end2 */ \
+ AllCharacters, /* anything inside (in fact, not used)*/ \
+ "", "", /* no escape character */ \
+ "", "", /* no inner escape; no end inner esc */ \
+ "", /* will use end2 here */ \
+ FALSE, /* end not have to be at line start */ \
+ FALSE, /* don't end delimiter twice to stop */ \
}
-TOKEN HashToken = FixedToken("#", "@O");
-TOKEN ExclamationToken = FixedToken("!", "@O");
-TOKEN PercentToken = FixedToken("%", "@O");
-TOKEN HatToken = FixedToken("^", "@O");
-TOKEN AmpersandToken = FixedToken("&", "@O");
-TOKEN StarToken = FixedToken("*", "@ST");
-TOKEN SlashToken = FixedToken("/", "@O");
-TOKEN ArrowToken = FixedToken("->", "arrowright @A @O");
-TOKEN BackSlashToken = FixedToken("\\", "@O");
-TOKEN LeftParenToken = FixedToken("(", "@O");
-TOKEN RightParenToken = FixedToken(")", "@O");
-TOKEN MinusToken = FixedToken("-", "@M");
-TOKEN PlusToken = FixedToken("+", "plus @A @O");
-TOKEN EqualToken = FixedToken("=", "equal @A @O");
-TOKEN LeftBraceToken = FixedToken("{", "@O");
-TOKEN RightBraceToken = FixedToken("}", "@O");
-TOKEN BarToken = FixedToken("|", "@O");
-TOKEN CircumToken = FixedToken("~", "@O");
-TOKEN LeftBracketToken = FixedToken("[", "@O");
-TOKEN RightBracketToken = FixedToken("]", "@O");
-TOKEN SemicolonToken = FixedToken(";", "@O");
-TOKEN ColonToken = FixedToken(":", "@O");
-TOKEN LessToken = FixedToken("<", "less @A @O");
-TOKEN GreaterToken = FixedToken(">", "greater @A @O");
-TOKEN QuestionToken = FixedToken("?", "@O");
-TOKEN CommaToken = FixedToken(",", "@O");
-TOKEN DotToken = FixedToken(".", "@O");
-TOKEN EiffelDotToken = FixedToken(".", "@ED");
-TOKEN LessEqualToken = FixedToken("<=", "lessequal @A @O");
-TOKEN GreaterEqualToken = FixedToken(">=", "greaterequal @A @O");
-TOKEN CNotEqualToken = FixedToken("!=", "notequal @A @O");
-TOKEN EiffelNotEqualToken = FixedToken("/=", "notequal @A @O");
-TOKEN BlueNotEqualToken = FixedToken("<>", "notequal @A @O");
-TOKEN AssignToken = FixedToken(":=", "@O");
-TOKEN QuestionAssignToken = FixedToken("?=", "@O");
-TOKEN DollarToken = FixedToken("$", "@O");
-TOKEN ImpliesToken = FixedToken("=>", "implies @A @O");
+TOKEN PodItalicToken = RecursiveToken("I", "@PFI");
+TOKEN PodBoldToken = RecursiveToken("B", "@PFB");
+TOKEN PodNoBreakToken = RecursiveToken("S", "@OneCol");
+TOKEN PodCodeToken = RecursiveToken("C", "@PFC");
+
+/*****************************************************************************/
+/* */
+/* Pod interior sequences (non-recursive) */
+/* */
+/* L<name> A link; these have an internal format I've not looked at yet. */
+/* F<file> File name */
+/* X<index> Index */
+/* Z<> A zero-width space */
+/* */
+/* Alternatively, instead of "<" .. ">" we may use "<< " .. " >>", or */
+/* "<<< " .. " >>>", etc. (Note the whitespace.) */
+/* */
+/*****************************************************************************/
+
+#define InteriorToken(str, command, style) /* Pod delimited token */ \
+{ \
+ str, /* name used for debugging only */ \
+ style, /* print this token unquoted */ \
+ command, /* Lout command for formatting this */ \
+ "", "", /* no alternate command; no following */ \
+ FALSE, /* token not just start of line */ \
+ { str }, /* token begins with this */ \
+ { "<", "<< ", "<<< ", "<<<< " }, /* start2 */ \
+ { ">", " >>", " >>>", " >>>>" }, /* end2 */ \
+ AllCharacters, /* anything inside */ \
+ "", "", /* no escape character */ \
+ "", "", /* no inner escape; no end inner esc */ \
+ "", /* will use end2 here */ \
+ FALSE, /* end not have to be at line start */ \
+ FALSE, /* don't end delimiter twice to stop */ \
+}
+
+TOKEN PodFileToken = InteriorToken("F", "@PFF", PRINT_NODELIMS_QUOTED);
+TOKEN PodLinkToken = InteriorToken("L", "@PFL", PRINT_NODELIMS_QUOTED);
+TOKEN PodIndexToken = InteriorToken("X", "@PFX", PRINT_NODELIMS_QUOTED);
+TOKEN PodZeroToken = InteriorToken("Z", "", PRINT_COMMAND_ONLY);
+
+/*****************************************************************************/
+/* */
+/* Pod interior sequences (escape sequences) */
+/* */
+/* E<escape> A named character ("optional except in other interior */
+/* sequences and when preceded by a capital letter") */
+/* */
+/* E<lt> A literal < */
+/* E<gt> A literal > */
+/* E<sol> A literal / */
+/* E<verbar> A literal | */
+/* E<n> Character number n (probably in ASCII) */
+/* E<html> Some non-numeric HTML entity, such as E<Agrave> */
+/* */
+/* PodNumCharToken not tested. */
+/* */
+/*****************************************************************************/
+
+TOKEN PodNumCharToken = {
+ "E<>", /* used by error messages involving this token */
+ PRINT_NODELIMS_UNQUOTED,/* we're doing these manually, since they're funny*/
+ "\"\\", /* precede character number with \" */
+ "", /* no alternate command */
+ "\"", /* follow character number with " */
+ FALSE, /* token allowed at start of line only */
+ { "E<" }, /* command begins with this */
+ { NULL }, /* no start2 needed */
+ { NULL }, /* so no end2 either */
+ "0123456789", /* digits inside */
+ "", "", /* no escape character */
+ "", "", /* no "inner escapes" */
+ ">", /* token will end with > character */
+ FALSE, /* end delimiter does not have to be at line start */
+ FALSE, /* don't need to see end delimiter twice to stop */
+};
+
+#define PodEscapeToken(str, command) /* Pod delimited token */ \
+{ \
+ str, /* name used for debugging only */ \
+ PRINT_COMMAND_ONLY, /* print this token unquoted */ \
+ command, /* Lout command for formatting this */ \
+ "", /* no alternate command */ \
+ "", /* no following command */ \
+ FALSE, /* token not just start of line */ \
+ { str }, /* token begins with this */ \
+ { NULL }, /* start2 */ \
+ { NULL }, /* end2 */ \
+ "", /* nothing inside */ \
+ "", "", /* no escape character */ \
+ "", "", /* no inner escape either */ \
+ "", /* no ending delimiter except end2 */ \
+ FALSE, /* end not have to be at line start */ \
+ FALSE, /* don't end delimiter twice to stop */ \
+}
+
+TOKEN PodLessThanToken = PodEscapeToken("E<lt>", "<");
+TOKEN PodGreaterThanToken = PodEscapeToken("E<gt>", ">");
+TOKEN PodSlashToken = PodEscapeToken("E<sol>", "/");
+TOKEN PodVerbarToken = PodEscapeToken("E<verbar>", "|");
+
+
+/*****************************************************************************/
+/* */
+/* Mark Summerfield writes: */
+/* */
+/* The following table (and most of its comments) is copied from Gisle Aas */
+/* HTML::Entities.pm module with the plain text characters being replaced */
+/* by their Lout equivalents and the HTML entities with their pod */
+/* equivalents. */
+/* */
+/*****************************************************************************/
+
+/* Some normal chars that have special meaning in SGML context */
+TOKEN PE00 = PodEscapeToken("E<amp>", "&");
+/* already done above TOKEN PE01 = PodEscapeToken("E<gt>", ">"); */
+/* already done above TOKEN PE02 = PodEscapeToken("E<lt>", "<"); */
+TOKEN PE03 = PodEscapeToken("E<quot>", "\"\\\"\"");
+
+/* PUBLIC ISO 8879-1986//ENTITIES Added Latin 1//EN//HTML */
+TOKEN PE04 = PodEscapeToken("E<AElig>", "{@Char AE}");
+TOKEN PE05 = PodEscapeToken("E<Aacute>", "{@Char Aacute}");
+TOKEN PE06 = PodEscapeToken("E<Acirc>", "{@Char Acircumflex}");
+TOKEN PE07 = PodEscapeToken("E<Agrave>", "{@Char Agrave}");
+TOKEN PE08 = PodEscapeToken("E<Aring>", "{@Char Aring}");
+TOKEN PE09 = PodEscapeToken("E<Atilde>", "{@Char Atilde}");
+TOKEN PE10 = PodEscapeToken("E<Auml>", "{@Char Adieresis}");
+TOKEN PE11 = PodEscapeToken("E<Ccedil>", "{@Char Ccedilla}");
+TOKEN PE12 = PodEscapeToken("E<ETH>", "{@Char Eth}");
+TOKEN PE13 = PodEscapeToken("E<Eacute>", "{@Char Eacute}");
+TOKEN PE14 = PodEscapeToken("E<Ecirc>", "{@Char Ecircumflex}");
+TOKEN PE15 = PodEscapeToken("E<Egrave>", "{@Char Egrave}");
+TOKEN PE16 = PodEscapeToken("E<Euml>", "{@Char Edieresis}");
+TOKEN PE17 = PodEscapeToken("E<Iacute>", "{@Char Iacute}");
+TOKEN PE18 = PodEscapeToken("E<Icirc>", "{@Char Icircumflex}");
+TOKEN PE19 = PodEscapeToken("E<Igrave>", "{@Char Igrave}");
+TOKEN PE20 = PodEscapeToken("E<Iuml>", "{@Char Idieresis}");
+TOKEN PE21 = PodEscapeToken("E<Ntilde>", "{@Char Ntilde}");
+TOKEN PE22 = PodEscapeToken("E<Oacute>", "{@Char Oacute}");
+TOKEN PE23 = PodEscapeToken("E<Ocirc>", "{@Char Ocircumflex}");
+TOKEN PE24 = PodEscapeToken("E<Ograve>", "{@Char Ograve}");
+TOKEN PE25 = PodEscapeToken("E<Oslash>", "{@Char Oslash}");
+TOKEN PE26 = PodEscapeToken("E<Otilde>", "{@Char Otilde}");
+TOKEN PE27 = PodEscapeToken("E<Ouml>", "{@Char Odieresis}");
+TOKEN PE28 = PodEscapeToken("E<THORN>", "{@Char Thorn}");
+TOKEN PE29 = PodEscapeToken("E<Uacute>", "{@Char Uacute}");
+TOKEN PE30 = PodEscapeToken("E<Ucirc>", "{@Char Ucircumflex}");
+TOKEN PE31 = PodEscapeToken("E<Ugrave>", "{@Char Ugrave}");
+TOKEN PE32 = PodEscapeToken("E<Uuml>", "{@Char Udieresis}");
+TOKEN PE33 = PodEscapeToken("E<Yacute>", "{@Char Yacute}");
+TOKEN PE34 = PodEscapeToken("E<aacute>", "{@Char aacute}");
+TOKEN PE35 = PodEscapeToken("E<acirc>", "{@Char acircumflex}");
+TOKEN PE36 = PodEscapeToken("E<aelig>", "{@Char ae}");
+TOKEN PE37 = PodEscapeToken("E<agrave>", "{@Char agrave}");
+TOKEN PE38 = PodEscapeToken("E<aring>", "{@Char aring}");
+TOKEN PE39 = PodEscapeToken("E<atilde>", "{@Char atilde}");
+TOKEN PE40 = PodEscapeToken("E<auml>", "{@Char adieresis}");
+TOKEN PE41 = PodEscapeToken("E<ccedil>", "{@Char ccedilla}");
+TOKEN PE42 = PodEscapeToken("E<eacute>", "{@Char eacute}");
+TOKEN PE43 = PodEscapeToken("E<ecirc>", "{@Char ecircumflex}");
+TOKEN PE44 = PodEscapeToken("E<egrave>", "{@Char egrave}");
+TOKEN PE45 = PodEscapeToken("E<eth>", "{@Char eth}");
+TOKEN PE46 = PodEscapeToken("E<euml>", "{@Char edieresis}");
+TOKEN PE47 = PodEscapeToken("E<iacute>", "{@Char iacute}");
+TOKEN PE48 = PodEscapeToken("E<icirc>", "{@Char icircumflex}");
+TOKEN PE49 = PodEscapeToken("E<igrave>", "{@Char igrave}");
+TOKEN PE50 = PodEscapeToken("E<iuml>", "{@Char idieresis}");
+TOKEN PE51 = PodEscapeToken("E<ntilde>", "{@Char ntilde}");
+TOKEN PE52 = PodEscapeToken("E<oacute>", "{@Char oacute}");
+TOKEN PE53 = PodEscapeToken("E<ocirc>", "{@Char ocircumflex}");
+TOKEN PE54 = PodEscapeToken("E<ograve>", "{@Char ograve}");
+TOKEN PE55 = PodEscapeToken("E<oslash>", "{@Char oslash}");
+TOKEN PE56 = PodEscapeToken("E<otilde>", "{@Char otilde}");
+TOKEN PE57 = PodEscapeToken("E<ouml>", "{@Char odieresis}");
+TOKEN PE58 = PodEscapeToken("E<szlig>", "{@Char germandbls}");
+TOKEN PE59 = PodEscapeToken("E<thorn>", "{@Char thorn}");
+TOKEN PE60 = PodEscapeToken("E<uacute>", "{@Char uacute}");
+TOKEN PE61 = PodEscapeToken("E<ucirc>", "{@Char ucircumflex}");
+TOKEN PE62 = PodEscapeToken("E<ugrave>", "{@Char ugrave}");
+TOKEN PE63 = PodEscapeToken("E<uuml>", "{@Char udieresis}");
+TOKEN PE64 = PodEscapeToken("E<yacute>", "{@Char yacute}");
+TOKEN PE65 = PodEscapeToken("E<yuml>", "{@Char ydieresis}");
+
+/* Some extra Latin 1 chars that are listed in the HTML3.2 draft 1996/05/21 */
+TOKEN PE66 = PodEscapeToken("E<copy>", "{@CopyRight}");
+TOKEN PE67 = PodEscapeToken("E<reg>", "{@Register}");
+TOKEN PE68 = PodEscapeToken("E<nbsp>", "~");
+
+/* Additional ISO-8859/1 entities listed in rfc1866 (section 14) */
+TOKEN PE69 = PodEscapeToken("E<iexcl>", "{@Char exclamdown}");
+TOKEN PE70 = PodEscapeToken("E<cent>", "{@Char cent}");
+TOKEN PE71 = PodEscapeToken("E<pound>", "{@Sterling}");
+TOKEN PE72 = PodEscapeToken("E<curren>", "{@Char currency}");
+TOKEN PE73 = PodEscapeToken("E<yen>", "{@Yen}");
+TOKEN PE74 = PodEscapeToken("E<brvbar>", "{@Char bar}");
+TOKEN PE75 = PodEscapeToken("E<sect>", "{@SectSym}");
+TOKEN PE76 = PodEscapeToken("E<uml>", "{@Char dieresis}");
+TOKEN PE77 = PodEscapeToken("E<ordf>", "{@Char ordfeminine}");
+TOKEN PE78 = PodEscapeToken("E<laquo>", "{@Char guillemotleft}");
+TOKEN PE79 = PodEscapeToken("E<not>", "{@Char logicalnot}");
+TOKEN PE80 = PodEscapeToken("E<shy>", "{@Char hyphen}");
+TOKEN PE81 = PodEscapeToken("E<macr>", "{@Char macron}");
+TOKEN PE82 = PodEscapeToken("E<deg>", "{@Char degree}");
+TOKEN PE83 = PodEscapeToken("E<plusmn>", "{@Char plusminus}");
+TOKEN PE84 = PodEscapeToken("E<sup1>", "{@Char onesuperior}");
+TOKEN PE85 = PodEscapeToken("E<sup2>", "{@Char twosuperior}");
+TOKEN PE86 = PodEscapeToken("E<sup3>", "{@Char threesuperior}");
+TOKEN PE87 = PodEscapeToken("E<acute>", "{@Char acute}");
+TOKEN PE88 = PodEscapeToken("E<micro>", "{@Char mu}");
+TOKEN PE89 = PodEscapeToken("E<para>", "{@ParSym}");
+TOKEN PE90 = PodEscapeToken("E<middot>", "{@Char periodcentered}");
+TOKEN PE91 = PodEscapeToken("E<cedil>", "{@Char cedilla}");
+TOKEN PE92 = PodEscapeToken("E<ordm>", "{@Char ordmasculine}");
+TOKEN PE93 = PodEscapeToken("E<raquo>", "{@Char guillemotright}");
+TOKEN PE94 = PodEscapeToken("E<frac14>", "{@Char onequarter}");
+TOKEN PE95 = PodEscapeToken("E<frac12>", "{@Char onehalf}");
+TOKEN PE96 = PodEscapeToken("E<frac34>", "{@Char threequarters}");
+TOKEN PE97 = PodEscapeToken("E<iquest>", "{@Char questiondown}");
+TOKEN PE98 = PodEscapeToken("E<times>", "{@Multiply}");
+TOKEN PE99 = PodEscapeToken("E<divide>", "{@Divide}");
+
+
/*****************************************************************************/
/* */
/* LANGUAGE - put your language declarations in this section. */
/* */
+/* The field names and their meanings are: */
+/* */
+/* names Set of alternative names for this languages */
+/* setup_file The default Lout setup file (e.g. "cprint", "eiffel") */
+/* lang_sym The symbol for the language (e.g. "@CP", "@Eiffel") */
+/* no_match What to do if something fails to match (see below) */
+/* tokens Set of all tokens of this language */
+/* keywords Set of all keywords for this language */
+/* */
+/* Acceptable values for no_match are: */
+/* */
+/* NO_MATCH_ERROR Generate an error message and skip the character. */
+/* */
+/* NO_MATCH_PRINT Print the character in a way that is Lout-safe; that */
+/* is, mostly raw but in quotes for "/", "@" etc., and */
+/* handling tabs and newlines appropriately. */
+/* */
/*****************************************************************************/
+#define NO_MATCH_ERROR 1
+#define NO_MATCH_PRINT 2
+#define NO_LANGUAGE ((LANGUAGE *) NULL)
typedef struct lang_rec {
char *names[MAX_ARRAY_LENGTH];
- char *default_style;
+ char *setup_file;
+ char *lang_sym;
+ int no_match;
TOKEN *tokens[MAX_ARRAY_LENGTH];
char *keywords[MAX_ARRAY_LENGTH];
} LANGUAGE;
+
LANGUAGE CLanguage = {
{ "C", "c", "C++", "c++" },
- "fixed",
+ "cprint", "@CP",
+ NO_MATCH_ERROR,
{
&CStringToken, &CCharacterToken, &IdentifierToken, &NumberToken,
&CCommentToken, &CCommentEscapeToken,
@@ -395,19 +1975,26 @@ LANGUAGE CLanguage = {
},
{ "asm", "auto", "break", "case", "catch", "char", "class", "const",
- "continue", "default", "delete", "do", "double", "else", "enum",
- "extern", "float", "for", "friend", "goto", "if", "inline", "int",
- "long", "new", "operator", "private", "protected", "public", "register",
- "return", "short", "signed", "sizeof", "static", "struct", "switch",
- "template", "this", "throw", "try", "typedef", "union", "unsigned",
- "virtual", "void", "volatile", "while",
+ "continue", "default", "delete", "do", "double", "else", "enum", "extern",
+ "float", "for", "friend", "goto", "if", "inline", "int", "long", "new",
+ "operator", "private", "protected", "public", "register", "return",
+ "short", "signed", "sizeof", "static", "struct", "switch", "template",
+ "this", "throw", "try", "typedef", "union", "unsigned", "virtual",
+ "void", "volatile", "while",
}
};
+
+/*****************************************************************************/
+/* */
+/* Eiffel and Blue */
+/* */
+/*****************************************************************************/
LANGUAGE EiffelLanguage = {
{ "Eiffel", "eiffel" },
- "varying",
+ "eiffel", "@Eiffel",
+ NO_MATCH_ERROR,
{
&EiffelStringToken, &EiffelCharacterToken, &IdentifierToken, &NumberToken,
&EiffelCommentToken, &EiffelCommentEscapeToken,
@@ -418,22 +2005,21 @@ LANGUAGE EiffelLanguage = {
&MinusToken, &DollarToken, &HatToken, &SlashToken, &BackSlashToken,
&LessToken, &GreaterToken, &LessEqualToken, &GreaterEqualToken
},
-
{ "alias", "all", "and", "as", "check", "class", "creation", "debug",
- "deferred", "do", "else", "elseif", "end", "ensure", "expanded",
- "export", "external", "false", "feature", "from", "frozen", "if",
- "implies", "indexing", "infix", "inherit", "inspect", "invariant",
- "is", "like", "local", "loop", "obsolete", "old", "once", "or",
- "prefix", "redefine", "rename", "require", "rescue", "retry", "select",
- "separate", "strip", "then", "true", "undefine", "unique", "until",
- "variant", "when", "xor", "not", "interface"
+ "deferred", "do", "else", "elseif", "end", "ensure", "expanded", "export",
+ "external", "false", "feature", "from", "frozen", "if", "implies",
+ "indexing", "infix", "inherit", "inspect", "invariant", "is", "like",
+ "local", "loop", "obsolete", "old", "once", "or", "prefix", "redefine",
+ "rename", "require", "rescue", "retry", "select", "separate", "strip",
+ "then", "true", "undefine", "unique", "until", "variant", "when", "xor",
+ "not", "interface"
}
};
-
LANGUAGE BlueLanguage = {
{ "Blue", "blue" },
- "varying",
+ "blue", "@Blue",
+ NO_MATCH_ERROR,
{
&CStringToken, &IdentifierToken, &NumberToken,
&BlueCommentToken, &BlueCommentEscapeToken,
@@ -443,30 +2029,246 @@ LANGUAGE BlueLanguage = {
&EqualToken, &BlueNotEqualToken, &LeftBraceToken, &RightBraceToken,
&PlusToken, &MinusToken, &StarToken, &SlashToken, &HatToken,
&LessEqualToken, &GreaterEqualToken
+ },
+ { "and", "assert", "builtin", "case", "class", "const", "create", "creation",
+ "deferred", "div", "do", "else", "elseif", "end", "Enumeration",
+ "enumeration", "exit", "if", "in", "interface", "internal", "invariant",
+ "is", "loop", "manifest", "mod", "not", "of", "old", "on", "or", "post",
+ "pre", "redefined", "return", "routines", "super", "then", "uses", "var"
+ }
+};
+
+/*****************************************************************************/
+/* */
+/* Perl and Pod */
+/* */
+/*****************************************************************************/
+
+LANGUAGE PerlLanguage = {
+ { "Perl", "perl", },
+ "perl", "@Perl",
+ NO_MATCH_ERROR,
+ {
+ &PerlSingleQuoteStringToken, &PerlDoubleQuoteStringToken,
+ &PerlBackQuoteStringToken, &PerlQTypeStringToken, &PerlSTypeStringToken,
+ &PerlRegExpLPar, &PerlRegExpEq, &PerlRegExpMatch, &PerlRegExpNoMatch,
+ &PerlRegExpSplit, &PerlRegExpIf, &PerlRegExpNot, &PerlRegExpUnless,
+ &PerlRegExpFor, &PerlRegExpForEach, &PerlRegExpWhile,
+ &PerlRegExpStartLineToken,
+ &HereEOTuq, &HereEOTdq, &HereEOTfq, &HereEOTbq,
+ &HereEOFuq, &HereEOFdq, &HereEOFfq, &HereEOFbq,
+ &HereENDuq, &HereENDdq, &HereENDfq, &HereENDbq,
+ &HereBLAuq, &HereBLAdq, &HereBLAfq, &HereBLAbq,
+ &PerlIdentifierToken, &PerlSpecialIdentifierToken,
+ &PerlLiteralNumberToken, &PerlHexNumberToken,
+ &PerlCommentToken, &PerlCommentEscapeToken, &PerlPodToken,
+ &ExclamationToken, &PercentToken, &HatToken, &AmpersandToken,
+ &StarToken, &SlashToken, &ArrowToken, &BackSlashToken,
+ &LeftParenToken, &RightParenToken, &MinusToken, &PlusToken,
+ &LeftBraceToken, &RightBraceToken, &BarToken, &CircumToken,
+ &LeftBracketToken, &RightBracketToken, &SemicolonToken, &ColonToken,
+ &LessToken, &GreaterToken, &QuestionToken, &CommaToken, &DotToken,
+ &LessEqualToken, &GreaterEqualToken, &CNotEqualToken,
+ &PerlIncrementToken, &PerlDecrementToken, &PerlExponentiateToken,
+ &PerlMatchToken, &PerlNotMatchToken,
+ &PerlEqualToken, &PerlAssignToken, &PerlBitLeftShiftToken,
+ &PerlBitRightShiftToken, &PerlSpaceshipToken,
+ &PerlAndToken, &PerlOrToken, &PerlRange2Token, &PerlRange3Token,
+ &PerlFileTestrToken, &PerlFileTestwToken, &PerlFileTestxToken,
+ &PerlFileTestoToken, &PerlFileTestRToken, &PerlFileTestWToken,
+ &PerlFileTestXToken, &PerlFileTestOToken, &PerlFileTesteToken,
+ &PerlFileTestzToken, &PerlFileTestsToken, &PerlFileTestfToken,
+ &PerlFileTestdToken, &PerlFileTestlToken, &PerlFileTestpToken,
+ &PerlFileTestSToken, &PerlFileTestbToken, &PerlFileTestcToken,
+ &PerlFileTesttToken, &PerlFileTestuToken, &PerlFileTestgToken,
+ &PerlFileTestkToken, &PerlFileTestTToken, &PerlFileTestBToken,
+ &PerlFileTestMToken, &PerlFileTestAToken, &PerlFileTestCToken,
},
- { "and", "assert", "builtin", "case", "class", "const", "create",
- "creation", "deferred", "div", "do", "else", "elseif", "end",
- "Enumeration", "enumeration", "exit", "if", "in", "interface",
- "internal", "invariant", "is", "loop", "manifest", "mod", "not",
- "of", "old", "on", "or", "post", "pre", "redefined", "return",
- "routines", "super", "then", "uses", "var"
+ {
+ /* Built-ins taken from Programming Perl 2nd Ed. */
+ "abs", "accept", "alarm", "atan2",
+ "bind", "binmode", "bless",
+ "caller", "chdir", "chmod", "chomp", "chop", "chown", "chr", "chroot",
+ "close", "closedir", "connect", "continue", "cos", "crypt",
+ "dbmclose", "dbmopen", "defined", "delete", "die", "do", "dump",
+ "each", "endgrent", "endhostent", "endnetent", "endprotoent",
+ "endpwent", "endservent", "eof", "eval", "exec", "exists", "exit",
+ "exp",
+ "fcntl", "fileno", "flock", "fork", "format", "formline",
+ "getc", "getgrent", "getgrgid", "getgrnam", "gethostbyaddr",
+ "gethostbyname", "gethostent", "getlogin", "getnetbyaddr",
+ "getnetbyname", "getnetent", "getpeername", "getpgrp", "getppid",
+ "getpriority", "getprotobyname", "getprotobynumber", "getprotoent",
+ "getpwent", "getpwnam", "getpwuid", "getservbyname", "getservbyport",
+ "getservent", "getsockname", "getsockopt", "glob", "gmtime", "goto",
+ "grep",
+ "hex",
+ "import", "index", "int", "ioctl",
+ "join",
+ "keys", "kill",
+ "last", "lc", "lcfirst", "length", "link", "listen", "local",
+ "localtime", "log", "lstat",
+ "map", "mkdir", "msgctl", "msgget", "msgrcv", "msgsnd", "my",
+ "next", "no",
+ "oct", "open", "opendir", "ord",
+ "pack", "package", "pipe", "pop", "pos", "print", "printf", "push",
+ "quotemeta",
+ "rand", "read", "readdir", "readlink", "recv", "redo", "ref",
+ "rename", "require", "reset", "return", "reverse", "rewinddir",
+ "rindex", "rmdir",
+ "scalar", "seek", "seekdir", "select", "semctl", "semget", "semop",
+ "send", "setgrent", "sethostent", "setnetent", "setpgrp",
+ "setpriority", "setprotoent", "setpwent", "setservent",
+ "setsockopt", "shift", "shmctl", "shmget", "shmread", "shmwrite",
+ "shutdown", "sin", "sleep", "socket", "socketpair", "sort",
+ "splice", "split", "sprintf", "sqrt", "srand", "stat", "study",
+ "sub", "substr", "symlink", "syscall", "sysopen", "sysread", "sysseek",
+ "system", "syswrite",
+ "tell", "telldir", "tie", "tied", "time", "times", "truncate",
+ "uc", "ucfirst", "umask", "undef", "unlink", "unpack", "unshift",
+ "untie", "use", "utime",
+ "values", "vec",
+ "wait", "waitpid", "wantarray", "warn", "write",
+
+ /* from later versions of Perl (excluding experimental thread stuff) */
+ "our", "prototype", "readline", "readpipe",
+
+ /* operators */
+ "lt", "gt", "eq", "ne", "cmp", "le", "ge",
+
+ /* Perl special variables */
+ /* NB special variables that begin $^, e.g. $^D can also be written as */
+ /* dollar control D (yes literal control D) -- but suggest we ignore */
+ "$_", "$ARG",
+ "$.", "$INPUT_LINE_SEPARATOR", "$NR",
+ "$/", "$INPUT_RECORD_SEPARATOR", "$RS",
+ "$,", "$OUTPUT_FIELD_SEPARATOR", "$OFS",
+ "$\\", "$OUTPUT_RECORD_SEPARATOR", "$ORS",
+ "$\"", "$LIST_SEPARATOR",
+ "$;", "$SUBSCRIPT_SEPARATOR", "$SUBSEP",
+ "$^L", "$FORMAT_FORMFEED",
+ "$:", "$FORMAT_LINE_BREAK_CHARACTERS",
+ "$^A", "$ACCUMULATOR",
+ "$#", "$OFMT",
+ "$?", "$CHILD_ERROR",
+ "$!", "$OS_ERROR", "$ERRNO",
+ "$@", "$EVAL_ERROR",
+ "$$", "$PROCESS_ID", "$PID",
+ "$<", "$REAL_USER_ID", "$UID",
+ "$>", "$EFFECTIVE_USER_ID", "$EUID",
+ "$(", "$REAL_GROUP_ID", "$GID",
+ "$)", "$EFFECTIVE_GROUP_ID", "$EGID",
+ "$0", /* dollar zero */ "$PROGRAM_NAME",
+ "$[", /* deprecated */
+ "$]", "$PERL_VERSION",
+ "$^D", "$DEBUGGING",
+ "$^E", "$EXTENDED_OS_ERROR",
+ "$^F", "$SYSTEM_FD_MAX",
+ "$^H",
+ "$^I", "$INPLACE_EDIT",
+ "$^M",
+ "$^O", "$OSNAME",
+ "$^P", "$PERLDB",
+ "$^T", "$BASETIME",
+ "$^W", "$WARNING",
+ "$^X", "$EXECUTABLE_NAME",
+ "$ARGV",
+ "@ARGV", "@INC", "@F", "%INC", "%ENV", "%SIG",
+ "ARGV", "STDERR", "STDIN", "STDOUT", "DATA"
+ "$&", "$MATCH",
+ "$`", "$PREMATCH",
+ "$'", "$POSTMATCH",
+ "$+", "$LAST_PAREN_MATCH",
+ "$|", "$OUTPUT_AUTOFLUSH",
+ "$%", "$FORMAT_PAGE_NUMBER",
+ "$=", "$FORMAT_LINES_PER_PAGE",
+ "$-", "$FORMAT_LINES_LEFT",
+ "$~", "$FORMAT_NAME",
+ "$^", "$FORMAT_TOP_NAME",
+
+ /* Perl special constants */
+ "__END__", "__FILE__", "__LINE__", "__PACKAGE__",
+
+ /* Perl regex variables - first 9 only */
+ "$1", "$2", "$3", "$4", "$5", "$6", "$7", "$8", "$9",
+
+ /* Perl pragmas */
+ "attrs", "autouse", "base", "blib", "constant", "diagnostics", "fields",
+ "integer", "less", "lib", "locale", "ops", "overload", "re", "sigtrap",
+ "strict", "subs", "vars",
+
+ /* Perl textual operators */
+ "and", "or", "xor", "not",
+
+ /* the x keyword */
+ "x",
+
+ /* Perl control structures */
+ "if", "elsif", /* yes one e */ "else", "unless",
+ "while", "for", "foreach", "continue", "until",
}
};
+LANGUAGE PodLanguage = {
+ { "Pod", "pod", "POD" },
+ "pod", "@Pod",
+ NO_MATCH_PRINT,
+ {
+ &PodVerbatimLineToken, &PodEmptyLineToken, &PodIgnoreToken,
+ &PodHeading1Token, &PodHeading2Token,
+ &PodOverToken, &PodItemToken, &PodBackToken,
+ &PodForToken, &PodBeginToken, &PodBeginLoutToken,
+ &PodItalicToken, &PodBoldToken, &PodCodeToken, &PodFileToken,
+ &PodNoBreakToken, &PodLinkToken, &PodIndexToken, &PodZeroToken,
+ &PodLessThanToken, &PodGreaterThanToken, &PodSlashToken,
+ &PodVerbarToken,
+ &PE00, /* &PE01, &PE02, */ &PE03, &PE04, &PE05, &PE06, &PE07, &PE08, &PE09,
+ &PE10, &PE11, &PE12, &PE13, &PE14, &PE15, &PE16, &PE17, &PE18, &PE19,
+ &PE20, &PE21, &PE22, &PE23, &PE24, &PE25, &PE26, &PE27, &PE28, &PE29,
+ &PE30, &PE31, &PE32, &PE33, &PE34, &PE35, &PE36, &PE37, &PE38, &PE39,
+ &PE40, &PE41, &PE42, &PE43, &PE44, &PE45, &PE46, &PE47, &PE48, &PE49,
+ &PE50, &PE51, &PE52, &PE53, &PE54, &PE55, &PE56, &PE57, &PE58, &PE59,
+ &PE60, &PE61, &PE62, &PE63, &PE64, &PE65, &PE66, &PE67, &PE68, &PE69,
+ &PE70, &PE71, &PE72, &PE73, &PE74, &PE75, &PE76, &PE77, &PE78, &PE79,
+ &PE80, &PE81, &PE82, &PE83, &PE84, &PE85, &PE86, &PE87, &PE88, &PE89,
+ &PE90, &PE91, &PE92, &PE93, &PE94, &PE95, &PE96, &PE97, &PE98, &PE99,
+ &PodNumCharToken,
+ },
+
+ { NULL },
+};
+
+
+/*****************************************************************************/
+/* */
+/* The "languages" variable - add your language to this list */
+/* */
+/*****************************************************************************/
+
LANGUAGE *languages[] = {
& CLanguage,
& EiffelLanguage,
& BlueLanguage,
+ & PerlLanguage,
+ & PodLanguage,
};
+
+
+
+
+/*****************************************************************************/
+/*****************************************************************************/
+/*****************************************************************************/
+/*** ***/
+/*** If you are adding a new language, you don't need to change anything ***/
+/*** below this point. Just repeating: don't change anything below here. ***/
+/*** ***/
+/*****************************************************************************/
/*****************************************************************************/
-/* */
-/* If you are adding a new language, you don't need to change anything */
-/* below this point. Just repeating: don't change anything below here. */
-/* */
/*****************************************************************************/
@@ -483,18 +2285,9 @@ LANGUAGE *languages[] = {
#define DEBUG_EMIT 0
#define DEBUG_MAIN 0
-#define PRG2LOUT_VERSION "prg2lout Version 1.0 (February 2000)"
-#define BOOLEAN unsigned
-#define FALSE 0
-#define TRUE 1
+#define PRG2LOUT_VERSION "prg2lout Version 2.0 (April 2000)"
#define MAX_LINE 1024
-/* print styles */
-#define NO_STYLE 0
-#define FIXED_STYLE 1
-#define VARYING_STYLE 2
-#define SYMBOL_STYLE 3
-
static char file_name[MAX_LINE]; /* current input file name */
static char curr_line[MAX_LINE]; /* current input line */
static int line_num; /* current input line number */
@@ -502,12 +2295,13 @@ static int line_pos; /* current input column number */
static BOOLEAN raw_seen; /* TRUE if -r (raw mode) */
static BOOLEAN headers_option; /* TRUE if no -n option (headers) */
-static int style_option; /* value of -p option, or NO_STYLE */
+static char *style_option; /* value of -p option, else null */
static char *font_option; /* value of -f option, else null */
static char *size_option; /* value of -s option, else null */
static char *line_option; /* value of -v option, else null */
static char *tabin_option; /* value of -t option, else null */
static char *tabout_option; /* value of -T option, else null */
+static char *setup_option; /* value of -S option, else null */
static char *language_option; /* value of -l option, else null */
static BOOLEAN tab_by_spacing; /* TRUE if using space chars to tab */
@@ -515,9 +2309,22 @@ static int tab_in; /* tab interval, value of -t option */
static float tab_out; /* tab interval width (-T option) */
static char tab_unit; /* unit of measurement for tab */
+static FILE *in_fp; /* where input comes from */
+static FILE *out_fp; /* where output goes */
+static FILE *err_fp; /* where error messages go */
+
+
+/*****************************************************************************/
+/* */
+/* char *ErrorHeader() */
+/* */
+/* Returns a string showing the current file, line, and column. */
+/* */
+/*****************************************************************************/
+
char *ErrorHeader()
{ static char buff[MAX_LINE];
- if( line_num == 0 )
+ if( line_num == 0 || line_pos == 0 )
sprintf(buff, "prg2lout");
else if( raw_seen )
sprintf(buff, "prg2lout %d,%d", line_num, line_pos);
@@ -525,6 +2332,16 @@ char *ErrorHeader()
sprintf(buff, "prg2lout %s %d,%d", file_name, line_num, line_pos);
return buff;
}
+
+
+/*****************************************************************************/
+/* */
+/* GetArg(arg, message, null_ok) */
+/* */
+/* Get the next command line argument's value into arg. If there isn't */
+/* one, print an error message and quit unless null_ok is true. */
+/* */
+/*****************************************************************************/
#define GetArg(arg, message, null_ok) \
{ if( strcmp(argv[arg_pos]+2, "") != 0 ) \
@@ -556,9 +2373,84 @@ char *EchoToken(TOKEN *t)
sprintf(buff, "%s", t->name);
return buff;
}
+
+/*****************************************************************************/
+/* */
+/* NextChar() */
+/* */
+/* Move to next character in the input file. This may involve changing */
+/* global variables curr_line, line_num, and line_pos; the new character */
+/* may be found in curr_line[line_pos]. */
+/* */
+/* NextChar does not skip any characters at all. When end of file is */
+/* reached, curr_line[line_pos] contains '\0'. */
+/* */
+/* It is possible for code to read ahead of curr_line[line_pos] up to and */
+/* including the newline character at the end of the line after the line */
+/* we are currently on (thus it is possible to recognize an empty line as */
+/* \n\n), but not beyond, using curr_line[line_pos + i] for i > 0. */
+/* */
+/*****************************************************************************/
+void NextChar()
+{
+ if( curr_line[line_pos] != '\n' )
+ {
+ /* we can carry on with the current line. This will yield '\0' as */
+ /* desired if EOF arrives before the end of the line */
+ line_pos++;
+ }
+ else if( curr_line[line_pos+1] != '\0' )
+ {
+ /* we've already read in the next line; it's at &curr_line[line_pos+1] */
+ strcpy(&curr_line[1], &curr_line[line_pos+1]);
+ line_num++;
+ line_pos = 1;
+ }
+ else
+ {
+ /* we need to read in the new line */
+ line_num++;
+ line_pos = 1;
+ if( fgets(&curr_line[1], MAX_LINE+2, in_fp) == (char *) NULL )
+ curr_line[1] = '\0';
+ }
+ if( DEBUG_NEXTCHAR )
+ fprintf(stderr, "after NextChar, line_num %d, line_pos %d, curr_line %s",
+ line_num, line_pos, &curr_line[1]);
+} /* end NextChar */
+
+/*****************************************************************************/
+/* */
+/* BOOLEAN InputMatches(char *pattern) */
+/* */
+/* Returns TRUE if input starting at curr_line[line_pos] matches pattern. */
+/* To check this we may have to read an extra line or more of input. */
+/* */
+/*****************************************************************************/
+
+BOOLEAN InputMatches(char *pattern)
+{ char *p, *q;
+ for(p = &curr_line[line_pos], q = pattern; *q != '\0'; p++, q++ )
+ {
+ if( *p == '\0' )
+ {
+ /* attempt to read another line of input, since we are off the end */
+ if( fgets(p, MAX_LINE+2-(p - curr_line), in_fp) == (char *) NULL )
+ *p = '\0';
+ }
+ if( *p != *q )
+ break;
+ }
+ if( DEBUG_PREFIXEQ )
+ fprintf(stderr, "InputMatches(%s, %s) returning %s\n",
+ &curr_line[line_pos], pattern, *q == '\0' ? "TRUE" : "FALSE");
+ return (*q == '\0');
+} /* end InputMatches */
+
+
/*****************************************************************************/
/* */
/* TRIE */
@@ -573,6 +2465,7 @@ typedef struct trie_node {
struct trie_node *sub[MAX_CHAR];
TOKEN *value[MAX_CHAR];
} *TRIE;
+
/*****************************************************************************/
/* */
@@ -591,16 +2484,14 @@ BOOLEAN TrieInsert(TRIE *T, char *str, TOKEN *val)
if( *str == '\0' )
res = FALSE;
else
- {
- if( *T == (TRIE) NULL )
+ { if( *T == (TRIE) NULL )
*T = (TRIE) calloc(1, sizeof(struct trie_node)); /* will set all to 0 */
if( *(str + 1) != '\0' )
res = TrieInsert(&((*T)->sub[(int) *str]), str + 1, val);
else if( (*T)->value[(int) *str] != (TOKEN *) NULL )
res = FALSE;
else
- {
- (*T)->value[(int) *str] = val;
+ { (*T)->value[(int) *str] = val;
res = TRUE;
}
}
@@ -627,12 +2518,10 @@ TOKEN *TrieRetrieve(TRIE T, char *str, int *len)
res = (TOKEN *) NULL;
*len = 0;
for( i = 0; T != (TRIE) NULL; T = T->sub[(int) str[i]], i++ )
- {
- if( DEBUG_TRIE )
+ { if( DEBUG_TRIE )
fprintf(stderr, " i = %d, res = %s\n", i, EchoToken(res));
if( T->value[(int) str[i]] != (TOKEN *) NULL )
- {
- res = T->value[(int) str[i]];
+ { res = T->value[(int) str[i]];
*len = i+1;
}
}
@@ -641,8 +2530,8 @@ TOKEN *TrieRetrieve(TRIE T, char *str, int *len)
*len, EchoToken(res));
return res;
}
-
+
/*****************************************************************************/
/* */
/* HASH_TABLE */
@@ -653,7 +2542,7 @@ TOKEN *TrieRetrieve(TRIE T, char *str, int *len)
/* NB MAX_SYM must be somewhat larger than the number of keywords. */
/* */
/*****************************************************************************/
-#define MAX_SYM 309
+#define MAX_SYM 609
static char *HashTable[MAX_SYM]; /* will initialze to NULL */
static int HashTableCount = 0; /* number of entries */
@@ -667,10 +2556,10 @@ static int hash(char *key)
return res % MAX_SYM;
} /* end hash */
-void HashTableInsert(char *str, FILE *err_fp)
+void HashInsert(char *str)
{ int i;
if( DEBUG_SETUP )
- fprintf(stderr, "[ HashTableInsert(%s)\n", str);
+ fprintf(stderr, "[ HashInsert(%s)\n", str);
if( HashTableCount >= MAX_SYM - 20 )
{
fprintf(err_fp, "%s internal error: full hash table (increase MAX_SYM)\n",
@@ -681,40 +2570,54 @@ void HashTableInsert(char *str, FILE *err_fp)
HashTable[i] = str;
HashTableCount++;
if( DEBUG_SETUP )
- fprintf(stderr, "] HashTableInsert(%s)\n", str);
+ fprintf(stderr, "] HashInsert(%s)\n", str);
}
-BOOLEAN HashTableRetrieve(char *str)
+BOOLEAN HashRetrieve(char *str)
{ int i;
for( i = hash(str); HashTable[i] != (char *) NULL; i = (i+1) % MAX_SYM )
if( strcmp(HashTable[i], str) == 0 )
return TRUE;
return FALSE;
}
-
+
/*****************************************************************************/
/* */
/* BACK END */
/* */
-/* This is the code that actually prints the output file. It accumulates */
-/* each token and only prints it at the end of the token, so that it can */
-/* check whether an alternative command ought to be printed (keywords). */
+/* This is the code that actually prints the output file. */
+/* To emit one token, the call sequence should be as follows: */
+/* */
+/* StartEmit(LANGUAGE *lang, TOKEN *current_token, char *start_delim, l) */
+/* Emit(TOKEN *current_token, char ch) */
+/* ... */
+/* Emit(TOKEN *current_token, char ch) */
+/* EndEmit(TOKEN *current_token, char *end_delim) */
+/* */
+/* The back end will then take care of all print styles automatically, */
+/* including checking for keywords. When emitting white space each space */
+/* can be sent directly: */
+/* */
+/* EmitRaw(ch) */
/* */
/*****************************************************************************/
-static char save_token[MAX_LINE]; /* the token text */
-static int save_len; /* index of \0 in save_token */
+static char save_value[MAX_LINE]; /* the token text */
+static int save_len; /* index of \0 in save_value */
static BOOLEAN save_on = FALSE; /* TRUE when saving */
+static LANGUAGE *save_language; /* the current language */
+
/*****************************************************************************/
/* */
-/* EmitRaw(ch, out_fp, FILE *err_fp) */
+/* EmitRaw(ch) */
/* */
/* Emit this character immediately. This is only legal when not saving. */
-/* All characters printed on the output file should pass through here, */
-/* since EmitRaw keeps track of where we are on the output line, in order */
-/* to handle tab characters correctly. */
+/* All characters printed on the output file that represent actual text */
+/* of the program (i.e. not commands, {}, "", \ in strings etc.) should */
+/* pass through here, since EmitRaw keeps track of where we are on */
+/* the output line, in order to handle tab characters correctly. */
/* */
/* NB out_linepos is the column where the *next* character will go, and */
/* it counts the first column on the line as column zero. It understands */
@@ -723,277 +2626,546 @@ static BOOLEAN save_on = FALSE; /* TRUE when saving */
/* */
/*****************************************************************************/
-void EmitRaw(char ch, FILE *out_fp, FILE *err_fp)
-{
- static int out_linepos = 0; /* output line position */
+void EmitRaw(char ch)
+{ static int out_linepos = 0; /* output line position */
static BOOLEAN out_linestart = TRUE; /* TRUE if out line start */
if( DEBUG_EMIT )
fprintf(stderr, "EmitRaw(%c); out_linepos %d, out_linestart %s\n",
ch, out_linepos, out_linestart ? "TRUE" : "FALSE");
if( save_on )
- {
- fprintf(err_fp, "%s internal error (EmitRaw save_on)\n", ErrorHeader());
+ { fprintf(err_fp, "%s internal error (EmitRaw save_on)\n", ErrorHeader());
abort();
}
if( ch == '\t' )
- {
- if( tab_by_spacing )
+ { if( tab_by_spacing )
{ putc(' ', out_fp);
out_linepos++;
while( out_linepos % tab_in != 0 )
{ putc(' ', out_fp);
- out_linepos++;
+ out_linepos++;
}
}
else
- {
- out_linepos++;
- while( out_linepos % tab_in != 0 )
- { out_linepos++;
- }
+ { out_linepos++;
+ while( out_linepos % tab_in != 0 ) out_linepos++;
if( out_linestart )
- { fprintf(out_fp, "$>%.1f%c {}", tab_out, tab_unit);
+ { fprintf(out_fp, "$>\"%.1f%c\" {}", tab_out, tab_unit);
/* NB {} is required in case nothing follows on this line */
}
else
- { fprintf(out_fp, "$>%.1f%ct {}", (out_linepos/tab_in)*tab_out, tab_unit);
- }
+ fprintf(out_fp, "$>\"%.1f%ct\" {}", (out_linepos/tab_in)*tab_out, tab_unit);
}
}
else if( ch == '\n' )
- {
- fputc(ch, out_fp);
+ { fputc(ch, out_fp);
out_linepos = 0;
out_linestart = TRUE;
}
else
- {
- fputc(ch, out_fp);
+ { fputc(ch, out_fp);
out_linepos++;
- if( ch != ' ' )
- out_linestart = FALSE;
+ if( ch != ' ' ) out_linestart = FALSE;
}
if( DEBUG_EMIT )
fprintf(stderr, "EmitRaw(%c) returning; out_linepos %d, out_linestart %s\n",
ch, out_linepos, out_linestart ? "TRUE" : "FALSE");
} /* end EmitRaw */
-
+
/*****************************************************************************/
/* */
-/* StartEmit(FILE *err_fp) */
+/* StartEmit(LANGUAGE *lang, TOKEN *current_token, char *start_delim, len) */
+/* */
+/* Start the emission of a token. If it is a PRINT_WHOLE_QUOTED, it has */
+/* to be saved since it might be a keyword. */
/* */
-/* Start the emission of a token. */
+/* The token began with the starting delimiter start_delim[0..len-1]. */
/* */
/*****************************************************************************/
-void StartEmit(FILE *err_fp)
-{
+void StartEmit(LANGUAGE *lang, TOKEN *current_token, char *start_delim, int len)
+{ int i;
if( save_on )
{
fprintf(err_fp, "%s internal error (StartEmit)\n", ErrorHeader());
abort();
}
- save_on = TRUE;
- save_len = 0;
-}
+ save_language = lang;
+ switch( current_token->print_style )
+ {
+ case PRINT_WHOLE_QUOTED:
+
+ /* start_delim is to be printed, but must be saved up */
+ save_on = TRUE;
+ for( i = 0; i < len; i++ )
+ save_value[i] = start_delim[i];
+ save_len = len;
+ save_value[save_len] = '\0';
+ break;
+
+
+ case PRINT_NODELIMS_QUOTED:
+
+ /* easiest to save this, treat like PRINT_WHOLE_QUOTED, but no delims */
+ save_on = TRUE;
+ save_len = 0;
+ save_value[save_len] = '\0';
+ break;
+
+ case PRINT_WHOLE_UNQUOTED:
+
+ /* print command */
+ if( current_token->command[0] != '\0' )
+ fprintf(out_fp, "%s{", current_token->command); /*}*/
+
+ /* print opening delimiter, verbatim */
+ for( i = 0; i < len; i++ )
+ putc(start_delim[i], out_fp);
+ break;
+
+
+ case PRINT_NODELIMS_UNQUOTED:
+
+ /* command is printed but not delimiter */
+ if( current_token->command[0] != '\0' )
+ fprintf(out_fp, "%s{", current_token->command); /*}*/
+ break;
+
+
+ case PRINT_NODELIMS_INNER:
+
+ /* command is printed but not delimiter; always print opening brace */
+ fprintf(out_fp, "%s{", current_token->command); /*}*/
+ break;
+
+
+ case PRINT_COMMAND_ONLY:
+
+ /* command is printed but nothing else */
+ fprintf(out_fp, "%s", current_token->command);
+ break;
+
+
+ default:
+
+ fprintf(err_fp, "%s internal error (print_style)\n", ErrorHeader());
+ abort();
+ break;
+ }
+} /* end StartEmit */
+
/*****************************************************************************/
/* */
-/* EndEmit(LANGUAGE *lang, TOKEN *current_token, FILE *out_fp, *err_fp) */
+/* EndEmit(TOKEN *current_token, char *end_delim) */
/* */
-/* End emitting a token of this type on file out_fp. */
+/* End emitting the current token. Its ending delimiter was end_delim. */
/* */
/*****************************************************************************/
+#define is_whitespace(ch) ((ch)==' ' || (ch)=='\t' || (ch)=='\n' || (ch)=='\f')
-void EndEmit(LANGUAGE *lang, TOKEN *current_token, FILE *out_fp, FILE *err_fp)
-{ BOOLEAN altern; int i;
- if( !save_on )
+void EndEmit(TOKEN *current_token, char *end_delim)
+{ char *com; int i; BOOLEAN quoted_now = FALSE;
+ switch( current_token->print_style )
{
- fprintf(err_fp, "%s internal error (EndEmit)\n", ErrorHeader());
- abort();
- }
- save_on = FALSE;
- if( save_len == 0 )
- {
- /* nothing in token, must be resumed after a newline or tab */
- /* so emit nothing in this case */
- }
- else if( current_token->command == (char *) NULL )
- {
- /* no command, which means to emit this token without its delimiters */
- for( i = 0; i < save_len; i++ )
- EmitRaw(save_token[i], out_fp, err_fp);
- }
- else
- {
- /* if there is an alternate command in this language, check whether the */
- /* completed token is a keyword, and if so apply the alternate command. */
- altern = (lang != (LANGUAGE *) NULL
- && current_token->alternate_command[0] != '\0'
- && HashTableRetrieve(save_token));
-
- putc('{', out_fp);
- fputs(altern ? current_token->alternate_command : current_token->command,
- out_fp);
- putc('"', out_fp);
- for( i = 0; i < save_len; i++ )
- {
- if( save_token[i] == '"' || save_token[i] == '\\' )
- putc('\\', out_fp);
- EmitRaw(save_token[i], out_fp, err_fp);
- }
- putc('"', out_fp);
- putc('}', out_fp);
+ case PRINT_WHOLE_QUOTED:
+
+ strcpy(&save_value[save_len], end_delim);
+ save_len += strlen(end_delim);
+ /* NB NO BREAK */
+
+
+ case PRINT_NODELIMS_QUOTED:
+
+ /* work out whether we are printing the command or its alternative */
+ com = (current_token->alternate_command[0]!='\0' && HashRetrieve(save_value)?
+ current_token->alternate_command : current_token->command);
+
+ /* print command, opening brace */
+ if( com[0] != '\0' ) fprintf(out_fp, "%s{", com); /* } */
+
+ /* omit trailing white space (will not be significant to Lout anyway) */
+ /* *** not doing this now
+ while( save_len>0 && is_whitespace(save_value[save_len-1]) ) save_len--;
+ *** */
+
+ /* print the token with appropriate escapes */
+ save_on = FALSE;
+ for( i = 0; i < save_len; i++ ) switch( save_value[i] )
+ {
+ case '/':
+ case '|':
+ case '&':
+ case '#':
+ case '{':
+ case '}':
+ case '^':
+ case '~':
+ case '-':
+
+ if( !quoted_now ) { putc('"', out_fp); quoted_now = TRUE; }
+ EmitRaw(save_value[i]);
+ break;
+
+
+ case '"':
+ case '\\':
+
+ if( !quoted_now ) { putc('"', out_fp); quoted_now = TRUE; }
+ putc('\\', out_fp);
+ EmitRaw(save_value[i]);
+ break;
+
+
+ case ' ':
+ case '\t':
+ case '\n':
+ case '\f':
+
+ if( i == 0 )
+ { /* make initial white space significant using "" */
+ putc('"', out_fp);
+ quoted_now = TRUE;
+ }
+ if( quoted_now ) { putc('"', out_fp); quoted_now = FALSE; }
+ EmitRaw(save_value[i]);
+ break;
+
+
+ default:
+
+ /* anything else can be quoted or unquoted ad. lib. */
+ EmitRaw(save_value[i]);
+ break;
+ }
+ /* print closing quote and closing brace if needed */
+ if( quoted_now ) putc('"', out_fp);
+ else if( save_len > 0 && is_whitespace(save_value[save_len-1]) )
+ fputs("\"\"", out_fp); /* makes trailing white space significant */
+ if( com[0] != '\0' ) /*{*/ putc('}', out_fp);
+ break;
+
+
+ case PRINT_WHOLE_UNQUOTED:
+
+ /* print end delimiter, verbatim */
+ fputs(end_delim, out_fp);
+ /* NB NO BREAK */
+
+
+ case PRINT_NODELIMS_UNQUOTED:
+
+ /* print closing brace if required*/
+ if( current_token->command[0] != '\0' ) /*{*/ putc('}', out_fp);
+ break;
+
+
+ case PRINT_NODELIMS_INNER:
+
+ /* always print closing brace */
+ /*{*/ putc('}', out_fp);
+ break;
+
+
+ case PRINT_COMMAND_ONLY:
+
+ break;
+
+
+ default:
+
+ fprintf(err_fp, "%s internal error (print_style)\n", ErrorHeader());
+ abort();
+ break;
}
-} /* end EndEmit */
+ /* print following command if any */
+ if( current_token->following_command != NULL )
+ fprintf(out_fp, "%s", current_token->following_command);
+} /* end EndEmit */
+
/*****************************************************************************/
/* */
-/* Emit(char ch, TOKEN *current_token, FILE *out_fp, FILE *err_fp) */
+/* Emit(TOKEN *current_token, char ch) */
/* */
-/* Emit one character. */
+/* Emit one character of the current token. */
/* */
/*****************************************************************************/
-void Emit(char ch, TOKEN *current_token, FILE *out_fp, FILE *err_fp)
+void Emit(TOKEN *current_token, char ch)
{
- if( !save_on )
+ switch( current_token->print_style )
{
- fprintf(err_fp, "%s internal error (EmitChar)\n", ErrorHeader());
- abort();
+ case PRINT_WHOLE_QUOTED:
+ case PRINT_NODELIMS_QUOTED:
+
+ if( !save_on )
+ { fprintf(err_fp, "%s internal error (EmitChar)\n", ErrorHeader());
+ abort();
+ }
+ save_value[save_len++] = ch;
+ save_value[save_len] = '\0';
+ break;
+
+
+ case PRINT_WHOLE_UNQUOTED:
+ case PRINT_NODELIMS_UNQUOTED:
+
+ /* verbatim output */
+ putc(ch, out_fp);
+ break;
+
+
+ case PRINT_NODELIMS_INNER:
+
+ fprintf(err_fp, "%s internal error (emitting INNER)\n", ErrorHeader());
+ abort();
+ break;
+
+
+ case PRINT_COMMAND_ONLY:
+
+ /* emit nothing since printing the command only */
+ break;
+
+
+ default:
+
+ fprintf(err_fp, "%s internal error (print_style)\n", ErrorHeader());
+ abort();
+ break;
+
}
- if( ch == '\n' || ch == '\t' )
+} /* end Emit */
+
+
+/*****************************************************************************/
+/* */
+/* EmitProtected(char ch) */
+/* */
+/* Emit one character of the current token. If the character is a special */
+/* one in Lout, protect it with quotes. */
+/* */
+/*****************************************************************************/
+
+void EmitProtected(char ch)
+{
+ switch( ch )
{
- EndEmit((LANGUAGE *) NULL, current_token, out_fp, err_fp);
- EmitRaw(ch, out_fp, err_fp);
- StartEmit(err_fp);
+ case '/':
+ case '|':
+ case '&':
+ case '#':
+ case '{':
+ case '}':
+ case '^':
+ case '~':
+ case '-':
+
+ putc('"', out_fp);
+ EmitRaw(ch);
+ putc('"', out_fp);
+ break;
+
+
+ case '"':
+ case '\\':
+
+ putc('"', out_fp);
+ putc('\\', out_fp);
+ EmitRaw(ch);
+ putc('"', out_fp);
+ break;
+
+
+ default:
+
+ EmitRaw(ch);
+ break;
}
- else
+} /* end EmitProtected */
+
+
+/*****************************************************************************/
+/* */
+/* TOKEN *ExpandToken(TOKEN *t, int starts_pos) */
+/* */
+/* Create a new token corresponding to t but using starts2[starts_pos] and */
+/* ends2[starts_pos] only. */
+/* */
+/*****************************************************************************/
+
+char *clone2strings(char *s1, char *s2)
+{ char *res;
+ res = (char *) malloc( (strlen(s1) + strlen(s2) + 1) * sizeof(char));
+ sprintf(res, "%s%s", s1, s2);
+ if( DEBUG_SETUP )
+ fprintf(stderr, "clone2strings(%s, %s) = %s\n", s1, s2, res);
+ return res;
+} /* end clone2strings */
+
+TOKEN *ExpandToken(TOKEN *t, int starts_pos)
+{ TOKEN *res; int i;
+ if( DEBUG_SETUP )
+ fprintf(stderr, "ExpandToken(%s, starts[0] = %s)\n", t->name, t->starts[0]);
+ res = (TOKEN *) calloc(1, sizeof(struct token_rec));
+ res->name = t->name;
+ res->print_style = t->print_style;
+ res->command = t->command;
+ res->alternate_command = t->alternate_command;
+ res->following_command = t->following_command;
+ res->start_line_only = t->start_line_only;
+ for( i = 0; t->starts[i] != NULL; i++ )
{
- save_token[save_len++] = ch;
- save_token[save_len] = '\0';
+ /* the starts of res are the start of t with starts2[starts_pos] added */
+ res->starts[i] = clone2strings(t->starts[i], t->starts2[starts_pos]);
}
-} /* end Emit */
-
+ res->legal = t->legal;
+ res->escape = t->escape;
+ res->escape_legal = t->escape_legal;
+ res->inner_escape = t->inner_escape;
+ res->end_inner_escape = t->end_inner_escape;
+ res->end_delimiter = t->ends2[starts_pos];
+ res->end_start_line_only = t->end_start_line_only;
+ res->want_two_ends = t->want_two_ends;
+ if( DEBUG_SETUP )
+ fprintf(stderr, "ExpandToken returning res = %s, starts[0] = %s)\n",
+ res->name, res->starts[0]);
+ return res;
+} /* end ExpandToken */
+
/*****************************************************************************/
/* */
-/* SetupTokens(LANGUAGE *lang) */
+/* void SetupOneToken(TOKEN *t) */
/* */
-/* Set up the runtime token structures. This involves initializing the */
-/* chtype and escape_chtype fields for each token type in the chosen */
-/* language, and loading the trie with all the opening delimiters of all */
-/* the tokens. */
+/* Set up one token. This involves initializing the chtype and */
+/* escape_chtype fields for the token, and loading the trie with all */
+/* the opening delimiters of the token. */
/* */
/*****************************************************************************/
#define LEGAL 1
#define ESCAPE 2
#define INNER_ESCAPE 3
+TRIE Trie = (TRIE) NULL; /* these tokens allowed anywhere */
+TRIE StartLineTrie = (TRIE) NULL; /* these allowed at line start only */
-TRIE Trie = (TRIE) NULL;
-
-void SetupTokens(LANGUAGE *lang, FILE *err_fp)
-{ TOKEN *t; int i, j;
+void SetupOneToken(TOKEN *t)
+{ int j;
if( DEBUG_SETUP )
- fprintf(stderr, "SetupTokens(%s)\n", lang->names[0]);
+ fprintf(stderr, "SetupOneToken starting %s\n", t->starts[0]);
- /* set up each token in the language */
- for( i = 0; lang->tokens[i] != (TOKEN *) NULL; i++ )
+ /* check that any PRINT_NODELIMS_INNER styles have an end delimiter */
+ if( t->print_style == PRINT_NODELIMS_INNER )
{
- t = lang->tokens[i];
- if( DEBUG_SETUP )
- fprintf(stderr, "SetupTokens token starting %s\n", t->starts[0]);
+ if( t->end_delimiter == NULL || t->end_delimiter[0] == '\0' )
+ {
+ fprintf(err_fp, "%s: token %s is INNER but has no end delimiter\n",
+ t->name, ErrorHeader());
+ }
+ }
- /* set up the chtype table for this token */
+ /* set up the chtype table for this token */
+ if( t->legal == NULL )
+ { /* all characters are legal */
+ for( j = 0; j < MAX_CHAR; j++ )
+ t->chtype[j] = LEGAL;
+ }
+ else
+ { /* the characters in t->legal are legal */
for( j = 0; t->legal[j] != '\0'; j++ )
t->chtype[(int) t->legal[j]] = LEGAL;
- if( t->escape[0] != '\0' )
- t->chtype[(int) t->escape[0]] = ESCAPE;
- if( t->inner_escape[0] != '\0' )
- t->chtype[(int) t->inner_escape[0]] = INNER_ESCAPE;
-
- /* set up the escape_chtype table for this token */
+ }
+ if( t->escape[0] != '\0' )
+ t->chtype[(int) t->escape[0]] = ESCAPE;
+ if( t->inner_escape[0] != '\0' )
+ t->chtype[(int) t->inner_escape[0]] = INNER_ESCAPE;
+
+ /* set up the escape_chtype table for this token */
+ if( t->escape_legal == NULL )
+ { /* all characters are legal after an escape character */
+ for( j = 0; j < MAX_CHAR; j++ )
+ t->escape_chtype[j] = LEGAL;
+ }
+ else
+ { /* the characters in t->escape_legal are legal after an escape character */
for( j = 0; t->escape_legal[j] != '\0'; j++ )
t->escape_chtype[(int) t->escape_legal[j]] = LEGAL;
+ }
- /* load the opening delimiters of this token into the trie */
- for( j = 0; t->starts[j] != (char *) NULL; j++ )
- {
- if( !TrieInsert(&Trie, t->starts[j], t) )
- {
- if( *(t->starts[j]) == '\0' )
- fprintf(err_fp, "%s: empty starting delimiter\n", ErrorHeader());
- else
- fprintf(err_fp, "%s: starting delimiter %s appears twice\n",
- ErrorHeader(), t->starts[j]);
- }
+ /* load the opening delimiters of this token into the trie */
+ for( j = 0; t->starts[j] != (char *) NULL; j++ )
+ {
+ if( !TrieInsert(t->start_line_only ? &StartLineTrie:&Trie,t->starts[j],t) )
+ { if( *(t->starts[j]) == '\0' )
+ fprintf(err_fp, "%s: empty starting delimiter\n", ErrorHeader());
+ else
+ fprintf(err_fp, "%s: starting delimiter %s appears twice\n",
+ ErrorHeader(), t->starts[j]);
}
-
- if( DEBUG_SETUP )
- fprintf(stderr, "SetupTokens token ending %s\n", t->starts[0]);
}
- /* load the keyword hash table */
- for( j = 0; lang->keywords[j] != (char *) NULL; j++ )
- HashTableInsert(lang->keywords[j], err_fp);
-
if( DEBUG_SETUP )
- fprintf(stderr, "SetupTokens(%s) returning.\n", lang->names[0]);
-} /* end SetupTokens */
-
+ fprintf(stderr, "SetupOneToken ending %s\n", t->starts[0]);
+} /* end SetupOneToken */
-/*****************************************************************************/
-/* */
-/* BOOLEAN PrefixEq(char *str, char *prefix) */
-/* */
-/* Returns TRUE if str (unterminated) begins with prefix (terminated). */
-/* */
-/*****************************************************************************/
-
-BOOLEAN PrefixEq(char *str, char *prefix)
-{ char *p, *q;
- for( p = str, q = prefix; *q != '\0' && *p == *q; p++, q++ );
- if( DEBUG_PREFIXEQ )
- fprintf(stderr, "PrefixEq(%s, %s) returning %s\n",
- str, prefix, *q == '\0' ? "TRUE" : "FALSE");
- return (*q == '\0');
-} /* end PrefixEq */
-
/*****************************************************************************/
/* */
-/* NextChar(FILE *in_fp) */
+/* SetupLanguage(LANGUAGE *lang) */
/* */
-/* Move to next character in the input file. This may involve changing */
-/* global variables curr_line, line_num, and line_pos; the new character */
-/* may be found in curr_line[line_pos]. */
+/* Set up the runtime token structures. This involves setting up each */
+/* token (see above), and also loading the hash table with the keywords. */
/* */
-/* NextChar does not skip any characters at all. When end of file is */
-/* reached, curr_line[line_pos] contains '\0'. */
+/* If a token has non-empty start2 and end2 pairs, it is expanded into */
+/* a set of tokens, one for each pair, with the start delimiter set to */
+/* the concatenation of the start delimiters and starts2, and end */
+/* delimiter set to the corresponding end2. */
/* */
/*****************************************************************************/
-void NextChar(FILE *in_fp)
-{
- if( curr_line[line_pos] == '\n' )
+void SetupLanguage(LANGUAGE *lang)
+{ int i, j; TOKEN *t;
+ if( DEBUG_SETUP )
+ fprintf(stderr, "SetupLanguage(%s)\n", lang->names[0]);
+
+ /* set up each token in the language */
+ for( i = 0; lang->tokens[i] != (TOKEN *) NULL; i++ )
{
- /* need a new line */
- line_num++;
- line_pos = 1;
- if( fgets(&curr_line[1], MAX_LINE+2, in_fp) == (char *) NULL )
- curr_line[1] = '\0';
+ if( DEBUG_SETUP )
+ fprintf(stderr, " (1) setting up token %s (starts[0] = %s)\n",
+ lang->tokens[i]->name, lang->tokens[i]->starts[0]);
+ if( lang->tokens[i]->starts2[0] != NULL )
+ {
+ /* starts2, so set up one token for each entry in starts[2] */
+ for( j = 0; lang->tokens[i]->starts2[j] != NULL; j++ )
+ {
+ t = ExpandToken(lang->tokens[i], j);
+ if( DEBUG_SETUP )
+ fprintf(stderr, " (2) setting up token %s (starts[0] = %s)\n",
+ t->name, t->starts[0]);
+ SetupOneToken(t);
+ }
+ }
+ else
+ {
+ /* no starts2, so set up just one token */
+ SetupOneToken(lang->tokens[i]);
+ }
}
- else line_pos++; /* will yield '\0' as desired if EOF before end of line */
- if( DEBUG_NEXTCHAR )
- fprintf(stderr, "after NextChar, line_num %d, line_pos %d, curr_line %s",
- line_num, line_pos, &curr_line[1]);
-} /* end NextChar */
+ /* load the keyword hash table */
+ for( j = 0; lang->keywords[j] != (char *) NULL; j++ )
+ HashInsert(lang->keywords[j]);
+
+ if( DEBUG_SETUP )
+ fprintf(stderr, "SetupLanguage(%s) returning.\n", lang->names[0]);
+} /* end SetupLanguage */
+
/*****************************************************************************/
/* */
@@ -1010,15 +3182,41 @@ BOOLEAN Printable(char ch)
return (*p == ch);
} /* end Printable */
+
+/*****************************************************************************/
+/* */
+/* TOKEN *TokenStartingHere(int *len) */
+/* */
+/* Returns the token starting here if there is one, else NULL. */
+/* If found, the length of its starting delimiter is returned in *len. */
+/* */
+/*****************************************************************************/
+
+TOKEN *TokenStartingHere(int *len)
+{ TOKEN *res;
+
+ if( line_pos == 1 )
+ {
+ res = TrieRetrieve(StartLineTrie, &curr_line[line_pos], len);
+ if( res == (TOKEN *) NULL )
+ res = TrieRetrieve(Trie, &curr_line[line_pos], len);
+ }
+ else
+ {
+ res = TrieRetrieve(Trie, &curr_line[line_pos], len);
+ }
+ return res;
+}
+
/*****************************************************************************/
/* */
-/* Process(LANGUAGE*lang, FILE*in_fp, *out_fp, *err_fp, TOKEN *outer_token) */
+/* Process(LANGUAGE *lang, TOKEN *outer_token, char *outer_end_delimiter) */
/* */
/* Process a sequence of input tokens. If we are currently recursing */
/* inside some other token, outer_token is non-null and is that token, */
-/* and we stop when we reach the ending delimiter of the inner escape */
-/* of that token. Otherwise, we stop at end of file. */
+/* and we stop when we reach outer_end_delimiter outside any token. */
+/* Otherwise we stop at end of file. */
/* */
/*****************************************************************************/
#define START 1
@@ -1027,242 +3225,230 @@ BOOLEAN Printable(char ch)
#define IN_TOKEN_AFTER_INNER_ESCAPE 4
#define STOP 5
-void Process(LANGUAGE *lang, FILE *in_fp, FILE *out_fp, FILE *err_fp,
-TOKEN *outer_token)
+void Process(LANGUAGE *lang, TOKEN *outer_token, char *outer_end_delimiter)
{ TOKEN *current_token; int len, i, state;
+ BOOLEAN end_delimiter_seen;
if( DEBUG_PROCESS )
fprintf(stderr, "[ Process(%s, -, -, -, -)\n", lang->names[0]);
state = START;
+ end_delimiter_seen = FALSE;
while( curr_line[line_pos] != '\0' && state != STOP )
{
- if( DEBUG_PROCESS )
- fprintf(stderr, " state %d, ch %c\n", state, curr_line[line_pos]);
- switch( state )
- {
- case START: /* between tokens */
-
- /* check whether outer_token's delimiter is current */
- if( outer_token != (TOKEN *) NULL &&
- outer_token->end_inner_escape[0] != '\0' &&
- PrefixEq(&curr_line[line_pos], outer_token->end_inner_escape) )
- {
- len = strlen(outer_token->end_inner_escape);
- for( i = 0; i < len; i++ )
- NextChar(in_fp);
- state = STOP;
- }
- else switch( curr_line[line_pos] )
- {
+ if( DEBUG_PROCESS )
+ fprintf(stderr, " state %d, ch %c\n", state, curr_line[line_pos]);
+ switch( state )
+ {
- case ' ':
-
- EmitRaw(' ', out_fp, err_fp);
- NextChar(in_fp);
- break;
+ case START: /* between tokens; try each of the following */
+ /* check whether outer_token is ending here, in which case stop */
+ if( outer_token != (TOKEN *) NULL &&
+ curr_line[line_pos] == outer_end_delimiter[0] &&
+ InputMatches(outer_end_delimiter) )
+ {
+ len = strlen(outer_end_delimiter);
+ for( i = 0; i < len; i++ )
+ NextChar();
+ state = STOP;
+ }
- case '\t':
-
- if( outer_token != (TOKEN *) NULL )
- {
- fprintf(err_fp, "%s: replacing tab character in escape by space\n",
- ErrorHeader());
- EmitRaw(' ', out_fp, err_fp);
- NextChar(in_fp);
- }
- else
- {
- EmitRaw('\t', out_fp, err_fp);
- NextChar(in_fp);
+ /* check whether a token is starting here, in which case start it */
+ else if( (current_token = TokenStartingHere(&len)) != (TOKEN *) NULL )
+ {
+ if( DEBUG_PROCESS )
+ { fprintf(stderr, "current_token (len = %d): %s\n",
+ len, EchoToken(current_token));
}
- break;
+ StartEmit(lang, current_token, &curr_line[line_pos], len);
+ /* skip the starting delimiter */
+ for( i = 0; i < len; i++ )
+ NextChar();
- case '\n':
-
- if( outer_token != (TOKEN *) NULL )
+ /* we are now either in a token, or else we have to start an inner */
+ if( current_token->print_style == PRINT_NODELIMS_INNER )
{
- fprintf(err_fp, "%s: inserting %s to fix unterminated escape\n",
- ErrorHeader(), outer_token->end_inner_escape);
- state = STOP;
+ Process(lang, current_token, current_token->end_delimiter);
+ EndEmit(current_token, "");
}
- else
- {
- EmitRaw('\n', out_fp, err_fp);
- NextChar(in_fp);
- }
- break;
+ else state = IN_TOKEN;
+ }
+ /* check whether we have a space */
+ else if( curr_line[line_pos] == ' ' )
+ {
+ EmitRaw(' ');
+ NextChar();
+ }
- case '\f':
-
- if( outer_token != (TOKEN *) NULL )
- {
- fprintf(err_fp, "%s: replacing formfeed character in escape by space\n",
- ErrorHeader());
- EmitRaw(' ', out_fp, err_fp);
- NextChar(in_fp);
- }
- else
- {
+ /* check whether we have a tab character */
+ else if( curr_line[line_pos] == '\t' )
+ {
+ EmitRaw('\t');
+ NextChar();
+ }
+
+ /* check whether we have a newline character */
+ else if( curr_line[line_pos] == '\n' )
+ {
+ EmitRaw('\n');
+ NextChar();
+ }
+
+ /* check whether we have a formfeed character */
+ else if( curr_line[line_pos] == '\f' )
+ {
fprintf(out_fp, "\n@NP");
- EmitRaw('\n', out_fp, err_fp);
- NextChar(in_fp);
- }
- break;
+ EmitRaw('\n');
+ NextChar();
+ }
+ /* check whether we are supposed to echo things that don't match */
+ else if( lang->no_match == NO_MATCH_PRINT )
+ {
+ EmitProtected(curr_line[line_pos]);
+ NextChar();
+ }
- default:
+ /* finally, we have an error and must skip the character */
+ else if( lang->no_match == NO_MATCH_ERROR )
+ {
+ if( Printable(curr_line[line_pos]) )
+ fprintf(err_fp, "%s: skipping unexpected %c character\n",
+ ErrorHeader(), curr_line[line_pos]);
+ else
+ fprintf(err_fp, "%s: %s (octal %o)\n",
+ "skipping unexpected unprintable character",
+ ErrorHeader(), (int) curr_line[line_pos]);
+ NextChar();
+ }
+ else
+ {
+ fprintf(err_fp, "%s internal error: lang->no_match\n", ErrorHeader());
+ }
+ break;
+
+
+ case IN_TOKEN: /* within a token; current_token says which kind */
- /* look up the trie to see which token we are starting */
- current_token = TrieRetrieve(Trie, &curr_line[line_pos], &len);
- if( current_token == (TOKEN *) NULL )
+ /* check for ending delimiter if there is one */
+ if( current_token->end_delimiter[0] != '\0' &&
+ (!current_token->end_start_line_only || line_pos == 1) &&
+ InputMatches(current_token->end_delimiter) )
+ {
+ if( current_token->want_two_ends && !end_delimiter_seen )
{
- /* error; no token starts here, so print error message and skip */
- if( Printable(curr_line[line_pos]) )
- fprintf(err_fp, "%s: skipping unexpected %c character\n",
- ErrorHeader(), curr_line[line_pos]);
- else
- fprintf(err_fp,
- "%s: skipping unexpected unprintable character (octal %o)\n",
- ErrorHeader(), (int) curr_line[line_pos]);
- NextChar(in_fp);
+ /* if we have to see the end delimiter twice before stopping, */
+ /* and we haven't seen it yet, then emit the char and carry on */
+ Emit(current_token, curr_line[line_pos]);
+ NextChar();
+ end_delimiter_seen = TRUE;
}
else
{
- /* have a token, so start emitting it */
if( DEBUG_PROCESS )
- {
- fprintf(stderr, "current_token (len = %d): %s\n",
- len, EchoToken(current_token));
- }
- StartEmit(err_fp);
+ fprintf(stderr, " InputMatches(%s) so finishing token\n",
+ current_token->end_delimiter);
+ len = strlen(current_token->end_delimiter);
for( i = 0; i < len; i++ )
- {
- /* ***
- if( DEBUG_PROCESS )
- fprintf(stderr, " emitting delim (i %d, len %d)\n", i, len);
- *** */
- if( current_token->command != (char *) NULL )
- Emit(curr_line[line_pos], current_token, out_fp, err_fp);
- NextChar(in_fp);
- }
- state = IN_TOKEN;
+ NextChar();
+ EndEmit(current_token, current_token->end_delimiter);
+ state = START;
}
- }
- break;
-
-
- case IN_TOKEN: /* within a token; current_token says which kind */
-
- /* check for ending delimiter if there is one */
- if( current_token->end_delimiter[0] != '\0' &&
- PrefixEq(&curr_line[line_pos], current_token->end_delimiter) )
- {
- if( DEBUG_PROCESS )
- fprintf(stderr, " PrefixEq(-, %s) so finishing token\n",
- current_token->end_delimiter);
- len = strlen(current_token->end_delimiter);
- for( i = 0; i < len; i++ )
- { if( current_token->command != (char *) NULL )
- Emit(curr_line[line_pos], current_token, out_fp, err_fp);
- NextChar(in_fp);
}
- EndEmit(lang, current_token, out_fp, err_fp);
- state = START;
- }
- else switch( current_token->chtype[(int) curr_line[line_pos]] )
- {
+ else switch( current_token->chtype[(int) curr_line[line_pos]] )
+ {
- case LEGAL:
+ case LEGAL:
- Emit(curr_line[line_pos], current_token, out_fp, err_fp);
- NextChar(in_fp);
- break;
+ Emit(current_token, curr_line[line_pos]);
+ NextChar();
+ break;
- case ESCAPE:
+ case ESCAPE:
- NextChar(in_fp);
- state = IN_TOKEN_AFTER_ESCAPE;
- break;
+ NextChar();
+ state = IN_TOKEN_AFTER_ESCAPE;
+ break;
- case INNER_ESCAPE:
+ case INNER_ESCAPE:
- EndEmit(lang, current_token, out_fp, err_fp);
- NextChar(in_fp);
- Process(lang, in_fp, out_fp, err_fp, current_token);
- state = IN_TOKEN_AFTER_INNER_ESCAPE;
- break;
+ EndEmit(current_token, "");
+ NextChar();
+ Process(lang, current_token, current_token->end_inner_escape);
+ state = IN_TOKEN_AFTER_INNER_ESCAPE;
+ break;
- default:
+ default:
- if( current_token->end_delimiter[0] != '\0' )
- {
- /* error: token ends at delimiter, not at unexpected character */
- if( Printable(curr_line[line_pos]) )
- fprintf(err_fp, "%s: skipping unexpected %c character in %s\n",
- ErrorHeader(), curr_line[line_pos], current_token->name);
+ if( current_token->end_delimiter[0] != '\0' )
+ {
+ /* error: token ends at delimiter, not at unexpected character */
+ if( Printable(curr_line[line_pos]) )
+ fprintf(err_fp, "%s: skipping unexpected %c character in %s\n",
+ ErrorHeader(), curr_line[line_pos], current_token->name);
+ else
+ fprintf(err_fp, "%s: %s (octal %o) in %s\n",
+ ErrorHeader(), "skipping unexpected unprintable character",
+ (int) curr_line[line_pos], current_token->name);
+ NextChar();
+ }
else
- fprintf(err_fp,
- "%s: skipping unexpected unprintable character (octal %o) in %s\n",
- ErrorHeader(), (int) curr_line[line_pos], current_token->name);
- NextChar(in_fp);
- }
- else
- {
- /* normal termination after last legal character */
- EndEmit(lang, current_token, out_fp, err_fp);
- state = START;
- }
- break;
+ {
+ /* normal termination after last legal character */
+ EndEmit(current_token, "");
+ state = START;
+ }
+ break;
- }
- break;
+ }
+ break;
- case IN_TOKEN_AFTER_ESCAPE:
+ case IN_TOKEN_AFTER_ESCAPE:
- if( current_token->escape_chtype[(int) curr_line[line_pos]] == LEGAL )
- {
- Emit(current_token->escape[0], current_token, out_fp, err_fp);
- Emit(curr_line[line_pos], current_token, out_fp, err_fp);
- }
- else
- {
- if( Printable(curr_line[line_pos]) )
- fprintf(err_fp, "%s: skipping %c%c in %s, since %c not legal here\n",
- ErrorHeader(), current_token->escape[0], curr_line[line_pos],
- current_token->name, curr_line[line_pos]);
+ if( current_token->escape_chtype[(int) curr_line[line_pos]] == LEGAL )
+ {
+ Emit(current_token, current_token->escape[0]);
+ Emit(current_token, curr_line[line_pos]);
+ }
else
- fprintf(err_fp,
- "%s: skipping %c and unprintable unexpected character (octal %o)\n",
- ErrorHeader(), current_token->escape[0], (int) curr_line[line_pos]);
- }
- NextChar(in_fp);
- state = IN_TOKEN;
- break;
+ {
+ if( Printable(curr_line[line_pos]) )
+ fprintf(err_fp,"%s: skipping %c%c in %s, since %c not legal here\n",
+ ErrorHeader(), current_token->escape[0], curr_line[line_pos],
+ current_token->name, curr_line[line_pos]);
+ else
+ fprintf(err_fp,
+ "%s: skipping %c and %s (octal %o)\n", ErrorHeader(),
+ current_token->escape[0], "unprintable unexpected character",
+ (int) curr_line[line_pos]);
+ }
+ NextChar();
+ state = IN_TOKEN;
+ break;
- case IN_TOKEN_AFTER_INNER_ESCAPE:
+ case IN_TOKEN_AFTER_INNER_ESCAPE:
- /* ending delimiter of inner escape has been read over */
- StartEmit(err_fp);
- state = IN_TOKEN;
- break;
+ /* ending delimiter of inner escape has been read over */
+ StartEmit(lang, current_token, "", 0);
+ state = IN_TOKEN;
+ break;
- default:
+ default:
- fprintf(err_fp, "%s internal error (state = %d)\n",
- ErrorHeader(), state);
- abort();
- break;
- }
+ fprintf(err_fp, "%s internal error (state = %d)\n",
+ ErrorHeader(), state);
+ abort();
+ break;
+ }
}
/* at end, need to tidy up any residual messiness */
@@ -1285,9 +3471,9 @@ TOKEN *outer_token)
fprintf(err_fp, "%s: program text ended within %s\n",
ErrorHeader(), current_token->name);
else
- fprintf(err_fp, "%s: %s escape ended within %s\n",
+ fprintf(err_fp, "%s: %s token ended within %s\n",
ErrorHeader(), outer_token->name, current_token->name);
- EndEmit(lang, current_token, out_fp, err_fp);
+ EndEmit(current_token, "");
}
break;
@@ -1297,7 +3483,7 @@ TOKEN *outer_token)
/* we stopped after the escape character */
fprintf(err_fp, "%s: skipping %c at end of program text\n",
ErrorHeader(), current_token->escape[0]);
- EndEmit(lang, current_token, out_fp, err_fp);
+ EndEmit(current_token, "");
break;
@@ -1310,7 +3496,7 @@ TOKEN *outer_token)
fprintf(err_fp, "%s: program text ended within %s after escape\n",
ErrorHeader(), current_token->name);
else
- fprintf(err_fp, "%s: %s escape ended within %s after escape\n",
+ fprintf(err_fp, "%s: %s token ended within %s after escape\n",
ErrorHeader(), outer_token->name, current_token->name);
}
break;
@@ -1325,44 +3511,50 @@ TOKEN *outer_token)
}
} /* end Process */
-
+
/*****************************************************************************/
/* */
-/* PrintUsage(fp) */
+/* PrintUsage() */
/* */
-/* Print usage message on file fp. */
+/* Print usage message on file err_fp. */
/* */
/*****************************************************************************/
-void PrintUsage(FILE *fp)
+void PrintUsage()
{ int i;
- fprintf(fp, "\n");
- fprintf(fp, "usage: prg2lout <options> <files>\n\n");
- fprintf(fp, " where <options> can be\n");
- fprintf(fp, "\n");
- fprintf(fp, " -r raw mode (used within Lout only)\n");
- fprintf(fp, " -i<file> take input from <file>\n");
- fprintf(fp, " -o<file> send output to <file>\n");
- fprintf(fp, " -e<file> send error messages to <file>\n");
- fprintf(fp, " -l<language> input is in this programming language\n");
- fprintf(fp, " -p<style> print style: fixed, varying, symbol\n");
- fprintf(fp, " -f<family> font family (e.g. Times)\n");
- fprintf(fp, " -s<size> font size (e.g. 10p or 12p)\n");
- fprintf(fp, " -v<space> line spacing (e.g. 1.1fx)\n");
- fprintf(fp, " -t<num> tab interval (e.g. 8 is default)\n");
- fprintf(fp, " -T<dist> output tab interval (e.g. 0.5i)\n");
- fprintf(fp, " -n no file names as page headers\n");
- fprintf(fp, " -V print version information and exit\n");
- fprintf(fp, " -u print this usage message and exit\n");
- fprintf(fp, "\n");
- fprintf(fp, " and <language> (which is compulsory) can be any one of:\n");
+ fprintf(err_fp, "\n");
+ fprintf(err_fp, "usage: prg2lout <options> <files>\n\n");
+ fprintf(err_fp, " where <options> can be\n");
+ fprintf(err_fp, "\n");
+ fprintf(err_fp, " -r raw mode (used within Lout only)\n");
+ fprintf(err_fp, " -i<file> take input from <file>\n");
+ fprintf(err_fp, " -o<file> send output to <file>\n");
+ fprintf(err_fp, " -e<file> send error messages to <file>\n");
+ fprintf(err_fp, " -l<language> input is in this programming language\n");
+ fprintf(err_fp, " -p<style> print style: fixed, varying, symbol\n");
+ fprintf(err_fp, " -f<family> font family (e.g. Times)\n");
+ fprintf(err_fp, " -s<size> font size (e.g. 10p or 12p)\n");
+ fprintf(err_fp, " -v<space> line spacing (e.g. 1.1fx)\n");
+ fprintf(err_fp, " -t<num> tab interval (e.g. 8 is default)\n");
+ fprintf(err_fp, " -T<dist> output tab interval (e.g. 0.5i)\n");
+ fprintf(err_fp, " -S<file> use this as the setup file\n");
+ fprintf(err_fp, " -n no file names as page headers\n");
+ fprintf(err_fp, " -V print version information and exit\n");
+ fprintf(err_fp, " -u print this usage message and exit\n");
+ fprintf(err_fp, "\n");
+ fprintf(err_fp, " <language> (which is compulsory) can be any one of:\n");
for( i = 0; languages[i] != (LANGUAGE *) NULL; i++ )
- fprintf(fp, " %s\n", languages[i]->names[0]);
- fprintf(fp, "\n");
+ fprintf(err_fp, " %s\n", languages[i]->names[0]);
+ fprintf(err_fp, "\n");
+ fprintf(err_fp, "The values of all formatting options not given are\n");
+ fprintf(err_fp, "taken from the setup file: either the file given after\n");
+ fprintf(err_fp, "-S, or the system default setup file for this language\n");
+ fprintf(err_fp, "if there is no -S option.\n");
+ fprintf(err_fp, "\n");
} /* end PrintUsage */
-
+
/*****************************************************************************/
/* */
/* main(argc, argv) */
@@ -1373,10 +3565,9 @@ void PrintUsage(FILE *fp)
/*****************************************************************************/
int main(int argc, char *argv[])
-{ FILE *in_fp, *out_fp, *err_fp;
- BOOLEAN stdin_seen; int i, j, arg_pos;
- char *infilename, *outfilename, *errfilename, *str;
- LANGUAGE *language = (LANGUAGE *) NULL;
+{ BOOLEAN stdin_seen; int i, j, arg_pos;
+ char *infilename, *outfilename, *errfilename;
+ LANGUAGE *lang = NO_LANGUAGE;
char *file_names[1024]; int file_count = 0;
/* echo command line */
@@ -1393,15 +3584,14 @@ int main(int argc, char *argv[])
line_num = 0;
stdin_seen = raw_seen = FALSE;
tab_by_spacing = TRUE;
- style_option = NO_STYLE;
tab_in = 8;
tab_out = 3;
tab_unit = 'f';
headers_option = TRUE;
font_option = size_option = line_option = tabin_option =
- tabout_option = language_option = (char *) NULL;
+ tabout_option = setup_option = language_option = (char *) NULL;
if( argc == 1 )
- { PrintUsage(err_fp);
+ { PrintUsage();
exit(1);
}
for( arg_pos = 1; arg_pos < argc; arg_pos++ )
@@ -1487,27 +3677,12 @@ int main(int argc, char *argv[])
{ fprintf(err_fp, "%s: -p illegal with -r option\n", ErrorHeader());
exit(1);
}
- GetArg(str, "usage: -p<printstyle>", FALSE);
- /* *** -l can set style, so don't do this now
- if( style_option != NO_STYLE )
- { fprintf(err_fp, "%s: -p option appears twice!\n", ErrorHeader());
- exit(1);
- }
- else
- *** */
- if( strcmp(str, "fixed") == 0 )
- { style_option = FIXED_STYLE;
- }
- else if( strcmp(str, "varying") == 0 )
- { style_option = VARYING_STYLE;
- tab_by_spacing = FALSE;
- }
- else if( strcmp(str, "symbol") == 0 )
- { style_option = SYMBOL_STYLE;
- tab_by_spacing = FALSE;
- }
- else
- { fprintf(err_fp, "%s: unknown -p option %s\n", ErrorHeader(), str);
+ GetArg(style_option, "usage: -p<printstyle>", FALSE);
+ if( strcmp(style_option, "fixed") != 0 &&
+ strcmp(style_option, "varying") != 0 &&
+ strcmp(style_option, "symbol") != 0 )
+ { fprintf(err_fp, "%s: unknown -p option %s\n", ErrorHeader(),
+ style_option);
exit(1);
}
break;
@@ -1588,6 +3763,17 @@ int main(int argc, char *argv[])
break;
+ case 'S':
+
+ /* read alternative setup file */
+ if( raw_seen )
+ { fprintf(err_fp, "%s: -s illegal with -r option\n", ErrorHeader());
+ exit(1);
+ }
+ GetArg(setup_option, "usage: -S<filename>", FALSE);
+ break;
+
+
case 'n':
if( raw_seen )
@@ -1615,7 +3801,7 @@ int main(int argc, char *argv[])
{ fprintf(err_fp, "%s: -u illegal with -r option\n", ErrorHeader());
exit(1);
}
- PrintUsage(err_fp);
+ PrintUsage();
exit(0);
break;
@@ -1627,48 +3813,22 @@ int main(int argc, char *argv[])
exit(1);
}
GetArg(language_option, "usage: -l<language>", FALSE);
- for( i = 0; languages[i] != (LANGUAGE *) NULL; i++ )
- {
- for( j = 0; languages[i]->names[j] != (char *) NULL; j++ )
- {
- if( strcmp(languages[i]->names[j], language_option) == 0 )
- break;
- }
- if( languages[i]->names[j] != (char *) NULL )
- break;
- }
- if( languages[i] != (LANGUAGE *) NULL )
+ i = 0; j = 0;
+ while( lang == NO_LANGUAGE && languages[i] != NO_LANGUAGE )
{
- language = languages[i];
+ if( languages[i]->names[j] == (char *) NULL )
+ i++, j = 0;
+ else if( strcmp(languages[i]->names[j], language_option) == 0 )
+ lang = languages[i];
+ else
+ j++;
}
- else
+ if( lang == NO_LANGUAGE )
{
fprintf(err_fp, "%s: unknown language %s\n", ErrorHeader(),
language_option);
exit(1);
}
-
- /* set style unless already done by a -p flag */
- if( style_option == NO_STYLE )
- {
- if( strcmp(language->default_style, "fixed") == 0 )
- { style_option = FIXED_STYLE;
- }
- else if( strcmp(language->default_style, "varying") == 0 )
- { style_option = VARYING_STYLE;
- tab_by_spacing = FALSE;
- }
- else if( strcmp(language->default_style, "symbol") == 0 )
- { style_option = SYMBOL_STYLE;
- tab_by_spacing = FALSE;
- }
- else
- { fprintf(err_fp,
- "%s internal error: bad default print style for language %s\n",
- ErrorHeader(), language_option);
- abort();
- }
- }
break;
@@ -1695,7 +3855,7 @@ int main(int argc, char *argv[])
} /* for */
/* make sure we have a language */
- if( language == (LANGUAGE *) NULL )
+ if( lang == NO_LANGUAGE )
{
fprintf(err_fp, "%s: missing -l option\n", ErrorHeader());
exit(0);
@@ -1713,87 +3873,28 @@ int main(int argc, char *argv[])
}
/* process the file */
- SetupTokens(language, err_fp);
+ SetupLanguage(lang);
line_pos = 1;
curr_line[line_pos] = '\n'; /* forces line read */
line_num = 0;
- NextChar(in_fp);
- Process(language, in_fp, out_fp, err_fp, (TOKEN *) NULL);
+ NextChar();
+ Process(lang, (TOKEN *) NULL, "");
}
else if( file_count > 0 )
- {
- int ch;
- char *style_str, *font_str, *size_str, *line_str, *face_str;
- char *tabin_str, *tabout_str;
-
- /* sort out the options' values */
- switch( style_option )
- {
-
- case FIXED_STYLE:
-
- style_str = "fixed";
- face_str = "Base";
- font_str = font_option != NULL ? font_option : "Courier";
- size_str = size_option != NULL ? size_option : "9p";
- line_str = line_option != NULL ? line_option : "1.1fx";
- tabin_str = tabin_option != NULL ? tabin_option : "8";
- tabout_str = tabout_option != NULL ? tabout_option : "8s";
- break;
+ { int ch;
-
- case NO_STYLE:
- case VARYING_STYLE:
-
- style_str = "varying";
- face_str = "Slope";
- font_str = font_option != NULL ? font_option : "Times";
- size_str = size_option != NULL ? size_option : "10p";
- line_str = line_option != NULL ? line_option : "1.1fx";
- tabin_str = tabin_option != NULL ? tabin_option : "8";
- tabout_str = tabout_option != NULL ? tabout_option : "3f";
- break;
-
-
- case SYMBOL_STYLE:
-
- style_str = "symbol";
- face_str = "Slope";
- font_str = font_option != NULL ? font_option : "Times";
- size_str = size_option != NULL ? size_option : "10p";
- line_str = line_option != NULL ? line_option : "1.1fx";
- tabin_str = tabin_option != NULL ? tabin_option : "8";
- tabout_str = tabout_option != NULL ? tabout_option : "3f";
- break;
-
-
- default:
-
- fprintf(err_fp, "%s internal error in -p option\n", ErrorHeader());
- abort();
- break;
- }
-
/* make sure we have an output file */
if( out_fp == (FILE *) NULL )
out_fp = stdout;
/* print the initial @Use clauses etc.*/
- fprintf(out_fp, "%s%s\n", "@Sy", "sInclude { progf }");
fprintf(out_fp, "%s%s\n", "@Sy", "sInclude { doc }");
- fprintf(out_fp, "@Use { @ProgSetup\n");
- fprintf(out_fp, " language { %s }\n", language_option);
- fprintf(out_fp, " style { %s }\n", style_str);
- fprintf(out_fp, " %sfont { %s }\n", style_str, font_str);
- fprintf(out_fp, " %ssize { %s }\n", style_str, size_str);
- fprintf(out_fp, " %sline { %s }\n", style_str, line_str);
- fprintf(out_fp, " %stabin { %s }\n", style_str, tabin_str);
- fprintf(out_fp, " %stabout { %s }\n", style_str, tabout_str);
- fprintf(out_fp, "}\n");
+ if( setup_option != NULL )
+ fprintf(out_fp, "%s%s { %s }\n", "@In", "clude", setup_option);
+ else
+ fprintf(out_fp, "%s%s { %s }\n", "@Sy", "sInclude", lang->setup_file);
fprintf(out_fp, "@Document\n");
- fprintf(out_fp, " @InitialFont { \"%s\" \"%s\" \"%s\" }\n",
- font_str, face_str, size_str);
- fprintf(out_fp, " @InitialBreak { lines \"%s\" nohyphen }\n", line_str);
+ fprintf(out_fp, " @InitialBreak { lines 1.2fx nohyphen }\n");
fprintf(out_fp, "//\n");
fprintf(out_fp, "%s%s\n", "@Text @Be", "gin");
@@ -1805,7 +3906,7 @@ int main(int argc, char *argv[])
if( in_fp == NULL )
{ fprintf(err_fp, "%s: skipping input file %s (cannot open)\n",
ErrorHeader(), file_names[i]);
- continue;
+ continue;
}
strcpy(file_name, file_names[i]);
@@ -1817,11 +3918,24 @@ int main(int argc, char *argv[])
file_names[i]);
/* print file name and contents (don't format, let Lout call back) */
- /* this string has been disguised so as not to fool progwlout! */
- fprintf(out_fp, "%s%s%s\n", "@P", "rog @Be", "gin");
+ /* this string has been disguised to avoid recognition by prg2lout */
+ fprintf(out_fp, "%s\n", lang->lang_sym);
+ if( style_option != NULL )
+ fprintf(out_fp, " style { %s }\n", style_option );
+ if( font_option != NULL )
+ fprintf(out_fp, " font { %s }\n", font_option );
+ if( size_option != NULL )
+ fprintf(out_fp, " size { %s }\n", size_option );
+ if( line_option != NULL )
+ fprintf(out_fp, " line { %s }\n", line_option );
+ if( tabin_option != NULL )
+ fprintf(out_fp, " tabin { %s }\n", tabin_option );
+ if( tabout_option != NULL )
+ fprintf(out_fp, " tabout { %s }\n", tabout_option );
+ fprintf(out_fp, "%s%s\n", "@Be", "gin");
while( (ch = getc(in_fp)) != EOF )
- putc(ch, out_fp);
- fprintf(out_fp, "%s%s%s\n", "@E", "nd @P", "rog");
+ putc(ch, out_fp);
+ fprintf(out_fp, "%s%s %s\n", "@E", "nd", lang->lang_sym);
}
/* finish off whole input */
diff --git a/whatsnew b/whatsnew
index dae0477..614c318 100644
--- a/whatsnew
+++ b/whatsnew
@@ -237,6 +237,12 @@ Changes and new features introduced in Version 3.19 [9 March 2000]
Running headers in indexes
Two extra @Eq symbols: triangleup, triangledown
+Changes and new features introduced in Version 3.20 [8 April 2000]
+
+ Bug fixes (including the internal error that was dumping core recently)
+ Multi-line style changes (@I, @Colour etc.) now work in lines @Break mode
+ @Perl symbol for Perl programming language formatting (includes Pod)
+
Things that ought to be done but haven't been done yet
PDF-like features in PostScript output
@@ -244,4 +250,4 @@ Things that ought to be done but haven't been done yet
Review Uwe's proposal for moving word row marks to the baseline
Jeff Kingston
-9 March 2000
+8 April 2000
diff --git a/z01.c b/z01.c
index f276900..d0321e5 100644
--- a/z01.c
+++ b/z01.c
@@ -1,6 +1,6 @@
/*@z01.c:Supervise:StartSym, AllowCrossDb, Encapsulated, etc.@****************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z02.c b/z02.c
index 4f787f6..0237f8d 100644
--- a/z02.c
+++ b/z02.c
@@ -1,6 +1,6 @@
/*@z02.c:Lexical Analyser:Declarations@***************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z03.c b/z03.c
index caa10d1..68366a9 100644
--- a/z03.c
+++ b/z03.c
@@ -1,6 +1,6 @@
/*@z03.c:File Service:Declarations, no_fpos@******************************** */
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z04.c b/z04.c
index e41fb2b..3cf2a49 100644
--- a/z04.c
+++ b/z04.c
@@ -1,6 +1,6 @@
/*@z04.c:Token Service:NewToken(), CopyTokenList()@***************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z05.c b/z05.c
index 556844e..9830c39 100644
--- a/z05.c
+++ b/z05.c
@@ -1,6 +1,6 @@
/*@z05.c:Read Definitions:ReadFontDef()@**************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z06.c b/z06.c
index 967bef4..60492ca 100644
--- a/z06.c
+++ b/z06.c
@@ -1,6 +1,6 @@
/*@z06.c:Parser:PushObj(), PushToken(), etc.@*********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z07.c b/z07.c
index f9ab995..f8977e4 100644
--- a/z07.c
+++ b/z07.c
@@ -1,6 +1,6 @@
/*@z07.c:Object Service:SplitIsDefinite(), DisposeObject()@*******************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z08.c b/z08.c
index 99efc43..3bc3d02 100644
--- a/z08.c
+++ b/z08.c
@@ -1,6 +1,6 @@
/*@z08.c:Object Manifest:ReplaceWithSplit()@**********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
@@ -789,6 +789,8 @@ OBJECT *enclose, BOOLEAN fcr)
Error(8, 19, "filter parameter of %s symbol is not simple",
FATAL, &fpos(command), SymName(enclosing(sym)));
y = FilterExecute(x, string(command), res_env);
+ debug2(DFH, D, "after \"%s\", will manifest result with style %s",
+ string(command), EchoStyle(style));
DisposeObject(command);
ReplaceNode(y, x);
DisposeObject(x);
@@ -1241,12 +1243,15 @@ OBJECT *enclose, BOOLEAN fcr)
}
/* implement FILL_OFF break option if required */
+ /* *** this has been moved now to MinSize, z12.c *** */
+
+ /* ***
if( ok && multiline && fill_style(*style) == FILL_UNDEF )
Error(8, 25, "missing %s symbol or option", FATAL, &fpos(x), KW_BREAK);
if( ok && multiline && fill_style(*style) == FILL_OFF )
{ OBJECT prev_acat, new_acat; BOOLEAN jn;
- /* compress any ACAT children of ACAT x */
+ %* compress any ACAT children of ACAT x *%
for( link = x; NextDown(link) != x; link = NextDown(link) )
{ Child(y, NextDown(link));
if( type(y) == ACAT )
@@ -1256,7 +1261,7 @@ OBJECT *enclose, BOOLEAN fcr)
}
}
- /* do line breaks now */
+ %* do line breaks now *%
prev_acat = x;
New(x, VCAT);
adjust_cat(x) = FALSE;
@@ -1305,7 +1310,7 @@ OBJECT *enclose, BOOLEAN fcr)
}
}
- /* remove any singleton ACAT objects under x, if they are VCATs */
+ %* remove any singleton ACAT objects under x, if they are VCATs *%
for( link = Down(x); link != x; link = NextDown(link) )
{ Child(y, link);
if( type(y) == ACAT && Down(y) == LastDown(y) )
@@ -1317,6 +1322,7 @@ OBJECT *enclose, BOOLEAN fcr)
}
}
}
+ *** */
ReplaceWithSplit(x, bthr, fthr);
break;
@@ -1404,7 +1410,7 @@ OBJECT *enclose, BOOLEAN fcr)
y = Manifest(y, env, style, nbt, nft, &ntarget, crs, FALSE, FALSE,
&nenclose, fcr);
y = ReplaceWithTidy(y, FALSE);
- GetGap(y, style, &line_gap(save_style(x)), &res_gap);
+ GetGap(y, style, &line_gap(save_style(x)), &res_inc);
/* now the right parameter */
Child(y, LastDown(x));
diff --git a/z09.c b/z09.c
index 1bcd77f..6613b52 100644
--- a/z09.c
+++ b/z09.c
@@ -1,6 +1,6 @@
/*@z09.c:Closure Expansion:SearchEnv()@***************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z10.c b/z10.c
index 1dc5b78..fcc3e66 100644
--- a/z10.c
+++ b/z10.c
@@ -1,6 +1,6 @@
/*@z10.c:Cross References:CrossInit(), CrossMake()@***************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z11.c b/z11.c
index ae1b437..754036f 100644
--- a/z11.c
+++ b/z11.c
@@ -1,6 +1,6 @@
/*@z11.c:Style Service:EchoStyle()@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
@@ -44,8 +44,8 @@ FULL_CHAR *EchoStyle(STYLE *style)
static char *hyphwords[] = { "hyph_undef", "hyph_off", "hyph_on" };
static char *fillwords[] = { "fill_undef", "fill_off", "fill_on" };
static char *spacewords[] = { "lout", "comp", "troff", "tex" };
- static char *displaywords[] = { "undef", "adjust", "outdent", "left",
- "centre", "right", "do" };
+ static char *displaywords[] = { "undef", "adjust", "outdent", "oragged",
+ "left", "centre", "right", "do" };
StringCopy(res, AsciiToFull("["));
StringCat(res, EchoCatOp(VCAT,mark(line_gap(*style)),join(line_gap(*style))));
@@ -228,7 +228,8 @@ static void changebreak(STYLE *style, OBJECT x)
void BreakChange(STYLE *style, OBJECT x)
{ OBJECT link, y;
- debug2(DSS, D, "BreakChange(%s, %s)", EchoStyle(style), EchoObject(x));
+ debug3(DSS, D, "BreakChange(%s, %s at %s)", EchoStyle(style),
+ EchoObject(x), EchoFilePos(&fpos(x)));
switch( type(x) )
{
case NULL_CLOS: break;
diff --git a/z12.c b/z12.c
index 16789a5..b7b4d08 100644
--- a/z12.c
+++ b/z12.c
@@ -1,6 +1,6 @@
/*@z12.c:Size Finder:MinSize()@***********************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
@@ -28,6 +28,8 @@
/* */
/*****************************************************************************/
#include "externs.h"
+#define line_breaker(g) \
+ (vspace(g) > 0 || (units(gap(g)) == FRAME_UNIT && width(gap(g)) > FR))
#define IG_LOOKING 0
#define IG_NOFILE 1
#define IG_BADFILE 2
@@ -802,6 +804,90 @@ OBJECT MinSize(OBJECT x, int dim, OBJECT *extras)
case ACAT:
+
+ if( fill_style(save_style(x)) == FILL_OFF )
+ { OBJECT new_line, g, z, res; BOOLEAN jn;
+
+ /* convert ACAT to VCAT of lines if more than one line */
+ /* first, compress all ACAT children */
+ for( link = x; NextDown(link) != x; link = NextDown(link) )
+ { Child(y, NextDown(link));
+ if( type(y) == ACAT )
+ {
+ TransferLinks(Down(y), y, NextDown(link));
+ DisposeChild(Up(y));
+ link = PrevDown(link);
+ }
+ }
+
+ /* check each definite subobject in turn for a linebreak preceding */
+ FirstDefinite(x, link, y, jn);
+ if( link != x )
+ {
+ res = nilobj;
+ NextDefiniteWithGap(x, link, y, g, jn);
+ while( link != x )
+ {
+ /* check whether we need to break the paragraph here at g */
+ if( mode(gap(g)) != NO_MODE && line_breaker(g) )
+ {
+ /* if this is our first break, build res */
+ if( res == nilobj )
+ {
+ New(res, VCAT);
+ adjust_cat(res) = FALSE;
+ ReplaceNode(res, x);
+ }
+
+ /* make new line of stuff up to g and append it to res */
+ New(new_line, ACAT);
+ TransferLinks(NextDown(x), Up(g), new_line);
+ StyleCopy(save_style(new_line), save_style(x));
+ Link(res, new_line);
+
+ /* may need to insert space at start of remainder */
+ if( hspace(g) > 0 )
+ {
+ /* make an empty word to occupy the first spot */
+ z = MakeWord(WORD, STR_EMPTY, &fpos(g));
+ word_font(z) = font(save_style(x));
+ word_colour(z) = colour(save_style(x));
+ word_outline(z) = outline(save_style(x));
+ word_language(z) = language(save_style(x));
+ word_hyph(z) = hyph_style(save_style(x)) == HYPH_ON;
+ underline(z) = UNDER_OFF;
+ Link(Down(x), z);
+
+ /* follow the empty word with a gap of the right width */
+ New(z, GAP_OBJ);
+ hspace(z) = hspace(g);
+ vspace(z) = 0;
+ underline(z) = UNDER_OFF;
+ GapCopy(gap(z), space_gap(save_style(x)));
+ width(gap(z)) *= hspace(z);
+ Link(NextDown(Down(x)), z);
+ }
+
+ /* append a gap to res (recycle g) */
+ MoveLink(Up(g), res, PARENT);
+ GapCopy(gap(g), line_gap(save_style(x)));
+ width(gap(g)) *= find_max(1, vspace(g));
+
+ }
+ NextDefiniteWithGap(x, link, y, g, jn);
+ }
+
+ /* at end of loop, if we have a res, leftover last line is linked */
+ if( res != nilobj )
+ {
+ Link(res, x);
+ x = res;
+ }
+ }
+ }
+ /* *** NB NO BREAK *** */
+
+
case HCAT:
case VCAT:
diff --git a/z13.c b/z13.c
index b853ab5..733daa5 100644
--- a/z13.c
+++ b/z13.c
@@ -1,6 +1,6 @@
/*@z13.c:Object Breaking:BreakJoinedGroup()@**********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z14.c b/z14.c
index d2c75ee..9368881 100644
--- a/z14.c
+++ b/z14.c
@@ -1,6 +1,6 @@
/*@z14.c:Fill Service:Declarations@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z15.c b/z15.c
index d79f677..f5cc49f 100644
--- a/z15.c
+++ b/z15.c
@@ -1,6 +1,6 @@
/*@z15.c:Size Constraints:MinConstraint(), EnlargeToConstraint()@*************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z16.c b/z16.c
index 184e710..00a025c 100644
--- a/z16.c
+++ b/z16.c
@@ -1,6 +1,6 @@
/*@z16.c:Size Adjustment:SetNeighbours(), CatAdjustSize()@********************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z17.c b/z17.c
index 3e17148..de3e558 100644
--- a/z17.c
+++ b/z17.c
@@ -1,6 +1,6 @@
/*@z17.c:Gap Widths:GetGap()@*************************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
@@ -58,7 +58,7 @@ void GetGap(OBJECT x, STYLE *style, GAP *res_gap, unsigned *res_inc)
{ int w; float num;
FULL_CHAR *str;
- debug2(DGW, DD, "GetGap( %s, %s, res_gap, res_inc )",
+ debug2(DGW, D, "GetGap( %s, %s, res_gap, res_inc )",
EchoObject(x), EchoStyle(style));
nobreak(*res_gap) = FALSE;
@@ -68,14 +68,14 @@ void GetGap(OBJECT x, STYLE *style, GAP *res_gap, unsigned *res_inc)
/* make sure we have a WORD or QWORD argument */
if( !is_word(type(x)) )
{ Error(17, 1, "gap is not a simple word", WARN, &fpos(x));
- debug1(DGW, DD, "GetGap failing (x = %s)", EchoObject(x));
+ debug1(DGW, D, "GetGap failing (x = %s)", EchoObject(x));
return;
}
str = string(x);
/* if word is empty, return 0ie */
if( *str == '\0' )
- { debug0(DGW, DD, "GetGap returning (null word)");
+ { debug0(DGW, D, "GetGap returning (null word)");
return;
}
@@ -88,7 +88,7 @@ void GetGap(OBJECT x, STYLE *style, GAP *res_gap, unsigned *res_inc)
{ Error(17, 2, "width missing from %s", WARN, &fpos(x), string(x));
Error(17, 3, "%s, %s and %s must be enclosed in double quotes",
WARN, &fpos(x), KW_VCAT_NJ, KW_HCAT_NJ, KW_ACAT_NJ);
- debug0(DGW, DD, "GetGap failing (width missing)");
+ debug0(DGW, D, "GetGap failing (width missing)");
return;
}
while( numericchar(*str) ) str++;
@@ -118,7 +118,7 @@ void GetGap(OBJECT x, STYLE *style, GAP *res_gap, unsigned *res_inc)
default: Error(17, 4, "units letter missing from %s",
WARN, &fpos(x), string(x));
- debug0(DGW, DD, "GetGap failing (units letter missing)");
+ debug0(DGW, D, "GetGap failing (units letter missing)");
return;
}
@@ -142,7 +142,7 @@ void GetGap(OBJECT x, STYLE *style, GAP *res_gap, unsigned *res_inc)
default: Error(17, 7, "unknown gap mode in %s",
WARN, &fpos(x), string(x));
- debug0(DGW, DD, "GetGap failing (spacing mode)");
+ debug0(DGW, D, "GetGap failing (spacing mode)");
return;
}
@@ -160,7 +160,7 @@ void GetGap(OBJECT x, STYLE *style, GAP *res_gap, unsigned *res_inc)
if( *str != '\0' )
Error(17, 8, "invalid width or gap %s", WARN, &fpos(x), string(x));
- debug2(DGW, DD, "GetGap returning (res_gap = %s, res_inc = %s)",
+ debug2(DGW, D, "GetGap returning (res_gap = %s, res_inc = %s)",
EchoGap(res_gap), Image( (int) *res_inc) );
} /* end GetGap */
@@ -352,7 +352,7 @@ FULL_LENGTH ActualGap(FULL_LENGTH prevf, FULL_LENGTH b, FULL_LENGTH f,
break;
}
res = find_min(MAX_FULL_LENGTH, w2);
- debug7(DGW, D, "ActualGap( _,%s %s %s,%s; frame_size %s, mk %s ) = %s",
+ debug7(DGW, DD, "ActualGap( _,%s %s %s,%s; frame_size %s, mk %s ) = %s",
EchoLength(prevf), EchoGap(xgap), EchoLength(b), EchoLength(f),
EchoLength(frame_size), EchoLength(mk), EchoLength(res));
return res;
diff --git a/z18.c b/z18.c
index 5063a06..e9489a5 100644
--- a/z18.c
+++ b/z18.c
@@ -1,6 +1,6 @@
/*@z18.c:Galley Transfer:Declarations@****************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z19.c b/z19.c
index f9262ab..71529ea 100644
--- a/z19.c
+++ b/z19.c
@@ -1,6 +1,6 @@
/*@z19.c:Galley Attaching:DetachGalley()@*************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z20.c b/z20.c
index e6e1492..6ae1274 100644
--- a/z20.c
+++ b/z20.c
@@ -1,6 +1,6 @@
/*@z20.c:Galley Flushing:DebugInnersNames()@**********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z21.c b/z21.c
index 21fb4d4..aac03f8 100644
--- a/z21.c
+++ b/z21.c
@@ -1,6 +1,6 @@
/*@z21.c:Galley Maker:SizeGalley()@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z22.c b/z22.c
index acb3a69..0e8fed7 100644
--- a/z22.c
+++ b/z22.c
@@ -1,6 +1,6 @@
/*@z22.c:Galley Service:Interpose()@******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
@@ -420,6 +420,7 @@ void HandleHeader(OBJECT hd, OBJECT link, OBJECT header)
MoveLink(Down(header), g, PARENT);
Child(z, Down(g));
GapCopy(gap(g), line_gap(save_style(header)));
+ mark(gap(g)) = join(gap(g)) = FALSE;
/* move header and gap into headers() */
MoveLink(LastDown(header), headers(hd), PARENT);
diff --git a/z23.c b/z23.c
index 177fa3c..5690838 100644
--- a/z23.c
+++ b/z23.c
@@ -1,6 +1,6 @@
/*@z23.c:Galley Printer:ScaleFactor()@****************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z24.c b/z24.c
index c587bbb..85fa25a 100644
--- a/z24.c
+++ b/z24.c
@@ -1,6 +1,6 @@
/*@z24.c:Print Service:PrintInit()@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z25.c b/z25.c
index fee43d9..34a89e1 100644
--- a/z25.c
+++ b/z25.c
@@ -1,6 +1,6 @@
/*@z25.c:Object Echo:aprint(), cprint(), printnum()@**************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z26.c b/z26.c
index d018a57..be7dd0d 100644
--- a/z26.c
+++ b/z26.c
@@ -1,6 +1,6 @@
/*@z26.c:Echo Service:BeginString()@******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z27.c b/z27.c
index 4785a6e..c97ca4b 100644
--- a/z27.c
+++ b/z27.c
@@ -1,6 +1,6 @@
/*@z27.c:Debug Service:Debug flags@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z28.c b/z28.c
index 85b4b41..b0b23e4 100644
--- a/z28.c
+++ b/z28.c
@@ -1,6 +1,6 @@
/*@z28.c:Error Service:ErrorInit(), ErrorSeen()@******************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z29.c b/z29.c
index 283ee7f..54147b8 100644
--- a/z29.c
+++ b/z29.c
@@ -1,6 +1,6 @@
/*@z29.c:Symbol Table:Declarations, hash()@***********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z30.c b/z30.c
index 59cd591..4df2f88 100644
--- a/z30.c
+++ b/z30.c
@@ -1,6 +1,6 @@
/*@z30.c:Symbol uses:InsertUses()@********************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z31.c b/z31.c
index a3d8bda..727f3c7 100644
--- a/z31.c
+++ b/z31.c
@@ -1,6 +1,6 @@
/*@z31.c:Memory Allocator:DebugMemory()@**************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z32.c b/z32.c
index 98ae4ae..e7d67c7 100644
--- a/z32.c
+++ b/z32.c
@@ -1,6 +1,6 @@
/*@z32.c:Counter Service:Next()@**********************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z33.c b/z33.c
index be65fc4..fe51373 100644
--- a/z33.c
+++ b/z33.c
@@ -1,6 +1,6 @@
/*@z33.c:Database Service:OldCrossDb(), NewCrossDb(), SymToNum()@*************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z34.c b/z34.c
index 3d7e770..73dcef5 100644
--- a/z34.c
+++ b/z34.c
@@ -1,6 +1,6 @@
/*@z34.c:Rotation Service:Declarations@***************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z35.c b/z35.c
index b637cce..bd76b13 100644
--- a/z35.c
+++ b/z35.c
@@ -1,6 +1,6 @@
/*@z35.c:Time Keeper: MomentSym(), TimeString()@******************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z36.c b/z36.c
index 2f3f669..08b1c66 100644
--- a/z36.c
+++ b/z36.c
@@ -1,6 +1,6 @@
/*@z36.c:Hyphenation: Declarations@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z37.c b/z37.c
index b541475..14f2f94 100644
--- a/z37.c
+++ b/z37.c
@@ -1,6 +1,6 @@
/*@z37.c:Font Service:Declarations@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z38.c b/z38.c
index e08f2c2..90d409a 100644
--- a/z38.c
+++ b/z38.c
@@ -1,6 +1,6 @@
/*@z38.c:Character Mappings:Declarations@*************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z39.c b/z39.c
index 6d86278..fe23f76 100644
--- a/z39.c
+++ b/z39.c
@@ -1,6 +1,6 @@
/*@z39.c:String Handler:AsciiToFull(), StringEqual(), etc.@*******************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z40.c b/z40.c
index 02cc61d..25ce6cb 100644
--- a/z40.c
+++ b/z40.c
@@ -1,6 +1,6 @@
/*@z40.c:Filter Handler:FilterInit()@*****************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
@@ -241,6 +241,7 @@ void FilterWrite(OBJECT x, FILE *fp, int *linecount)
void FilterScavenge(BOOLEAN all)
{ OBJECT y, link, nextlink;
+ ifdebug(DFH, D, return);
debug1(DFH, D, "FilterScavenge(%s)", bool(all));
for( link = Down(filter_active); link != filter_active; link = nextlink )
{ Child(y, link);
diff --git a/z41.c b/z41.c
index 3a3b68a..ae49cdf 100644
--- a/z41.c
+++ b/z41.c
@@ -1,6 +1,6 @@
/*@z41.c:Object Input-Output:AppendToFile, ReadFromFile@**********************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z42.c b/z42.c
index 046f8b2..889fd85 100644
--- a/z42.c
+++ b/z42.c
@@ -1,6 +1,6 @@
/*@z42.c:Colour Service:ColourChange, ColourCommand@**************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z43.c b/z43.c
index ca5562d..0b256d9 100644
--- a/z43.c
+++ b/z43.c
@@ -1,6 +1,6 @@
/*@z43.c:Language Service:LanguageChange, LanguageString@*********************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z44.c b/z44.c
index 1fff7a5..b20c42d 100644
--- a/z44.c
+++ b/z44.c
@@ -1,6 +1,6 @@
/*@z44.c:Vertical Hyphenation:VerticalHyphenate()@****************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z45.c b/z45.c
index 5a05897..698386b 100644
--- a/z45.c
+++ b/z45.c
@@ -1,6 +1,6 @@
/*@z45.c:External Sort:SortFile()@********************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z46.c b/z46.c
index 5a32d22..aeab315 100644
--- a/z46.c
+++ b/z46.c
@@ -1,6 +1,6 @@
/*@z46.c:Optimal Galleys:FindOptimize()@**************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z47.c b/z47.c
index fe2e0b9..d55349c 100644
--- a/z47.c
+++ b/z47.c
@@ -1,6 +1,6 @@
/*@z47.c:Environment Table:EnvReadRetrieve()@*********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */
diff --git a/z48.c b/z48.c
index 71e1e84..861394a 100644
--- a/z48.c
+++ b/z48.c
@@ -1,6 +1,6 @@
/*@z48.c:PDF back end@********************************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.19) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.20) */
/* COPYRIGHT (C) 1991, 2000 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@cs.usyd.edu.au) */