mirror of
https://github.com/Smaug123/KaTeX
synced 2025-10-05 11:18:39 +00:00
Fix \\ and \newline after operator (#1796)
* Fix \\ and \newline after operator Fix #1790. `\\` and `\newline` render as a span with classes `mspace` and `newline`. We need to check for `newline` when bringing spaces into the same `base` group. * Add tests and comment
This commit is contained in:
committed by
Kevin Barabash
parent
1a7ce6cf15
commit
8346294bf3
@@ -334,10 +334,11 @@ export default function buildHTML(tree: AnyParseNode[], options: Options): DomSp
|
||||
expression[i].hasClass("mrel") ||
|
||||
expression[i].hasClass("allowbreak")) {
|
||||
// Put any post-operator glue on same line as operator.
|
||||
// Watch for \nobreak along the way.
|
||||
// Watch for \nobreak along the way, and stop at \newline.
|
||||
let nobreak = false;
|
||||
while (i < expression.length - 1 &&
|
||||
expression[i + 1].hasClass("mspace")) {
|
||||
expression[i + 1].hasClass("mspace") &&
|
||||
!expression[i + 1].hasClass("newline")) {
|
||||
i++;
|
||||
parts.push(expression[i]);
|
||||
if (expression[i].hasClass("nobreak")) {
|
||||
|
@@ -858,6 +858,118 @@ exports[`Extending katex by new fonts and symbols Add new font class to new exte
|
||||
|
||||
`;
|
||||
|
||||
exports[`Newlines via \\\\ and \\newline \\\\ causes newline, even after mrel and mop 1`] = `
|
||||
|
||||
<span class="katex">
|
||||
<span class="katex-mathml">
|
||||
<math>
|
||||
<semantics>
|
||||
<mrow>
|
||||
<mi>
|
||||
M
|
||||
</mi>
|
||||
<mo>
|
||||
=
|
||||
</mo>
|
||||
<mspace linebreak="newline">
|
||||
</mspace>
|
||||
<mi>
|
||||
a
|
||||
</mi>
|
||||
<mo>
|
||||
+
|
||||
</mo>
|
||||
<mspace linebreak="newline">
|
||||
</mspace>
|
||||
<mi>
|
||||
b
|
||||
</mi>
|
||||
<mspace linebreak="newline">
|
||||
</mspace>
|
||||
<mi>
|
||||
c
|
||||
</mi>
|
||||
</mrow>
|
||||
<annotation encoding="application/x-tex">
|
||||
M = \\\\ a + \\\\ b \\\\ c
|
||||
</annotation>
|
||||
</semantics>
|
||||
</math>
|
||||
</span>
|
||||
<span class="katex-html"
|
||||
aria-hidden="true"
|
||||
>
|
||||
<span class="base">
|
||||
<span class="strut"
|
||||
style="height:0.68333em;vertical-align:0em;"
|
||||
>
|
||||
</span>
|
||||
<span class="mord mathdefault"
|
||||
style="margin-right:0.10903em;"
|
||||
>
|
||||
M
|
||||
</span>
|
||||
<span class="mspace"
|
||||
style="margin-right:0.2777777777777778em;"
|
||||
>
|
||||
</span>
|
||||
<span class="mrel">
|
||||
=
|
||||
</span>
|
||||
<span class="mspace"
|
||||
style="margin-right:0.2777777777777778em;"
|
||||
>
|
||||
</span>
|
||||
</span>
|
||||
<span class="mspace newline">
|
||||
</span>
|
||||
<span class="base">
|
||||
<span class="strut"
|
||||
style="height:0.66666em;vertical-align:-0.08333em;"
|
||||
>
|
||||
</span>
|
||||
<span class="mord mathdefault">
|
||||
a
|
||||
</span>
|
||||
<span class="mspace"
|
||||
style="margin-right:0.2222222222222222em;"
|
||||
>
|
||||
</span>
|
||||
<span class="mbin">
|
||||
+
|
||||
</span>
|
||||
<span class="mspace"
|
||||
style="margin-right:0.2222222222222222em;"
|
||||
>
|
||||
</span>
|
||||
</span>
|
||||
<span class="mspace newline">
|
||||
</span>
|
||||
<span class="base">
|
||||
<span class="strut"
|
||||
style="height:0.69444em;vertical-align:0em;"
|
||||
>
|
||||
</span>
|
||||
<span class="mord mathdefault">
|
||||
b
|
||||
</span>
|
||||
</span>
|
||||
<span class="mspace newline">
|
||||
</span>
|
||||
<span class="base">
|
||||
<span class="strut"
|
||||
style="height:0.43056em;vertical-align:0em;"
|
||||
>
|
||||
</span>
|
||||
<span class="mord mathdefault">
|
||||
c
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
</span>
|
||||
|
||||
`;
|
||||
|
||||
exports[`href and url commands should not affect spacing around 1`] = `
|
||||
[
|
||||
{
|
||||
|
@@ -3405,6 +3405,15 @@ describe("Newlines via \\\\ and \\newline", function() {
|
||||
expect`a\\b\begin{matrix}x&y\\z&w\end{matrix}\\c`
|
||||
.toParseLike`a\newline b\begin{matrix}x&y\cr z&w\end{matrix}\newline c`;
|
||||
});
|
||||
|
||||
it("\\\\ causes newline, even after mrel and mop", () => {
|
||||
const markup = katex.renderToString(r`M = \\ a + \\ b \\ c`);
|
||||
// Ensure newlines appear outside base spans (because, in this regexp,
|
||||
// base span occurs immediately after each newline span).
|
||||
expect(markup).toMatch(
|
||||
/(<span class="base">.*?<\/span><span class="mspace newline"><\/span>){3}<span class="base">/);
|
||||
expect(markup).toMatchSnapshot();
|
||||
});
|
||||
});
|
||||
|
||||
describe("Symbols", function() {
|
||||
|
Reference in New Issue
Block a user