// @flow import defineFunction from "../defineFunction"; import buildCommon from "../buildCommon"; import mathMLTree from "../mathMLTree"; import * as html from "../buildHTML"; import * as mml from "../buildMathML"; // \vcenter: Vertically center the argument group on the math axis. defineFunction({ type: "vcenter", names: ["\\vcenter"], props: { numArgs: 1, argTypes: ["original"], // In LaTeX, \vcenter can act only on a box. allowedInText: false, }, handler({parser}, args) { return { type: "vcenter", mode: parser.mode, body: args[0], }; }, htmlBuilder(group, options) { const body = html.buildGroup(group.body, options); const axisHeight = options.fontMetrics().axisHeight; const dy = 0.5 * ((body.height - axisHeight) - (body.depth + axisHeight)); return buildCommon.makeVList({ positionType: "shift", positionData: dy, children: [{type: "elem", elem: body}], }, options); }, mathmlBuilder(group, options) { // There is no way to do this in MathML. // Write a class as a breadcrumb in case some post-processor wants // to perform a vcenter adjustment. return new mathMLTree.MathNode( "mpadded", [mml.buildGroup(group.body, options)], ["vcenter"]); }, });