2017-05-05 1 views
0

J'ai une démo dans laquelle je rends Math dans une page web en utilisant MathJax.js. Cette démo est au Online Demo. Je reçois le rendu mathématique parfaitement, mais maintenant je veux faire l'inverse du rendu mathématique, c'est-à-dire obtenir le balisage html associé au rendu mathématique. J'ai essayé quelques méthodes MathJax.Hub.getJaxFor(div) et aussi div.innerHTML mais aucun ne m'a donné le balisage original.Comment obtenir le balisage Tex associé à Math rendu dans MathJax?

Je veux obtenir le balisage d'origine, qui dans cette démo est $$x^2 = x +2$$ en utilisant une API dans MathJax.

Question

Quelle API MathJax vais-je utiliser pour obtenir le balisage d'origine dans la démo ci-dessous?

Code de démonstration

<script> 
    function getMathMarkup() { 
    var div = document.getElementById("mathMarkup"); 
    //I need to get the original Tex markup with $$ delimiters 
    //once the Math gets rendered 
     alert(MathJax.Hub.getJaxFor(div)); 
     alert(div.innerHTML); 
    } 
</script> 
<script type="text/x-mathjax-config"> 
    MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}}); 
</script> 
<script type="text/javascript" 
    src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 
<button type="button" onclick="getMathMarkup();return false;">Get Math Markup</button> 
<div id="mathMarkup"> 
    $$x^2 = x +2$$ 
</div> 

Répondre

1

Je veux obtenir le marquage d'origine, ce qui dans cette démo est $$ x^2 = x + 2 $$ en utilisant une API dans MathJax.

Ce n'est pas possible en tant que tel; les délimiteurs seront supprimés pendant le prétraitement et ne seront pas stockés. Vous devriez suivre vous-même les entrées de l'utilisateur si vous aviez besoin de l'original. Toutefois, vous pouvez rechercher le style d'affichage et dériver les délimiteurs à partir de là.

Voici un exemple.

<script> 
 
    function getMathMarkup() { 
 
    var div = document.getElementById("mathMarkup"); 
 
    //I need to get the original Tex markup with $$ delimiters 
 
    //once the Math gets rendered 
 
    var math = MathJax.Hub.getAllJax("MathMarkup")[0]; 
 
    var text = '$' + math.originalText + '$'; 
 
    if (math.root.display) text = '$' + text + '$'; 
 
    alert(text); 
 
    }; 
 
</script> 
 
<script type="text/x-mathjax-config"> 
 
    MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}}); 
 
</script> 
 
<script type="text/javascript" 
 
    src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> 
 

 
<button type="button" onclick="getMathMarkup();return false;">Get Math Markup</button> 
 
<div id="mathMarkup"> 
 
    $$x^2 = x+2$$ 
 
</div>

Une alternative est de regarder simplement la balise de script qui est placé dans le droit DOM après la sortie. Ensuite, vous pouvez reconstruire les informations à partir de là, sans compter sur l'API de MathJax.

+0

Merci. Que vérifie 'math.root.display'? Est-ce lié à MathML? – Sunil

+0

Il vérifie le style d'affichage de l'entrée, que ce soit en mode bloc ou en ligne. C'est une différence commune dans les moteurs de rendu mathématique. Dans le cas de MathJax, il est en quelque sorte lié à MathML car c'est sa structure de données interne. –

+0

Ok. Merci. Je suppose qu'il n'y a pas de moyen facile d'obtenir l'entrée pour le rendu mathématique. – Sunil