Skip to main content

Release notes *2.8.9*

⏱️ 3 min read

  • Missing symbols for Entity, EntityProperty, StadiumShape
  • TooltipBox was replaced with Identity (some invisible labels on Graphics plots now are visible)
  • Copy button was missing from cells properties
  • CreateDocument, NotebookEvaluate and other tools for programmatic notebook creating and importing
  • Updated NextJS / React integration. See example
Download original notebook

Support of Molecule framework

We added the missing representation of Molecule symbol

Molecule["NC(=O)C[C@H](C(=O)O)N"]
Molecule[(*VB[*) {"N", "C", "O", "C", Atom["C", "HydrogenCount" -> 1], "C", "O", "O", "N"}, {Bond[{1, 2}, "Single"], Bond[{2, 3}, "Double"], Bond[{2, 4}, "Single"], Bond[{4, 5}, "Single"], Bond[{5, 6}, "Single"], Bond[{6, 7}, "Double"], Bond[{6, 8}, "Single"], Bond[{5, 9}, "Single"]}, {StereochemistryElements -> {<|"StereoType" -> "Tetrahedral", "ChiralCenter" -> 5, "Direction" -> "Counterclockwise"|>}} (*,*)(*"1:eJy1U11LwzAU3fzAjxfBF8GnDcxjYctW0/m2rvsQhoNW92zapFJoG0kTtv17k7a6KcKCMkhves89957zcNMOmR8fNxqN4lYFl60njGevQ85x/kZJILMM842C46bmXKkw4SwX45wsEy4kTqvC9U5hvKaRFDhMaXCnYBQSAiPqWDYKO1a/g2IrdCCyiNPrdtGgh2EHx0d6yIkK86QQ1civrKzd7LirXT0Kmi0TugoutLgqyBQ/tCr6pQpjkgjGNWM7cMZSUmW66cWfezRihAZN1QWgA+Bw6gLbVTeAA4BcfUo4CLd4IMMi4sm7KBE4Ul9FAmhUd2rwG9IHtldDtqeH1bw9bXvFZybizoHEn0zE4YHEFybivd/FkafPJz6t4e0W+lIt77n+oZgs8nRTos9c0h+7WWb6+fhsVT0j87U9U7WhYFnx16XVTV1k4rqktlpmnlyWk/95ujfxVJzqZ4vTgn4AqU8Hpg=="*)(*]VB*)]

Example: check for patterns and highlight them

sulfurOxygenBond = MoleculePattern[{"S", "O"}, {Bond[{1, 2}, "Single"]}];
m = Molecule["4-methylbenzenesulfonic acid"]
Molecule[(*VB[*) {"C", "C", "C", "C", "C", "S", "O", "O", "O", "C", "C", "H", "H", "H", "H", "H", "H", "H", "H"}, {Bond[{1, 2}, "Single"], Bond[{2, 3}, "Aromatic"], Bond[{3, 4}, "Aromatic"], Bond[{4, 5}, "Aromatic"], Bond[{5, 6}, "Single"], Bond[{6, 7}, "Double"], Bond[{6, 8}, "Double"], Bond[{6, 9}, "Single"], Bond[{5, 10}, "Aromatic"], Bond[{10, 11}, "Aromatic"], Bond[{11, 2}, "Aromatic"], Bond[{1, 12}, "Single"], Bond[{1, 13}, "Single"], Bond[{1, 14}, "Single"], Bond[{3, 15}, "Single"], Bond[{4, 16}, "Single"], Bond[{9, 17}, "Single"], Bond[{10, 18}, "Single"], Bond[{11, 19}, "Single"]}, {} (*,*)(*"1:eJy9U11LwzAUnV/48SL4Ivg0wTwWXGpo69u6dpswGDS6Z9MmlULbSJqw7T/5I03a6qYvKwOF9LY595x77sPpbcyj9KjX61U3uvh8NeaieB0KQco3RrEqCiLWGk4PDOdSl7HgpQxLusiEVCRvGldbjXDFEiVJnDN8p2F679pxSpHlIduxHhBEFkkGzHKg59qpPYip56WHZsixLrOsks3I71vdu97art3qSbJikbElPjfmuqFy8thv6Be6hDSTXBjGZuCU57S5GdFLNAtYwinDHxoD0AVwOPEB8vUbQA84vjk1jOMNjlVcJSJ7lzUCR/ppSMAZtUoD/kAcgIIWQoEZ1vJ2yHaaT7uYu39kPu9ibu9rDrEZ7wTmfOknrXwTmEjpnJ2ZD0bovMzXNfosFPsVo/pmkh7xZZP47gk71b2h5EW1b76MaNBp65ra73fbyecl/YedqhPzh5G8Yp8Q1/TL"*)(*]VB*)]
MoleculePlot[m, sulfurOxygenBond]
(*VB[*)(FrontEndRef["07561b8a-d909-45e8-b6a1-540829f8f480"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKG5ibmhkmWSTqplgaWOqamKZa6CaZJRrqmpoYWBhZplmkmVgYAAB39RTz"*)(*]VB*)

3D molecule plot

MoleculePlot3D[m, sulfurOxygenBond]
(*VB[*)(FrontEndRef["71530581-9ce1-4559-9f8a-cdfbf6697ddd"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKmxuaGhuYWhjqWianGuqamJpa6lqmWSTqJqekJaWZmVmap6SkAAB2UhW/"*)(*]VB*)

Access to properties of the notebook

You can read and write to the notebook fields using this pattern:

n = EvaluationNotebook[];
n["Properties"]
{"Icon","Init","PublicFields","EvaluationContext","Cells","Self","Properties","Hash","AutorunScript","Controller","ExcalidrawImages","FocusedCell","MessangerChannel","ModalsChannel","Objects","Path","Symbols","TOC","WebSocketQ","Opened","Socket","CellsInitialized","Evaluator"}
note

Both public and private fields are exposed

Read cells and get their content

n["Cells"][[4]]
%["Data"]
RemoteCellObj["54680020-89cf-4be5-aaa7-057ed347804a"]
"## Support of Molecule framework\nWe added the missing representation of `Molecule` symbol"

Create, open, save and evaluate external notebooks

We completed the implementation of Notebook API to the point, where you can safely:

Import and evaluate

Import a WLN notebook from a file and then evaluate it (only initialization cells) and collect the last output cell:

pianoNotebook = Import[FileNameJoin[{"attachments", "Piano.wln"}], "WLN"];
widget = NotebookEvaluate[pianoNotebook]
saga8907g`PianoView
widget[] 
(*VB[*)(FrontEndRef["d8295bd8-29e4-4177-903d-4efab547e2d1"])(*,*)(*"1:eJxTTMoPSmNkYGAoZgESHvk5KRCeEJBwK8rPK3HNS3GtSE0uLUlMykkNVgEKp1gYWZompVjoGlmmmuiaGJqb61oaGKfomqSmJSaZmpinGqUYAgB+9RWC"*)(*]VB*)
warning

NotebookEvaluateAsync is recommended to use, since synchronious variant breaks the evaluation order and causes the same cell to be reevalauted twice!

We can open that notebook by

NotebookOpen[pianoNotebook]

Create a notebook

Let's make an empty notebook and then open it

doc = CreateDocument[{
  TextCell["Hello World", "Section"], 
  Series[Sin[x], {x,0,2}]
}];

NextJS & MDX Export

We improved our integration with Next.js & React system. Now all assets are served statically within the library: no CDNs, everyhting is local. And Tailwind framework is no longer required!

Check it out:

Minor Bug Fixes

  • The Triangle and StadiumShape symbol is missing its graphical representation.
  • Tooltip was not rendered inside Graphics.
  • The copying button was missing in the cell properties.
  • There was a bug with printing slide cells.
  • Automatic cache flushing occurs after an update.

Thank You All ❤️

Monumental effort people, you're democratizing Mathematica! Anonymous

This is a fantastic project! keep it up! Anonymous

✨ Monthly financial contribution to WLJS Notebook (€3.00) Jason Cunliffe

✨ Monthly financial contribution to WLJS Notebook (€2.00) Guest