Converter for HTML fragments with mathematics using mathjax-node
mathjax-node-page
This Node.js module builds on mathjax-node and provides processing of larger content fragments
Installation
Use
npm install mathjax-node-page
to install mathjax-node-page and its dependencies.
Usage
mathjax-node-page exports mjpage
which expects four parameters:
mjpage(input, mjpageConfig, mjnodeConfig, callback)
Where input
is a string with HTML, pageConfig
specifies page-wide options, and mjnodeConfig
expects mathjax-node configuration options.
The defaults for pageConfig
are
-- -------------------- ---- ------- - ------- ---------- ------ ------------- -- ---------- ---- -- -------------- -- --- ------- --- -- ------ -------- --- ------ ------- ------ ------ -- ----- ---- --- -- ------------- ------- --- --- -------------- --- ---------- ------ --- -- ------------- ------- --- ----- -------------- --- ------------ -------------- ------ -- ----- ------------- --------- --- ------ --- --------- ------ -- ------ -------------- ------- -- ---- -------- ---------- ----- -- ---------- ------- ------ --- ------ -- ----- ------ ---- -- -- ------------- ------- ---------------- ------ -- ---------- ------- ------------- ----- --- ------ -------------- ----- -- ---------- ------- ----- -------- --- ----- -- --- ------- ------------------- ------ -- ---------- ------- ------- ---------- --- ----- -- --- ----- ----- ----------- --- -- - ----------- ------ -- --- ------- ---------- -------- ---------------------------------------------------------------------- -- --- ------- ---- -- --- --- --- ---- ------ -------- -- -- ------- ------- -------------- --- ------------------------ -
and where mjnodeConfig
represents mathjax-node configuration options, the defaults are.
-- -------------------- ---- ------- - --- -- -- ------- -- ------ ------ ---- -- ----- -- ---- --------- --- --- --- ------------ --- ---- ------------- ----- -- --- ------ --- ----- -- --- ------- --------------- ------ -- --- ------ ------ --- --- ---------- ------ -------- -- ----- ------ ----- ----------- ------ -- -- ------------- ---------------- ------- -- -- ----- -- ----- ----- --- -- --- ---- -- ------- ----- ------ -- -------- ---- ------- ---- ------ -- -------- --- --- ---- ------- ---- ------ -- -------- --- ------- ---- ------ -- -------- --- ------- ---------- ----- -- --- ------ ----------- -- ------- -------- -- - ----- -- -- ------ ------- ------ ---------- ------- -
Advanced usage
mathjax-node customization
mathjax-node-page exports init
function that allows you to pass in a custom mathjax-node
(for example, mathjax-node-svg2png).
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
.
mjpage.addOutput('png', (wrapper, data) => { wrapper.innerHTML = `<img src="${data}">`; }); // ...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.
mjpage.init(); // reset back to default mathjax-node
Events
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<script type="...">
tags, where@type
is one of the following:
const scripts = document.querySelectorAll(` script[type="math/TeX"], script[type="math/inline-TeX"], script[type="math/AsciiMath"], script[type="math/MathML"], script[type="math/MathML-block"]` );
afterConersion
->handler(parsedFormula)
: runs after individual formula conversion completed and DOM was changed. Formula DOM node is a<span class="mjpage...">
wrapper whose contents are the conversion result.
All formula conversion events pass ParsedFormula
instance to the event handler.
-- -------------------- ---- ------- - --- -- ----- -- ------- -- --- ---- ------ -- ------ --- --- -------- --------- -- --- ---- ---- --- ---- --- ---- ----- ----- -- --- ---- ---- --- ------- --------- ------ ------ --- ----- ----------- -------------- -- --- ------ ------- ------------- -- --- ------ ------- ------ ----- ------------- -------------- -- --- --------- ------- ------ ---- ------------ ------- --------- --- --------------------------- -- --- --- --------- ------- ------ ------------ -- --- --------- ------- ------ ----- ------ -
Page conversion events
beforeSerialiation
->handler(document, css
): runs when converted page DOM was prepared immediately before serialization. Use to manipulate resulting page DOM. The event handler receivesdocument
node (jsdom) and pagecss
.
mjpage
function callback receives result after the DOM serialization.
Example
-- -------------------- ---- ------- ------------- - ------- ------- -- - ---- ---- -- ---------------- - -- ------ -- ---- ----- ------ -- ---------------------- ----------------------- - -- ---------- ------ ------ --- --- -- ---- ---- -- --- ----------- -- ------------- ------ ----- ---
CLI
mathjax-node-page installs a CLI tool. Run mjpage
to print usage instructions.
Example
const mjpage = require('../lib/main.js').mjpage; const fs = require('fs'); const input = fs.readFileSync('input.html'); mjpage(input, {format: ["TeX"]}, {svg: true}, function(output) { console.log(output); // resulting HTML string });
Tips
mathjax-node-page
is intended to work with HTML pages and it uses DOM parser while extracting formulas from the document. If your page is not HTML, make sure you escape < (<
) and > (>
) before usage. This test contains an example.
HomePage
https://github.com/roman-spiridonov/mathjax-node-page#readme
Repository
git+https://github.com/roman-spiridonov/mathjax-node-page.git
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6005606781e8991b448de8aa