diff options
Diffstat (limited to 'doc/user')
47 files changed, 2928 insertions, 233 deletions
diff --git a/doc/user/README b/doc/user/README index 9b8df78..850b67a 100644 --- a/doc/user/README +++ b/doc/user/README @@ -4,7 +4,7 @@ This directory contains the Lout source files for the User's Guide to the Lout Document Formatting System. To produce the Guide, type the command - lout -r6 all > user.ps + lout -r6 all > user.ps in this directory. The -r6 flag causes Lout to run over the document six times. This is needed to completely resolve all @@ -21,18 +21,17 @@ 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 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 49): +lout file "gra_tick" (from "gra" line 38, from "all" line 46): + 234,1: 23.7c object too high for 23.7c space; @Scale inserted +lout file "gra_summ" (from "gra" line 44, from "all" line 46): + 10,1: 25.7c object too high for 23.6c space; @Scale inserted +lout file "prg_tabs" (from "prg" line 139, from "all" line 48): 66,23: prg2lout 2,1: program text ended within comment 68,35: prg2lout 2,1: program text ended within comment -The first warning is about a footnote that did not fit onto the -first available page. The next is about a large table that had to be -scaled down slightly to fit on the page. The last two warnings point -to two places where a C program text ended inside a comment, which in +The first two warnings are about large tables that had to be scaled +down slightly to fit on the page. The last two warnings point to +two places where a C program text ended inside a comment, which in these cases was deliberate. If you set the document in Letter size paper, you will get a somewhat different set of warning messages. @@ -41,7 +40,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.36.user.ps.gz". +stored at "ftp://ftp.it.usyd.edu.au/jeff/lout/lout-3.37.user.ps.gz". Jeffrey H. Kingston -27 July 2007 +19 September 2008 diff --git a/doc/user/all b/doc/user/all index 7c75312..9c49083 100644 --- a/doc/user/all +++ b/doc/user/all @@ -1,7 +1,6 @@ @SysInclude { xrgb } @SysInclude { tab } @SysInclude { tbl } -@SysInclude { eq } @SysInclude { math } @SysInclude { graph } @SysInclude { pie } @@ -10,7 +9,7 @@ @SysInclude { cprint } @SysInclude { eiffel } @SysInclude { perl } -@SysInclude { book } +@Include { mybook } # @Include { letterbook } # for testing Letter size formatting @SysDatabase @Reference { loutrefs } @@ -23,10 +22,10 @@ Lout Document Formatting System } @Author { Jeffrey H. Kingston } - @Edition { Version 3.36 -July, 2007 } + @Edition { Version 3.37 +September 2008 } @Publisher { -Copyright @CopyRight 1991, 2007 Jeffrey H. Kingston, +Copyright @CopyRight 1991, 2008 Jeffrey H. Kingston, School of Information Technologies, The University of Sydney 2006, Australia. ISBN 0 86758 951 5. } @@ -41,7 +40,7 @@ The University of Sydney 2006, Australia. ISBN 0 86758 951 5. @Include { fmt } @Include { ref } @Include { tbl } -@Include { equ } +@Include { mat } @Include { bgr } @Include { dia } @Include { gra } diff --git a/doc/user/bas_lang b/doc/user/bas_lang index 7270b39..7c6ac09 100644 --- a/doc/user/bas_lang +++ b/doc/user/bas_lang @@ -33,30 +33,33 @@ At the time of writing, the following languages were available: B { Portuguese Português pt } @Rowa A { English en } - B { Russian ru } + B { Programming } @Rowa A { EnglishUK en-GB } - B { Slovak Slovensky Slovencina } + B { Russian ru } @Rowa A { Esperanto eo } - B { Slovenian Slovenia Slovenija sl } + B { Slovak Slovensky Slovencina } @Rowa A { Finnish Suomi fi } - B { Spanish Espa{@Char ntilde}ol es } + B { Slovenian Slovenia Slovenija sl } @Rowa A { French Francais Fran{@Char ccedilla}ais fr } - B { Swedish Svenska sv } + B { Spanish Espa{@Char ntilde}ol es } @Rowa A { German Deutsch de } - B { UpperSorbian hornjoserbsce serbsce } + B { Swedish Svenska sv } @Rowa A { Hungarian Magyar hu } + B { UpperSorbian hornjoserbsce serbsce } } File @Code "include/langdefs" in the distribution always has the exact list of known languages. As shown, most languages have alternative names, all equally acceptable to the @Code "@Language" symbol. @Code "EnglishUK" differs from @Code "English" only by applying -hyphenation rules said to be more appropriate for British English. +hyphenation rules said to be more appropriate for British English; +@Code "Programming" is for programming languages and is used by the +symbols of Chapter {@NumberOf cprint}. @PP Since accented characters (Section {@NumberOf characters}) are always available irrespective of the language, at first sight it might seem diff --git a/doc/user/bas_par1 b/doc/user/bas_par1 index e5ce503..eaf2839 100644 --- a/doc/user/bas_par1 +++ b/doc/user/bas_par1 @@ -85,6 +85,7 @@ options, consult Section {@NumberOf setup}; here we just explain how the relevant options work. The options and their default values are paragap @Index @Code "@ParaGap" paraindent @Index @Code "@ParaIndent" +displaygap @Index @Code "@DisplayGap" @ID @OneRow @Code { "@ParaGap { 1.30vx }" "@ParaIndent { 2.00f }" diff --git a/doc/user/bgr_boxs b/doc/user/bgr_boxs index 775e305..5e275cf 100644 --- a/doc/user/bgr_boxs +++ b/doc/user/bgr_boxs @@ -151,7 +151,20 @@ produce other kinds of boxes: These also have {@Code "margin"}, {@Code "linewidth"}, {@Code "paint"}, and @Code "texture" options, and @Code "@ShadowBox" has a @Code "shadow" option which determines the thickness of the shadow (its default value -is {@Code "0.2f"}). +is {@Code "0.2f"}). There is no option to change the colour of the +shadow, but it is quite easy to combine two boxes to get that effect: +@ID @OneRow @Code @Verbatim { +lightgrey @Colour @ShadowBox margin { 0c } black @Colour @Box +{ + A shadow box +} +} +produces +@CD lightgrey @Colour @ShadowBox margin { 0c } black @Colour @Box +{ + A shadow box +} +in which the shadow, and only the shadow, is coloured light grey. @PP Boxes are quite at home inside paragraphs, as @Box { a box }, @CurveBox { a curve box }, and @ShadowBox { a shadow box } diff --git a/doc/user/bgr_prec b/doc/user/bgr_prec index 7ece8ff..737d9c9 100644 --- a/doc/user/bgr_prec +++ b/doc/user/bgr_prec @@ -182,12 +182,12 @@ format the overall document as though the object in question had zero width or height, but it will still print the entire object. @PP For example, you might have an inline equation that causes the -line spacing to increase to accommodate it -- @E { 2 sup 2 sup N } say -- +line spacing to increase to accommodate it -- @M { 2 sup 2 sup N } say -- but you would rather it didn't. Writing -@ID @Code "@ZeroHeight @E { 2 sup 2 sup N }" +@ID @Code "@ZeroHeight @M { 2 sup 2 sup N }" causes Lout to pretend that the object has zero height, and so it will not increase the line spacing around this version of -{@ZeroHeight @E { 2 sup 2 sup N }}, as you can see. +{@ZeroHeight @M { 2 sup 2 sup N }}, as you can see. @PP The @Code "@HShift" and @Code "@VShift" symbols provide a way to move the printed object with respect to the zero-width one: diff --git a/doc/user/dia_defi b/doc/user/dia_defi index 200ce8e..63c1a96 100644 --- a/doc/user/dia_defi +++ b/doc/user/dia_defi @@ -16,17 +16,17 @@ symbols that @@Diag offers for helping you create complex shapes. As explained earlier, a node outline is drawn over its {@I base}, which is a rectangle containing the following object plus margins. The base defines a coordinate system with the point (0, 0) at the bottom left -corner, and @Eq { (xsize, ysize) } at the top right: +corner, and @M { (xsize, ysize) } at the top right: @CD @OneRow @Diag { @Box nodelabelmargin { 0.3f } - blabel { @Eq { ysize } } + blabel { @M { ysize } } blabelprox { E } - clabel { @Eq { 0 } } + clabel { @M { 0 } } clabelprox { E } - dlabel { @Eq { xsize } } + dlabel { @M { xsize } } dlabelprox { N } - alabel { @Eq { 0 } } + alabel { @M { 0 } } alabelpos { SW } alabelprox { N } paint { lightgrey } @@ -144,11 +144,11 @@ arc goes anticlockwise; to get a clockwise arc, use {@Code "["}{@I point}{@Code " clockwise]"}. @PP Two points may be separated by -@Eq { [x sub 1 ``` y sub 1 ``` x sub 2 ``` y sub 2 & ] }, which requests +@M { [x sub 1 ``` y sub 1 ``` x sub 2 ``` y sub 2 ] }, which requests that a Bezier curve be drawn between them with control points bezier.curve @Index { Bezier curve } -@Eq { (x sub 1 & , y sub 1 & ) } and -@Eq { (x sub 2 & , y sub 2 & ) }: +@M { (x sub 1 , y sub 1 ) } and +@M { (x sub 2 , y sub 2 ) }: @CD @Diag { @Node outline { @@ -167,10 +167,10 @@ bezier.curve @Index { Bezier curve } clabelprox { SW } dlabelprox { NW } outlinestyle { cdashed cdashed cdashed noline } - alabel { @Eq { ( x sub 0 , y sub 0 ) } } - blabel { @Eq { ( x sub 1 , y sub 1 ) } } - clabel { @Eq { ( x sub 2 , y sub 2 ) } } - dlabel { @Eq { ( x sub 3 , y sub 3 ) } } + alabel { @M { ( x sub 0 , y sub 0 ) } } + blabel { @M { ( x sub 1 , y sub 1 ) } } + clabel { @M { ( x sub 2 , y sub 2 ) } } + dlabel { @M { ( x sub 3 , y sub 3 ) } } { 6c @Wide 2c @High } // @Link diff --git a/doc/user/dia_summ b/doc/user/dia_summ index 529c221..661f1b9 100644 --- a/doc/user/dia_summ +++ b/doc/user/dia_summ @@ -1976,28 +1976,28 @@ with the symbols' precedences in parentheses. @Rowh @Rowa A { @I number @Code "=" @I number } - B { @Eq { non = }; also between lengths (79) } + B { @M { non = }; also between lengths (79) } @Rowa A { @I number @Code "!=" @I number } - B { @Eq { non != }; also between lengths (79) } + B { @M { non != }; also between lengths (79) } @Rowa A { @I number @Code "==" @I number } - B { @Eq { non = } between angles (79) } + B { @M { non = } between angles (79) } @Rowa A { @I number @Code "!==" @I number } - B { @Eq { non != } between angles (79) } + B { @M { non != } between angles (79) } @Rowa A { @I number @Code "<=" @I number } - B { @Eq { non <= }; also between lengths (79) } + B { @M { non <= }; also between lengths (79) } @Rowa A { @I number @Code "<" @I number } - B { @Eq { non < }; also between lengths (79) } + B { @M { non < }; also between lengths (79) } @Rowa A { @I number @Code ">=" @I number } - B { @Eq { non >= }; also between lengths (79) } + B { @M { non >= }; also between lengths (79) } @Rowa A { @I number @Code ">" @I number } - B { @Eq { non > }; also between lengths (79) } + B { @M { non > }; also between lengths (79) } @Rowa A { @Code "not" @I boolean } B { Logical not (78) } diff --git a/doc/user/dia_tree b/doc/user/dia_tree index dd8ad1a..52f52f6 100644 --- a/doc/user/dia_tree +++ b/doc/user/dia_tree @@ -139,15 +139,15 @@ stubsub.diagrams @Index { @Code "@StubSub" symbol (diagrams) } @ID @OneRow { @Code @Verbatim { @Tree { -@Circle @Eq { a } -@StubSub @Eq { T tsub a } +@Circle @Math { a } +@StubSub @Math { T tsub a } } } ||7ct @Diag { @Tree { -@Circle @Eq { a } -@StubSub @Eq { T tsub a } +@Circle @Math { a } +@StubSub @Math { T tsub a } } } } @@ -238,19 +238,19 @@ end of the stub path: @ID @OneRow { @Code @Verbatim { @Tree { -@Circle @Eq { a } +@Circle @Math { a } @StubSub from { SW } to { SE } @Box outlinestyle { noline } - @Eq { T tsub a } + @Math { T tsub a } } } ||7ct @Diag { @Tree { -@Circle @Eq { a } +@Circle @Math { a } @StubSub from { SW } to { SE } @Box outlinestyle { noline } - @Eq { T tsub a } + @Math { T tsub a } } } } diff --git a/doc/user/equ_math b/doc/user/equ_math index e9ab835..c665bb1 100644 --- a/doc/user/equ_math +++ b/doc/user/equ_math @@ -72,7 +72,7 @@ the limits of a sum are laid out differently depending on the context: @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 } } } + @Math { sum from { i = 0 } to { n } } } @EndAlignedDisplays Similarly, the @Code { "big" } symbol that is used in @Code { "@Eq" } to @@ -145,24 +145,24 @@ 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 +"above" and @Code "below" behave similarly to @Code "from" and @Code +"to" in @Code "@Eq", respectively. In other words, @Code "above" 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 } }" } +@ID { @Code { "@M { { a above f } + { z below b } }" } |8ct -@M { { a atop f } + { z below b } } } +@M { { a above f } + { z below b } } } @ID { { @Code { -"@Math { sum from { { 1 <= i <= p } atop" -" { 1 <= j <= q } atop" +"@Math { sum from { { 1 <= i <= p } above" +" { 1 <= j <= q } above" " { 1 <= k <= r } }" " { a sub { ij } b sub { jk } c sub { ki } } }" } |8ct -@Math { sum from { { 1 <= i <= p } atop - { 1 <= j <= q } atop +@Math { sum from { { 1 <= i <= p } above + { 1 <= j <= q } above { 1 <= k <= r } } { a sub { ij } b sub { jk } c sub { ki } } } } } @@ -190,12 +190,12 @@ situations such as the one illustrated below: @ID { @Code { "@Math {" -" lim atop @SubScriptStyle { i --> infinity }" +" lim above @SubScriptStyle { i --> infinity }" " f(x) = { g(x) } over { h(x) } }" } |8ct @Math { - lim atop @SubScriptStyle { i --> infinity } + lim above @SubScriptStyle { i --> infinity } f(x) = { g(x) } over { h(x) } } } diff --git a/doc/user/fmt1.awk b/doc/user/fmt1.awk new file mode 100644 index 0000000..06a6b53 --- /dev/null +++ b/doc/user/fmt1.awk @@ -0,0 +1,12 @@ +BEGIN { + print "@Tbl" + print " mv { 0.5vx }" + print " aformat { @Cell ml { 0i } indent { right } @Code A | @Cell B | @Cell |" + print " @Cell indent { right } @Code C | @Cell D | @Cell |" + print " @Cell indent { right } @Code E | @Cell mr { 0i } F }" + print "{" +} +NR % 3 == 1 { printf "@Rowa\n A { \"%s\" } B { @Math { %s } }\n", $1, $1 } +NR % 3 == 2 { printf " C { \"%s\" } D { @Math { %s } }\n", $1, $1 } +NR % 3 == 0 { printf " E { \"%s\" } F { @Math { %s } }\n", $1, $1 } +END { print "}" } diff --git a/doc/user/fmt2.awk b/doc/user/fmt2.awk new file mode 100644 index 0000000..063acec --- /dev/null +++ b/doc/user/fmt2.awk @@ -0,0 +1,16 @@ +BEGIN { + print "@Tbl" + print " mv { 0.5vx }" + print " aformat { @Cell ml { 0i } indent { right } @Code A | @Cell B | @Cell |" + print " @Cell indent { right } @Code C | @Cell D | @Cell |" + print " @Cell indent { right } @Code E | @Cell mr { 0i } F }" + print "{" +} +NR % 3 == 1 { printf "@Rowa\n" + printf " A { \"%s from { a } to { b }\" }\n", $1 + printf " B { @Math { %s from { a } to { b } } }\n", $1 } +NR % 3 == 2 { printf " C { \"%s from { a } to { b }\" }\n", $1 + printf " D { @Math { %s from { a } to { b } } }\n", $1 } +NR % 3 == 0 { printf " E { \"%s from { a } to { b }\" }\n", $1 + printf " F { @Math { %s from { a } to { b } } }\n", $1 } +END { print "}" } diff --git a/doc/user/fmt_head b/doc/user/fmt_head index 3c902a5..da88b24 100644 --- a/doc/user/fmt_head +++ b/doc/user/fmt_head @@ -316,4 +316,15 @@ probably best to set @Code "@SectionGap" and some similar options to {@Code "2b"} (meaning new page) as well. The @Code "@NumberSeparator" setup file option (Section {@NumberOf largescale}) affects the format of the structured page numbers. +@PP +There is a @Code "@PageNumberFormat" setup file option that +pagenumberformat. @Index @Code "@PageNumberFormat" +allows a uniform format to be applied to every page number. +Its default value, +@ID @Code "@PageNumberFormat { number }" +just produces the number. To change the format, change the +object within the braces. For example, +@ID @Code "@PageNumberFormat { (number) }" +will cause parentheses to be printed around every page number, and so +on. @End @Section diff --git a/doc/user/fmt_marg b/doc/user/fmt_marg index a938670..bc02956 100644 --- a/doc/user/fmt_marg +++ b/doc/user/fmt_marg @@ -23,7 +23,7 @@ are with their default values: @EvenRightMargin { 2.50c } } When setting these options you must ensure that -@ID @Eq { @Code "@OddLeftMargin" + @Code "@OddRightMargin" = +@ID @Math { @Code "@OddLeftMargin" + @Code "@OddRightMargin" = @Code "@EvenLeftMargin" + @Code "@EvenRightMargin" } In other words, the total margin on odd pages must be the same as on even pages. diff --git a/doc/user/fmt_setu b/doc/user/fmt_setu index 991e1f4..acc0da0 100644 --- a/doc/user/fmt_setu +++ b/doc/user/fmt_setu @@ -92,6 +92,7 @@ use. @Index @Code "@Use" # @InitialSpace { lout } # @InitialLanguage { English } # @InitialColour { black } + # @InitialBackgroundColour { white } # @OptimizePages { No } # @HeadingFont { Bold } # @ParaGap { 1.3vx @OrIfPlain 1f } diff --git a/doc/user/gra_data b/doc/user/gra_data index e03c60a..f39c751 100644 --- a/doc/user/gra_data +++ b/doc/user/gra_data @@ -43,21 +43,33 @@ point: C { filledtriangle } D { @GraphFilledTriangle } } -If the @Code "points" option is omitted or empty, nothing is printed. The -symbols are centred over the data point. There is a @Code "symbolsize" +Filled and open squares have exactly the same size, filled and open +diamonds have exactly the same size, and so on. If the @Code "points" +option is omitted or empty, nothing is printed. The symbols are +centred over the data point. There is a @Code "symbolsize" graphs. @RawIndex { graphs (statistical) } graphs.symbolsize @SubIndex { @Code symbolsize option } symbolsize.graph @Index { @Code "symbolsize" option (graphs) } -option which controls the size (radius) of all these symbols: +option which controls the size (radius) of all these symbols, +and a @Code "symbollinewidth" option +@FootNote { +The @Code "symbollinewidth" option was introduced in Version 3.37, +as part of a bug fix which also caused the printed size of some +symbols to change slightly. +} +which controls their line width: @ID @OneRow @Code { "@Data" " symbolsize { 0.15f }" +" symbollinewidth { 0.5p }" } -shows the default, 0.15 times the current font size. More -precisely, the default value is taken from an option -to the @Code "@Graph" symbol, also called {@Code "symbolsize"}. By -setting that option you can therefore set the symbol size of all data -points in the graph at once; its default value is {@Code "0.15f"}. +shows their default values, 0.15 times the current font size and half +a point. More precisely, these default values are taken from options +to the @Code "@Graph" symbol with the same names. By setting those +options you can therefore control all data points in the graph at +once. The @Code "symbollinewidth" option does not affect the +appearance of @Code { filledsquare }, @Code { filleddiamond }, +@Code { filledcircle }, or @Code { filledtriangle }. @PP The @Code "@Data" symbol also has a @Code "pairs" option which graphs. @RawIndex { graphs (statistical) } @@ -366,6 +378,6 @@ the original input was Similarly, {@Code "xonly"} inserts y values 1, 2, and so on. The default value, {@Code "xandy"}, gives the usual interpretation, and {@Code "swapxandy"} exchanges adjacent pairs of numbers: the data -is interpreted as @E { (y, x) } pairs rather than @E { (x, y) } +is interpreted as @M { (y, x) } pairs rather than @M { (x, y) } pairs. The layout of data on lines has no effect on the interpretation. @End @Section diff --git a/doc/user/gra_func b/doc/user/gra_func index a2471bd..a2d6fdc 100644 --- a/doc/user/gra_func +++ b/doc/user/gra_func @@ -11,23 +11,23 @@ available everywhere that x and y coordinates are required: within the @Code xticks and @Code yticks options, within the points within the @Code "objects" option, and within the right parameter of the @Code "@Data" symbol. For example, -@ID @OneRow @Code { -"@Data" -" pairs { solid }" -"{" -" 0 0 pi sin { pi/2 }" -"}" +@ID @OneRow @Code @Verbatim { +@Data + pairs { solid } +{ + 0 0 pi sin { pi/2 } +} } -draws a solid line from @Eq {(0, 0)} to @Eq {(pi, sin(pi "/" 2))}. Section +draws a solid line from @M {(0, 0)} to @M {(pi, sin(pi "/" 2))}. Section {@NumberOf grsummary} lists all the functions; they include the four -arithmetical operators @Eq { non + }, @Eq { non - }, @Eq { non * }, and -@Eq { "/" }, as well as {@Code "sin"}, {@Code "cos"}, {@Code "sqrt"}, and +arithmetical operators @M { non + }, @M { non - }, @M { non * }, and +@M { "/" }, as well as {@Code "sin"}, {@Code "cos"}, {@Code "sqrt"}, and many others. Braces are used for grouping, never parentheses. @PP For plotting functions there are three looping symbols, {@Code "xloop"}, {@Code "yloop"}, and {@Code "zloop"}. For example, the following plots -the two functions @Eq { y = 2 } and @Eq { y = sqrt { pi x "/" 4 } + 1 } -for @Eq { x } from 10 to 500: +the two functions @M { y = 2 } and @M { y = sqrt { pi x "/" 4 } + 1 } +for @M { x } from 10 to 500: @ID -1px @Break @OneRow @Code @Verbatim { -2p @Font @Graph style { axes } @@ -109,7 +109,7 @@ xloop from { -5 } to { +5 } by { 0.2 } do if cond { abs { x } > 0.1 } then { x 1/x } else {} } } -This plots the function @Eq { y = 1 "/" x }, skipping points near +This plots the function @M { y = 1 "/" x }, skipping points near zero. Actually the @Code "else" part could be omitted since its default value is empty. @PP diff --git a/doc/user/gra_keys b/doc/user/gra_keys index 771a258..e3a7e5a 100644 --- a/doc/user/gra_keys +++ b/doc/user/gra_keys @@ -162,10 +162,10 @@ from Section {@NumberOf data}, the complete result is { 1720 10000 1730 11500 1740 12654 1750 18202 1760 23750 1770 34583 } } -The first eight symbols have a @Code "symbolsize" option with the -usual meaning and the usual default value ({@Code "0.15f"}). The -last four symbols have @Code "dashlength" and @Code "linewidth" options -with the usual default values, {@Code "0.2f"} and {@Code "0.5p"} -respectively, and a @Code "length" option, which determines the length +The first eight symbols have a @Code "symbolsize" and @Code "symbollinewidth" +options with the usual meaning and the usual default values ({@Code "0.15f"} +and {@Code "0.5p"}). The last four symbols have @Code "dashlength" and +@Code "linewidth" options with the usual default values, {@Code "0.2f"} and +{@Code "0.5p"}, and a @Code "length" option, which determines the length of the line drawn by each symbol; its default value is {@Code "1.0f"}. @End @Section diff --git a/doc/user/gra_plac b/doc/user/gra_plac index b184ed5..4e686f1 100644 --- a/doc/user/gra_plac +++ b/doc/user/gra_plac @@ -13,14 +13,14 @@ objects.graph @Index { @Code "objects" option (graphs) } @ID @OneRow @Code @Verbatim { @Graph objects { - @CTR at {2.5 6.0} @Eq { y = x sup 2 } - @CTR at {4.5 7.0} @Eq { y = x sup 3 } + @CTR at {2.5 6.0} @Math { y = x sup 2 } + @CTR at {4.5 7.0} @Math { y = x sup 3 } } } -where we have used the @Code "@Eq" symbol from Chapter {@NumberOf equations} -to place two equations onto the graph at the points {@Code "2.5 6.0"} -and {@Code "4.5 7.0"} respectively. An example result appears in the next -section. +where we have used the @Code "@Math" symbol from +Chapter {@NumberOf mathematics} to place two equations onto the graph +at the points {@Code "2.5 6.0"} and {@Code "4.5 7.0"} respectively. An +example result appears in the next section. @PP In addition to {@Code "@CTR"}, there are eight other symbols which may be used within the @Code "objects" option in the same way: {@Code "@NW"}, @@ -49,6 +49,6 @@ other decorations. @PP The @Code "objects" option may contain @Code "@Graph" symbols, but in that case, owing to a deficiency in the implementation, those symbols -will need to have their @Code save options (Section {@NumberOf grerrors}) -set to {@Code yes}. +must have their @Code save options (Section {@NumberOf grerrors}) set +to {@Code yes}. @End @Section diff --git a/doc/user/gra_summ b/doc/user/gra_summ index 15662c1..60e9a8e 100644 --- a/doc/user/gra_summ +++ b/doc/user/gra_summ @@ -196,6 +196,10 @@ automatic } A { symbolsize } B { 0.15f } C { any @I distance } +@Rowa + A { symbollinewidth } + B { 0.5p } + C { any @I distance } } @I Number means an ordinary decimal number; @I distance means a number with a unit of measurement (Section {@NumberOf objects}), such as @@ -273,6 +277,9 @@ their possible values are: @Rowa A { symbolsize } C { any @I distance } +@Rowa + A { symbollinewidth } + C { any @I distance } @Rowb A { @Code "{" @I sequence @Code "}" } C { any @I sequence } @@ -341,7 +348,7 @@ the precedence, if relevant, at right): A { @I expression @Code "rand" @I expression } B { 36 } @Rowa - A { @I expression @Eq { non * } @I expression } + A { @I expression @M { non * } @I expression } B { 35 } @Rowa A { @I expression @Code "/" @I expression } @@ -353,10 +360,10 @@ the precedence, if relevant, at right): A { @I expression @Code "mod" @I expression } B { 34 } @Rowa - A { @I expression @Eq { non - } @I expression } + A { @I expression @M { non - } @I expression } B { 33 } @Rowa - A { @Eq { non - } @I expression } + A { @M { non - } @I expression } B { 33 } @Rowa A { @I expression @Code "+" @I expression } @@ -368,7 +375,7 @@ the precedence, if relevant, at right): A { @Code "if cond {" @I boolean @Code "} then {" @I expression @Code "} else {" @I expression @Code "}" } } -A @Eq { non - } immediately followed by a digit or decimal point is +A @M { non - } immediately followed by a digit or decimal point is always taken to be a minus sign, never a subtraction. The left parameter of @Code "exp" and @Code "log" is the base of the exponentiation and logarithm respectively; @Code "idiv" is integer diff --git a/doc/user/gra_tick b/doc/user/gra_tick index 793390c..23e2402 100644 --- a/doc/user/gra_tick +++ b/doc/user/gra_tick @@ -152,7 +152,7 @@ y ticks: @Data pairs { filledyhisto } colour { blue } - linewidth { 1 pt } + linewidth { 1p } { 0 340 1 410 @@ -205,7 +205,7 @@ y ticks: @Data pairs { solid } colour { red } - linewidth { 1 pt } + linewidth { 1p } { 0.0 24 1.0 24 @@ -250,7 +250,7 @@ come to yet, but anyway its source is: rticks { 0@ 50@ 100@ 150@ 200@ 250@ 300@ 350@ 400@ 450@ } yticks {} { - @Data pairs { filledyhisto } colour { blue } linewidth { 1 pt } + @Data pairs { filledyhisto } colour { blue } linewidth { 1p } { 0 340 1 410 2 430 3 340 4 290 5 175 6 140 7 125 8 110 9 100 10 85 11 175 12 0 @@ -279,7 +279,7 @@ come to yet, but anyway its source is: xticklength { 0c } yticks { -30@ -20@ -10@ 0@ 10@ 20@ 30@ 40@ } { - @Data pairs { solid } colour { red } linewidth { 1 pt } + @Data pairs { solid } colour { red } linewidth { 1p } { 0.0 24 1.0 24 2.0 25 3.0 26 4.0 26 5.0 26 6.0 26 7.0 27 8.0 26 9.0 27 10.0 28 11.0 28 12.0 26 diff --git a/doc/user/mat b/doc/user/mat new file mode 100644 index 0000000..cbead5c --- /dev/null +++ b/doc/user/mat @@ -0,0 +1,40 @@ +@Chapter + @Title { Mathematics } + @Tag { mathematics } +@Begin +@LP +This chapter explains how to produce mathematics in Lout, +equations. @RawIndex { equations @I see mathematics } +mathematics. @Index mathematics +mathematics.math @SubIndex { @Code "@Math" } +math. @Index { @Code "@Math" (mathematics) } +using the @Code "@Math" symbol +@FootNote { +@Code "@Math" follows the equation formatting rules of D. E. Knuth's +knuth @Index { Knuth, D. E. } +tex. @Index { @TeX } +@TeX system. Prior to Version 3.37 of Lout, this chapter described +a symbol called +eq. @Index @Code "@Eq" +{@Code "@Eq"} which was similar to {@Code "@Math"} but less faithful +to those rules. For backward compatibility the @Code "@Eq" symbol +is still available and still works exactly as described in the old +documentation, but there is no reason to use it in new documents. +} +like this: +@ID @Code @Verbatim { +@Math { int from { 0 } to { 1 } dx over sqrt {1 - x sup 2} = pi over 2 } +} +This example produces +@ID @Math { int from { 0 } to { 1 } dx over sqrt {1 - x sup 2} = pi over 2 } +The @Code "@Math" symbol looks after all the details of spacing for +you, and it provides several hundred mathematical symbols. +@BeginSections +@Include { mat_intr } +@Include { mat_comm } +@Include { mat_matr } +@Include { mat_disp } +@Include { mat_defs } +@Include { mat_summ } +@EndSections +@End @Chapter diff --git a/doc/user/mat_comm b/doc/user/mat_comm new file mode 100644 index 0000000..4fbb3a7 --- /dev/null +++ b/doc/user/mat_comm @@ -0,0 +1,124 @@ +@Section + @Title { Commonly used symbols } + @Tag { mat_comm } +@Begin +@PP +@Code "@Math" prints characters in the fonts appropriate for mathematics: +@ID { +@Code "x - 2" +|7ct +@Math { x-2 } +} +Here @Math { x } is in Italic, @Math { 2 } is in Roman, and @Math { minus } +is from the Symbol font. The character @Code "-" is a @I symbol which +stands for @Math {minus}, and @Code "2" is also a symbol, standing for +@Math { 2 }. @Code "@Math" offers a vast array of symbols: +@ID { +@Code "Omega delta integral partial club" +|7ct +@Math { Omega delta integral partial club } +} +This section introduces the most commonly used ones; +Section {@NumberOf mat_summ} has the full list. +@PP +Symbols whose names are made from letters should be separated from each +other by at least one space or end of line, as was done above, or else +@Code "@Math" will become confused: +@ID { +@Code "Omegadelta" +|7ct +@Math { Omegadelta } +} +Symbols whose names are made from digits and punctuation characters can, +however, be run together with each other and with symbols made from +letters: +@ID { +@Code "Omega-delta<=2" +|7ct +@Math { Omega-delta<=2 } +} +This rule applies throughout Lout (Section {@NumberOf spaces}). +@PP +Some symbols join objects together in mathematical ways: +@ID { +@Code "x sub 2" +|7ct +@Math { x sub 2 } +} +Here the @Code "sub" symbol has taken the object just to its left, and +mathematics.sub. @SubIndex { @Code "sub" symbol } +sub. @Index { @Code "sub" symbol (mathematics) } +the object just to its right, and joined them into one object in the +form of a subscript. The two objects are called the left and right +parameters of {@Code "sub"}, and they may be arbitrary Lout objects. +@PP +Similar symbols include {@Code "sup"} for +mathematics.sup. @SubIndex { @Code "sup" symbol } +sup. @Index { @Code "sup" symbol (mathematics) } +superscripting, @Code "over" for built-up fractions, +mathematics.over. @SubIndex { @Code "over" symbol } +over. @Index { @Code "over" symbol (mathematics) } +and @Code sqrt for square roots. +mathematics.sqrt. @SubIndex { @Code "sqrt" symbol } +sqrt. @Index { @Code "sqrt" symbol (mathematics) } +The @Code "-" symbol used earlier is an example of a +@I { binary operator } symbol, and @Code "<=" is +mathematics.binary.operators. @SubIndex { binary operators } +binary.operators. @Index { binary operators (mathematics) } +a @I { relation } symbol. These take the objects +mathematics.relation. @SubIndex { relation symbols } +relation.symbols. @Index { relation symbols (mathematics) } +to their left and right and display them as shown; it's hard +to see, but there is slightly more space around relations +than around binary operators. There are also @I { large operator } +mathematics.large.operators. @SubIndex { large operators } +large.operators. @Index { large operators (mathematics) } +symbols which take @Code { from } and @Code { to } options and +set them as limits: +@ID { +@Code @Verbatim { sum from { i=0 } to { n } i } +|7ct +@Math { sum from { i=0 } to { n } i } +} +As usual in Lout, options are optional, but when given, their values +must be enclosed in braces as shown. Section {@NumberOf mat_summ} +has the full list of large operator symbols. +@PP +All these symbols may be used together to produce complicated +mathematics very easily: +@ID { +@Code @Verbatim { sqrt { x sup 2 + y sup 2 } over 2 } +|7ct +@Math { sqrt { x sup 2 + y sup 2 } over 2 } +} +Braces are used in the usual way for grouping. Leaving them out +creates ambiguities: +@ID @Code "a sup b over c" +There are two possible interpretations for this: +@IndentedList +@LI { +@Code "{a sup b} over c" +|7ct +@ZeroHeight @Math { {a sup b} over c } +} +@LI { +@Code "a sup {b over c}" +|7ct +@Math { a sup {b over c} } +} +@EndList +@Code "@Math" chooses between them in the following way. Every symbol +that takes a parameter also has a {@I precedence}, which is a number +defined in Section {@NumberOf mat_summ}. +mathematics.precedence @SubIndex { precedence of symbols } +precedence.mathematics @Index { precedence of symbols (mathematics) } +The symbol with the higher precedence wins the object lying between +them. White space between two objects is considered to be a symbol +whose precedence is lower than that of any @Code "@Math" symbol. If +two symbols of equal precedence compete for an object, the association +is towards the left. +@PP +In the above case the first interpretation is chosen, because +@Code "sup" has higher precedence than {@Code "over"}. When +in doubt, use braces to make the grouping clear. +@End @Section diff --git a/doc/user/mat_defs b/doc/user/mat_defs new file mode 100644 index 0000000..15d4e05 --- /dev/null +++ b/doc/user/mat_defs @@ -0,0 +1,55 @@ +@Section + @Title { Defining new mathematical symbols } +@Begin +@PP +Whenever you type a particular piece of mathematics repeatedly, you +can save time by using definitions. Definitions are the subject of +Section {@NumberOf definitions}, so here we will just give a few examples +mathematics.definitions @SubIndex { definitions, use with } +definitions. @RawIndex { definitions } +definitions.use.with.mathematics @SubIndex { use with mathematics } +of their use in formatting mathematics. +@PP +Suppose for example that @OneCol @Math { p sub i ` log sub 2 ` p sub i } +occurs frequently in your document. Then +@ID @Code "def epi { p sub i ` log sub 2 ` p sub i }" +makes the symbol @Code "epi" stand for the object between the braces: +@ID { +@Code @Verbatim { sum from { i=1 } to { n } ` epi } +|7ct +@Math { sum from { i=1 } to { n } ` epi } +} +Parameters are very useful when parts of the symbol vary: +@ID @OneRow @Code @Verbatim { +def ep right x +{ + p sub x ` log sub 2 ` p sub x +} +} +The parameter @Code x will be replaced by the object just to the right +of {@Code "ep"}: +@ID { +@Code { +"sum from { i=1 } to { k } ` ep i +" +"sum from { j=k+1 } to { n } ep j" +} +||7ct +@Math { +sum from { i=1 } to { k } ` ep i + +sum from { j=k+1 } to { n } ep j +} +} +The precedence of the symbols you define will be 100 by default. +To make the symbols of @Code "@Math" available within such definitions, +each must be preceded by {@Code "import @Math"}. As explained in Section +{@NumberOf definitions}, the definitions go into a file called +{@Code "mydefs"}, which might look like this: +@ID @OneRow @Code @Verbatim { +import @Math +def epi { p sub i ` log sub 2 ` p sub i } + +import @Math +def ep right x { p sub x ` log sub 2 ` p sub x } +} +Use of @Code "epi" and @Code "ep" outside @Code "@Math" will cause an error. +@End @Section diff --git a/doc/user/mat_disp b/doc/user/mat_disp new file mode 100644 index 0000000..e250850 --- /dev/null +++ b/doc/user/mat_disp @@ -0,0 +1,126 @@ +@Section + @Title { Displaying equations } + @Tag { mathdisplays } +@Begin +@PP +The result of the @Code "@Math" symbol is an object which, according to the +displayed.mathematics @Index { displayed mathematics } +golden rule (Section {@NumberOf objects}), may appear anywhere: inside +a paragraph, inside a table, and so on. In particular, equations are +often displayed using the @Code "@CentredDisplay" or @Code "@IndentedDisplay" +symbols from Section {@NumberOf displays}: +@ID @Code "@IndentedDisplay @Math { ... }" +Now displayed equations are often numbered, and often aligned with one +another on their equals signs. For this there are special display +symbols which are the the subject of this section. These symbols can +align and number any display at all, but since in practice they seem to +be used only with equations, we discuss them here rather than in +Section {@NumberOf displays} where they really belong. +@PP +Let's begin by looking at a first example of a numbered display: +aligned.displays @Index { aligned displays } +aligned.equations @Index { aligned mathematics } +numbered.displays @Index { numbered displays } +numbered.equations @Index { numbered mathematics } +@BeginAlignedDisplays +@CentredAlignedNumberedDisplay + @Tag { fibeq } +@Math { F sub n ^= F sub {n-1} + F sub {n-2} } +After the display we might have some more text for a while, and then +we might want a second display, aligned on its equals sign with the +first, and also numbered in sequence with it: +@CentredAlignedNumberedDisplay +@Math { F sub n - F sub {n-1} ^= F sub {n-2} } +@EndAlignedDisplays +Notice that the two displays are centred as a block as well as +aligned. Altogether there are four ways in which displays vary: +@BL +@LI { A display can be raw or not raw (see below); } +@LI { It can be a {@Code "@Display"}, {@Code "@LeftDisplay"}, +{@Code "@IndentedDisplay"}, {@Code "@QuotedDisplay"}, +{@Code "@CentredDisplay"}, {@Code "@CenteredDisplay"}, +or {@Code "@RightDisplay"}; } +@LI { It can be aligned or not aligned; } +@LI { It can be numbered or not numbered. } +@EL +All possible combinations are allowed. The display that has everything +is called +@ID @Code "@RawCentredAlignedNumberedDisplay" +By leaving out some or all of {@Code Raw}, {@Code Aligned}, and +{@Code Numbered}, and by changing or leaving out {@Code Centred}, +we get all these combinations. The two displays +numbereddisplay. @Index @Code "@NumberedDisplay" +aligneddisplay. @Index @Code "@AlignedDisplay" +given earlier were made like this: +@ID @OneRow @Code @Verbatim { +... a first example of a numbered display: +@BeginAlignedDisplays +@CentredAlignedNumberedDisplay + @Tag { fibeq } +@Math { F sub n ^= F sub {n-1} + F sub {n-2} } +After the display we might ... numbered in sequence with it: +@CentredAlignedNumberedDisplay @Math { F sub n - F sub {n-1} ^= F sub {n-2} } +@EndAlignedDisplays +Notice that the two displays are centred ... +} +All numbered displays have an optional @Code "@Tag" option which is +used for cross referencing (see Section {@NumberOf cross}). Alignment +and numbering work quite independently; they don't have to start or end +together, and there can be non-aligned and non-numbered displays among +the others. +@PP +When aligned displays are used, it is necessary to indicate where the +aligned group begins and ends, by placing @Code "@BeginAlignedDisplays" +beginaligneddisplays @Index @Code "@BeginAlignedDisplays" +endaligneddisplays @Index @Code "@EndAlignedDisplays" +just before the first, and @Code "@EndAlignedDisplays" just after the +last. The alignment points are indicated by preceding them by the +symbol {@Code "^"}, so you aren't restricted to aligning at equals +signs. @Code "@BeginAlignedDisplays" and @Code "@EndAlignedDisplays" +cannot span across several sections or subsections: the equations +aligned by them must lie within a single large-scale structure symbol. +@PP +In our example of aligned and numbered displays, the two displays +were separated by some ordinary text. Very often, though, aligned +displays follow directly after each other. This is a problem, because +if you have one display directly following another there will be too +much vertical space between them. This problem was mentioned in +Section {@NumberOf displays}, and the recommended solution was to +use a list. However, there are no aligned or numbered (in this sense) +lists. +@PP +Fortunately, each display symbol has a `raw' version, which +means that no space is inserted above or below the display. Instead, +raw.displays @Index { raw displays } +you must insert it yourself using paragraph symbols: +@ID @OneRow @Code @Verbatim { +preceding text +@DP +@RawAlignedDisplay @Math { ... } +@DP +@RawAlignedNumberedDisplay @Math { ... } +@DP +following text +} +# You get the right spacing by placing {@Code "@DP"} symbols before, +# between, and after each display; and you get to use the specialized +# displays that you need. +Raw and non-raw displays may be numbered and aligned together. +@PP +Numbered displays are numbered automatically. Depending on where in +the document they appear, the number might include a chapter number +or section number, etc. This is controlled by options in the setup +file; for example, setting @Code "@ChapterNumInDisplays" to @Code Yes +ensures that numbered displays will be numbered afresh at the beginning +of each chapter, and that the number will include a chapter number. There +is also a @Code "@DisplayNumStyle" option which controls the style of +displays; the default value, {@Code "(num)"}, encloses the number in +parentheses as usual for equations. +@PP +Every display symbol has an abbreviated form consisting of @Code "@" +followed by its capital letters only. For example, +@Code "@BeginAlignedDisplays" may be abbreviated to {@Code "@BAD"}, and +the display that has everything to {@Code "@RCAND"}. Owing to an +unfortunate clash between the initial letters of `raw' and `right', +@Code "@RightDisplay" and the other right displays have no abbreviations. +@End @Section diff --git a/doc/user/mat_intr b/doc/user/mat_intr new file mode 100644 index 0000000..24b5347 --- /dev/null +++ b/doc/user/mat_intr @@ -0,0 +1,63 @@ +@Section + @Title { Getting started } +@Begin +@PP +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 if +math.file @Index { @Code "math" file } +you want mathematics, like this: +@ID @OneRow @Code { +"@SysInclude { tbl }" +"@SysInclude { math }" +"@SysInclude { doc }" +"@Doc @Text @Begin" +"..." +"@End @Text" +} +This shows what to do if you want both tables and mathematics, but you +may leave out the line for tables if you don't want them. Setup files +for specialized packages, such as {@Code "tbl"} and {@Code "math"}, +are best included before the main setup file, but may be included in +any order. +@PP +With the @Code "math" file included, you may write +@ID @Code "@Math { ... }" +at any point in your document, and the symbols of @Code "@Math" will be +available between the braces. Any symbols available outside continue +to be available inside, which means that mathematics may be freely mixed +with other symbols. +@PP +The @Code "@Math" symbol may appear anywhere; its job is to produce +an object containing mathematics, and it neither knows nor cares where +that object goes. To display mathematics, use a display symbol +like @Code "@IndentedDisplay" or @Code "@CentredDisplay" +(Section {@NumberOf displays}). For example, +@ID @Code "@CentredDisplay @Math { int from { 0 } to { pi } sin ` x = 0 }" +produces +@CentredDisplay @Math { int from { 0 } to { pi } sin ` x = 0 } +There are also symbols for aligned and numbered displays +(Section {@NumberOf mathdisplays}). +@PP +The @Code "@Math" symbol sets the mathematics in @I { display style }, +mathematics.display.style @SubIndex { display style } +display.style @Index { display style (mathematics) } +a style suited to displays. To get mathematics within a paragraph, +it is best to use a variant of @Code "@Math" called {@Code "@M"}. The +mathematics.maaa @SubIndex { @Code "@M" } +maaa. @Index { @Code "@M" (mathematics) } +value of @Code "@M { ... }" will be kept together on one line, and it +will appear in @I { text style }, a more compact style suited to +mathematics.text.style @SubIndex { text style } +text.style @Index { text style (mathematics) } +mathematics within paragraphs. +@PP +Throughout this chapter we show the Lout input at the left, and its +result at the right: +@ID { +@Code "@Math { {x sup 2 + y sup 2} over 2 }" +|7ct +@Math { {x sup 2 + y sup 2} over 2 } +} +Subsequent examples will omit the enclosing {@Code "@Math { ... }"}. +@End @Section diff --git a/doc/user/mat_matr b/doc/user/mat_matr new file mode 100644 index 0000000..45c9b76 --- /dev/null +++ b/doc/user/mat_matr @@ -0,0 +1,295 @@ +@Section + @Title { Matrices } + @Tag { matrices } +@Begin +@PP +The @Code matrix symbol {@PageMark matrix} builds an array of objects: +mathematics.matrix @SubIndex { @Code "matrix" symbol } +matrix.mathematics @Index { @Code "matrix" symbol (mathematics) } +@ID { +@Code @Verbatim { +matrix + atleft { blpar } + atright { brpar } +{ + row col x sup 2 col y sup 2 col z sup 2 + row col x col y col z + row col 1 col 1 col 1 +} +} +||9ct +@Math { +matrix + atleft { blpar } + atright { brpar } +{ + row col x sup 2 col y sup 2 col z sup 2 + row col x col y col z + row col 1 col 1 col 1 +} +} +} +The @Code atleft and @Code atright options place vertically scaled +versions of their values at each side; if either is omitted the value +is taken to be an empty object of zero width. Although @Code blpar +and @Code brpar are used here, since the options are vertically +scaled it would also be reasonable to use just +@ID @OneRow @Code @Verbatim { +matrix + atleft { ( } + atright { ) } +} +The right parameter of @Code matrix is the array itself. It must be +enclosed in braces. It is a sequence of rows introduced by +@Code row symbols; each row is a sequence of objects introduced +by @Code col symbols. The @Code row and @Code col symbols have +low precedence (Section {@NumberOf mat_summ}), but not as low as +white space between objects, so it is safest to enclose the entries +in braces, except in simple cases. +@PP +Entries built with the @Code col symbol have their objects centred in +the column. Also available are @Code lcol for left-justified entries, +@Code ccol meaning the same as {@Code col}, @Code rcol for +right-justified entries, and @Code mcol for alignment along column +marks. Each column may contain entries of different kinds, except +that @Code mcol does not work well with any other sort. +@PP +When several matrices appear side by side, slight differences in height +can cause an unsightly appearance: +@ID @Math { +matrix + atleft { ( } + atright { ) } +{ + row col a sub 11 col a sub 12 + row col a sub 21 col a sub 22 +} +matrix + atleft { ( } + atright { ) } +{ + row col b sub 11 col b sub 12 + row col b sub 21 col b sub 22 +} += +matrix + atleft { ( } + atright { ) } +{ + row col c sub 11 col c sub 12 + row col c sub 21 col c sub 22 +} +} +To assist in resolving this problem, the @Code "matrix" symbol has +a @Code "strut" option, which causes a strut to be inserted into +every row, guaranteeing that every row has height at least equal +to the height of the strut. By using +@ID @Code { +"matrix" +" strut { Yes }" +"..." +} +in each of the three matrices above, the result is improved to +@ID @Math { +matrix + atleft { ( } + atright { ) } + strut { Yes } +{ + row col a sub 11 col a sub 12 + row col a sub 21 col a sub 22 +} +matrix + atleft { ( } + atright { ) } + strut { Yes } +{ + row col b sub 11 col b sub 12 + row col b sub 21 col b sub 22 +} += +matrix + atleft { ( } + atright { ) } + strut { Yes } +{ + row col c sub 11 col c sub 12 + row col c sub 21 col c sub 22 +} +} +By default, the strut has height @Code "0.5f" (half the current font +size) both above and below the axis of the row. This can be changed +by giving any length as the value of the @Code "strut" option: +@Code "strut { 2.0c }" for two centimetres above and below +the axis, and so on. +@PP +Some symbols are defined which produce `matrices' with commonly needed +@Code atleft and @Code atright options already set for you: +@ID { +@Code { "fmatrix { {n+1} over 2 }" } +|7ct +@Math { fmatrix { {n+1} over 2 } } +} +As this example shows, these symbols are very useful for getting large +scaled delimiters around things that aren't necessarily matrices at all. +Section {@NumberOf mat_summ} has the full list of these symbols. +@PP +Every fragment of mathematics has an @I axis running through it which +is used to position it vertically +mathematics.axis @SubIndex { axis of } +axis @Index { axis (in mathematics) } +with respect to nearby objects. In the Expert's Guide to Lout +@Cite { $kingston1995lout.expert } this is called a @I { row mark }, +but we'll stick with axis. Here are some examples with the axis +shown as a dashed line: +@ID { +@ShowHMark @Math { x sup 2 } +||2c +@ShowHMark @Math { non + } +||2c +@ShowHMark @Math { @ExA } +} +When these objects are placed adjacent to one another, their +axes are merged: +@ID @ShowHMark @Math { x sup 2 + @ExA } +Most of the time you do not need to think about vertical +positioning, because for most objects there is just one +sensible place for the axis to go, and Lout puts it there. +@PP +Matrices and the delimiters that enclose them are the two +exceptions. Lout makes the axis of a matrix pass through +its exact centre, and it shifts the axes of delimiters +so that they exactly enclose the thing delimited. These +choices are never disastrous, but there are other possibilities +that might be better sometimes. +@PP +The axis of a matrix could reasonably be set to the axis +of any of its rows: +@ID { +@ShowHMark @Math { +matrix userow { yes } { + axisrow col { x sup 3 } col { y sup 3 } col { z sup 3 } + row col { x sup 2 } col { y sup 2 } col { z sup 2 } + row col { x } col { y } col { z } +} +} +||2c +@ShowHMark @Math { +matrix userow { yes } { + row col { x sup 3 } col { y sup 3 } col { z sup 3 } + axisrow col { x sup 2 } col { y sup 2 } col { z sup 2 } + row col { x } col { y } col { z } +} +} +||2c +@ShowHMark @Math { +matrix userow { yes } { + row col { x sup 3 } col { y sup 3 } col { z sup 3 } + row col { x sup 2 } col { y sup 2 } col { z sup 2 } + axisrow col { x } col { y } col { z } +} +} +} +Alternatively, it could be set to where Lout usually places it, +through the exact centre: +@ID { +@ShowHMark @Math { +matrix { + row col { x sup 3 } col { y sup 3 } col { z sup 3 } + row col { x sup 2 } col { y sup 2 } col { z sup 2 } + row col { x } col { y } col { z } +} +} +} +Delimiters could reasonably keep the axes that they naturally +have (approximately through their centres, but not exactly): +@ID { +@ShowHMark @Math { pmatrix userow { yes } shiftdelim { no } { @ExA } } +} +or they could have their axes moved in the way that Lout usually does, +to the point which allows them to evenly cover the thing delimited: +@ID { +@ShowHMark @Math { pmatrix userow { yes } { @ExA } } +} +Altogether then there are four possibilities when these two alternatives +interact: +@CD lines @Break @Tbl + aformat { @Cell 0.5w @VShift A | @Cell | @Cell B | @Cell | @Cell C } +{ +@Rowa + A { } + B { Matrix axis +uses row axis } + C { Matrix axis passes +through centre } +@Rowa + A { Delimiter +keeps its axis } + B { @ShowHMark @Math { pmatrix userow {yes} shiftdelim {no } { @ExA } } } + C { @ShowHMark @Math { pmatrix userow {no } shiftdelim {no } { @ExA } } } +@Rowa + A { Delimiter +axis shifted } + B { @ShowHMark @Math { pmatrix userow {yes} shiftdelim {yes} { @ExA } } } + C { @ShowHMark @Math { pmatrix userow {no } shiftdelim {yes} { @ExA } } } +} +To supply these possibilities, the @Code "matrix" symbol and all +its variants (@Code "fmatrix" etc.) have two options whose +values may be {@Code "yes"} or {@Code "no"}: +@ID @Code @Verbatim { +matrix + userow { no } + shiftdelim { yes } +{ + ... +} +} +The @Code "userow" option determines whether the axis of the +matrix will use a row axis; the default is not to, i.e. to +centre the axis. The @Code "shiftdelim" option determines whether +the axis of the delimiter will be shifted so that the delimiter +evenly covers the thing delimited; the default is to do this. +@PP +If @Code "userow" is {@Code "yes"}, the next question is +which row's axis to use to make the overall axis. If you +do nothing, the first (or only) row's axis becomes the +overall axis. To select some other row instead, replace +the @Code "row" symbol that precedes the row by {@Code "axisrow"}: +@ID @Code @Tbl + mv { 0.5vx } + mh { 1s } + aformat { @Cell A | @Cell | @Cell B | @Cell | @Cell C | @Cell | + @Cell D } + bformat { @Cell A | @Cell " col" | @Cell B | @Cell " col" | @Cell C | + @Cell " col" | @Cell D } +{ +@Rowa + A { "matrix userow { yes } {" &0io } +@Rowb + A { " row" } + B { "x sup 3" } + C { "y sup 3" } + D { "z sup 3" } +@Rowb + A { " axisrow" } + B { "x sup 2" } + C { "y sup 2" } + D { "z sup 2" } +@Rowb + A { " row" } + B { "x" } + C { "y" } + D { "z" } +@Rowa + A { "}" } +} +The result of this is +@ID @ShowHMark @Math { +matrix userow { yes } { + row col { x sup 3 } col { y sup 3 } col { z sup 3 } + axisrow col { x sup 2 } col { y sup 2 } col { z sup 2 } + row col { x } col { y } col { z } +} +} +with the axis through the second row as desired. +@End @Section diff --git a/doc/user/mat_summ b/doc/user/mat_summ new file mode 100644 index 0000000..f6bf1a2 --- /dev/null +++ b/doc/user/mat_summ @@ -0,0 +1,1314 @@ +@Section + @Title { Summary } + @Tag { mat_summ } +@Begin +@PP +This section is a complete list of the symbols provided by +{@Code "@Math"}. We divide them into @I { helper }, @I { ordinary }, +@I { variable-building }, @I { large operator }, @I { unary operator }, +@I { binary operator }, @I { relation }, and @I { punctuation } symbols. +mathematics.precedence @SubIndex { precedence of symbols } +precedence.mathematics @Index { precedence of symbols (mathematics) } +The precedences of these symbols, where relevant, are as follows: +@ID @OneRow @Tbl + mv { 0.5vx } + aformat { @Cell ml { 0i } A | @Cell indent { ctr } B | @Cell mr { 0i } C } + afont { Italic } + bformat { @Cell ml { 0i } A | @Cell indent { ctr } B | @Cell mr { 0i } C } +{ +@Rowa + ma { 0i } + A { Symbol type } + B { Precedence } + C { Symbols } + rb { yes } +@Rowb + A { Helper } + B { 100 } + C { @Code { "big" } @Code { "small" } @Code { "vctr" } +@Code { "@SuperScriptStyle" } etc. +# @Code { "@SubScriptStyle" } +# @Code { "@NumeratorStyle" } @Code { "@DenominatorStyle" } +# @Code { "@SquareRootStyle" } +} +@Rowb + A { Variable-building } + B { 84 } + C { @Code { "dot" } @Code { "dotdot" } @Code { "hat" } +@Code { "tilde" } @Code { "vec" } @Code { "dyad" } +@Code { "overbar" } @Code { "underbar" } +} +@Rowb + A { Variable-building } + B { 82 } + C { @Code { "sub" } @Code { "on" } @Code { "ton" } } +@Rowb + A { Variable-building } + B { 80 } + C { @Code { "sup" } @Code { "supp" } } +@Rowb + A { Unary operator } + B { 70 } + C { @Code { sqrt } @Code { root } @Code { zroot } @Code { matrix } etc. } +@Rowb + A { Binary operator } + B { 64 } + C { @Code { "times" } @Code { "*" } } +@Rowb + A { Binary operator } + B { 62 } + C { @Code { "div" } @Code { "frac" } @Code { "over" } } +@Rowb + A { Binary operator } + B { 60 } + C { @Code { "bin" } @Code { "+" } @Code { "-" } and +all other binary operator symbols } +@Rowb + A { Relation } + B { 50 } + C { @Code "rel" and all other relation symbols } +@Rowb + A { Punctuation } + B { 40 } + C { @Code { "punct" } @Code { ";" } @Code { "," } @Code { "col" } } +@Rowb + A { Helper } + B { 26 } + C { @Code "non" } +@Rowb + A { Helper } + B { 24 } + C { @Code { "above" } @Code { "below" } @Code { "wideabove" } +@Code { "widebelow" } +} +@Rowb + A { Helper } + B { 22 } + C { @Code { "col" } @Code { "lcol" } @Code { "ccol" } +@Code { "rcol" } @Code { "mcol" } } +@Rowb + A { Helper } + B { 20 } + C { @Code { "row" } @Code { "axisrow" } } + rb { yes } + mb { 0i } +} +Results are shown in display style in this section; the other styles +give more compressed results. +@BeginSubSections + +@SubSection + @Title { Helper symbols } +@Begin +@LP +The full list of helper symbols is +@ID @OneRow @Tbl + mv { 0.5vx } + aformat { @Cell ml { 0i } A | @Cell mr { 0i } B } +{ +@Rowa + ma { 0i } + A { @Code "`" } + B { Thin space, as after punctuation symbols } +@Rowa + A { @Code "``" } + B { Medium space, as around binary operator symbols } +@Rowa + A { @Code "```" } + B { Thick space, as around relation symbols } +@Rowa + A { @Code "big x" +mathematics.big. @SubIndex { @Code "big" symbol } +big. @Index { @Code "big" symbol (mathematics) } +} + B { Make @Code x larger } +@Rowa + A { @Code "small x" +mathematics.small. @SubIndex { @Code "small" symbol } +small. @Index { @Code "small" symbol (mathematics) } +} + B { Make @Code x smaller } +@Rowa + A { @Code "vctr x" +mathematics.vctr. @SubIndex { @Code "vctr" symbol } +vctr. @Index { @Code "vctr" symbol (mathematics) } +} + B { Centre @Code x vertically } +@Rowa + A { @Code "@SuperScriptStyle x" +mathematics.superscriptstyle. @SubIndex { @Code "@SuperScriptStyle" } +superscriptstyle. @Index { @Code "@SuperScriptStyle" (mathematics) } +} + B { Set @Code x in the style of a superscript } +@Rowa + A { @Code "@SubScriptStyle x" +mathematics.subscriptstyle. @SubIndex { @Code "@SubScriptStyle" } +subscriptstyle. @Index { @Code "@SubScriptStyle" (mathematics) } +} + B { Set @Code x in the style of a subscript } +@Rowa + A { @Code "@NumeratorStyle x" +mathematics.numeratorstyle. @SubIndex { @Code "@NumeratorStyle" } +numeratorstyle. @Index { @Code "@NumeratorStyle" (mathematics) } +} + B { Set @Code x in the style of a numerator } +@Rowa + A { @Code "@DenominatorStyle x" +mathematics.denominatorstyle. @SubIndex { @Code "@DenominatorStyle" } +denominatorstyle. @Index { @Code "@DenominatorStyle" (mathematics) } +} + B { Set @Code x in the style of a denominator } +@Rowa + A { @Code "@SquareRootStyle x" +mathematics.squarerootstyle. @SubIndex { @Code "@SquareRootStyle" } +squarerootstyle. @Index { @Code "@SquareRootStyle" (mathematics) } +} + B { Set @Code x in the style of a square root } +@Rowa + A { @Code { above } @Code { below } @Code { wideabove } +@Code { widebelow } } + B { Vertical stacking (see below) } +@Rowa + A { @Code { "col" } @Code { "lcol" } @Code { "ccol" } +@Code { "rcol" } @Code { "mcol" } @Code { "row" } @Code { "axisrow" } } + B { Used only within matrices (Section {@NumberOf matrices}) } +@Rowa + A { @Code "non x" } + B { Remove spaces from @Code x (see below) } + mb { 0i } +} +where @Code "x" is arbitrary as usual. The @Code "above" symbol prints +mathematics.above. @SubIndex { @Code "above" symbol } +above. @Index { @Code "above" symbol (mathematics) } +the preceding object above the following object, while the @Code "below" +mathematics.below. @SubIndex { @Code "below" symbol } +below. @Index { @Code "below" symbol (mathematics) } +symbol prints it below: +@ID { +@Code @Verbatim { { a above f } + { z below b } } +|7ct +@Math { { a above f } + { z below b } } +} +Here is a larger example: +@ID { @Code @Verbatim { +sum from { { 1 <= i <= p } above + { 1 <= j <= q } above { 1 <= k <= r } } +{ a sub ij b sub jk c sub ki } +} +||7ct +@Math { + sum from { { 1 <= i <= p } above + { 1 <= j <= q } above + { 1 <= k <= r } } + { a sub { ij } b sub { jk } c sub { ki } } +} +} +The @Code "wideabove" and @Code "widebelow" symbols are like @Code "above" +mathematics.wideabove. @SubIndex { @Code "wideabove" symbol } +wideabove. @Index { @Code "wideabove" symbol (mathematics) } +mathematics.widebelow. @SubIndex { @Code "widebelow" symbol } +widebelow. @Index { @Code "widebelow" symbol (mathematics) } +and @Code "below" except that they horizontally scale the right parameter +to the width of the left: +@IL + +@LI { +@Code @Verbatim { +{a, ... , z} wideabove +{90d @Rotate blbrace} +} +||7ct +@Math { {a, ... , z} wideabove {90d @Rotate blbrace} } +} + +@LI { +@Code "{a, ... , z} widebelow minus" +|7ct +@Math { {a, ... , z} widebelow minus } +} +@EL +The @Code "non" symbol prints the following object without the +mathematics.non. @SubIndex { @Code "non" symbol } +non. @Index { @Code "non" symbol (mathematics) } +horizontal spacing it would usually contain. It has low precedence +so that, in examples like +@ID @Code @Verbatim { +The `@M { non <= }' operation is reflexive and transitive. +} +which produces +@ID { +The `@M { non <= }' operation is reflexive and transitive. +} +it is easy to use the familiar symbolic names for relations and +operators without getting the usual surrounding spaces, saving +the trouble of looking up the names of the characters. +@End @SubSection + +@SubSection + @Title { Ordinary symbols } +@Begin +@LP +Ordinary symbols are the simplest symbols. They do not take objects +mathematics.ordinary. @SubIndex { ordinary symbols } +ordinary. @Index { ordinary symbols (mathematics) } +to their left or right, and they always look the same except for the +usual change of size in certain contexts (superscripts, subscripts, etc.). +There are hundreds of these symbols, so they are presented here in groups. +@PP +The first group consists of all the symbols from the Adobe Symbol font; +these are as for the @Code "@Sym" symbol of Section {@NumberOf characters}, +but within @Code "@Math" you don't type {@Code "@Sym"}: +@DP +@Tbl + mv { 0.5vx } + aformat { @Cell ml {@DisplayIndent} indent {right} w {@LCodeWidth} @Code A | + @Cell w {@ResultWidth} B | + @Cell indent {right} w {@CodeWidth} @Code C | + @Cell w {@ResultWidth} D | + @Cell indent {right} w {@CodeWidth} @Code E | + @Cell w {@ResultWidth} mr { 0i } F } +{ +@Rowa + ma { 0i } + A { "space" } B { @Math { space } } + C { "exclam" } D { @Math { exclam } } + E { "universal" } F { @Math { universal } } +@Rowa + A { "numbersign" } B { @Math { numbersign } } + C { "existential" } D { @Math { existential } } + E { "percent" } F { @Math { percent } } +@Rowa + A { "ampersand" } B { @Math { ampersand } } + C { "suchthat" } D { @Math { suchthat } } + E { "parenleft" } F { @Math { parenleft } } +@Rowa + A { "parenright" } B { @Math { parenright } } + C { "asteriskmath" } D { @Math { asteriskmath } } + E { "plus" } F { @Math { plus } } +@Rowa + A { "comma" } B { @Math { comma } } + C { "minus" } D { @Math { minus } } + E { "period" } F { @Math { period } } +@Rowa + A { "slash" } B { @Math { slash } } + C { "zero" } D { @Math { zero } } + E { "one" } F { @Math { one } } +@Rowa + A { "two" } B { @Math { two } } + C { "three" } D { @Math { three } } + E { "four" } F { @Math { four } } +@Rowa + A { "five" } B { @Math { five } } + C { "six" } D { @Math { six } } + E { "seven" } F { @Math { seven } } +@Rowa + A { "eight" } B { @Math { eight } } + C { "nine" } D { @Math { nine } } + E { "colon" } F { @Math { colon } } +@Rowa + A { "semicolon" } B { @Math { semicolon } } + C { "less" } D { @Math { less } } + E { "equal" } F { @Math { equal } } +@Rowa + A { "greater" } B { @Math { greater } } + C { "question" } D { @Math { question } } + E { "congruent" } F { @Math { congruent } } +@Rowa + A { "Alpha" } B { @Math { Alpha } } + C { "Beta" } D { @Math { Beta } } + E { "Chi" } F { @Math { Chi } } +@Rowa + A { "Delta" } B { @Math { Delta } } + C { "Epsilon" } D { @Math { Epsilon } } + E { "Phi" } F { @Math { Phi } } +@Rowa + A { "Gamma" } B { @Math { Gamma } } + C { "Eta" } D { @Math { Eta } } + E { "Iota" } F { @Math { Iota } } +@Rowa + A { "thetaone" } B { @Math { thetaone } } + C { "Kappa" } D { @Math { Kappa } } + E { "Lambda" } F { @Math { Lambda } } +@Rowa + A { "Mu" } B { @Math { Mu } } + C { "Nu" } D { @Math { Nu } } + E { "Omicron" } F { @Math { Omicron } } +@Rowa + A { "Pi" } B { @Math { Pi } } + C { "Theta" } D { @Math { Theta } } + E { "Rho" } F { @Math { Rho } } +@Rowa + A { "Sigma" } B { @Math { Sigma } } + C { "Tau" } D { @Math { Tau } } + E { "Upsilon" } F { @Math { Upsilon } } +@Rowa + A { "sigmaone" } B { @Math { sigmaone } } + C { "Omega" } D { @Math { Omega } } + E { "Xi" } F { @Math { Xi } } +@Rowa + A { "Psi" } B { @Math { Psi } } + C { "Zeta" } D { @Math { Zeta } } + E { "bracketleft" } F { @Math { bracketleft } } +@Rowa + A { "therefore" } B { @Math { therefore } } + C { "bracketright" } D { @Math { bracketright } } + E { "perpendicular" } F { @Math { perpendicular } } +@Rowa + A { "underscore" } B { @Math { underscore } } + C { "radicalex" } D { @Math { radicalex } } + E { "alpha" } F { @Math { alpha } } +@Rowa + A { "beta" } B { @Math { beta } } + C { "chi" } D { @Math { chi } } + E { "delta" } F { @Math { delta } } +@Rowa + A { "epsilon" } B { @Math { epsilon } } + C { "phi" } D { @Math { phi } } + E { "gamma" } F { @Math { gamma } } +@Rowa + A { "eta" } B { @Math { eta } } + C { "iota" } D { @Math { iota } } + E { "phione" } F { @Math { phione } } +@Rowa + A { "kappa" } B { @Math { kappa } } + C { "lambda" } D { @Math { lambda } } + E { "mu" } F { @Math { mu } } +@Rowa + A { "nu" } B { @Math { nu } } + C { "omicron" } D { @Math { omicron } } + E { "pi" } F { @Math { pi } } +@Rowa + A { "theta" } B { @Math { theta } } + C { "rho" } D { @Math { rho } } + E { "sigma" } F { @Math { sigma } } +@Rowa + A { "tau" } B { @Math { tau } } + C { "upsilon" } D { @Math { upsilon } } + E { "omegaone" } F { @Math { omegaone } } +@Rowa + A { "omega" } B { @Math { omega } } + C { "xi" } D { @Math { xi } } + E { "psi" } F { @Math { psi } } +@Rowa + A { "zeta" } B { @Math { zeta } } + C { "braceleft" } D { @Math { braceleft } } + E { "bar" } F { @Math { bar } } +@Rowa + A { "braceright" } B { @Math { braceright } } + C { "similar" } D { @Math { similar } } + E { "Upsilonone" } F { @Math { Upsilonone } } +@Rowa + A { "minute" } B { @Math { minute } } + C { "lessequal" } D { @Math { lessequal } } + E { "fraction" } F { @Math { fraction } } +@Rowa + A { "infinity" } B { @Math { infinity } } + C { "florin" } D { @Math { florin } } + E { "club" } F { @Math { club } } +@Rowa + A { "diamond" } B { @Math { diamond } } + C { "heart" } D { @Math { heart } } + E { "spade" } F { @Math { spade } } +@Rowa + A { "arrowboth" } B { @Math { arrowboth } } + C { "arrowleft" } D { @Math { arrowleft } } + E { "arrowup" } F { @Math { arrowup } } +@Rowa + A { "arrowright" } B { @Math { arrowright } } + C { "arrowdown" } D { @Math { arrowdown } } + E { "degree" } F { @Math { degree } } +@Rowa + A { "plusminus" } B { @Math { plusminus } } + C { "second" } D { @Math { second } } + E { "greaterequal" } F { @Math { greaterequal } } +@Rowa + A { "multiply" } B { @Math { multiply } } + C { "proportional" } D { @Math { proportional } } + E { "partialdiff" } F { @Math { partialdiff } } +@Rowa + A { "bullet" } B { @Math { bullet } } + C { "divide" } D { @Math { divide } } + E { "notequal" } F { @Math { notequal } } +@Rowa + A { "equivalence" } B { @Math { equivalence } } + C { "approxequal" } D { @Math { approxequal } } + E { "ellipsis" } F { @Math { ellipsis } } +@Rowa + A { "arrowvertex" } B { @Math { arrowvertex } } + C { "arrowhorizex" } D { @Math { arrowhorizex } } + E { "carriagereturn" } F { @Math { carriagereturn } } +@Rowa + A { "aleph" } B { @Math { aleph } } + C { "Ifraktur" } D { @Math { Ifraktur } } + E { "Rfraktur" } F { @Math { Rfraktur } } +@Rowa + A { "weierstrass" } B { @Math { weierstrass } } + C { "circlemultiply" } D { @Math { circlemultiply } } + E { "circleplus" } F { @Math { circleplus } } +@Rowa + A { "emptyset" } B { @Math { emptyset } } + C { "intersection" } D { @Math { intersection } } + E { "union" } F { @Math { union } } +@Rowa + A { { 0.92 1.0 } @Scale "propersuperset" } B { @Math { propersuperset } } + C { "reflexsuperset" } D { @Math { reflexsuperset } } + E { "notsubset" } F { @Math { notsubset } } +@Rowa + A { "propersubset" } B { @Math { propersubset } } + C { "reflexsubset" } D { @Math { reflexsubset } } + E { "element" } F { @Math { element } } +@Rowa + A { "notelement" } B { @Math { notelement } } + C { "angle" } D { @Math { angle } } + E { "gradient" } F { @Math { gradient } } +@Rowa + A { "registerserif" } B { @Math { registerserif } } + C { "copyrightserif" } D { @Math { copyrightserif } } + E { "trademarkserif" } F { @Math { trademarkserif } } +@Rowa + A { "product" } B { @Math { product } } + C { "radical" } D { @Math { radical } } + E { "dotmath" } F { @Math { dotmath } } +@Rowa + A { "logicalnot" } B { @Math { logicalnot } } + C { "logicaland" } D { @Math { logicaland } } + E { "logicalor" } F { @Math { logicalor } } +@Rowa + A { "arrowdblboth" } B { @Math { arrowdblboth } } + C { "arrowdblleft" } D { @Math { arrowdblleft } } + E { "arrowdblup" } F { @Math { arrowdblup } } +@Rowa + A { "arrowdblright" } B { @Math { arrowdblright } } + C { "arrowdbldown" } D { @Math { arrowdbldown } } + E { "lozenge" } F { @Math { lozenge } } +@Rowa + A { "angleleft" } B { @Math { angleleft } } + C { "registersans" } D { @Math { registersans } } + E { "copyrightsans" } F { @Math { copyrightsans } } +@Rowa + A { { 0.92 1.0 } @Scale "trademarksans" } B { @Math { trademarksans } } + C { "summation" } D { @Math { summation } } + E { "parenlefttp" } F { @Math { parenlefttp } } +@Rowa + A { "parenleftex" } B { @Math { parenleftex } } + C { "parenleftbt" } D { @Math { parenleftbt } } + E { "bracketlefttp" } F { @Math { bracketlefttp } } +@Rowa + A { "bracketleftex" } B { @Math { bracketleftex } } + C { "bracketleftbt" } D { @Math { bracketleftbt } } + E { "bracelefttp" } F { @Math { bracelefttp } } +@Rowa + A { "braceleftmid" } B { @Math { braceleftmid } } + C { "braceleftbt" } D { @Math { braceleftbt } } + E { "braceex" } F { @Math { braceex } } +@Rowa + A { "angleright" } B { @Math { angleright } } + C { "integral" } D { @Math { integral } } + E { "integraltp" } F { @Math { integraltp } } +@Rowa + A { "integralex" } B { @Math { integralex } } + C { "integralbt" } D { @Math { integralbt } } + E { "parenrighttp" } F { @Math { parenrighttp } } +@Rowa + A { "parenrightex" } B { @Math { parenrightex } } + C { "parenrightbt" } D { @Math { parenrightbt } } + E { "bracketrighttp" } F { @Math { bracketrighttp } } +@Rowa + A { "bracketrightex" } B { @Math { bracketrightex } } + C { "bracketrightbt" } D { @Math { bracketrightbt } } + E { "bracerighttp" } F { @Math { bracerighttp } } +@Rowa + A { "bracerightmid" } B { @Math { bracerightmid } } + C { "bracerightbt" } D { @Math { bracerightbt } } + mb { 0i } +} +@DP +The symbols that produce the Symbol font characters @Code { theta1 }, +@Code { sigma1 }, @Code { phi1 }, @Code { omega1 }, and @Code { Upsilon1 } +are called @Code { thetaone }, @Code { sigmaone }, @Code { phione }, +@Code { omegaone }, and @Code { Upsilonone }, since Lout symbol names +cannot contain both letters and digits. The second group of ordinary +symbols produces arrows: +@ID @OneRow @Tbl + mv { 0.5vx } + aformat { @Cell ml{0i} indent{right} w{@LCodeWidth} @Code A | + @Cell w {@ResultWidth} B | + @Cell indent {right} w {@CodeWidth} @Code C | + @Cell w {@ResultWidth} D | + @Cell indent {right} w {@CodeWidth} @Code E | + @Cell w {@ResultWidth} mr { 0i } F } +{ +@Rowa + ma { 0i } + A { "leftarrow" } B { @Math { leftarrow } } + C { "longleftarrow" } D { @Math { longleftarrow } } + E { "dblleftarrow" } F { @Math { dblleftarrow } } +@Rowa + A { "dbllongleftarrow" } B { @Math { dbllongleftarrow } } + C { "rightarrow" } D { @Math { rightarrow } } + E { "longrightarrow" } F { @Math { longrightarrow } } +@Rowa + A { "dblrightarrow" } B { @Math { dblrightarrow } } + C { "dbllongrightarrow" } D { @Math { dbllongrightarrow } } + E { "leftrightarrow" } F { @Math { leftrightarrow } } +@Rowa + A { "longleftrightarrow" } B { @Math { longleftrightarrow } } + C { "dblleftrightarrow" } D { @Math { dblleftrightarrow } } + E { { 0.85 1.0 } @Scale "dbllongleftrightarrow" } + F { @Math { dbllongleftrightarrow } } +@Rowa + A { "mapsto" } B { @Math { mapsto } } + C { "longmapsto" } D { @Math { longmapsto } } + E { "hookleftarrow" } F { @Math { hookleftarrow } } +@Rowa + A { "hookrightarrow" } B { @Math { hookrightarrow } } + C { "leadsto" } D { @Math { leadsto } } + E { "leftharpoonup" } F { @Math { leftharpoonup } } +@Rowa + A { "rightharpoonup" } B { @Math { rightharpoonup } } + C { "leftharpoondown" } D { @Math { leftharpoondown } } + E { { 0.95 1.0 } @Scale "rightharpoondown" } F { @Math { rightharpoondown } } +@Rowa + A { "rightleftharpoons" } B { @Math { rightleftharpoons } } + C { "uparrow" } D { @Math { uparrow } } + E { "dbluparrow" } F { @Math { dbluparrow } } +@Rowa + A { "downarrow" } B { @Math { downarrow } } + C { "dbldownarrow" } D { @Math { dbldownarrow } } + E { "updownarrow" } F { @Math { updownarrow } } +@Rowa + A { "dblupdownarrow" } B { @Math { dblupdownarrow } } + C { "nearrow" } D { @Math { nearrow } } + E { "searrow" } F { @Math { searrow } } +@Rowa + A { "swarrow" } B { @Math { swarrow } } + C { "nwarrow" } D { @Math { nwarrow } } + mb { 0i } +} +The members of the third group of ordinary symbols stand for themselves, +but in Roman font rather than the Italic which is the default in +mathematics: +@ID @OneRow @Tbl + mv { 0.45vx } + aformat { @Cell ml {0i} indent {right} w {@LCodeWidth} @Code A | + @Cell w {@ResultWidth} B | + @Cell indent {right} w {@CodeWidth} @Code C | + @Cell w {@ResultWidth} D | + @Cell indent {right} w {@CodeWidth} @Code E | + @Cell w {@ResultWidth} mr { 0i } F } +{ +@Rowa + ma { 0i } + A { "arccos" } B { @Math { arccos } } + C { "arcsin" } D { @Math { arcsin } } + E { "arctan" } F { @Math { arctan } } +@Rowa + A { "arg" } B { @Math { arg } } + C { "cos" } D { @Math { cos } } + E { "cosh" } F { @Math { cosh } } +@Rowa + A { "cot" } B { @Math { cot } } + C { "coth" } D { @Math { coth } } + E { "csc" } F { @Math { csc } } +@Rowa + A { "deg" } B { @Math { deg } } + C { "det" } D { @Math { det } } + E { "dim" } F { @Math { dim } } +@Rowa + A { "exp" } B { @Math { exp } } + C { "gcd" } D { @Math { gcd } } + E { "hom" } F { @Math { hom } } +@Rowa + A { "inf" } B { @Math { inf } } + C { "ker" } D { @Math { ker } } + E { "lg" } F { @Math { lg } } +@Rowa + A { "lim" } B { @Math { lim } } + C { "liminf" } D { @ZeroWidth @Math { liminf } } + E { "limsup" } F { @Math { limsup } } +@Rowa + A { "ln" } B { @Math { ln } } + C { "log" } D { @Math { log } } + E { "max" } F { @Math { max } } +@Rowa + A { "min" } B { @Math { min } } + C { "Pr" } D { @Math { Pr } } + E { "sec" } F { @Math { sec } } +@Rowa + A { "sin" } B { @Math { sin } } + C { "sinh" } D { @Math { sinh } } + E { "supr" } F { @Math { supr } } +@Rowa + A { "tan" } B { @Math { tan } } + C { "tanh" } D { @Math { tanh } } + E { "mod" } F { @Math { mod } } +@Rowa + A { "0" } B { @Math { 0 } } + C { "1" } D { @Math { 1 } } + E { "2" } F { @Math { 2 } } +@Rowa + A { "3" } B { @Math { 3 } } + C { "4" } D { @Math { 4 } } + E { "5" } F { @Math { 5 } } +@Rowa + A { "6" } B { @Math { 6 } } + C { "7" } D { @Math { 7 } } + E { "8" } F { @Math { 8 } } +@Rowa + A { "9" } B { @Math { 9 } } + C { "!" } D { @Math { ! } } + E { "?" } F { @Math { ? } } +@Rowa + A { "%" } B { @Math { % } } + C { "(" } D { @Math { ( } } + E { ")" } F { @Math { ) } } +@Rowa + A { "[" } B { @Math { [ } } + C { "]" } D { @Math { ] } } + mb { 0i } +} +The fourth group make good values for the @Code "atleft" and +@Code "atright" options of @Code { matrix }: +@ID @OneRow @Tbl + mv { 0.5vx } + aformat { @Cell ml { 0i } indent { right } w {@LCodeWidth} @Code A | @Cell B | @Cell | + @Cell indent { right } @Code C | @Cell D | @Cell | + @Cell indent { right } @Code E | @Cell F | @Cell | + @Cell indent { right } @Code G | @Cell mr { 0i } H } +{ +@Rowa + ma { 0i } + strut { 1.2f } + A { "lpar" } B { @Math { lpar } } + C { "rpar" } D { @Math { rpar } } + E { "lbrack" } F { @Math { lbrack } } + G { "rbrack" } H { @Math { rbrack } } +@Rowa + strut { 1.2f } + A { "lbrace" } B { @Math { lbrace } } + C { "rbrace" } D { @Math { rbrace } } + E { "lfloor" } F { @Math { lfloor } } + G { "rfloor" } H { @Math { rfloor } } +@Rowa + strut { 1.2f } + A { "lceil" } B { @Math { lceil } } + C { "rceil" } D { @Math { rceil } } + E { "langle" } F { @Math { langle } } + G { "rangle" } H { @Math { rangle } } +@Rowa + strut { 3.5f } + A { "blpar" } B { @Math { blpar } } + C { "brpar" } D { @Math { brpar } } + E { "blbrack" } F { @Math { blbrack } } + G { "brbrack" } H { @Math { brbrack } } +@Rowa + strut { 3.5f } + A { "blbrace" } B { @Math { blbrace } } + C { "brbrace" } D { @Math { brbrace } } + E { "blfloor" } F { @Math { blfloor } } + G { "brfloor" } H { @Math { brfloor } } +@Rowa + strut { 3.5f } + A { "blceil" } B { @Math { blceil } } + C { "brceil" } D { @Math { brceil } } + E { "blangle" } F { @Math { blangle } } + G { "brangle" } H { @Math { brangle } } + mb { 0i } +} +The last group is miscellaneous: +@DP +@RID @OneRow @Tbl + mv { 0.5vx } + aformat { @Cell ml {0i} indent {right} w {@LCodeWidth} @Code A | + @Cell w {@ResultWidth} B | + @Cell indent {right} w {@CodeWidth} @Code C | + @Cell w {@ResultWidth} D | + @Cell indent {right} w {@CodeWidth} @Code E | + @Cell w {@ResultWidth} mr { 0i } F } +{ +@Rowa + ma { 0i } + A { "hbar" } B { @Math { hbar } } + C { "Re" } D { @Math { Re } } + E { "Im" } F { @Math { Im } } +@Rowa + A { "partial" } B { @Math { partial } } + C { "infty" } D { @Math { infty } } + E { "prime" } F { @Math { prime } } +@Rowa + A { "nabla" } B { @Math { nabla } } + C { "surd" } D { @Math { surd } } + E { "top" } F { @Math { top } } +@Rowa + A { "bot" } B { @Math { bot } } + C { "dbar" } D { @Math { dbar } } + E { "triangle" } F { @Math { triangle } } +@Rowa + A { "backslash" } B { @Math { backslash } } + C { "forall" } D { @Math { forall } } + E { "exists" } F { @Math { exists } } +@Rowa + A { "neg" } B { @Math { neg } } + C { "circle" } D { @Math { circle } } + E { "filledcircle" } F { @Math { filledcircle } } +@Rowa + A { "square" } B { @Math { square } } + C { "ldots" } D { @Math { ldots } } + E { "cdots" } F { @Math { cdots } } +@Rowa + A { "vdots" } B { @Math { vdots } } + C { "ddots" } D { @Math { ddots } } + E { "del" } F { @Math { del } } +@Rowa + A { "grad" } B { @Math { grad } } + C { "..." } D { @Math { ... } } + E { ",...," } F { @Math { ,..., } } +@Rowa + A { "'" } B { @Math { ' } } + C { "''" } D { @Math { '' } } + E { "'''" } F { @Math { ''' } } +@Rowa + A { "''''" } B { @Math { '''' } } + C { "empty" } D { @Math { empty } } + E { "triangleup" } F { @Math { triangleup } } +@Rowa + A { "triangledown" } B { @Math { triangledown } } + C { "half" } D { @Math { half } } + E { "third" } F { @Math { third } } + mb { 0i } +} +@End @SubSection + +@SubSection + @Title { Variable-building symbols } +@Begin +@LP +Under this category are symbols that are mainly used to build +mathematics.variablebuilding. @SubIndex { variable-building symbols } +variablebuilding. @Index { variable-building symbols (mathematics) } +variables. However, as usual in Lout, the objects they link +together may in fact be arbitrary. First we have symbols that +place a mark over or under an object: +mathematics.dot. @SubIndex { @Code "dot" symbol } +dot. @Index { @Code "dot" symbol (mathematics) } +mathematics.dotdot. @SubIndex { @Code "dotdot" symbol } +dotdot. @Index { @Code "dotdot" symbol (mathematics) } +mathematics.hat. @SubIndex { @Code "hat" symbol } +hat. @Index { @Code "hat" symbol (mathematics) } +mathematics.tilde. @SubIndex { @Code "tilde" symbol } +tilde. @Index { @Code "tilde" symbol (mathematics) } +mathematics.vec. @SubIndex { @Code "vec" symbol } +vec. @Index { @Code "vec" symbol (mathematics) } +mathematics.dyad. @SubIndex { @Code "dyad" symbol } +dyad. @Index { @Code "dyad" symbol (mathematics) } +mathematics.overbar. @SubIndex { @Code "overbar" symbol } +overbar. @Index { @Code "overbar" symbol (mathematics) } +mathematics.underbar. @SubIndex { @Code "underbar" symbol } +underbar. @Index { @Code "underbar" symbol (mathematics) } +@ID @Tbl + mv { 0.5vx } + aformat { @Cell ml{0i} indent{right} w{@LCodeWidth} @Code A | + @Cell w {@ResultWidth} B | + @Cell indent {right} w {@CodeWidth} @Code C | + @Cell w {@ResultWidth} D | + @Cell indent {right} w {@CodeWidth} @Code E | + @Cell w {@ResultWidth} mr { 0i } F } +{ +@Rowa + ma { 0i } + A { "x dot" } B { @Math { x dot } } + C { "x dotdot" } D { @Math { x dotdot } } + E { "x hat" } F { @Math { x hat } } +@Rowa + A { "x tilde" } B { @Math { x tilde } } + C { "x vec" } D { @Math { x vec } } + E { "x dyad" } F { @Math { x dyad } } +@Rowa + A { "{x + y} overbar" } B { @Math { {x + y} overbar } } + C { "{x + y} underbar" } D { @Math { {x + y} underbar } } + mb { 0i } +} +These marks are centred, with a small skew to allow for italic +slant, except the last two which are extended to the width of +the object. +@PP +The remaining variable-building symbols produce superscripts and +subscripts: +# These differ in appearance depending on the style, +mathematics.sup. @SubIndex { @Code "sup" symbol } +sup. @Index { @Code "sup" symbol (mathematics) } +mathematics.sub. @SubIndex { @Code "sub" symbol } +sub. @Index { @Code "sub" symbol (mathematics) } +mathematics.tsub. @SubIndex { @Code "tsub" symbol } +tsub. @Index { @Code "tsub" symbol (mathematics) } +mathematics.supp. @SubIndex { @Code "supp" symbol } +supp. @Index { @Code "supp" symbol (mathematics) } +mathematics.on. @SubIndex { @Code "on" symbol } +on. @Index { @Code "on" symbol (mathematics) } +mathematics.ton. @SubIndex { @Code "ton" symbol } +ton. @Index { @Code "ton" symbol (mathematics) } +so the results are shown in both display and text style: +@ID @Tbl + mv { 0.6vx } + # aformat { @Cell ml {0i} indent {right} @Code A | @Cell B | @Cell C | @Cell | + # @Cell indent {right} @Code D | @Cell E | @Cell F | @Cell | + # @Cell indent {right} @Code G | @Cell H | @Cell mr {0i} I } + aformat { @Cell ml {0i} indent {right} @Code A | @Cell B | @Cell | + @Cell indent {right} @Code D | @Cell E | @Cell | + @Cell indent {right} @Code G | @Cell mr {0i} H } +{ +@Rowa + ma { 0i } + A { "x sup y" } B { @Math { x sup y } } C { @M { x sup y } } + D { "x sub y" } E { @Math { x sub y } } F { @M { x sub y } } + G { "W tsub y" } H { @Math { W tsub y } } I { @M { W tsub y } } +@Rowa + A { "x supp y on z" } B { @Math {x supp y on z } } C { @M {x supp y on z } } + D { "W supp y ton z" } E { @Math {W supp y ton z} } F { @M {W supp y ton z} } + mb { 0i } +} +The @Code "supp" and @Code "on" (or {@Code "ton"}) symbols must be +used together as shown; @Code "tsub" and @Code "ton" are exactly like +@Code "sub" and @Code "on" except that the subscript is tucked in. +@End @SubSection + +@SubSection + @Title { Large operator symbols } +@Begin +@LP +Large operator symbols have @Code "from" and @Code "to" +mathematics.large.operators. @SubIndex { large operators } +large.operators. @Index { large operators (mathematics) } +options which work as described for the @Code "sum" symbol +in Section {@NumberOf mat_comm}. Here they all are, with +their results in both display style and text style: +@CD @OneRow @Tbl + mv { 0.7vx } + strut { 2.5f } + aformat { @Cell ml {0i} indent {right} @Code A | @Cell B | @Cell C | @Cell | + @Cell indent {right} @Code D | @Cell E | @Cell mr {0i} F } +{ +@Rowa + ma { 0i } + A { "sum from { a } to { b } x" } + B { @Math { sum from { a } to { b } x } } + C { @M { sum from { a } to { b } x } } + D { "prod from { a } to { b } x" } + E { @Math { prod from { a } to { b } x } } + F { @M { prod from { a } to { b } x } } +@Rowa + A { "coprod from { a } to { b } x" } + B { @Math { coprod from { a } to { b } x } } + C { @M { coprod from { a } to { b } x } } + D { "bcap from { a } to { b } x" } + E { @Math { bcap from { a } to { b } x } } + F { @M { bcap from { a } to { b } x } } +@Rowa + A { "bcup from { a } to { b } x" } + B { @Math { bcup from { a } to { b } x } } + C { @M { bcup from { a } to { b } x } } + D { "bvee from { a } to { b } x" } + E { @Math { bvee from { a } to { b } x } } + F { @M { bvee from { a } to { b } x } } +@Rowa + A { "bwedge from { a } to { b } x" } + B { @Math { bwedge from { a } to { b } x } } + C { @M { bwedge from { a } to { b } x } } + D { "bodot from { a } to { b } x" } + E { @Math { bodot from { a } to { b } x } } + F { @M { bodot from { a } to { b } x } } +@Rowa + A { "botimes from { a } to { b } x" } + B { @Math { botimes from { a } to { b } x } } + C { @M { botimes from { a } to { b } x } } + D { "boplus from { a } to { b } x" } + E { @Math { boplus from { a } to { b } x } } + F { @M { boplus from { a } to { b } x } } +@Rowa + A { "buplus from { a } to { b } x" } + B { @Math { buplus from { a } to { b } x } } + C { @M { buplus from { a } to { b } x } } + D { "int from { a } to { b } x" } + E { @Math { int from { a } to { b } x } } + F { @M { int from { a } to { b } x } } +@Rowa + A { "oint from { a } to { b } x" } + B { @Math { oint from { a } to { b } x } } + C { @M { oint from { a } to { b } x } } + mb { 0i } +} +All these symbols also have a @Code "limits" option; when set to +@Code "yes" it causes the limits to be shown above and below the +symbol, when @Code "no" it causes them to be shown as superscripts and +subscripts, and when omitted it defaults to @Code "yes" in display style +and @Code "no" otherwise, except for integrals, where the default is +uniformly @Code "no" as required by mathematical convention. +@PP +The @Code "largeop" symbol causes an arbitrary object to be treated +mathematics.largeop. @SubIndex { @Code "largeop" symbol } +largeop. @Index { @Code "largeop" symbol (mathematics) } +options which work as described for the @Code "sum" symbol +as a large operator: +@ID { +@Code @Verbatim { largeop symbol { diamond } from { a } to { b } x } +|10ct +@Math { largeop symbol { diamond } from { a } to { b } x } +} +In addition to {@Code "limits"}, {@Code "from"}, and {@Code "to"} +options, @Code "largeop" has a @Code "symbol" option holding the +object to be made into a large operator. In display style, this +object is enlarged using the @Code "big" helper function. +@End @SubSection + +@SubSection + @Title { Unary operator symbols } +@Begin +@LP +This category mainly contains symbols that take one object on the right +mathematics.unaryoperator. @SubIndex { unary operators } +unaryoperator. @Index { unary operators (mathematics) } +and transform it. +@IL + +@LI { +@Code "sqrt {x over y}" +|7ct +@Math { sqrt {x over y} } +mathematics.sqrt. @SubIndex { @Code "sqrt" symbol } +sqrt. @Index { @Code "sqrt" symbol (mathematics) } +} + +@LI { +@Code "3 root {x over y}" +|7ct +@Math { 3 root {x over y} } +mathematics.root @SubIndex { @Code "root" symbol } +root.mathematics @Index { @Code "root" symbol (mathematics) } +} + +@LI { +@Code @Verbatim { matrix atleft { ( } atright { ) } { x } } +|7ct @Math { matrix atleft { ( } atright { ) } { x } } +} + +@EL +As usual, any object may appear to the left of {@Code "root"}. +The @Code "matrix" symbol produces matrices, as explained in +detail in Section {@NumberOf matrices}. Its following object +must be enclosed in braces. +@PP +There are symbols which produce `matrices' with commonly needed +@Code atleft and @Code atright options already set for you. Here are +these symbols, on the left, with the equivalent @Code matrix symbol +and, on the right, the result produced: +@ID @Tbl + aformat { @Cell ml { 0i } @Code A | @Cell | @Cell @Code B | + @Cell | @Cell mr { 0i } C } +{ +@Rowa + ma { 0i } + A { "pmatrix { M }" } + B { "matrix atleft { ( } atright { ) } { M }" } + C { @Math { pmatrix { M } } +mathematics.pmatrix @SubIndex { @Code "pmatrix" symbol } +pmatrix.mathematics @Index { @Code "pmatrix" symbol (mathematics) } +} +@Rowa + A { "bmatrix { M }" } + B { "matrix atleft { blbrack } atright { brbrack } { M }" } + C { @Math { bmatrix { M } } +mathematics.bmatrix @SubIndex { @Code "bmatrix" symbol } +bmatrix.mathematics @Index { @Code "bmatrix" symbol (mathematics) } +} +@Rowa + A { "brmatrix { M }" } + B { "matrix atleft { blbrace } atright { brbrace } { M }" } + C { @Math { brmatrix { M } } +mathematics.brmatrix @SubIndex { @Code "brmatrix" symbol } +brmatrix.mathematics @Index { @Code "brmatrix" symbol (mathematics) } +} +@Rowa + A { "fmatrix { M }" } + B { "matrix atleft { blfloor } atright { brfloor } { M }" } + C { @Math { fmatrix { M } } +mathematics.fmatrix @SubIndex { @Code "fmatrix" symbol } +fmatrix.mathematics @Index { @Code "fmatrix" symbol (mathematics) } +} +@Rowa + A { "cmatrix { M }" } + B { "matrix atleft { blceil } atright { brceil } { M }" } + C { @Math { cmatrix { M } } +mathematics.cmatrix @SubIndex { @Code "cmatrix" symbol } +cmatrix.mathematics @Index { @Code "cmatrix" symbol (mathematics) } +} +@Rowa + A { "amatrix { M }" } + B { "matrix atleft { blangle } atright { brangle } { M }" } + C { @Math { amatrix { M } } +mathematics.amatrix @SubIndex { @Code "amatrix" symbol } +amatrix.mathematics @Index { @Code "amatrix" symbol (mathematics) } +} + mb { 0i } +} +These are very useful for getting large scaled delimiters around things +that aren't necessarily matrices at all. +@End @SubSection + +@SubSection + @Title { Binary operator symbols } +@Begin +@LP +The symbols in this category take an object on the left and on +mathematics.binary.operators. @SubIndex { binary operators } +binary.operators. @Index { binary operators (mathematics) } +the right. The first two produce built-up fractions: +mathematics.over. @SubIndex { @Code "over" symbol } +over. @Index { @Code "over" symbol (mathematics) } +mathematics.frac @SubIndex { @Code "frac" symbol } +frac.mathematics @Index { @Code "frac" symbol (mathematics) } +@ID @Tbl + aformat { @Cell ml { 0i } indent { right } @Code A | @Cell B | @Cell | + @Cell indent { right } @Code C | @Cell mr { 0i } D } +{ +@Rowa + ma { 0i } + A { "x over y" } B { @Math { x over y } } + C { "x frac y" } D { @Math { x frac y } } + mb { 0i } +} +The remaining binary operator symbols print the objects to the +left and right separated by the operator with a medium-width +space on each side. Most have precedence 80, but a few (those +representing multiplication and division operations) have higher +precedence in accordance with mathematical convention. Here is +the full list of these operators: +@ID @Tbl + mv { 0.5vx } + aformat { @Cell ml{0i} indent{right} w{@LCodeWidth} @Code A | + @Cell w {@ResultWidth} B | + @Cell indent {right} w {@CodeWidth} @Code C | + @Cell w {@ResultWidth} D | + @Cell indent {right} w {@CodeWidth} @Code E | + @Cell w {@ResultWidth} mr { 0i } F } +{ +@Rowa + ma { 0i } + A { "x + y" } B { @Math { x + y } } + C { "x - y" } D { @Math { x - y } } + E { "x +- y" } F { @Math { x +- y } } +@Rowa + A { "x -+ y" } B { @Math { x -+ y } } + C { "x setminus y" } D { @Math { x setminus y } } + E { "x cdot y" } F { @Math { x cdot y } } +@Rowa + A { "x times y" } B { @Math { x times y } } + C { "x * y" } D { @Math { x * y } } + E { "x circ y" } F { @Math { x circ y } } +@Rowa + A { "x div y" } B { @Math { x div y } } + C { "x cap y" } D { @Math { x cap y } } + E { "x cup y" } F { @Math { x cup y } } +@Rowa + A { "x uplus y" } B { @Math { x uplus y } } + C { "x sqcap y" } D { @Math { x sqcap y } } + E { "x sqcup y" } F { @Math { x sqcup y } } +@Rowa + A { "x triangleleft y" } B { @Math { x triangleleft y } } + C { "x triangleright y" } D { @Math { x triangleright y } } + E { "x wr y" } F { @Math { x wr y } } +@Rowa + A { "x bigcirc y" } B { @Math { x bigcirc y } } + C { "x bigtriangleup y" } D { @Math { x bigtriangleup y } } + E { { 0.85 1.0 } @Scale "x bigtriangledown y" } + F { @Math { x bigtriangledown y } } +@Rowa + A { "x vee y" } B { @Math { x vee y } } + C { "x wedge y" } D { @Math { x wedge y } } + E { "x oplus y" } F { @Math { x oplus y } } +@Rowa + A { "x ominus y" } B { @Math { x ominus y } } + C { "x otimes y" } D { @Math { x otimes y } } + E { "x oslash y" } F { @Math { x oslash y } } +@Rowa + A { "x odot y" } B { @Math { x odot y } } + C { "x dagger y" } D { @Math { x dagger y } } + E { "x daggerdbl y" } F { @Math { x daggerdbl y } } +@Rowa + A { "x amalg y" } B { @Math { x amalg y } } + mb { 0i } +} +The @Code "bin" symbol causes an arbitrary object to be treated +mathematics.bin @SubIndex { @Code "bin" symbol } +bin.mathematics @Index { @Code "bin" symbol (mathematics) } +as a binary operator: +@ID { +@Code @Verbatim { x bin op { diamond } y } +|7ct +@Math { x bin op { diamond } y } +} +The @Code "op" option following @Code "bin" contains the object +to be treated as a binary operator; its two parameters precede +and follow @Code "bin" as usual. +@End @SubSection + +@SubSection + @Title { Relation symbols } +@Begin +@LP +These symbols represent relations. They take an object on +mathematics.relation. @SubIndex { relation symbols } +relation.symbols. @Index { relation symbols (mathematics) } +the left and on the right, and print them separated by the +relation symbol, with a slightly wider space on each side than +is used for binary operators. They have lower precedence than +binary operators, in accordance with mathematical convention. Here +is the full list of these relations: +@ID @Tbl + mv { 0.5vx } + aformat { @Cell ml{0i} indent{right} w{@LCodeWidth} @Code A | + @Cell w {@ResultWidth} B | + @Cell indent {right} w {@CodeWidth} @Code C | + @Cell w {@ResultWidth} D | + @Cell indent {right} w {@CodeWidth} @Code E | + @Cell w {@ResultWidth} mr { 0i } F } +{ +@Rowa + ma { 0i } + A { "x < y" } B { @Math { x < y } } + C { "x > y" } D { @Math { x > y } } + E { "x = y" } F { @Math { x = y } } +@Rowa + A { "x <= y" } B { @Math { x <= y } } + C { "x prec y" } D { @Math { x prec y } } + E { "x preceq y" } F { @Math { x preceq y } } +@Rowa + A { "x << y" } B { @Math { x << y } } + C { "x subset y" } D { @Math { x subset y } } + E { "x subseteq y" } F { @Math { x subseteq y } } +@Rowa + A { "x sqsubseteq y" } B { @Math { x sqsubseteq y } } + C { "x in y" } D { @Math { x in y } } + E { "x vdash y" } F { @Math { x vdash y } } +@Rowa + A { "x smile y" } B { @Math { x smile y } } + C { "x frown y" } D { @Math { x frown y } } + E { "x >= y" } F { @Math { x >= y } } +@Rowa + A { "x succ y" } B { @Math { x succ y } } + C { "x succeq y" } D { @Math { x succeq y } } + E { "x >> y" } F { @Math { x >> y } } +@Rowa + A { "x supset y" } B { @Math { x supset y } } + C { "x supseteq y" } D { @Math { x supseteq y } } + E { "x sqsupseteq y" } F { @Math { x sqsupseteq y } } +@Rowa + A { "x ni y" } B { @Math { x ni y } } + C { "x dashv y" } D { @Math { x dashv y } } + E { "x mid y" } F { @Math { x mid y } } +@Rowa + A { "x parallel y" } B { @Math { x parallel y } } + C { "x == y" } D { @Math { x == y } } + E { "x ~ y" } F { @Math { x ~ y } } +@Rowa + A { "x -~ y" } B { @Math { x -~ y } } + C { "x asymp y" } D { @Math { x asymp y } } + E { "x ~~ y" } F { @Math { x ~~ y } } +@Rowa + A { "x =~ y" } B { @Math { x =~ y } } + C { "x bowtie y" } D { @Math { x bowtie y } } + E { "x propto y" } F { @Math { x propto y } } +@Rowa + A { "x models y" } B { @Math { x models y } } + C { "x trieq y" } D { @Math { x trieq y } } + E { "x doteq y" } F { @Math { x doteq y } } +@Rowa + A { "x perp y" } B { @Math { x perp y } } + C { "x notsub y" } D { @Math { x notsub y } } + E { "x notin y" } F { @Math { x notin y } } +@Rowa + A { "x != y" } B { @Math { x != y } } + C { "x <-> y" } D { @Math { x <-> y } } + E { "x <-- y" } F { @Math { x <-- y } } +@Rowa + A { "x --> y" } B { @Math { x --> y } } + C { "x up y" } D { @Math { x up y } } + E { "x down y" } F { @Math { x down y } } +@Rowa + A { "x <=> y" } B { @Math { x <=> y } } + C { "x <== y" } D { @Math { x <== y } } + E { "x ==> y" } F { @Math { x ==> y } } +@Rowa + A { "x dblup y" } B { @Math { x dblup y } } + C { "x dbldown y" } D { @Math { x dbldown y } } + E { "x : y" } F { @Math { x : y } } +@Rowa + A { "x :: y" } B { @Math { x :: y } } + C { "x := y" } D { @Math { x := y } } + mb { 0i } +} +All of these symbols have a @Code "neg" option which, when set +to {@Code "yes"}, causes a slash to overstrike the relation +symbol: +@ID { +@Code @Verbatim { x ==> neg { yes } y } +|7ct +@Math { x ==> neg { yes } y } +} +The slash is horizontally centred over the relation symbol, +which is not always best. +@PP +The @Code "rel" symbol causes an arbitrary object to be treated +mathematics.rel @SubIndex { @Code "rel" symbol } +rel.mathematics @Index { @Code "rel" symbol (mathematics) } +as a relation: +@ID { +@Code @Verbatim { x rel op { diamond } y } +|7ct +@Math { x rel op { diamond } y } +} +The @Code "op" option following @Code "rel" contains the object +to be treated as a relation; @Code "rel" also has the @Code "neg" +option, plus the left and right parameters as usual. +@End @SubSection + +@SubSection + @Title { Punctuation symbols } +@Begin +@LP +These symbols represent punctuation. They take an object on +mathematics.punctuation. @SubIndex { punctuation symbols } +punctuation.mathematics @Index { punctuation symbols (mathematics) } +the left and on the right, and print them separated by the +punctuation symbol, with no space to the left and a thin +space to the right. Here is the full list of these symbols: +@ID @Tbl + aformat { @Cell ml{0i} indent{right} w{@LCodeWidth} @Code A | + @Cell w {@ResultWidth} B | + @Cell indent {right} w {@CodeWidth} @Code C | + @Cell w {@ResultWidth} D | + @Cell indent {right} w {@CodeWidth} @Code E | + @Cell w {@ResultWidth} mr { 0i } F } +{ +@Rowa + ma { 0i } + A { "x ; y" } B { @Math { x ; y } } + C { "x , y" } D { @Math { x , y } } + E { "x col y" } F { @Math { x col y } } + mb { 0i } +} +The @Code "punct" symbol causes an arbitrary object to be treated +mathematics.punct @SubIndex { @Code "punct" symbol } +punct.mathematics @Index { @Code "punct" symbol (mathematics) } +as punctuation: +@ID { +@Code @Verbatim { x punct symbol { diamond } y } +|7ct +@Math { x punct symbol { diamond } y } +} +The @Code "symbol" option following @Code "punct" contains the object +to be treated as punctuation; its two parameters precede and follow +@Code "punct" as usual. +@End @SubSection + +@EndSubSections +@End @Section diff --git a/doc/user/mybook b/doc/user/mybook new file mode 100644 index 0000000..e17cb7a --- /dev/null +++ b/doc/user/mybook @@ -0,0 +1,540 @@ +############################################################################### +# # +# Lout setup file for books # +# # +# Jeffrey H. Kingston # +# # +############################################################################### + + +############################################################################### +# # +# @SysInclude commands for standard packages. # +# # +############################################################################### + + @SysInclude { langdefs } # language definitions + @SysInclude { bsf } # BasicSetup package + @SysInclude { dsf } # DocumentSetup package + @SysInclude { bookf } # BookSetup extension + + +############################################################################### +# # +# @Include command for reading personal definitions from current directory. # +# # +############################################################################### + + @Include { mydefs } + +############################################################################### +# # +# The @BasicSetup @Use clause - basics, lists, paragraphs, displays. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @BasicSetup + # @InitialFont { Times Base 12p } # initial font + # @InitialBreak {{adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen}} + # @InitialOutdent { 2f @OrIfPlain 4s } # initial outdent + # @InitialSpace { lout } # initial space style + # @InitialLanguage { English } # initial language + # @InitialColour { black } # initial colour + # @InitialBackgroundColour { white } # initial background colour + # @OptimizePages { No } # optimize page breaks? + # @HeadingFont { Bold } # font for @Heading + # @FixedWidthFont { Courier Base -1p } # font for @F + # @ParaGap { 1.3vx @OrIfPlain 1f } # gap between paragraphs + # @ParaIndent { 2.00f @OrIfPlain 5s } # first-line indent for @PP + # @DisplayGap { 1.00v @OrIfPlain 1f } # gap above, below displays + # @DisplayIndent { 2.00f @OrIfPlain 5s } # @IndentedDisplay indent + # @DefaultIndent { 0.5rt } # @Display indent + # @DisplayNumStyle { (num) } # style of display numbers + # @WideIndent { 4.00f @OrIfPlain 10s } # @WideTaggedList indent + # @VeryWideIndent { 8.00f @OrIfPlain 20s } # @VeryWideTaggedList indent + # @ListOuterGap { 1.00v @OrIfPlain 1f } # gap before, after lists + # @ListGap { 1.00v @OrIfPlain 1f } # gap between list items + # @ListIndent { 0s } # indent of list items + # @ListRightIndent { 0s } # right indent of list items + # @ListLabelWidth { 2.00f @OrIfPlain 5s } # width allowed for list tags + # @ListLabelRight { No } # right-adjust list labels + # @ListLabelRightGap { 2s } # gap when right-adjusting + # @ListFont { } # font of list items + # @ListBreak { } # break style of list items + # @NumberSeparator { . } # separates nums like 2.3.7 + # @CrossLinkFormat { @Body } # format of cross links + # @ExternalLinkFormat { @Body } # format of external links +} + + +############################################################################### +# # +# The @DocumentSetup @Use clause - page layout plus figures, tables, etc. # +# # +# To change the default value of any option, delete the # at the start of # +# its line and change the value between braces. # +# # +############################################################################### + +@Use { @DocumentSetup + # @PageType { A4 @OrIfPlain Other} # page type (width, height) + # @PageWidth { 80s } # page width if type Other + # @PageHeight { 66f } # page height if type Other + # @PageOrientation { Portrait } # Portrait, Landscape, etc. + # @PageBackground { } # background of each page + # @TopMargin { 2.5c @OrIfPlain 6f } # top margin of all pages + # @FootMargin { 2.5c @OrIfPlain 6f } # bottom margin of all pages + # @OddLeftMargin { 2.5c @OrIfPlain 10s } # left margin of odd pages + # @OddRightMargin { 2.5c @OrIfPlain 10s } # right margin of odd pages + # @EvenLeftMargin { 2.5c @OrIfPlain 10s } # left margin of even pages + # @EvenRightMargin { 2.5c @OrIfPlain 10s } # right margin of even pages + # @OddLeftBodyMargin { 0c } # extra margin for page body + # @OddRightBodyMargin { 0c } # extra margin for page body + # @EvenLeftBodyMargin { 0c } # extra margin for page body + # @EvenRightBodyMargin{ 0c } # extra margin for page body + # @PageBoxType { None } # None Box CurveBox ShadowBox + # @PageBoxMargin { 1.00c } # page box margin + # @PageBoxLineWidth { } # page box line thickness + # @PageBoxPaint { none } # page box paint + # @PageBoxShadow { 0.60c } # shadow margin if ShadowBox + # @PageEnclose { @Body } # enclose every page in this + # @ColumnNumber { 1 } # number of columns (1 to 10) + # @ColumnGap { 1.00c @OrIfPlain 6s } # column gap + + # @FigureLocation { PageTop } # default figure location + # @FigureFormat { @CC @Body } # default figure format + # @FigureWord { figure } # "Figure" word else anything + # @FigureNumbers { Arabic } # method of numbering figures + # @FigureCaptionPos { Below } # Above or Below + # @FigureCaptionFont { -2p } # figure caption font + # @FigureCaptionBreak { adjust hyphen 1.2fx } # figure caption break + # @FigureCaptionFormat{ {@B { word @NumSep number. &2s }} @Insert caption } + # @MakeFigureContents { No } # list of figures at start + + # @TableLocation { PageTop } # default table location + # @TableFormat { @CC @Body } # default table format + # @TableWord { table } # "Table" word else anything + # @TableNumbers { Arabic } # method of numbering tables + # @TableCaptionPos { Below } # Above or Below + # @TableCaptionFont { -2p } # table caption font + # @TableCaptionBreak { adjust hyphen 1.2fx } # table caption break + # @TableCaptionFormat { {@B { word @NumSep number. &2s }} @Insert caption } + # @MakeTableContents { No } # list of tables at start + + # @FloaterLocation { PageTop } # default floater location + # @FloaterFormat { @CC @Body } # default floater format + # @FloaterWord { floater } # "Floater" word else anything + # @FloaterNumbers { Arabic } # method of numbering floaters + # @FloaterCaptionPos { Below } # Above or Below + # @FloaterCaptionFont { -2p } # floater caption font + # @FloaterCaptionBreak{ adjust hyphen 1.2fx } # floater caption break + # @FloaterCaptionFormat{ {@B { word @NumSep number. &2s }} @Insert caption } + # @MakeFloaterContents{ No } # list of floaters at start + + # @MakeContents { No } # make contents? Yes or No + @MakeContents { Yes } # make contents? Yes or No + # @ContentsGap { 0.20v @OrIfPlain 0f } # extra gap above minor entry + # @ContentsGapAbove { 0.80v @OrIfPlain 1f } # extra gap above major entry + # @ContentsGapBelow { 0.00v @OrIfPlain 0f } # extra gap below major entry + # @ContentsFont { Bold } # font for major entry + # @ContentsPartGapAbove { 1.00v @OrIfPlain 1f } # extra gap above `part' entry + # @ContentsPartGapBelow { 0.00v @OrIfPlain 0f } # extra gap below `part' entry + # @ContentsFormat { number @DotSep title } # contents entry format + # @ContentsLeader { .. } # leader symbol in contents + # @ContentsLeaderGap { 4s @OrIfPlain 2s } # gap between leaders + # @ContentsRightWidth { 3f @OrIfPlain 6s } # page numbers column width + + # @MakeReferences { Yes } # make references? Yes or No + # @RefCiteStyle { [cite] } # citation style + # @RefCiteLabels { @RefNum } # citation items + # @RefNumbers { Arabic } # reference numbers + # @RefListFormat { Labels } # NoLabels, Labels, etc. + # @RefListLabels { [@RefNum] } # ref list label format + # @RefListTitle { references } # title of reference list + # @ChapRefListTitle { references } # title of chapter ref list + # @RefListIndent { 0s } # indent to left of labels + # @RefListRightIndent { 0s } # indent to right of items + # @RefListGap { @ListGap } # gap between ref list items + # @RefListFont { } # font used in reference list + # @RefListBreak { } # break style of ref list + # @RefListLabelWidth { @ListLabelWidth } # Labels column width + # @RefListSortKey { @Tag } # sorting key + + # @MakeGlossary { No } # make glossary? Yes or No + # @GlossaryText { @Null } # glossary initial text + # @GlossaryFont { } # glossary entries font + # @GlossaryBreak { } # glossary entries break + # @GlossaryFormat { +3p @Font @S @Name # glossary entries format + # @Right @I { @Word&&page @PageNum } + # @DP @RawIndentedDisplay @Body } + # @GlossaryGap { @DisplayGap } # gap between glossary entries + # @GlossaryColumnNumber{ 2 } # glossary columns (1 to 10) + # @GlossaryColumnGap { 1.00c @OrIfPlain 6s } # glossary column gap + # @InGlossaryFont { smallcaps } # font for @InGlossary + # @InGlossaryFormat { @Body } # format for @InGlossary + + # @MakeIndex { No } # make index? Yes or No + # @MakeIndex { No } # make index? Yes or No + @MakeIndex { Yes } # make index? Yes or No + # @IndexText { @Null } # index initial text + # @IndexFont { } # index entries font + # @IndexBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexFormat { @Body } # @Index format + # @SubIndexFormat { {1f @Wide}@Body } # @SubIndex format + # @SubSubIndexFormat { {2f @Wide}@Body } # @SubSubIndex format + # @IndexTypeOrdinary { @PageNum } # Ordinary pagenum format + # @IndexTypeMain { @B @PageNum } # Main pagenum format + # @IndexTypeSpecial { @I @PageNum } # Special pagenum format + # @IndexRangeFormat { @From--@To } # index page range format + # @IndexColumnNumber { 2 } # index columns (1 to 10) + # @IndexColumnGap { 1.00c @OrIfPlain 6s } # index column gap + # @IndexCtd { Yes } # include (ctd.) lines + # @IndexCtdWord { continued } # "ctd." in current lang. + # @IndexCtdFormat { @Body @I (@CtdWord) } # format of ctd. + # @IndexSpacerAbove { 2v } # space above index spacer + # @IndexSpacerBelow { 1v } # space below index spacer + # @IndexSpacerFont { +3p } # font of index spacer + # @IndexSpacerFormat { @Body } # format of index spacer + + # @MakeIndexA { No } # make index A? Yes or No + # @IndexAText { @Null } # index A initial text + # @IndexAFont { } # index A entries font + # @IndexABreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexAFormat { @Body } # @IndexA format + # @SubIndexAFormat { {1f @Wide}@Body } # @SubIndexA format + # @SubSubIndexAFormat { {2f @Wide}@Body } # @SubSubIndexA format + # @IndexATypeOrdinary { @PageNum } # Ordinary pagenum format + # @IndexATypeMain { @B @PageNum } # Main pagenum format + # @IndexATypeSpecial { @I @PageNum } # Special pagenum format + # @IndexARangeFormat { @From--@To } # index page range format + # @IndexAColumnNumber { 2 } # index A columns (1 to 10) + # @IndexAColumnGap { 1.00c @OrIfPlain 6s } # index A column gap + # @IndexACtd { Yes } # include (ctd.) lines + # @IndexACtdWord { continued } # "ctd." in current lang. + # @IndexACtdFormat { @Body @I (@CtdWord) } # format of ctd. + # @IndexASpacerAbove { 2v } # space above index A spacer + # @IndexASpacerBelow { 1v } # space below index A spacer + # @IndexASpacerFont { +3p } # font of index A spacer + # @IndexASpacerFormat { @Body } # format of index A spacer + + # @MakeIndexB { No } # make index B? Yes or No + # @IndexBText { @Null } # index B initial text + # @IndexBFont { } # index B entries font + # @IndexBBreak { {oragged 1.2fx} @OrIfPlain {oragged 1fx} } # and break + # @IndexBFormat { @Body } # @IndexB format + # @SubIndexBFormat { {1f @Wide}@Body } # @SubIndexB format + # @SubSubIndexBFormat { {2f @Wide}@Body } # @SubSubIndexB format + # @IndexBTypeOrdinary { @PageNum } # Ordinary pagenum format + # @IndexBTypeMain { @B @PageNum } # Main pagenum format + # @IndexBTypeSpecial { @I @PageNum } # Special pagenum format + # @IndexBRangeFormat { @From--@To } # index page range format + # @IndexBColumnNumber { 2 } # index B columns (1 to 10) + # @IndexBColumnGap { 1.00c @OrIfPlain 6s } # index B column gap + # @IndexBCtd { Yes } # include (ctd.) lines + # @IndexBCtdWord { continued } # "ctd." in current lang. + # @IndexBCtdFormat { @Body @I (@CtdWord) } # format of ctd. + # @IndexBSpacerAbove { 2v } # space above index B spacer + # @IndexBSpacerBelow { 1v } # space below index B spacer + # @IndexBSpacerFont { +3p } # font of index B spacer + # @IndexBSpacerFormat { @Body } # format of index B spacer + + # @MakeColophon { No } # make colophon? Yes or No + # @ColophonFont { } # font for colophon + # @ColophonBreak { } # break style for colophon + # @ColophonColumnNumber { 1 } # colophon columns (1 to 10) + # @ColophonColumnGap { 1.00c @OrIfPlain 6s } # colophon column gap + + # @TopGap { 0.75c @OrIfPlain 2f } # gap between figures + # @MidGap { 0.75c @OrIfPlain 2f } # gap above/below body text + + # @FootNoteNumbers { Arabic } # footnote numbers + # @FootNoteThrough { No } # numbered through chapter? + # @FootNoteLocation { ColFoot } # where the footnote appears + # @FootNoteFont { 0.80f } # font for footnotes + # @FootNoteBreak { 1.2fx @OrIfPlain 1fx } # break for footnotes + # @FootNoteFormat { { number &0.05f } @Insert body } # footnote format + # @FootLen { 2.00c @OrIfPlain 10s } # length of footnote line + # @FootAboveGap { @DisplayGap } # gap above footnote line + # @FootGap { 0.20c @OrIfPlain 1fx } # gap between footnotes + # @MarginNoteFont { 0.80f } # font of margin notes + # @MarginNoteBreak { ragged 1.10fx } # break style of margin notes + # @MarginNoteHGap { 0.5c } # horizontal gap to notes + # @MarginNoteVGap { @DisplayGap } # min vertical gap between + # @MarginNoteWidth { 1.50c } # width of margin notes + # @EndNoteNumbers { Arabic } # endnote numbers + # @EndNoteFont { 0.80f } # font of endnotes + # @EndNoteBreak { 1.2fx @OrIfPlain 1fx } # break for endnotes + # @EndNoteFormat { { number &0.05f } @Insert body } # endnote format + # @EndNoteGap { 0.20c @OrIfPlain 1f } # gap between endnotes + + # @TheoremWord { theorem } # "Theorem" word, etc. + # @TheoremTitleFormat { (title) } # only if title present + # @TheoremFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @DefinitionWord { definition } # "Definition" word, etc. + # @DefinitionTitleFormat { (title) } # only if title present + # @DefinitionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ClaimWord { claim } # "Claim" word, etc. + # @ClaimTitleFormat { (title) } # only if title present + # @ClaimFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @PropositionWord { proposition } # "Proposition" word, etc. + # @PropositionTitleFormat { (title) } # only if title present + # @PropositionFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @LemmaWord { lemma } # "Lemma" word, etc. + # @LemmaTitleFormat { (title) } # only if title present + # @LemmaFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @CorollaryWord { corollary } # "Corollary" word, etc. + # @CorollaryTitleFormat { (title) } # only if title present + # @CorollaryFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ExampleWord { example } # "Example" word, etc. + # @ExampleTitleFormat { (title) } # only if title present + # @ExampleFormat { {@B { word @NumSep number title: } &2s} @Insert body } + # @ProofWord { proof } # "Proof" word, etc. + + # @PageHeaders { Simple } # None Simple Titles NoTitles + @PageHeaders { Titles } # None Simple Titles NoTitles + # @PageNumbers { Arabic } # page numbers + # @FirstPageNumber { 1 } # number of first page + # @IntroPageNumbers { Roman } # intro page numbers + # @IntroFirstPageNumber{ 1 } # number of first intro page + # @StructPageNums { No } # make structured page numbers + # @PageNumberFormat { number } # format of all page numbers + + # @OddTop { @Centre{- @PageNum -} } # Simple page headers + # @OddFoot { @Null } + # @EvenTop { @Centre{- @PageNum -} } + # @EvenFoot { @Null } + # @StartOddTop { @Null } + # @StartOddFoot { @Null } + # @StartEvenTop { @Null } + # @StartEvenFoot { @Null } + # @IntroOddTop { @Null } + # @IntroOddFoot { @Centre @PageNum } + # @IntroEvenTop { @Null } + # @IntroEvenFoot { @Centre @PageNum } + # @IntroStartOddTop { @Null } + # @IntroStartOddFoot { @Null } + # @IntroStartEvenTop { @Null } + # @IntroStartEvenFoot { @Null } + + # Titles, NoTitles headers + # @RunningOddTop { @I {@MinorNum @DotSep @MinorTitle} @Right @B @PageNum } + # @RunningOddFoot { @Null } + # @RunningEvenTop { @B @PageNum @Right @I {@MajorNum @DotSep @MajorTitle} } + # @RunningEvenFoot { @Null } + # @RunningStartOddTop { @Null } + # @RunningStartOddFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningStartEvenTop { @Null } + # @RunningStartEvenFoot { @Centre { Bold 0.8f } @Font @PageNum } + # @RunningIntroOddTop { @Null } + # @RunningIntroOddFoot { @Right @PageNum } + # @RunningIntroEvenTop { @Null } + # @RunningIntroEvenFoot { @PageNum } + # @RunningIntroStartOddTop { @Null } + # @RunningIntroStartOddFoot { @Null } + # @RunningIntroStartEvenTop { @Null } + # @RunningIntroStartEvenFoot { @Null } +} + + +############################################################################### +# # +# The @BookSetup @Use clause - options specific to books. # +# # +############################################################################### + +@Use { @BookSetup + # @TitlePageFont { Helvetica Base} # title page font (not size) + # @SeparateIntroNumbering { Yes } # separate intro page numbers + # @PrefaceAfterContents { No } # Yes or No + # @ChapterStartPages { Any } # Any, Odd, Even, SamePage + # @ReferencesBeforeAppendices { No } # references before appendices + # @PrefaceWord { preface } # word for "Preface" + # @ContentsWord { contents } # word for "Contents" + # @FigureListWord { figurelist } # word for "List of Figures" + # @TableListWord { tablelist } # word for "List of Tables" + # @FloaterListWord { floaterlist } # word for "List of Floaters" + # @IntroductionWord { introduction } # word for "Introduction" + # @AbbreviationsWord { abbreviations } # word for "Abbreviations" + # @ChapterWord { chapter } # word for "Chapter" + # @AppendixWord { appendix } # word for "Appendix" + # @GlossaryWord { glossary } # word for "Glossary" + # @IndexWord { index } # word for "Index" + # @IndexAWord { index } # word for "Index" (A) + # @IndexBWord { index } # word for "Index" (B) + # @ColophonWord { colophon } # word for "Colophon" + # @SubPrefaceNumbers { None } # kind of sub-preface numbers + # @FirstSubPrefaceNumber { 1 } # first sub-preface number (Arabic) + # @SubIntroductionNumbers { None } # kind of sub-introduction numbers + # @FirstSubIntroductionNumber { 1 } # first sub-introduction number + # @ChapterNumbers { Arabic } # kind of chapter numbers + # @FirstChapterNumber { 1 } # first chapter number (Arabic) + # @SectionNumbers { Arabic } # kind of section numbers + # @FirstSectionNumber { 1 } # first section number (Arabic) + # @SubSectionNumbers { Arabic } # kind of subsection numbers + # @FirstSubSectionNumber { 1 } # first subsect number (Arabic) + # @SubSubSectionNumbers { Arabic } # kind of sub-subs. numbers + # @FirstSubSubSectionNumber { 1 } # first sub-sub number (Arabic) + # @AppendixNumbers { UCAlpha } # kind of appendix numbers + # @FirstAppendixNumber { 1 } # first appendix num (Arabic) + # @SubAppendixNumbers { Arabic } # kind of subappendix numbers + # @FirstSubAppendixNumber { 1 } # first sub-app num (Arabic) + # @SubSubAppendixNumbers { Arabic } # kind of sub-subapp. numbers + # @FirstSubSubAppendixNumber { 1 } # first sub-sub num (Arabic) + # @PartHeadingFont { Helvetica Base 2.50f } # part head font + # @PartHeadingBreak { clines 1.2fx nohyphen } # part head break + # @PartHeadingFormat { @CD number @DP @CD title } # part head format + # @ChapterHeadingFont { Bold 2.00f } # chapter head font + # @ChapterHeadingBreak { ragged 1.2fx nohyphen } # chapter head break + # @ChapterHeadingFormat { number @DotSep title } # format of chap. head + # @SubPrefaceHeadingFont { Bold } # sub-preface head font + # @SubPrefaceHeadingBreak { ragged 1.2fx nohyphen } # sub-preface head break + # @SubPrefaceHeadingFormat { number @DotSep title } # format of s.-p. head + # @SubIntroductionHeadingFont { Bold } # sub-intro head font + # @SubIntroductionHeadingBreak { ragged 1.2fx nohyphen} # sub-intro head break + # @SubIntroductionHeadingFormat { number @DotSep title} # format of sub-intro. hd + # @SectionHeadingFont { Bold } # section head font + # @SectionHeadingBreak { ragged 1.2fx nohyphen } # section head break + # @SectionHeadingFormat { number @DotSep title } # section head fmt + # @SubSectionHeadingFont { Bold } # subs. head font + # @SubSectionHeadingBreak { ragged 1.2fx nohyphen } # subs. head break + # @SubSectionHeadingFormat { number @DotSep title } # subs. head fmt + # @SubSubSectionHeadingFont { Slope } # sub-subs. head font + # @SubSubSectionHeadingBreak { ragged 1.2fx nohyphen } # sub-subs. head break + # @SubSubSectionHeadingFormat { number @DotSep title } # sub-subs. head fmt + # @AppendixHeadingFont { Bold 2.00f } # appendix head font + # @AppendixHeadingBreak { ragged 1.2fx nohyphen } # appendix head break + # @AppendixHeadingFormat { number @DotSep title } # appendix head fmt + # @SubAppendixHeadingFont { Bold } # subapp. head font + # @SubAppendixHeadingBreak { ragged 1.2fx nohyphen } # subapp. head break + # @SubAppendixHeadingFormat { number @DotSep title } # subapp. head fmt + # @SubSubAppendixHeadingFont { Slope } # sub-suba. head font + # @SubSubAppendixHeadingBreak { ragged 1.2fx nohyphen } # sub-suba. head break + # @SubSubAppendixHeadingFormat{ number @DotSep title } # sub-suba. head fmt + # @AbovePartGap { 4.00f } # gap above part title + # @AboveChapterGap { 3.00f } # above major titles + # @SubPrefaceGap { 2.0v @OrIfPlain 3f } # between sub-prefaces + # @SubIntroductionGap { 2.0v @OrIfPlain 3f } # between sub-intros + # @SectionGap { 2.0v @OrIfPlain 3f } # between sections + # @SubSectionGap { 1.5v @OrIfPlain 2f } # between subsects + # @SubSubSectionGap { 1.5v @OrIfPlain 2f } # between sub-subs. + # @SubAppendixGap { 2.0v @OrIfPlain 3f } # between subappendices + # @SubSubAppendixGap { 1.5v @OrIfPlain 2f } # between sub-subapps + # @PrefaceInContents { Yes } # add preface to contents + # @SubPrefaceInContents { No } # add sub-preface to contents + # @AbbreviationsInContents { Yes } # add abbreviations to contents + # @IntroductionInContents { Yes } # add introduction to contents + # @SubIntroductionInContents { No } # add sub-intro to contents + # @PartInContents { Yes } # add parts to contents + # @ChapterInContents { Yes } # add chapters to contents + # @SectionInContents { Yes } # add sections to contents + @SubSectionInContents { No } # add subsections to contents + # @SubSubSectionInContents { No } # add sub-subsects to contents + # @AppendixInContents { Yes } # add appendices to contents + # @SubAppendixInContents { Yes } # add subappendices to contents + # @SubSubAppendixInContents { No } # add sub-subapps to contents + # @ReferencesInContents { Yes } # add ref. section to contents + # @GlossaryInContents { Yes } # add glossary to contents + # @IndexInContents { Yes } # add index to contents + # @IndexAInContents { Yes } # add index A to contents + # @IndexBInContents { Yes } # add index B to contents + # @ColophonInContents { Yes } # add colophon to contents + # @PrefaceContentsIndent { 0f } # indent in contents of preface + # @SubPrefaceContentsIndent { 3f } # indent in contents of sub-preface + # @AbbreviationsContentsIndent{ 0f } # indent in contents of abbreviations + # @IntroductionContentsIndent { 0f } # indent in contents of introduction + # @SubIntroductionContentsIndent { 3f } # indent in contents of sub-intro + # @PartContentsIndent { 0.5rt } # indent in contents of part (dft is ctr) + # @ChapterContentsIndent { 0f } # indent in contents of chapter + # @SectionContentsIndent { 3f } # indent in contents of section + # @SubSectionContentsIndent { 6f } # indent in contents of subsection + # @SubSubSectionContentsIndent{ 9f } # indent in contents of sub-subsection + # @AppendixContentsIndent { 0f } # indent in contents of appendix + # @SubAppendixContentsIndent { 3f } # indent in contents of sub-appendix + # @SubSubAppendixContentsIndent { 6f } # indent in contents of sub-subappendix + # @ReferencesContentsIndent { 0f } # indent in contents of references + # @GlossaryContentsIndent { 0f } # indent in contents of gloassary + # @IndexContentsIndent { 0f } # indent in contents of index + # @IndexAContentsIndent { 0f } # indent in contents of index A + # @IndexBContentsIndent { 0f } # indent in contents of index B + # @ColophonContentsIndent { 0f } # indent in contents of colophon + # @SubPrefaceNumInTheorems { No } # theorem num has sub-preface num + # @SubIntroductionNumInTheorems { No } # theorem num has sub-intro num + # @ChapterNumInTheorems { Yes } # theorem num has chapter num + # @SectionNumInTheorems { No } # theorem num has section num + # @SubSectionNumInTheorems { No } # theorem num has subsect num + # @SubSubSectionNumInTheorems { No } # theorem num has sub-ss. num + # @AppendixNumInTheorems { Yes } # theorem num has appendix num + # @SubAppendixNumInTheorems { No } # theorem num has sub-app num + # @SubSubAppendixNumInTheorems{ No } # theorem num has sub-sa. num + # @SubPrefaceNumInDisplays { No } # display num has sub-preface num + # @SubIntroductionNumInDisplays { No } # display num has sub-intro num + # @ChapterNumInDisplays { Yes } # display num has chapter num + # @SectionNumInDisplays { Yes } # display num has section num + # @SubSectionNumInDisplays { No } # display num has subsect num + # @SubSubSectionNumInDisplays { No } # display num has sub-ss. num + # @AppendixNumInDisplays { Yes } # display num has appendix num + # @SubAppendixNumInDisplays { Yes } # display num has sub-app num + # @SubSubAppendixNumInDisplays{ No } # display num has sub-sa. num + # @SubPrefaceNumInFigures { No } # figure num has sub-preface num + # @SubIntroductionumInFigures { No } # figure num has sub-intro num + # @ChapterNumInFigures { Yes } # figure num has chapter num + # @SectionNumInFigures { No } # figure num has section num + # @SubSectionNumInFigures { No } # figure num has subsect num + # @SubSubSectionNumInFigures { No } # figure num has sub-ss. num + # @AppendixNumInFigures { Yes } # figure num has appendix num + # @SubAppendixNumInFigures { No } # figure num has sub-app num + # @SubSubAppendixNumInFigures { No } # figure num has sub-sa. num + # @SubPrefaceNumInTables { No } # table num has sub-preface num + # @SubIntroductionumInTables { No } # table num has sub-intro num + # @ChapterNumInTables { Yes } # table num has chapter num + # @SectionNumInTables { No } # table num has section num + # @SubSectionNumInTables { No } # table num has subsect num + # @SubSubSectionNumInTables { No } # table num has sub-ss. num + # @AppendixNumInTables { Yes } # table num has appendix num + # @SubAppendixNumInTables { No } # table num has sub-app num + # @SubSubAppendixNumInTables { No } # table num has sub-sa. num + # @SubPrefaceNumInFloaters { No } # floater num has sub-preface num + # @SubIntroductionumInFloaters{ No } # floater num has sub-intro num + # @ChapterNumInFloaters { Yes } # floater num has chapter num + # @SectionNumInFloaters { No } # floater num has section num + # @SubSectionNumInFloaters { No } # floater num has subsect num + # @SubSubSectionNumInFloaters { No } # floater num has sub-ss. num + # @AppendixNumInFloaters { Yes } # floater num has appendix num + # @SubAppendixNumInFloaters { No } # floater num has sub-app num + # @SubSubAppendixNumInFloaters{ No } # floater num has sub-sa. num + # @SubPrefaceNumInRunners { No } # runners have sub-preface num + # @SubIntroductionNumInRunners { No } # runners have sub-intro num + # @SectionNumInRunners { Yes } # runners have section num + # @SubSectionNumInRunners { No } # runners have subsect num + # @SubSubSectionNumInRunners { No } # runners have sub-ss. num + # @SubAppendixNumInRunners { Yes } # runners have sub-app num + # @SubSubAppendixNumInRunners { No } # runners have sub-sa. num + # @PrefacePrefix { } # for structured page nums + # @ContentsPrefix { } # for structured page nums + # @FigureContentsPrefix { } # for structured page nums + # @TableContentsPrefix { } # for structured page nums + # @FloaterContentsPrefix { } # for structured page nums + # @AbbreviationsPrefix { } # for structured page nums + # @IntroductionPrefix { } # for structured page nums + # @ChapterPrefix { } # for structured page nums + # @AppendixPrefix { } # for structured page nums + # @ReferencesPrefix { } # for structured page nums + # @GlossaryPrefix { } # for structured page nums + # @IndexPrefix { } # for structured page nums + # @IndexAPrefix { } # for structured page nums + # @IndexBPrefix { } # for structured page nums + # @ColophonPrefix { } # for structured page nums +} + + +############################################################################### +# # +# @Database (and @SysDatabase) clauses go here. # +# # +############################################################################### + +@SysDatabase @FontDef { fontdefs } # font definitions +@SysDatabase @RefStyle { refstyle } # reference printing styles diff --git a/doc/user/mydefs b/doc/user/mydefs index 6a74278..1ec1678 100644 --- a/doc/user/mydefs +++ b/doc/user/mydefs @@ -107,18 +107,22 @@ } } - import @Eq + import @Math def epi { p sub i ` log sub 2 ` p sub i } - import @Eq + import @Math def ep right x { p sub x ` log sub 2 ` p sub x } - def @Dbl left x right y - { 1.95i @Wide - { 1.25i @Wide { |1rt @Code x } |0.2i @Eq {non y} } - } +# def @Dbl left x right y +# { 1.95i @Wide +# { 1.25i @Wide { |1rt @Code x } |0.2i @Eq {non y} } +# } - import @Eq + def @LCodeWidth { 3.5c } + def @CodeWidth { 4.0c } + def @ResultWidth { 1.6c } + + import @Math def @ExA { 1 over sqrt { 1 - 4 x sup 2 } } def @@Diag { @Code "@Diag" } diff --git a/doc/user/preface b/doc/user/preface index 09e54bf..b3face6 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.36.tar.gz"}), and various other things including +(currently {@Code "lout-3.37.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 @@ -27,7 +27,8 @@ Lout. To subscribe (or unsubscribe), visit @ID @Code "http://lists.planix.com/mailman/options.cgi/lout-users/" After subscribing, to post an item send email to {@Code "lout-users@lists.planix.com"}; it will be forwarded to all -subscribers via email. +subscribers via email. There is also a Lout web +site at {@Code "http://lout.wiki.sourceforge.net/"}. @PP Lout began in 1984 as a research project into the design of a high-level language for document formatting. At that time my name for the subject diff --git a/doc/user/prg b/doc/user/prg index 8643d6b..11d4b7d 100644 --- a/doc/user/prg +++ b/doc/user/prg @@ -6,29 +6,10 @@ This chapter describes how to typeset computer program text using Lout programs. @Index { programs } computer.programs. @RawIndex { computer programs @I see programs } -in conjunction with the @Code prg2lout +along with the @Code prg2lout prg2lout. @Index { @Code prg2lout filter program } filter program, which is always installed wherever Lout is. -# @FootNote { -# Prior to Version 3.18 of Lout, this chapter described how to typeset -# programs written in the C programming language using the -# @Code c2lout filter, and Eiffel programs using the @Code eif2lout -# filter. These have now been withdrawn and replaced by {@Code prg2lout}, -# which handles multiple languages. Ordinary Lout documents require no -# modifications as a result of this change. -# } -@PP -It is possible to simply print out one or more program files independently -of any document. Alternatively, the program text may be printed as part of -a larger Lout document. Either way, Lout does not lay out the programs in -the sense of choosing line breaks and indenting; it uses whatever line -breaks and indenting you give to the program. What Lout does do is cope -with characters in the program text that it would ordinarily either reject -or interpret in some way (braces and so on), ensuring that you can include -program texts with absolutely no modifications; plus, if you wish, Lout -will print keywords in bold, identifiers in italics, add line numbers, etc. -@PP -At the time of writing, the available programming languages are: +The available languages are: blue. @Index { Blue program printing } c. @Index { C and C++ program printing } eiffel. @Index { Eiffel program printing } @@ -127,12 +108,29 @@ way to make comments. Whenever we mention C from now on, we mean both C and C++. See Section {@NumberOf prg_perl} for more on Perl and its handmaiden Pod. The second to fifth columns of this table will be explained at various points later in this chapter. +# @FootNote { +# Prior to Version 3.18 of Lout, this chapter described how to typeset +# programs written in the C programming language using the +# @Code c2lout filter, and Eiffel programs using the @Code eif2lout +# filter. These have now been withdrawn and replaced by {@Code prg2lout}, +# which handles multiple languages. Ordinary Lout documents require no +# modifications as a result of this change. +# } +@PP +It is possible to simply print out one or more program files independently +of any document. Alternatively, the program text may be printed as part of +a larger Lout document. Either way, Lout does not lay out the programs in +the sense of choosing line breaks and indenting; it uses whatever line +breaks and indenting you give to the program. What Lout does do is cope +with characters in the program text that it would ordinarily either reject +or interpret in some way (braces and so on), ensuring that you can include +program texts with absolutely no modifications; plus, if you wish, Lout +will print keywords in bold, identifiers in italics, add line numbers, etc. @PP -The list of languages is likely to expand, because the @Code "prg2lout" -program has been designed to make it relatively easy to add new languages -(you don't have to write executable code, just declare a lot of records -describing your language). Consult the instructions at the top of the -source file of that program ({@I prg2lout.c}) if you want to try it yourself. +It is relatively easy to add new languages, since you don't have to write +executable code, just declare a lot of records describing your language. +Consult the instructions at the top of file {@I prg2lout.c} if you want +to try it yourself. @BeginSections @Include { prg_lone } @Include { prg_embe } diff --git a/doc/user/prg_embe b/doc/user/prg_embe index 37a5dd2..3228426 100644 --- a/doc/user/prg_embe +++ b/doc/user/prg_embe @@ -9,9 +9,6 @@ appropriate to your language, like this: @ID @OneRow @Code { "@SysInclude { cprint }" "@SysInclude { doc }" -"@Doc @Text @Begin" -"..." -"@End @Text" } The @Code cprint setup file includes everything needed to set up for C program formatting; for the other languages, consult the second column @@ -24,8 +21,7 @@ this for the C language: @IndentedDisplay @CP { #include <stdio.h> -treeprint(p) /* print tree p recursively */ -struct tnode *p; +treeprint(struct tnode *p) /* print tree p recursively */ { if (p != NULL) { treeprint(p->left); @@ -42,8 +38,7 @@ modifications. The result is @ID @OneRow @CP { #include <stdio.h> -treeprint(p) /* print tree p recursively */ -struct tnode *p; +treeprint(struct tnode *p) /* print tree p recursively */ { if (p != NULL) { treeprint(p->left); @@ -56,9 +51,21 @@ We have chosen to use the @Code "@IndentedDisplay" symbol from Section {@NumberOf displays} to obtain an indented display, but in fact {@Code "@CP"}, {@Code "@Eiffel"} and the rest may appear anywhere at all: the result is an object in the usual way, which may go -anywhere. When including a program text within a paragraph, use -@Code "@OneCol @CP { ... }" (or @Code "@OneCol @Eiffel { ... }" etc. for -other languages) to prevent it being broken across two lines, if desired. +anywhere. +@PP +It is quite normal to include fragments of programs, particularly +identifiers, within paragraphs; this is done in the obvious way: +@ID @OneRow @Code @Verbatim { +Calling @CP { remove_cooling_rods() } without checking @CP { temp } first +is not recommended since it may cause the reactor to melt down. +} +Use @Code "@OneCol @CP { ... }" (or @Code "@OneCol @Eiffel { ... }" etc. for +other languages) to prevent the program text being broken across two lines, +if desired. Hyphenation is on by default in computer programs; however, +the current language is changed from @Code English or whatever to +{@Code Programming}, whose hyhenation rules permit hyphenation after +an underscore character or between a preceding lower-case letter +and a following upper-case letter, but not elsewhere. @PP In cases where the program text has unbalanced braces, it is necessary to programs. @RawIndex { programs } @@ -77,8 +84,8 @@ simply add one @Code "@SysInclude" line for each of them and proceed as before. If your programming language is not currently supported, a viable alternative is @ID @Code "@F @Verbatim { ... }" -These symbols cause the text between braces to be set verbatim in -a fixed-width font, as explained elsewhere in this guide. This fallback +This causes the text between braces to be set verbatim in +a fixed-width font, as explained elsewhere in this guide. This method will not handle tab and formfeed characters very well. Again, use @Code "@Verbatim @Begin ... @End @Verbatim" if your program text contains unbalanced braces. diff --git a/doc/user/prg_lone b/doc/user/prg_lone index 06bc497..dfce1de 100644 --- a/doc/user/prg_lone +++ b/doc/user/prg_lone @@ -3,31 +3,30 @@ @Tag { alone } @Begin @PP -Printing of program files independently of any document is accomplished by +Printing of program files independently of any document is done by programs. @RawIndex { programs } programs.standalone @SubIndex { stand-alone } standalone.programs @Index { stand-alone programs } -the following Unix pipeline: +the Unix pipeline @ID @Code "prg2lout -l language options files | lout -s > out.ps" where @Code language stands for any one of the programming language names in the first column of the table above. As usual with Lout, the output will be a PostScript file. Each input file will begin on a new -page of the output, starting with its name in bold type. The options -provide control over the final appearance, as follows: +page of the output, starting with its name in bold type. The @Code options +are @WideTaggedList @TI { {@Code-p}{@I style} } { -Select a printing style. Your choices are {@Code -pfixed}, -{@Code -pvarying}, and {@Code -psymbol}, with the default value -varying with the language as given in the fourth column of the -table above. Consult Section {@NumberOf embedded} for examples -of these styles. +Select a printing style (Section {@NumberOf embedded}), either +{@Code -pfixed}, {@Code -pvarying}, or {@Code -psymbol}. The default +value varies with the language, as shown in the fourth column of the +table above. } @TI { @Code -n } { Do not print file names. } @TI { {@Code -f}{@I font} } { -Select a Lout font family. The default is @Code "-fCourier" for -{@Code -pfixed}, and @Code "-fTimes" for @Code -pvarying and {@Code -psymbol}. +Select a font family. The default is @Code "-fCourier" for +{@Code -pfixed}, and @Code "-fTimes" otherwise. } @TI { {@Code -v}{@I vsize} } { Select an inter-line spacing size in Lout units. The default is @@ -41,7 +40,7 @@ to represent a blank line is to be reduced. The default is @Code { 1.0 }, meaning no reduction. } @TI { {@Code -L}{@I number} } { -Add line numbers to the program print, starting with {@I number}, or +Add line numbers to the print, starting with {@I number}, or 1 if {@I number} is omitted. } @TI { {@Code -N} } { diff --git a/doc/user/prg_opti b/doc/user/prg_opti index 6ae4e05..733126b 100644 --- a/doc/user/prg_opti +++ b/doc/user/prg_opti @@ -31,9 +31,7 @@ section was in @Code fixed style; we can switch styles like this: style { varying } { #include <stdio.h> - -treeprint(p) /* print tree p recursively */ -struct tnode *p; +treeprint(struct tnode *p) /* print tree p recursively */ { if (p != NULL) { treeprint(p->left); @@ -47,9 +45,7 @@ The result in this case will be @ID @OneRow @CP style { varying } { #include <stdio.h> - -treeprint(p) /* print tree p recursively */ -struct tnode *p; +treeprint(struct tnode *p) /* print tree p recursively */ { if (p != NULL) { treeprint(p->left); @@ -62,9 +58,7 @@ If we use @Code "style { symbol }" we get this: @ID @OneRow @CP style { symbol } { #include <stdio.h> - -treeprint(p) /* print tree p recursively */ -struct tnode *p; +treeprint(struct tnode *p) /* print tree p recursively */ { if (p != NULL) { treeprint(p->left); @@ -121,9 +115,8 @@ receive line numbers or not. It has three acceptable values: {@Code "Yes"}, the default value, meaning that blank lines are printed with line numbers, just like other lines; {@Code No}, meaning that blank lines are not assigned line numbers; and {@Code NoPrint}, meaning that blank lines -are assigned line numbers but these numbers are not printed, so that -the line numbers printed before and after a single blank line will -differ by 2. +are assigned line numbers but these are not printed, so that the line +numbers printed before and after a blank line will differ by 2. @PP The {@Code "style"} option is already familiar. Next comes {@Code "font"}, which determines the font family to use, {@Code "size"}, diff --git a/doc/user/str_colu b/doc/user/str_colu index dc50194..84e1a4c 100644 --- a/doc/user/str_colu +++ b/doc/user/str_colu @@ -23,7 +23,7 @@ value 1 as shown, and @Code "@ColumnGap" may be any length (Section column.width @RawIndex { column width } column.width.in.pages @SubIndex { in pages } using the obvious formula -@ID @Eq { columnwidth = { pagewidth - margins - +@ID @Math { columnwidth = { pagewidth - margins - ({@Code "@ColumnNumber"} - 1) times {@Code "@ColumnGap"} } over @Code "@ColumnNumber" } diff --git a/doc/user/str_cont b/doc/user/str_cont index 3a802ae..da1653c 100644 --- a/doc/user/str_cont +++ b/doc/user/str_cont @@ -20,14 +20,18 @@ a table of contents in any type of document. Section @NumberOf setup describes setup files in general and how to change the options within them. The options relevant to tables of contents and their default values are: -@ID @OneRow @Code { -"@MakeContents { No }" -"@ContentsGap { 0.20v }" -"@ContentsGapAbove { 0.80v }" -"@ContentsGapBelow { 0.00v }" -"@ContentsLeader { .. }" -"@ContentsLeaderGap { 4s }" -"@ContentsRightWidth { 3f }" +@ID @OneRow @Code @Verbatim { +@MakeContents { No } +@ContentsGap { 0.2v } +@ContentsGapAbove { 0.8v } +@ContentsGapBelow { 0.0v } +@ContentsFont { Bold } +@ContentsPartGapAbove { 1.0v } +@ContentsPartGapBelow { 0.0v } +@ContentsFormat { number @DotSep title } +@ContentsLeader { .. } +@ContentsLeaderGap { 4s } +@ContentsRightWidth { 3f } } The @Code "@MakeContents" option may be @Code Yes or {@Code No}, and makecontents. @Index @Code "@MakeContents" @@ -39,7 +43,7 @@ file. contentsgap. @Index @Code "@ContentsGap" above each line of the table of contents, in addition to the usual single line spacing; its value may be any length (Section -{@NumberOf objects}). The default value, {@Code "0.20v"}, is twenty +{@NumberOf objects}). The default value, {@Code "0.2v"}, is twenty percent of the current inter-line spacing. @PP Some entries, such as those for chapters and appendices in books, are @@ -48,7 +52,22 @@ entries; instead, @Code "@ContentsGapAbove" and @Code "@ContentsGapBelow" contentsgapabove. @Index @Code "@ContentsGapAbove" contentsgapbelow. @Index @Code "@ContentsGapBelow" are used above and below each of them, again in addition to the usual -single line spacing. +single line spacing. @Code "@ContentsFont" also applies only to these +`major entries', and determines their font. The default value causes +them to appear in Bold. +@PP +@Code "@ContentsPartGapAbove" and @Code "@ContentsPartGapBelow" are +like @Code "@ContentsGapAbove" and @Code "@ContentsGapBelow", except +that they are used before and after contents entries that denote +book parts. +@PP +@Code "@ContentsFormat" determines the format of each entry of +contentsformat. @Index @Code "@ContentsFormat" +the table of contents. Within it, @Code number stands for the +number of the chapter, section, or whatever, and @Code title +for its title. The default value, {@Code "number @DotSep title"}, +produces the number followed by a dot, two spaces, and the title, +or just the title if there is no number. @PP @Code "@ContentsLeader" is the object which is repeated across the page contentsleader. @Index @Code "@ContentsLeader" diff --git a/doc/user/str_cros b/doc/user/str_cros index 0d3f857..c9caaed 100644 --- a/doc/user/str_cros +++ b/doc/user/str_cros @@ -53,10 +53,10 @@ of the document. For example, the result for this document is Cross referencing also applies to large-scale structure symbols such as @Code "@Chapter" and @Code "@Section" (any symbol with a @Code "@Title" option), as well as @Code { "@FootNote" }, @Code { "@EndNote" }, -@Code { "@Figure" }, @Code { "@Table" }, the numbered display -symbols, and @Code "@ListItem" and @Code "@DropListItem" (but not -@Code "@TagItem" and {@Code "@DropTagItem"}). Each of these symbols -has a @Code "@Tag" option: +@Code { "@Figure" }, @Code { "@Table" }, @Code { "@Floater" }, the +numbered display symbols, and @Code "@ListItem" and @Code "@DropListItem" +(but not @Code "@TagItem" and {@Code "@DropTagItem"}). Each of these +symbols has a @Code "@Tag" option: tag.option. @Index { @Code "@Tag" option } @ID @OneRow @Code { "@Section" @@ -80,7 +80,10 @@ For further information on this point, please consult Section @NumberOf cross (page @PageOf { cross }). } For symbols with a @Code "@Title" option (chapters, sections, etc.) -there is also the @Code "@TitleOf" symbol: +or a @Code "@Caption" option (@Code { "@Figure" }, @Code { "@Table" }, +and @Code { "@Floater" }) there is also the @Code "@TitleOf" symbol, +titleof. @Index @Code "@TitleOf" +which returns the value of the @Code "@Title" or @Code "@Caption" option: @ID @OneRow @Code { "For further information on this point, please consult" "the @TitleOf { cross } section." @@ -91,7 +94,15 @@ For further information on this point, please consult the @TitleOf { cross } section. } But this symbol won't work for footnotes, list items, and other -things without a title. +things without a title or caption. +@PP +For those with more expertise in using Lout, there is a +pageparityof. @Index @Code "@PageParityOf" +@Code "@PageParityOf" symbol which is very similar to @Code "@PageOf" +except that it returns one of the two words @Code "Odd" and @Code "Even" +instead of a page number, indicating whether the object it references is +printed on an odd or even page. For example, @Code "@PageParityOf cross" +produces @Code {@PageParityOf cross}. @PP Like all tags, the value of the @Code "@Tag" option should be a simple word (although Lout does accept multi-word tags). Cross referencing of @@ -202,7 +213,7 @@ External links are obtained in much the same way as internal ones, except that the symbol to use is @Code "@ExternalLink" and instead of supplying a tag, you need to supply a URL: @ID @Code { -"\"http://snark.ptc.spbu.ru/~uwe/lout/lout.html\" @ExternalLink { Lout Home Page }" +"\"http://lout.wiki.sourceforge.net/\" @ExternalLink { Lout Home Page }" } Once again the result is the object to the right, modified by any @Code "@Format" option; and there is an {@Code "@ExternalLinkFormat"} diff --git a/doc/user/str_theo b/doc/user/str_theo index 5d85c37..672cd28 100644 --- a/doc/user/str_theo +++ b/doc/user/str_theo @@ -7,26 +7,26 @@ examples, and claims } @PP theorem. @Index @Code "@Theorem" A theorem is created like this: -@ID @OneRow @Code { -"@LD @Theorem" -" @Title { Fermat's Last Theorem }" -"{" -"@Eq { a sup n + b sup n != c sup n } for all positive integers @Eq { a }," -"@Eq { b }, @Eq { c } and @Eq { n } when @Eq { n > 2 }." -"@LP" -"@Proof I have a proof of this theorem, but the margin" -"is too small to contain it. @EndProof" -"}" +@ID @OneRow @Code @Verbatim { +@LD @Theorem + @Title { Fermat's Last Theorem } +{ +@M { a sup n + b sup n != c sup n } for all positive integers @M { a }, +@M { b }, @M { c } and @M { n } when @M { n > 2 }. +@LP +@Proof I have a proof of this theorem, but the margin +is too small to contain it. @EndProof +} } where we have used the @Code "@LD" `left display' symbol from Section {@NumberOf displays} to get a left-justified display, -and the @Code "@Eq" symbol from Chapter {@NumberOf equations} +and the @Code "@M" symbol from Chapter {@NumberOf mathematics} for the equations. The result is @ID @Theorem @Title { Fermat's Last Theorem } { -@Eq { a sup n + b sup n != c sup n } for all positive integers @Eq { a }, -@Eq { b }, @Eq { c } and @Eq { n } when @Eq { n > 2 }. +@M { a sup n + b sup n != c sup n } for all positive integers @M { a }, +@M { b }, @M { c } and @M { n } when @M { n > 2 }. @LP @Proof I have a proof of this theorem, but the margin is too small to contain it. @EndProof diff --git a/doc/user/tbl b/doc/user/tbl index 012f20e..7b374b3 100644 --- a/doc/user/tbl +++ b/doc/user/tbl @@ -17,12 +17,12 @@ tables. @Index { tables } X { Value of mathematical formulae (millions of dollars) } @Rowb A { Quadratic formula } - B { @Eq { x ^= { minus b +- sqrt { b sup 2 - 4ac } } over 2a } } + B { @M { x ^= { minus b +- sqrt { b sup 2 - 4ac } } over 2a } } C { 3^.5 } @Rowb A { Binomial theorem } - B { @Eq { ( a + b ) sup n ^= big sum from k=0 to infty -matrix atleft { ( } atright { ) } { n above k } a sup k b sup n-k + B { @M { ( a + b ) sup n ^= sum from { k=0 } to { infty } +pmatrix { row ccol n row ccol k } a sup k b sup n-k } } C { 12^ } } diff --git a/doc/user/typ_apdf b/doc/user/typ_apdf index 531f9c9..232610c 100644 --- a/doc/user/typ_apdf +++ b/doc/user/typ_apdf @@ -25,4 +25,23 @@ the results are disappointing. The only way to get the best of everything is to produce PostScript, and then either pass it through a `distillation' program to produce PDF, or else view it with a PostScript viewer that understands links. +@PP +When generating PostScript for subsequent distillation to PDF, the +docinfo. @Index @Code "@DocInfo" +@Code "@DocInfo" symbol may be useful. Placed anywhere in the +document, it generates PostScript which causes the subsequent PDF to +contain a `document info dictionary' containing the author of the +document, its title, and some keywords: +@ID @Code @Verbatim { +@DocInfo + author { Jeffrey H. Kingston } + title { A User's Guide to the Lout Document Formatting System } + keywords { Lout, PostScript, PDF } +} +The values of the options are restricted to sequences of simple words, +as shown, since this is all that PDF document info dictionaries may +contain. All three options are optional; if one is omitted, the +dictionary will simply not have the corresponding entry, which is +legal in PDF. There is no way to have the author and title taken +automatically from @Code "@Author" and @Code "@Title" options. @End @Section diff --git a/doc/user/typ_book b/doc/user/typ_book index c62885e..0f46a47 100644 --- a/doc/user/typ_book +++ b/doc/user/typ_book @@ -209,7 +209,22 @@ No @Code "@BeginChapters" or @Code "@EndChapters" symbols are beginchapters. @Index @Code "@BeginChapters" endchapters. @Index @Code "@EndChapters" needed, because these chapters are not inside any other large-scale -structure symbol. Within a chapter, there may be a sequence of sections, +structure symbol. +@PP +In addition to all the usual options for large-scale structure symbols, +@Code "@Chapter" offers {@Code "@BypassWord"}, which may be used to +replace the `Chapter' word for this chapter only. For example, +@ID @OneRow @Code { +"@Chapter" +" @BypassWord { Appendix }" +"..." +} +could be used to place (what appears to the reader to be) an Appendix +at the end of a part, or indeed anywhere at all. The chapter numbers +are not affected. To change this word in all chapters, the +@Code "@ChapterWord" setup file option is preferred. +@PP +Within a chapter, there may be a sequence of sections, each introduced by {@Code "@Section"}, all bracketed section.books @SubIndex { in books } by @Code "@BeginSections" and {@Code "@EndSections"}: diff --git a/doc/user/typ_illu b/doc/user/typ_illu index ec62140..80b66f3 100644 --- a/doc/user/typ_illu +++ b/doc/user/typ_illu @@ -44,6 +44,7 @@ with their default values: " @InitialSpace { lout }" " @InitialLanguage { English }" " @InitialColour { black }" +" @InitialBackgroundColour { white }" "{" " ..." "}" diff --git a/doc/user/typ_over b/doc/user/typ_over index aced99c..8188422 100644 --- a/doc/user/typ_over +++ b/doc/user/typ_over @@ -221,6 +221,10 @@ are some of these options and their default values: # @LectureNumbers { Arabic } # @OverheadNumbers { Arabic } # @TitlePageFont { Helvetica Base } + # @TitleFormat { @Center clines @Break title } + # @AuthorFormat { @Center clines @Break author } + # @InstitutionFormat { @Center clines @Break @I institution } + # @DateLineFormat { @Center date } # @AboveTitleGap { 0.5i } # @AboveAuthorGap { 1.0i } # @AboveInstitutionGap { 0.5i } @@ -242,7 +246,8 @@ produces `Contents' in the current language. @Code "@LectureNumbers" and @Code "@OverheadNumbers" determine the style of numbering of lectures and overheads, and may be {@Code None}, {@Code Arabic}, {@Code Roman}, {@Code UCRoman}, {@Code Alpha}, or {@Code UCAlpha} as usual. Next come -options for setting the font of the overall title page, the gap +options for setting the font of the overall title page, the format of +the title, author, institution, and dateline parts of it, the gap above the title, author, institution, and dateline that appear on that page; then options controlling the appearance of the headings at the start of each lecture and overhead, and finally options which determine diff --git a/doc/user/typ_plai b/doc/user/typ_plai index 8b5c327..00aa8b9 100644 --- a/doc/user/typ_plai +++ b/doc/user/typ_plai @@ -24,8 +24,8 @@ example, {@Code "@Bullet"} produces {@Code "o"}. However, the @Code "@Char" and @Code "@Sym" symbols often produce unprintable characters, and are best avoided; } @LI { All font and size changes are ignored, since plain text has only -one font and size. Every character is taken to be @Eq { 1 frac 10 } inch -wide and @Eq { 1 frac 6 } inch high; } +one font and size. Every character is taken to be @M { 1 frac 10 } inch +wide and @M { 1 frac 6 } inch high; } @LI { No underlines are printed; } @LI { No margin notes are printed; } @LI { Scaled objects are not printed unless the scale factor happens to be 1; } @@ -43,9 +43,9 @@ The worst problem with plain text is that characters cannot be placed at arbitrary points on the page. A superscript, for example, is impossible to place correctly, so Lout uses a different layout for footnote labels (and makes a mess of equations, which are best avoided). Because of this problem -it's best to make all horizontal lengths multiples of @Eq {1 frac 10} inch +it's best to make all horizontal lengths multiples of @M {1 frac 10} inch (conveniently expressed as {@Code 1s}), and all vertical lengths multiples -of @Eq { 1 frac 6 } inch (conveniently expressed as {@Code 1f}). To help +of @M { 1 frac 6 } inch (conveniently expressed as {@Code 1f}). To help you do this, the setup files contain many entries that look like this example: @ID @Code "# @InitialBreak { {adjust 1.2fx hyphen} @OrIfPlain {ragged 1fx nohyphen} }" diff --git a/doc/user/vgra b/doc/user/vgra index a4d173d..60b9b5b 100644 --- a/doc/user/vgra +++ b/doc/user/vgra @@ -1,11 +1,2 @@ -gvim gra -gvim gra_intr -gvim gra_over -gvim gra_capt -gvim gra_tick -gvim gra_data -gvim gra_plac -gvim gra_func -gvim gra_keys -gvim gra_erro -gvim gra_summ +gvt gra gra_intr gra_over gra_capt gra_tick gra_data gra_plac gra_func \ + gra_keys gra_erro gra_summ diff --git a/doc/user/vmat b/doc/user/vmat new file mode 100755 index 0000000..9241985 --- /dev/null +++ b/doc/user/vmat @@ -0,0 +1 @@ +gvt mat mat_intr mat_comm mat_matr mat_disp mat_defs mat_summ |