UNPKG

katex

Version:

Fast math typesetting for the web.

74 lines (68 loc) 2.07 kB
import defineFunction, {ordargument} from "../defineFunction"; import defineMacro from "../defineMacro"; import {makeFragment, makeSpan} from "../buildCommon"; import {MathNode} from "../mathMLTree"; import * as html from "../buildHTML"; import * as mml from "../buildMathML"; defineFunction({ type: "phantom", names: ["\\phantom"], props: { numArgs: 1, allowedInText: true, }, handler: ({parser}, args) => { const body = args[0]; return { type: "phantom", mode: parser.mode, body: ordargument(body), }; }, htmlBuilder: (group, options) => { const elements = html.buildExpression( group.body, options.withPhantom(), false ); // \phantom isn't supposed to affect the elements it contains. // See "color" for more details. return makeFragment(elements); }, mathmlBuilder: (group, options) => { const inner = mml.buildExpression(group.body, options); return new MathNode("mphantom", inner); }, }); defineMacro("\\hphantom", "\\smash{\\phantom{#1}}"); defineFunction({ type: "vphantom", names: ["\\vphantom"], props: { numArgs: 1, allowedInText: true, }, handler: ({parser}, args) => { const body = args[0]; return { type: "vphantom", mode: parser.mode, body, }; }, htmlBuilder: (group, options) => { const inner = makeSpan( ["inner"], [html.buildGroup(group.body, options.withPhantom())]); const fix = makeSpan(["fix"], []); return makeSpan( ["mord", "rlap"], [inner, fix], options); }, mathmlBuilder: (group, options) => { const inner = mml.buildExpression(ordargument(group.body), options); const phantom = new MathNode("mphantom", inner); const node = new MathNode("mpadded", [phantom]); node.setAttribute("width", "0px"); return node; }, });