There doesn’t seem to be a reliable way of customizing the MathJax configuration currently (the Extended MathJax plugin helps, but even that is a slightly hacky solution, and it only covers preambles).
There are a fair few feature requests surrounding MathJax in the Feature Requests category, but ultimately I think implementing totally customizable MathJax in Obsidian core will never feel elegant, since it would either involve a sizable effort in providing a good interface for it, or it would require the user to set up the MathJax object in JS themselves, which is scary for a large group of less technical users.
To cater to those who are heavy users of math in their vaults, full customization would be a very valuable thing.
The better solution I think would be implementing a MathJaxProvider, which could be subclassed and customised by plugins. The MathJaxProvider should:
- Have a
displayName attribute
- Have a
providerID attribute
- Have a
provide method, which would return an initialised MathJax3 object.
The default MathJax implementation would be turned into a MathJaxProvider (perhaps aptly named “Obsidian Default”).
Plugins could register MathJaxProviders.
In Options → Editor there would be a dropdown with:
- Label:
MathJax Provider (or perhaps something simpler like Math Provider)
- Text:
Which configuration of MathJax to use for rendering math
- Options: List of registered
MathJaxProviders
Relevant Feature Requests
Alternative Solutions
Alternatively there could be a mathjax.js file in .obsidian which would instanciate the MathJax object - this could then be overridden by users. This is less elegant and more prone to untechnical users breaking their configurations in hard-to-debug ways.
Considerations
This would be quite easy to implement in Obsidian, I’d imagine, and it likely wouldn’t require significant effort to implement or maintain.
- Should verify that object returned by provider is a mathjax instance
- If a plugin is removed such that the configured value to the mathjax provider setting is no longer valid, it should default back to ‘Obsidian Default’.
I really hope this is something that could be added to Obsidian. It already has really good math support, but this (along with WYSIWYG eventually
) would bring it to the next level.
P.S. MathJax 3.2 will be out soon, perhaps implementing this could be implemented when MathJax is upgraded to 3.2 in Obsidian anyway?