Package: jupyterlab-mathjax3-web
jupyterlab-mathjax3-webA JupyterLab extension for rendering math with MathJax3.The default LaTeX renderer in JupyterLab uses MathJax2. This extension substitutes the MathJax 2 renderer with the MathJax 3 renderer.Compared to the officialjupyterlab-mathjax3which introduces the MathJax 3 into JupyterLab vianodeandwebpack, this extension exposes MathJax 3 to the browser's global environment by loading script from theweb, so that MathJax 3 can be used by other entities in JupyterLab like ourjsxgraph-magic.RequirementsJupyterLab >= 3.0Also note that his JupyterLab extension will disable the official MathJax 2 and MathJax 3 extension to avoid potential conflict.InstallationTo install the extension, execute:pipinstalljupyterlab-mathjax3-webConfigurationOur MathJax 3 extension enables partial customization on MathJax 3, which isconfigured via a global JavaScript object. We can customize it in aJSONfile and load this configuration every time we open the JupyterLab.Out of the many configurable options,texis the most useful and applicable one to be accessed by users. It controlsmath delimiters,macros,tagging,packages,etc.We decide toonlymaketexconfiguration available in our JupyterLab extension.For a full list configurable options undertex, please refer toMathJax's webpage.Where to configureTo configure yourtexoptions, openSetting -> MathJax 3 Config...This will open theAdvanced Settingspage of JupyterLab. There you will find aMathJax 3 Configentry. TheSystem DefaultsJSON file will be{
    "displayMath": [
        [
            "$$",
            "$$"
        ],
        [
            "\\[",
            "\\]"
        ]
    ],

    "inlineMath": [
        [
            "$",
            "$"
        ],
        [
            "\\(",
            "\\)"
        ]
    ],

    "processEnvironments": true,

    "processEscapes": true
}You may edit with theUser PreferencesJSON file according toMathJax'stexschemato override the default options. Only options with the same key in System Defaults and User Preferences will be overridden.As an example, you can add macros and tagging with{
    "macros": {
        R: "\\mathbb{R}", 
        E: "\\mathrm{E}", 
        RR: "{\\bf R}",
        bold: ["{\\bf #1}",1]
    },
    "tags": "all"
}Remember tosave the settingandrefresh the pageto let change take effect.Tex/LaTeX extensionsMathJax hasmany extensionsto replicate the TeX/LaTeX experience. For an extension to work, it has to be firstly loaded into the webpage, and then included inpackagesoption undertex. Our MathJax component already loads and includesmany useful extensionslikeams,autoloadandrequire.As of version 0.1.1, all official MathJax extensions are loaded and included by default. So in most cases, you don't have to bother with below. Just use the commands as you like.Use extensions viaautoloadExtension loading is configured in MathJax'sloaderoption and is thus not configurable in our setting. Luckily, theautoloadextension, which will automatically loads and includes many other extensions. So you don't really have to worry about extensions other thanphysicsandams.Usingautoloadis effortless. To use other extensions, you just use them! For example, you may try\encloseand\colorcommand defined inencloseandcolorextension respectively:$\enclose{circle}{\enclose{box}{\color{red}{x}}}$autoloadwill detect and automates everything for us.Use extensions viarequireTherequireextensioncan also help load and include extensions likephysics. You first use the\requirecommand to specify the extension and then use the extension commands:$\require{physics} \dv{f}{x}$CautionDo not try to include any extension via thetexconfiguration. Instead just use the commands or load-and-include via\require.{
    // wrong!
    "packages": {"[+]": ["enclose", "color"]}
}Such explicit including and corresponding commands won't be handled byautoload. It will make MathJax include extensions that are loaded with theloaderoption. However as said, we don't provide theloaderoption configuration. So finally these extensions cannot be successfully used.ContributingDevelopment-installNote: You will need NodeJS to build the extension package.Thejlpmcommand is JupyterLab's pinned version ofyarnthat is installed with JupyterLab. You may useyarnornpmin lieu ofjlpmbelow.# Clone the repo to your local environment# Change directory to the jupyterlab-mathjax3-web directory# Install package in development modepipinstall-e.# Link your development version of the extension with JupyterLabjupyterlabextensiondevelop.--overwrite# Rebuild extension Typescript source after making changesjlpmrunbuildYou can watch the source directory and run JupyterLab at the same time in different terminals to watch for changes in the extension's source and automatically rebuild the extension.# Watch the source directory in one terminal, automatically rebuilding when neededjlpmrunwatch# Run JupyterLab in another terminaljupyterlabWith the watch command running, every saved change will immediately be built locally and available in your running JupyterLab. Refresh JupyterLab to load the change in your browser (you may need to wait several seconds for the extension to be rebuilt).By default, thejlpm run buildcommand generates the source maps for this extension to make it easier to debug using the browser dev tools. To also generate source maps for the JupyterLab core extensions, you can run the following command:jupyterlabbuild--minimize=FalseDevelopment-uninstallpipuninstalljupyterlab-mathjax3-webThen you need to manually remove thelabextensionbecause it seems that the above won't remove these JupyterLab files:cdPYTHON_ENV/share/jupyter/labextensions
rmjupyterlab-mathjax3-web-rfwherePYTHON_ENVshould be expanded to your Python environment.