1 .\" PSTITLE: Typesetting Mathematics with Neateqn
4 .ps.info "Typesetting Mathematics with Neateqn" "Ali Gholami Rudi"
7 \f(HD\s+8Typesetting Mathematics with Neateqn\m0\s-8\fP
11 This document briefly introduces Neateqn, an eqn implementation for
12 typesetting mathematical formulas in Neatroff. For further
13 information about Neatroff and Neateqn, see
14 http:/\h'-.3n'/litcave.rudi.ir/.
17 Neatroff follows the rules described in appendix \s-1G\s+1 of Knuth's
18 Texbook, which explains Tex's algorithm for typesetting mathematical
19 formulas. In Tex, the sub-formulas of a formula are always typeset in
20 one of the eight predefined styles. The formulas inside
21 \&\s-1.EQ/.EN\s+1 blocks are rendered in displayed styles and inline
22 equations are rendered in text styles.
23 Their main difference is that in text styles formulas are
24 vertically more compact to reduce the amount of extra
25 spacing required to be inserted between lines.
27 The default value of the parameters of the typesetting algorithm,
28 such as the position of subscripts, can be changed.
29 These parameters are described in appendix \s-1G\s+1 of the Texbook
30 and can be modified in Neatroff with Groff eqn-style \(lqset\(rq command.
31 See Groff eqn manual page or the Texbook for their list and explanations.
33 .SH "Defining Custom Brackets
34 It is possible to adjust the default brackets or define new ones. Two
35 commands are available for this purpose: one for specifying different
36 bracket sizes (bracketsizes) and one for specifying bracket building
37 glyphs (bracketpieces):
40 bracketsizes sign N glyph1 glyph2 ... glyphN
41 bracketpieces sign top mid bot cen
45 In these commands, sign is the token placed after the \(lqleft\(rq and
46 \(lqright\(rq keywords in equations. In bracketsizes command, the
47 glyphs should be ordered based on their size with the smallest glyph
48 appearing first. Neateqn tries the specified glyphs in the same order
49 until it finds the glyph that is large enough for the enclosed
50 formula. If this fails, it tries to build the bracket if its pieces
51 are defined (by default or with bracketpieces). The four arguments of
52 bracketpieces specify the glyphs required for building the bracket.
53 The last argument can be empty if the bracket has no centre (\\(lk is
54 the centre of {, for instance).
56 As an example, the following lines show how the default opening and
57 closing parenthesis can be defined:
60 bracketpieces ( "\\(LT" "\\(LX" "\\(LB" ""
61 bracketpieces ) "\\(RT" "\\(RX" "\\(RB" ""
65 The following lines do so for braces:
68 bracketpieces { "\\(lt" "\\(bv" "\\(lb" "\\(lk"
69 bracketpieces } "\\(rt" "\\(bv" "\\(rb" "\\(rk"
73 Also the following line instructs Neateqn to use Tex's open
74 parenthesis glyphs with different sizes (note that in Neatroff \\\s-1N\s+1'gid' is
75 the glyph with device-dependent name gid):
78 bracketsizes ( 5 "(" "\\N'parenleftbig'" "\\N'parenleftBig'"
79 "\\N'parenleftbigg'" "\\N'parenleftBigg'"
85 .SH "Adjusting the Syntax"
86 The logic used in eqn to partition equations may seem odd to its new
87 users; for instant in \(lqO(n sup 2)\(rq, the expected result may
88 be $O ( n sup 2 )$, instead of $O(n sup {2)}$.
89 Even experienced eqn users occasionally make these
90 mistakes and some insert spaces around most tokens to prevent possible
91 surprises. Equations like \(lqO ( n sup 2 )\(rq, which prevent
92 most of these problems, do not look as good as the alternative, however. This
93 issue is one of the main advantages of Tex's more concise syntax. In
94 Neateqn it is possible to make equations like the first work.
96 Neateqn splits (chops) equations at specific characters. Equations
97 are always chopped at spaces and before and after open and close
98 braces. By default, equations are also chopped before and after \(ha,
99 \(ti, and " (but these can be changed). The -c option of Neateqn
100 allows specifying the characters, around which equations are chopped.
101 For instance, if \(lq\(ti\(ha"(),\(rq is passed with -c to Neateqn,
102 \(lqO(n sup 2)\(rq is interpreted as \(lqO ( n sup 2 )\(rq. This
103 may be considered an improvement but a more important advantage in
104 the author's opinion is that these characters may be redefined. For
105 instance, one may redefine open and close parenthesis as follows:
111 Then, it is possible to write \(lq(a over b) sup (c + 5)\(rq
112 to get $left ( a over b right ) sup left ( c + 5 right )$.
113 Note that macro arguments are never split away from macro name,
114 thus one can safely call \(lqlog(a, n)\(rq, if log is defined
115 as \(lqroman "log" sub {\N'dollar'1}({\N'dollar'2})\(rq.
117 .SH "Assigning Character Type
118 Neateqn determines the spacing between characters in an equation based
119 on their type (see chapter 18 of the Texbook for more information).
120 It is possible to specify or change the type of a character in Neateqn
121 with \(lqchartype\(rq command. Possible types are \(lqord\(rq for
122 ordinary atoms, \(lqop\(rq for large operators, \(lqbin\(rq for
123 binary operators, \(lqrel\(rq for relations, \(lqopen\(rq for opening
124 brackets, \(lqclose\(rq for closing brackets, \(lqpunct\(rq for
125 punctuations, \(lqinner\(rq for fractions.
126 As an example, the following line declares backslash as a binary operator:
132 The second argument of \(lqchartype\(rq command should be a Troff
133 character name. If the operator is not a character, it can be defined as one.
134 For instance, for \(lq>>\(rq and \(lqlog\(rq
135 operators, one may define the following two characters (note that
136 the following two lines are Neatroff requests and should be outside
137 \&\s-1.EQ/.EN\s+1 blocks):
139 \&.char \\[eqn.log] "log
140 \&.char \\[eqn.>>] ">\\h'-.1n'>
144 Then, the type of the operators can be specified as explained above:
146 chartype op \\[eqn.log]
147 chartype rel \\[eqn.>>]
151 Finally, macros like the following may be defined to improve the readability:
153 define >> @\\[eqn.>>]@
154 define log @\\[eqn.log]@
157 .SH "Breaking Equations"
158 Neateqn can break equations after top-level operators; This is
159 important especially when there are long inline equations in the text.
160 The \(lqbreakcost\(rq command can specify the cost of a line break
161 after different character types: its first argument is the character
162 type, as enumerated in the previous section, and its second argument
163 is the cost of line breaks after the given character type. Costs are
164 specified via Neatroff's \\j escape sequence (\(lqNeatroff
165 Introduction\(rq explains the meaning of these costs). The default
175 A value of 0 disables breaking equations for the specified character.
176 Note that Neateqn breaks equations after top-level operators only.
177 Thus, equations surrounded by braces will not be broken. The
178 following command instructs Neateqn never to break equations:
184 .SH "Using Tex Mathematical Symbols"
185 In order to use Tex's mathematical symbols in Neatroff, \s-1CMEX10\s+1 and
186 \s-1CMSY10\s+1 fonts (or their equivalents, for instance \s-1TXEX\s+1 and \s-1TXSY\s+1 for
187 Txfonts or \s-1PXEX\s+1 and \s-1PXSY\s+1 for Pxfonts) should be mounted and declared
188 as the special font of eqn Roman font (the font declared as grfont in
194 \&.fspecial R CMEX CMSY
198 If the italic font lacks Greek characters, \s-1CMMI10\s+1 (or its equivalents,
199 like \s-1RTXMI\s+1 for Txfonts or \s-1RPXMI\s+1 for Pxfonts) can be mounted and
200 declared as a special font of eqn italic font (the font declared as
209 Standard symbol can also be redefined to use Computer Modern glyphs,
210 like those for summation and product:
213 define sum @{vcenter roman "\\N'summationdisplay'"}@
214 define tsum @{vcenter roman "\\N'summationtext'"}@
215 define prod @{vcenter roman "\\N'productdisplay'"}@
216 define tprod @{vcenter roman "\\N'producttext'"}@
220 define sum @{vcenter roman "\N'summationdisplay'"}@
221 define tsum @{vcenter roman "\N'summationtext'"}@
222 define prod @{vcenter roman "\N'productdisplay'"}@
223 define tprod @{vcenter roman "\N'producttext'"}@
224 define small @size -4@
227 .SH "Some Samples For Different Fonts
230 Palatino and Computer Modern mathematical symbols:
232 (x + y) sup n = sum from i=0 to n left ( pile {n above i} right ) x sup i y sup n-i
237 left ( a over b right ) +
238 left { {x + a over b} over {y + c over d} }
240 sqrt {a} + sqrt {a over b} + sqrt { {x + a over b} over {y + c over d} }
244 Palatino and Pxfonts mathematical symbols:
248 (x + y) sup n = sum from i=0 to n left ( pile {n above i} right ) ^ x sup i y sup n-i
253 left ( a over b right ) +
254 left { {x + a over b} over {y + c over d} }
256 sqrt {a} + sqrt {a over b} + sqrt { {x + a over b} over {y + c over d} }
260 Times Roman and Txfonts mathematical symbols:
267 (x + y) sup n = sum from i=0 to n left ( pile {n above i} right ) ^ x sup i y sup n-i
272 left ( a over b right ) +
273 left { {x + a over b} over {y + c over d} }
275 sqrt {a} + sqrt {a over b} + sqrt { {x + a over b} over {y + c over d} }
287 .fspecial R CMSY CMEX10
290 (x + y) sup n = sum from i=0 to n left ( pile {n above i} right ) x sup i y sup n-i
295 left ( a over b right ) +
296 left { {x + a over b} over {y + c over d} }
298 sqrt {a} + sqrt {a over b} + sqrt { {x + a over b} over {y + c over d} }