Skip to main content

Release notes *2.7.3*

Β· 4 min read

πŸ”„ New Features & Enhancements

  • πŸ–¨οΈ Export to PDF (Desktop Only)

    • Full support for rendering notebooks as high-quality PDFs using Electron (Chromium) engine.
    • Smart whitespace trimming via offscreen rendering and pixel analysis.
  • πŸ€– Semantic Interpretation Shortcut

    • New shortcut: Ctrl = to auto-convert natural language to Wolfram code.
  • πŸ“š LaTeX Cells

    • Improved LaTeX and Markdown compatibility using proper environment handling.
  • πŸ–ΌοΈ Optional Mathematica Rendering

    • Use MMAView to render static previews via Mathematica engine.
  • πŸ”Ί Graph3D Support

    • Added support for GraphPlot3D, Graph3D, and related primitives.
  • 🎨 2D Graphics Improvements

    • Implemented missing primitives and symbols (e.g., FaceForm, RegularPolygon).
    • Support for date histograms and flag visuals.
  • 🧊 3D Graphics Upgrades

    • New primitives: Cone, Icosahedron and others added
  • πŸ•ΈοΈ Enhanced Graph Styling

    • Inspired by IGraphM.
    • Improved layout options, styling themes, and large graph support.
  • πŸ“– More Tutorials

    • Integrated examples from An Elementary Introduction to the Wolfram Language for beginners.

Our project was published in Towards Data Science (TDS) ✨

Download original notebook

const balloonContainer = document.getElementById("balloon-container");

function random(num) {
  return Math.floor(Math.random() * num);
}

function getRandomStyles() {
  var r = random(255);
  var g = random(255);
  var b = random(255);
  var mt = random(200);
  var ml = random(50);
  var dur = random(5) + 5;
  return `
  background-color: rgba(${r},${g},${b},0.7);
  color: rgba(${r},${g},${b},0.7); 
  box-shadow: inset -7px -3px 10px rgba(${r - 10},${g - 10},${b - 10},0.7);
  margin: ${mt}px 0 0 ${ml}px;
  animation: float ${dur}s ease-in infinite
  `;
}

function createBalloons(num) {
  for (var i = num; i > 0; i--) {
    var balloon = document.createElement("div");
    balloon.className = "balloon";
    balloon.style.cssText = getRandomStyles();
    balloonContainer.append(balloon);
  }
}

function removeBalloons() {
  balloonContainer.style.opacity = 0;
  setTimeout(() => {
    balloonContainer.remove()
  }, 500)
}

createBalloons(10);
setTimeout(removeBalloons, 15000);

return '';

Export to PDF​

WLJS Notebook finally has proper support for PDF rendering. This is a big challenge since all visuals are a mixture of HTML, SVG, and sometimes WebGL/Canvas. Therefore, we need to rely on Electron's (Chromium) engine to generate PDFs from HTML tags. Another issue was whitespace trimming; now we render it offscreen, analyze pixel data, and correct the view bounding box.

All our efforts are for you to get a crisp, nice combo of vector and raster graphics!

warning

This feature is available only for the WLJS Desktop application

Here it is in action

Export[
  FileNameJoin[{"attachments", "test.pdf"}], 
  ContourPlot[Sinc[x] Sinc[y], {x,-4Pi, 4Pi}, {y, -4Pi, 4Pi}]
]
"attachments/test.pdf"

Semantic interpretation​

We added a handy shortcut for SemanticInterpretation

  • Ctrl =

Do it on selection or on the position of the cursor

3 (*BB[*)(SemanticInterpretation["3 weeks"])(*,*)(*"1:eJxTTMoPSmNhYGAo5gcSAUX5ZZkpqSn+BSWZ+XnFaYwgCV4gEZaZWu6SmpxflFiSXxTMARQJTs1NzCvJTE5jAqkBmRBUmpMazAaSKinKzEsHi4UUlaaiqeACCSdm5kBUBYMklWKxqPFITUyBqpFAss8zryS1qKAotSQR5MRoJQAneDHG"*)(*]BB*) 
(*VB[*)(Quantity[9, "Weeks"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KWnMIB4vkAjLTC13SU3OL0osyS8K5gCKBJYm5pVkllRmcgI5waxAIjw1NbsYABojEFQ="*)(*]VB*)

You have a full access to WolframAlpha or if not available, it uses local parsing option

(*BB[*)(SemanticInterpretation["Red fox"])(*,*)(*"1:eJxTTMoPSmNhYGAo5gcSAUX5ZZkpqSn+BSWZ+XnFaYwgCV4gEZaZWu6SmpxflFiSXxTMARQJTs1NzCvJTE5jAqkBmRBUmpMazAaSKinKzEsHi4UUlaaiqeACCSdm5kBUBYMklWKxqPFITUyBqpFAss8zryS1qKAotSQR5MRoJQAneDHG"*)(*]BB*)["Image"]
(*VB[*)(FrontEndRef["d84a1b43-e5ba-42d0-9f8c-d02f573d4bd0"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKp1iYJBommRjrppomJeqaGKUY6FqmWSTrphgYpZmaG6eYJKUYAACKsRX4"*)(*]VB*)


LaTeX cells​

If you have any troubles with mixing Markdown and LaTeX code, here you go

.latex
\begin{align}
\omega &= \Big\{\alpha^2 + \frac{a}{b} \Big\} \\
\hat{\alpha}_{x} &- \hat{\beta}_{y} \nonumber
\end{align}

Optional Rendering Using Mathematica Frontend​

We know that not all styling options, plots, and diagram types are supported in the WLJS Notebook ecosystem. It is a long process, and we need your support.

However, if you just need a static picture similar to what a Jupyter Notebook with the Wolfram Kernel attached can generate, please try out our new view-block.

Plot3D[(*SpB[*)Power[x(*|*),(*|*)2](*]SpB*) (*SpB[*)Power[y(*|*),(*|*)2](*]SpB*), {x,0,1}, {y,0,1}] // MMAView 
(*VB[*)(FrontEndRef["76602909-345a-4265-a6d6-afe7e23f7629"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKm5uZGRhZGljqGpuYJuqaGJmZ6iaapZjpJqalmqcaGaeZmxlZAgBvShT0"*)(*]VB*)

Graph3D Support​

We implemented some missing primitives for Graphics3D to support the output of GraphPlot3D and Graph3D in general

GraphPlot3D@Graph3D[ButterflyGraph[3]]
(*VB[*)(FrontEndRef["2613fa03-d8df-4af7-bdd9-ae69799a0a56"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKG5kZGqclGhjrplikpOmaJKaZ6yalpFjqJqaaWZpbWiYaJJqaAQCL3BYP"*)(*]VB*)
Graph3D[Table[
  Annotation[
   v, {VertexSize -> 0.2 + 0.2 Mod[v, 5], 
    VertexStyle -> Hue[v/15, 1, 1]}], {v, 0, 14}], 
 Table[v \[UndirectedEdge] Mod[v + 1, 15], {v, 0, 14}]]
(*VB[*)(CoffeeLiqueur`Extensions`Boxes`Workarounds`temporal$788661)(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKJ5mamlgmJZrpJhqYmemamCeb6FqmpSTpGpmapxpamJkZWBolAQCBNRVO"*)(*]VB*)

Improvements in 2D Graphics​

Missing symbols were implemented!

(*VB[*)(Graphics[{RegularPolygon[{1, 1}, 0.4, 5], RGBColor[1, 0, 0], Disk[{0, 0}]}, ImageSize -> Small])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KWlMIB4HkHAvSizIyEwuTmOGyftkFpdAeHxAIig1vTQnsSggP6cyPT8Pog+mKhNkJpgomjUTBG7aZ7ICeRDdINOD3J2c83PyiyAqGWAEwjEumcXZaIYiVMHFg0pzUos5gQzP3MT01ODMqtRikD3BuYk5OQDrRy1O"*)(*]VB*)

FaceForm was implemented, which allows more variations of styling. For instance this one produced by Country entity

(*VB[*)(Entity["Country", "Canada"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KWnMIB4vkAjLTC13SU3OL0osyS8KZgOKuOaVZJZUBrMDmc75pXklRZVgYefEvMSURACGXRKG"*)(*]VB*)["Flag"]
(*VB[*)(FrontEndRef["c9816dec-835a-4871-908b-23cf4f2b01f9"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKJ1taGJqlpCbrWhibJuqaWJgb6loaWCTpGhknp5mkGSUZGKZZAgCBqRV+"*)(*]VB*)

Date histogram

data = (*VB[*)(Get[FileNameJoin[{".iconized", "None-18e.wl"}]])(*,*)(*"1:eJxTTMoPSmNhYGAo5gUSYZmp5S6pyflFiSX5RcEcQBHP5Py8zKrUlEwOMQaGNCaQQpDqoNKc1GBWIMMnMSk1Jxgk5Jefl4qmAMRwy8xJBYuEFJWmAgB7pRh/"*)(*]VB*);
DateHistogram[data, ColorFunction->"Rainbow"]
(*VB[*)(FrontEndRef["74d56ad0-0662-4cbd-84e3-f965240b5f71"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKm5ukmJolphjoGpiZGemaJCel6FqYpBrrplmamRqZGCSZppkbAgB/ARVG"*)(*]VB*)

Improvements in 3D Graphics​

Again, missing primitives were implemented

(*VB[*)(Graphics3D[Cone[{{0, 0, -1}, {0, 0, 1}}]])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRAeF5BwL0osyMhMLjZ2Qahwzs9LTWOC8Xwyi0vSmJF5mUCaAUL8BwKckiADARCUGH8="*)(*]VB*)
(*VB[*)(Graphics3D[{PointLight[RGBColor[1, 0, 0], {-2, -2, 2}], PointLight[RGBColor[0, 1, 0], {2, -2, 2}], PointLight[RGBColor[0, 0, 1], {2, 2, 2}], {Directive["Roughness" -> 1], Icosahedron[1]}}])(*,*)(*"1:eJyd0EsOwiAQgGGqXfg4hWfwBtqkmnRh8ASVQpmkYQxQjy/yCLjRxLj5E5jhW7C7IRUVIcTUPiechnTa+LS6v0tgZt+IOm90YKxY5I0LgrIdjNKKZbhb+dD2cMQJNQQHSE5ayAQ8nXMpAftRjFj1RQzEf2JhP4klSSx/EH9p7dOA5szCg78X6Dzxa5hRnEepuDGJj2+2PmeGppd80Kji5AXx81Mu"*)(*]VB*)
(*VB[*)(FrontEndRef["5c63b648-7829-44d2-9605-b81891f8635c"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKmyabGSeZmVjomlsYWeqamKQY6VqaGZjqJlkYWlgaplmYGZsmAwBxNRSg"*)(*]VB*)

Better support of Graph styling​

A beautiful library IGraphM made by Szabolcs HorvΓ‘t motivated us to rework Graph representation.

PS: It also works in WLJS!

Graph[
    {1, 2, 3, 4, 5, 6},
    {
        1<->2,
        1<->6,
        2<->3,
        3<->4,
        4<->5,
        5<->6
    },
    {
        GraphLayout -> {"Dimension" -> 2, "VertexLayout" -> {"CircularEmbedding", "OptimalOrder" -> False}},
        GraphStyle -> "SmallNetwork"
    }
]
(*VB[*)(Graph[{1, 2, 3, 4, 5, 6}, {UndirectedEdge[1, 2], UndirectedEdge[1, 6], UndirectedEdge[2, 3], UndirectedEdge[3, 4], UndirectedEdge[4, 5], UndirectedEdge[5, 6]}, {GraphLayout -> {"Dimension" -> 2, "VertexLayout" -> {"CircularEmbedding", "OptimalOrder" -> False}}, GraphStyle -> "SmallNetwork"}])(*,*)(*"1:eJzNmk2IFEcUx2d3/c7Chlw0CJKAYA4e4n5JQBl019WFQcUZQq7tTM1Y2DO9W9277iwYyS1BQgJCDh5MLuLRBCJZ9LAeEkxCchJkwZAoCYKyxg05BCGRdHVP1+zrmlfdXdbAzGHY7l/3v6r/9d6bqup987RzqtqXy+XcDf7XMceuVPv50Rb/6yizZs7QshvyV/2vyWbDqtPycatO3BmrTMJr+Z0F6nrVzeBogB9t5XdRRsoenSfhKf51bI6wXPD5I9/640GeVYPPo3zYIL+15Ld/tkFc193IZS1WIyHkTZ3wu0C9JuUn2s9QoI14v4Jmh9r9Lzhly6NOo7jNP/cuYR5ZmJ7cvS9o8dCc59R9WnY3+UcTpOERllJgGBfogd6Nd7N3ikdPJzDSzd4pxNMJjHazdwrxdAJj3eydQvyl4w7Wi/5U9eJ2u0ywn3/in9V8NReVrCOVGplyWD0UewWWrNjzd7ykLzo5RW2bVCbm2DxZ76J/3xZwpHIYHLEDb6yunLuxuszufvXlwcENv+RjfFfz23/Of/MkznlnDpNFSljYmQFFE4iE4J9efXvzB0uPk/lf763s2tT/6zp+as4m7qD/R3HG9p90ktQYIZTjDBYo9CH/7O6ltX9fPNCwAJGQ+e5rex4+/+8hOgoyN2KBQh9GCeRZLEAkBP/x7ws/eF8/TeayhUYsUOhDDqMkiwWIhMyRRFDkKm5B7Ac75oGY0/jTqmaBzBOb8rLVfowSWfCK/Kp9qacE/Lbjjj8/WldUYUd5g4ctlxS9pk2K62d1xSGhVbBOE7vd5d4qm/ujodgRRutyjL8eJRTkWaIFkRD8YlQzkvhHYUAvG04YhT7kK2G0a1iASMj8ZpgQ6CjI3IgFCn0YJZBnsQCREPy7qGYkcdlCIxYo9CGHUZLFAkRC5kgiKHI1bdkc1i6bw6nXKobL5nAvls3a7OJrV377fJl9EgzlWnyoJljA8zGeJVoQCcEHA349md95PL3w/oU10wmj0Id8dq89NND3TMMCRELmvwc5+yc6CjI3YoFCH0YJ5FksQCQEvxLw68lcttCIBQp9yGGUZLEAkZA5kgiKXE1bNke0y+ZI6k0Uw2VzpBfLZmt5lmdvdf6Fay0M4lxjeYY20VqbJPPL3ZltKvQhf64920QkZH6/81RLWChzIxYo9GGU3NeebSISgrf2KZK5bKHJrRp0iAS/rD3bRCRkjiSCIlfTls1R7bI5mnp313DZHO3FsrkzGoqlzvsp70QJtaS9t4lICH4nqhlJ/F539jYV+pB/qL23iUjIfHvnjT1hocyNWKDQh1GyXXtvE5EQ/OOoZiRx2UIjFij0Ib+nvbeJSMgcSQRFrqYtm2PaZXMs9Wsnw2VzrBfL5hextVN8qLbFlm8a0YJICP5sFq5QUd5aPplOGIU+5K21lYYFiITMW8svdBRkbsQChT6MEsizWIBICH4rtkJFuWyhEQsU+pDDKMliASIhcyQRFLmatmyOa5fN8dQv2w2XzfHqxs6eBlK8bf663fJKzRkSdK/ErArlHbPs9ot4eAPzq2qJls+6orMdrJyuWzVy0qpUaKOGXbc1uq5IFwn9nlsHLggebsJpeMyxw/8gmrJsl/wP6zTXoQ=="*)(*]VB*)
Graph[
    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16},
    (*VB[*)(Uncompress["1:eJyF0sEOwiAQBFDU1lppqcde+zHePJn4Awo1c7GJ7f9HlsTrzGUT4E2ywE7P5T6Pzrm1yuWGdZv3tgq5PD4R3/TaUrzGd8Iub8EOuThKcWHC9nGQomfC4qikODFhcdRSDEzU8j2KODNhcTRMNPIuRXRMWBwtE63stIjAhMXhmfCyUy8nqJPz0ctOg/zb4d/HDwpUspY="])(*,*)(*"1:eJxTTMoPSmNmYGAo5gUSYZmp5S6pyflFiSX5RcEcQBHP5Py8zKrUlEwNTgaGNCaQQhYgEVSakxrMCmT4JCal5gSDhPzy81IB4VYSLA=="*)(*]VB*),
    {
        GraphLayout -> {"Dimension" -> 2, "VertexLayout" -> {"CircularEmbedding", "OptimalOrder" -> False}},
        GraphStyle -> "DiagramGreen"
    }
]
(*VB[*)(CoffeeLiqueur`Extensions`Boxes`Workarounds`temporal$1115261)(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKp1iapBoaWFjoJqcmGeiaWJgb6CammKXqpplZmiWaJpqbJBkYAwCF9RWp"*)(*]VB*)
Graph[
    {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12},
    (*VB[*)(Uncompress["1:eJyFzUEOQDAQBdCilBKJIziMnZXEBWgrsyHB/aPTxPbPZpJO3/8zbtcSBqXUo+OY6XlDzq8+jvV0dPv99W5yh6csrog/sdBI8J4KUZRIcJwqJLTYkYRBohSvJFEjwXFqkDBiRxIWiVq8kkSLBMepQ8KKHe3f8QF02X9T"])(*,*)(*"1:eJxTTMoPSmNmYGAo5gUSYZmp5S6pyflFiSX5RcEcQBHP5Py8zKrUlMwONgaGNCaQQhYgEVSakxrMCmT4JCal5gSDhPzy81IB7soSiQ=="*)(*]VB*),
    {
        GraphLayout -> {"Dimension" -> 2, "VertexLayout" -> {"GridEmbedding", "Dimension" -> {3, 4}}},
        GraphStyle -> "VintageDiagram"
    }
]
(*VB[*)(CoffeeLiqueur`Extensions`Boxes`Workarounds`temporal$1115523)(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKW5qlmRibJ6bomqYkm+iaWCQn6lpapKbqmhinJZoaASUtDE0BiW0VuQ=="*)(*]VB*)

More Tutorials!​

We adapted some parts from An Elementary Introduction to the Wolfram Language by Stephen Wolfram. New users can jump into that without visiting Wolfram Documentation center.

Ballon animation by Jemima (codepen)