diff --git a/ci/release/changelogs/next.md b/ci/release/changelogs/next.md index 2b3a75c96..f1db4276e 100644 --- a/ci/release/changelogs/next.md +++ b/ci/release/changelogs/next.md @@ -7,6 +7,9 @@ - Composition: links pointing to own board are purged [#2203](https://github.com/terrastruct/d2/pull/2203) - Syntax: reserved keywords must be unquoted [#2231](https://github.com/terrastruct/d2/pull/2231) +- Latex: Backslashes in Latex blocks do not escape [#2232](https://github.com/terrastruct/d2/pull/2232) + - This is a breaking change. Previously Latex blocks required escaping the backslash. So + for older D2 versions, you should remove the excess backslashes. #### Bugfixes ⛑️ diff --git a/d2compiler/compile.go b/d2compiler/compile.go index 8009f8705..be7150d1a 100644 --- a/d2compiler/compile.go +++ b/d2compiler/compile.go @@ -409,7 +409,6 @@ func (c *compiler) compileLabel(attrs *d2graph.Attributes, f d2ir.Node) { } switch attrs.Language { case "latex": - println("\033[1;31m--- DEBUG:", scalar.ScalarString(), "\033[m") attrs.Shape.Value = d2target.ShapeText case "markdown": rendered, err := textmeasure.RenderMarkdown(scalar.ScalarString()) diff --git a/e2etests/stable_test.go b/e2etests/stable_test.go index 376545c87..3430d33fc 100644 --- a/e2etests/stable_test.go +++ b/e2etests/stable_test.go @@ -1381,30 +1381,24 @@ c: |md { name: "latex", script: `a: |latex -\\Huge{\\frac{\\alpha g^2}{\\omega^5} e^{[ -0.74\\bigl\\{\\frac{\\omega U_\\omega 19.5}{g}\\bigr\\}^{\\!-4}\\,]}} +\Huge{\frac{\alpha g^2}{\omega^5} e^{[ -0.74\bigl\{\frac{\omega U_\omega 19.5}{g}\bigr\}^{\!-4}\,]}} | - b: |latex e = mc^2 | - z: |latex -gibberish\\; math:\\sum_{i=0}^\\infty i^2 +gibberish\; math:\sum_{i=0}^\infty i^2 | - z -> a z -> b - a -> c b -> c sugar -> c c: mixed together - c -> solution: we get - Linear program: { formula: |latex - \\min_{ \\mathclap{\\substack{ x \\in \\mathbb{R}^n \\ x \\geq 0 \\ Ax \\leq b }}} c^T x + \min_{ \mathclap{\substack{ x \in \mathbb{R}^n \ x \geq 0 \ Ax \leq b }}} c^T x | } `, diff --git a/e2etests/testdata/files/grid_outside_labels.d2 b/e2etests/testdata/files/grid_outside_labels.d2 index 9f54d9234..adce4a554 100644 --- a/e2etests/testdata/files/grid_outside_labels.d2 +++ b/e2etests/testdata/files/grid_outside_labels.d2 @@ -4,61 +4,55 @@ container: ___________________________________container_________________________ amscd plugin: { ex: |tex - \\begin{CD} B @>{\\text{very long label}}>> C S^{{\\mathcal{W}}_\\Lambda}\\otimes T @>j>> T\\\\ @VVV V \\end{CD} + \begin{CD} B @>{\text{very long label}}>> C S^{{\mathcal{W}}_\Lambda}\otimes T @>j>> T\\ @VVV V \end{CD} | } braket plugin: { style.3d: true ex: |tex - \\bra{a}\\ket{b} + \bra{a}\ket{b} | } cancel plugin: { ex: |tex - \\cancel{Culture + 5} + \cancel{Culture + 5} | } - color plugin: { icon: https://icons.terrastruct.com/essentials/profits.svg icon.near: outside-right-center ex: |tex - \\textcolor{red}{y} = \\textcolor{green}{\\sin} x + \textcolor{red}{y} = \textcolor{green}{\sin} x | } - gensymb plugin: { ex: |tex - \\lambda = 10.6\\,\\micro\\mathrm{m} + \lambda = 10.6\,\micro\mathrm{m} | } - mhchem plugin: { style.multiple: true ex: |tex \ce{SO4^2- + Ba^2+ -> BaSO4 v} | } - physics plugin: { ex: |tex - \\var{F[g(x)]} - \\dd(\\cos\\theta) + \var{F[g(x)]} + \dd(\cos\theta) | } - multilines: { ex: |tex - \\displaylines{x = a + b \\\\ y = b + c} - \\sum_{k=1}^{n} h_{k} \\int_{0}^{1} \\bigl(\\partial_{k} f(x_{k-1}+t h_{k} e_{k}) -\\partial_{k} f(a)\\bigr) \\,dt + \displaylines{x = a + b \\ y = b + c} + \sum_{k=1}^{n} h_{k} \int_{0}^{1} \bigl(\partial_{k} f(x_{k-1}+t h_{k} e_{k}) -\partial_{k} f(a)\bigr) \,dt | } - asm: { ex: |latex - \\min_{ \\mathclap{\\substack{ x \\in \\mathbb{R}^n \\ x \\geq 0 \\ Ax \\leq b }}} c^T x + \min_{ \mathclap{\substack{ x \in \mathbb{R}^n \ x \geq 0 \ Ax \leq b }}} c^T x | } } diff --git a/e2etests/testdata/files/grid_with_latex.d2 b/e2etests/testdata/files/grid_with_latex.d2 index 9cb7245ed..e1a0f0fe2 100644 --- a/e2etests/testdata/files/grid_with_latex.d2 +++ b/e2etests/testdata/files/grid_with_latex.d2 @@ -19,7 +19,7 @@ y: { z: { grid-columns: 2 lim: |latex - \\lim_{h \\rightarrow 0 } \\frac{f(x+h)-f(x)}{h} + \lim_{h \rightarrow 0 } \frac{f(x+h)-f(x)}{h} | add: |latex 1 + 1 diff --git a/e2etests/testdata/stable/grid_outside_labels/dagre/board.exp.json b/e2etests/testdata/stable/grid_outside_labels/dagre/board.exp.json index 7140db237..b04c45853 100644 --- a/e2etests/testdata/stable/grid_outside_labels/dagre/board.exp.json +++ b/e2etests/testdata/stable/grid_outside_labels/dagre/board.exp.json @@ -10,7 +10,7 @@ "x": 0, "y": 0 }, - "width": 1213, + "width": 1184, "height": 524, "opacity": 1, "strokeDash": 0, @@ -294,7 +294,7 @@ "x": 385, "y": 82 }, - "width": 255, + "width": 226, "height": 103, "opacity": 1, "strokeDash": 0, @@ -387,7 +387,7 @@ "x": 385, "y": 241 }, - "width": 324, + "width": 295, "height": 103, "opacity": 1, "strokeDash": 0, @@ -468,7 +468,7 @@ "x": 385, "y": 410 }, - "width": 314, + "width": 285, "height": 93, "opacity": 1, "strokeDash": 0, @@ -509,8 +509,8 @@ "x": 415, "y": 440 }, - "width": 254, - "height": 18, + "width": 225, + "height": 20, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -529,7 +529,7 @@ "fields": null, "methods": null, "columns": null, - "label": "\\ce{SO4^2- + Ba^2+ -> BaSO4 v}", + "label": "\\\\ce{SO4^2- + Ba^2+ -> BaSO4 v}", "fontSize": 16, "fontFamily": "DEFAULT", "language": "latex", @@ -537,8 +537,8 @@ "italic": false, "bold": false, "underline": false, - "labelWidth": 254, - "labelHeight": 18, + "labelWidth": 225, + "labelHeight": 20, "zIndex": 0, "level": 3 }, @@ -546,7 +546,7 @@ "id": "container.physics plugin", "type": "rectangle", "pos": { - "x": 729, + "x": 700, "y": 82 }, "width": 464, @@ -587,7 +587,7 @@ "id": "container.physics plugin.ex", "type": "text", "pos": { - "x": 759, + "x": 730, "y": 112 }, "width": 128, @@ -627,7 +627,7 @@ "id": "container.multilines", "type": "rectangle", "pos": { - "x": 729, + "x": 700, "y": 233 }, "width": 464, @@ -668,7 +668,7 @@ "id": "container.multilines.ex", "type": "text", "pos": { - "x": 759, + "x": 730, "y": 263 }, "width": 404, @@ -708,7 +708,7 @@ "id": "container.asm", "type": "rectangle", "pos": { - "x": 729, + "x": 700, "y": 401 }, "width": 464, @@ -749,7 +749,7 @@ "id": "container.asm.ex", "type": "text", "pos": { - "x": 759, + "x": 730, "y": 431 }, "width": 62, diff --git a/e2etests/testdata/stable/grid_outside_labels/dagre/sketch.exp.svg b/e2etests/testdata/stable/grid_outside_labels/dagre/sketch.exp.svg index 697ea22b1..d7112f91c 100644 --- a/e2etests/testdata/stable/grid_outside_labels/dagre/sketch.exp.svg +++ b/e2etests/testdata/stable/grid_outside_labels/dagre/sketch.exp.svg @@ -1,9 +1,9 @@ -___________________________________container____________________________________amscd plugin +___________________________________container____________________________________amscd plugin -braket plugincancel plugincolor plugingensymb pluginmhchem pluginphysics pluginmultilinesasmµ - - +braket plugincancel plugincolor plugingensymb pluginmhchem pluginphysics pluginmultilinesasmµ + + - - - - - - + + + + + + - - - - + + + + \ No newline at end of file diff --git a/e2etests/testdata/stable/grid_outside_labels/elk/board.exp.json b/e2etests/testdata/stable/grid_outside_labels/elk/board.exp.json index 21f554c1e..91fd56b51 100644 --- a/e2etests/testdata/stable/grid_outside_labels/elk/board.exp.json +++ b/e2etests/testdata/stable/grid_outside_labels/elk/board.exp.json @@ -10,7 +10,7 @@ "x": 12, "y": 12 }, - "width": 1323, + "width": 1294, "height": 521, "opacity": 1, "strokeDash": 0, @@ -294,7 +294,7 @@ "x": 437, "y": 58 }, - "width": 285, + "width": 256, "height": 148, "opacity": 1, "strokeDash": 0, @@ -387,7 +387,7 @@ "x": 437, "y": 226 }, - "width": 354, + "width": 325, "height": 133, "opacity": 1, "strokeDash": 0, @@ -468,8 +468,8 @@ "x": 437, "y": 389 }, - "width": 344, - "height": 123, + "width": 315, + "height": 124, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -509,8 +509,8 @@ "x": 482, "y": 434 }, - "width": 254, - "height": 18, + "width": 225, + "height": 20, "opacity": 1, "strokeDash": 0, "strokeWidth": 2, @@ -529,7 +529,7 @@ "fields": null, "methods": null, "columns": null, - "label": "\\ce{SO4^2- + Ba^2+ -> BaSO4 v}", + "label": "\\\\ce{SO4^2- + Ba^2+ -> BaSO4 v}", "fontSize": 16, "fontFamily": "DEFAULT", "language": "latex", @@ -537,8 +537,8 @@ "italic": false, "bold": false, "underline": false, - "labelWidth": 254, - "labelHeight": 18, + "labelWidth": 225, + "labelHeight": 20, "zIndex": 0, "level": 3 }, @@ -546,7 +546,7 @@ "id": "container.physics plugin", "type": "rectangle", "pos": { - "x": 811, + "x": 782, "y": 58 }, "width": 504, @@ -587,7 +587,7 @@ "id": "container.physics plugin.ex", "type": "text", "pos": { - "x": 861, + "x": 832, "y": 108 }, "width": 128, @@ -627,7 +627,7 @@ "id": "container.multilines", "type": "rectangle", "pos": { - "x": 811, + "x": 782, "y": 204 }, "width": 504, @@ -668,7 +668,7 @@ "id": "container.multilines.ex", "type": "text", "pos": { - "x": 861, + "x": 832, "y": 254 }, "width": 404, @@ -708,7 +708,7 @@ "id": "container.asm", "type": "rectangle", "pos": { - "x": 811, + "x": 782, "y": 376 }, "width": 504, @@ -749,7 +749,7 @@ "id": "container.asm.ex", "type": "text", "pos": { - "x": 861, + "x": 832, "y": 426 }, "width": 62, diff --git a/e2etests/testdata/stable/grid_outside_labels/elk/sketch.exp.svg b/e2etests/testdata/stable/grid_outside_labels/elk/sketch.exp.svg index 26c68cea5..480ae334e 100644 --- a/e2etests/testdata/stable/grid_outside_labels/elk/sketch.exp.svg +++ b/e2etests/testdata/stable/grid_outside_labels/elk/sketch.exp.svg @@ -1,9 +1,9 @@ -___________________________________container____________________________________amscd plugin +___________________________________container____________________________________amscd plugin -braket plugincancel plugincolor plugingensymb pluginmhchem pluginphysics pluginmultilinesasmµ - - +braket plugincancel plugincolor plugingensymb pluginmhchem pluginphysics pluginmultilinesasmµ + + - - - - - - + + + + + + - - - - + + + + \ No newline at end of file diff --git a/e2etests/themes_test.go b/e2etests/themes_test.go index 4691ffce9..989b5b449 100644 --- a/e2etests/themes_test.go +++ b/e2etests/themes_test.go @@ -111,8 +111,8 @@ func main() { markdown -> code -> ex ex: |tex - \\displaylines{x = a + b \\\\ y = b + c} - \\sum_{k=1}^{n} h_{k} \\int_{0}^{1} \\bigl(\\partial_{k} f(x_{k-1}+t h_{k} e_{k}) -\\partial_{k} f(a)\\bigr) \\,dt + \displaylines{x = a + b \\ y = b + c} + \sum_{k=1}^{n} h_{k} \int_{0}^{1} \bigl(\partial_{k} f(x_{k-1}+t h_{k} e_{k}) -\partial_{k} f(a)\bigr) \,dt | `, }, @@ -218,8 +218,8 @@ func main() { markdown -> code -> ex ex: |tex - \\displaylines{x = a + b \\\\ y = b + c} - \\sum_{k=1}^{n} h_{k} \\int_{0}^{1} \\bigl(\\partial_{k} f(x_{k-1}+t h_{k} e_{k}) -\\partial_{k} f(a)\\bigr) \\,dt + \displaylines{x = a + b \\ y = b + c} + \sum_{k=1}^{n} h_{k} \int_{0}^{1} \bigl(\partial_{k} f(x_{k-1}+t h_{k} e_{k}) -\partial_{k} f(a)\bigr) \,dt | `, },