Converter for HTML fragments with mathematics using mathjax-node
npm install @4qwerty7/mathjax-node-page
This Node.js module builds on mathjax-node and provides processing of larger content fragments
Use
```
npm install mathjax-node-page
to install mathjax-node-page and its dependencies.
mathjax-node-page exports mjpage which expects four parameters:
`javascript`
mjpage(input, mjpageConfig, mjnodeConfig, callback)
Where input is a string with HTML or jsdom object (JSDOM class should be acquired via exported JSDOM), pageConfig specifies page-wide options, and mjnodeConfig expects mathjax-node configuration options.
The defaults for pageConfig are
`javascript`
{
format: ["MathML", "TeX", "AsciiMath"], // determines type of pre-processors to run
output: '', // global override for output option; 'svg', 'html' or 'mml'
tex: {}, // configuration options for tex pre-processor, cf. lib/tex.js
ascii: {}, // configuration options for ascii pre-processor, cf. lib/ascii.js
singleDollars: false, // allow single-dollar delimiter for inline TeX
fragment: false, // return body.innerHTML instead of full document
cssInline: true, // determines whether inline css should be added
jsdom: {...}, // jsdom-related options
displayMessages: false, // determines whether Message.Set() calls are logged
displayErrors: false, // determines whether error messages are shown on the console
undefinedCharError: false, // determines whether unknown characters are saved in the error array
extensions: '', // a convenience option to add MathJax extensions
fontURL: 'https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.2/fonts/HTML-CSS', // for webfont urls in the CSS for HTML output
MathJax: {}, // options MathJax configuration, see https://docs.mathjax.org
errorHandler: (id, wrapperNode, sourceFormula, sourceFormat, errors) => {...} // function to handle rendering error
}mjnodeConfig
and where represents mathjax-node configuration options, the defaults are.
`javascript`
{
ex: 6, // ex-size in pixels
width: 100, // width of math container (in ex) for linebreaking and tags
useFontCache: true, // use
function that allows you to pass in a custom mathjax-node (for example, mathjax-node-svg2png).
`javascript
const mjnode = require('mathjax-node-svg2png');
mjpage.init(mjnode);
`If your custom mathjax-node provides new output options, you can add them by calling
addOutput. As a second parameter, you can pass custom output handler, which is a function that modifies a DOM element with the conversion result. The default output handler behavior is to write contents to wrapper.innerHTML.
`javascript
mjpage.addOutput('png', (wrapper, data) => {
wrapper.innerHTML = ;
});
// ...now you can use standard mathjax-node-page API
`Reset to default mathjax-node behavior by calling
init with empty parameters. Ensure that all your current mathjax-node-page tasks have been completed before calling it.
`javascript
mjpage.init(); // reset back to default mathjax-node
`$3
mjpage runs jobs which inherit EventEmitter and provide the following event hooks.
Add the corresponding event handlers to manipulate the input/output and DOM before/after conversion.All the event handlers are destroyed when job ends to prevent memory leaks.
#### Formula conversion events
*
beforeConversion -> handler(parsedFormula): runs before individual formula conversion started, but after initial DOM processing. All the formulas are wrapped in