mirror of
https://github.com/Smaug123/KaTeX
synced 2025-10-08 12:38: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("mrel") ||
|
||||||
expression[i].hasClass("allowbreak")) {
|
expression[i].hasClass("allowbreak")) {
|
||||||
// Put any post-operator glue on same line as operator.
|
// 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;
|
let nobreak = false;
|
||||||
while (i < expression.length - 1 &&
|
while (i < expression.length - 1 &&
|
||||||
expression[i + 1].hasClass("mspace")) {
|
expression[i + 1].hasClass("mspace") &&
|
||||||
|
!expression[i + 1].hasClass("newline")) {
|
||||||
i++;
|
i++;
|
||||||
parts.push(expression[i]);
|
parts.push(expression[i]);
|
||||||
if (expression[i].hasClass("nobreak")) {
|
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`] = `
|
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`
|
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`;
|
.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() {
|
describe("Symbols", function() {
|
||||||
|
Reference in New Issue
Block a user