1 .\" $Id: eqn.7,v 1.37 2017/09/04 10:35:27 schwarze Exp $ 2 .\" 3 .\" Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv> 4 .\" Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org> 5 .\" 6 .\" Permission to use, copy, modify, and distribute this software for any 7 .\" purpose with or without fee is hereby granted, provided that the above 8 .\" copyright notice and this permission notice appear in all copies. 9 .\" 10 .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 11 .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 12 .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 13 .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 14 .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 15 .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 16 .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 17 .\" 18 .Dd $Mdocdate: September 4 2017 $ 19 .Dt EQN 5 20 .Os 21 .Sh NAME 22 .Nm eqn 23 .Nd eqn language reference for mandoc 24 .Sh DESCRIPTION 25 The 26 .Nm eqn 27 language is an equation-formatting language. 28 It is used within 29 .Xr mdoc 5 30 and 31 .Xr man 5 32 .Ux 33 manual pages. 34 It describes the 35 .Em structure 36 of an equation, not its mathematical meaning. 37 This manual describes the 38 .Nm 39 language accepted by the 40 .Xr mandoc 1 41 utility, which corresponds to the Second Edition 42 .Nm 43 specification (see 44 .Sx SEE ALSO 45 for references). 46 .Pp 47 Equations within 48 .Xr mdoc 5 49 or 50 .Xr man 5 51 documents are enclosed by the standalone 52 .Sq \&.EQ 53 and 54 .Sq \&.EN 55 tags. 56 Equations are multi-line blocks consisting of formulas and control 57 statements. 58 .Sh EQUATION STRUCTURE 59 Each equation is bracketed by 60 .Sq \&.EQ 61 and 62 .Sq \&.EN 63 strings. 64 .Em Note : 65 these are not the same as 66 .Xr mandoc_roff 5 67 macros, and may only be invoked as 68 .Sq \&.EQ . 69 .Pp 70 The equation grammar is as follows, where quoted strings are 71 case-sensitive literals in the input: 72 .Bd -literal -offset indent 73 eqn : box | eqn box 74 box : text 75 | \(dq{\(dq eqn \(dq}\(dq 76 | \(dqdefine\(dq text text 77 | \(dqndefine\(dq text text 78 | \(dqtdefine\(dq text text 79 | \(dqgfont\(dq text 80 | \(dqgsize\(dq text 81 | \(dqset\(dq text text 82 | \(dqundef\(dq text 83 | \(dqsqrt\(dq box 84 | box pos box 85 | box mark 86 | \(dqmatrix\(dq \(dq{\(dq [col \(dq{\(dq list \(dq}\(dq]* \(dq}\(dq 87 | pile \(dq{\(dq list \(dq}\(dq 88 | font box 89 | \(dqsize\(dq text box 90 | \(dqleft\(dq text eqn [\(dqright\(dq text] 91 col : \(dqlcol\(dq | \(dqrcol\(dq | \(dqccol\(dq | \(dqcol\(dq 92 text : [^space\e\(dq]+ | \e\(dq.*\e\(dq 93 pile : \(dqlpile\(dq | \(dqcpile\(dq | \(dqrpile\(dq | \(dqpile\(dq 94 pos : \(dqover\(dq | \(dqsup\(dq | \(dqsub\(dq | \(dqto\(dq | \(dqfrom\(dq 95 mark : \(dqdot\(dq | \(dqdotdot\(dq | \(dqhat\(dq | \(dqtilde\(dq | \(dqvec\(dq 96 | \(dqdyad\(dq | \(dqbar\(dq | \(dqunder\(dq 97 font : \(dqroman\(dq | \(dqitalic\(dq | \(dqbold\(dq | \(dqfat\(dq 98 list : eqn 99 | list \(dqabove\(dq eqn 100 space : [\e^~ \et] 101 .Ed 102 .Pp 103 White-space consists of the space, tab, circumflex, and tilde 104 characters. 105 It is required to delimit tokens consisting of alphabetic characters 106 and it is ignored at other places. 107 Braces and quotes also delimit tokens. 108 If within a quoted string, these space characters are retained. 109 Quoted strings are also not scanned for keywords, glyph names, 110 and expansion of definitions. 111 To print a literal quote character, it can be prepended with a 112 backslash or expressed with the \e(dq escape sequence. 113 .Pp 114 Subequations can be enclosed in braces to pass them as arguments 115 to operation keywords, overriding standard operation precedence. 116 Braces can be nested. 117 To set a brace verbatim, it needs to be enclosed in quotes. 118 .Pp 119 The following text terms are translated into a rendered glyph, if 120 available: alpha, beta, chi, delta, epsilon, eta, gamma, iota, kappa, 121 lambda, mu, nu, omega, omicron, phi, pi, psi, rho, sigma, tau, theta, 122 upsilon, xi, zeta, DELTA, GAMMA, LAMBDA, OMEGA, PHI, PI, PSI, SIGMA, 123 THETA, UPSILON, XI, inter (intersection), union (union), prod (product), 124 int (integral), sum (summation), grad (gradient), del (vector 125 differential), times (multiply), cdot (center-dot), nothing (zero-width 126 space), approx (approximately equals), prime (prime), half (one-half), 127 partial (partial differential), inf (infinity), >> (much greater), << 128 (much less), <\- (left arrow), \-> (right arrow), +\- (plus-minus), != 129 (not equal), == (equivalence), <= (less-than-equal), and >= 130 (more-than-equal). 131 The character escape sequences documented in 132 .Xr mandoc_char 5 133 can be used, too. 134 .Pp 135 The following control statements are available: 136 .Bl -tag -width Ds 137 .It Cm define 138 Replace all occurrences of a key with a value. 139 Its syntax is as follows: 140 .Pp 141 .D1 Cm define Ar key cvalc 142 .Pp 143 The first character of the value string, 144 .Ar c , 145 is used as the delimiter for the value 146 .Ar val . 147 This allows for arbitrary enclosure of terms (not just quotes), such as 148 .Pp 149 .D1 Cm define Ar foo \(aqbar baz\(aq 150 .D1 Cm define Ar foo cbar bazc 151 .Pp 152 It is an error to have an empty 153 .Ar key 154 or 155 .Ar val . 156 Note that a quoted 157 .Ar key 158 causes errors in some 159 .Nm 160 implementations and should not be considered portable. 161 It is not expanded for replacements. 162 Definitions may refer to other definitions; these are evaluated 163 recursively when text replacement occurs and not when the definition is 164 created. 165 .Pp 166 Definitions can create arbitrary strings, for example, the following is 167 a legal construction. 168 .Bd -literal -offset indent 169 define foo \(aqdefine\(aq 170 foo bar \(aqbaz\(aq 171 .Ed 172 .Pp 173 Self-referencing definitions will raise an error. 174 The 175 .Cm ndefine 176 statement is a synonym for 177 .Cm define , 178 while 179 .Cm tdefine 180 is discarded. 181 .It Cm gfont 182 Set the default font of subsequent output. 183 Its syntax is as follows: 184 .Pp 185 .D1 Cm gfont Ar font 186 .Pp 187 In mandoc, this value is discarded. 188 .It Cm gsize 189 Set the default size of subsequent output. 190 Its syntax is as follows: 191 .Pp 192 .D1 Cm gsize Oo +|\- Oc Ns Ar size 193 .Pp 194 The 195 .Ar size 196 value should be an integer. 197 If prepended by a sign, 198 the font size is changed relative to the current size. 199 .It Cm set 200 Set an equation mode. 201 In mandoc, both arguments are thrown away. 202 Its syntax is as follows: 203 .Pp 204 .D1 Cm set Ar key val 205 .Pp 206 The 207 .Ar key 208 and 209 .Ar val 210 are not expanded for replacements. 211 This statement is a GNU extension. 212 .It Cm undef 213 Unset a previously-defined key. 214 Its syntax is as follows: 215 .Pp 216 .D1 Cm define Ar key 217 .Pp 218 Once invoked, the definition for 219 .Ar key 220 is discarded. 221 The 222 .Ar key 223 is not expanded for replacements. 224 This statement is a GNU extension. 225 .El 226 .Pp 227 Operation keywords have the following semantics: 228 .Bl -tag -width Ds 229 .It Cm above 230 See 231 .Cm pile . 232 .It Cm bar 233 Draw a line over the preceding box. 234 .It Cm bold 235 Set the following box using bold font. 236 .It Cm ccol 237 Like 238 .Cm cpile , 239 but for use in 240 .Cm matrix . 241 .It Cm cpile 242 Like 243 .Cm pile , 244 but with slightly increased vertical spacing. 245 .It Cm dot 246 Set a single dot over the preceding box. 247 .It Cm dotdot 248 Set two dots (dieresis) over the preceding box. 249 .It Cm dyad 250 Set a dyad symbol (left-right arrow) over the preceding box. 251 .It Cm fat 252 A synonym for 253 .Cm bold . 254 .It Cm font 255 Set the second argument using the font specified by the first argument; 256 currently not recognized by the 257 .Xr mandoc 1 258 .Nm 259 parser. 260 .It Cm from 261 Set the following box below the preceding box, 262 using a slightly smaller font. 263 Used for sums, integrals, limits, and the like. 264 .It Cm hat 265 Set a hat (circumflex) over the preceding box. 266 .It Cm italic 267 Set the following box using italic font. 268 .It Cm lcol 269 Like 270 .Cm lpile , 271 but for use in 272 .Cm matrix . 273 .It Cm left 274 Set the first argument as a big left delimiter before the second argument. 275 As an optional third argument, 276 .Cm right 277 can follow. 278 In that case, the fourth argument is set as a big right delimiter after 279 the second argument. 280 .It Cm lpile 281 Like 282 .Cm cpile , 283 but subequations are left-justified. 284 .It Cm matrix 285 Followed by a list of columns enclosed in braces. 286 All columns need to have the same number of subequations. 287 The columns are set as a matrix. 288 The difference compared to multiple subsequent 289 .Cm pile 290 operators is that in a 291 .Cm matrix , 292 corresponding subequations in all columns line up horizontally, 293 while each 294 .Cm pile 295 does vertical spacing independently. 296 .It Cm over 297 Set a fraction. 298 The preceding box is the numerator, the following box is the denominator. 299 .It Cm pile 300 Followed by a list of subequations enclosed in braces, 301 the subequations being separated by 302 .Cm above 303 keywords. 304 Sets the subequations one above the other, each of them centered. 305 Typically used to represent vectors in coordinate representation. 306 .It Cm rcol 307 Like 308 .Cm rpile , 309 but for use in 310 .Cm matrix . 311 .It Cm right 312 See 313 .Cm left ; 314 .Cm right 315 cannot be used without 316 .Cm left . 317 To set a big right delimiter without a big left delimiter, the following 318 construction can be used: 319 .Pp 320 .D1 Cm left No \(dq\(dq Ar box Cm right Ar delimiter 321 .It Cm roman 322 Set the following box using the default font. 323 .It Cm rpile 324 Like 325 .Cm cpile , 326 but subequations are right-justified. 327 .It Cm size 328 Set the second argument with the font size specified by the first 329 argument; currently ignored by 330 .Xr mandoc 1 . 331 By prepending a plus or minus sign to the first argument, 332 the font size can be selected relative to the current size. 333 .It Cm sqrt 334 Set the square root of the following box. 335 .It Cm sub 336 Set the following box as a subscript to the preceding box. 337 .It Cm sup 338 Set the following box as a superscript to the preceding box. 339 As a special case, if a 340 .Cm sup 341 clause immediately follows a 342 .Cm sub 343 clause as in 344 .Pp 345 .D1 Ar mainbox Cm sub Ar subbox Cm sup Ar supbox 346 .Pp 347 both are set with respect to the same 348 .Ar mainbox , 349 that is, 350 .Ar supbox 351 is set above 352 .Ar subbox . 353 .It Cm tilde 354 Set a tilde over the preceding box. 355 .It Cm to 356 Set the following box above the preceding box, 357 using a slightly smaller font. 358 Used for sums and integrals and the like. 359 As a special case, if a 360 .Cm to 361 clause immediately follows a 362 .Cm from 363 clause as in 364 .Pp 365 .D1 Ar mainbox Cm from Ar frombox Cm to Ar tobox 366 .Pp 367 both are set below and above the same 368 .Ar mainbox . 369 .It Cm under 370 Underline the preceding box. 371 .It Cm vec 372 Set a vector symbol (right arrow) over the preceding box. 373 .El 374 .Pp 375 The binary operations 376 .Cm from , 377 .Cm to , 378 .Cm sub , 379 and 380 .Cm sup 381 group to the right, that is, 382 .Pp 383 .D1 Ar mainbox Cm sup Ar supbox Cm sub Ar subbox 384 .Pp 385 is the same as 386 .Pp 387 .D1 Ar mainbox Cm sup Brq Ar supbox Cm sub Ar subbox 388 .Pp 389 and different from 390 .Pp 391 .D1 Bro Ar mainbox Cm sup Ar supbox Brc Cm sub Ar subbox . 392 .Pp 393 By contrast, 394 .Cm over 395 groups to the left. 396 .Pp 397 In the following list, earlier operations bind more tightly than 398 later operations: 399 .Pp 400 .Bl -enum -compact 401 .It 402 .Cm dyad , 403 .Cm vec , 404 .Cm under , 405 .Cm bar , 406 .Cm tilde , 407 .Cm hat , 408 .Cm dot , 409 .Cm dotdot 410 .It 411 .Cm fat , 412 .Cm roman , 413 .Cm italic , 414 .Cm bold , 415 .Cm size 416 .It 417 .Cm sub , 418 .Cm sup 419 .It 420 .Cm sqrt 421 .It 422 .Cm over 423 .It 424 .Cm from , 425 .Cm to 426 .El 427 .Sh COMPATIBILITY 428 This section documents the compatibility of mandoc 429 .Nm 430 and the troff 431 .Nm 432 implementation (including GNU troff). 433 .Pp 434 .Bl -dash -compact 435 .It 436 The text string 437 .Sq \e\(dq 438 is interpreted as a literal quote in troff. 439 In mandoc, this is interpreted as a comment. 440 .It 441 In troff, The circumflex and tilde white-space symbols map to 442 fixed-width spaces. 443 In mandoc, these characters are synonyms for the space character. 444 .It 445 The troff implementation of 446 .Nm 447 allows for equation alignment with the 448 .Cm mark 449 and 450 .Cm lineup 451 tokens. 452 mandoc discards these tokens. 453 The 454 .Cm back Ar n , 455 .Cm fwd Ar n , 456 .Cm up Ar n , 457 and 458 .Cm down Ar n 459 commands are also ignored. 460 .El 461 .Sh SEE ALSO 462 .Xr mandoc 1 , 463 .Xr man 5 , 464 .Xr mandoc_char 5 , 465 .Xr mandoc_roff 5 , 466 .Xr mdoc 5 467 .Rs 468 .%A Brian W. Kernighan 469 .%A Lorinda L. Cherry 470 .%T System for Typesetting Mathematics 471 .%J Communications of the ACM 472 .%V 18 473 .%P 151\(en157 474 .%D March, 1975 475 .Re 476 .Rs 477 .%A Brian W. Kernighan 478 .%A Lorinda L. Cherry 479 .%T Typesetting Mathematics, User's Guide 480 .%D 1976 481 .Re 482 .Rs 483 .%A Brian W. Kernighan 484 .%A Lorinda L. Cherry 485 .%T Typesetting Mathematics, User's Guide (Second Edition) 486 .%D 1978 487 .Re 488 .Sh HISTORY 489 The eqn utility, a preprocessor for troff, was originally written by 490 Brian W. Kernighan and Lorinda L. Cherry in 1975. 491 The GNU reimplementation of eqn, part of the GNU troff package, was 492 released in 1989 by James Clark. 493 The eqn component of 494 .Xr mandoc 1 495 was added in 2011. 496 .Sh AUTHORS 497 This 498 .Nm 499 reference was written by 500 .An Kristaps Dzonsons Aq Mt kristaps@bsd.lv .