Go forward to Other Compositions. Go backward to Horizontal Compositions. Go up to Compositions.

Vertical Compositions
.....................

The `cvert' function makes a vertical composition.  Each component of
the vector is centered in a column.  The baseline of the result is by
default the top line of the resulting composition.  For example,
`f(cvert([a, bb, ccc]), cvert([a^2 + 1, b^2]))' formats in Big mode as

     f( a ,  2    )
       bb   a  + 1
       ccc     2
              b

There are several special composition functions that work only as
components of a vertical composition.  The `cbase' function controls
the baseline of the vertical composition; the baseline will be the
same as the baseline of whatever component is enclosed in `cbase'.
Thus `f(cvert([a, cbase(bb), ccc]), cvert([a^2 + 1, cbase(b^2)]))'
displays as

             2
            a  + 1
        a      2
     f(bb ,   b   )
       ccc

There are also `ctbase' and `cbbase' functions which make the baseline
of the vertical composition equal to the top or bottom line (rather
than the baseline) of that component.  Thus `cvert([cbase(a / b)]) +
cvert([ctbase(a / b)]) + cvert([cbbase(a / b)])' gives

             a
     a       -
     - + a + b
     b   -
         b

There should be only one `cbase', `ctbase', or `cbbase' function in a
given vertical composition.  These functions can also be written with
no arguments: `ctbase()' is a zero-height object which means the
baseline is the top line of the following item, and `cbbase()' means
the baseline is the bottom line of the preceding item.

The `crule' function builds a "rule," or horizontal line, across a
vertical composition.  By itself `crule()' uses `-' characters to
build the rule.  You can specify any other character, e.g.,
`crule("=")'.  The argument must be a character code or vector of
exactly one character code.  It is repeated to match the width of the
widest item in the stack.  For example, a quotient with a thick line
is `cvert([a + 1, cbase(crule("=")), b^2])':

     a + 1
     =====
       2
      b

Finally, the functions `clvert' and `crvert' act exactly like `cvert'
except that the items are left- or right-justified in the stack.  Thus
`clvert([a, bb, ccc]) + crvert([a, bb, ccc])' gives:

     a   +   a
     bb     bb
     ccc   ccc

Like `choriz', the vertical compositions accept a second argument
which gives the precedence to use when formatting the components.
Vertical compositions do not support separator strings.