mirror of
https://github.com/Smaug123/KaTeX
synced 2025-10-11 22:18:41 +00:00
Add \underline support (#456)
 Fixes #209.
This commit is contained in:
@@ -51,6 +51,7 @@ var groupToType = {
|
||||
op: "mop",
|
||||
katex: "mord",
|
||||
overline: "mord",
|
||||
underline: "mord",
|
||||
rule: "mord",
|
||||
leftright: "minner",
|
||||
sqrt: "mord",
|
||||
@@ -928,6 +929,32 @@ groupTypes.overline = function(group, options, prev) {
|
||||
return makeSpan(["overline", "mord"], [vlist], options.getColor());
|
||||
};
|
||||
|
||||
groupTypes.underline = function(group, options, prev) {
|
||||
// Underlines are handled in the TeXbook pg 443, Rule 10.
|
||||
|
||||
// Build the inner group.
|
||||
var innerGroup = buildGroup(group.value.body, options);
|
||||
|
||||
var ruleWidth = fontMetrics.metrics.defaultRuleThickness /
|
||||
options.style.sizeMultiplier;
|
||||
|
||||
// Create the line above the body
|
||||
var line = makeSpan(
|
||||
[options.style.reset(), Style.TEXT.cls(), "underline-line"]);
|
||||
line.height = ruleWidth;
|
||||
line.maxFontSize = 1.0;
|
||||
|
||||
// Generate the vlist, with the appropriate kerns
|
||||
var vlist = buildCommon.makeVList([
|
||||
{type: "kern", size: ruleWidth},
|
||||
{type: "elem", elem: line},
|
||||
{type: "kern", size: 3 * ruleWidth},
|
||||
{type: "elem", elem: innerGroup},
|
||||
], "top", innerGroup.height, options);
|
||||
|
||||
return makeSpan(["underline", "mord"], [vlist], options.getColor());
|
||||
};
|
||||
|
||||
groupTypes.sqrt = function(group, options, prev) {
|
||||
// Square roots are handled in the TeXbook pg. 443, Rule 11.
|
||||
|
||||
|
@@ -422,6 +422,20 @@ groupTypes.overline = function(group, options) {
|
||||
return node;
|
||||
};
|
||||
|
||||
groupTypes.underline = function(group, options) {
|
||||
var operator = new mathMLTree.MathNode(
|
||||
"mo", [new mathMLTree.TextNode("\u203e")]);
|
||||
operator.setAttribute("stretchy", "true");
|
||||
|
||||
var node = new mathMLTree.MathNode(
|
||||
"munder",
|
||||
[buildGroup(group.value.body, options),
|
||||
operator]);
|
||||
node.setAttribute("accentunder", "true");
|
||||
|
||||
return node;
|
||||
};
|
||||
|
||||
groupTypes.rule = function(group) {
|
||||
// TODO(emily): Figure out if there's an actual way to draw black boxes
|
||||
// in MathML.
|
||||
|
@@ -170,6 +170,17 @@ defineFunction("\\overline", {
|
||||
};
|
||||
});
|
||||
|
||||
// An underline
|
||||
defineFunction("\\underline", {
|
||||
numArgs: 1,
|
||||
}, function(context, args) {
|
||||
var body = args[0];
|
||||
return {
|
||||
type: "underline",
|
||||
body: body,
|
||||
};
|
||||
});
|
||||
|
||||
// A box of the width and height
|
||||
defineFunction("\\rule", {
|
||||
numArgs: 2,
|
||||
|
Reference in New Issue
Block a user