aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeffrey H. Kingston <jeff@it.usyd.edu.au>2010-09-14 20:41:31 +0000
committerJeffrey H. Kingston <jeff@it.usyd.edu.au>2010-09-14 20:41:31 +0000
commit3c59753b94d0425e7ddcc4b57b11dfb283d0c144 (patch)
treed405802ec35c185908c71f0fbedc3a237758b665
parentf7f41daa27e7ccff0aa184cc81e80b9c96e3d761 (diff)
downloadlout-3c59753b94d0425e7ddcc4b57b11dfb283d0c144.tar.gz
Lout 3.36.
git-svn-id: http://svn.savannah.nongnu.org/svn/lout/trunk@41 9365b830-b601-4143-9ba8-b4a8e2c3339c
-rw-r--r--README6
-rw-r--r--blurb27
-rw-r--r--blurb.short14
-rw-r--r--doc/design/README2
-rw-r--r--doc/design/outfile.ps36
-rw-r--r--doc/expert/README2
-rw-r--r--doc/expert/all4
-rw-r--r--doc/expert/det_lexi15
-rw-r--r--doc/expert/outfile.ps736
-rw-r--r--doc/expert/pre_conc2
-rw-r--r--doc/expert/preface2
-rw-r--r--doc/slides/README2
-rw-r--r--doc/slides/outfile.ps30
-rw-r--r--doc/user/README12
-rw-r--r--doc/user/all5
-rw-r--r--doc/user/ap_byp15
-rw-r--r--doc/user/bas_hyph4
-rw-r--r--doc/user/equ1
-rw-r--r--doc/user/equ_math212
-rw-r--r--doc/user/equ_spac1
-rw-r--r--doc/user/preface5
-rw-r--r--doc/user/str_indx22
-rw-r--r--externs.h9
-rw-r--r--gnu.gpl344
-rw-r--r--gpl.txt674
-rw-r--r--include/README2
-rw-r--r--include/bsf47
-rw-r--r--include/dsf8
-rw-r--r--include/haskellf24
-rw-r--r--include/math30
-rw-r--r--include/mathf2114
-rw-r--r--include/save_bsf1826
-rw-r--r--makefile2
-rw-r--r--prg2lout.c25
-rw-r--r--whatsnew13
-rw-r--r--z01.c4
-rw-r--r--z02.c4
-rw-r--r--z03.c4
-rw-r--r--z04.c4
-rw-r--r--z05.c4
-rw-r--r--z06.c4
-rw-r--r--z07.c4
-rw-r--r--z08.c4
-rw-r--r--z09.c4
-rw-r--r--z10.c4
-rw-r--r--z11.c4
-rw-r--r--z12.c4
-rw-r--r--z13.c4
-rw-r--r--z14.c63
-rw-r--r--z15.c8
-rw-r--r--z16.c4
-rw-r--r--z17.c4
-rw-r--r--z18.c4
-rw-r--r--z19.c4
-rw-r--r--z20.c4
-rw-r--r--z21.c4
-rw-r--r--z22.c4
-rw-r--r--z23.c4
-rw-r--r--z24.c4
-rw-r--r--z25.c4
-rw-r--r--z26.c4
-rw-r--r--z27.c4
-rw-r--r--z28.c4
-rw-r--r--z29.c4
-rw-r--r--z30.c4
-rw-r--r--z31.c4
-rw-r--r--z32.c4
-rw-r--r--z33.c4
-rw-r--r--z34.c6
-rw-r--r--z35.c4
-rw-r--r--z36.c4
-rw-r--r--z37.c4
-rw-r--r--z38.c4
-rw-r--r--z39.c4
-rw-r--r--z40.c4
-rw-r--r--z41.c4
-rw-r--r--z42.c4
-rw-r--r--z43.c4
-rw-r--r--z44.c4
-rw-r--r--z45.c4
-rw-r--r--z46.c4
-rw-r--r--z47.c4
-rw-r--r--z48.c13
-rw-r--r--z49.c15
-rw-r--r--z50.c10
-rw-r--r--z51.c4
-rw-r--r--z52.c4
87 files changed, 5582 insertions, 990 deletions
diff --git a/README b/README
index 069a425..20b0bac 100644
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35)
+THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36)
BASSER LOUT VERSION 3 COPYRIGHT (C) 1994, 2007 Jeffrey H. Kingston
Jeffrey H. Kingston
@@ -11,7 +11,7 @@ Fax: 61 2 692 3838
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)
+the Free Software Foundation; either Version 3, or (at your option)
any later version.
This program is distributed in the hope that it will be useful,
@@ -41,7 +41,7 @@ and the following files:
blurb A news blurb describing Lout
blurb.short A short news blurb describing Lout
externs.h z*.c Lout source code
- gnu.gpl A copy of the GNU General Public License
+ gpl.txt A copy of the GNU General Public License
maillist Information about a public mailing list about Lout
makefile A makefile for installing Lout
notes_dsc Notes on the degree of Lout's conformance with the
diff --git a/blurb b/blurb
index 94b140c..b53f519 100644
--- a/blurb
+++ b/blurb
@@ -1,9 +1,9 @@
- THE LOUT DOCUMENT FORMATTING SYSTEM, VERSION 3.35
+ THE LOUT DOCUMENT FORMATTING SYSTEM, VERSION 3.36
-Version 3.35 of the Lout document formatting system is now available
+Version 3.36 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
+document similar in style to LaTeX and produces a PostScript or
plain text output file.
Lout offers an unprecedented range of advanced features, including
@@ -11,19 +11,19 @@ optimal paragraph and page breaking, automatic hyphenation, PostScript
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 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
-project that went back to the beginning.
+documents including hyphenation (most European languages are supported),
+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 project that
+went back to the beginning.
Lout is written in highly portable ANSI C. It is distributed under the
GNU public license and is obtainable from
- ftp://ftp.it.usyd.edu.au/jeff/lout/lout-3.35.tar.gz
+ ftp://ftp.it.usyd.edu.au/jeff/lout/lout-3.36.tar.gz
-In other words, in a gzipped tar file called "lout-3.35.tar.gz" in the
+In other words, in a gzipped tar file called "lout-3.36.tar.gz" in the
"jeff/lout" subdirectory of the home directory of "ftp ftp.it.usyd.edu.au"
with login name "ftp" or "anonymous" using any non-empty password. The
distribution contains
@@ -33,8 +33,7 @@ distribution contains
* Standard library packages of definitions for ordinary documents,
technical reports, books, overhead transparencies, stand-alone
illustrations, plain text documents, equations, tables, diagrams,
- graphs, program formatting (C, C++, Eiffel, Blue, Perl, Pod, Pascal,
- and Modula - other languages are easy to add)
+ graphs, and computer program formatting for most common languages
* Complete documentation for all these features consisting of a
User's Guide plus an Expert's Guide
@@ -44,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.it.usyd.edu.au/jeff/lout/lout-3.35-user.ps.gz
+ ftp://ftp.it.usyd.edu.au/jeff/lout/lout-3.36-user.ps.gz
Lout was created by Jeffrey H. Kingston (jeff@it.usyd.edu.au) of the
School of Information Technologies at the University of Sydney.
diff --git a/blurb.short b/blurb.short
index a4e8d8a..dc8ef22 100644
--- a/blurb.short
+++ b/blurb.short
@@ -1,19 +1,19 @@
THE LOUT DOCUMENT FORMATTING SYSTEM
-Lout is a document formatting system similar in style to LaTeX. It
-offers a very full range of features, including PostScript, PDF, and
+Lout is a document formatting system similar in style to LaTeX.
+It offers a very full range of features, including PostScript and
plain text output, optimal paragraph and page breaking, automatic
hyphenation, PostScript 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
-computer programs, and more. Lout may be extended by writing definitions
-which are much simpler than the equivalent troff of TeX macros.
+European languages are supported), formatting of 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.
-It is distributed under the GNU public license. Its primary web site is
+Lout is written in highly portable ANSI C, runs on most platforms, and
+is distributed under the GNU public license. Its primary web site is
ftp://ftp.it.usyd.edu.au/jeff/lout/
diff --git a/doc/design/README b/doc/design/README
index d303be8..075fce6 100644
--- a/doc/design/README
+++ b/doc/design/README
@@ -23,4 +23,4 @@ messages (although changing the paper size might
produce one or two benign ones).
Jeffrey H. Kingston
-12 April 2007
+27 July 2007
diff --git a/doc/design/outfile.ps b/doc/design/outfile.ps
index 8592134..1be8302 100644
--- a/doc/design/outfile.ps
+++ b/doc/design/outfile.ps
@@ -1,6 +1,6 @@
%!PS-Adobe-3.0
-%%Creator: Basser Lout Version 3.35 (April 2007)
-%%CreationDate: Thu Apr 12 20:10:26 2007
+%%Creator: Basser Lout Version 3.36 (July 2007)
+%%CreationDate: Fri Jul 27 08:29:48 2007
%%DocumentData: Binary
%%DocumentNeededResources: (atend)
%%DocumentSuppliedResources: (atend)
@@ -6690,13 +6690,13 @@ grestore
2662 3918(f)m 240 fnt4 2823 3910(\))m 2973(\255)s 240 fnt3
3194 3918(width)m 240 fnt4 3733 3910(\()m 240 fnt3 3817 3918(i)m
240 fnt4 3892 3910(\))m
-[ /Dest /LOUT12_1659_s2_4_1 /DEST pdfmark
+[ /Dest /LOUT12_1692_s2_4_1 /DEST pdfmark
240 fnt3 480 3367(y)m 240 fnt4
666 3359(=)m 240 fnt3 879 3367(width)m 240 fnt4 1418 3359(\()m
240 fnt3 1502 3367(d)m 240 fnt4 1688 3359(\))m 1838(\255)s
240 fnt3 2059 3367(width)m 240 fnt4 2598 3359(\()m 240 fnt3
2682 3367(g)m 240 fnt4 2808 3359(\))m
-[ /Dest /LOUT12_1659_s2_4_2 /DEST pdfmark
+[ /Dest /LOUT12_1692_s2_4_2 /DEST pdfmark
240 fnt3 480 2816(z)m
240 fnt4 655 2808(=)m 240 fnt3 868 2816(width)m 240 fnt4
1407 2808(\()m 240 fnt3 1491 2816(b)m 240 fnt4 1617 2808(\))m
@@ -6704,7 +6704,7 @@ grestore
240 fnt3 2611 2816(e)m 240 fnt4 2722 2808(\))m 2872(\255)s
240 fnt3 3093 2816(width)m 240 fnt4 3632 2808(\()m 240 fnt3
3716 2816(h)m 240 fnt4 3843 2808(\))m
-[ /Dest /LOUT12_1659_s2_4_3 /DEST pdfmark
+[ /Dest /LOUT12_1692_s2_4_3 /DEST pdfmark
240 fnt1 0 2312(It)m
224(seems)s 878(clear)s 1420(that)s 240 fnt3 1857 2314(y)m
240 fnt1 2038 2312(at)m 2289(least)s 2805(must)s 3349(appear)s
@@ -12363,7 +12363,7 @@ grestore
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
-[ /Dest /LOUT12_1659_s7_0_1 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_1 /DEST pdfmark
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
@@ -12371,7 +12371,7 @@ grestore
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
-[ /Dest /LOUT12_1659_s7_0_2 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_2 /DEST pdfmark
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
@@ -12387,7 +12387,7 @@ grestore
1388(for)s 1726(non-)s 240 fnt3 2154 10063(ftp)m 240 fnt1
2459 10061(sites.)m 3047(All)s 3407(enquiries)s 4334(to)s 4573(jef)s 6(f@cs.su.oz.au.)k
-[ /Dest /LOUT12_1659_s7_0_3 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_3 /DEST pdfmark
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
@@ -12395,14 +12395,14 @@ grestore
2554 9272(Computing)m 3673(Surve)s 7(ys)k 240 fnt2 4465 9269(14)m
240 fnt1 4699 9270(,)m 4806(417\211472)s 5700(\(1982\))s 6327(.)s
-[ /Dest /LOUT12_1659_s7_0_4 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_4 /DEST pdfmark
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 fnt3 480 8479(Communications)m 2158(of)s 2439(the)s
2784(A)s 7(CM)k 240 fnt2 3351 8476(18)m 240 fnt1
3585 8477(,)m 3692(182\211193)s 4576(\(1975\))s 5203(.)s
-[ /Dest /LOUT12_1659_s7_0_5 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_5 /DEST pdfmark
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
@@ -12412,7 +12412,7 @@ grestore
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
-[ /Dest /LOUT12_1659_s7_0_6 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_6 /DEST pdfmark
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
@@ -12423,19 +12423,19 @@ grestore
7527(\(POPL\),)s 8377(Las)s 8780(V)s 26(e)k 8999(-)s
480 6610(gas)m 868(NV)s 240 fnt1 1192 6608(,)m 1299(pages)s
1895(24\21131)s 2470(,)s 2577(1980)s 3052(.)s
-[ /Dest /LOUT12_1659_s7_0_7 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_7 /DEST pdfmark
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
-[ /Dest /LOUT12_1659_s7_0_8 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_8 /DEST pdfmark
0 5310(9.)m 480(Knuth,)s 1186(Donald)s
1949(E..)s 240 fnt3 2319 5312(The)m 2731(T)s 2882 5264(E)m
3033 5312(XBook)m 240 fnt1 3675 5310(.)m 3839(Addison-W)s 19(esle)k 3(y)k
5419(,)s 5526(1984)s 6000(.)s
-[ /Dest /LOUT12_1659_s7_0_9 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_9 /DEST pdfmark
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
@@ -12446,7 +12446,7 @@ grestore
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
-[ /Dest /LOUT12_1659_s7_0_10 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_10 /DEST pdfmark
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
@@ -12455,7 +12455,7 @@ grestore
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
-[ /Dest /LOUT12_1659_s7_0_11 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_11 /DEST pdfmark
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
@@ -12464,13 +12464,13 @@ grestore
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
-[ /Dest /LOUT12_1659_s7_0_12 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_12 /DEST pdfmark
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 fnt3 5908 2148(IEEE)m
6490(Computer)s 240 fnt1 7453 2146(,)m 7560(7\21119)s 8091(\(1991\))s
8718(.)s
-[ /Dest /LOUT12_1659_s7_0_13 /DEST pdfmark
+[ /Dest /LOUT12_1692_s7_0_13 /DEST pdfmark
grestore
0 0 0 0 240 288 60 1417 -15423 LoutGr2
diff --git a/doc/expert/README b/doc/expert/README
index d062e5e..7dc5b1d 100644
--- a/doc/expert/README
+++ b/doc/expert/README
@@ -21,4 +21,4 @@ which just warns about a figure that is not able to be placed on
the first possible page, and so has to appear on the next page.
Jeffrey H. Kingston
-12 April 2007
+27 July 2007
diff --git a/doc/expert/all b/doc/expert/all
index 447f6aa..088e722 100644
--- a/doc/expert/all
+++ b/doc/expert/all
@@ -11,8 +11,8 @@ Lout
Document Formatting System }
@Author { Jeffrey H. Kingston }
- @Edition { Version 3.35
-April, 2007 }
+ @Edition { Version 3.36
+July, 2007 }
@Publisher { @I { @CopyRight Copyright 1991, 2007, Jeffrey
H. Kingston, School of Information Technologies, The University
of Sydney 2006, Australia.} }
diff --git a/doc/expert/det_lexi b/doc/expert/det_lexi
index f281501..bea7000 100644
--- a/doc/expert/det_lexi
+++ b/doc/expert/det_lexi
@@ -103,16 +103,18 @@ do so. The complete list of predefined identifiers is
@JL "@CurrYUnit"
@JL "@CurrZUnit"
@JL "@Database"
+ @JL "@Enclose"
@JL "@End"
@JL "@EndHeaderComponent"
- @JL "@Enclose"
@JL "@Filter"
@JL "@FilterErr"
@JL "@FilterIn"
@JL "@FilterOut"
@JL "@Font"
+ @JL "@FontDef"
@JL "@ForceGalley"
@JL "@Galley"
+ @JL "@GetContext"
@JL "@Graphic"
@JL "@HAdjust"
@JL "@HContract"
@@ -135,7 +137,6 @@ do so. The complete list of predefined identifiers is
@JL "@LClos"
@JL "@LEnv"
@JL "@LInput"
- @JL "@LVis"
@JL "@LUse"
@JL "@LinkSource"
@JL "@LinkDest"
@@ -159,11 +160,12 @@ do so. The complete list of predefined identifiers is
@JL "@PrependGraphic"
@JL "@RawVerbatim"
@JL "@Rotate"
-} |4.4cx {
- "@Rump"
+ @JL "@Rump"
@JL "@Scale"
@JL "@SetColor"
- @JL "@SetColour"
+} |4.4cx {
+ "@SetColour"
+ @JL "@SetContext"
@JL "@SetHeaderComponent"
@JL "@Space"
@JL "@StartHSpan"
@@ -178,7 +180,10 @@ do so. The complete list of predefined identifiers is
@JL "@Tagged"
@JL "@Target"
@JL "@Texture"
+ @JL "@SetTexture"
@JL "@Underline"
+ @JL "@SetUnderlineColor"
+ @JL "@SetUnderlineColour"
@JL "@Use"
@JL "@URLLink"
@JL "@VAdjust"
diff --git a/doc/expert/outfile.ps b/doc/expert/outfile.ps
index 7323379..68bbc30 100644
--- a/doc/expert/outfile.ps
+++ b/doc/expert/outfile.ps
@@ -1,6 +1,6 @@
%!PS-Adobe-3.0
-%%Creator: Basser Lout Version 3.35 (April 2007)
-%%CreationDate: Thu Apr 12 20:14:03 2007
+%%Creator: Basser Lout Version 3.36 (July 2007)
+%%CreationDate: Fri Jul 27 08:33:39 2007
%%DocumentData: Binary
%%DocumentNeededResources: (atend)
%%DocumentSuppliedResources: (atend)
@@ -1594,8 +1594,8 @@ grestore
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 fnt2 3544 6059(Jeffre)m 4(y)k 4321(H.)s
-4606(Kingston)s 3884 4395(V)m 19(ersion)k 4727(3.35)s 3974 4107(Apr)m -3(il,)k
-4567(2007)s 240 fnt4 0 342(\343)m 240 fnt3 241 340(Cop)m 7(yr)k -3(ight)k
+4606(Kingston)s 3883 4395(V)m 19(ersion)k 4726(3.36)s 4015 4107(J)m 4(uly)k 24(,)k
+4525(2007)s 240 fnt4 0 342(\343)m 240 fnt3 241 340(Cop)m 7(yr)k -3(ight)k
1345(1991,)s 1991(2007,)s 2638(Jeffre)s 4(y)k 3438(H.)s
3726(Kingston,)s 4771(School)s 5587(of)s 5882(Inf)s 7(or)k -6(mation)k
7143(T)s 28(echnologies)k 3(,)k 8649(The)s 0 52(Univ)m 6(ersity)k
@@ -1674,11 +1674,11 @@ grestore
[ /Rect [8501 9331 8615 9493] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUTkingston1995lout_program /ANN pdfmark
8501(4)s 8615(])s 8722(and)s 0 9043(de)m 6(v)k 3(eloped)k
-1042(continuously)s 2343(since)s 2899(then.)s 3485(This)s 3970(manual)s
-4739(w)s 2(as)k 5169(rendered)s 6073(into)s 6507(PostScript)s
+1041(continuously)s 2341(since)s 2897(then.)s 3482(This)s 3967(manual)s
+4735(w)s 2(as)k 5165(rendered)s 6068(into)s 6502(PostScript)s
[ /Dest /LOUT19_4580_preface_1 /DEST pdfmark
-7559(by)s 7862(V)s 26(ersion)k 8660(3.35)s 0 8755(of)m
+7553(by)s 7856(V)s 26(ersion)k 8653(3.36)s 0 8755(of)m
271(the)s 619(Basser)s 1316(Lout)s 1828(interpreter)s 9(,)k
2919(using)s 3491(the)s 3839(symbols)s 4688(described)s 5662(in)s
5905(the)s 6253(User')s 13(s)k 6914(Guide)s 7555([)s
@@ -5291,38 +5291,39 @@ grestore
150 12416(@Bac)m 4(kg)k 2(round)k 150 12128(@Begin)m 150 11840(@BeginHeaderComponent)m
150 11552(@Break)m 150 11264(@Case)m 150 10976(@ClearHeaderComponent)m 150 10688(@Common)m 150 10400(@Char)m
150 10112(@CurrF)m 11(ace)k 150 9824(@CurrF)m 11(amily)k 150 9536(@CurrLang)m
-150 9248(@CurrYUnit)m 150 8960(@CurrZUnit)m 150 8672(@Database)m 150 8384(@End)m 150 8096(@EndHeaderComponent)m
-150 7808(@Enclose)m 150 7520(@Filter)m 150 7232(@FilterErr)m 150 6944(@FilterIn)m 150 6656(@FilterOut)m
-150 6368(@F)m 6(ont)k 150 6080(@F)m 6(orceGalle)k 4(y)k
-150 5792(@Galle)m 4(y)k 150 5504(@Gr)m 2(aphic)k 150 5216(@HAdjust)m
-150 4928(@HContr)m 2(act)k 150 4640(@HCo)m 3(v)k 5(er)k
-150 4352(@HExpand)m 150 4064(@High)m 150 3776(@HLimited)m 150 3488(@HMirror)m 150 3200(@HScale)m
-150 2912(@HShift)m 3031 12704(@HSpan)m 3031 12416(@Include)m 3031 12128(@IncludeGr)m 2(aphic)k
+150 9248(@CurrYUnit)m 150 8960(@CurrZUnit)m 150 8672(@Database)m 150 8384(@Enclose)m 150 8096(@End)m
+150 7808(@EndHeaderComponent)m 150 7520(@Filter)m 150 7232(@FilterErr)m 150 6944(@FilterIn)m 150 6656(@FilterOut)m
+150 6368(@F)m 6(ont)k 150 6080(@F)m 6(ontDef)k 150 5792(@F)m 6(orceGalle)k 4(y)k
+150 5504(@Galle)m 4(y)k 150 5216(@GetConte)m 6(xt)k 150 4928(@Gr)m 2(aphic)k
+150 4640(@HAdjust)m 150 4352(@HContr)m 2(act)k 150 4064(@HCo)m 3(v)k 5(er)k
+150 3776(@HExpand)m 150 3488(@High)m 150 3200(@HLimited)m 150 2912(@HMirror)m 150 2624(@HScale)m
+150 2336(@HShift)m 3031 12704(@HSpan)m 3031 12416(@Include)m 3031 12128(@IncludeGr)m 2(aphic)k
3031 11840(@IncludeGr)m 2(aphicRepeated)k 3031 11552(@Inser)m -8(t)k 3031 11264(@K)m 8(er)k -5(nShr)k -3(ink)k
3031 10976(@K)m 8(e)k 4(y)k 3031 10688(@Language)m 3031 10400(@LClos)m
-3031 10112(@LEn)m 4(v)k 3031 9824(@LInput)m 3031 9536(@L)m 24(Vis)k
-3031 9248(@LUse)m 3031 8960(@LinkSource)m 3031 8672(@LinkDest)m 3031 8384(@Meld)m 3031 8096(@Merge)m
-3031 7808(@Min)m 2(us)k 3031 7520(@Moment)m 3031 7232(@Ne)m 6(xt)k
-3031 6944(@NotRe)m 6(v)k 5(ealed)k 3031 6656(@Null)m 3031 6368(@OneCol)m
-3031 6080(@OneOf)m 3031 5792(@OneRo)m 3(w)k 3031 5504(@Open)m 3031 5216(@Optimiz)m 3(e)k
-3031 4928(@Outline)m 3031 4640(@P)m 26(Adjust)k 3031 4352(@P)m 8(ageLabel)k
-3031 4064(@PlainGr)m 2(aphic)k 3031 3776(@Plus)m 3031 3488(@PrependGr)m 2(aphic)k
-3031 3200(@Ra)m 4(wV)k 17(erbatim)k 3031 2912(@Rotate)m 5915 12704(@Rump)m
-5915 12416(@Scale)m 5915 12128(@SetColor)m 5915 11840(@SetColour)m 5915 11552(@SetHeaderComponent)m 5915 11264(@Space)m
-5915 10976(@Star)m -8(tHSpan)k 5915 10688(@Star)m -8(tHVSpan)k 5915 10400(@Star)m -8(tVSpan)k
-5915 10112(@SysDatabase)m 5915 9824(@SysInclude)m 5915 9536(@SysIncludeGr)m 2(aphic)k 5915 9248(@SysIncludeGr)m 2(aphicRepeated)k
-5915 8960(@SysPrependGr)m 2(aphic)k 5915 8672(@T)m 26(ag)k 5915 8384(@T)m 26(agged)k
-5915 8096(@T)m 26(arget)k 5915 7808(@T)m 26(e)k 6(xture)k
-5915 7520(@Under)m -3(line)k 5915 7232(@Use)m 5915 6944(@URLLink)m 5915 6656(@V)m 17(Adjust)k
-5915 6368(@VContr)m 2(act)k 5915 6080(@VCo)m 3(v)k 5(er)k
-5915 5792(@V)m 17(erbatim)k 5915 5504(@VExpand)m 5915 5216(@VLimited)m 5915 4928(@VMirror)m
-5915 4640(@VScale)m 5915 4352(@VShift)m 5915 4064(@VSpan)m 5915 3776(@Wide)m 5915 3488(@Y)m 4(ield)k
-5915 3200(@YUnit)m 5915 2912(@ZUnit)m 240 fnt1 0 2457(plus)m 498(the)s
-894(names)s 1605(of)s 1924(the)s 2321(parameters)s 3467(of)s
-220 fnt2 3786 2454(@Moment)m 240 fnt1 4798 2457(.)m 5011(The)s
-5487(symbols)s 220 fnt2 6385 2454(@LClos)m 240 fnt1 7161 2457(,)m
-220 fnt2 7316 2454(@LEn)m 4(v)k 240 fnt1 8034 2457(,)m
-
+3031 10112(@LEn)m 4(v)k 3031 9824(@LInput)m 3031 9536(@LUse)m 3031 9248(@LinkSource)m
+3031 8960(@LinkDest)m 3031 8672(@Meld)m 3031 8384(@Merge)m 3031 8096(@Min)m 2(us)k
+3031 7808(@Moment)m 3031 7520(@Ne)m 6(xt)k 3031 7232(@NotRe)m 6(v)k 5(ealed)k
+3031 6944(@Null)m 3031 6656(@OneCol)m 3031 6368(@OneOf)m 3031 6080(@OneRo)m 3(w)k
+3031 5792(@Open)m 3031 5504(@Optimiz)m 3(e)k 3031 5216(@Outline)m 3031 4928(@P)m 26(Adjust)k
+3031 4640(@P)m 8(ageLabel)k 3031 4352(@PlainGr)m 2(aphic)k 3031 4064(@Plus)m
+3031 3776(@PrependGr)m 2(aphic)k 3031 3488(@Ra)m 4(wV)k 17(erbatim)k
+3031 3200(@Rotate)m 3031 2912(@Rump)m 3031 2624(@Scale)m 3031 2336(@SetColor)m 5915 12704(@SetColour)m
+5915 12416(@SetConte)m 6(xt)k 5915 12128(@SetHeaderComponent)m 5915 11840(@Space)m 5915 11552(@Star)m -8(tHSpan)k
+5915 11264(@Star)m -8(tHVSpan)k 5915 10976(@Star)m -8(tVSpan)k 5915 10688(@SysDatabase)m
+5915 10400(@SysInclude)m 5915 10112(@SysIncludeGr)m 2(aphic)k 5915 9824(@SysIncludeGr)m 2(aphicRepeated)k
+5915 9536(@SysPrependGr)m 2(aphic)k 5915 9248(@T)m 26(ag)k 5915 8960(@T)m 26(agged)k
+5915 8672(@T)m 26(arget)k 5915 8384(@T)m 26(e)k 6(xture)k
+5915 8096(@SetT)m 26(e)k 6(xture)k 5915 7808(@Under)m -3(line)k
+5915 7520(@SetUnder)m -3(lineColor)k 5915 7232(@SetUnder)m -3(lineColour)k 5915 6944(@Use)m
+5915 6656(@URLLink)m 5915 6368(@V)m 17(Adjust)k 5915 6080(@VContr)m 2(act)k
+5915 5792(@VCo)m 3(v)k 5(er)k 5915 5504(@V)m 17(erbatim)k
+5915 5216(@VExpand)m 5915 4928(@VLimited)m 5915 4640(@VMirror)m 5915 4352(@VScale)m 5915 4064(@VShift)m
+5915 3776(@VSpan)m 5915 3488(@Wide)m 5915 3200(@Y)m 4(ield)k 5915 2912(@YUnit)m
+5915 2624(@ZUnit)m 240 fnt1 0 1881(plus)m 498(the)s 894(names)s
+1605(of)s 1924(the)s 2321(parameters)s 3467(of)s 220 fnt2
+3786 1878(@Moment)m 240 fnt1 4798 1881(.)m 5011(The)s 5487(symbols)s
+220 fnt2 6385 1878(@LClos)m 240 fnt1 7161 1881(,)m 220 fnt2
+7316 1878(@LEn)m 4(v)k 240 fnt1 8034 1881(,)m
[ /Dest /LOUT19_4580_det_lexi_13 /DEST pdfmark
[ /Dest /LOUT19_4580_det_lexi_14 /DEST pdfmark
@@ -5332,35 +5333,34 @@ grestore
[ /Dest /LOUT19_4580_det_lexi_16 /DEST pdfmark
[ /Dest /LOUT19_4580_det_lexi_17 /DEST pdfmark
-220 fnt2 8190 2454(@LInput)m 240 fnt1 9019 2457(,)m 220 fnt2
-0 2166(@L)m 24(Vis)k 240 fnt1 722 2169(and)m 220 fnt2
-1170 2166(@LUse)m 240 fnt1 2001 2169(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 1881(use)m
-375(else)s 6(where.)k 480 1507(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 1219(by)m 304(def)s 2(ault)k 1036(a)s 240 fnt6
-1213 1221(liter)m 3(al)k 1864(wor)s 8(d)k 240 fnt1
-2355 1219(,)m 2473(which)s 3126(means)s 3799(that)s 4227(it)s
-4430(will)s
+220 fnt2
+8190 1878(@LInput)m 240 fnt1 9019 1881(,)m 220 fnt2 0 1590(@L)m 24(Vis)k
+240 fnt1 722 1593(and)m 220 fnt2 1170 1590(@LUse)m 240 fnt1
+2001 1593(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 1305(use)m 375(else)s 6(where.)k
+480 931(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 643(by)m 304(def)s 2(ault)k
+1036(a)s 240 fnt6 1213 645(liter)m 3(al)k 1864(wor)s 8(d)k
+240 fnt1 2355 643(,)m 2473(which)s 3126(means)s 3799(that)s
+4227(it)s 4430(will)s
[ /Dest /LOUT19_4580_det_lexi_18 /DEST pdfmark
[ /Dest /LOUT19_4580_det_lexi_19 /DEST pdfmark
[ /Dest /LOUT19_4580_det_lexi_20 /DEST pdfmark
-4867(pass)s 5341(through)s 6154(Lout)s 6677(unchanged.)s
-7890(An)s 8251(arbitrary)s 0 931(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 fnt2 5938 928("{ }",)m 240 fnt1
-6457 931(is)m 6660(also)s 7091(a)s 7250(literal)s 7853(w)s 2(ord.)k
-8499(Space)s 0 643(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 355(only)m 480(between)s
-1334(quotes,)s 2066(for)s 2404(obtaining)s 3361(otherwise)s 4346(inaccessible)s
-5556(characters:)s
+4867(pass)s 5341(through)s 6154(Lout)s
+6677(unchanged.)s 7890(An)s 8251(arbitrary)s 0 355(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 fnt2 5938 352("{ }",)m
+240 fnt1 6457 355(is)m 6660(also)s 7091(a)s 7250(literal)s
+7853(w)s 2(ord.)k 8499(Space)s 0 67(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
+
grestore
gsave
1417 -15423 translate
@@ -5412,104 +5412,96 @@ gsave
240 fnt6 8674 -1580(Chapter)m 9524(2.)s 9798(Details)s gsave
1417 -15423 translate
240 fnt1
-9066 13368 0 13368 240 288 60 LoutGraphic
+9066 13368 0 13259 240 288 60 LoutGraphic
gsave
0 LoutMargSet
grestore
-220 fnt2 480 13167(\\")m 240 fnt1 1235 13170(produces)m 220 fnt2
-2150 13167(")m 480 12879(\\\\)m 240 fnt1 1235 12882(\\)m 220 fnt2
-480 12591(\\ddd)m 240 fnt1 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 fnt2 4456 12303(ddd)m 240 fnt1 0 11765(So,)m 360(for)s
-698(e)s 3(xample,)k 220 fnt2 1612 11762("\\"@PP\\"")m 240 fnt1
-2606 11765(produces)m 220 fnt2 3521 11762("@PP")m 240 fnt1 4177 11765(.)m
-480 11391(When)m 1106(the)s 1451(comment)s 2398(character)s
+0 13205(only)m 480(between)s 1334(quotes,)s 2066(for)s 2404(obtaining)s
+3361(otherwise)s 4346(inaccessible)s 5556(characters:)s 220 fnt2 480 12664(\\")m
+240 fnt1 1235 12667(produces)m 220 fnt2 2150 12664(")m 480 12376(\\\\)m
+240 fnt1 1235 12379(\\)m 220 fnt2 480 12088(\\ddd)m 240 fnt1
+1235 12091(the)m 1583(character)s 2517(whose)s 3185(ASCII)s 3865(code)s
+4373(is)s 1235 11803(the)m 1583(up)s 1876(to)s 2115(three)s
+2648(digit)s 3146(octal)s 3665(number)s 220 fnt2 4456 11800(ddd)m
+240 fnt1 0 11262(So,)m 360(for)s 698(e)s 3(xample,)k
+220 fnt2 1612 11259("\\"@PP\\"")m 240 fnt1 2606 11262(produces)m 220 fnt2
+3521 11259("@PP")m 240 fnt1 4177 11262(.)m 480 10888(When)m 1106(the)s
+1451(comment)s 2398(character)s
[ /Dest /LOUT19_4580_det_lexi_21 /DEST pdfmark
-220 fnt2
-3328 11388(#)m 240 fnt1 3502 11391(is)m 3709(encountered,)s 4982(e)s 6(v)k 3(erything)k
+220 fnt2 3328 10885(#)m 240 fnt1
+3502 10888(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
+8110(end)s 8511(of)s 8778(the)s 0 10600(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 fnt2 480 10606(# Lout user man)m 2(ual)k 480 10318(# J)m 6(.)k 13( Kingston, J)k 4(une 1989)k
-240 fnt1 0 9819(for)m 338(temporarily)s 1506(deleting)s 2329(parts)s
+6593(this:)s 220 fnt2 480 10103(# Lout user man)m 2(ual)k 480 9815(# J)m 6(.)k 13( Kingston, J)k 4(une 1989)k
+240 fnt1 0 9316(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 fnt6 480 9447(Macr)m 10(os)k
+5184(on.)s 240 fnt6 480 8944(Macr)m 10(os)k
[ /Dest /LOUT19_4580_det_lexi_22 /DEST pdfmark
240 fnt1
-1268 9445(pro)m 3(vide)k 2064(a)s 2242(means)s 2916(of)s
+1268 8942(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
+8610(units)s 0 8654(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 fnt2 480 8656(macro @PP { //1.3vx 2.0f @Wide &0i })m 240 fnt1
-0 8162(mak)m 2(es)k 663(Lout)s 1178(replace)s 1926(the)s
-2277(symbol)s 220 fnt2 3040 8159(@PP)m 240 fnt1 3609 8162(by)m
+3767(macro)s 4417(de\207nition)s 220 fnt2 480 8153(macro @PP { //1.3vx 2.0f @Wide &0i })m 240 fnt1
+0 7659(mak)m 2(es)k 663(Lout)s 1178(replace)s 1926(the)s
+2277(symbol)s 220 fnt2 3040 7656(@PP)m 240 fnt1 3609 7659(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
+8701(into)s 0 7371(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
+6981(the)s 7329(present)s 8078(document.)s 0 7083(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 fnt2 0 7295(@PP2i)m 240 fnt1 731 7298(has)m 1101(result)s
-220 fnt2 1691 7295(//1.3vx 2.0f @Wide &0i2i)m 240 fnt1 4141 7298(which)m 4783(is)s
-4993(erroneous.)s 480 6924(The)m 938(meaning)s 1846(of)s 2148(symbols)s
+220 fnt2 0 6792(@PP2i)m 240 fnt1 731 6795(has)m 1101(result)s
+220 fnt2 1691 6792(//1.3vx 2.0f @Wide &0i2i)m 240 fnt1 4141 6795(which)m 4783(is)s
+4993(erroneous.)s 480 6421(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
+8107(where)s 8778(the)s 0 6133(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 fnt2 7453 6633(@Open)m 240 fnt1 8277 6636(symbols)m 0 6348(will)m
+220 fnt2 7453 6130(@Open)m 240 fnt1 8277 6133(symbols)m 0 5845(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
+7905(that)s 8320(the)s 3(y)k 8779(are)s 0 5557(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
+8319(a)s 8476(macro)s 0 5269(without)m 791(the)s 1139(matching)s
+2082(brace.)s 480 4895(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
+7641(not)s 8012(be)s 8299(parame)s 8998(-)s 0 4607(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 fnt2
-691 4819(e)m 6(xpor)k -8(t)k 240 fnt1 1359 4822(clause)m
+8527(a)s 8697(pre)s 8998(-)s 0 4319(ceding)m 220 fnt2
+691 4316(e)m 6(xpor)k -8(t)k 240 fnt1 1359 4319(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 fnt2 6382 4819(impor)m -8(t)k 240 fnt1
-7055 4822(clause)m 7708(is)s 7918(permitted.)s 240 fnt5 0 4030(2.2.)m
+6099(an)s 220 fnt2 6382 4316(impor)m -8(t)k 240 fnt1
+7055 4319(clause)m 7708(is)s 7918(permitted.)s 240 fnt5 0 3527(2.2.)m
471(Named)s 1257(parameters)s
[ /Dest /LOUTnamed /DEST pdfmark
-240 fnt1 480 3553(In)m 728(addition)s
+240 fnt1 480 3050(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 fnt6 8421 3555(named)m 0 3267(par)m 3(ameter)k 2(s)k
-240 fnt1 1080 3265(:)m
+7377(number)s 8159(of)s 240 fnt6 8421 3052(named)m 0 2764(par)m 3(ameter)k 2(s)k
+240 fnt1 1080 2762(:)m
[ /Dest /LOUT19_4580_det_name_1 /DEST pdfmark
[ /Dest /LOUT19_4580_det_name_2 /DEST pdfmark
-220 fnt2 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 fnt1 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 fnt6 457 260(default)m 1183(value)s 240 fnt1
-1753 258(between)m
-[ /Dest /LOUT19_4580_det_name_3 /DEST pdfmark
-2605(braces.)s 3377(When)s 220 fnt2 4004 255(@Chapter)m
-240 fnt1 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
-
+220 fnt2 480 2265(def @Chapter)m 480 1977( named @T)m 26(ag {})k
+480 1689( named @Title {})m 480 1401( r)m -3(ight x)k 480 1113({)m 480 825( ...)m
+480 537(})m
grestore
gsave
1417 -15423 translate
@@ -5565,88 +5557,93 @@ gsave
gsave
1 LoutMargSet
grestore
-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 fnt2 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 fnt1 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
+0 13205(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 12917(by)m
+293(a)s 240 fnt6 457 12919(default)m 1183(value)s 240 fnt1
+1753 12917(between)m
+[ /Dest /LOUT19_4580_det_name_3 /DEST pdfmark
+2605(braces.)s 3377(When)s 220 fnt2 4004 12914(@Chapter)m
+240 fnt1 5066 12917(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
+0 12629(v)m 6(alues)k 656(in)s 899(the)s 1247(follo)s 6(wing)k
+2224(w)s 2(ay:)k 220 fnt2 480 12128(@Chapter)m 480 11840( @T)m 26(ag { intro })k
+480 11552( @Title { Introduction })m 480 11264({)m 480 10976( ...)m 480 10688(})m 240 fnt1
+0 10194(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
+8558(v)s 6(alue)k 0 9906(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
+7826(appear)s 8529(in)s 8778(the)s 0 9618(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 fnt2 1913 9529(compulsor)m -6(y)k 240 fnt1 3088 9532(appears)m
-3858(after)s 220 fnt2 4342 9529(named)m 240 fnt1 5050 9532(and)m
+0 9330(from)m 524(the)s 872(de\207nition)s 1846(is)s 2056(used)s
+2553(instead.)s 480 8956(If)m 699(the)s 1036(k)s 2(e)k 3(yw)k 2(ord)k
+220 fnt2 1913 8953(compulsor)m -6(y)k 240 fnt1 3088 8956(appears)m
+3858(after)s 220 fnt2 4342 8953(named)m 240 fnt1 5050 8956(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
+8200(Lout)s 8700(will)s 0 8668(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 fnt2
-1424 8579(@T)m 26(ag)k 240 fnt1 2057 8582(parameter)m
+8405(def)s 2(ault)k 0 8380(v)m 6(alue)k 568(as)s
+818(just)s 1223(described.)s 480 8006(A)m 719(named)s 220 fnt2
+1424 8003(@T)m 26(ag)k 240 fnt1 2057 8006(parameter)m
[ /Dest /LOUT19_4580_det_name_4 /DEST pdfmark
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
+7940(instead,)s 8733(if)s 8960(a)s 0 7718(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
+7972(tag.)s 8434(This)s 8916(is)s 0 7430(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
+7307(\(Section)s 8158(4.4\).)s 8698(The)s 0 7142(same)m 551(thing)s
1101(occurs)s 1781(if)s 2003(there)s 2541(is)s 2756(a)s
-220 fnt2 2927 7715(@T)m 26(ag)k 240 fnt1 3555 7718(parameter)m
+220 fnt2 2927 7139(@T)m 26(ag)k 240 fnt1 3555 7142(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
+8127(v)s 6(alue)k 8700(will)s 0 6854(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
+2596(one.)s 480 6480(Named)m 1229(parameters)s 2327(may)s 2793(ha)s 4(v)k 3(e)k
3294(parameters,)s
[ /Dest /LOUTstrange /DEST pdfmark
4448(as)s 4698(in)s 4941(the)s 5289(follo)s 6(wing)k
-6266(de\207nition:)s 220 fnt2 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 fnt1 0 4621(The)m 428(named)s 1125(parameter)s
-220 fnt2 2139 4618(@F)m 6(or)k -5(mat)k 240 fnt1
-3113 4621(has)m 3483(right)s 3995(parameter)s 220 fnt2 5010 4618(@V)m 15(al)k
-240 fnt1 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 fnt2 7942 4618(@F)m 6(or)k -5(mat)k
-240 fnt1 8916 4621(is)m 0 4333(this)m 394(parameter)s 1406(enclosed)s
+6266(de\207nition:)s 220 fnt2 480 5979(def @Str)m 2(ange)k 480 5691( named @F)m 6(or)k -5(mat r)k -3(ight @V)k 15(al { [@V)k 15(al] })k
+480 5403( r)m -3(ight x)k 480 5115({)m 480 4827( @F)m 6(or)k -5(mat x)k
+480 4539(})m 240 fnt1 0 4045(The)m 428(named)s 1125(parameter)s
+220 fnt2 2139 4042(@F)m 6(or)k -5(mat)k 240 fnt1
+3113 4045(has)m 3483(right)s 3995(parameter)s 220 fnt2 5010 4042(@V)m 15(al)k
+240 fnt1 5520 4045(,)m 5627(and)s 6032(the)s 6380(def)s 2(ault)k
+7102(v)s 6(alue)k 7670(of)s 220 fnt2 7942 4042(@F)m 6(or)k -5(mat)k
+240 fnt1 8916 4045(is)m 0 3757(this)m 394(parameter)s 1406(enclosed)s
2299(in)s 2539(brack)s 2(ets.)k 3495(When)s 220 fnt2
-4122 4330(@F)m 6(or)k -5(mat)k 240 fnt1 5093 4333(is)m
+4122 3754(@F)m 6(or)k -5(mat)k 240 fnt1 5093 3757(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 fnt2 2865 4042(@V)m 15(al)k 240 fnt1
-3375 4045(.)m 3539(Thus,)s 220 fnt2 480 3544(@Str)m 2(ange 27)k
-240 fnt1 0 3045(equals)m 220 fnt2 662 3042(@F)m 6(or)k -5(mat 27)k
-240 fnt1 1937 3045(and)m 2341(so)s 2607(has)s 2977(result)s
-480 2543([27])m 0 2055(The)m 220 fnt2 428 2052(@F)m 6(or)k -5(mat)k
-240 fnt1 1401 2055(symbol)m 2161(is)s 2371(lik)s 2(e)k
+8615(right)s 0 3469(parameter)m 9(,)k 1052(which)s 1694(will)s
+2120(replace)s 220 fnt2 2865 3466(@V)m 15(al)k 240 fnt1
+3375 3469(.)m 3539(Thus,)s 220 fnt2 480 2968(@Str)m 2(ange 27)k
+240 fnt1 0 2469(equals)m 220 fnt2 662 2466(@F)m 6(or)k -5(mat 27)k
+240 fnt1 1937 2469(and)m 2341(so)s 2607(has)s 2977(result)s
+480 1967([27])m 0 1479(The)m 220 fnt2 428 1476(@F)m 6(or)k -5(mat)k
+240 fnt1 1401 1479(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 fnt2
-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 fnt1 0 527(still)m 412(equals)s 220 fnt2
-1074 524(@F)m 6(or)k -5(mat 27)k 240 fnt1 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 fnt6 480 26(27.)m
+480 978(@Str)m 2(ange)k 480 690( @F)m 6(or)k -5(mat { Slope @F)k 6(ont @V)k 15(al.)k 13( })k
+480 402(27)m
grestore
gsave
1417 -15423 translate
-240 fnt1
-0 0 0 0 240 288 60 LoutGraphic
+240 fnt1 0 0 0 0 240 288 60 LoutGraphic
gsave
1 LoutMargSet
grestore
@@ -5694,45 +5691,48 @@ gsave
240 fnt6 8674 -1580(Chapter)m 9524(2.)s 9798(Details)s gsave
1417 -15423 translate
240 fnt1
-9066 13368 0 13368 240 288 60 LoutGraphic
+9066 13368 0 13259 240 288 60 LoutGraphic
gsave
0 LoutMargSet
grestore
-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 fnt5 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
+0 13205(still)m 412(equals)s 220 fnt2 1074 13202(@F)m 6(or)k -5(mat 27)k
+240 fnt1 2289 13205(,)m 2396(b)s 4(ut)k 2758(this)s
+3154(time)s 3634(the)s 3982(result)s 4572(is)s 240 fnt6
+480 12704(27.)m 240 fnt1 0 12250(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 11962(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 11674(\(Section)m 853(4.5\))s
+1281(are)s 1628(tw)s 2(o)k 2038(major)s 2655(ones.)s
+240 fnt5 0 10881(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
+
[ /Dest /LOUTvisibility /DEST pdfmark
-240 fnt1 480 11359(A)m 710(de\207nition)s
-1684(may)s 2150(contain)s
+240 fnt1 480 10404(A)m 710(de\207nition)s 1684(may)s 2150(contain)s
+
[ /Dest /LOUT19_4580_det_visi_1 /DEST pdfmark
-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 fnt2 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 fnt1
-0 8636(A)m 227(parameter)s 1238(lik)s 2(e)k 220 fnt2
-1646 8633(x)m 240 fnt1 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 fnt2 5667 8345(@Three)m 240 fnt1
-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 fnt2
-3629 7769(@Bo)m 6(x)k 240 fnt1 4222 7772(,)m 220 fnt2
-480 7271(@NineSquare @Bo)m 6(x)k 240 fnt1 0 6775(has)m 370(result)s
-2796 2796 226 2570 240 288 60 480 3689 LoutGr2
+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 fnt2 480 9903(def @NineSquare)m
+480 9615( r)m -3(ight x)k 480 9327({)m 480 9039( def @Three { x |0.2i x |0.2i x })m 480 8463( @Three /0.2i @Three /0.2i @Three)m
+480 8175(})m 240 fnt1 0 7681(A)m 227(parameter)s 1238(lik)s 2(e)k
+220 fnt2 1646 7678(x)m 240 fnt1 1811 7681(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 7393(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 fnt2 5667 7390(@Three)m 240 fnt1 6531 7393(may)m 7013(be)s
+7311(in)s 9(v)k 4(ok)k 2(ed)k 8143(an)s 3(ywhere)k
+0 7105(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 6817(assuming)m 957(an)s
+1240(appropriate)s 2384(de\207nition)s 3358(of)s 220 fnt2 3629 6814(@Bo)m 6(x)k
+240 fnt1 4222 6817(,)m 220 fnt2 480 6316(@NineSquare @Bo)m 6(x)k
+240 fnt1 0 5820(has)m 370(result)s 2796 2796 226 2570 240 288 60 480 2734 LoutGr2
grestore save gsave 200 dict begin lfigdict begin
grestore
740 740 226 514 240 288 60 0 2056 LoutGr2
@@ -5809,31 +5809,31 @@ 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 fnt6 2161 2290(body)m 2678(par)s 3(ameter)k
-240 fnt1 3677 2288(,)m
+0 2283(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 1909(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 1621(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 1333(of)m 267(these)s 810(features)s
+1611(is)s 1817(the)s 240 fnt6 2161 1335(body)m 2678(par)s 3(ameter)k
+240 fnt1 3677 1333(,)m
[ /Dest /LOUT19_4580_det_visi_2 /DEST pdfmark
[ /Dest /LOUT19_4580_det_visi_3 /DEST pdfmark
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 1053(package)s
+7502(The)s 7926(Eq)s 8245(equation)s 0 1045(formatting)m 1053(package)s
1885([)s
-[ /Rect [1956 1997 2062 2165] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUTkingston1995lout_user /ANN pdfmark
+[ /Rect [1956 1042 2062 1210] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUTkingston1995lout_user /ANN pdfmark
1956(5)s 2062(,)s 2161(Chapter)s 2970(7])s
3200(is)s 3401(a)s 3559(classic)s 4240(e)s 3(xample)k
5095(of)s 5358(the)s 5698(use)s 6064(of)s 6327(a)s
6485(body)s 7011(parameter)s 13(.)k 8108(In)s 8355(outline,)s
-0 1712(it)m 192(looks)s 762(lik)s 2(e)k 1174(this:)s
+0 757(it)m 192(looks)s 762(lik)s 2(e)k 1174(this:)s
grestore
gsave
@@ -6692,7 +6692,7 @@ grestore
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 fnt2
5932 6159(f)m 240 fnt1 6050 6162(unit\);)m
-[ /Dest /LOUT16_1659_det_size_1 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_1 /DEST pdfmark
0 5659(\213)m 480(Whether)s
1391(small)s 1991(capitals)s 2799(are)s 3175(in)s 3446(ef)s 6(fect)k
4070(or)s 4358(not,)s 4799(and)s 5231(also)s 5698(what)s
@@ -6700,13 +6700,13 @@ grestore
8740(full)s 480 5371(capitals)m 1260(the)s 1608(small)s 2180(capitals)s
2960(are)s 3307(to)s 3546(ha)s 4(v)k 3(e;)k
-[ /Dest /LOUT16_1659_det_size_2 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_2 /DEST pdfmark
0 4868(\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 fnt2 7809 4865(s)m 240 fnt1
7972 4868(unit\);)m
-[ /Dest /LOUT16_1659_det_size_3 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_3 /DEST pdfmark
0 4365(\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 fnt2
@@ -6716,42 +6716,42 @@ grestore
855 4077(,)m 962(or)s 220 fnt2 1221 4074(te)m 6(x)k
240 fnt1 1566 4077(as)m 1816(in)s 2059(Section)s 2833(3.5\);)s
-[ /Dest /LOUT16_1659_det_size_4 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_4 /DEST pdfmark
0 3583(\213)m 480(The)s 908(current)s 1644(v)s 6(alue)k
2212(of)s 2483(the)s 220 fnt2 2831 3580(y)m 240 fnt1
2999 3583(and)m 220 fnt2 3403 3580(z)m 240 fnt1 3567 3583(units)m
4083(of)s 4354(measurement)s 5688(\(Section)s 6541(3.6\);)s
-[ /Dest /LOUT16_1659_det_size_5 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_5 /DEST pdfmark
0 3082(\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 fnt2
4648 3079(adjust)m 240 fnt1 5229 3082(,)m 220 fnt2 5336 3079(r)m 2(agged)k
240 fnt1 6005 3082(,)m 6112(etc.\))s
-[ /Dest /LOUT16_1659_det_size_6 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_6 /DEST pdfmark
0 2579(\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 fnt2 7063 2576(v)m 240 fnt1
7232 2579(unit\);)m
-[ /Dest /LOUT16_1659_det_size_7 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_7 /DEST pdfmark
0 2076(\213)m 480(The)s 908(size)s 1335(of)s
1606(the)s 1954(outdent)s 2732(to)s 2971(use)s 3346(in)s
3589(the)s 220 fnt2 3937 2073(outdent)m 240 fnt1 4725 2076(paragraph)m
5738(breaking)s 6628(style;)s
-[ /Dest /LOUT16_1659_det_size_8 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_8 /DEST pdfmark
0 1573(\213)m 480(Whether)s 1462(the)s
220 fnt2 1909 1570(unbreakab)m 4(le\207rst)k 240 fnt1 3621 1573(and)m
220 fnt2 4124 1570(unbreakab)m 4(lelast)k 240 fnt1 5823 1573(paragraph)m
6935(breaking)s 7924(options)s 8779(are)s 480 1285(in)m 723(ef)s 6(fect;)k
-[ /Dest /LOUT16_1659_det_size_9 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_9 /DEST pdfmark
0 801(\213)m 480(Whether)s 1366(the)s 1717(ro)s 6(w)k
2141(marks)s 2779(of)s 3053(w)s 2(ords)k 3691(are)s
4041(to)s 4284(pass)s 4750(along)s 5338(the)s 5690(baseline)s
6532(or)s 6795(half)s 7241(the)s 7592(height)s 8254(of)s
8528(an)s 8815(`x')s 480 513(abo)m 3(v)k 3(e)k
1102(the)s 1450(baseline;)s
-[ /Dest /LOUT16_1659_det_size_10 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_10 /DEST pdfmark
grestore
gsave
@@ -6811,27 +6811,27 @@ grestore
0 13205(\213)m
480(Whether)s 1363(to)s 1602(permit)s 2285(h)s 1(yphenation)k
3525(or)s 3784(not;)s
-[ /Dest /LOUT16_1659_det_size_11 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_11 /DEST pdfmark
0 12702(\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
-[ /Dest /LOUT16_1659_det_size_12 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_12 /DEST pdfmark
0 12199(\213)m 480(What)s 1058(colour)s 1729(underlines)s
2776(within)s 3444(the)s 3792(object)s 4436(are)s 4783(to)s
5022(appear)s 5719(in;)s
-[ /Dest /LOUT16_1659_det_size_13 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_13 /DEST pdfmark
0 11696(\213)m 480(Whether)s 220 fnt2
1363 11693(@Outline)m 240 fnt1 2332 11696(is)m 2542(in)s 2785(ef)s 6(fect;)k
-[ /Dest /LOUT16_1659_det_size_14 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_14 /DEST pdfmark
0 11212(\213)m 480(The)s 908(language)s 1828(of)s 2099(the)s
2447(object;)s
-[ /Dest /LOUT16_1659_det_size_15 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_15 /DEST pdfmark
0 10709(\213)m 480(Whether)s 220 fnt2 1363 10706(@V)m 17(Adjust)k
240 fnt1 2320 10709(,)m 220 fnt2 2427 10706(@HAdjust)m 240 fnt1
3473 10709(and)m 220 fnt2 3877 10706(@P)m 26(Adjust)k 240 fnt1
4885 10709(are)m 5232(in)s 5475(ef)s 6(fect.)k
-[ /Dest /LOUT16_1659_det_size_16 /DEST pdfmark
+[ /Dest /LOUT16_1692_det_size_16 /DEST pdfmark
0 10209(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
@@ -10909,9 +10909,9 @@ grestore
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 fnt2
-480 2378(Long)m 1017(w)s 2(ords)k 1654(ma)s 6(y)k
+7887(already)s 8636(ends)s 0 2875(with)m 482(a)s 648(h)s 1(yphen)k
+1410(or)s 1669(slash.)s 2311(F)s 3(or)k 2700(e)s 3(xample,)k
+220 fnt2 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 fnt1 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
@@ -11572,7 +11572,7 @@ grestore
5511(3.19\))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 8129(each)m 4095(paragraph;)s
-[ /Dest /LOUT16_1659_pre_brea_1 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_1 /DEST pdfmark
220 fnt2 1128 7621(outdent)m
1916(@Break)s 240 fnt6 2772 7626(object)m
[ /Dest /LOUT19_4580_pre_brea_2 /DEST pdfmark
@@ -11585,7 +11585,7 @@ grestore
8843(an)s 3600 7048(outdented)m 4592(paragraph)s 5595(\(the)s 6012(outdent)s
6780(width)s 7372(may)s 7828(be)s 8100(changed)s 8946(\211)s
3600 6760(see)m 3961(belo)s 6(w\);)k
-[ /Dest /LOUT16_1659_pre_brea_2 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_2 /DEST pdfmark
220 fnt2 1187 6262(r)m 2(agged)k
1916(@Break)s 240 fnt6 2772 6267(object)m
[ /Dest /LOUT19_4580_pre_brea_3 /DEST pdfmark
@@ -11594,7 +11594,7 @@ grestore
240 fnt1 6545 6265(into)m 6960(lines,)s 7507(b)s 4(ut)k
7858(do)s 8140(not)s 8495(adjust)s 3600 5977(the)m 3948(lines)s
4450(\(`ragged)s 5317(right'\);)s
-[ /Dest /LOUT16_1659_pre_brea_3 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_3 /DEST pdfmark
220 fnt2 1077 5469(cr)m 2(agged)k
1916(@Break)s 240 fnt6 2772 5474(object)m
[ /Dest /LOUT19_4580_pre_brea_4 /DEST pdfmark
@@ -11603,7 +11603,7 @@ grestore
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 5184(respect)m
4336(to)s 4575(the)s 4923(others;)s
-[ /Dest /LOUT16_1659_pre_brea_4 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_4 /DEST pdfmark
220 fnt2 1114 4676(rr)m 2(agged)k
1916(@Break)s 240 fnt6 2772 4681(object)m
[ /Dest /LOUT19_4580_pre_brea_5 /DEST pdfmark
@@ -11613,7 +11613,7 @@ grestore
7014(will)s 7463(be)s 7768(right-justi\207ed)s 3600 4391(with)m 4082(respect)s
4818(to)s 5057(the)s 5405(others)s 6040(\(`ragged)s 6907(left'\);)s
-[ /Dest /LOUT16_1659_pre_brea_5 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_5 /DEST pdfmark
220 fnt2 1065 3883(or)m 2(agged)k 1916(@Break)s 240 fnt6
2772 3888(object)m
[ /Dest /LOUT19_4580_pre_brea_6 /DEST pdfmark
@@ -11621,7 +11621,7 @@ grestore
4835(combination)s 6088(of)s 220 fnt2 6359 3883(r)m 2(agged)k
240 fnt1 7088 3886(and)m 220 fnt2 7492 3883(outdent)m 240 fnt1
8220 3886(;)m
-[ /Dest /LOUT16_1659_pre_brea_6 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_6 /DEST pdfmark
220 fnt2 1413 3379(lines)m 1916(@Break)s 240 fnt6
2772 3384(object)m
[ /Dest /LOUT19_4580_pre_brea_7 /DEST pdfmark
@@ -11640,7 +11640,7 @@ grestore
3600 2230(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
-[ /Dest /LOUT16_1659_pre_brea_7 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_7 /DEST pdfmark
220 fnt2 1303 1722(clines)m 1916(@Break)s
240 fnt6 2772 1727(object)m
[ /Dest /LOUT19_4580_pre_brea_8 /DEST pdfmark
@@ -11650,7 +11650,7 @@ grestore
8623 1722(lines)m 3600 1434(@Break)m 240 fnt1 4396 1437(,)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
-[ /Dest /LOUT16_1659_pre_brea_8 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_8 /DEST pdfmark
220 fnt2 1337 929(r)m -3(lines)k
1916(@Break)s 240 fnt6 2772 934(object)m
[ /Dest /LOUT19_4580_pre_brea_9 /DEST pdfmark
@@ -11661,7 +11661,7 @@ grestore
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 356(others.)m
-[ /Dest /LOUT16_1659_pre_brea_9 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_9 /DEST pdfmark
grestore
gsave
@@ -11726,7 +11726,7 @@ grestore
7921(as)s 8228(for)s 220 fnt2 8623 13245(lines)m 3600 12957(@Break)m
240 fnt1 4396 12960(,)m 4503(then)s 4972(as)s 5222(for)s
5560(outdenting.)s
-[ /Dest /LOUT16_1659_pre_brea_10 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_10 /DEST pdfmark
0 12457(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
@@ -11756,7 +11756,7 @@ grestore
6998 10711(v)m 240 fnt1 7167 10714(unit)m 7600(to)s 7839(be)s
8122(the)s 8471(length)s 3600 10426(of)m 240 fnt6 3871 10428(gap)m
240 fnt1 4224 10426(;)m
-[ /Dest /LOUT16_1659_pre_brea_11 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_11 /DEST pdfmark
1375 9925(+)m 240 fnt6 1503 9927(gap)m
220 fnt2 1916 9922(@Break)m 240 fnt6 2772 9927(object)m 240 fnt1
3600 9925(W)m 9(ithin)k 240 fnt6 4320 9927(object)m 240 fnt1
@@ -11767,7 +11767,7 @@ grestore
4874 9639(gap)m 240 fnt1 5287 9637(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
-[ /Dest /LOUT16_1659_pre_brea_12 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_12 /DEST pdfmark
1383 9132(\211)m 240 fnt6 1503 9134(gap)m 220 fnt2 1916 9129(@Break)m
240 fnt6 2772 9134(object)m 240 fnt1 3600 9132(W)m 9(ithin)k
240 fnt6 4309 9134(object)m 240 fnt1 4897 9132(,)m 5000(tak)s 2(e)k
@@ -11777,7 +11777,7 @@ grestore
4603(of)s 240 fnt6 4874 8846(gap)m 240 fnt1 5287 8844(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
-[ /Dest /LOUT16_1659_pre_brea_13 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_13 /DEST pdfmark
0 8339(In)m 256(each)s 751(case,)s 1269(the)s
1617(mode)s 2205(of)s 240 fnt6 2476 8341(gap)m 240 fnt1
2889 8339(is)m 3099(adopted)s 3915(within)s 240 fnt6 4583 8341(object)m
@@ -11826,7 +11826,7 @@ grestore
240 fnt1 3600 4066(Permit)m 4296(h)s 1(yphenation)k
5536(within)s 6204(the)s 6552(paragraphs)s 7652(of)s 240 fnt6
7923 4068(object)m 240 fnt1 8511 4066(;)m
-[ /Dest /LOUT16_1659_pre_brea_14 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_14 /DEST pdfmark
220 fnt2 897 3558(noh)m 6(yphen @Break)k
240 fnt6 2772 3563(object)m
[ /Dest /LOUT19_4580_pre_brea_13 /DEST pdfmark
@@ -11836,7 +11836,7 @@ grestore
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 2985(edge)m 4108(mode.)s
-[ /Dest /LOUT16_1659_pre_brea_15 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_15 /DEST pdfmark
0 2482(The)m 220 fnt2
428 2479(@Break)m 240 fnt1 1284 2482(also)m 1722(has)s 2092(options)s
2848(which)s 3490(control)s 4222(wido)s 6(w)k 4922(and)s
@@ -11851,7 +11851,7 @@ grestore
7212(second)s 7958(lines)s 8483(of)s 8778(the)s 3600 1401(paragraphs)m
4700(of)s 240 fnt6 4971 1403(object)m 240 fnt1 5559 1401(;)m
-[ /Dest /LOUT16_1659_pre_brea_16 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_16 /DEST pdfmark
220 fnt2 480 893(unbreakab)m 4(lelast @Break)k 240 fnt6 3059 898(ob)m
3293(-)s 480 610(ject)m
[ /Dest /LOUT19_4580_pre_brea_15 /DEST pdfmark
@@ -11860,7 +11860,7 @@ grestore
7886(the)s 8282(last)s 8722(and)s 3600 608(second)m 4323(last)s
4714(lines)s 5216(of)s 5487(the)s 5835(paragraphs)s 6935(of)s
240 fnt6 7206 610(object)m 240 fnt1 7794 608(.)m
-[ /Dest /LOUT16_1659_pre_brea_17 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_17 /DEST pdfmark
0 105(These)m
688(options)s 1506(w)s 2(ork)k 2119(by)s 2475(adding)s
3241(the)s 220 fnt2 3651 102(u)m 240 fnt1 3881 105(\(unbreakable\))m
@@ -11944,7 +11944,7 @@ grestore
5562 11171(\211)m 240 fnt1 5749 11174(to)m 5993(indicate)s 6811(a)s
6982(change)s 7721(to)s 7965(the)s 8319(e)s 3(xisting)k
3600 10886(outdent)m 4378(v)s 6(alue.)k
-[ /Dest /LOUT16_1659_pre_brea_18 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_brea_18 /DEST pdfmark
0 10432(Mar)m 4(gin)k
764(k)s 2(erning,)k 1608(in)s 1858(which)s 2508(small)s
3087(\(usually)s 3919(punctuation\))s 5185(characters)s 6210(protrude)s 7084(into)s
@@ -13264,13 +13264,13 @@ grestore
240 fnt1 3600 4856(Principal)m 4517(mark)s 5069(shifted)s 5777(to)s
6016(the)s 6364(right)s 6875(by)s 240 fnt6 7169 4858(length)m
240 fnt1 7762 4856(;)m
-[ /Dest /LOUT16_1659_pre_hshi_1 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_hshi_1 /DEST pdfmark
220 fnt2 1180 4348(-)m 240 fnt6
1244 4353(length)m 220 fnt2 1897 4348(@HShift)m 240 fnt6 2772 4353(object)m
240 fnt1 3600 4351(Principal)m 4517(mark)s 5069(shifted)s 5777(to)s
6016(the)s 6364(left)s 6741(by)s 240 fnt6 7035 4353(length)m
240 fnt1 7628 4351(;)m
-[ /Dest /LOUT16_1659_pre_hshi_2 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_hshi_2 /DEST pdfmark
240 fnt6 1244 3848(length)m 220 fnt2
1897 3843(@HShift)m 240 fnt6 2772 3848(object)m 240 fnt1 3600 3846(Principal)m
4512(mark)s 5058(shifted)s 5760(so)s 6020(as)s 6264(to)s
@@ -13278,7 +13278,7 @@ grestore
7666(the)s 8008(right)s 8513(of)s 8778(the)s 3600 3558(left)m
3977(edge)s 4485(of)s 240 fnt6 4756 3560(object)m 240 fnt1
5344 3558(;)m
-[ /Dest /LOUT16_1659_pre_hshi_3 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_hshi_3 /DEST pdfmark
0 3055(In)m 256(each)s 751(chase)s 220 fnt2
1338 3052(@HShift)m 240 fnt1 2213 3055(includes)m 3061(a)s 220 fnt2
3227 3052(@OneCol)m 240 fnt1 4239 3055(ef)m 6(fect.)k 480 2681(The)m
@@ -15119,8 +15119,8 @@ grestore
5908(F)s 3(or)k 6297(e)s 3(xample,)k 220 fnt2
480 3842(@Moment&&no)m 3(w @Open { @Da)k 6(y {@Months&&@Month}, @Centur)k -6(y{@Y)k 30(ear} })k
240 fnt1 0 3344(produces)m 915(something)s 1965(lik)s 2(e)k
-2377(12)s 2671(April,)s 3282(2007)s 3810(gi)s 6(v)k 3(en)k
-4390(a)s 4556(suitable)s 5355(database)s 6234(of)s 6505(months.)s
+2377(27)s 2665(July)s 15(,)k 3156(2007)s 3684(gi)s 6(v)k 3(en)k
+4264(a)s 4430(suitable)s 5229(database)s 6108(of)s 6379(months.)s
240 fnt5 0 2551(3.34.)m 591(@Null)s
[ /Dest /LOUTnull /DEST pdfmark
240 fnt1 480 2119(This)m
@@ -16711,7 +16711,7 @@ grestore
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
-[ /Dest /LOUT16_1659_pre_grap_1 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_grap_1 /DEST pdfmark
220 fnt2 1553 11902([)m 240 fnt6 1668 11907(length)m 220 fnt2
2321 11902(])m 2430(0)s 2605(setdash)s 240 fnt1 3600 11905(The)m
4034(pen)s 4444(will)s 4876(dra)s 3(w)k 5412(dashed)s
@@ -16719,7 +16719,7 @@ grestore
8289(with)s 8778(the)s 3600 11617(dashes)m 4289(each)s 4784(of)s
5055(the)s 5403(gi)s 6(v)k 3(en)k 5983(length.)s
-[ /Dest /LOUT16_1659_pre_grap_2 /DEST pdfmark
+[ /Dest /LOUT16_1692_pre_grap_2 /DEST pdfmark
0 11114(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 fnt2
3822 11111(strok)m 4(e)k 240 fnt1 4408 11114(.)m 4572(So,)s
@@ -18478,16 +18478,16 @@ grestore
[ /Dest /LOUT19_4580_exa_para_8 /DEST pdfmark
220 fnt2 480 11840(def @ItemPlace { @Galle)m 4(y })k
480 11552(def @ListItem into { @ItemPlace&&preceding })m 480 11264( r)m -3(ight x)k 480 10976({ x })m
-[ /Dest /LOUT16_1659_exa_para_1 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_para_1 /DEST pdfmark
480 10484(def @EndListPlace { @Galle)m 4(y })k
480 10196(def @EndList f)m 6(orce into { @EndListPlace&&preceding })k 480 9908({})m
-[ /Dest /LOUT16_1659_exa_para_2 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_para_2 /DEST pdfmark
480 9416(def @Ra)m 4(wIndentedList)k
480 9128( named style r)m -3(ight tag {})k 480 8840( named indent { @DispIndent })m 480 8552( named gap { @DispGap })m 480 8264( named star)m -8(t { 1 })k
480 7976({)m 480 7688( def @IList r)m -3(ight n)k 2(um)k 480 7400( {)m
480 7112( indent @Wide {style n)m 2(um} | @ItemPlace)k 480 6824( //gap @IList @Ne)m 6(xt n)k 2(um)k
480 6536( })m 480 5960( @IList star)m -8(t // @EndListPlace)k 480 5672(})m
-[ /Dest /LOUT16_1659_exa_para_3 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_para_3 /DEST pdfmark
240 fnt1
0 5178(No)m 6(w)k 514(gi)s 6(v)k 3(en)k
1094(the)s 1442(input)s 220 fnt2 480 4677(@Ra)m 4(wIndentedList)k
@@ -18717,15 +18717,15 @@ grestore
220 fnt2 480 13207(e)m 6(xpor)k -8(t @T)k 26(ag)k
480 12919(def @P)m 8(ageMar)k -3(k)k 4(er r)k -3(ight @T)k 26(ag { @Null })k
-[ /Dest /LOUT16_1659_exa_page_1 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_page_1 /DEST pdfmark
480 12422(def @P)m 8(ageMar)k -3(k r)k -3(ight x)k 480 12134({)m
480 11846( @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged x)k
480 11558(})m
-[ /Dest /LOUT16_1659_exa_page_2 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_page_2 /DEST pdfmark
480 11066(def @P)m 8(ageOf r)k -3(ight x)k 480 10778({)m
480 10490( @P)m 8(ageMar)k -3(k)k 4(er&&x @Open { @T)k 26(ag })k
480 10202(})m
-[ /Dest /LOUT16_1659_exa_page_3 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_page_3 /DEST pdfmark
240 fnt1 0 9708(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 fnt2
@@ -18846,11 +18846,11 @@ grestore
220 fnt2 480 13207(def @F)m 6(ootList r)k -3(ight @T)k 26(ag)k
480 12919({)m 480 12631( @Galle)m 4(y)k 480 12343( //@F)m 6(ootGap @F)k 6(ootList @Ne)k 6(xt @T)k 26(ag)k
480 12055(})m
-[ /Dest /LOUT16_1659_exa_page_4 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_page_4 /DEST pdfmark
480 11563(def @F)m 6(ootSect)k 480 11275({)m 480 10987( @F)m 6(ootLen @Wide @HLine)k
480 10699( //@F)m 6(ootGap @F)k 6(ootList 1 ||@F)k 6(ootLen)k 480 10411(})m
-[ /Dest /LOUT16_1659_exa_page_5 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_page_5 /DEST pdfmark
240 fnt1 0 9917(Similarly)m 15(,)k 220 fnt2 988 9914(@ColF)m 6(ootList)k
240 fnt1 2378 9917(and)m 220 fnt2 2791 9914(@ColF)m 6(ootSect)k
240 fnt1 4279 9917(pro)m 3(vide)k 5072(a)s 5247(sequence)s
@@ -19328,13 +19328,13 @@ grestore
480 9031(def @Chapter f)m 6(orce into { @ChapterList&&preceding })k 480 8743( named @T)m 26(ag {})k 480 8455( named @Title {})m
480 8167( named @RunningTitle { dft })m 480 7879( body @Body)m 480 7591({)m 480 7303( def @F)m 6(ootNote r)k -3(ight x { @ColF)k 6(ootNote x })k
480 6727( def @BeginSections ...)m 480 6439( def @EndSections ...)m 480 6151( def @Section ...)m
-[ /Dest /LOUT16_1659_exa_chap_1 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_chap_1 /DEST pdfmark
480 5698( def @ChapterTitle)m 480 5410( {)m
480 5122( @ChapterNumbers @Case {)m 480 4834( {Y)m 30(es y)k 4(es} @Y)k 4(ield { Chapter {@NumberOf @T)k 26(ag}.)k 13( |2s @Title })k
480 4546( else @Y)m 4(ield @Title)k 480 4258( })m 480 3970( })m 480 3394( def @ChapterNum)m
480 3106( {)m 480 2818( @ChapterNumbers @Case {)m 480 2530( {Y)m 30(es y)k 4(es} @Y)k 4(ield { Chapter {@NumberOf @T)k 26(ag} })k
480 2242( else @Y)m 4(ield @Null)k 480 1954( })m 480 1666( })m
-[ /Dest /LOUT16_1659_exa_chap_2 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_chap_2 /DEST pdfmark
480 1174( r)m 2(agged @Break @BookTitleF)k 6(or)k -5(mat @ChapterTitle)k
480 886( // @NumberMar)m -3(k)k 4(er {)k 480 598( @ChapterList&&@T)m 26(ag @Open { @T)k 26(ag })k
480 310( })m
@@ -19401,7 +19401,7 @@ grestore
480 11191( // @Body)m 480 10903( //@SectionGap @ChapRefSection)m 480 10615( // @Runner)m 480 10327( @T)m 26(opEv)k 5(en { @B @P)k 8(ageNum |1r)k -8(t @I @ChapterNum })k
480 10039( @T)m 26(opOdd { @I {@RunningTitle @OrElse @Title} |1r)k -8(t @B @P)k 8(ageNum })k 480 9751(})m
-[ /Dest /LOUT16_1659_exa_chap_3 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_chap_3 /DEST pdfmark
240 fnt1 0 9257(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
@@ -19693,7 +19693,7 @@ gsave
0 LoutMargSet
grestore
220 fnt2 480 13207(def @EndSections f)m 6(orce into { @EndSectionsPlace&&preceding } {})k 480 12919(macro @BeginSections { //@SectionGap @SectionList 1 // @EndSectionsPlace // })m
-[ /Dest /LOUT16_1659_exa_chap_4 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_chap_4 /DEST pdfmark
480 12422(def @Section f)m 6(orce into { @SectionList&&preceding })k
480 12134( named @T)m 26(ag {})k 480 11846( named @Title {})m 480 11558( named @RunningTitle { dft })m 480 11270( body @Body)m
480 10982({)m 480 10694( def @SectionTitle)m 480 10406( {)m 480 10118( @SectionNumbers @Case {)m 480 9830( {Y)m 30(es y)k 4(es} @Y)k 4(ield { {@NumberOf @T)k 26(ag}.)k 13( |2s @Title })k
@@ -19704,7 +19704,7 @@ grestore
480 6086( // @P)m 8(ageMar)k -3(k)k 4(er&&preceding @T)k 26(agged @T)k 26(ag)k
480 5798( // { &3f @SectionTitle } @ContentsEntr)m -6(y {@P)k 8(ageOf @T)k 26(ag})k 480 5510( //0io @Body)m
480 5222(})m
-[ /Dest /LOUT16_1659_exa_chap_5 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_chap_5 /DEST pdfmark
240 fnt1 0 4728(The)m 220 fnt2 409 4725(@BeginSections)m
240 fnt1 2066 4728(macro)m 2696(in)s 9(v)k 4(ok)k 2(es)k
220 fnt2 3457 4725(@SectionList)m 240 fnt1 4748 4728(,)m 4835(preceded)s
@@ -19840,13 +19840,13 @@ grestore
480 4729( @T)m 26(ype { Book })k 480 4441( @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 4153( @Title { )m 11(The Elements of Style })k 480 3865( @Pub)m 4(lisher { MacMillan, third edition })k 480 3577( @Y)m 30(ear { 1979 })k
480 3289(})m
-[ /Dest /LOUT16_1659_exa_bibl_1 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_bibl_1 /DEST pdfmark
480 2797({ @Ref)m 6(erence)k 480 2509( @T)m 26(ag { kingston92 })k
480 2221( @T)m 26(ype { )k 11(T)k 26(echRepor)k -8(t })k
480 1933( @A)m 6(uthor { Kingston, Jeffre)k 4(y H.)k 13( })k 480 1645( @Title { Document F)m 6(or)k -5(matting with Lout \(Second Edition\) })k
480 1357( @Number { 449 })m 480 1069( @Institution { Basser Depar)m -8(tment of Computer)k 480 781(Science F09, Univ)m 5(ersity of Sydne)k 4(y 2006, A)k 6(ustr)k 2(alia })k
480 493( @Y)m 30(ear { 1992 })k 480 205(})m
-[ /Dest /LOUT16_1659_exa_bibl_2 /DEST pdfmark
+[ /Dest /LOUT16_1692_exa_bibl_2 /DEST pdfmark
grestore
gsave
@@ -20908,7 +20908,7 @@ grestore
8329 3219(,)m 220 fnt2 8525 3216(/De)m 8858(-)s 3059 2928(viceRGB)m
240 fnt1 3916 2931(,)m 4023(or)s 220 fnt2 4282 2928(/De)m 6(viceCMYK)k
-[ /Dest /LOUT16_1659_tex_1 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_1 /DEST pdfmark
240 fnt1 0 2447(\213)m 480(A)s 708(color)s 9(,)k
1294(denoted)s 2107(c,)s 2318(is)s 2525(an)s 2805(array)s
3346(containing)s 4407(a)s 4570(PostScript)s 5609(non-pattern)s 6765(color)s
@@ -20928,7 +20928,7 @@ grestore
1633(be)s 1915(unpack)s 2(ed)k 2889(with)s 220 fnt2
3371 149(aload)m 240 fnt1 3955 152(before)m 4621(calling)s 220 fnt2
5324 149(setcolor)m 240 fnt1 6092 152(.)m
-[ /Dest /LOUT16_1659_tex_2 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_2 /DEST pdfmark
grestore
0 0 0 0 240 288 60 1417 -14865 LoutGr2
@@ -21016,7 +21016,7 @@ grestore
8566(share)s 480 10439(pattern)m 1200(dictionaries)s 2365(among)s 3070(graphics)s
3931(states.)s 4625(W)s 19(e)k 4994(must)s 5519(cop)s 2(y)k
6037(them.)s
-[ /Dest /LOUT16_1659_tex_3 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_3 /DEST pdfmark
0 9936(This)m 476(representation)s 1886(obe)s 3(ys)k
2493(the)s 2841(follo)s 6(wing)k 3818(in)s 9(v)k 6(ariant:)k
0 9433(\213)m 480(All)s 853(components)s 2075(of)s 2360(the)s
@@ -21027,7 +21027,7 @@ grestore
3096(situation)s 3976(where)s 4616(we)s 4951(set)s 5276(color)s
5827(space)s 6414(b)s 4(ut)k 6776(not)s 7142(color\).)s
-[ /Dest /LOUT16_1659_tex_4 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_4 /DEST pdfmark
0 8642(\213)m 480(If)s 709(the)s 1056(PostScript)s 2097(graphics)s
2956(state)s 3448(contains)s 4295(a)s 220 fnt2 4460 8639(/P)m 8(atter)k -5(n)k
240 fnt1 5269 8642(colorspace,)m 6397(the)s 6744(pattern)s 7463(dictionary)s
@@ -21037,7 +21037,7 @@ grestore
7027(of)s 7298(types)s 220 fnt2 7854 8351(cs)m 240 fnt1
8127 8354(and)m 220 fnt2 8531 8351(c)m 240 fnt1 8636 8354(.)m
-[ /Dest /LOUT16_1659_tex_5 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_5 /DEST pdfmark
0 7851(\213)m 480(If)s 733(the)s 1105(graphics)s 1990(state)s
2507(contains)s 3379(an)s 3685(uncolored)s 220 fnt2 4724 7848(/P)m 8(atter)k -5(n)k
240 fnt1 5559 7851(colorspace,)m 6712(then)s 7205(the)s 220 fnt2
@@ -21048,7 +21048,7 @@ grestore
8644(with)s 480 7275(the)m 828(underlying)s 1918(color)s 2469(space)s
3056(and)s 3460(color)s 4011(stored)s 4653(in)s 4896(the)s
5244(graphics)s 6105(state.)s
-[ /Dest /LOUT16_1659_tex_6 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_6 /DEST pdfmark
0 6772(And)m 471(it)s 663(has)s
1033(the)s 1381(follo)s 6(wing)k 2358(abstraction)s 3463(function:)s
0 6269(\213)m 480(If)s 725(the)s 1089(graphics)s 1965(state)s
@@ -21062,7 +21062,7 @@ grestore
240 fnt1 9019 5981(,)m 480 5693(then)m 949(the)s 1297(abstract)s
2099(current)s 2835(te)s 3(xture)k 3551(is)s 220 fnt2
3761 5690(n)m 2(ull)k 240 fnt1 4085 5693(.)m
-[ /Dest /LOUT16_1659_tex_7 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_7 /DEST pdfmark
0 5236(\213)m
480(If)s 725(the)s 1089(graphics)s 1966(state)s 2475(colorspace)s
3568(is)s 220 fnt2 3794 5233(/P)m 8(atter)k -5(n)k
@@ -21079,14 +21079,14 @@ grestore
2294(and)s 2698(color)s 3249(are)s 3596(as)s 3846(returned)s
4700(by)s 220 fnt2 4994 4369(currentcolorspace)m 240 fnt1 6790 4372(and)m
220 fnt2 7194 4369([ currentcolor ])m 240 fnt1 8583 4372(.)m
-[ /Dest /LOUT16_1659_tex_8 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_8 /DEST pdfmark
0 3869(The)m
428(follo)s 6(wing)k 1405(functions)s 2346(are)s 2693(pri)s 6(v)k 6(ate)k
3400(helpers)s 4141(for)s 4479(the)s 4827(public)s 5478(functions:)s
220 fnt9 480 3392(% Current pattern \(may be null\): - LoutCurrentP p)m 480 3144(/LoutCurrentP)m 480 2896({ %% -)m 480 2648( currentcolorspace %% [ /name etc ])m
480 2400( 0 get /Pattern eq %% bool)m 480 2152( { %% - \(have pattern\))m 480 1904( [ currentcolor ] %% [ comp0 ... compn p ])m 480 1656( dup length 1 sub get %% p)m 480 1408( })m
480 1160( { %% - \(no pattern\))m 480 912( null %% null)m 480 664( } ifelse %% p)m 480 416(} def)m
-[ /Dest /LOUT16_1659_tex_9 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_9 /DEST pdfmark
grestore
gsave
@@ -21147,7 +21147,7 @@ grestore
480 12533( LoutCurrentP dup null eq %% p bool)m 480 12285( { %% null)m 480 12037( pop [ currentcolor ] %% c)m 480 11789( currentcolorspace %% c cs)m 480 11541( })m
480 11293( { %% p)m 480 11045( dup %% p p)m 480 10797( /UnderlyingColor get exch %% c p)m 480 10549( /UnderlyingColorSpace get %% c cs)m 480 10301( } ifelse %% c cs)m
480 10053(} def)m
-[ /Dest /LOUT16_1659_tex_10 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_10 /DEST pdfmark
480 9604(% Make c, cs, and p current: c cs p LoutSetCCSP -)m 480 9356(/LoutSetCCSP)m 480 9108({ %% c cs p)m 480 8860( dup null eq %% c cs p bool)m
480 8612( { %% c cs p \(null pattern\))m 480 8364( pop setcolorspace %% c)m 480 8116( aload pop setcolor %% -)m 480 7868( })m 480 7620( { %% c cs p \(non-null pattern\))m
480 7372( % copy pattern dictionary)m 480 7124( 12 dict copy %% c cs p)m 480 6628( % record cs and c in p)m 480 6380( dup /UnderlyingColorSpace %% c cs p p /UCS)m 480 6132( 3 index put %% c cs p)m
@@ -21155,7 +21155,7 @@ grestore
480 4396( [/Pattern] setcolorspace %% c cs p)m 480 4148( setcolor %% c cs)m 480 3900( pop pop %% -)m 480 3652( })m 480 3404( { %% c cs p \(uncolored pattern\))m
480 3156( [ /Pattern %% c cs p [ /Pattern)m 480 2908( 4 -1 roll %% c p [ /Pattern cs)m 480 2660( ] setcolorspace %% c p)m 480 2412( exch aload length 1 add %% p comp1 ... compm m+1)m 480 2164( -1 roll %% comp1 ... compm p)m
480 1916( setcolor %% -)m 480 1668( } ifelse %% -)m 480 1420( } ifelse %% -)m 480 1172(} def)m
-[ /Dest /LOUT16_1659_tex_11 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_11 /DEST pdfmark
240 fnt1
0 697(W)m 9(ith)k 536(the)s 894(helper)s 1561(functions)s
2513(it')s 13(s)k 2865(no)s 6(w)k 3336(easy)s
@@ -21236,21 +21236,21 @@ grestore
4226(of)s 220 fnt2 4497 13202(rgb)m 240 fnt1 4806 13205(.)m
220 fnt9 480 12731(% num LoutSetGray -)m 480 12483(/LoutSetGray)m 480 12235({)m 480 11987( [ 2 1 roll ] %% c)m
480 11739( [ /DeviceGray ] %% c cs)m 480 11491( LoutCurrentP %% c cs p)m 480 11243( LoutSetCCSP %% -)m 480 10995(} def)m
-[ /Dest /LOUT16_1659_tex_12 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_12 /DEST pdfmark
480 10546(% r g b LoutSetRGBColor -)m
480 10298(/LoutSetRGBColor)m 480 10050({ %% r g b)m 480 9802( [ 4 1 roll ] %% c)m 480 9554( [ /DeviceRGB ] %% c cs)m 480 9306( LoutCurrentP %% c cs p)m
480 9058( LoutSetCCSP %% -)m 480 8810(} def)m
-[ /Dest /LOUT16_1659_tex_13 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_13 /DEST pdfmark
480 8361(% h s b LoutSetHSBColor -)m 480 8113(/LoutSetHSBColor)m 480 7865({ %% h s b)m
480 7617( gsave sethsbcolor %% -)m 480 7369( currentrgbcolor grestore %% r g b)m 480 7121( LoutSetRGBColor %% -)m 480 6873(} def)m
-[ /Dest /LOUT16_1659_tex_14 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_14 /DEST pdfmark
480 6424(% c m y k LoutSetRGBColor -)m
480 6176(/LoutSetCMYKColor)m 480 5928({)m 480 5680( [ 5 1 roll ] %% c)m 480 5432( [ /DeviceCMYK ] %% c cs)m 480 5184( LoutCurrentP %% c cs p)m
480 4936( LoutSetCCSP %% -)m 480 4688(} def)m
-[ /Dest /LOUT16_1659_tex_15 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_15 /DEST pdfmark
480 4241(% p LoutSetTexture -)m 480 3993(/LoutSetTexture)m 480 3745({)m
480 3497( LoutCurrentCCS %% p c cs)m 480 3249( 3 -1 roll %% c cs p)m 480 3001( LoutSetCCSP %% -)m 480 2753(} def)m
-[ /Dest /LOUT16_1659_tex_16 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_16 /DEST pdfmark
240 fnt1
0 2278(All)m 369(we)s 713(need)s 1232(no)s 6(w)k
1702(is)s 1921(some)s 2491(sample)s 3233(te)s 3(xtures.)k
@@ -21331,7 +21331,7 @@ grestore
480 8807( matrix scale %% p mat1 mat2 s mat3)m 480 8559( exch dup matrix scale %% p mat1 mat2 mat3 mat4)m 480 8311( matrix concatmatrix %% p mat1 mat2 mat34)m 480 8063( matrix concatmatrix %% p mat1 mat234)m 480 7815( matrix concatmatrix %% p mat1234)m
480 7567( /makepattern where)m 480 7319( { %% p mat123 dict)m 480 7071( pop makepattern %% p)m 480 6823( })m 480 6575( { %% p mat123)m
480 6327( pop pop null %% null)m 480 6079( } ifelse %% p \(may be null\))m 480 5831(} def)m
-[ /Dest /LOUT16_1659_tex_17 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_17 /DEST pdfmark
240 fnt1 0 5356(F)m 3(or)k
384(e)s 3(xamples)k 1330(of)s 1596(te)s 3(xtures)k
2395(using)s 220 fnt2 2962 5353(LoutMak)m 4(eT)k 26(e)k 6(xture)k
@@ -21342,7 +21342,7 @@ grestore
220 fnt2 2615 5065(LoutT)m 26(e)k 6(xtureSolid)k 240 fnt1
4228 5068(:)m 220 fnt9 480 4585(/LoutTextureSolid)m 480 4337({)m 480 4089( null)m
480 3841( LoutSetTexture)m 480 3593(} def)m
-[ /Dest /LOUT16_1659_tex_18 /DEST pdfmark
+[ /Dest /LOUT16_1692_tex_18 /DEST pdfmark
grestore
gsave
@@ -21633,122 +21633,122 @@ grestore
558(printing)s 1368(of)s 1639(current)s 2322(,)s
[ /Rect [2429 289 2663 456] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_mome_2 /ANN pdfmark
2429(64)s
-4816 11810(Def)m 2(ault)k 5590(v)s 6(alue)k 6158(of)s
+4816 11811(Def)m 2(ault)k 5590(v)s 6(alue)k 6158(of)s
6429(parameter)s 7390(,)s
-[ /Rect [7497 11807 7730 11974] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_name_3 /ANN pdfmark
-7497(16)s 4816 11522(De\207nitions)m 5877(,)s
+[ /Rect [7497 11810 7725 11973] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_name_3 /ANN pdfmark
+7497(17)s 4816 11523(De\207nitions)m 5877(,)s
-[ /Rect [5984 11522 6098 11684] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pri_defi_1 /ANN pdfmark
-5984(4)s 4816 11234(Delimiter)m 5737(,)s
-[ /Rect [5844 11234 6078 11396] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_lexi_11 /ANN pdfmark
-5844(14)s 4816 10946(Diag)m
+[ /Rect [5984 11523 6098 11685] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pri_defi_1 /ANN pdfmark
+5984(4)s 4816 11235(Delimiter)m 5737(,)s
+[ /Rect [5844 11235 6078 11397] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_lexi_11 /ANN pdfmark
+5844(14)s 4816 10947(Diag)m
5334(diagram-dra)s 3(wing)k 7030(package)s 7817(,)s
-[ /Rect [7924 10945 8158 11108] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_grap_4 /ANN pdfmark
+[ /Rect [7924 10946 8158 11109] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_grap_4 /ANN pdfmark
7924(74)s
-4816 10658(Diagrams)m 5743(,)s
-[ /Rect [5850 10657 6065 10820] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_grap_2 /ANN pdfmark
-5850(71)s 4816 10370(DocumentLayout)m 6551(package)s
+4816 10659(Diagrams)m 5743(,)s
+[ /Rect [5850 10658 6065 10821] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_grap_2 /ANN pdfmark
+5850(71)s 4816 10371(DocumentLayout)m 6551(package)s
7338(,)s
-[ /Rect [7445 10367 7669 10532] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_para_1 /ANN pdfmark
-7445(83)s 5056 10082(chapters)m 5903(and)s 6307(sections)s
+[ /Rect [7445 10368 7669 10533] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_para_1 /ANN pdfmark
+7445(83)s 5056 10083(chapters)m 5903(and)s 6307(sections)s
7075(,)s
-[ /Rect [7182 10077 7416 10244] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_chap_2 /ANN pdfmark
-7182(92)s 5056 9794(displays)m 5838(,)s
-[ /Rect [5945 9791 6179 9956] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_para_4 /ANN pdfmark
+[ /Rect [7182 10078 7416 10245] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_chap_2 /ANN pdfmark
+7182(92)s 5056 9795(displays)m 5838(,)s
+[ /Rect [5945 9792 6179 9957] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_para_4 /ANN pdfmark
5945(84)s
-5056 9506(lists)m 5438(,)s
-[ /Rect [5545 9503 5771 9671] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_para_6 /ANN pdfmark
-5545(85)s 5056 9218(page)m 5564(layout)s
+5056 9507(lists)m 5438(,)s
+[ /Rect [5545 9504 5771 9672] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_para_6 /ANN pdfmark
+5545(85)s 5056 9219(page)m 5564(layout)s
6169(,)s
-[ /Rect [6276 9215 6504 9380] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_page_2 /ANN pdfmark
-6276(87)s 5056 8930(paragraphs)m 6103(,)s
-[ /Rect [6210 8927 6444 9092] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_para_2 /ANN pdfmark
+[ /Rect [6276 9216 6504 9381] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_page_2 /ANN pdfmark
+6276(87)s 5056 8931(paragraphs)m 6103(,)s
+[ /Rect [6210 8928 6444 9093] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_para_2 /ANN pdfmark
6210(84)s
-220 fnt2 4816 8639(d)m 240 fnt1 4986 8642(unit)m 5365(,)s
+220 fnt2 4816 8640(d)m 240 fnt1 4986 8643(unit)m 5365(,)s
-[ /Rect [5472 8639 5699 8804] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_conc_17 /ANN pdfmark
-5472(38)s 4816 8066(Edge-to-edge)m 6160(g)s 1(ap)k 6558(mode)s
+[ /Rect [5472 8640 5699 8805] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_conc_17 /ANN pdfmark
+5472(38)s 4816 8067(Edge-to-edge)m 6160(g)s 1(ap)k 6558(mode)s
7093(,)s
-[ /Rect [7200 8063 7427 8228] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_conc_19 /ANN pdfmark
-7200(38)s 220 fnt2 4816 7775(e)m 240 fnt1
-4990 7778(g)m 1(ap)k 5388(mode)s 5923(,)s
-[ /Rect [6030 7775 6257 7940] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_conc_20 /ANN pdfmark
+[ /Rect [7200 8064 7427 8229] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_conc_19 /ANN pdfmark
+7200(38)s 220 fnt2 4816 7776(e)m 240 fnt1
+4990 7779(g)m 1(ap)k 5388(mode)s 5923(,)s
+[ /Rect [6030 7776 6257 7941] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_conc_20 /ANN pdfmark
6030(38)s
-220 fnt2 4816 7487(@Enclose)m 240 fnt1 5818 7490(,)m
-[ /Rect [5925 7487 6159 7652] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_gall_12 /ANN pdfmark
+220 fnt2 4816 7488(@Enclose)m 240 fnt1 5818 7491(,)m
+[ /Rect [5925 7488 6159 7653] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_gall_12 /ANN pdfmark
5925(32)s
-220 fnt2 4816 7199(@End)m 240 fnt1 5477 7202(symbol)m 6184(,)s
+220 fnt2 4816 7200(@End)m 240 fnt1 5477 7203(symbol)m 6184(,)s
-[ /Rect [6291 7199 6519 7364] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_begi_2 /ANN pdfmark
-6291(37)s 220 fnt2 4816 6911(@EndHeaderComponent)m 240 fnt1 7338 6914(symbol)m
+[ /Rect [6291 7200 6519 7365] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_begi_2 /ANN pdfmark
+6291(37)s 220 fnt2 4816 6912(@EndHeaderComponent)m 240 fnt1 7338 6915(symbol)m
8045(,)s
-[ /Rect [8152 6911 8385 7078] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_head_3 /ANN pdfmark
-8152(66)s 4816 6626(Eq)m 5140(equation)s 6021(formatting)s
+[ /Rect [8152 6912 8385 7079] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_head_3 /ANN pdfmark
+8152(66)s 4816 6627(Eq)m 5140(equation)s 6021(formatting)s
7082(package)s 7869(,)s
-[ /Rect [7976 6623 8191 6788] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_equa_1 /ANN pdfmark
-7976(81)s 220 fnt2 4816 6335(@Eq)m
-240 fnt1 5354 6338(e)m 3(xample)k 6164(,)s
-[ /Rect [6271 6335 6486 6500] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_equa_4 /ANN pdfmark
+[ /Rect [7976 6624 8191 6789] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_equa_1 /ANN pdfmark
+7976(81)s 220 fnt2 4816 6336(@Eq)m
+240 fnt1 5354 6339(e)m 3(xample)k 6164(,)s
+[ /Rect [6271 6336 6486 6501] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_equa_4 /ANN pdfmark
6271(81)s
-4816 6050(Escape)m 5549(character)s 6430(,)s
-[ /Rect [6537 6050 6771 6212] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_lexi_5 /ANN pdfmark
+4816 6051(Escape)m 5549(character)s 6430(,)s
+[ /Rect [6537 6051 6771 6213] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_lexi_5 /ANN pdfmark
6537(14)s 220 fnt2
-4816 5759(@Ev)m 5(enP)k 8(ageList)k 240 fnt1 6435 5762(e)m 3(xample)k
+4816 5760(@Ev)m 5(enP)k 8(ageList)k 240 fnt1 6435 5763(e)m 3(xample)k
7245(,)s
-[ /Rect [7352 5757 7567 5924] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_page_10 /ANN pdfmark
-7352(91)s 4816 5474(Expansion)m 5884(of)s 6155(object)s
+[ /Rect [7352 5758 7567 5925] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_page_10 /ANN pdfmark
+7352(91)s 4816 5475(Expansion)m 5884(of)s 6155(object)s
6746(,)s
-[ /Rect [6853 5471 7087 5639] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_hexp_3 /ANN pdfmark
-6853(54)s 220 fnt2 4816 5183(e)m 6(xpor)k -8(t)k
-240 fnt1 5484 5186(clause)m 6084(,)s
-[ /Rect [6191 5181 6422 5348] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_visi_4 /ANN pdfmark
-6191(19)s 4816 4610(F)m 3(ace)k
+[ /Rect [6853 5472 7087 5640] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_hexp_3 /ANN pdfmark
+6853(54)s 220 fnt2 4816 5184(e)m 6(xpor)k -8(t)k
+240 fnt1 5484 5187(clause)m 6084(,)s
+[ /Rect [6191 5182 6422 5349] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_visi_4 /ANN pdfmark
+6191(19)s 4816 4611(F)m 3(ace)k
5320(of)s 5591(a)s 5757(font)s 6149(,)s
-[ /Rect [6256 4610 6471 4772] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_font_3 /ANN pdfmark
+[ /Rect [6256 4611 6471 4773] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_font_3 /ANN pdfmark
6256(41)s
-4816 4322(F)m 3(amily)k 5544(of)s 5815(a)s 5981(font)s
+4816 4323(F)m 3(amily)k 5544(of)s 5815(a)s 5981(font)s
6373(,)s
-[ /Rect [6480 4322 6695 4484] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_font_2 /ANN pdfmark
-6480(41)s 220 fnt2 4816 4031(f)m 6(ollo)k 3(wing)k
-240 fnt1 5653 4034(,)m
-[ /Rect [5760 4029 5871 4196] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pri_cros_7 /ANN pdfmark
-5760(9)s 220 fnt2 4816 3743(f)m 6(ollo)k 3(wing)k
-240 fnt1 5653 3746(,)m
-[ /Rect [5760 3741 5871 3908] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pri_cros_6 /ANN pdfmark
-5760(9)s 4816 3458(F)m 3(onts)k
+[ /Rect [6480 4323 6695 4485] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_font_2 /ANN pdfmark
+6480(41)s 220 fnt2 4816 4032(f)m 6(ollo)k 3(wing)k
+240 fnt1 5653 4035(,)m
+[ /Rect [5760 4030 5871 4197] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pri_cros_7 /ANN pdfmark
+5760(9)s 220 fnt2 4816 3744(f)m 6(ollo)k 3(wing)k
+240 fnt1 5653 3747(,)m
+[ /Rect [5760 3742 5871 3909] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pri_cros_6 /ANN pdfmark
+5760(9)s 4816 3459(F)m 3(onts)k
5343(,)s
-[ /Rect [5450 3458 5665 3620] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_font_1 /ANN pdfmark
-5450(41)s 220 fnt2 4816 3167(@F)m 6(ont)k
-240 fnt1 5528 3170(symbol)m 6235(,)s
-[ /Rect [6342 3170 6557 3332] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_font_6 /ANN pdfmark
+[ /Rect [5450 3459 5665 3621] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_font_1 /ANN pdfmark
+5450(41)s 220 fnt2 4816 3168(@F)m 6(ont)k
+240 fnt1 5528 3171(symbol)m 6235(,)s
+[ /Rect [6342 3171 6557 3333] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_font_6 /ANN pdfmark
6342(41)s 220 fnt2
-4816 2879(@F)m 6(ootSect)k 240 fnt1 5967 2882(e)m 3(xample)k
+4816 2880(@F)m 6(ootSect)k 240 fnt1 5967 2883(e)m 3(xample)k
6777(,)s
-[ /Rect [6884 2879 7111 3044] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_page_4 /ANN pdfmark
-6884(88)s 220 fnt2 4816 2591(@F)m 6(orceGalle)k 4(y)k
-240 fnt1 6269 2594(symbol)m 6976(,)s
-[ /Rect [7083 2591 7309 2759] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_gall_2 /ANN pdfmark
-7083(65)s 4816 2306(F)m 3(orcing)k
+[ /Rect [6884 2880 7111 3045] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_exa_page_4 /ANN pdfmark
+6884(88)s 220 fnt2 4816 2592(@F)m 6(orceGalle)k 4(y)k
+240 fnt1 6269 2595(symbol)m 6976(,)s
+[ /Rect [7083 2592 7309 2760] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_gall_2 /ANN pdfmark
+7083(65)s 4816 2307(F)m 3(orcing)k
5610(g)s 1(alle)k 3(y)k 6191(,)s
-[ /Rect [6298 2303 6533 2468] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_gall_10 /ANN pdfmark
+[ /Rect [6298 2304 6533 2469] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_gall_10 /ANN pdfmark
6298(30)s
-4816 2018(F)m 3(ormfeed)k 5747(,)s
-[ /Rect [5854 2018 6088 2180] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_lexi_9 /ANN pdfmark
+4816 2019(F)m 3(ormfeed)k 5747(,)s
+[ /Rect [5854 2019 6088 2181] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_lexi_9 /ANN pdfmark
5854(14)s 220 fnt2
-4816 1727(f)m 240 fnt1 4934 1730(unit)m 5313(,)s
-[ /Rect [5420 1727 5647 1892] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_conc_11 /ANN pdfmark
+4816 1728(f)m 240 fnt1 4934 1731(unit)m 5313(,)s
+[ /Rect [5420 1728 5647 1893] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_conc_11 /ANN pdfmark
5420(38)s
-4816 1154(Galle)m 3(ys)k 5541(,)s
-[ /Rect [5648 1151 5883 1316] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pri_gall_1 /ANN pdfmark
-5648(10)s 5056 866(in)m
+4816 1155(Galle)m 3(ys)k 5541(,)s
+[ /Rect [5648 1152 5883 1317] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pri_gall_1 /ANN pdfmark
+5648(10)s 5056 867(in)m
5299(detail)s 5831(,)s
-[ /Rect [5938 865 6166 1028] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_gall_1 /ANN pdfmark
-5938(27)s 220 fnt2 4816 575(@Galle)m 4(y)k
-240 fnt1 5714 578(symbol)m 6421(,)s
-[ /Rect [6528 575 6754 743] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_gall_1 /ANN pdfmark
-6528(65)s 4816 290(Gap)m
+[ /Rect [5938 866 6166 1029] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_det_gall_1 /ANN pdfmark
+5938(27)s 220 fnt2 4816 576(@Galle)m 4(y)k
+240 fnt1 5714 579(symbol)m 6421(,)s
+[ /Rect [6528 576 6754 744] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_gall_1 /ANN pdfmark
+6528(65)s 4816 291(Gap)m
5215(,)s
-[ /Rect [5322 287 5549 452] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_conc_6 /ANN pdfmark
+[ /Rect [5322 288 5549 453] /Border [0 0 0] /View [ /XYZ null null null ] /Subtype /Link /Dest /LOUT19_4580_pre_conc_6 /ANN pdfmark
5322(38)s
grestore
0 0 0 0 240 288 60 1417 -14867 LoutGr2
diff --git a/doc/expert/pre_conc b/doc/expert/pre_conc
index 6ef6626..0434b95 100644
--- a/doc/expert/pre_conc
+++ b/doc/expert/pre_conc
@@ -308,7 +308,7 @@ hyphenation @Index { Hyphenation gap mode }
tex.hyphenation @SubIndex { hyphenation }
is chosen for replacement by {@Code "//1vx"}, a hyphen will be appended to
the preceding object, unless that object is a word which already ends with
-a hyphen. For example,
+a hyphen or slash. For example,
@ID @Code {
Long words may be "hyph &0ih enat &0ih ed."
}
diff --git a/doc/expert/preface b/doc/expert/preface
index 2541f21..2943299 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 } and developed
continuously since then. This manual was rendered into PostScript
postscript @Index { PostScript }
-by Version 3.35 of the Basser Lout interpreter, using the symbols
+by Version 3.36 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 b3fe9ed..4d09ea3 100644
--- a/doc/slides/README
+++ b/doc/slides/README
@@ -15,4 +15,4 @@ be no error messages at all after the second run.
A copy of the final outfile.ps is included.
Jeff Kingston
-12 April 2007
+27 July 2007
diff --git a/doc/slides/outfile.ps b/doc/slides/outfile.ps
index 40ddd7c..87948ba 100644
--- a/doc/slides/outfile.ps
+++ b/doc/slides/outfile.ps
@@ -1,6 +1,6 @@
%!PS-Adobe-3.0
-%%Creator: Basser Lout Version 3.35 (April 2007)
-%%CreationDate: Thu Apr 12 20:08:49 2007
+%%Creator: Basser Lout Version 3.36 (July 2007)
+%%CreationDate: Fri Jul 27 08:31:29 2007
%%DocumentData: Binary
%%DocumentNeededResources: (atend)
%%DocumentSuppliedResources: (atend)
@@ -3116,16 +3116,16 @@ grestore
400 fnt4 1440 8364(Operating)m 3287(Instructions)s
400 fnt1 1440 7529(1.)m 2240(Press)s 3166(small)s 4123(green)s
5104(le)s 10(v)k 6(er)k 22(.)k
-[ /Dest /LOUT22_1659_all_1 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_1 /DEST pdfmark
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
-[ /Dest /LOUT22_1659_all_2 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_2 /DEST pdfmark
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
-[ /Dest /LOUT22_1659_all_3 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_3 /DEST pdfmark
grestore
@@ -3532,9 +3532,9 @@ grestore
5977(of)s 2240 3961(Computer)m 3938(Science)s 5171(,)s 5349(Uni)s 10(v)k 6(ersity)k
2240 3481(of)m 2693(Sydne)s 6(y)k 3876(,)s 4054(1995)s
4830(.)s
-[ /Dest /LOUT22_1659_all_4 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_4 /DEST pdfmark
1440 2644(2.)m 2240(\202)s
-[ /Dest /LOUT22_1659_all_5 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_5 /DEST pdfmark
grestore
@@ -3648,29 +3648,29 @@ grestore
[ /Dest /LOUT26_235_all_19 /DEST pdfmark
400 fnt1 0 9650(\213)m 800(T)s 14(itle)k
1632(page,)s 2564(pref)s 4(ace,)k 3912(introduction)s
-[ /Dest /LOUT22_1659_all_6 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_6 /DEST pdfmark
0 8810(\213)m
800(Automatic)s 2574(table)s 3442(of)s 3895(contents)s
-[ /Dest /LOUT22_1659_all_7 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_7 /DEST pdfmark
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
-[ /Dest /LOUT22_1659_all_8 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_8 /DEST pdfmark
0 7213(\213)m 800(Chapters,)s 2397(sections,)s
3861(subsections,)s 5880(appendices)s
-[ /Dest /LOUT22_1659_all_9 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_9 /DEST pdfmark
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
-[ /Dest /LOUT22_1659_all_10 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_10 /DEST pdfmark
0 5535(\213)m 800(Running)s 2265(page)s 3111(headers)s
-[ /Dest /LOUT22_1659_all_11 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_11 /DEST pdfmark
0 4695(\213)m
800(Odd-e)s 10(v)k 6(en)k 2453(page)s 3299(formats)s
-[ /Dest /LOUT22_1659_all_12 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_12 /DEST pdfmark
0 3855(\213)m 800(Sorted)s 1940(inde)s 6(x)k
-[ /Dest /LOUT22_1659_all_13 /DEST pdfmark
+[ /Dest /LOUT22_1692_all_13 /DEST pdfmark
grestore
gsave
diff --git a/doc/user/README b/doc/user/README
index 5306c33..9b8df78 100644
--- a/doc/user/README
+++ b/doc/user/README
@@ -21,11 +21,11 @@ error message output on the last run for A4 size printing:
lout:
: lout -r beginning run 6:
-lout file "str_indx" (from "str" line 16, from "all" line 38):
- 54,1: 0.3c object too high for 0.1c space; will try elsewhere
-lout file "gra_summ" (from "gra" line 44, from "all" line 46):
+lout file "str_indx" (from "str" line 16, from "all" line 39):
+ 53,1: 0.3c object too high for 0.0c space; will try elsewhere
+lout file "gra_summ" (from "gra" line 44, from "all" line 47):
10,1: 24.1c object too high for 23.6c space; @Scale inserted
-lout file "prg_tabs" (from "prg" line 141, from "all" line 48):
+lout file "prg_tabs" (from "prg" line 141, from "all" line 49):
66,23: prg2lout 2,1: program text ended within comment
68,35: prg2lout 2,1: program text ended within comment
@@ -41,7 +41,7 @@ repeated failure to converge, caused by footnotes and floating figures
close to large unbreakable displays.
A copy of the final PostScript output file (A4 paper size) is
-stored at "ftp://ftp.it.usyd.edu.au/jeff/lout/lout-3.35.user.ps.gz".
+stored at "ftp://ftp.it.usyd.edu.au/jeff/lout/lout-3.36.user.ps.gz".
Jeffrey H. Kingston
-13 April 2007
+27 July 2007
diff --git a/doc/user/all b/doc/user/all
index 17726bd..7c75312 100644
--- a/doc/user/all
+++ b/doc/user/all
@@ -2,6 +2,7 @@
@SysInclude { tab }
@SysInclude { tbl }
@SysInclude { eq }
+@SysInclude { math }
@SysInclude { graph }
@SysInclude { pie }
@SysInclude { pas }
@@ -22,8 +23,8 @@ Lout
Document Formatting System
}
@Author { Jeffrey H. Kingston }
- @Edition { Version 3.35
-April, 2007 }
+ @Edition { Version 3.36
+July, 2007 }
@Publisher {
Copyright @CopyRight 1991, 2007 Jeffrey H. Kingston,
School of Information Technologies,
diff --git a/doc/user/ap_byp b/doc/user/ap_byp
index 18ee641..002f439 100644
--- a/doc/user/ap_byp
+++ b/doc/user/ap_byp
@@ -5,10 +5,10 @@
@PP
The `bypass' symbols described in this appendix are intended to be
bypass.symbols @Index { bypass symbols }
-used only in Lout which is generated by computer programs. Their
-purpose is to bypass the Lout cross reference database, and so reduce
-the number of passes needed to finalise a document. These symbols
-should not be used by people, because that would only lead back to the
+used in Lout which is generated by computer programs. Their purpose
+is to bypass the Lout cross reference database, and so reduce the
+number of passes needed to finalise a document. These symbols are not
+intended to be used by people, because that would only lead back to the
consistency problems that prompted the introduction of cross references
in the first place.
@PP
@@ -52,9 +52,10 @@ use the @Code "@BypassNumber" option:
Give the full `path number' (5.2, B.3 or whatever) of the symbol. There is
a @Code "@BypassNumber" option for every symbol that has a @Code "@Title"
option and is usually assigned a number automatically by Lout, plus
-@Code "@Figure" and {@Code "@Table"}. No changes to the setup file are
-required in order to use {@Code "@BypassNumber"}, and it is permitted
-for some large-scale structure symbols to have this option and others not.
+{@Code "@Figure"}, {@Code "@Table"}, and (since Version 3.36) the numbered
+display symbols. No changes to the setup file are required in order to use
+{@Code "@BypassNumber"}, and it is permitted for some large-scale structure
+symbols to have this option and others not.
@PP
To produce a bypass reference list, set the @Code "@MakeReferences"
setup file option to @Code "Bypass" and place reference entries at the
diff --git a/doc/user/bas_hyph b/doc/user/bas_hyph
index 288760c..9e9a2f9 100644
--- a/doc/user/bas_hyph
+++ b/doc/user/bas_hyph
@@ -29,8 +29,8 @@ use the @Code "&-" symbol:
}
This both allows hyphenation at the point marked and prevents it
in the adjacent word fragments. If @Code "&-" occurs directly after
-a hyphen character, hyphenation will be permitted but no extra hyphen
-will be inserted.
+a hyphen or slash character, hyphenation will be permitted but no extra
+hyphen will be inserted.
@PP
To prevent hyphenation of a word, enclose the word in a @Code "@OneCol"
symbol. To turn hyphenation off throughout the document, you need to set
diff --git a/doc/user/equ b/doc/user/equ
index 0d0b0ca..6ff73ad 100644
--- a/doc/user/equ
+++ b/doc/user/equ
@@ -26,5 +26,6 @@ you, and it provides several hundred mathematical symbols.
@Include { equ_defs }
@Include { equ_summ }
# @Include { equ_tequ } apparently not offered any more, forget why
+@Include { equ_math }
@EndSections
@End @Chapter
diff --git a/doc/user/equ_math b/doc/user/equ_math
new file mode 100644
index 0000000..e9ab835
--- /dev/null
+++ b/doc/user/equ_math
@@ -0,0 +1,212 @@
+# Written by Ludovic Courtès <ludo@gnu.org>, July 2007.
+#
+# Based on:
+# http://lists.planix.com/pipermail/lout-users/2007q2/004355.html .
+
+@Section
+ @Title { The @Code { "@Math" } package }
+ @Tag { math_package }
+@Begin
+
+equations.math @SubIndex { @Code "@Math" }
+
+@PP
+
+The @Code { "@Math" } package provides features similar to those found
+in @Code { "@Eq" } but with improved formula layout. For instance, the
+@Code { "@M" } symbol offers better rendering of equations within
+paragraphs than @Code { "@E" }. To that end, @Code { "@Math" }
+implements the four equation layout styles described by Donald E. Knuth in
+@I { The { @TeX }book } along with the corresponding transition rules
+@Cite { $knuth1984tex }. Namely, depending on its rendering context,
+a math formula may be in one of the following styles:
+
+@BulletList
+@LI { ``display'' style, for formulas displayed on lines by
+themselves; }
+@LI { ``text'' style, for formulas embedded in text; }
+@LI { ``script'' style, for formulas used in superscripts and
+subscripts; }
+@LI { ``subscript'' style, for second-order superscripts and
+subscripts. }
+@EndList
+
+In addition, formulas can be ``cramped'', meaning that exponents are
+lower than usual.
+
+@PP
+Fortunately, you usually don't need to be familiar with these display
+styles and corresponding layout algorithm to use @Code { "@Math" }.
+The sections below summarize the differences from @Code { "@Eq" } as
+well as the new features.
+
+@BeginSubSections
+
+@SubSection @Title { Differences from @Code { "@Eq" } }
+@Begin
+
+@PP
+First and foremost, the Lout definitions for the @Code "@Math" symbol
+are accessed via a setup file called {@Code "math"}, which you must
+include at the start of your document in the usual way:
+
+@ID @OneRow @Code {
+"@SysInclude { math }"
+"@SysInclude { doc }"
+"@Doc @Text @Begin"
+"..."
+"@End @Text"
+}
+
+Note that it is possible to include both @Code "eq" and { @Code "math"
+}. Instead of typing formulas within { @Code "@Eq" } or { @Code "@E" },
+they must be embedded in { @Code "@Math" } or { @Code "@M" },
+respectively.
+@PP
+
+In @Code { "@Math" }, sums, products, integrations and similar large
+operations are laid out according to the current style. For instance,
+the limits of a sum are laid out differently depending on the context:
+
+@BeginAlignedDisplays
+@CAND {
+ @Math { { sum from { i = 0 } to { n } { i sup 2 } } over { x + y } } }
+@CAND {
+ @Math { sum from { i = 0 } to { n } { i sup 2 } } }
+@EndAlignedDisplays
+
+Similarly, the @Code { "big" } symbol that is used in @Code { "@Eq" } to
+display sums, integrations, etc. is usually not needed: the size of the
+``sigma'' or other symbol automatically adapts to the context.
+@PP
+
+The @Code { "from" } and @Code { "to" } stand-alone symbols found in
+@Code { "@Eq" } are not available. Instead, symbols such as @Code {
+"sum" } that require them have @Code { "from" } and @Code { "to" }
+options instead. For example, instead of
+@ID { @Code { "@Eq { sum from i = 0 to n { i sup 2 } }" } }
+it is necessary to write
+@ID { @Code { "@Math { sum from { i = 0 } to { n } { i sup 2 } }" } }
+The braces are necessary now because @Code { "from" } and @Code { "to" }
+are options of @Code { "sum" }, and it is a general rule of Lout that
+the values of options have to be enclosed in braces.
+@PP
+
+Unlike those of @Code { "@Eq" }, mathematical operators obey standard
+precedence rules. Thus, to get @M { { n + 1 } over 2 }, one must write
+@Code { "@M { { n + 1 } over 2 }" } instead of just
+@Code { "@E { n+1 over 2 }" }.
+
+@PP
+@Code "@Math" generally produces better mathematical layout than
+@Code { "@Eq" }. Consider the following examples rendered with
+@Code "@Math" (on the left) and with @Code "@Eq" (on the right):
+
+@ID { @Math { 2 sup { 2 sup { 2 sup x } } }
+|8ct
+@Eq { 2 sup { 2 sup { 2 sup x } } } }
+
+//
+@RID { @Math { x supp { z supp d on c } on { y supp a on b } }
+|8ct
+@Eq { x supp { z supp d on c } on { y supp a on b } } }
+
+@ID { @Math { { { n + 1 } over 2 } over x }
+|8ct
+@Eq { { { n + 1 } over 2 } over x } }
+
+//
+@RID {
+@Math { a sub 0 + 1 over {
+ a sub 1 + 1 over {
+ a sub 2 + 1 over {
+ a sub 3 + 1 over {
+ a sub 4 } } } } }
+|8ct
+@Eq { a sub 0 + 1 over {
+ a sub 1 + 1 over {
+ a sub 2 + 1 over {
+ a sub 3 + 1 over {
+ a sub 4 } } } } } }
+
+@End @SubSection
+
+@SubSection @Title { New symbols and options }
+@Begin
+
+@LP
+The @Code { "@Math" } symbol has a few options not found in
+@Code { "@Eq" }. The @Code "symbolfont" and @Code "basefont" options
+denote, respectively, the font where symbols are searched for and the font
+where other characters are searched for. These fonts default to Symbol
+and Times, respectively. Note that @Code "@Math" is currently tailored
+to use these fonts so using other fonts may require manual adaptation of
+equation layout.
+
+@PP
+Besides, @Code "@Math" provides several new symbols. Symbols @Code
+"atop" and @Code "below" behave similarly to @Code "from" and @Code
+"to" in @Code "@Eq", respectively. In other words, @Code "atop" prints
+its left parameter on top of its right parameter, while @Code "below"
+does the opposite operation:
+
+@ID { @Code { "@M { { a atop f } + { z below b } }" }
+|8ct
+@M { { a atop f } + { z below b } } }
+
+@ID {
+{ @Code {
+"@Math { sum from { { 1 <= i <= p } atop"
+" { 1 <= j <= q } atop"
+" { 1 <= k <= r } }"
+" { a sub { ij } b sub { jk } c sub { ki } } }" }
+|8ct
+@Math { sum from { { 1 <= i <= p } atop
+ { 1 <= j <= q } atop
+ { 1 <= k <= r } }
+ { a sub { ij } b sub { jk } c sub { ki } } } } }
+
+@Code "@Math" produces spacing around operators that depends on the type
+of operator (see Section @NumberOf { "equ_spacing" }) and also on the
+current style. When defining new operators for @Code "@Math", it is
+usually desirable to make sure they use spacing consistent with other
+operators. To that end, @Code "@Math" provides spacing symbols similar
+to those found in @Code "@Eq", namely @Code { rel }, @Code { bin } and
+@Code { punct }. However, these symbols differ from their @Code "@Eq"
+counterpart in that they take three parameters: a left parameter, an
+@Code "op" option, and a right parameter. For example,
+@ID @Code "@Math { x bin op { ! } y }"
+produces
+@ID @Math { x bin op { ! } y }
+The left and right parameters are laid out around the operator specified
+by the @Code { op } option, including appropriate spacing.
+
+@PP
+
+Finally, @Code "@Math" offers additional symbols that allow users to
+explicitly specify the style under which part of a math formula is to be
+laid out. These low-level primitives may be useful in specific
+situations such as the one illustrated below:
+
+@ID { @Code {
+"@Math {"
+" lim atop @SubScriptStyle { i --> infinity }"
+" f(x) = { g(x) } over { h(x) } }"
+}
+|8ct
+@Math {
+ lim atop @SubScriptStyle { i --> infinity }
+ f(x) = { g(x) } over { h(x) } }
+}
+
+@Code "@SuperScriptStyle" and @Code "@SubScriptStyle" lay out their
+right parameter under the ``script'' or ``subscript'' style,
+respectively. @Code "@NumeratorStyle" and @Code "@DenominatorStyle" lay
+out their right parameter as if it where the numerator or denominator of
+a fraction, respectively. Likewise, @Code "@SquareRootStyle" lays out
+its right parameter as if it were below a square root.
+
+@End @SubSection
+
+@EndSubSections
+@End @Section
diff --git a/doc/user/equ_spac b/doc/user/equ_spac
index 47aff3b..c87e9a6 100644
--- a/doc/user/equ_spac
+++ b/doc/user/equ_spac
@@ -1,5 +1,6 @@
@Section
@Title { Spacing }
+ @Tag { equ_spacing }
@Begin
@PP
There is a basic rule governing the use of white space characters (space,
diff --git a/doc/user/preface b/doc/user/preface
index 4f9a212..09e54bf 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.it.usyd.edu.au/jeff/lout"
containing a gzipped tar file of the current version
-(currently {@Code "lout-3.35.tar.gz"}), and various other things including
+(currently {@Code "lout-3.36.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
@@ -52,7 +52,8 @@ E. Knuth's @TeX system @Cite { $knuth1984tex }, and the optimal paragraph
breaking algorithm was applied to the problem of producing optimal page
breaks. The first implementations of horizontal galleys and optimal
page breaking were by my student Gabor Inokai. Vincent Tan contributed
-the PDF back end. Valeriy E. Ushakov smoothed the path for many
+the PDF back end. Ludovic Court{@Char egrave}s contributed the
+@Code "@Math" package. Valeriy E. Ushakov smoothed the path for many
people, by his contributions to improving Lout's robustness, and his
tireless management of and responses to the Lout mailing list. The
current mailing list maintainer is Greg Woods. The number of other
diff --git a/doc/user/str_indx b/doc/user/str_indx
index a68fc5d..40c7649 100644
--- a/doc/user/str_indx
+++ b/doc/user/str_indx
@@ -21,15 +21,14 @@ Galileo Galilei
telescope, his use of, 201--203
trial of, 205--211, @I 242, 395
}
-Each line shows off one of Lout's four tricks: the first is a
-@I { raw entry } (no page number attached); the second is a
-@I sub-entry (indented); the third has a @I { page number range }
-instead of a single page number; and the fourth is a @I { merged entry }
-(several page numbers or ranges within one entry) with a
-@I { special element } (the page number in italics).
-@PP
-We'll take each of them in turn in a moment, but first, let's see how
-to get a basic entry, like this one:
+These lines show off Lout's five tricks: the first is a @I { raw entry }
+(no page number attached); the second is a @I sub-entry (indented); the
+third has a @I { page number range } instead of a single page number; and
+the fourth has a @I { merged entry } (several page numbers or ranges within
+one entry) and a @I { special element } (the page number in italics).
+@PP
+We'll get to them in a moment, but first, let's see how to get a basic
+entry, like this one:
@ID { Galileo Galilei, 201 }
To get this into your index, type
@ID @Code "galileo @Index { Galileo Galilei }"
@@ -106,7 +105,7 @@ result of {@Code "@PageOf"}). If both ends of the range fall on the
same page, the @Code "to" option is ignored: you will never get
201--201.
@PP
-Our fourth and final trick is the merged entry:
+Our fourth trick is the merged entry:
@ID { trial of, 205--211, 242, 395 }
The main thing to grasp is that this merged entry was originally three
separate entries (sub-entries in this case):
@@ -255,7 +254,8 @@ Although the page numbers in index entries will be kept up to date
automatically as the document changes, as all cross references are,
it is best to refrain from inserting index entries until the document
is complete and an overall plan of the structure of the index can
-be made.
+be made. Place index entries for floating figures and tables within
+their captions.
@PP
Large indexes may benefit from {@I spacers} -- empty spaces or
spacers. @Index { spacers in indexes }
diff --git a/externs.h b/externs.h
index d07da26..4ccf73c 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.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
@@ -95,7 +95,7 @@ extern nl_catd MsgCat;
/* */
/*****************************************************************************/
-#define LOUT_VERSION AsciiToFull("Basser Lout Version 3.35 (April 2007)")
+#define LOUT_VERSION AsciiToFull("Basser Lout Version 3.36 (July 2007)")
#define CROSS_DB AsciiToFull("lout")
#define SOURCE_SUFFIX AsciiToFull(".lt")
#define INDEX_SUFFIX AsciiToFull(".li")
@@ -443,7 +443,7 @@ typedef void *POINTER;
#define CH_FLAG_PDF 'Z' /* the -Z command line flag */
#define CH_SPACE ' ' /* space character */
-/* #define CH_NEWLINE '\n'*/ /* the newline character */
+/* #define CH_NEWLINE '\n'*/ /* the newline character */
#define CH_LF '\n' /* the line feed character */
#define CH_CR '\r' /* the carriage return character */
#define CH_SYMSTART '@' /* extra letter symbols may have */
@@ -456,6 +456,7 @@ typedef void *POINTER;
#define CH_DECGAP '-' /* begins a decrementing gap */
#define CH_MINUS '-' /* minus sign */
#define CH_HYPHEN '-' /* the hyphen character */
+#define CH_SLASH '/' /* the slash character */
#define CH_NOBREAK 'u' /* `unbreakable' character for gaps */
#define CH_UNIT_CM 'c' /* unit of measurement: centimetres */
diff --git a/gnu.gpl b/gnu.gpl
deleted file mode 100644
index 0c7dfb9..0000000
--- a/gnu.gpl
+++ /dev/null
@@ -1,344 +0,0 @@
-From rms@santafe.edu Thu Mar 12 19:35:41 1998
-From: Richard Stallman <rms@santafe.edu>
-To: jeff@cs.usyd.edu.au
-
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.
- 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) 19yy <name of author>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) 19yy name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
diff --git a/gpl.txt b/gpl.txt
new file mode 100644
index 0000000..94a9ed0
--- /dev/null
+++ b/gpl.txt
@@ -0,0 +1,674 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>.
diff --git a/include/README b/include/README
index 01d9bf9..45266eb 100644
--- a/include/README
+++ b/include/README
@@ -19,6 +19,7 @@ Setup files (containing mainly lists of options settable by the user)
diag Diag diagram drawing package
eq Eq equation formatting package
+ math Math, an alternative equation formatting package
graph Graph graph drawing package
latin2 Latin2 (Eastern European characters) package
pie Pie pie graph drawing package
@@ -58,6 +59,7 @@ Source files containing Lout and PostScript source code for the packages
diagf.etc A file included by diagf
diagf.lpg A PostScript prepend file needed by diagf
eqf Eq equation formatting package
+ mathf Math, an alternative equation formatting package
graphf Graph graph drawing package
graphf.etc A file included by graphf
graphf.lpg A PostScript prepend file needed by graphf
diff --git a/include/bsf b/include/bsf
index 2c472a2..b2ca24a 100644
--- a/include/bsf
+++ b/include/bsf
@@ -295,6 +295,26 @@ def @BasicSetup
###########################################################################
# #
+ # x @Dft y #
+ # #
+ # This returns x unless its value is "dft", in which case it returns y. #
+ # Useful for defaulting the value of one parameter to another. #
+ # #
+ ###########################################################################
+
+ def @Dft
+ left x
+ right y
+ {
+ x @Case {
+ dft @Yield y
+ else @Yield x
+ }
+ }
+
+
+ ###########################################################################
+ # #
# @Pipe, @PipeVerbatim, and @PipeRawVerbatim #
# #
###########################################################################
@@ -1349,10 +1369,11 @@ def @BasicSetup
# #
###########################################################################
- export @Tag val
+ export @Tag val display_val
def @NumDispCounterMarker
named @Tag {}
named val {}
+ named display_val {}
{
@Null
}
@@ -1363,16 +1384,24 @@ def @BasicSetup
}
def @NumDispCounterIncrement
+ named @BypassNumber { "dft" }
right tag
{
- @NumDispCounterMarker&&preceding @Tagged tag
- @NumDispCounterMarker val { @NumDispNum tag }
- @NumberMarker @Tag { tag } @Value { @NumDispNum tag }
+ def @DisplayNumber
+ {
+ @BypassNumber @Dft { @NumDispNum tag }
+ }
+
+ @NumDispCounterMarker&&preceding @Tagged tag
+ # @NumDispCounterMarker val { @NumDispNum tag }
+ # @NumberMarker @Tag { tag } @Value { @NumDispNum tag }
+ @NumDispCounterMarker val { @NumDispNum tag } display_val { @DisplayNumber }
+ @NumberMarker @Tag { tag } @Value { @DisplayNumber }
}
def @NN
{
- @NumDispCounterMarker&&preceding @Open { @DisplayNumStyle val }
+ @NumDispCounterMarker&&preceding @Open { @DisplayNumStyle display_val }
}
def @Do
@@ -1409,10 +1438,12 @@ def @BasicSetup
def @NDisp into { @DispPlace&&preceding }
named @Tag {}
+ named @BypassNumber { "dft" }
right x
{
@OneRow {
- @NumDispCounterIncrement @Tag
+ # @NumDispCounterIncrement @Tag
+ @NumDispCounterIncrement @BypassNumber { @BypassNumber } @Tag
@PageMark @Tag
^//
@OneRow x
@@ -1427,10 +1458,12 @@ def @BasicSetup
def @ANDisp into { @AlignedPlace&&preceding }
named @Tag {}
+ named @BypassNumber { "dft" }
right x
{
@OneRow {
- @NumDispCounterIncrement @Tag
+ # @NumDispCounterIncrement @Tag
+ @NumDispCounterIncrement @BypassNumber { @BypassNumber } @Tag
@PageMark @Tag
^/
@OneRow x
diff --git a/include/dsf b/include/dsf
index dc757a1..ae05e7d 100644
--- a/include/dsf
+++ b/include/dsf
@@ -5189,7 +5189,13 @@ def @DocumentSetup
def @LongNum
{
numbers @Then {
- initiallanguage @Language { word @NumSep @ShortNum }
+ # initiallanguage @Language { word @NumSep @ShortNum }
+ @ShortNum @Case {
+ "" @Yield { } # numberless: don't produce `word'
+ else @Yield {
+ initiallanguage @Language { word @NumSep @ShortNum }
+ }
+ }
}
}
diff --git a/include/haskellf b/include/haskellf
index b1064a1..26f4cac 100644
--- a/include/haskellf
+++ b/include/haskellf
@@ -1,12 +1,16 @@
###############################################################################
# #
-# Lout @HaskellSetup package for formatting Haskell programs #
+# Lout @HaskellSetup package for formatting Haskell programs #
# #
# Version 1.0 #
# Thorsten Seitz #
# 17 December 2001 #
# #
+# Version 1.1 (bug fixes) #
+# Gabor Greif #
+# 29 June 2007 #
+# #
# 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 #
@@ -33,7 +37,7 @@ def @HaskellSetup
named fixedtabin { 4 } # tab interval
named fixedtabout { 4s } # tab width
- named fixedbraces { Base } # braces face
+ named fixedbraces { Base } # braces face
named fixedidentifiers { Base } # identifier face
named fixedkeywords { Base } # keyword face
named fixedoperators { Base } # operator face
@@ -42,8 +46,8 @@ def @HaskellSetup
named fixedcomments { Base } # comment face
named fixedlinenumbers { Base } # line numbers face
- named fixedleftbracesformat right @Body { @Body } # left braces format
- named fixedrightbracesformat right @Body { @Body } # right braces format
+ named fixedleftbracesformat right @Body { @Body } # left braces format
+ named fixedrightbracesformat right @Body { @Body } # right braces format
named fixedidentifiersformat right @Body { @Body } # identifier format
named fixedkeywordsformat right @Body { @Body } # keyword format
named fixedoperatorsformat right @Body { @Body } # operators format
@@ -61,7 +65,7 @@ def @HaskellSetup
named varyingtabin { 4 } # tab interval
named varyingtabout { 1.5f } # tab width
- named varyingbraces { Base } # braces face
+ named varyingbraces { Base } # braces face
named varyingidentifiers { Slope } # identifier face
named varyingkeywords { Bold } # keyword face
named varyingoperators { Base } # operator face
@@ -70,8 +74,8 @@ def @HaskellSetup
named varyingcomments { Base } # comment face
named varyinglinenumbers { Base } # line numbers face
- named varyingleftbracesformat right @Body { @Body } # left braces format
- named varyingrightbracesformat right @Body { @Body } # right braces format
+ named varyingleftbracesformat right @Body { @Body } # left braces format
+ named varyingrightbracesformat right @Body { @Body } # right braces format
named varyingidentifiersformat right @Body { @Body } # identifier format
named varyingkeywordsformat right @Body { @Body } # keyword format
named varyingoperatorsformat right @Body { @Body } # operators format
@@ -89,10 +93,10 @@ def @HaskellSetup
named symboltabin { 4 } # tab interval
named symboltabout { 1.7f } # tab width
- named symbolbraces { Base } # braces face
+ named symbolbraces { Base } # braces face
named symbolidentifiers { Slope } # identifier face
named symbolkeywords { Bold } # keyword face
- named symboloperators { Symbol Base } # operator face
+ named symboloperators { Slope } # operator face
named symbolnumbers { Base } # number face
named symbolstrings { Slope } # string face
named symbolcomments { Base } # comment face
@@ -395,7 +399,7 @@ def @HaskellSetup
def @PC # for formatting comments
right x
{
- @PCnoDelim { "{"@Symb minus{x}@Symb minus"}" }
+ @PCnoDelim { "{"{@Symb minus}x{@Symb minus}"}" }
}
diff --git a/include/math b/include/math
new file mode 100644
index 0000000..707178c
--- /dev/null
+++ b/include/math
@@ -0,0 +1,30 @@
+###############################################################################
+# #
+# Lout setup file for equation formatting, based on `eq'. #
+# #
+# Jeffrey H. Kingston #
+# 5 February 1999 #
+# #
+# Ludovic Courtès #
+# June 2007 #
+# #
+###############################################################################
+
+
+###############################################################################
+# #
+# The @SysInclude { mathf } line #
+# #
+# This line causes Lout to read the definitions for equations, and should #
+# not be touched. #
+# #
+###############################################################################
+
+@SysInclude { mathf }
+
+
+###############################################################################
+# #
+# This package does not offer default options that can be changed. #
+# #
+###############################################################################
diff --git a/include/mathf b/include/mathf
new file mode 100644
index 0000000..8c395fd
--- /dev/null
+++ b/include/mathf
@@ -0,0 +1,2114 @@
+
+###############################################################################
+# #
+# Lout @Math package for equation formatting, based on @Eq. #
+# #
+# @Eq revision history: #
+# #
+# Version 1.0 by Jeffrey H. Kingston, December 1990. #
+# Version 2.0 by Jeffrey H. Kingston, 22 December 1992. #
+# Version 3.0 by Jeffrey H. Kingston and Robert Marsa, March 1996. #
+# #
+# @Math revision history: #
+# #
+# Version 1.0 by Ludovic Courtès, June 2007. #
+# #
+# See "Eq - a Lout package for typesetting mathematics" for user #
+# information. Acknowledgement: the @Eq language is based closely on #
+# the Eqn language of B. W. Kernighan and L. L. Cherry; the spacing rules #
+# are similar to those of the TeX system by D. E. Knuth. #
+# #
+# Version 4.0 makes use of `@SetContext' and `@GetContext' (introduced in #
+# Basser Lout 3.34) to better honor the typesetting conventions outlined by #
+# Knuth. #
+# #
+###############################################################################
+
+export "`" "``" "```" bin rel punct non vctr big small
+
+ space exclam universal numbersign existential percent
+ ampersand suchthat parenleft parenright asteriskmath
+ plus comma minus period slash zero one two three four
+ five six seven eight nine colon semicolon less equal
+ greater question congruent Alpha Beta Chi Delta Epsilon
+ Phi Gamma Eta Iota thetaone Kappa Lambda Mu Nu Omicron
+ Pi Theta Rho Sigma Tau Upsilon sigmaone Omega Xi Psi Zeta
+ bracketleft therefore bracketright perpendicular underscore
+ radicalex alpha beta chi delta epsilon phi gamma eta iota
+ phione kappa lambda mu nu omicron pi theta rho sigma tau
+ upsilon omegaone omega xi psi zeta braceleft bar braceright
+ similar Upsilonone minute lessequal fraction infinity florin
+ club diamond heart spade arrowboth arrowleft arrowup
+ arrowright arrowdown degree plusminus second greaterequal
+ multiply proportional partialdiff bullet divide notequal
+ equivalence approxequal ellipsis arrowvertex arrowhorizex
+ carriagereturn aleph Ifraktur Rfraktur weierstrass
+ circlemultiply circleplus emptyset intersection union
+ propersuperset reflexsuperset notsubset propersubset
+ reflexsubset element notelement angle gradient registerserif
+ copyrightserif trademarkserif product radical dotmath
+ logicalnot logicaland logicalor arrowdblboth arrowdblleft
+ arrowdblup arrowdblright arrowdbldown lozenge angleleft
+ registersans copyrightsans trademarksans summation parenlefttp
+ parenleftex parenleftbt bracketlefttp bracketleftex
+ bracketleftbt bracelefttp braceleftmid braceleftbt braceex
+ angleright integral integraltp integralex integralbt
+ parenrighttp parenrightex parenrightbt bracketrighttp
+ bracketrightex bracketrightbt bracerighttp bracerightmid
+ bracerightbt
+
+ hbar Re Im partial infty prime nabla surd top bot dbar
+ triangle backslash forall exists neg
+ circle filledcircle square
+
+ "0" "1" "2" "3" "4" "5" "6" "7" "8" "9"
+
+ sum prod coprod int oint bcap bcup bvee bwedge bodot botimes
+ boplus buplus
+
+ "+" "-" "+-" "-+" setminus cdot times "*" circ div cap cup uplus
+ sqcap sqcup triangleleft triangleright
+ wr bigcirc bigtriangleup bigtriangledown vee wedge oplus ominus
+ otimes oslash odot dagger daggerdbl amalg
+
+ "<" ">" "=" "<=" prec preceq "<<" subset subseteq sqsubseteq
+ in vdash smile frown ">=" succ succeq ">>" supset supseteq
+ sqsupseteq ni dashv mid parallel "==" "~" "-~" asymp "~~"
+ "=~" bowtie propto models doteq trieq perp notsub notin "!=" not
+ "<->" "<--" "-->" up down "<=>" "<==" "==>" dblup dbldown
+ ":" "::" ":="
+
+ lpar blpar rpar brpar lbrack blbrack rbrack brbrack lbrace blbrace
+ rbrace brbrace lfloor blfloor rfloor brfloor lceil blceil
+ rceil brceil langle blangle rangle brangle
+
+ ";" "," col
+
+ "!" "?" "%" "(" ")" "[" "]"
+
+ arccos arcsin arctan arg cos cosh cot coth csc deg det dim exp
+ gcd hom inf ker lg lim liminf limsup ln log max min Pr sec sin
+ sinh supr tan tanh mod ldots cdots vdots ddots del grad
+ "..." ",...," "'" "''" "'''" "''''" empty
+
+ triangleup triangledown
+
+ leftarrow longleftarrow dblleftarrow dbllongleftarrow
+ rightarrow longrightarrow dblrightarrow dbllongrightarrow
+ leftrightarrow longleftrightarrow dblleftrightarrow dbllongleftrightarrow
+ mapsto longmapsto hookleftarrow hookrightarrow leadsto
+ leftharpoonup rightharpoonup leftharpoondown rightharpoondown
+ rightleftharpoons
+ uparrow dbluparrow downarrow dbldownarrow updownarrow dblupdownarrow
+ nearrow searrow swarrow nwarrow
+
+ sup sub tsub supp on ton frac half third over
+ atop below wideatop widebelow
+ dot dotdot hat tilde vec dyad overbar underbar sqrt root zroot
+ matrix pmatrix bmatrix brmatrix fmatrix cmatrix amatrix
+
+ @SuperScriptStyle @SubScriptStyle
+ @NumeratorStyle @DenominatorStyle
+ @SquareRootStyle
+
+def @Math
+ named symbolfont { Symbol Base }
+ named basefont { Times Base }
+ named initialstyle { "display" }
+ named initiallycramped { "No" }
+ named initialspace { separate 0.05f }
+ body @Body
+@Begin
+
+
+ ###################################################################
+ # #
+ # Context-sensitive format changes. #
+ # #
+ # Equation formatting (according to Knuth) demands changes in #
+ # the appearance of equations depending on context. Knuth #
+ # distinguishes four major styles (the TeXbook, Ch. 17): #
+ # #
+ # display style (formulas displayed on lines by themselves) #
+ # text style (formulas embedded in the text) #
+ # script style (formulas used as superscripts or subscripts) #
+ # scriptscript (second-order superscripts or subscripts) #
+ # #
+ # Each style has its own font size and spacing rules. #
+ # #
+ # Additionally, each of these styles can be ``cramped'', #
+ # meaning that exponents are not raised as much. #
+ # #
+ ###################################################################
+
+ macro @CurrStyleVar { "EqCurrStyle" }
+ macro @CrampedVar { "EqCramped?" }
+
+ def @CurrStyle { @GetContext @CurrStyleVar }
+ def @Cramped { @GetContext @CrampedVar }
+
+ def @EqDebug
+ {
+ # Uncomment the following line to get debugging information.
+ #{ { Helvetica Base 0.7f } @Font @CurrStyle } |0.2f
+ @Null
+ }
+
+ def @WithStyle
+ named style { "display" }
+ named cramped { "No" }
+ right x
+ {
+ def @NewFontSize
+ {
+ @CurrStyle @Case {
+ "scriptscript" @Yield 1.0f # can't be smaller
+ "script" @Yield {
+ style @Case {
+ "script" @Yield 1.0f
+ else @Yield 0.8f } }
+ "text" @Yield {
+ style @Case {
+ "text" @Yield 1.0f
+ else @Yield 0.7f } }
+ "display" @Yield {
+ style @Case {
+ # display and text styles yield the same font size
+ { "display" "text" } @Yield 1.0f
+ else @Yield 0.7f } }
+ }
+ }
+
+
+ #{ Helvetica Base 0.4f } @Font { @CurrStyle -> style } |0.2f
+ @NewFontSize @Font
+ { @CurrStyleVar @Yield style } @SetContext {
+ { @CrampedVar @Yield cramped } @SetContext {
+ # FIXME: Space is not properly inherited, hence this
+ # `@Space' invocation.
+ { @EqDebug initialspace @Space x }
+ }
+ }
+ }
+
+ def @CurrSuperScriptGap
+ {
+ @Cramped @Case {
+ "Yes" @Yield 0.23fk
+ "No" @Yield 0.35fk
+ }
+ }
+
+ def @SubScriptGap { 0.35fk }
+
+
+ ###################################################################
+ # #
+ # Spacing rules. #
+ # #
+ ###################################################################
+
+ # Space around relational operators.
+ def @CurrRelSpaceGap
+ {
+ @CurrStyle @Case {
+ { "display" "text" } @Yield 0.300fe
+ else @Yield 0.030ce
+ }
+ }
+
+ # Space around binary operators.
+ def @CurrBinarySpaceGap
+ {
+ @CurrStyle @Case {
+ { "display" "text" } @Yield 0.240fe
+ else @Yield 0.024ce
+ }
+ }
+
+ # Space around punctuation marks, including matrix braces.
+ def @CurrPunctSpaceGap
+ {
+ @CurrStyle @Case {
+ { "display" "text" } @Yield 0.180fe
+ else @Yield 0.018ce
+ }
+ }
+
+ def "`" { &@CurrPunctSpaceGap }
+ def "``" { &@CurrBinarySpaceGap }
+ def "```" { &@CurrRelSpaceGap }
+ def bin left l named op { "binop" } right r
+ { l &@CurrBinarySpaceGap op &@CurrBinarySpaceGap r }
+ def rel left l named op { "relop" } right r
+ { l &@CurrRelSpaceGap op &@CurrRelSpaceGap r }
+ def punct left l named symbol { "punct" } right r
+ { l &0.0ce symbol &@CurrPunctSpaceGap r }
+
+ # Gap above/below math expressions (see, e.g., `to' and `from').
+ def @AboveGap { 0.15f }
+ def @BelowGap { 0.15f }
+
+ def @SkewGap { 0.05f }
+ def @ColGap { 0.8f }
+ def @RowGap { 0.5f }
+
+
+ ###################################################################
+ # #
+ # Major styles: scripts, fractions, and square roots. #
+ # #
+ ###################################################################
+
+ def @ScriptStyle
+ named level { "sup" }
+ right script
+ {
+ @WithStyle
+ style { @CurrStyle @Case {
+ { "display" "text" } @Yield "script"
+ { "script" "scriptscript" } @Yield "scriptscript" } }
+ cramped { level @Case {
+ "sub" @Yield "Yes"
+ "sup" @Yield @Cramped } }
+ { script }
+ }
+
+ def @SuperScriptStyle right superscript
+ {
+ @ScriptStyle level { "sup" } superscript
+ }
+
+ def @SubScriptStyle right subscript
+ {
+ @ScriptStyle level { "sub" } subscript
+ }
+
+
+ def @FractionStyle
+ named level { "numerator" }
+ right x
+ {
+ @WithStyle
+ style { @CurrStyle @Case {
+ "display" @Yield "text"
+ "text" @Yield "script"
+ { "script" "scriptscript" } @Yield "scriptscript" } }
+ cramped { level @Case {
+ "numerator" @Yield @Cramped
+ "denominator" @Yield "Yes"} }
+ { x }
+ }
+
+ def @NumeratorStyle right x
+ {
+ @FractionStyle level { "numerator" } x
+ }
+
+ def @DenominatorStyle right x
+ {
+ @FractionStyle level { "denominator" } x
+ }
+
+ def @SquareRootStyle right x
+ {
+ @WithStyle style { @CurrStyle } cramped { "Yes" } x
+ }
+
+
+ ###################################################################
+ # #
+ # Utilities: `big', `small', `@HLine', etc. #
+ # #
+ ###################################################################
+
+ # XXX: Certainly not the best way to implement `non'.
+ def non right x { { @CurrStyleVar @Yield "script" } @SetContext x }
+ def big right x { 1.3f @Font x }
+ def small right x { 0.6f @Font x }
+
+ def @Base right x { basefont @Font x }
+ def @Sym right x { symbolfont @Font x }
+
+ def @HLine
+ named line { @BackEnd @Case { PostScript @Yield { "0.05 ft setlinewidth" } PDF @Yield { "__mul(__loutf, 0.05) w" } } }
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ { "0 0 moveto xsize 0 lineto" line "stroke" } @Graphic {}
+ }
+ PDF @Yield { # note re-arrangement of commands (setlinewidth (='w') not allowed in a path)
+ { line "0 0 m __xsize 0 l s" } @Graphic {}
+ }
+ }
+ }
+
+ def @VLine
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ "0 0 moveto 0 ysize lineto 0.05 ft setlinewidth stroke" @Graphic {}
+ }
+ PDF @Yield {
+ "__mul(__loutf, 0.05) w 0 0 m 0 __ysize l s" @Graphic {}
+ }
+ }
+ }
+
+ def vctr
+ right x
+ {
+ 0.5w @VShift x
+ }
+
+ def @Strut right x
+ {
+ @OneCol { x | @OneRow { 0.5f @High ^/ 0.5f @High } }
+ }
+
+ ###################################################################
+ # #
+ # Full names #
+ # #
+ # These symbols and their names are taken directly from the #
+ # Adobe Systems Inc. Symbol font (see PostScript Language #
+ # Reference Manual, pp. 256-257). The only differences are: #
+ # #
+ # Adobe: theta1 Eq: thetaone #
+ # sigma1 sigmaone #
+ # phi1 phione #
+ # omega1 omegaone #
+ # #
+ # These were needed since Lout identifiers do not have digits. #
+ # #
+ ###################################################################
+
+ def space { @Sym @Char "space" }
+ def exclam { @Sym @Char "exclam" }
+ def universal { @Sym @Char "universal" }
+ def numbersign { @Sym @Char "numbersign" }
+ def existential { @Sym @Char "existential" }
+ def percent { @Sym @Char "percent" }
+ def ampersand { @Sym @Char "ampersand" }
+ def suchthat { @Sym @Char "suchthat" }
+ def parenleft { @Sym @Char "parenleft" }
+ def parenright { @Sym @Char "parenright" }
+ def asteriskmath { @Sym @Char "asteriskmath" }
+ def plus { @Sym @Char "plus" }
+ def comma { @Sym @Char "comma" }
+ def minus { @Sym @Char "minus" }
+ def period { @Sym @Char "period" }
+ def slash { @Sym @Char "slash" }
+ def zero { @Sym @Char "zero" }
+ def one { @Sym @Char "one" }
+ def two { @Sym @Char "two" }
+ def three { @Sym @Char "three" }
+ def four { @Sym @Char "four" }
+ def five { @Sym @Char "five" }
+ def six { @Sym @Char "six" }
+ def seven { @Sym @Char "seven" }
+ def eight { @Sym @Char "eight" }
+ def nine { @Sym @Char "nine" }
+ def colon { @Sym @Char "colon" }
+ def semicolon { @Sym @Char "semicolon" }
+ def less { @Sym @Char "less" }
+ def equal { @Sym @Char "equal" }
+ def greater { @Sym @Char "greater" }
+ def question { @Sym @Char "question" }
+ def congruent { @Sym @Char "congruent" }
+ def Alpha { @Sym @Char "Alpha" }
+ def Beta { @Sym @Char "Beta" }
+ def Chi { @Sym @Char "Chi" }
+ def Delta { @Sym @Char "Delta" }
+ def Epsilon { @Sym @Char "Epsilon" }
+ def Phi { @Sym @Char "Phi" }
+ def Gamma { @Sym @Char "Gamma" }
+ def Eta { @Sym @Char "Eta" }
+ def Iota { @Sym @Char "Iota" }
+ def thetaone { @Sym @Char "thetaone" }
+ def Kappa { @Sym @Char "Kappa" }
+
+ def Lambda { @Sym @Char "Lambda" }
+ def Mu { @Sym @Char "Mu" }
+ def Nu { @Sym @Char "Nu" }
+ def Omicron { @Sym @Char "Omicron" }
+ def Pi { @Sym @Char "Pi" }
+ def Theta { @Sym @Char "Theta" }
+ def Rho { @Sym @Char "Rho" }
+ def Sigma { @Sym @Char "Sigma" }
+ def Tau { @Sym @Char "Tau" }
+ def Upsilon { @Sym @Char "Upsilon" }
+ def sigmaone { @Sym @Char "sigmaone" }
+ def Omega { @Sym @Char "Omega" }
+ def Xi { @Sym @Char "Xi" }
+ def Psi { @Sym @Char "Psi" }
+ def Zeta { @Sym @Char "Zeta" }
+ def bracketleft { @Sym @Char "bracketleft" }
+ def therefore { @Sym @Char "therefore" }
+ def bracketright { @Sym @Char "bracketright" }
+ def perpendicular { @Sym @Char "perpendicular" }
+ def underscore { @Sym @Char "underscore" }
+ def radicalex { @Sym @Char "radicalex" }
+ def alpha { @Sym @Char "alpha" }
+ def beta { @Sym @Char "beta" }
+ def chi { @Sym @Char "chi" }
+ def delta { @Sym @Char "delta" }
+ def epsilon { @Sym @Char "epsilon" }
+ def phi { @Sym @Char "phi" }
+ def gamma { @Sym @Char "gamma" }
+ def eta { @Sym @Char "eta" }
+ def iota { @Sym @Char "iota" }
+ def phione { @Sym @Char "phione" }
+ def kappa { @Sym @Char "kappa" }
+ def lambda { @Sym @Char "lambda" }
+ def mu { @Sym @Char "mu" }
+ def nu { @Sym @Char "nu" }
+
+ def omicron { @Sym @Char "omicron" }
+ def pi { @Sym @Char "pi" }
+ def theta { @Sym @Char "theta" }
+ def rho { @Sym @Char "rho" }
+ def sigma { @Sym @Char "sigma" }
+ def tau { @Sym @Char "tau" }
+ def upsilon { @Sym @Char "upsilon" }
+ def omegaone { @Sym @Char "omegaone" }
+ def omega { @Sym @Char "omega" }
+ def xi { @Sym @Char "xi" }
+ def psi { @Sym @Char "psi" }
+ def zeta { @Sym @Char "zeta" }
+ def braceleft { @Sym @Char "braceleft" }
+ def bar { @Sym @Char "bar" }
+ def braceright { @Sym @Char "braceright" }
+ def similar { @Sym @Char "similar" }
+ def Upsilonone { @Sym @Char "Upsilonone" }
+ def minute { @Sym @Char "minute" }
+ def lessequal { @Sym @Char "lessequal" }
+ def fraction { @Sym @Char "fraction" }
+ # For Adobe Symbol, `infinity' used to be "1.2f @Font { ... }"
+ def infinity { @Sym @Char "infinity" }
+ def florin { @Sym @Char "florin" }
+ def club { @Sym @Char "club" }
+ def diamond { @Sym @Char "diamond" }
+ def heart { @Sym @Char "heart" }
+ def spade { @Sym @Char "spade" }
+ def arrowboth { @Sym @Char "arrowboth" }
+ def arrowleft { @Sym @Char "arrowleft" }
+ def arrowup { @Sym @Char "arrowup" }
+ def arrowright { @Sym @Char "arrowright" }
+ def arrowdown { @Sym @Char "arrowdown" }
+ def degree { @Sym @Char "degree" }
+ def plusminus { @Sym @Char "plusminus" }
+ def second { @Sym @Char "second" }
+ def greaterequal { @Sym @Char "greaterequal" }
+
+ def multiply { @Sym @Char "multiply" }
+ def proportional { @Sym @Char "proportional" }
+ def partialdiff { @Sym @Char "partialdiff" }
+ def bullet { @Sym @Char "bullet" }
+ def divide { @Sym @Char "divide" }
+ def notequal { @Sym @Char "notequal" }
+ def equivalence { @Sym @Char "equivalence" }
+ def approxequal { @Sym @Char "approxequal" }
+ def ellipsis { @Sym @Char "ellipsis" }
+ def arrowvertex { @Sym @Char "arrowvertex" }
+ def arrowhorizex { @Sym @Char "arrowhorizex" }
+ def carriagereturn { @Sym @Char "carriagereturn" }
+ def aleph { @Sym @Char "aleph" }
+ def Ifraktur { @Sym @Char "Ifraktur" }
+ def Rfraktur { @Sym @Char "Rfraktur" }
+ def weierstrass { @Sym @Char "weierstrass" }
+ def circlemultiply { @Sym @Char "circlemultiply" }
+ def circleplus { @Sym @Char "circleplus" }
+ def emptyset { @Sym @Char "emptyset" }
+ def intersection { @Sym @Char "intersection" }
+ def union { @Sym @Char "union" }
+ def propersuperset { @Sym @Char "propersuperset" }
+ def reflexsuperset { @Sym @Char "reflexsuperset" }
+ def notsubset { @Sym @Char "notsubset" }
+ def propersubset { @Sym @Char "propersubset" }
+ def reflexsubset { @Sym @Char "reflexsubset" }
+ def element { @Sym @Char "element" }
+ def notelement { @Sym @Char "notelement" }
+ def angle { @Sym @Char "angle" }
+ def gradient { @Sym @Char "gradient" }
+ def registerserif { @Sym @Char "registerserif" }
+ def copyrightserif { @Sym @Char "copyrightserif" }
+ def trademarkserif { @Sym @Char "trademarkserif" }
+ def product { @Sym @Char "product" }
+ def radical { @Sym @Char "radical" }
+ def dotmath { @Sym @Char "dotmath" }
+
+ def @PureDot # dot with no extra space
+ {
+ @HContract { &0io 0.4w @HShift dotmath }
+ }
+
+ def logicalnot { @Sym @Char "logicalnot" }
+ def logicaland { @Sym @Char "logicaland" }
+ def logicalor { @Sym @Char "logicalor" }
+ def arrowdblboth { @Sym @Char "arrowdblboth" }
+ def arrowdblleft { @Sym @Char "arrowdblleft" }
+ def arrowdblup { @Sym @Char "arrowdblup" }
+ def arrowdblright { @Sym @Char "arrowdblright" }
+ def arrowdbldown { @Sym @Char "arrowdbldown" }
+ def lozenge { @Sym @Char "lozenge" }
+ def angleleft { @Sym @Char "angleleft" }
+ def registersans { @Sym @Char "registersans" }
+ def copyrightsans { @Sym @Char "copyrightsans" }
+ def trademarksans { @Sym @Char "trademarksans" }
+ def summation { @Sym @Char "summation" }
+ def parenlefttp { @Sym @Char "parenlefttp" }
+ def parenleftex { @Sym @Char "parenleftex" }
+ def parenleftbt { @Sym @Char "parenleftbt" }
+ def bracketlefttp { @Sym @Char "bracketlefttp" }
+ def bracketleftex { @Sym @Char "bracketleftex" }
+ def bracketleftbt { @Sym @Char "bracketleftbt" }
+ def bracelefttp { @Sym @Char "bracelefttp" }
+ def braceleftmid { @Sym @Char "braceleftmid" }
+ def braceleftbt { @Sym @Char "braceleftbt" }
+ def braceex { @Sym @Char "braceex" }
+ def angleright { @Sym @Char "angleright" }
+ def integral { @Sym @Char "integral" }
+ def integraltp { @Sym @Char "integraltp" }
+ def integralex { @Sym @Char "integralex" }
+ def integralbt { @Sym @Char "integralbt" }
+ def parenrighttp { @Sym @Char "parenrighttp" }
+ def parenrightex { @Sym @Char "parenrightex" }
+ def parenrightbt { @Sym @Char "parenrightbt" }
+ def bracketrighttp { @Sym @Char "bracketrighttp" }
+ def bracketrightex { @Sym @Char "bracketrightex" }
+ def bracketrightbt { @Sym @Char "bracketrightbt" }
+ def bracerighttp { @Sym @Char "bracerighttp" }
+ def bracerightmid { @Sym @Char "bracerightmid" }
+ def bracerightbt { @Sym @Char "bracerightbt" }
+
+
+ ###################################################################
+ # #
+ # Short names #
+ # #
+ # These symbols, their names, and their spacing, are based on #
+ # the list in Appendix F of Donald E. Knuth's The TeXBook. #
+ # #
+ # Group 1 (lowercase Greek letters): see full names above #
+ # Group 2 (uppercase Greek letters): see full names above #
+ # Group 3 (calligraphic capitals): not provided by Eq #
+ # #
+ ###################################################################
+
+ ###################################################################
+ # #
+ # Group 4 (miscellaneous Ord symbols) #
+ # #
+ # Not all of Knuth's symbols are available. The four suits #
+ # (heartsuit, etc.), have definitions above. #
+ # #
+ ###################################################################
+
+ def hbar { @OneCol { &0.1f @Base "-" ^/0.25fo h } }
+ def Re { Rfraktur }
+ def Im { Ifraktur }
+ def partial { partialdiff }
+ def infty { infinity }
+ def prime { minute }
+ #def emptyset { defined above }
+ def nabla { gradient }
+ def surd { radical }
+ def top { 180d @Rotate perpendicular }
+ def bot { perpendicular }
+ def dbar { @Base "||" }
+ #def angle { defined above }
+ def backslash { "\\" }
+ def forall { universal }
+ def exists { existential }
+ def neg { logicalnot }
+
+ def circle
+ { @HContract @VContract @BackEnd @Case {
+ PostScript @Yield {
+ {
+ "xsize ysize 2 div moveto"
+ "xsize 2 div ysize 2 div xsize 2 div 0 360 arc"
+ "0.04 ft setlinewidth stroke"
+ } @Graphic { 0.7f @Wide 0.3f @High ^/ 0.3f @High }
+ }
+ PDF @Yield {
+ #
+ # VT: draws a counterclockwise 360 degree arc from 0 to +360
+ # degree positions (straight right to straight right) with
+ # centre = (xsize/2, ysize/2) and radius = xsize/2,
+ # implemented as two counterclockwise 180 degree arcs.
+ # start at (xsize, ysize/2); the control points are:
+ #
+ # pt1 = (xsize, ysize/2 + (4/3 * xsize/2))
+ # pt2 = (0, ysize/2 + (4/3 * xsize/2))
+ #
+ # end at (0, ysize/2). Then start at (0, ysize/2); control points
+ #
+ # pt1 = (0, ysize/2 - (4/3 * xsize/2))
+ # pt2 = (xsize, ysize/2 - (4/3 * xsize/2))
+ #
+ # and end at (xsize, ysize/2).
+
+ {
+ "__mul(0.04, __loutf) w"
+ "__xsize __div(__ysize, 2) m"
+ "__xsize __add(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ "0 __add(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ "0 __div(__ysize, 2) c"
+ "0 __sub(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ "__xsize __sub(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ "__xsize __div(__ysize, 2) c S"
+ } @Graphic { 0.7f @Wide 0.3f @High ^/ 0.3f @High }
+ }
+ }
+ }
+
+ def filledcircle
+ { @HContract @VContract @BackEnd @Case {
+ PostScript @Yield {
+ {
+ "xsize ysize 2 div moveto"
+ "xsize 2 div ysize 2 div xsize 2 div 0 360 arc"
+ "0.04 ft setlinewidth fill"
+ } @Graphic { 0.7f @Wide 0.3f @High ^/ 0.3f @High }
+ }
+ PDF @Yield {
+ #
+ # JK: I don't know how to fill in PDF, so this doesn't!
+ #
+ # VT: draws a counterclockwise 360 degree arc from 0 to +360
+ # degree positions (straight right to straight right) with
+ # centre = (xsize/2, ysize/2) and radius = xsize/2,
+ # implemented as two counterclockwise 180 degree arcs.
+ # start at (xsize, ysize/2); the control points are:
+ #
+ # pt1 = (xsize, ysize/2 + (4/3 * xsize/2))
+ # pt2 = (0, ysize/2 + (4/3 * xsize/2))
+ #
+ # end at (0, ysize/2). Then start at (0, ysize/2); control points
+ #
+ # pt1 = (0, ysize/2 - (4/3 * xsize/2))
+ # pt2 = (xsize, ysize/2 - (4/3 * xsize/2))
+ #
+ # and end at (xsize, ysize/2).
+
+ {
+ "__mul(0.04, __loutf) w"
+ "__xsize __div(__ysize, 2) m"
+ "__xsize __add(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ "0 __add(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ "0 __div(__ysize, 2) c"
+ "0 __sub(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ "__xsize __sub(__div(__ysize, 2), __div(__mul(2, __xsize), 3))"
+ "__xsize __div(__ysize, 2) c S"
+ } @Graphic { 0.7f @Wide 0.3f @High ^/ 0.3f @High }
+ }
+ }
+ }
+
+ def square
+ { @HContract @VContract @BackEnd @Case {
+ PostScript @Yield {
+ {
+ "0 0 moveto xsize 0 lineto xsize ysize lineto"
+ "0 ysize lineto closepath"
+ "0.04 ft setlinewidth stroke"
+ } @Graphic { 0.6f @Wide 0.3f @High ^/ 0.3f @High }
+ }
+ PDF @Yield {
+ {
+ "__mul(__loutf, 0.04) w"
+ "0 0 m __xsize 0 l __xsize __ysize l"
+ "0 __ysize l s"
+ } @Graphic { 0.6f @Wide 0.3f @High ^/ 0.3f @High }
+ }
+ }
+ }
+
+ def triangle
+ { @HContract @VContract @BackEnd @Case {
+ PostScript @Yield {
+ {
+ "0 0 moveto xsize 0 lineto"
+ "xsize 2 div ysize lineto closepath"
+ "0.04 ft setlinewidth stroke"
+ } @Graphic { 0.3f @Wide 0.3f @High ^| ^/ 0.3f @Wide 0.3f @High }
+ }
+ PDF @Yield {
+ {
+ "__mul(__loutf, 0.04) w"
+ "0 0 m __xsize 0 l"
+ "__div(__xsize, 2) __ysize l s"
+ } @Graphic { 0.3f @Wide 0.3f @High ^| ^/ 0.3f @Wide 0.3f @High }
+ }
+ }
+ }
+
+
+ ###################################################################
+ # #
+ # Layout primitives. #
+ # #
+ ###################################################################
+
+ def atop
+ precedence 73
+ associativity left
+ left x
+ named gap { @BelowGap }
+ named skew { 0c }
+ right y
+ {
+ @HContract @VContract
+ { |0.5rt x
+ //gap |0.5rt &skew y
+ }
+ }
+
+ def below
+ precedence 73
+ associativity left
+ left x
+ named gap { @AboveGap }
+ named skew { 0c }
+ right y
+ {
+ @HContract @VContract
+ { |0.5rt &skew y
+ ^//gap |0.5rt x
+ }
+ }
+
+ def wideatop
+ precedence 73
+ associativity left
+ left x
+ named gap { @BelowGap }
+ right y
+ {
+ @HContract @VContract
+ {
+ x //gap @HScale y
+ }
+ }
+
+ def widebelow
+ precedence 73
+ associativity left
+ left x
+ named gap { @AboveGap }
+ right y
+ {
+ @HContract @VContract
+ {
+ @HScale y ^//gap x
+ }
+ }
+
+ ###################################################################
+ # #
+ # Operator Precedence #
+ # #
+ # We use the precedence illustrated by the following macros #
+ # for the various operator groups. I.e., exponentiation and #
+ # square root precede multiplication and division, which in #
+ # turn precede addition and substraction, etc. #
+ # See http://en.wikipedia.org/wiki/Order_of_operations . #
+ # #
+ ###################################################################
+
+ macro @PunctuationPrec { 13 }
+
+ macro @EqualityPrec { 23 }
+ macro @OrderingPrec { 33 }
+ macro @AdditionPrec { 43 }
+ macro @MultiplicationPrec { 53 }
+ macro @DivisionPrec { 54 }
+ macro @ExponentPrec { 63 }
+ macro @FactorialPrec { 73 }
+
+
+ ###################################################################
+ # #
+ # Group 6 ("Large" operators) #
+ # #
+ # Layout of large operators differs in several ways, depending #
+ # on whether they are in display mode or not. #
+ # #
+ # 1. The operator itself is larger in display mode. We #
+ # achieve this by automatically prepending `big' to the #
+ # operator's symbol when in display mode. #
+ # #
+ # 2. The "bounds" of these operators (i.e., `from' and `to') #
+ # are set as limits (i.e., above and below the operator #
+ # symbol) when in display mode, and displayed to the #
+ # right of the symbol otherwise. Integrations are an #
+ # exception (the only exception?). #
+ # #
+ # See ``The TeXbook'', Chapter 17. #
+ # #
+ ###################################################################
+
+ def largeoperator
+ precedence 58
+ named symbol { "largeop" }
+ named from { "" }
+ named to { "" }
+ named limits { "Yes" } # whether to set `from' and `to' as limits
+ {
+ def @NoLimitsBody {
+ 0.5w @VShift {
+ 1.0w @VShift @OneRow {
+ { | 0.3w @VShift @SuperScriptStyle to }
+ ^/0.0fo { 0w @VShift symbol | }
+ }
+
+ /0.0fo
+
+ { | 0.7w @VShift @SubScriptStyle from }
+ }
+ |{ @CurrPunctSpaceGap }
+ }
+
+ def @LimitsBody {
+ symbol atop { @SuperScriptStyle from }
+ below { @SubScriptStyle to }
+ }
+
+ limits @Case {
+ { "Yes" "yes" } @Yield @LimitsBody
+ { "No" "no" } @Yield @NoLimitsBody
+ }
+ }
+
+ def simplelargeoperator
+ named symbol { "simplelargeop" }
+ named limits { "Auto" }
+ named from { }
+ named to { }
+ {
+ largeoperator symbol { @CurrStyle @Case {
+ "display" @Yield { big symbol }
+ else @Yield symbol } }
+ limits { limits @Case {
+ "Auto" @Yield {
+ @CurrStyle @Case {
+ "display" @Yield "Yes"
+ else @Yield "No" } }
+ else @Yield limits } }
+ from { from }
+ to { to }
+ }
+
+ def sum named from { } named to { } named limits { "Auto" }
+ { simplelargeoperator symbol { summation } limits { limits }
+ from { from } to { to } }
+ def prod named from { } named to { } named limits { "Auto" }
+ { simplelargeoperator symbol { product } limits { limits }
+ from { from } to { to } }
+ def coprod named from { } named to { } named limits { "Auto" }
+ { simplelargeoperator symbol { 180d @Rotate vctr product }
+ limits { limits }
+ from { from } to { to } }
+ def bcap named from { } named to { } named limits { "Auto" }
+ { simplelargeoperator symbol { intersection } limits { limits }
+ from { from } to { to } }
+ def bcup named from { } named to { } named limits { "Auto" }
+ { simplelargeoperator symbol { union } limits { limits }
+ from { from } to { to } }
+ def bvee named from { } named to { } named limits { "Auto" }
+ { simplelargeoperator symbol { logicalor } limits { limits }
+ from { from } to { to } }
+ def bwedge named from { } named to { } named limits { "Auto" }
+ { simplelargeoperator symbol { logicaland } limits { limits }
+ from { from } to { to } }
+ def bodot named from { } named to { } named limits { "Auto" }
+ { simplelargeoperator symbol { & @HContract {
+ circle /0io &0.5rt @PureDot } }
+ limits { limits }
+ from { from } to { to } }
+ def botimes named from { } named to { } named limits { "Auto" }
+ { simplelargeoperator symbol { circlemultiply } limits { limits }
+ from { from } to { to } }
+ def boplus named from { } named to { } named limits { "Auto" }
+ { simplelargeoperator symbol { circleplus } limits { limits }
+ from { from } to { to } }
+ def buplus named from { } named to { } named limits { "Auto" }
+ { simplelargeoperator symbol { & @HContract {
+ &0.5rt 0.7f @Font plus
+ ^/0.2fo union } }
+ limits { limits }
+ from { from } to { to } }
+
+ ###################################################################
+ # #
+ # Integrations are slightly different in that, according to #
+ # Knuth (Chapter 17, p. 144), ``superscripts and subscripts #
+ # are not set as limits, even in display style''. Still, as #
+ # in TeX, we let users the possibility to override this. #
+ # #
+ ###################################################################
+
+ def integration
+ named symbol { "integration" }
+ named limits { "No" }
+ named from { }
+ named to { }
+ {
+ largeoperator symbol { @CurrStyle @Case {
+ "display" @Yield { big symbol }
+ else @Yield symbol } }
+ limits { limits }
+ from { from }
+ to { to }
+ }
+
+ def int
+ named limits { "No" }
+ named from { }
+ named to { }
+ {
+ integration symbol { vctr integral }
+ limits { limits }
+ from { from }
+ to { to }
+ }
+
+ def oint
+ named limits { "No" }
+ named from { }
+ named to { }
+ {
+ integration symbol { @OneCol { vctr degree |0.015fo int } }
+ limits { limits }
+ from { from }
+ to { to }
+ }
+
+
+
+ ###################################################################
+ # #
+ # Group 7 (binary operations) #
+ # #
+ # All of Knuth's symbols are available except \star, \diamond #
+ # and \bullet; a few have been given more mnemonic names. #
+ # #
+ ###################################################################
+
+ def "+" precedence @AdditionPrec left l right r
+ { l bin op { plus } r }
+ def "-" precedence @AdditionPrec left l right r
+ { l bin op { minus } r }
+ def "+-" precedence @AdditionPrec left l right r
+ { l bin op { plusminus } r }
+ def "-+" precedence @AdditionPrec left l right r
+ { l bin op { 180d @Rotate plusminus } r }
+ def setminus precedence @AdditionPrec left l right r
+ { l bin op { backslash } r }
+ def cdot precedence @AdditionPrec left l right r
+ { l bin op { dotmath } r }
+ def times precedence @MultiplicationPrec left l right r
+ { l bin op { multiply } r }
+ def "*" precedence @MultiplicationPrec left l right r
+ { l bin op { asteriskmath } r }
+ #def diamond { name used above }
+ def circ precedence @MultiplicationPrec left l right r
+ { l bin op { circle } r }
+ #def bullet { name used above }
+ def div precedence @DivisionPrec left l right r
+ { l bin op { divide } r }
+ def cap precedence @MultiplicationPrec left l right r
+ { l bin op { intersection } r }
+ def cup precedence @MultiplicationPrec left l right r
+ { l bin op { union } r }
+ def uplus precedence @MultiplicationPrec left l right r
+ { l
+ bin op { @OneRow @HContract { &0.5rt 0.7f @Font plus ^/0.2fo union} }
+ r }
+
+ def sqcap precedence @MultiplicationPrec left l right r
+ { l
+ bin op { @HContract @VContract
+ @BackEnd @Case {
+ PostScript @Yield {
+ { "0 0 moveto 0 ysize lineto xsize ysize lineto"
+ "xsize 0 lineto"
+ "0.04 ft setlinewidth stroke"
+ }
+ @Graphic
+ { 0.3f @Wide 0.3f @High ^| ^/
+ 0.3f @Wide 0.3f @High
+ }
+ }
+ PDF @Yield {
+ { "__mul(__loutf, 0.04) w"
+ "0 0 m 0 __ysize l __xsize __ysize l"
+ "__xsize 0 l s"
+ }
+ @Graphic
+ { 0.3f @Wide 0.3f @High ^| ^/
+ 0.3f @Wide 0.3f @High
+ }
+ }
+ }
+ }
+ r }
+
+ def sqcup { 180d @Rotate sqcap }
+ def triangleleft left l right r
+ { l bin op { "90d" @Rotate 0.8f @Font triangle } r }
+ def triangleright left l right r
+ { l bin op { "-90d" @Rotate 0.8f @Font triangle } r }
+ def wr left l right r
+ { l bin op { vctr {90d @Rotate similar } } r }
+ def bigcirc left l right r
+ { l bin op { 1.2f @Font circle} r }
+ def bigtriangleup left l right r
+ { l bin op { 1.2f @Font triangle } r }
+ def bigtriangledown left l right r
+ { l bin op { 180d @Rotate 1.2f @Font triangle } r }
+ def vee left l right r
+ { l bin op { logicalor } r }
+ def wedge left l right r
+ { l bin op { logicaland } r }
+ def oplus left l right r
+ { l bin op { circleplus } r }
+ def ominus left l right r
+ { l bin op { @OneRow @HContract { circle /0io &0.5rt minus } } r }
+ def otimes left l right r
+ { l bin op { circlemultiply } r }
+ def oslash left l right r
+ { l
+ bin op { `vctr 60d @Rotate @HContract {circle /0io &0.5rt minus`} }
+ r }
+ def odot left l right r
+ { l bin op { @OneRow @HContract {circle /0io &0.5rt @PureDot } } r }
+ def dagger left l right r
+ { l bin op { @Base @Char "dagger" } r }
+ def daggerdbl left l right r
+ { l bin op { @Base @Char "daggerdbl" } r }
+ def amalg left l right r
+ { l bin op { 180d @Rotate vctr product } r }
+
+ ###################################################################
+ # #
+ # Group 8 (relations) #
+ # #
+ # All Knuth's operators are available, but many have been #
+ # given different, more mnemonic names. Also included is #
+ # a not operator for negating the relations. #
+ # #
+ ###################################################################
+
+ def "<" precedence @OrderingPrec left l right r
+ { l rel op { less } r }
+ def ">" precedence @OrderingPrec left l right r
+ { l rel op { greater } r }
+ def "=" precedence @EqualityPrec left l right r
+ { l rel op { equal } r }
+ def "<=" precedence @OrderingPrec left l right r
+ { l rel op { lessequal } r }
+ def prec left l right r
+ { l
+ rel op { 0.45f @Font "-90d"
+ @Rotate { parenrighttp ^| parenlefttp } }
+ r }
+ def preceq { rel { @OneRow non prec /0.1f minus } }
+ def "<<" precedence @OrderingPrec left l right r
+ { l rel op { less less } r }
+ def subset precedence @OrderingPrec left l right r
+ { l rel op { propersubset } r }
+ def subseteq precedence @OrderingPrec left l right r
+ { l rel op { reflexsubset } r }
+ def sqsubseteq precedence @OrderingPrec left l right r
+ { l
+ rel op { @HContract @VContract
+ @BackEnd @Case {
+ PostScript @Yield {
+ { { "xsize 0 moveto"
+ "0 0 lineto"
+ "0 ysize lineto"
+ "xsize ysize lineto"
+ "0.04 ft setlinewidth stroke"
+ }
+ @Graphic
+ { 0.5f @Wide 0.25f @High ^/
+ 0.25f @High
+ }
+ /0.1f minus
+ }
+ }
+ PDF @Yield {
+ { { "__mul(__loutf, 0.04) w"
+ "__xsize 0 m"
+ "0 0 l"
+ "0 __ysize l"
+ "__xsize __ysize l s"
+ }
+ @Graphic
+ { 0.5f @Wide 0.25f @High ^/
+ 0.25f @High
+ }
+ /0.1f minus
+ }
+ }
+ }
+ }
+ r }
+
+ def in precedence @OrderingPrec left l right r
+ { l rel op { element } r }
+ def vdash precedence @OrderingPrec left l right r
+ { l rel op { vctr {"-90d" @Rotate perpendicular} } r }
+ def smile precedence @OrderingPrec left l right r
+ { l rel op { vctr 90d @Rotate parenleft } r }
+ def frown precedence @OrderingPrec left l right r
+ { l rel op { vctr 90d @Rotate parenright } r }
+
+ def ">=" precedence @OrderingPrec left l right r
+ { l rel op { greaterequal } r }
+ def succ precedence @OrderingPrec left l right r
+ { l
+ rel op { 0.45f @Font 90d @Rotate
+ { parenrighttp ^| parenlefttp } }
+ r }
+ def succeq precedence @OrderingPrec left l right r
+ { l rel op { @OneRow non succ /0.1f minus } r }
+ def ">>" precedence @OrderingPrec left l right r
+ { l rel op { greater greater } r }
+ def supset precedence @OrderingPrec left l right r
+ { l rel op { propersuperset } r }
+ def supseteq precedence @OrderingPrec left l right r
+ { l rel op { reflexsuperset } r }
+ def sqsupseteq precedence @OrderingPrec left l right r
+ { l
+ rel op { @HContract @VContract
+ @BackEnd @Case {
+ PostScript @Yield {
+ { { "0 0 moveto xsize 0 lineto"
+ "xsize ysize lineto"
+ "0 ysize lineto"
+ "0.04 ft setlinewidth stroke"
+ }
+ @Graphic
+ { 0.5f @Wide 0.25f @High ^/
+ 0.25f @High
+ }
+ /0.1f minus
+ }
+ }
+ PDF @Yield {
+ { { "__mul(__loutf, 0.04) w"
+ "0 0 m __xsize 0 l"
+ "__xsize __ysize l"
+ "0 __ysize l s"
+ }
+ @Graphic
+ { 0.5f @Wide 0.25f @High ^/
+ 0.25f @High
+ }
+ /0.1f minus
+ }
+ }
+ }
+ }
+ r }
+ def ni precedence @OrderingPrec left l right r
+ { l rel op { 180d @Rotate element } r }
+ def dashv precedence @OrderingPrec left l right r
+ { l rel op { vctr {90d @Rotate perpendicular} } r }
+ def mid precedence @OrderingPrec left l right r
+ { l rel op { @Base "|" } r }
+ def parallel precedence @OrderingPrec left l right r
+ { l rel op { @Base "||" } r }
+
+ def "==" precedence @EqualityPrec left l right r
+ { l rel op { equivalence } r }
+ def "~" precedence @EqualityPrec left l right r
+ { l rel op { similar } r }
+ def "-~" precedence @EqualityPrec left l right r
+ { l rel op { @OneRow{similar^/0.07f/0.07f minus} } r }
+ def asymp precedence @EqualityPrec left l right r
+ { l
+ rel op { 0.7f @Font @OneRow
+ { 90d @Rotate parenleft ^/0.008f
+ /0.008f 90d @Rotate parenright } }
+ r }
+ def "~~" precedence @EqualityPrec left l right r
+ { l rel op { approxequal } r }
+ def "=~" precedence @EqualityPrec left l right r
+ { l rel op { congruent } r }
+ def bowtie precedence @EqualityPrec left l right r
+ { l rel op { non triangleright non triangleleft } r }
+ def propto precedence @EqualityPrec left l right r
+ { l rel op { proportional } r }
+ def models precedence @EqualityPrec left l right r
+ { l rel op { @Base vctr "|" &0.05fo vctr equal } r }
+ def trieq precedence @EqualityPrec left l right r
+ { l
+ rel op { @OneRow @HContract {&0.5rt small triangle^/0.15f equal} }
+ r }
+ def doteq precedence @EqualityPrec left l right r
+ { l
+ rel op { @OneRow @HContract { &0.5rt dotmath^/0.15f equal } }
+ r }
+ def perp precedence @EqualityPrec left l right r
+ { l rel op { perpendicular } r }
+
+ def notsub precedence @OrderingPrec left l right r
+ { l rel op { notsubset } r }
+ def notin precedence @OrderingPrec left l right r
+ { l rel op { notelement } r }
+ def "!=" precedence @EqualityPrec left l right r
+ { l rel op { notequal } r }
+
+ def "<->" left l right r
+ { l rel op { arrowboth } r }
+ def "<--" left l right r
+ { l rel op { arrowleft } r }
+ def "-->" left l right r
+ { l rel op { arrowright } r }
+ def up left l right r
+ { l rel op { arrowup } r }
+ def down left l right r
+ { l rel op { arrowdown } r }
+ def "<=>" left l right r
+ { l rel op { arrowdblboth } r }
+ def "<==" left l right r
+ { l rel op { arrowdblleft } r }
+ def "==>" left l right r
+ { l rel op { arrowdblright } r }
+ def dblup left l right r
+ { l rel op { arrowdblup } r }
+ def dbldown left l right r
+ { l rel op { arrowdbldown } r }
+
+ def ":" left l right r
+ { l rel op { colon } r }
+ def "::" left l right r
+ { l rel op { @OneCol {colon ` colon} } r }
+ def ":=" left l right r
+ { l rel op { colon{ //0.05fo equal } } r }
+
+ def not right x { @HContract {@OneCol x /0co &0.5rt slash}}
+
+
+ ###################################################################
+ # #
+ # Groups 11 and 12 - openings and closings. #
+ # #
+ ###################################################################
+
+ def lpar { parenleft }
+ def rpar { parenright }
+ def lbrack { bracketleft }
+ def rbrack { bracketright }
+ def lbrace { braceleft }
+ def rbrace { braceright }
+ def lfloor { ` "-0.15f" @VShift bracketleftbt }
+ def rfloor { "-0.15f" @VShift bracketrightbt ` }
+ def lceil { ` "-0.1f" @VShift bracketlefttp }
+ def rceil { "-0.1f" @VShift bracketrighttp ` }
+ def langle { angleleft }
+ def rangle { angleright }
+
+ def blpar { @OneRow {parenlefttp ^/ parenleftex / parenleftbt } }
+ def brpar { @OneRow {parenrighttp ^/ parenrightex / parenrightbt } }
+ def blbrack { @OneRow {bracketlefttp ^/ bracketleftex / bracketleftbt } }
+ def brbrack { @OneRow {bracketrighttp ^/ bracketrightex / bracketrightbt} }
+ def blbrace { @OneRow {bracelefttp ^/ braceleftmid / braceleftbt } }
+ def brbrace { @OneRow {bracerighttp ^/ bracerightmid / bracerightbt } }
+ def blfloor { @OneRow {bracketleftex ^/ bracketleftex / bracketleftbt } }
+ def brfloor { @OneRow {bracketrightex ^/ bracketrightex / bracketrightbt} }
+ def blceil { @OneRow {bracketlefttp ^/ bracketleftex / bracketleftex } }
+ def brceil { @OneRow {bracketrighttp ^/ bracketrightex / bracketrightex} }
+ def blangle { @HContract @VContract
+ @BackEnd @Case {
+ PostScript @Yield {
+ { "xsize 0 moveto"
+ "0 ysize 2 div lineto"
+ "xsize ysize lineto"
+ "0.04 ft setlinewidth stroke"
+ }
+ @Graphic { 0.5f @Wide 2f @High ^/ 2f @High }
+ }
+ PDF @Yield {
+ { "__mul(__loutf, 0.04) w"
+ "__xsize 0 m"
+ "0 __div(__ysize, 2) l"
+ "__xsize __ysize l S"
+ }
+ @Graphic { 0.5f @Wide 2f @High ^/ 2f @High }
+ }
+ }
+ }
+ def brangle { @HContract @VContract
+ @BackEnd @Case {
+ PostScript @Yield {
+ { "0 0 moveto"
+ "xsize ysize 2 div lineto"
+ "0 ysize lineto"
+ "0.04 ft setlinewidth stroke"
+ }
+ @Graphic { 0.5f @Wide 2f @High ^/ 2f @High }
+ }
+ PDF @Yield {
+ { "__mul(__loutf, 0.04) w"
+ "0 0 m"
+ "__xsize __div(__ysize, 2) l"
+ "0 __ysize l S"
+ }
+ @Graphic { 0.5f @Wide 2f @High ^/ 2f @High }
+ }
+ }
+ }
+
+
+ ###################################################################
+ # #
+ # Group 13 - punctuation. #
+ # #
+ ###################################################################
+
+ def ";" precedence @PunctuationPrec left l right r
+ { l punct symbol { semicolon } r }
+ def "," precedence @PunctuationPrec left l right r
+ { l punct symbol { comma } r }
+ def col precedence @PunctuationPrec left l right r
+ { l punct symbol { colon } r }
+
+
+ ###################################################################
+ # #
+ # Additional short symbols (Knuth p. 132) #
+ # #
+ ###################################################################
+
+ def "!" { exclam }
+ def "?" { question }
+ def "%" { percent }
+ def "(" { parenleft }
+ def ")" { parenright }
+ def "[" { bracketleft }
+ def "]" { bracketright }
+
+
+ ###################################################################
+ # #
+ # Common mathematical functions (from Knuth p. 162). #
+ # mod is included, since @Rel mod is easily typed if needed. #
+ # #
+ ###################################################################
+
+ def arccos { @Base "arccos" }
+ def arcsin { @Base "arcsin" }
+ def arctan { @Base "arctan" }
+ def arg { @Base "arg" }
+ def cos { @Base "cos" }
+ def cosh { @Base "cosh" }
+ def cot { @Base "cot" }
+ def coth { @Base "coth" }
+ def csc { @Base "csc" }
+ def deg { @Base "deg" }
+ def det { @Base "det" }
+ def dim { @Base "dim" }
+ def exp { @Base "exp" }
+ def gcd { @Base "gcd" }
+ def hom { @Base "hom" }
+ def inf { @Base "inf" }
+ def ker { @Base "ker" }
+ def lg { @Base "lg" }
+ def lim { @Base "lim" }
+ def liminf { @OneCol { @Base "lim" ` @Base "inf" } }
+ def limsup { @OneCol { @Base "lim" ` @Base "sup" } }
+ def ln { @Base "ln" }
+ def log { @Base "log" }
+ def max { @Base "max" }
+ def min { @Base "min" }
+ def Pr { @Base "Pr" }
+ def sec { @Base "sec" }
+ def sin { @Base "sin" }
+ def sinh { @Base "sinh" }
+ def supr { @Base "sup" }
+ def tan { @Base "tan" }
+ def tanh { @Base "tanh" }
+ def mod { @Base "mod" }
+
+
+ ###################################################################
+ # #
+ # Arrow symbols. #
+ # #
+ ###################################################################
+
+ def leftarrow { arrowleft }
+ def longleftarrow { { 1.6 1 } @Scale arrowleft }
+ def dblleftarrow { arrowdblleft }
+ def dbllongleftarrow { { 1.6 1 } @Scale arrowdblleft }
+ def rightarrow { arrowright }
+ def longrightarrow { { 1.6 1 } @Scale arrowright }
+ def dblrightarrow { arrowdblright }
+ def dbllongrightarrow { { 1.6 1 } @Scale arrowdblright }
+ def leftrightarrow { arrowboth }
+ def longleftrightarrow { { 1.6 1 } @Scale arrowboth }
+ def dblleftrightarrow { arrowdblboth }
+ def dbllongleftrightarrow { { 1.6 1 } @Scale arrowdblboth }
+
+ def mapsto
+ {
+ @HContract @VContract {
+ @BackEnd @Case {
+ PostScript @Yield {
+ "0 ymark 0.16 ft sub moveto 0 ymark 0.16 ft add lineto stroke"
+ @Graphic arrowright
+ }
+ PDF @Yield {
+ "0 __sub(__ymark, __mul(__loutf, 0.16)) m 0 __add(__ymark, __mul(__loutf, 0.16)) l S"
+ @Graphic arrowright
+ }
+ }
+ }
+ }
+
+ def longmapsto
+ {
+ @HContract @VContract {
+ @BackEnd @Case {
+ PostScript @Yield {
+ "0 ymark 0.16 ft sub moveto 0 ymark 0.16 ft add lineto stroke"
+ @Graphic { { 1.6 1 } @Scale arrowright }
+ }
+ PDF @Yield {
+ "0 __sub(__ymark, __mul(__loutf, 0.16)) m 0 __add(__ymark, __mul(__loutf, 0.16)) l S"
+ @Graphic { { 1.6 1 } @Scale arrowright }
+ }
+ }
+ }
+ }
+
+ def hookleftarrow
+ {
+ @HContract @VContract {
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ "xsize ymark moveto xsize ymark 0.1 ft add 0.1 ft -90 90 arc stroke"
+ @Graphic leftarrow
+ }
+
+ PDF @Yield {
+#
+# VT: draws a counterclockwise 180 degree arc from -90 to +90 degree positions
+# (straight down to straight up) with centre = (xsize, ymark + 0.1 ft)
+# and radius = 0.1 ft
+#
+# the control points therefore are:
+# pt1 = (xsize + (4/3 * 0.1 ft), ymark) and pt2 = (xsize + (4/3 * 0.1 ft), ymark + 0.2 ft)
+#
+ {
+ "__xsize __ymark m" # pt0
+ "__add(__xsize, __div(__mul(0.4, __loutf), 3)) __ymark" # pt1
+ "__add(__xsize, __div(__mul(0.4, __loutf), 3)) __add(__ymark, __mul(0.2, __loutf))" # pt2
+ "__xsize __add(__ymark, __mul(0.2, __loutf)) c S" # pt3
+ }
+ @Graphic leftarrow
+ }
+
+ }
+ }
+ }
+
+ def hookrightarrow
+ {
+ @HContract @VContract {
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ "0 ymark moveto 0 0.1 ft ymark add 0.1 ft -90 90 arcn stroke"
+ @Graphic rightarrow
+ }
+
+ PDF @Yield {
+#
+# VT: draws a clockwise 180 degree arc from -90 to +90 degree positions
+# (straight down to straight up) with centre = (0, ymark + 0.1 ft)
+# and radius = 0.1 ft
+#
+# the control points therefore are:
+# pt1 = (-4/3 * 0.1 ft, ymark) and pt2 = (-4/3 * 0.1 ft, ymark + 0.2 ft)
+#
+ {
+ "0 __ymark m" # pt0
+ "__div(__mul(-0.4, __loutf), 3) __ymark" # pt1
+ "__div(__mul(-0.4, __loutf), 3) __add(__ymark, __mul(0.2, __loutf))" # pt2
+ "0 __add(__ymark, __mul(0.2, __loutf)) c S" # pt3
+ }
+ @Graphic rightarrow
+ }
+
+ }
+ }
+ }
+
+ def @ClipToSize right x
+ {
+ @HContract @VContract
+ @BackEnd @Case {
+ PostScript @Yield {
+ {
+ "grestore newpath 0 0 moveto xsize 0 lineto xsize ysize lineto"
+ "0 ysize lineto closepath clip gsave"
+ } @Graphic x
+ }
+ PDF @Yield {
+ "Q n 0 0 __xsize __ysize re W n q" @Graphic x
+ }
+ }
+ }
+
+ def @ClipAboveMark
+ left amount
+ right x
+ {
+ @ClipToSize { ^//{{amount}o} x }
+ }
+
+ def @ClipBelowMark
+ left amount
+ right x
+ {
+ @ClipToSize { x //{{amount}o} }
+ }
+
+ def leftharpoonup
+ {
+ 0.04f @ClipBelowMark leftarrow
+ }
+
+ def rightharpoonup
+ {
+ 0.04f @ClipBelowMark rightarrow
+ }
+
+ def leftharpoondown
+ {
+ 0.02f @ClipAboveMark leftarrow
+ }
+
+ def rightharpoondown
+ {
+ 0.02f @ClipAboveMark rightarrow
+ }
+
+ def rightleftharpoons
+ {
+ @HContract @VContract {
+ rightharpoonup
+ ^//0.1fo
+ //0.1fo
+ leftharpoondown
+ }
+ }
+
+ def leadsto { @HContract { similar &0.4fo arrowright } }
+
+ def uparrow { arrowup }
+ def dbluparrow { arrowdblup }
+ def downarrow { arrowdown }
+ def dbldownarrow { arrowdbldown }
+ def updownarrow { @HContract { arrowup &0io arrowdown } }
+ def dblupdownarrow { @VContract { arrowdblup ^//0.2fo arrowdbldown } }
+ def nearrow { 0.5w @VShift 0.5w @HShift 45d @Rotate arrowright }
+ def searrow { 0.5w @VShift 0.5w @HShift 315d @Rotate arrowright }
+ def swarrow { 0.5w @VShift 0.5w @HShift 225d @Rotate arrowright }
+ def nwarrow { 0.5w @VShift 0.5w @HShift 135d @Rotate arrowright }
+
+
+ ###################################################################
+ # #
+ # Other symbols taken from TeX. #
+ # #
+ ###################################################################
+
+ def ldots { . &0.3f . &0.3f . }
+ def cdots { dotmath &0.3f dotmath &0.3f dotmath }
+ def vdots { @OneRow { dotmath ^/0.3f dotmath /0.3f dotmath } }
+ def ddots { @OneCol @OneRow
+ { dotmath
+ ^/0.3f |0.3f dotmath
+ /0.3f | |0.3f dotmath
+ }
+ }
+
+
+ ###################################################################
+ # #
+ # Symbols taken from eqn (Kernighan and Cherry 1975). #
+ # #
+ ###################################################################
+
+ def del { gradient }
+ def grad { gradient }
+ def "..." { ellipsis }
+ def ",...," { , ellipsis ``` , }
+ def "'" { minute }
+ def "''" { minute minute }
+ def "'''" { minute minute minute }
+ def "''''" { minute minute minute minute }
+ def empty { emptyset }
+
+
+
+ ###################################################################
+ # #
+ # Miscellaneous #
+ # #
+ ###################################################################
+
+ def triangleup { 0.8f @Font triangle }
+ def triangledown { 180d @Rotate 0.8f @Font triangle }
+
+ ###################################################################
+ # #
+ # Symbols with parameters. #
+ # #
+ # These symbols are essentially those of eqn, with some #
+ # changes and additions. #
+ # #
+ ###################################################################
+
+ def @OrDefault
+ left l
+ right r
+ {
+ l @Case {
+ "dft" @Yield r
+ else @Yield l
+ }
+ }
+
+ def sup
+ precedence @FactorialPrec
+ associativity left
+ left x
+ named gap { "dft" }
+ right y
+ {
+ @HContract @VContract
+ { | @SuperScriptStyle y
+ ^/{ gap @OrDefault @CurrSuperScriptGap } x
+ }
+ }
+
+ def sub
+ precedence 72
+ associativity left
+ left x
+ named gap { @SubScriptGap }
+ right y
+ {
+ @HContract @VContract
+ {
+ "." @KernShrink x
+ /gap | @SubScriptStyle y
+ }
+ }
+
+ def tsub
+ precedence 72
+ associativity left
+ left x
+ named gap { @SubScriptGap }
+ right y
+ {
+ @HContract @VContract
+ {
+ x
+ /gap | &0io 0.2f @HShift @SubScriptStyle y
+ }
+ }
+
+ def supp
+ precedence @FactorialPrec
+ associativity left
+ left x
+ named gap { "dft" }
+ right y
+ {
+ @HContract @VContract
+ {
+ { ^/{ gap @OrDefault @CurrSuperScriptGap } x
+ /{ gap @OrDefault @CurrSuperScriptGap } }
+ | y
+ }
+ }
+
+ def on
+ precedence 74
+ associativity left
+ left x
+ right y
+ {
+ { @SuperScriptStyle x } ^/ /
+ { @SubScriptStyle y }
+ }
+
+ def ton
+ precedence 74
+ associativity left
+ left x
+ right y
+ {
+ @SuperScriptStyle x ^/ /
+ &0io 0.3f @HShift @SubScriptStyle y
+ }
+
+ def frac
+ precedence @DivisionPrec
+ associativity left
+ left x
+ named gap { 0.2f }
+ right y
+ {
+ @HContract @VContract
+ { 1w @VShift { @SuperScriptStyle { x } /gap }
+ | fraction &0io
+ | 0w @VShift { |gap @SubScriptStyle { y } }
+ }
+ }
+
+ def half { 1 frac 2 }
+ def third { 1 frac 3 }
+
+ def over
+ precedence @DivisionPrec
+ associativity left
+ left x
+ named gap { "dft" }
+ named belowgap { "dft" }
+ right y
+ {
+ def @AboveLineGap
+ {
+ gap @Case {
+ "dft" @Yield {
+ @CurrStyle @Case {
+ "display" @Yield 0.20f
+ else @Yield 0.10f
+ }
+ }
+ else @Yield gap
+ }
+ }
+
+ def @BelowLineGap
+ {
+ belowgap @Case {
+ "dft" @Yield {
+ @CurrStyle @Case {
+ "display" @Yield 0.15f
+ else @Yield 0.09f
+ }
+ }
+ else @Yield belowgap
+ }
+ }
+
+ @HContract @VContract
+ { |0.5rt @OneCol @NumeratorStyle x
+ ^//@AboveLineGap @HLine
+ //@BelowLineGap |0.5rt @OneCol @DenominatorStyle @Strut y
+ }
+ }
+
+
+ def dot
+ precedence @FactorialPrec
+ left x
+ named gap { @AboveGap }
+ {
+ x below gap { gap } skew { @SkewGap } .
+ }
+
+ def dotdot
+ precedence @FactorialPrec
+ left x
+ named gap { @AboveGap }
+ {
+ x below gap { gap } skew { @SkewGap } ..
+ }
+
+ def hat
+ precedence @FactorialPrec
+ left x
+ named gap { @AboveGap }
+ {
+ x below gap { gap } skew { @SkewGap } @Base "^"
+ }
+
+ def tilde
+ precedence @FactorialPrec
+ left x
+ named gap { @AboveGap }
+ {
+ x below gap { gap } skew { @SkewGap } @Base "~"
+ }
+
+ def vec
+ precedence @FactorialPrec
+ left x
+ named gap { @AboveGap }
+ {
+ x below gap { gap } skew { @SkewGap } arrowright
+ }
+
+ def dyad
+ precedence @FactorialPrec
+ left x
+ named gap { @AboveGap }
+ {
+ x below gap { gap } skew { @SkewGap } arrowboth
+ }
+
+ def overbar
+ precedence @FactorialPrec
+ left x
+ named gap { @AboveGap }
+ {
+ { @WithStyle style { @CurrStyle } cramped { "Yes" } x }
+ widebelow gap { gap } minus
+ }
+
+ def underbar
+ precedence @FactorialPrec
+ left x
+ named gap { @BelowGap }
+ {
+ x wideatop gap { gap } minus
+ }
+
+ def sqrt
+ precedence @ExponentPrec
+ named gap { @AboveGap }
+ right x
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ @HContract @VContract
+ {
+ @VScale surd | @OneRow
+ {
+ @HLine line { "0.03 ft setlinewidth 2 setlinecap" }
+ ^//gap |gap @SquareRootStyle @Strut x # //gap
+ }
+ }
+ }
+ PDF @Yield {
+ @HContract @VContract
+ {
+#
+# VT: this PDF is correct but it renders badly in Acrobat (?problem
+# with scaling by fractional factors)
+# In other words, the @VScale value comes through correctly but it
+# looks ugly; GhostScript's translation actually expands the
+# "draw surd" instruction into raw moveto's and lineto's which
+# it presumably gets from the font's definition of the glyph!
+#
+ @VScale surd | @OneRow
+ {
+ @HLine line { "__mul(__loutf, 0.03) w 2 J" }
+ ^//gap |gap @SquareRootStyle @Strut x # //gap
+ }
+ }
+ }
+ }
+ }
+
+ def root
+ precedence @ExponentPrec
+ left x
+ right y
+ {
+ "" sup x &0io sqrt y
+ }
+
+ def zroot
+ precedence @ExponentPrec
+ left x
+ right y
+ {
+ def zsup right x { "+0.3f" @VShift 0.5f @Font x }
+
+ "-0.4f" @HShift { 1w @HShift { zsup x } } &0co sqrt y
+ }
+
+ export row axisrow col lcol ccol rcol mcol
+ def matrix
+ precedence 100
+ named gap { @CurrBinarySpaceGap }
+ named strut
+ named no { }
+ named No { }
+ named yes { 0.5f }
+ named Yes { 0.5f }
+ { No }
+ named atleft {}
+ named atright {}
+ named userow { No }
+ named shiftdelim { Yes }
+ body x
+ {
+ def @Strut
+ {
+ strut @Case {
+ "" @Yield {}
+ else @Yield { @OneRow { strut @High ^/ strut @High } }
+ }
+ }
+
+ def newrow
+ precedence 50
+ associativity left
+ left x
+ right y
+ {
+ x @Case {
+ "" @Yield { y | @Strut }
+ else @Yield { x /@RowGap y | @Strut }
+ }
+ }
+
+ macro row { newrow "" }
+
+ def newaxisrow
+ precedence 50
+ associativity left
+ left x
+ right y
+ {
+ x @Case {
+ "" @Yield { y | @Strut }
+ else @Yield { x ^/@RowGap y | @Strut }
+ }
+ }
+
+ macro axisrow { newaxisrow "" }
+
+ def col
+ precedence 52
+ associativity left
+ left x
+ named indent { 0.5rt }
+ right y
+ {
+ x @Case {
+ "" @Yield { &indent @OneCol y }
+ else @Yield { x |@ColGap &indent @OneCol y }
+ }
+ }
+
+ def lcol
+ precedence 52
+ associativity left
+ left x
+ right y
+ {
+ x col indent { 0i } y
+ }
+
+ def ccol
+ precedence 52
+ associativity left
+ left x
+ right y
+ {
+ x col indent { 0.5rt } y
+ }
+
+ def rcol
+ precedence 52
+ associativity left
+ left x
+ right y
+ {
+ x col indent { 1rt } y
+ }
+
+ def mcol
+ precedence 52
+ associativity left
+ left x
+ right y
+ {
+ x @Case {
+ "" @Yield { @OneCol y }
+ else @Yield { x |@ColGap @OneCol y }
+ }
+ }
+
+ def delim right x
+ {
+ x @Case
+ {
+ "" @Yield @Null
+ else @Yield
+ {
+ shiftdelim @Case {
+ { Yes yes } @Yield { @VScale x }
+ else @Yield { @VCover x }
+ }
+ }
+ }
+ }
+
+ @HContract @VContract {
+ delim atleft &@CurrPunctSpaceGap
+ userow @Case {
+ {Yes yes} @Yield @HContract @VContract {^//gap @OneRow x //gap}
+ else @Yield vctr @HContract @VContract { //gap x //gap }
+ }
+ &@CurrPunctSpaceGap delim atright
+ }
+ }
+
+ macro pmatrix { matrix atleft { "1.5f" @Font ( } atright { "1.5f" @Font ) }}
+ macro bmatrix { matrix atleft { blbrack } atright { brbrack } }
+ macro brmatrix { matrix atleft { blbrace } atright { brbrace } }
+ macro fmatrix { matrix atleft { blfloor } atright { brfloor } }
+ macro cmatrix { matrix atleft { blceil } atright { brceil } }
+ macro amatrix { matrix atleft { blangle } atright { brangle } }
+
+
+ ###################################################################
+ # #
+ # Group 5 (digits) #
+ # #
+ ###################################################################
+
+ def "0" { zero }
+ def "1" { one }
+ def "2" { two }
+ def "3" { three }
+ def "4" { four }
+ def "5" { five }
+ def "6" { six }
+ def "7" { seven }
+ def "8" { eight }
+ def "9" { nine }
+
+
+
+ basefont @Font
+ { Slope xheight2mark nostrut } @Font { initialspace } @Space
+ { @CurrStyleVar @Yield initialstyle } @SetContext {
+ { @CrampedVar @Yield initiallycramped } @SetContext {
+ @Body
+ }
+ }
+
+@End @Math
+
+# In-line equations.
+macro @M { @HContract @VContract @Math initialstyle { "text" } }
diff --git a/include/save_bsf b/include/save_bsf
new file mode 100644
index 0000000..40e15f7
--- /dev/null
+++ b/include/save_bsf
@@ -0,0 +1,1826 @@
+
+###############################################################################
+# #
+# Lout @BasicSetup package #
+# #
+# Jeffrey H. Kingston #
+# #
+# This package contains basic symbols used widely throughout many #
+# documents, for font changes, particular characters, standard words in #
+# the current language, date and time, paragraphs, lists, colours, #
+# rules, and boxes. #
+# #
+###############################################################################
+
+@SysInclude { lengths } # @PSLengths
+@SysInclude { coltex } # @ColourCommand and @TextureCommand
+@SysPrependGraphic { bsf.lpg } # rules, boxes, margin note setup
+
+
+###############################################################################
+# #
+# The following symbols are defined outside @BasicSetup so that #
+# they can be invoked when setting its parameters in the @Use clause. #
+# #
+###############################################################################
+
+def @OrIfPlain
+ precedence 80
+ left x
+ right y
+{
+ @BackEnd @Case {
+ PlainText @Yield y
+ else @Yield x
+ }
+}
+
+###########################################################################
+# #
+# @Colour, @Color #
+# #
+###########################################################################
+
+def @Colour @Color left col right y { {@ColourCommand col} @SetColour y }
+
+
+###########################################################################
+# #
+# @ColouredUnderline, @ColoredUnderline #
+# #
+###########################################################################
+
+def @ColouredUnderline @ColoredUnderline left col right y {
+ {@ColourCommand col} @SetUnderlineColour @Underline y
+}
+
+
+###########################################################################
+# #
+# @Texture #
+# #
+###########################################################################
+
+
+def @Texture
+ left type
+ named scale { 1 }
+ named hscale { 1 }
+ named vscale { 1 }
+ import @PSLengths named angle { 0d }
+ import @PSLengths named hshift { 0i }
+ import @PSLengths named vshift { 0i }
+ import @PSLengths named width { "dft" }
+ import @PSLengths named height { "dft" }
+ import @PSLengths named gap { "dft" }
+ import @PSLengths named radius { "dft" }
+ import @PSLengths named linewidth { "dft" }
+ named font { "dft" }
+ import @PSLengths named size { "dft" }
+ named value { "dft" }
+ right x
+{
+ { type @TextureCommand
+ scale { scale }
+ hscale { hscale }
+ vscale { vscale }
+ angle { angle }
+ hshift { hshift }
+ vshift { vshift }
+ width { width }
+ height { height }
+ gap { gap }
+ radius { radius }
+ linewidth { linewidth }
+ font { font }
+ size { size }
+ value { value }
+ } @SetTexture x
+}
+
+
+###############################################################################
+# #
+# Symbols exported by @BasicSetup. #
+# #
+###############################################################################
+
+export
+
+ @InitialFont @InitialBreak @InitialOutdent @InitialSpace @InitialLanguage
+ @InitialColour @OptimizePages @HeadingFont
+ @ParaGap @ParaIndent @DisplayGap @DisplayIndent @DefaultIndent
+ @DisplayNumStyle @WideIndent @VeryWideIndent
+ @ListGap @ListIndent @ListRightIndent
+ @ListLabelWidth @ListLabelRight @ListLabelRightGap @ListFont @ListBreak
+ @NumberSeparator
+
+ @Pipe @PipeVerbatim @PipeRawVerbatim
+
+ @Word @Roman @UCRoman @Alpha @UCAlpha @FnBullets @FnSymbols
+ @Months @ShortMonths @WeekDays @ShortWeekDays
+ @TwelveHours @ShortHours @MeriDiems @ShortMeriDiems
+
+ @Sym @Ding @R @I @B @BI @S @F @II
+ "~" "~~" "``" "''" ",," "--" "---" "..."
+
+ @Bullet @ParSym @SectSym @Dagger @DaggerDbl @CDot @Sterling @Yen @Florin
+ @Star @Degree @Minute @Second @Multiply @Divide @Lozenge @Register
+ @CopyRight @TradeMark @Euro
+
+ @Date @Time @DateTimeFormat @DropCapTwo @DropCapThree @Centre @Right
+ @NoDotSep @NoDotJoin @Join @Sep @DotSep @ColonSep @DotJoin @DashJoin
+ @NumSep @VStrut @ZeroWidth @ZeroHeight @OverStrike @Sup @Sub @HClip @VClip
+ @FullWidthRule @LocalWidthRule @Box @CurveBox @ShadowBox @BoundaryMarks
+ @NumberMarker @NumberOf @TitleMarker @TitleOf
+ @PageMarker @PageMark @NoLinkPageMark @PageOf @CrossLink @ExternalLink
+
+ @BeginDisplayCounter
+
+ @Heading "^" "&-" @If @Not @And @Or @True
+ @PP @LP @LLP @DP @LOP @NP @CNP
+
+ @BeginAlignedDisplays
+ @EndAlignedDisplays
+
+ @Display
+ @LeftDisplay
+ @IndentedDisplay
+ @QuotedDisplay
+ @CentredDisplay
+ @RightDisplay
+ @AlignedDisplay
+ @LeftAlignedDisplay
+ @IndentedAlignedDisplay
+ @QuotedAlignedDisplay
+ @CentredAlignedDisplay
+ @RightAlignedDisplay
+ @NumberedDisplay
+ @LeftNumberedDisplay
+ @IndentedNumberedDisplay
+ @QuotedNumberedDisplay
+ @CentredNumberedDisplay
+ @RightNumberedDisplay
+ @AlignedNumberedDisplay
+ @LeftAlignedNumberedDisplay
+ @IndentedAlignedNumberedDisplay
+ @QuotedAlignedNumberedDisplay
+ @CentredAlignedNumberedDisplay
+ @RightAlignedNumberedDisplay
+
+ @RawDisplay
+ @RawLeftDisplay
+ @RawIndentedDisplay
+ @RawQuotedDisplay
+ @RawCentredDisplay
+ @RawRightDisplay
+ @RawAlignedDisplay
+ @RawLeftAlignedDisplay
+ @RawIndentedAlignedDisplay
+ @RawQuotedAlignedDisplay
+ @RawCentredAlignedDisplay
+ @RawRightAlignedDisplay
+ @RawNumberedDisplay
+ @RawLeftNumberedDisplay
+ @RawIndentedNumberedDisplay
+ @RawQuotedNumberedDisplay
+ @RawCentredNumberedDisplay
+ @RawRightNumberedDisplay
+ @RawAlignedNumberedDisplay
+ @RawLeftAlignedNumberedDisplay
+ @RawIndentedAlignedNumberedDisplay
+ @RawQuotedAlignedNumberedDisplay
+ @RawCentredAlignedNumberedDisplay
+ @RawRightAlignedNumberedDisplay
+
+ @ListItem
+ @ParagraphItem
+ @ListInterruptItem
+ @ListNewPage
+ @DropListItem
+ @TagItem
+ @DropTagItem
+
+ @EndList
+ @RawEndList
+
+ @RawList
+ @RawLeftList
+ @RawIndentedList
+ @RawQuotedList
+ @RawCentredList @RawCenteredList
+ @RawNumberedList
+ @RawParenNumberedList
+ @RawRomanList
+ @RawParenRomanList
+ @RawUCRomanList
+ @RawParenUCRomanList
+ @RawAlphaList
+ @RawParenAlphaList
+ @RawUCAlphaList
+ @RawParenUCAlphaList
+ @RawBulletList
+ @RawStarList
+ @RawDashList
+ @RawTaggedList
+ @RawWideTaggedList
+ @RawVeryWideTaggedList
+
+ @List
+ @LeftList
+ @IndentedList
+ @QuotedList
+ @CentredList @CenteredList
+ @NumberedList
+ @ParenNumberedList
+ @RomanList
+ @ParenRomanList
+ @UCRomanList
+ @ParenUCRomanList
+ @AlphaList
+ @ParenAlphaList
+ @UCAlphaList
+ @ParenUCAlphaList
+ @BulletList
+ @StarList
+ @DashList
+ @TaggedList
+ @WideTaggedList
+ @VeryWideTaggedList
+
+
+###############################################################################
+# #
+# The @BasicSetup package. #
+# #
+###############################################################################
+
+def @BasicSetup
+ named @InitialFont { Times Base 12p } # initial font
+ named @InitialBreak { {adjust 1.20fx hyphen} @OrIfPlain
+ {ragged 1fx nohyphen} } # initial break
+ named @InitialOutdent { 2f @OrIfPlain 4s } # initial outdent
+ named @InitialSpace { lout } # initial space style
+ named @InitialLanguage{ English } # initial language
+ named @InitialColour { black } # initial colour
+ named @OptimizePages { No } # optimize page breaks?
+ named @HeadingFont { Bold } # font for @Heading
+ named @FixedWidthFont { Courier Base -1p } # font for @F
+ named @ParaGap { 1.3vx @OrIfPlain 1f } # gap between paragraphs
+ named @ParaIndent { 2.0f @OrIfPlain 5s } # first-line indent for @PP
+ named @DisplayGap { 1.0v @OrIfPlain 1f } # gap above, below displays
+ named @DisplayIndent { 2.0f @OrIfPlain 5s } # @IndentedDisplay indent
+ named @DefaultIndent { 0.5rt } # @Display indent
+ named @DisplayNumStyle
+ right num { (num) } # display number style
+ named @WideIndent { 4.0f @OrIfPlain 10s } # @WideTaggedList indent
+ named @VeryWideIndent { 8.0f @OrIfPlain 20s } # @VeryWideTaggedList indent
+ named @ListOuterGap { 1.0v @OrIfPlain 1f } # gap before, after list
+ named @ListGap { 1.0v @OrIfPlain 1f } # gap between list items
+ named @ListIndent { 0s } # indent of list items
+ named @ListRightIndent{ 0s } # right indent of list items
+ named @ListLabelWidth { 2.0f @OrIfPlain 5s } # width allowed for list tags
+ named @ListLabelRight { No } # right align label
+ named @ListLabelRightGap { 2s } # right align gap
+ named @ListFont { } # font style of list item
+ named @ListBreak { } # break style of list item
+ named @NumberSeparator{ . } # separates numbers like 2.3.7
+ import @BasicSetup
+ named @CrossLinkFormat
+ right @Body { @Body } # format for cross links
+ import @BasicSetup
+ named @ExternalLinkFormat
+ right @Body { @Body } # format for external links
+@Begin
+
+ ###########################################################################
+ # #
+ # x @Dft y #
+ # #
+ # This returns x unless its value is "dft", in which case it returns y. #
+ # Useful for defaulting the value of one parameter to another. #
+ # #
+ ###########################################################################
+
+ def @Dft
+ left x
+ right y
+ {
+ x @Case {
+ dft @Yield y
+ else @Yield x
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @Pipe, @PipeVerbatim, and @PipeRawVerbatim #
+ # #
+ ###########################################################################
+
+ def @Pipe
+ left command
+ right x
+ {
+ def @Filter { "cat" @FilterIn "|" command ">" @FilterOut }
+
+ x
+ }
+
+ def @PipeVerbatim
+ left command
+ right x
+ {
+ def @Filter {
+ "(echo @Verbatim @Begin ; (cat" @FilterIn "|" command "); echo @End @Verbatim ) >" @FilterOut }
+
+ x
+ }
+
+ def @PipeRawVerbatim
+ left command
+ right x
+ {
+ def @Filter {
+ "(echo @RawVerbatim @Begin ; (cat" @FilterIn "|" command "); echo @End @Verbatim ) >" @FilterOut }
+
+ x
+ }
+
+
+ ###########################################################################
+ # #
+ # @Sym, @Ding font symbols, and miscellaneous special characters. #
+ # #
+ ###########################################################################
+
+ def @Sym right x { { Symbol Base } @Font @Char x }
+ def @Ding right x { { Dingbats Base } @Font @Char x }
+
+ def @R right x { Base @Font x }
+ def @I right x { Slope @Font x }
+ def @B right x { Bold @Font x }
+ def @BI right x { BoldSlope @Font x }
+ def @S right x { smallcaps @Font x }
+ def @F right x { @FixedWidthFont @Font x }
+
+ def @II
+ right x
+ {
+ { @CurrFace @Case {
+ Bold @Yield BoldSlope
+ else @Yield Slope
+ } } @Font x
+ }
+
+ def "~" left x right y { x &1su y }
+ def "~~" left x right y { x &2s y }
+
+ def "``" { @Char "quotedblleft" @OrIfPlain "``" }
+ def "''" { @Char "quotedblright" @OrIfPlain "''" }
+ def ",," { @Char "quotedblbase" @OrIfPlain ",," }
+ def "--" { @Char "endash" @OrIfPlain "--" }
+ def "---" { @Char "emdash" @OrIfPlain "---"}
+ def "..." { @Char "ellipsis" @OrIfPlain "..."}
+ def @Bullet { @Char "bullet" @OrIfPlain "o" }
+ def @ParSym { @Char "paragraph" @OrIfPlain "P" }
+ def @SectSym { @Char "section" @OrIfPlain "$" }
+ def @Dagger { @Char "dagger" @OrIfPlain "+" }
+ def @DaggerDbl { @Char "daggerdbl" @OrIfPlain "++" }
+ def @CDot { @Char "periodcentered" @OrIfPlain "." }
+ def @Sterling { @Char "sterling" @OrIfPlain "&" }
+ def @Yen { @Char "yen" @OrIfPlain "Y" }
+ def @Florin { @Char "florin" @OrIfPlain "f" }
+
+ def @Star { @Sym "asteriskmath" @OrIfPlain "*" }
+ def @Degree { @Sym "degree" @OrIfPlain "o" }
+ def @Minute { @Sym "minute" @OrIfPlain "'" }
+ def @Second { @Sym "second" @OrIfPlain "''" }
+ def @Multiply { @Sym "multiply" @OrIfPlain "x" }
+ def @Divide { @Sym "divide" @OrIfPlain "/" }
+ def @Lozenge { @Sym "lozenge" @OrIfPlain "O" }
+ def @Register { @Sym "registersans" @OrIfPlain "R" }
+ def @CopyRight { @Sym "copyrightsans" @OrIfPlain "C" }
+ def @TradeMark { @Sym "trademarksans" @OrIfPlain "TM" }
+
+ def @Euro
+ {
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ 0.65w @VShift @VContract @HContract
+ "xsize ysize ysize 0.07 mul louteuro" @Graphic {
+ 0.7f @High 0.735f @Wide
+ }
+ }
+
+ PDF @Yield { EUR }
+
+ PlainText @Yield { EUR }
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # Symbols stored in the "standard" database #
+ # #
+ # @Word language-spacific words such as Chapter, etc. #
+ # @Roman lower case Roman numerals i, ii, ... , cc #
+ # @UCRoman upper case Roman numerals I, II, ... , CC #
+ # @Alpha lower case Roman alphabet a, b, ... , z #
+ # @UCAlpha upper case Roman alphabet A, B, ... , Z #
+ # @FnBullets bullets as footnote markers #
+ # @FnSymbols traditional footnote symbols asterisk, dagger, etc. #
+ # @Months months of the year: January, ... , December #
+ # @ShortMonths months of the year, abbreviated: Jan, ..., Dec #
+ # @WeekDays days of the week: Sunday, ... , Saturday #
+ # @ShortWeekDays days of the week, abbreviated: Sun, ... , Sat #
+ # @TwelveHours hours, from 1 to 12 #
+ # @ShortHours hours, from 0 to 23 #
+ # @DateTimeFormat format of results of @Date and @Time #
+ # #
+ ###########################################################################
+
+ def @Word left @Tag right @Val { @Val }
+ def @Roman left @Tag right @Val { @Val }
+ def @UCRoman left @Tag right @Val { @Val }
+ def @Alpha left @Tag right @Val { @Val }
+ def @UCAlpha left @Tag right @Val { @Val }
+ def @FnBullets left @Tag right @Val { @Val }
+ def @FnSymbols left @Tag right @Val { @Val }
+ def @Months left @Tag right @Val { @Val }
+ def @ShortMonths left @Tag right @Val { @Val }
+ def @WeekDays left @Tag right @Val { @Val }
+ def @ShortWeekDays left @Tag right @Val { @Val }
+ def @TwelveHours left @Tag right @Val { @Val }
+ def @ShortHours left @Tag right @Val { @Val }
+ def @MeriDiems left @Tag right @Val { @Val }
+ def @ShortMeriDiems left @Tag right @Val { @Val }
+
+ export @Value
+ def @DateTimeFormat left @Tag
+ named @Value
+ named @Year {}
+ named @ShortYear {}
+ named @Month {}
+ named @ShortMonth {}
+ named @MonthNum {}
+ named @Day {}
+ named @ShortDay {}
+ named @DayNum {}
+ named @MeriDiem {}
+ named @ShortMeriDiem {}
+ named @Hour {}
+ named @TwelveHour {}
+ named @ShortHour {}
+ named @Minute {}
+ named @Second {}
+ {}
+ {}
+
+ @SysDatabase @Word @Roman @UCRoman @Alpha @UCAlpha @FnBullets @FnSymbols
+ @Months @ShortMonths @WeekDays @ShortWeekDays @TwelveHours
+ @ShortHours @MeriDiems @ShortMeriDiems @DateTimeFormat
+ { standard }
+
+
+ ###########################################################################
+ # #
+ # @Date and @Time: the date and time now. #
+ # #
+ ###########################################################################
+
+ def @Date
+ named @Format
+ named @Year { @Moment&&now @Open { {@Century}@Year }}
+ named @ShortYear { @Moment&&now @Open { @Year }}
+ named @Month { @Moment&&now @Open { @Months&&@Month }}
+ named @ShortMonth { @Moment&&now @Open { @ShortMonths&&@Month }}
+ named @MonthNum { @Moment&&now @Open { @Month }}
+ named @Day { @Moment&&now @Open { @WeekDays&&@WeekDay }}
+ named @ShortDay { @Moment&&now @Open { @ShortWeekDays&&@WeekDay}}
+ named @DayNum { @Moment&&now @Open { @Day }}
+ named @MeriDiem { @Moment&&now @Open { @MeriDiems&&@Hour }}
+ named @ShortMeriDiem{ @Moment&&now @Open { @ShortMeriDiems&&@Hour }}
+ named @Hour { @Moment&&now @Open { @Hour }}
+ named @TwelveHour { @Moment&&now @Open { @TwelveHours&&@Hour }}
+ named @ShortHour { @Moment&&now @Open { @ShortHours&&@Hour }}
+ named @Minute { @Moment&&now @Open { @Minute }}
+ named @Second { @Moment&&now @Open { @Second }}
+ {
+ @DateTimeFormat&&date @Open { @Value
+ @Year { @Year }
+ @ShortYear { @ShortYear }
+ @Month { @Month }
+ @ShortMonth { @ShortMonth }
+ @MonthNum { @MonthNum }
+ @Day { @Day }
+ @ShortDay { @ShortDay }
+ @DayNum { @DayNum }
+ @MeriDiem { @MeriDiem }
+ @ShortMeriDiem { @ShortMeriDiem }
+ @Hour { @Hour }
+ @TwelveHour { @TwelveHour }
+ @ShortHour { @ShortHour }
+ @Minute { @Minute }
+ @Second { @Second }
+ }
+ }
+ { @Format }
+
+ def @Time
+ named @Format
+ named @Year { @Moment&&now @Open { {@Century}@Year }}
+ named @ShortYear { @Moment&&now @Open { @Year }}
+ named @Month { @Moment&&now @Open { @Months&&@Month }}
+ named @ShortMonth { @Moment&&now @Open { @ShortMonths&&@Month }}
+ named @MonthNum { @Moment&&now @Open { @Month }}
+ named @Day { @Moment&&now @Open { @WeekDays&&@WeekDay }}
+ named @ShortDay { @Moment&&now @Open { @ShortWeekDays&&@WeekDay}}
+ named @DayNum { @Moment&&now @Open { @Day }}
+ named @MeriDiem { @Moment&&now @Open { @MeriDiems&&@Hour }}
+ named @ShortMeriDiem{ @Moment&&now @Open { @ShortMeriDiems&&@Hour }}
+ named @Hour { @Moment&&now @Open { @Hour }}
+ named @TwelveHour { @Moment&&now @Open { @TwelveHours&&@Hour }}
+ named @ShortHour { @Moment&&now @Open { @ShortHours&&@Hour }}
+ named @Minute { @Moment&&now @Open { @Minute }}
+ named @Second { @Moment&&now @Open { @Second }}
+ {
+ @DateTimeFormat&&time @Open { @Value
+ @Year { @Year }
+ @ShortYear { @ShortYear }
+ @Month { @Month }
+ @ShortMonth { @ShortMonth }
+ @MonthNum { @MonthNum }
+ @Day { @Day }
+ @ShortDay { @ShortDay }
+ @DayNum { @DayNum }
+ @MeriDiem { @MeriDiem }
+ @ShortMeriDiem { @ShortMeriDiem }
+ @Hour { @Hour }
+ @TwelveHour { @TwelveHour }
+ @ShortHour { @ShortHour }
+ @Minute { @Minute }
+ @Second { @Second }
+ }
+ }
+ { @Format }
+
+
+ ###########################################################################
+ # #
+ # @DropCapTwo and @DropCapThree #
+ # #
+ ###########################################################################
+
+ def @DropCapTwo
+ left y
+ named height { 1.5v }
+ right x
+ {
+ def @ParPlace { @Galley }
+ def @EndParPlace { @Galley }
+
+ def @LineList
+ {
+ @PAdjust @ParPlace
+ //1vx @LineList
+ }
+
+ def @ParGalley horizontally into { @ParPlace&&preceding }
+ right x
+ {
+ x
+ }
+
+ def @EndPar force into { @EndParPlace&&following } { @Null }
+
+ def @Cap
+ {
+ -0.25f @VShift 1.0w @VShift {
+ -90d @Rotate height @Wide @Scale 90d @Rotate y
+ }
+ }
+
+ |1s @PAdjust @ParPlace
+ /1vo @Cap @ParGalley {x & @EndPar &1rt } | @PAdjust @ParPlace
+ //1vx @LineList
+ // @EndParPlace
+ }
+
+ def @DropCapThree
+ left y
+ named height { 2.5v }
+ right x
+ {
+ def @ParPlace { @Galley }
+ def @EndParPlace { @Galley }
+
+ def @LineList
+ {
+ @PAdjust @ParPlace
+ //1vx @LineList
+ }
+
+ def @ParGalley force horizontally into { @ParPlace&&preceding }
+ right x
+ {
+ x
+ }
+
+ def @EndPar force into { @EndParPlace&&following } { @Null }
+
+ def @Cap
+ {
+ -0.25f @VShift 1.0w @VShift {
+ -90d @Rotate height @Wide @Scale 90d @Rotate y
+ }
+ }
+
+ |1s @PAdjust @ParPlace
+ /1vo @ParGalley { x & @EndPar &1rt } | @PAdjust @ParPlace
+ /1vo @Cap | @PAdjust @ParPlace
+ //1vx @LineList
+ // @EndParPlace
+ }
+
+
+ ###########################################################################
+ # #
+ # @Centre, @Center, @Right, @NoDotSep, @NoDotJoin, @DotSep, #
+ # @ColonSep, @DotJoin, @DashJoin, @NumSep #
+ # #
+ ###########################################################################
+
+ macro @Centre @Center { |0.5rt @HContract }
+
+ def @Right
+ precedence 50
+ left x
+ right y
+ { x |1.0rt @OneCol { 2f @Wide {} | y } }
+
+ def @NoDotSep left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x |2s y }
+ }
+ }
+ }
+ }
+
+ def @NoDotJoin left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x{y} }
+ }
+ }
+ }
+ }
+
+ def @DotSep left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x. |2s y }
+ }
+ }
+ }
+ }
+
+ def @ColonSep left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x: |2s y }
+ }
+ }
+ }
+ }
+
+ def @DotJoin left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x.y }
+ }
+ }
+ }
+ }
+
+ def @DashJoin left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x--y }
+ }
+ }
+ }
+ }
+
+ def @NumSep left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield {
+ @CurrLang @Case {
+ Hungarian @Yield { y. x }
+ else @Yield { x y }
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @VStrut, @ZeroWidth, @ZeroHeight #
+ # #
+ ###########################################################################
+
+
+ def @VStrut
+ named above { 0.5f }
+ named below { 0.5f }
+ right x
+ {
+ x &0iu @VContract { above @High ^/ below @High }
+ }
+
+
+ def @ZeroWidth right x { @HContract { |0io x |0io } }
+
+ def @ZeroHeight right x { @VContract { /0io x /0io } }
+
+
+ ###########################################################################
+ # #
+ # @OverStrike, @Sup and @Sub #
+ # #
+ ###########################################################################
+
+ def @OverStrike left x right y
+ {
+ @OneRow { @HContract @VContract x /0io @HContract @VContract y }
+ }
+
+ def @Sup
+ left x
+ named gap { 0.40fk }
+ right y
+ {
+ @HContract @VContract
+ {
+ | 0.7f @Font y ^/gap x
+ }
+ }
+
+ def @Sub
+ left x
+ named gap { 0.40fk }
+ right y
+ {
+ @HContract @VContract
+ {
+ x /gap | 0.7f @Font y
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @HClip and @VClip #
+ # #
+ ###########################################################################
+
+ def @HClip
+ named shift { 0.0 }
+ right x
+ {
+ { "newpath 0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto"
+ "closepath clip gsave" // "grestore" } @Graphic
+ {
+ |{{shift}"rt"} @ZeroWidth {{shift}"w"} @HShift x |
+ }
+ }
+
+ def @VClip
+ named shift { 0.0 }
+ right x
+ {
+ { "newpath 0 0 moveto xsize 0 lineto xsize ysize lineto 0 ysize lineto"
+ "closepath clip gsave" // "grestore" } @Graphic
+ {
+ /{{shift}"rt"} @ZeroHeight {{shift}"w"} @VShift x /
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @AddPaint, @StrokeCommand #
+ # #
+ ###########################################################################
+
+ def @AddPaint
+ left col
+ right texture
+ {
+ col @Case {
+ none @Yield ""
+ nochange @Yield {
+ @BackEnd @Case {
+ PostScript @Yield { "gsave" texture "fill grestore" }
+ PDF @Yield { "q f Q" }
+ PlainText @Yield { "" }
+ }
+ }
+ else @Yield {
+ @BackEnd @Case {
+ PostScript @Yield {"gsave" @ColourCommand col texture "fill grestore"}
+ PDF @Yield { "q" @ColourCommand col "f Q" }
+ PlainText @Yield { "" }
+ }
+ }
+ }
+ }
+
+ def @StrokeCommand right linewidth
+ {
+ @BackEnd @Case {
+ PostScript @Yield {
+ linewidth @Case {
+ "" @Yield { "stroke" }
+ none @Yield { }
+ else @Yield { linewidth "setlinewidth stroke" }
+ }
+ }
+ PDF @Yield {
+ linewidth @Case {
+ "" @Yield { "S" }
+ none @Yield { }
+ else @Yield { linewidth "w S" }
+ }
+ }
+ else @Yield ""
+ }
+ }
+
+
+
+ ###########################################################################
+ # #
+ # @FullWidthRule, @Box, @CurveBox, and @ShadowBox #
+ # #
+ ###########################################################################
+
+ def @FullWidthRule
+ import @PSLengths named linewidth {}
+ {
+ @BackEnd @Case {
+
+ PostScript @Yield @HExpand {
+ { "LoutRule" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ }
+
+ PDF @Yield @HExpand {
+ { "0 0 m __xsize 0 l" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ }
+
+ PlainText @Yield { "-" @PlainGraphic 1f @High }
+ }
+ }
+
+ def @LocalWidthRule
+ import @PSLengths named linewidth {}
+ {
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ { "LoutRule" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ }
+
+ PDF @Yield {
+ { "0 0 m __xsize 0 l" @StrokeCommand linewidth } @Graphic { 0.5p @High }
+ }
+
+ PlainText @Yield { "-" @PlainGraphic 1f @High }
+ }
+ }
+
+ def @Box
+ named margin { 0.3f }
+ import @PSLengths named linewidth {}
+ named paint { none }
+ import @TextureImport named texture {}
+ right x
+ {
+ @BackEnd @Case {
+
+ PostScript @Yield @VContract @HContract 0c @HShift {
+ {"LoutBox" paint @AddPaint texture @StrokeCommand linewidth }
+ @Graphic
+ { ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ }
+
+ PDF @Yield @VContract @HContract 0c @HShift {
+ { "0 0 m __xsize 0 l __xsize __ysize l 0 __ysize l h"
+ paint @AddPaint texture @StrokeCommand linewidth } @Graphic
+ { ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ }
+
+ PlainText @Yield @VContract @HContract 0c @HShift {
+ ^/margin ^|margin 0c @HShift @OneRow x |margin /margin
+ }
+ }
+ }
+
+ def @CurveBox
+ named margin { 0.3f }
+ import @PSLengths named linewidth {}
+ named paint { none }
+ import @TextureImport named texture {}
+ right x
+ {
+ def @PDFStuff
+ {
+ "__xmark 0 m"
+ "__sub(__xsize, __xmark) 0 l"
+ "__sub(__xsize, __div(__mul(11, __xmark), 24)) 0"
+ "__xsize __div(__mul(11, __xmark), 24)"
+ "__xsize __xmark c"
+ "__xsize __sub(__ysize, __xmark) l"
+ "__xsize __sub(__ysize, __div(__mul(11, __xmark), 24))"
+ "__sub(__xsize, __div(__mul(11, __xmark), 24)) __ysize"
+ "__sub(__xsize, __xmark) __ysize c"
+ "__xmark __ysize l"
+ "__div(__mul(11, __xmark), 24) __ysize"
+ "0 __sub(__ysize, __div(__mul(11, __xmark), 24))"
+ "0 __sub(__ysize, __xmark) c"
+ "0 __xmark l"
+ "0 __div(__mul(11, __xmark), 24)"
+ "__div(__mul(11, __xmark), 24) 0"
+ "__xmark 0 c"
+ "h"
+ paint @AddPaint texture @StrokeCommand linewidth
+ }
+
+ @VContract @HContract 0c @HShift @BackEnd @Case {
+
+ PostScript @Yield {
+ {"LoutCurveBox" paint @AddPaint texture @StrokeCommand linewidth }
+ @Graphic
+ { ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ }
+
+ PlainText @Yield {
+ ^/margin ^|margin 0c @HShift @OneRow x |margin /margin
+ }
+
+ PDF @Yield {
+ @PDFStuff @Graphic
+ { ^/margin ^|margin 0c @HShift @OneRow x |margin /margin }
+ }
+ }
+ }
+
+ def @ShadowBox
+ named margin { 0.3f }
+ import @PSLengths named linewidth {}
+ named paint { none }
+ import @TextureImport named texture {}
+ named shadow { 0.2f }
+ right x
+ {
+ @VContract @HContract 0c @HShift @BackEnd @Case {
+
+ PostScript @Yield {
+ "LoutShadowBox fill" @Graphic
+ { ^/shadow ^|shadow 0c @HShift
+ @Box
+ margin {margin}
+ paint {paint}
+ texture { texture }
+ linewidth {linewidth} x
+ |shadow /shadow
+ }
+ }
+
+ PlainText @Yield {
+ ^/shadow ^|shadow 0c @HShift
+ @Box
+ margin { margin }
+ paint { paint }
+ texture { texture }
+ linewidth {linewidth} x
+ |shadow /shadow
+ }
+
+ PDF @Yield {
+ {
+ "__mul(__xmark, 2) 0 m __xsize 0 l"
+ "__xsize __sub(__ysize, __mul(__xmark, 2)) l"
+ "__sub(__xsize, __xmark) __sub(__ysize, __mul(__xmark, 2)) l"
+ "__sub(__xsize, __xmark) __xmark l"
+ "__mul(__xmark, 2) __xmark l h f"
+ }
+ @Graphic
+ { ^/shadow ^|shadow 0c @HShift
+ @Box
+ margin { margin }
+ paint { paint }
+ texture { texture }
+ linewidth { linewidth } x
+ |shadow /shadow
+ }
+ }
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @BoundaryMarks #
+ # #
+ ###########################################################################
+
+ def @BoundaryMarks
+ import @PSLengths named linewidth { 0.2p }
+ import @PSLengths named length { 0.5c }
+ import @PSLengths named gap { 0.5c }
+ import @PSLengths named lout { 0c }
+ import @PSLengths named rout { 0c }
+ import @PSLengths named uout { 0c }
+ import @PSLengths named dout { 0c }
+ {
+ def @UpStroke { "0" gap "rmoveto" "0" length "rlineto" }
+ def @DownStroke { "0" gap "neg" "rmoveto" "0" length "neg rlineto" }
+ def @LeftStroke { gap "neg" "0" "rmoveto" length "neg" "0 rlineto" }
+ def @RightStroke { gap "0" "rmoveto" length "0 rlineto" }
+
+ def @LLSpot { lout "neg" dout "neg" moveto }
+ def @LRSpot { xsize rout "add" dout "neg" moveto }
+ def @ULSpot { lout "neg" ysize uout "add" moveto }
+ def @URSpot { xsize rout "add" ysize uout "add" moveto }
+
+ def @PDFStuff {
+ "__sub(-"gap", "lout") __sub(0, "dout") m "
+ "__sub(__sub(-"gap", "lout"), "length") __sub(0, "dout") l"
+ "__sub(0, "lout") __sub(-"gap", "dout") m "
+ "__sub(0, "lout") __sub(__sub(-"gap", "dout"), "length") l"
+ "__add(__xsize,"rout") __sub(-"gap", "dout") m "
+ "__add(__xsize,"rout") __sub(__sub(-"gap", "dout"), "length") l"
+ "__add(__add(__xsize,"rout"),"gap") __sub(0, "dout") m "
+ "__add(__add(__add(__xsize,"rout"),"gap"),"length") __sub(0, "dout") l"
+ " __sub(__sub(0, "lout"), "gap") __add(__ysize, "uout") m "
+ "__sub(__sub(__sub(0, "lout"), "gap"), "length") __add(__ysize, "uout") l"
+ "__sub(0, "lout") __add(__add(__ysize, "uout"), "gap") m "
+ "__sub(0, "lout") __add(__add(__add(__ysize, "uout"), "gap"), "length") l"
+ " __add(__add(__xsize, "rout"), "gap") __add(__ysize, "uout") m "
+ "__add(__add(__add(__xsize, "rout"), "gap"), "length") __add(__ysize, "uout") l"
+ "__add(__xsize, "rout") __add(__add(__ysize, "uout"), "gap") m "
+ "__add(__xsize, "rout") __add(__add(__add(__ysize, "uout"), "gap"), "length") l"
+
+ linewidth "w S"
+ }
+
+ @BackEnd @Case {
+
+ PostScript @Yield {
+ {
+ @LLSpot @LeftStroke
+ @LLSpot @DownStroke
+ @LRSpot @DownStroke
+ @LRSpot @RightStroke
+ @ULSpot @LeftStroke
+ @ULSpot @UpStroke
+ @URSpot @RightStroke
+ @URSpot @UpStroke
+
+ linewidth "setlinewidth stroke"
+ } @Graphic {}
+ }
+
+ PlainText @Yield ""
+
+ PDF @Yield { @PDFStuff @Graphic {} }
+ }
+ }
+
+ ##########################################################################
+ # #
+ # @NumberMarker, @NumberOf, @TitleMarker, @TitleOf, #
+ # @PageMark, @PageOf, @CrossLink, @ExternalLink #
+ # #
+ # NB the default value ?? is desperately important for unsorted #
+ # reference lists numbered by first appearance (@NumberOf @Tag), #
+ # because it is the special sort key value that prevents merging, #
+ # hence allowing all the references to be printed even though #
+ # their sort keys are all ?? initially. #
+ # #
+ ##########################################################################
+
+ export @Tag @Value
+ def @NumberMarker
+ named @Tag {}
+ named @Value { "??" }
+ {
+ @Null
+ }
+
+ def @NumberOf
+ right tag
+ {
+ @NumberMarker&&tag @Open { @Value }
+ }
+
+
+ export @Tag @Value
+ def @TitleMarker
+ named @Tag {}
+ named @Value { "??" }
+ {
+ @Null
+ }
+
+ def @TitleOf
+ right tag
+ {
+ @TitleMarker&&tag @Open { @Value }
+ }
+
+
+ export num rawnum @Tag
+ def @PageMarker
+ named @Tag {}
+ named num {}
+ named rawnum {}
+ {
+ @PageLabel num
+ }
+
+ def @PageMark
+ right tag
+ {
+ tag @LinkDest @Null & @PageMarker&&preceding @Tagged tag
+ }
+
+ def @NoLinkPageMark
+ right tag
+ {
+ @PageMarker&&preceding @Tagged tag
+ }
+
+ def @PageOf
+ right tag
+ {
+ @PageMarker&&tag @Open { num }
+ }
+
+ def @CrossLink
+ left tag
+ named @Format right @Body { @CrossLinkFormat @Body }
+ right obj
+ {
+ @HContract @VContract {
+ tag @LinkSource @Format obj
+ }
+ }
+
+ def @ExternalLink
+ left tag
+ named @Format right @Body { @ExternalLinkFormat @Body }
+ right obj
+ {
+ @HContract @VContract {
+ tag @URLLink @Format obj
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # @Join and @Sep #
+ # #
+ # Join two objects together with @NumberSeparator, unless one is #
+ # empty in which case just return the other. #
+ # #
+ ###########################################################################
+
+ def @Join left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x{@NumberSeparator}y }
+ }
+ }
+ }
+ }
+
+ def @Sep left x right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield {
+ y @Case {
+ {} @Yield x
+ else @Yield { x{@NumberSeparator} |2s y }
+ }
+ }
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # Miscellaneous. #
+ # #
+ ###########################################################################
+
+ def @Heading right x { ragged @Break @HeadingFont @Font x }
+ def "^" { {} ^& {} }
+ def "&-" left x right y { x &0ch y }
+
+
+ ###########################################################################
+ # #
+ # @If @Not @And @Or @True #
+ # #
+ # Used in databases to make optional fields format nicely. #
+ # #
+ ###########################################################################
+
+ def @If
+ precedence 97
+ left x
+ right y
+ {
+ y @Case {
+ {} @Yield @Null
+ else @Yield { @Null{x} }
+ }
+ }
+
+ def @Not
+ precedence 100
+ right y
+ {
+ y @Case {
+ {} @Yield "*"
+ else @Yield ""
+ }
+ }
+
+ def @And
+ precedence 99
+ left x
+ right y
+ {
+ x @Case {
+ {} @Yield {}
+ else @Yield y
+ }
+ }
+
+ def @Or
+ precedence 98
+ left x
+ right y
+ {
+ x @Case {
+ {} @Yield y
+ else @Yield x
+ }
+ }
+
+ def @True { "*" }
+
+
+ ###########################################################################
+ # #
+ # Paragraphs. #
+ # #
+ ###########################################################################
+
+ macro @PP { //@ParaGap @ParaIndent @Wide &{0i} }
+ macro @LP { //{@ParaGap} }
+ macro @LLP { //{1vx} }
+ macro @DP { //{@DisplayGap} }
+ macro @LOP { //{@ListOuterGap} }
+ macro @NP { //{1.1b} }
+ macro @CNP { // 3.2v @High //0io //{} }
+
+
+ ###########################################################################
+ # #
+ # Beginning and ending of aligned displays. #
+ # #
+ ###########################################################################
+
+ def @APlace { @Galley }
+ def @EndAlignedPlace { @Galley }
+ def @AlignedPlace { @Galley }
+
+ def @BAligned into { @APlace&&preceding }
+ {
+ def @AlignedList { @AlignedPlace /1.1b @AlignedList }
+
+ //1.1b @AlignedList
+ // @EndAlignedPlace
+ }
+
+ macro @BAD @BeginAlignedDisplays { // @APlace | @BAligned }
+ def @EAD @EndAlignedDisplays force into { @EndAlignedPlace&&preceding } {}
+
+
+ ###########################################################################
+ # #
+ # New code for numbered displays that will cross section boundaries #
+ # #
+ ###########################################################################
+
+ export @Tag val
+ def @NumDispCounterMarker
+ named @Tag {}
+ named val {}
+ {
+ @Null
+ }
+
+ def @NumDispNum right tag
+ {
+ @NumDispCounterMarker&&tag @Open { @Next val }
+ }
+
+ def @NumDispCounterIncrement
+ named @BypassNumber { "dft" }
+ right tag
+ {
+ def @DisplayNumber
+ {
+ @BypassNumber @Dft { @NumDispNum tag }
+ }
+
+ @NumDispCounterMarker&&preceding @Tagged tag
+ # @NumDispCounterMarker val { @NumDispNum tag }
+ # @NumberMarker @Tag { tag } @Value { @NumDispNum tag }
+ @NumDispCounterMarker val { @DisplayNumber }
+ @NumberMarker @Tag { tag } @Value { @DisplayNumber }
+ }
+
+ def @NN
+ {
+ @NumDispCounterMarker&&preceding @Open { @DisplayNumStyle val }
+ }
+
+ def @Do
+ left x
+ right y
+ {
+ x @Case {
+ { No None } @Yield @Null
+ else @Yield y
+ }
+ }
+
+ def @BeginDisplayCounter
+ left condition
+ right prefix
+ {
+ condition @Do @NumDispCounterMarker val { prefix @Join 0 }
+ }
+
+
+ ###########################################################################
+ # #
+ # Galleys that carry displays to their places. #
+ # #
+ ###########################################################################
+
+ def @DispPlace { @Galley }
+
+ def @Disp into { @DispPlace&&preceding }
+ right x
+ {
+ x
+ }
+
+ def @NDisp into { @DispPlace&&preceding }
+ named @Tag {}
+ named @BypassNumber { "dft" }
+ right x
+ {
+ @OneRow {
+ @NumDispCounterIncrement @Tag
+ # @NumDispCounterIncrement @BypassNumber { @BypassNumber } @Tag
+ @PageMark @Tag
+ ^//
+ @OneRow x
+ }
+ }
+
+ def @ADisp into { @AlignedPlace&&preceding }
+ right x
+ {
+ x
+ }
+
+ def @ANDisp into { @AlignedPlace&&preceding }
+ named @Tag {}
+ named @BypassNumber { "dft" }
+ right x
+ {
+ @OneRow {
+ @NumDispCounterIncrement @Tag
+ # @NumDispCounterIncrement @BypassNumber { @BypassNumber } @Tag
+ @PageMark @Tag
+ ^/
+ @OneRow x
+ }
+ }
+
+
+ ###########################################################################
+ # #
+ # Displays and raw displays. #
+ # #
+ ###########################################################################
+
+ macro @G { |@DefaultIndent }
+ macro @LG { | }
+ macro @IG { |@DisplayIndent }
+ macro @CG { |0.5rt }
+ macro @RG { |1.0rt }
+ macro @QR { @DisplayIndent @Wide { |1rt @NN } }
+ macro @DX { @DispPlace }
+ macro @DY { @Disp }
+ macro @AX { @APlace }
+ macro @AY { @ADisp }
+ macro @NY { @NDisp }
+ macro @MY { @ANDisp }
+
+ macro @D @Display { @DP @G @DX | @DP // @DY }
+ macro @LD @LeftDisplay { @DP @LG @DX | @DP // @DY }
+ macro @ID @IndentedDisplay { @DP @IG @DX | @DP // @DY }
+ macro @QD @QuotedDisplay { @DP @IG @DX @IG @DP // @DY }
+ macro @CD @CentredDisplay
+ @CenteredDisplay { @DP @CG @DX | @DP // @DY }
+ macro @RightDisplay { @DP @RG @DX | @DP // @DY }
+
+
+ macro @AD @AlignedDisplay { @DP @G @AX | @DP // @AY }
+ macro @LAD @LeftAlignedDisplay { @DP @LG @AX | @DP // @AY }
+ macro @IAD @IndentedAlignedDisplay { @DP @IG @AX | @DP // @AY }
+ macro @QAD @QuotedAlignedDisplay { @DP @IG @AX @IG @DP // @AY }
+ macro @CAD @CentredAlignedDisplay
+ @CenteredAlignedDisplay { @DP @CG @AX | @DP // @AY }
+ macro @RightAlignedDisplay { @DP @RG @AX | @DP // @AY }
+
+ macro @ND @NumberedDisplay { @DP @G @DX |1rt @NN @DP // @NY }
+ macro @LND @LeftNumberedDisplay { @DP @LG @DX |1rt @NN @DP // @NY }
+ macro @IND @IndentedNumberedDisplay { @DP @IG @DX |1rt @NN @DP // @NY }
+ macro @QND @QuotedNumberedDisplay { @DP @IG @DX |1rt @QR @DP // @NY }
+ macro @CND @CentredNumberedDisplay
+ @CenteredNumberedDisplay { @DP @CG @DX |1rt @NN @DP // @NY }
+ macro @RightNumberedDisplay { @DP @RG @DX |1rt @NN @DP // @NY }
+
+ macro @AND @AlignedNumberedDisplay { @DP @G @AX |1rt @NN @DP // @MY }
+ macro @LAND @LeftAlignedNumberedDisplay { @DP @LG @AX |1rt @NN @DP // @MY }
+ macro @IAND @IndentedAlignedNumberedDisplay{ @DP @IG @AX |1rt @NN @DP // @MY }
+ macro @QAND @QuotedAlignedNumberedDisplay { @DP @IG @AX |1rt @QR @DP // @MY }
+ macro @CAND @CentredAlignedNumberedDisplay
+ @CenteredAlignedNumberedDisplay{ @DP @CG @AX |1rt @NN @DP // @MY }
+ macro @RightAlignedNumberedDisplay { @DP @RG @AX |1rt @NN @DP // @MY }
+
+
+ macro @RD @RawDisplay { @G @DX | // @DY }
+ macro @RLD @RawLeftDisplay { @LG @DX | // @DY }
+ macro @RID @RawIndentedDisplay { @IG @DX | // @DY }
+ macro @RQD @RawQuotedDisplay { @IG @DX @IG | // @DY }
+ macro @RCD @RawCentredDisplay
+ @RawCenteredDisplay { @CG @DX | | // @DY }
+ macro @RRD @RawRightDisplay { @RG @DX | // @DY }
+
+
+ macro @RAD @RawAlignedDisplay { @G @AX | // @AY }
+ macro @RLAD @RawLeftAlignedDisplay { @LG @AX | // @AY }
+ macro @RIAD @RawIndentedAlignedDisplay { @IG @AX | // @AY }
+ macro @RQAD @RawQuotedAlignedDisplay { @IG @AX @IG | // @AY }
+ macro @RCAD @RawCentredAlignedDisplay
+ @RawCenteredAlignedDisplay { @CG @AX | // @AY }
+ macro @RRAD @RawRightAlignedDisplay { @RG @AX | // @AY }
+
+ macro @RND @RawNumberedDisplay { @G @DX |1rt @NN // @NY }
+ macro @RLND @RawLeftNumberedDisplay { @LG @DX |1rt @NN // @NY }
+ macro @RIND @RawIndentedNumberedDisplay { @IG @DX |1rt @NN // @NY }
+ macro @RQND @RawQuotedNumberedDisplay { @IG @DX |1rt @QR // @NY }
+ macro @RCND @RawCentredNumberedDisplay
+ @RawCenteredNumberedDisplay { @CG @DX |1rt @NN // @NY }
+ macro @RRND @RawRightNumberedDisplay { @RG @DX |1rt @NN // @NY }
+
+ macro @RAND @RawAlignedNumberedDisplay { @G @AX |1rt @NN // @MY }
+ macro @RLAND @RawLeftAlignedNumberedDisplay { @LG @AX |1rt @NN // @MY }
+ macro @RIAND @RawIndentedAlignedNumberedDisplay { @IG @AX |1rt @NN // @MY }
+ macro @RQAND @RawQuotedAlignedNumberedDisplay { @IG @AX |1rt @QR // @MY }
+ macro @RCAND @RawCentredAlignedNumberedDisplay
+ @RawCenteredAlignedNumberedDisplay { @CG @AX |1rt @NN // @MY }
+ macro @RRAND @RawRightAlignedNumberedDisplay{ @RG @AX |1rt @NN // @MY }
+
+
+ ###########################################################################
+ # #
+ # Lists and raw lists. #
+ # #
+ ###########################################################################
+
+
+ def @ItemPlace { @Galley }
+ def @ParagraphItemPlace { @Galley }
+ def @InterruptItemPlace { @Galley }
+ def @NewPageItemPlace { @Galley }
+ def @TagPlace { @Galley }
+ def @EndListPlace { @Galley }
+
+ def @RawList
+ named style right num { num }
+ named type right num { num }
+ named gap { @ListGap }
+ named indent { @ListIndent }
+ named itemindent { 0c }
+ named rightindent { @ListRightIndent }
+ named labelwidth { @ListLabelWidth }
+ named labelright { @ListLabelRight }
+ named labelrightgap { @ListLabelRightGap }
+ named start { 1 }
+ named font { @ListFont }
+ named break { @ListBreak }
+ named colnum { 1 }
+ named colgap { 1.0c }
+ named colheight { 5.0c }
+ {
+ def @MakeList right num
+ {
+ def @NormalItem
+ {
+ def @Align right x
+ {
+ labelright @Case {
+ { Yes yes } @Yield { labelwidth @Wide { |1rt @OneCol { x |labelrightgap } } }
+ else @Yield x
+ }
+ }
+
+ |indent
+ labelwidth @Wide {
+ # @NumberMarker @Value {style num} {style num} &0io
+ # @NumberMarker @Value {num} {style type num} &0io
+ @NumberMarker @Value {type num} {@Align style type num} &0io
+ }
+ |itemindent break @Break font @Font @ItemPlace |rightindent
+ //gap @MakeList @NotRevealed @Next num
+ }
+
+ def @ParagraphItem
+ {
+ @NumberMarker @Value {num} {style type num} &0io
+ |indent break @Break font @Font @ParagraphItemPlace |rightindent
+ //gap @MakeList @NotRevealed @Next num
+ }
+
+ def @InterruptItem
+ {
+ @InterruptItemPlace
+ //gap @MakeList @NotRevealed num
+ }
+
+ def @NewPageItem
+ {
+ @NewPageItemPlace
+ //1.1b @MakeList @NotRevealed num
+ }
+
+ @OneOf
+ {
+ @NormalItem
+ @ParagraphItem
+ @InterruptItem
+ @NewPageItem
+ }
+ }
+
+ def @ListGalleyPlace { @Galley }
+
+ def @ListGalley into { @ListGalleyPlace&&preceding }
+ {
+ @MakeList start // @EndListPlace
+ }
+
+ def @ColPieceTwo
+ {
+ colheight @High 500c @Wide @ListGalleyPlace ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed
+ }
+
+ def @ColPieceThree
+ {
+ colheight @High 500c @Wide @ListGalleyPlace ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed
+ }
+
+ def @ColPieceFour
+ {
+ colheight @High 500c @Wide @ListGalleyPlace ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed
+ }
+
+ def @ColPieceFive
+ {
+ colheight @High 500c @Wide @ListGalleyPlace ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed ||colgap
+ colheight @High 500c @Wide @ListGalleyPlace @NotRevealed
+ }
+
+ colnum @Case
+ {
+ 1 @Yield @ListGalleyPlace
+ 2 @Yield @ColPieceTwo
+ 3 @Yield @ColPieceThree
+ 4 @Yield @ColPieceFour
+ 5 @Yield @ColPieceFive
+ else @Yield @ListGalleyPlace
+ }
+ //
+ @ListGalley
+ }
+
+ def listitem into { @ItemPlace&&preceding }
+ named @Tag {}
+ right x
+ {
+ @NumberMarker&&preceding @Tagged @Tag
+ // x
+ // @PageMark @Tag # weird placement, but @PageMark is definite now
+ }
+
+ def paragraphitem
+ named @Tag {}
+ named style right tag { @ParaIndent @Wide & tag. &2s }
+ right x
+ {
+
+ def sendparagraphitem into { @ParagraphItemPlace&&preceding }
+ named tag { @Tag }
+ {
+ @NumberMarker&&preceding @Tagged @Tag
+ // { style @NumberMarker&&@Tag @Open { @Value } } @Insert x
+ // @PageMark @Tag
+ }
+
+ sendparagraphitem
+ }
+
+ def droplistitem into { @ItemPlace&&preceding }
+ named @Tag {}
+ right x
+ {
+ @NumberMarker&&preceding @Tagged @Tag
+ // @PageMark @Tag
+ //1vx x
+ }
+
+ def tagitem into { @ItemPlace&&preceding }
+ named tag {}
+ right x
+ {
+ def sendtag into { @TagPlace&&preceding } { tag }
+
+ sendtag // x
+ }
+
+ def droptagitem into { @ItemPlace&&preceding }
+ named tag {}
+ right x
+ {
+ def sendtag into { @TagPlace&&preceding } { tag }
+
+ sendtag // //1vxu x
+ }
+
+ def endlist force into { @EndListPlace&&preceding } {}
+
+ def listnewpage into { @NewPageItemPlace&&preceding } {}
+
+ def listinterruptitem into { @InterruptItemPlace&&preceding }
+ right x
+ {
+ x
+ }
+
+
+ macro @LI @ListItem { // listitem }
+ macro @PI @ParagraphItem { // paragraphitem }
+ macro @LII @ListInterruptItem { // listinterruptitem }
+ macro @LNP @ListNewPage { // listnewpage }
+ macro @DLI @DropListItem { // droplistitem }
+ macro @TI @TagItem { // tagitem tag }
+ macro @DTI @DropTagItem { // droptagitem tag }
+ macro @REL @RawEndList { // & endlist // }
+ macro @EL @EndList { // & endlist @LOP }
+
+
+ macro @RLL @RawLeftList { @RawList style {}
+ labelwidth { 0c } }
+ macro @RIL @RawIndentedList { @RawList style {} }
+ macro @RQL @RawQuotedList { @RawList style {}
+ rightindent {@DisplayIndent}}
+ macro @RCL @RawCentredList { @RawList style {}
+ labelwidth {0c}
+ itemindent {0.5rt} }
+ macro @RawCenteredList { @RawCentredList }
+ macro @RNL @RawNumberedList { @RawList style { num. } }
+ macro @RPNL @RawParenNumberedList { @RawList style { (num) } }
+ macro @RRL @RawRomanList { @RawList type { @Roman&&num }
+ style { num. } }
+ macro @RPRL @RawParenRomanList { @RawList type { @Roman&&num }
+ style { (num) } }
+ macro @RUCRL @RawUCRomanList { @RawList type { @UCRoman&&num }
+ style { num. } }
+ macro @RPUCRL @RawParenUCRomanList { @RawList type { @UCRoman&&num }
+ style { (num) } }
+ macro @RAL @RawAlphaList { @RawList type { @Alpha&&num }
+ style { num. } }
+ macro @RPAL @RawParenAlphaList { @RawList type { @Alpha&&num }
+ style { (num) } }
+ macro @RUCAL @RawUCAlphaList { @RawList type { @UCAlpha&&num }
+ style { num. } }
+ macro @RPUCAL @RawParenUCAlphaList { @RawList type { @UCAlpha&&num }
+ style { (num) } }
+ macro @RBL @RawBulletList { @RawList style { @Bullet } }
+ macro @RSL @RawStarList { @RawList style { @Star } }
+ macro @RDL @RawDashList { @RawList style { -- } }
+ macro @RTL @RawTaggedList { @RawList type { @TagPlace } }
+ macro @RWTL @RawWideTaggedList { @RawList type { @TagPlace }
+ labelwidth { @WideIndent } }
+ macro @RVWTL @RawVeryWideTaggedList{ @RawList type { @TagPlace }
+ labelwidth { @VeryWideIndent } }
+
+
+ macro @L @List { @LOP @RawList }
+ macro @LL @LeftList { @LOP @RawLeftList }
+ macro @IL @IndentedList { @LOP @RawIndentedList }
+ macro @QL @QuotedList { @LOP @RawQuotedList }
+ macro @CL @CentredList { @LOP @RawCentredList }
+ macro @CenteredList { @LOP @RawCenteredList }
+ macro @NL @NumberedList { @LOP @RawNumberedList }
+ macro @PNL @ParenNumberedList { @LOP @RawParenNumberedList }
+ macro @RL @RomanList { @LOP @RawRomanList }
+ macro @PRL @ParenRomanList { @LOP @RawParenRomanList }
+ macro @UCRL @UCRomanList { @LOP @RawUCRomanList }
+ macro @PUCRL @ParenUCRomanList { @LOP @RawParenUCRomanList }
+ macro @AL @AlphaList { @LOP @RawAlphaList }
+ macro @PAL @ParenAlphaList { @LOP @RawParenAlphaList }
+ macro @UCAL @UCAlphaList { @LOP @RawUCAlphaList }
+ macro @PUCAL @ParenUCAlphaList { @LOP @RawParenUCAlphaList }
+ macro @BL @BulletList { @LOP @RawBulletList }
+ macro @SL @StarList { @LOP @RawStarList }
+ macro @DL @DashList { @LOP @RawDashList }
+ macro @TL @TaggedList { @LOP @RawTaggedList }
+ macro @WTL @WideTaggedList { @LOP @RawWideTaggedList }
+ macro @VWTL @VeryWideTaggedList { @LOP @RawVeryWideTaggedList }
+
+@End @BasicSetup
diff --git a/makefile b/makefile
index cdb57ce..d01bc22 100644
--- a/makefile
+++ b/makefile
@@ -406,7 +406,7 @@ installman:
installdoc:
@echo ""
@echo "Creating LOUTDOCDIR $(LOUTDOCDIR) and copying documentation into it"
- $(RCOPY) doc $(LOUTDOCDIR)
+ $(RCOPY) doc/* $(LOUTDOCDIR)
chmod 755 $(LOUTDOCDIR)
chmod 755 $(LOUTDOCDIR)/*
chmod 644 $(LOUTDOCDIR)/*/*
diff --git a/prg2lout.c b/prg2lout.c
index 3daace0..34e4051 100644
--- a/prg2lout.c
+++ b/prg2lout.c
@@ -4,7 +4,7 @@
/* PRG2LOUT: A PROGRAM TO CONVERT PROGRAM SOURCES INTO LOUT */
/* COPYRIGHT (C) 2000, 2006 Jeffrey H. Kingston */
/* */
-/* Version 2.5, November 2006 */
+/* Part of Lout Version 3.36, July 2007 */
/* */
/* Jeffrey H. Kingston (jeff@cs.su.oz.au) */
/* Basser Department of Computer Science */
@@ -15,12 +15,12 @@
/* Perl and Pod by Jeff Kingston and Mark Summerfield */
/* Python by Mark Summerfield (Python 2.5 update Nov 2006) */
/* Ruby by Michael Piotrowski */
-/* Haskell by Thorsten Seitz (Nov 2002) */
+/* Haskell by Thorsten Seitz (Nov 2002), mods by Gabor Greif */
/* RSL by Darren Bane (February 2003) */
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
@@ -586,7 +586,7 @@ TOKEN CStringToken = {
TOKEN CCharacterToken = {
U "character", /* used by error messages involving this token */
PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
- U "@PC", /* Lout command for formatting characters */
+ U "@PS", /* Lout command for formatting characters */
U "", /* no alternate command */
U "", /* no following command */
FALSE, /* token allowed anywhere, not just start of line */
@@ -631,7 +631,7 @@ TOKEN EiffelStringToken = {
TOKEN EiffelCharacterToken = {
U "character", /* used by error messages involving this token */
PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
- U "@PC", /* Lout command for formatting characters */
+ U "@PS", /* Lout command for formatting characters */
U "", /* no alternate command */
U "", /* no following command */
FALSE, /* token allowed anywhere, not just start of line */
@@ -764,7 +764,7 @@ TOKEN HaskellStringToken = {
TOKEN HaskellCharacterToken = {
U "character", /* used by error messages involving this token */
PRINT_WHOLE_QUOTED, /* print this token in quotes etc. as usual */
- U "@PC", /* Lout command for formatting characters */
+ U "@PS", /* Lout command for formatting characters */
U "", /* no alternate command */
U "", /* no following command */
FALSE, /* token allowed anywhere, not just start of line */
@@ -3109,12 +3109,13 @@ LANGUAGE NonpareilLanguage = {
&NonpareilOperatorToken,
},
{
- "as", "builtin", "case", "class", "coerce", "creation", "else", "elsif",
- "end", "enum", "extend", "extension", "filter", "genesis", "if", "in",
- "infix", "infixl", "infixr", "inherit", "introduce", "invariant", "is",
- "let", "local", "meet", "module", "noncoercive", "noncreation", "norename",
- "predefined", "prefix", "prefun", "private", "postfix", "rename",
- "require", "system", "then", "typeobj", "upto", "use", "when", "yield",
+ "abstract", "as", "builtin", "case", "class", "coerce",
+ "else", "elsif", "end", "enum", "extend", "extension", "filter",
+ "function", "genesis", "if", "in", "infix", "inherit", "introduce",
+ "invariant", "is", "let", "local", "meet", "module", "noncoercive",
+ "noncreation", "norename", "predefined", "prefix", "prefun", "private",
+ "postfix", "rename", "require", "system", "then", "typeobj", "upto",
+ "use", "when", "yield",
/* not keywords, but conventionally set like them */
"false", "true", "self", "and", "or", "not"
diff --git a/whatsnew b/whatsnew
index c297772..ea658ac 100644
--- a/whatsnew
+++ b/whatsnew
@@ -476,4 +476,17 @@ Changes and new features introduced in Version 3.35 [April 2007]
New "arrowstyle { many }" in @Diag makes "many"-relation arrowheads
New @HClip and @VClip symbols for clipping (see User's Guide)
+Changes and new features introduced in Version 3.36 [July 2007]
+
+ Bug fixes:
+ "lout -t" really does avoid textures completely now (Ludovic Courtes)
+ small patch (@PC becomes @PS) to prg2lout.c (Gabor Greif)
+ patch to haskellf (Gabor Greif)
+ changed haskellf symboloperators from "Symbol Base" to "Slope" (Kingston)
+ Lout now released under Version 3 of the GNU General Public License
+ Improved headings of numberless chapters/sections (Ludovic Courtes)
+ @BypassNumber option for numbered displays (Courtes/Kingston)
+ &- after "/" now hyphenates without inserting a hyphen, like &- after -
+ New @Math symbol (Courtes), will obsolete @Eq next release
+
Jeff Kingston
diff --git a/z01.c b/z01.c
index 8b9265a..352a32f 100644
--- a/z01.c
+++ b/z01.c
@@ -1,6 +1,6 @@
/*@z01.c:Supervise:StartSym, AllowCrossDb, etc.@******************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z02.c b/z02.c
index b3ede61..d0aeccf 100644
--- a/z02.c
+++ b/z02.c
@@ -1,6 +1,6 @@
/*@z02.c:Lexical Analyser:Declarations@***************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z03.c b/z03.c
index bd7d393..380ef56 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.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z04.c b/z04.c
index 4f77274..efdaeb5 100644
--- a/z04.c
+++ b/z04.c
@@ -1,6 +1,6 @@
/*@z04.c:Token Service:NewToken(), CopyTokenList()@***************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z05.c b/z05.c
index f97f561..0116ad1 100644
--- a/z05.c
+++ b/z05.c
@@ -1,6 +1,6 @@
/*@z05.c:Read Definitions:ReadLangDef()@**************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z06.c b/z06.c
index 4740e9d..62d5bc8 100644
--- a/z06.c
+++ b/z06.c
@@ -1,6 +1,6 @@
/*@z06.c:Parser:PushObj(), PushToken(), etc.@*********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z07.c b/z07.c
index 6ed5a40..c2e6f61 100644
--- a/z07.c
+++ b/z07.c
@@ -1,6 +1,6 @@
/*@z07.c:Object Service:SplitIsDefinite(), DisposeObject()@*******************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z08.c b/z08.c
index 5566b7e..5b7eb88 100644
--- a/z08.c
+++ b/z08.c
@@ -1,6 +1,6 @@
/*@z08.c:Object Manifest:ReplaceWithSplit()@**********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z09.c b/z09.c
index 00e89e1..99634fe 100644
--- a/z09.c
+++ b/z09.c
@@ -1,6 +1,6 @@
/*@z09.c:Closure Expansion:SearchEnv()@***************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z10.c b/z10.c
index 719b970..36ab729 100644
--- a/z10.c
+++ b/z10.c
@@ -1,6 +1,6 @@
/*@z10.c:Cross References:CrossInit(), CrossMake()@***************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z11.c b/z11.c
index 28be24c..d15653e 100644
--- a/z11.c
+++ b/z11.c
@@ -1,6 +1,6 @@
/*@z11.c:Style Service:EchoStyle()@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z12.c b/z12.c
index ce8b911..6d9e6ac 100644
--- a/z12.c
+++ b/z12.c
@@ -1,6 +1,6 @@
/*@z12.c:Size Finder:MinSize()@***********************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z13.c b/z13.c
index 56bb1e5..922fd71 100644
--- a/z13.c
+++ b/z13.c
@@ -1,6 +1,6 @@
/*@z13.c:Object Breaking:BreakJoinedGroup()@**********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z14.c b/z14.c
index 26a4d4f..ecb0d2c 100644
--- a/z14.c
+++ b/z14.c
@@ -1,6 +1,6 @@
/*@z14.c:Fill Service:Declarations@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
@@ -164,7 +164,7 @@ typedef struct {
/*****************************************************************************/
#define MoveRightToGap(I,x,rlink,right,max_width,etc_width,hyph_word) \
-{ OBJECT newg, foll = nilobj, tmp; \
+{ OBJECT newg, foll = nilobj, tmp; int ch; \
BOOLEAN jn, unbreakable_at_right = FALSE; \
debug0(DOF, DDD, "MoveRightToGap(I, x, rlink, right, -, -, -)"); \
\
@@ -211,34 +211,37 @@ typedef struct {
{ if( hyph_allowed ) \
{ \
/* hyphenation is allowed, so add hyph_word to nat_width */ \
- if( is_word(type(right)) && \
- !(string(right)[StringLength(string(right))-1] == CH_HYPHEN) ) \
- { \
- /* make sure hyph_word exists and is of the right font */ \
- debug0(DOF, DDD, " MoveRightToGap checking hyph_word"); \
- if( hyph_word == nilobj ) \
- { hyph_word = MakeWord(WORD, STR_HYPHEN, &fpos(x)); \
- word_font(hyph_word) = 0; \
- word_colour(hyph_word) = colour(save_style(x)); \
- word_underline_colour(hyph_word) = underline_colour(save_style(x)); \
- word_texture(hyph_word) = texture(save_style(x)); \
- word_outline(hyph_word) = outline(save_style(x)); \
- word_language(hyph_word) = language(save_style(x)); \
- word_baselinemark(hyph_word) = baselinemark(save_style(x)); \
- word_strut(hyph_word) = strut(save_style(x)); \
- word_ligatures(hyph_word) = ligatures(save_style(x)); \
- word_hyph(hyph_word) = hyph_style(save_style(x))==HYPH_ON; \
- } \
- if( word_font(hyph_word) != word_font(right) ) \
- { word_font(hyph_word) = word_font(right); \
- FposCopy(fpos(hyph_word), fpos(x)); \
- FontWordSize(hyph_word); \
- } \
+ if( is_word(type(right)) ) \
+ { \
+ ch = string(right)[StringLength(string(right))-1]; \
+ if( ch != CH_HYPHEN && ch != CH_SLASH ) \
+ { \
+ /* make sure hyph_word exists and is of the right font */ \
+ debug0(DOF, DDD, " MoveRightToGap checking hyph_word"); \
+ if( hyph_word == nilobj ) \
+ { hyph_word = MakeWord(WORD, STR_HYPHEN, &fpos(x)); \
+ word_font(hyph_word) = 0; \
+ word_colour(hyph_word) = colour(save_style(x)); \
+ word_underline_colour(hyph_word)=underline_colour(save_style(x));\
+ word_texture(hyph_word) = texture(save_style(x)); \
+ word_outline(hyph_word) = outline(save_style(x)); \
+ word_language(hyph_word) = language(save_style(x)); \
+ word_baselinemark(hyph_word) = baselinemark(save_style(x));\
+ word_strut(hyph_word) = strut(save_style(x)); \
+ word_ligatures(hyph_word) = ligatures(save_style(x)); \
+ word_hyph(hyph_word) = hyph_style(save_style(x))==HYPH_ON;\
+ } \
+ if( word_font(hyph_word) != word_font(right) ) \
+ { word_font(hyph_word) = word_font(right); \
+ FposCopy(fpos(hyph_word), fpos(x)); \
+ FontWordSize(hyph_word); \
+ } \
\
- mode(gap(newg)) = ADD_HYPH; \
- if( !marginkerning(save_style(x)) ) \
- I.nat_width += size(hyph_word, COLM); \
- debug0(DOF, DDD, " adding hyph_word from nat_width"); \
+ mode(gap(newg)) = ADD_HYPH; \
+ if( !marginkerning(save_style(x)) ) \
+ I.nat_width += size(hyph_word, COLM); \
+ debug0(DOF, DDD, " adding hyph_word from nat_width"); \
+ } \
} \
} \
else \
diff --git a/z15.c b/z15.c
index 6e3d1e3..90b7d97 100644
--- a/z15.c
+++ b/z15.c
@@ -1,6 +1,6 @@
/*@z15.c:Size Constraints:MinConstraint(), EnlargeToConstraint()@*************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
@@ -32,7 +32,7 @@
/*****************************************************************************/
#include <math.h>
#ifndef M_PI
-#define M_PI 3.1415926535897931160E0
+#define M_PI 3.14159265358979323846
#endif
#include "externs.h"
@@ -194,7 +194,7 @@ CONSTRAINT *hc, CONSTRAINT *vc, int dim)
debug4(DSC, DD, "RotateConstraint(c, y, %sd, %s, %s, %s)",
buff, EchoConstraint(hc), EchoConstraint(vc), dimen(dim));
- /* work out angle in radians between 0 and 2*PI */
+ /* work out angle in radians between 0 and 2*M_PI */
theta = (float) angle * 2 * M_PI / (float) (DG * 360);
while( theta < 0 ) theta += 2 * M_PI;
while( theta >= 2 * M_PI ) theta -= 2 * M_PI;
diff --git a/z16.c b/z16.c
index 77a7d98..b97666b 100644
--- a/z16.c
+++ b/z16.c
@@ -1,6 +1,6 @@
/*@z16.c:Size Adjustment:SetNeighbours(), CatAdjustSize()@********************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z17.c b/z17.c
index b067df8..5554047 100644
--- a/z17.c
+++ b/z17.c
@@ -1,6 +1,6 @@
/*@z17.c:Gap Widths:GetGap()@*************************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z18.c b/z18.c
index 961343c..e26830a 100644
--- a/z18.c
+++ b/z18.c
@@ -1,6 +1,6 @@
/*@z18.c:Galley Transfer:Declarations@****************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z19.c b/z19.c
index 54171a3..af1bf7c 100644
--- a/z19.c
+++ b/z19.c
@@ -1,6 +1,6 @@
/*@z19.c:Galley Attaching:DetachGalley()@*************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z20.c b/z20.c
index d743d39..d71fced 100644
--- a/z20.c
+++ b/z20.c
@@ -1,6 +1,6 @@
/*@z20.c:Galley Flushing:DebugInnersNames()@**********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z21.c b/z21.c
index 8f6943a..1371aa0 100644
--- a/z21.c
+++ b/z21.c
@@ -1,6 +1,6 @@
/*@z21.c:Galley Maker:SizeGalley()@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z22.c b/z22.c
index c71a284..a81b262 100644
--- a/z22.c
+++ b/z22.c
@@ -1,6 +1,6 @@
/*@z22.c:Galley Service:Interpose()@******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z23.c b/z23.c
index f964004..6b9b885 100644
--- a/z23.c
+++ b/z23.c
@@ -1,6 +1,6 @@
/*@z23.c:Galley Printer:ScaleFactor()@****************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z24.c b/z24.c
index 8e89f32..5e86269 100644
--- a/z24.c
+++ b/z24.c
@@ -1,6 +1,6 @@
/*@z24.c:Print Service:PrintInit()@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -12,7 +12,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z25.c b/z25.c
index f996382..e228e4d 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.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z26.c b/z26.c
index 890b2fd..9c90808 100644
--- a/z26.c
+++ b/z26.c
@@ -1,6 +1,6 @@
/*@z26.c:Echo Service:BeginString()@******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z27.c b/z27.c
index 2884a28..24aa3e2 100644
--- a/z27.c
+++ b/z27.c
@@ -1,6 +1,6 @@
/*@z27.c:Debug Service:Debug flags@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z28.c b/z28.c
index cc0d45a..e767a7f 100644
--- a/z28.c
+++ b/z28.c
@@ -1,6 +1,6 @@
/*@z28.c:Error Service:ErrorInit(), ErrorSeen()@******************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z29.c b/z29.c
index 9239c00..76050f3 100644
--- a/z29.c
+++ b/z29.c
@@ -1,6 +1,6 @@
/*@z29.c:Symbol Table:Declarations, hash()@***********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z30.c b/z30.c
index 6c296b1..2027a3e 100644
--- a/z30.c
+++ b/z30.c
@@ -1,6 +1,6 @@
/*@z30.c:Symbol uses:InsertUses()@********************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z31.c b/z31.c
index b8237e4..9aea721 100644
--- a/z31.c
+++ b/z31.c
@@ -1,6 +1,6 @@
/*@z31.c:Memory Allocator:DebugMemory()@**************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z32.c b/z32.c
index 2ad1270..e38095c 100644
--- a/z32.c
+++ b/z32.c
@@ -1,6 +1,6 @@
/*@z32.c:Counter Service:Next()@**********************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z33.c b/z33.c
index d3e8d1b..1c780be 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.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z34.c b/z34.c
index c3f212b..ab6741b 100644
--- a/z34.c
+++ b/z34.c
@@ -1,6 +1,6 @@
/*@z34.c:Rotation Service:Declarations@***************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
@@ -29,7 +29,7 @@
/*****************************************************************************/
#include <math.h>
#ifndef M_PI
-#define M_PI 3.1415926535897931160E0
+#define M_PI 3.14159265358979323846
#endif
#include "externs.h"
diff --git a/z35.c b/z35.c
index cdede72..3d747a7 100644
--- a/z35.c
+++ b/z35.c
@@ -1,6 +1,6 @@
/*@z35.c:Time Keeper: MomentSym(), TimeString()@******************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z36.c b/z36.c
index 95166f0..d94aa10 100644
--- a/z36.c
+++ b/z36.c
@@ -1,6 +1,6 @@
/*@z36.c:Hyphenation: Declarations@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z37.c b/z37.c
index e917cd4..ba9893f 100644
--- a/z37.c
+++ b/z37.c
@@ -1,6 +1,6 @@
/*@z37.c:Font Service:Declarations@*******************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z38.c b/z38.c
index 3dd7c40..1650215 100644
--- a/z38.c
+++ b/z38.c
@@ -1,6 +1,6 @@
/*@z38.c:Character Mappings:Declarations@*************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z39.c b/z39.c
index 652a57e..d9565d9 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.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z40.c b/z40.c
index 1d5df24..4e2967e 100644
--- a/z40.c
+++ b/z40.c
@@ -1,6 +1,6 @@
/*@z40.c:Filter Handler:FilterInit()@*****************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z41.c b/z41.c
index 236d358..ba63284 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.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z42.c b/z42.c
index 2419623..fb57fa5 100644
--- a/z42.c
+++ b/z42.c
@@ -1,6 +1,6 @@
/*@z42.c:Colour Service:ColourChange, ColourCommand@**************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z43.c b/z43.c
index d2d4681..001dfc2 100644
--- a/z43.c
+++ b/z43.c
@@ -1,6 +1,6 @@
/*@z43.c:Language Service:LanguageChange, LanguageString@*********************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z44.c b/z44.c
index bb5e5ae..84685c1 100644
--- a/z44.c
+++ b/z44.c
@@ -1,6 +1,6 @@
/*@z44.c:Vertical Hyphenation:VerticalHyphenate()@****************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z45.c b/z45.c
index ac25351..d8ab578 100644
--- a/z45.c
+++ b/z45.c
@@ -1,6 +1,6 @@
/*@z45.c:External Sort:SortFile()@********************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z46.c b/z46.c
index 38a1227..e610d48 100644
--- a/z46.c
+++ b/z46.c
@@ -1,6 +1,6 @@
/*@z46.c:Optimal Galleys:FindOptimize()@**************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z47.c b/z47.c
index 1b7fe14..6e5da1c 100644
--- a/z47.c
+++ b/z47.c
@@ -1,6 +1,6 @@
/*@z47.c:Environment Table:EnvReadRetrieve()@*********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z48.c b/z48.c
index e50b592..684486a 100644
--- a/z48.c
+++ b/z48.c
@@ -1,6 +1,6 @@
/*@z48.c:PDF back end@********************************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -12,7 +12,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
@@ -37,13 +37,14 @@
/* PDFText_Close(), PDFHasValidTextMatrix() */
/* */
/*****************************************************************************/
-#define PI 3.1415926535897931160
#include "externs.h"
-
/* ANSI headers */
#include <ctype.h>
#include <math.h>
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
#include <time.h>
/* zlib headers: define PDF_COMPRESSION = 0 if you don't have zlib library */
@@ -2714,13 +2715,13 @@ static char *PDFPage_EvalExpr(char* inExpr, float* outValue)
case k_sin:
- *outValue = sin((double) val1 * (double) PI / (double) 180.0);
+ *outValue = sin((double) val1 * (double) M_PI / (double) 180.0);
break;
case k_cos:
- *outValue = cos((double) val1 * (double) PI / (double) 180.0);
+ *outValue = cos((double) val1 * (double) M_PI / (double) 180.0);
break;
diff --git a/z49.c b/z49.c
index 001d5d2..fe45542 100644
--- a/z49.c
+++ b/z49.c
@@ -1,6 +1,6 @@
/*@z49.c:PostScript Back End:PS_BackEnd@**************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
@@ -895,9 +895,14 @@ static void PS_PrintBeforeFirstPage(FULL_LENGTH h, FULL_LENGTH v,
p0("% p LoutSetTexture -");
p0("/LoutSetTexture");
p0("{");
- p0(" LoutCurrentCCS");
- p0(" 3 -1 roll");
- p0(" LoutSetCCSP");
+ if( UseTexture )
+ {
+ p0(" LoutCurrentCCS");
+ p0(" 3 -1 roll");
+ p0(" LoutSetCCSP");
+ }
+ else
+ p0(" pop % textures not used");
p0("} bind def");
pnl;
diff --git a/z50.c b/z50.c
index 62fa3f9..584b02a 100644
--- a/z50.c
+++ b/z50.c
@@ -1,6 +1,6 @@
/*@z50.c:PDF Back End:PDF_BackEnd@********************************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
@@ -28,6 +28,9 @@
/* */
/*****************************************************************************/
#include <math.h> /* for fabs() */
+#ifndef M_PI
+#define M_PI 3.14159265358979323846
+#endif
#include "externs.h"
@@ -533,14 +536,13 @@ static void PDF_CoordTranslate(FULL_LENGTH xdist, FULL_LENGTH ydist)
/* Rotate coordinate system by given amount (in internal DG units) */
/* */
/*****************************************************************************/
-#define PI 3.1415926535897931160
static void PDF_CoordRotate(FULL_LENGTH amount)
{ int theAmount;
debug1(DPF, D, "PDF_CoordRotate(%.1f degrees)", (float) amount / DG);
theAmount = ((amount / DG) % 360);
if( theAmount != 0 )
- PDFPage_Rotate(out_fp, (double) theAmount * (double) PI / (double) 180.0);
+ PDFPage_Rotate(out_fp, (double) theAmount * (double) M_PI / (double) 180.0);
cpexists = FALSE;
debug0(DPF, D, "CoordRotate returning.");
} /* end PDF_CoordRotate */
diff --git a/z51.c b/z51.c
index 183fff8..7fa598c 100644
--- a/z51.c
+++ b/z51.c
@@ -1,6 +1,6 @@
/*@z51.c:Plain Text Back End:Plain_BackEnd@***********************************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */
diff --git a/z52.c b/z52.c
index 4648ca0..d539a6a 100644
--- a/z52.c
+++ b/z52.c
@@ -1,6 +1,6 @@
/*@z52.c:Texture Service:TextureChange, TextureCommand@***********************/
/* */
-/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.35) */
+/* THE LOUT DOCUMENT FORMATTING SYSTEM (VERSION 3.36) */
/* COPYRIGHT (C) 1991, 2007 Jeffrey H. Kingston */
/* */
/* Jeffrey H. Kingston (jeff@it.usyd.edu.au) */
@@ -10,7 +10,7 @@
/* */
/* 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 2, or (at your option) */
+/* the Free Software Foundation; either Version 3, or (at your option) */
/* any later version. */
/* */
/* This program is distributed in the hope that it will be useful, */