mathsym = function(value, mode, color, classes) {
                    // Decide what font to render the symbol in by its entry in the symbols
                    // table.
                    // Have a special case for when the value = \ because the \ is used as a
                    // textord in unsupported command errors but cannot be parsed as a regular
                    // text ordinal and is therefore not present as a symbol in the symbols
                    // table for text
                    if (value === "\\" || symbols[mode][value].font === "main") {
                        return makeSymbol(value, "Main-Regular", mode, color, classes);
                    } else {
                        return makeSymbol(
                            value, "AMS-Regular", mode, color, classes.concat(["amsrm"]));
                    }
                }
Makes a vertical list by stacking elements and kerns on top of each other.
Allows for many different ways of specifying the positioning method.

Arguments:
 - children: A list of child or kern nodes to be stacked on top of each other
             (i.e. the first element will be at the bottom, and the last at
             the top). Element nodes are specified as
               {type: "elem", elem: node}
             while kern nodes are specified as
               {type: "kern", size: size}
 - positionType: The method by which the vlist should be positioned. Valid
                 values are:
                  - "individualShift": The children list only contains elem
                                       nodes, and each node contains an extra
                                       "shift" value of how much it should be
                                       shifted (note that shifting is always
                                       moving downwards). positionData is
                                       ignored.
                  - "top": The positionData specifies the topmost point of
                           the vlist (note this is expected to be a height,
                           so positive values move up)
                  - "bottom": The positionData specifies the bottommost point
                              of the vlist (note this is expected to be a
                              depth, so positive values move down
                  - "shift": The vlist will be positioned such that its
                             baseline is positionData away from the baseline
                             of the first child. Positive values move
                             downwards.
                  - "firstBaseline": The vlist will be positioned such that
                                     its baseline is aligned with the
                                     baseline of the first child.
                                     positionData is ignored. (this is
                                     equivalent to "shift" with
                                     positionData=0)
 - positionData: Data used in different ways depending on positionType
 - options: An Options object