1 EQN(5)                Standards, Environments, and Macros               EQN(5)
   2 
   3 NAME
   4      eqn - eqn language reference for mandoc
   5 
   6 DESCRIPTION
   7      The eqn language is an equation-formatting language.  It is used within
   8      mdoc(5) and man(5) UNIX manual pages.  It describes the structure of an
   9      equation, not its mathematical meaning.  This manual describes the eqn
  10      language accepted by the mandoc(1) utility, which corresponds to the
  11      Second Edition eqn specification (see SEE ALSO for references).
  12 
  13      Equations within mdoc(5) or man(5) documents are enclosed by the
  14      standalone `.EQ' and `.EN' tags.  Equations are multi-line blocks
  15      consisting of formulas and control statements.
  16 
  17 EQUATION STRUCTURE
  18      Each equation is bracketed by `.EQ' and `.EN' strings.  Note: these are
  19      not the same as mandoc_roff(5) macros, and may only be invoked as `.EQ'.
  20 
  21      The equation grammar is as follows, where quoted strings are case-
  22      sensitive literals in the input:
  23 
  24            eqn     : box | eqn box
  25            box     : text
  26                    | "{" eqn "}"
  27                    | "define" text text
  28                    | "ndefine" text text
  29                    | "tdefine" text text
  30                    | "gfont" text
  31                    | "gsize" text
  32                    | "set" text text
  33                    | "undef" text
  34                    | "sqrt" box
  35                    | box pos box
  36                    | box mark
  37                    | "matrix" "{" [col "{" list "}"]* "}"
  38                    | pile "{" list "}"
  39                    | font box
  40                    | "size" text box
  41                    | "left" text eqn ["right" text]
  42            col     : "lcol" | "rcol" | "ccol" | "col"
  43            text    : [^space\"]+ | \".*\"
  44            pile    : "lpile" | "cpile" | "rpile" | "pile"
  45            pos     : "over" | "sup" | "sub" | "to" | "from"
  46            mark    : "dot" | "dotdot" | "hat" | "tilde" | "vec"
  47                    | "dyad" | "bar" | "under"
  48            font    : "roman" | "italic" | "bold" | "fat"
  49            list    : eqn
  50                    | list "above" eqn
  51            space   : [\^~ \t]
  52 
  53      White-space consists of the space, tab, circumflex, and tilde characters.
  54      It is required to delimit tokens consisting of alphabetic characters and
  55      it is ignored at other places.  Braces and quotes also delimit tokens.
  56      If within a quoted string, these space characters are retained.  Quoted
  57      strings are also not scanned for keywords, glyph names, and expansion of
  58      definitions.  To print a literal quote character, it can be prepended
  59      with a backslash or expressed with the \(dq escape sequence.
  60 
  61      Subequations can be enclosed in braces to pass them as arguments to
  62      operation keywords, overriding standard operation precedence.  Braces can
  63      be nested.  To set a brace verbatim, it needs to be enclosed in quotes.
  64 
  65      The following text terms are translated into a rendered glyph, if
  66      available: alpha, beta, chi, delta, epsilon, eta, gamma, iota, kappa,
  67      lambda, mu, nu, omega, omicron, phi, pi, psi, rho, sigma, tau, theta,
  68      upsilon, xi, zeta, DELTA, GAMMA, LAMBDA, OMEGA, PHI, PI, PSI, SIGMA,
  69      THETA, UPSILON, XI, inter (intersection), union (union), prod (product),
  70      int (integral), sum (summation), grad (gradient), del (vector
  71      differential), times (multiply), cdot (center-dot), nothing (zero-width
  72      space), approx (approximately equals), prime (prime), half (one-half),
  73      partial (partial differential), inf (infinity), >>   (much greater), <<
  74      (much less), <- (left arrow), -> (right arrow), +-   (plus-minus), != (not
  75      equal), == (equivalence), <= (less-than-equal), and >= (more-than-equal).
  76      The character escape sequences documented in mandoc_char(5) can be used,
  77      too.
  78 
  79      The following control statements are available:
  80 
  81      define  Replace all occurrences of a key with a value.  Its syntax is as
  82              follows:
  83 
  84                    define key cvalc
  85 
  86              The first character of the value string, c, is used as the
  87              delimiter for the value val.  This allows for arbitrary enclosure
  88              of terms (not just quotes), such as
  89 
  90                    define foo 'bar baz'
  91                    define foo cbar bazc
  92 
  93              It is an error to have an empty key or val.  Note that a quoted
  94              key causes errors in some eqn implementations and should not be
  95              considered portable.  It is not expanded for replacements.
  96              Definitions may refer to other definitions; these are evaluated
  97              recursively when text replacement occurs and not when the
  98              definition is created.
  99 
 100              Definitions can create arbitrary strings, for example, the
 101              following is a legal construction.
 102 
 103                    define foo 'define'
 104                    foo bar 'baz'
 105 
 106              Self-referencing definitions will raise an error.  The ndefine
 107              statement is a synonym for define, while tdefine is discarded.
 108 
 109      gfont   Set the default font of subsequent output.  Its syntax is as
 110              follows:
 111 
 112                    gfont font
 113 
 114              In mandoc, this value is discarded.
 115 
 116      gsize   Set the default size of subsequent output.  Its syntax is as
 117              follows:
 118 
 119                    gsize [+|-]size
 120 
 121              The size value should be an integer.  If prepended by a sign, the
 122              font size is changed relative to the current size.
 123 
 124      set     Set an equation mode.  In mandoc, both arguments are thrown away.
 125              Its syntax is as follows:
 126 
 127                    set key val
 128 
 129              The key and val are not expanded for replacements.  This
 130              statement is a GNU extension.
 131 
 132      undef   Unset a previously-defined key.  Its syntax is as follows:
 133 
 134                    define key
 135 
 136              Once invoked, the definition for key is discarded.  The key is
 137              not expanded for replacements.  This statement is a GNU
 138              extension.
 139 
 140      Operation keywords have the following semantics:
 141 
 142      above   See pile.
 143 
 144      bar     Draw a line over the preceding box.
 145 
 146      bold    Set the following box using bold font.
 147 
 148      ccol    Like cpile, but for use in matrix.
 149 
 150      cpile   Like pile, but with slightly increased vertical spacing.
 151 
 152      dot     Set a single dot over the preceding box.
 153 
 154      dotdot  Set two dots (dieresis) over the preceding box.
 155 
 156      dyad    Set a dyad symbol (left-right arrow) over the preceding box.
 157 
 158      fat     A synonym for bold.
 159 
 160      font    Set the second argument using the font specified by the first
 161              argument; currently not recognized by the mandoc(1) eqn parser.
 162 
 163      from    Set the following box below the preceding box, using a slightly
 164              smaller font.  Used for sums, integrals, limits, and the like.
 165 
 166      hat     Set a hat (circumflex) over the preceding box.
 167 
 168      italic  Set the following box using italic font.
 169 
 170      lcol    Like lpile, but for use in matrix.
 171 
 172      left    Set the first argument as a big left delimiter before the second
 173              argument.  As an optional third argument, right can follow.  In
 174              that case, the fourth argument is set as a big right delimiter
 175              after the second argument.
 176 
 177      lpile   Like cpile, but subequations are left-justified.
 178 
 179      matrix  Followed by a list of columns enclosed in braces.  All columns
 180              need to have the same number of subequations.  The columns are
 181              set as a matrix.  The difference compared to multiple subsequent
 182              pile operators is that in a matrix, corresponding subequations in
 183              all columns line up horizontally, while each pile does vertical
 184              spacing independently.
 185 
 186      over    Set a fraction.  The preceding box is the numerator, the
 187              following box is the denominator.
 188 
 189      pile    Followed by a list of subequations enclosed in braces, the
 190              subequations being separated by above keywords.  Sets the
 191              subequations one above the other, each of them centered.
 192              Typically used to represent vectors in coordinate representation.
 193 
 194      rcol    Like rpile, but for use in matrix.
 195 
 196      right   See left; right cannot be used without left.  To set a big right
 197              delimiter without a big left delimiter, the following
 198              construction can be used:
 199 
 200                    left "" box right delimiter
 201 
 202      roman   Set the following box using the default font.
 203 
 204      rpile   Like cpile, but subequations are right-justified.
 205 
 206      size    Set the second argument with the font size specified by the first
 207              argument; currently ignored by mandoc(1).  By prepending a plus
 208              or minus sign to the first argument, the font size can be
 209              selected relative to the current size.
 210 
 211      sqrt    Set the square root of the following box.
 212 
 213      sub     Set the following box as a subscript to the preceding box.
 214 
 215      sup     Set the following box as a superscript to the preceding box.  As
 216              a special case, if a sup clause immediately follows a sub clause
 217              as in
 218 
 219                    mainbox sub subbox sup supbox
 220 
 221              both are set with respect to the same mainbox, that is, supbox is
 222              set above subbox.
 223 
 224      tilde   Set a tilde over the preceding box.
 225 
 226      to      Set the following box above the preceding box, using a slightly
 227              smaller font.  Used for sums and integrals and the like.  As a
 228              special case, if a to clause immediately follows a from clause as
 229              in
 230 
 231                    mainbox from frombox to tobox
 232 
 233              both are set below and above the same mainbox.
 234 
 235      under   Underline the preceding box.
 236 
 237      vec     Set a vector symbol (right arrow) over the preceding box.
 238 
 239      The binary operations from, to, sub, and sup group to the right, that is,
 240 
 241            mainbox sup supbox sub subbox
 242 
 243      is the same as
 244 
 245            mainbox sup {supbox sub subbox}
 246 
 247      and different from
 248 
 249            {mainbox sup supbox} sub subbox.
 250 
 251      By contrast, over groups to the left.
 252 
 253      In the following list, earlier operations bind more tightly than later
 254      operations:
 255 
 256      1.   dyad, vec, under, bar, tilde, hat, dot, dotdot
 257      2.   fat, roman, italic, bold, size
 258      3.   sub, sup
 259      4.   sqrt
 260      5.   over
 261      6.   from, to
 262 
 263 COMPATIBILITY
 264      This section documents the compatibility of mandoc eqn and the troff eqn
 265      implementation (including GNU troff).
 266 
 267      -   The text string `\"' is interpreted as a literal quote in troff.  In
 268          mandoc, this is interpreted as a comment.
 269      -   In troff, The circumflex and tilde white-space symbols map to fixed-
 270          width spaces.  In mandoc, these characters are synonyms for the space
 271          character.
 272      -   The troff implementation of eqn allows for equation alignment with
 273          the mark and lineup tokens.  mandoc discards these tokens.  The back
 274          n, fwd n, up n, and down n commands are also ignored.
 275 
 276 SEE ALSO
 277      mandoc(1), man(5), mandoc_char(5), mandoc_roff(5), mdoc(5)
 278 
 279      Brian W. Kernighan and Lorinda L. Cherry, "System for Typesetting
 280      Mathematics", Communications of the ACM, 18, 151-157, March, 1975.
 281 
 282      Brian W. Kernighan and Lorinda L. Cherry, Typesetting Mathematics, User's
 283      Guide, 1976.
 284 
 285      Brian W. Kernighan and Lorinda L. Cherry, Typesetting Mathematics, User's
 286      Guide (Second Edition), 1978.
 287 
 288 HISTORY
 289      The eqn utility, a preprocessor for troff, was originally written by
 290      Brian W. Kernighan and Lorinda L. Cherry in 1975.  The GNU
 291      reimplementation of eqn, part of the GNU troff package, was released in
 292      1989 by James Clark.  The eqn component of mandoc(1) was added in 2011.
 293 
 294 AUTHORS
 295      This eqn reference was written by Kristaps Dzonsons <kristaps@bsd.lv>.
 296 
 297 illumos                        September 4, 2017                       illumos