如何在MathJax中获得与渲染数学相关联的Tex标记?

时间:2017-05-05 12:49:55

标签: webpage mathjax

我有一个演示,我使用MathJax.js在网页中渲染Math。此演示位于Online Demo

我完美地渲染了数学,但是现在我想要进行数学渲染的反向,即获得与渲染数学相关联的html标记。我尝试了几种方法MathJax.Hub.getJaxFor(div)div.innerHTML但没有人给我原始标记。

我想获得原始标记,在此演示中使用MathJax中的某些API $$x^2 = x +2$$

问题

我将使用MathJax中的哪些API来获取下面演示中的原始标记?

演示代码

<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>

1 个答案:

答案 0 :(得分:1)

  

我想获得原始标记,在此演示中使用MathJax中的某些API来获取$$ x ^ 2 = x + 2 $$。

这是不可能的;分隔符将在预处理期间被删除,并且不会被存储。如果您需要原始文件,则必须自己跟踪用户输入。

但是,您可以查看显示样式并从那里派生分隔符。

以下是一个例子。

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

另一种方法是在输出后立即查找放置在DOM中的脚本标记。然后,您可以从那里重建信息,而无需依赖MathJax的API。