I'm trying to implement partial rendering in my Markdown editor by converting Markdown/Tex in modified paragraphs only.
So basically, I have a #preview
element that contains multiple .preview_section
elements containing themselves the converted HTML paragraphs. When I update one or more .preview_section
element, I'd like MathJax to process only those elements.
I tried different approaches:
.preview_section
elements as typset parameter. That's the worst solution in term of performance. When passing more than 1 element, the time to render is almost multiplied by the number of elements.#preview
element as typeset parameter. The problem with this solution is that MathJax renders again the already rendered script[type="math/tex; mode=display"]
. I tried to set the tex2jax ignoreClass: "tex2jax_ignore"
configuration and to add .tex2jax_ignore
to both unmodified .preview_section
elements and already rendered script
elements but it has no effect as it's not processed by tex2jax preprocessor (I suppose).#preview
element as typeset parameter but after removing all the script[type="math/tex; mode=display"]
from the preview. That's the most efficient, but I don't really like to remove these scripts from the preview.Is there any ways to tell MathJax not to processing those script
elements? Or any ideas before I plunge myself into the source code... Thanks.
Ok, I just found my problem. MathJax stores a JavaScript object in every script[type="math/tex"]
element in the DOM. This object, actually stored in element.MathJax
, contains :
checked: 1
elementJax: Object
preview: span.MathJax_Preview
startNumber: 0
state: 2
where state
is the state of the preview (2 means PROCESSED). So the TypeSet does not render the preview again if it has already been rendered, unless you rewrite the script tag in the DOM (that's what I was doing), this case you lose the MathJax object and the state of the preview. That's why MathJax was keeping re-rendering all my scripts.