MathJax在MathML中渲染HTML输入字段

时间:2014-01-16 19:30:50

标签: javascript html input mathjax mathml

我正在尝试包含html输入字段,例如:

<input id="txtBox" type="text" size="1" style="text-align: center">

在mathML方程式中。当我最初在Firefox上本地创建和测试它们时,一切看起来都很好(本机呈现内容)。但是,现在我已将它上传到我们的网站,该网站使用mathjax 2.01呈现内容,我得到的输入框应该是“未知节点类型:输入”错误。我目前把盒子包裹在

 <annotation> 

标签,如另一篇文章所述,但我仍然收到同样的错误。

<script type="math/mml">
<math>
  <mstyle displaystyle="true">
    <msup>
      <mi>x</mi>
      <semantics>
        <annotation-xml encoding="application/xhtml+xml">
         <input xmlns="http://www.w3.org/1999/xhtml" style="text-align:right" type="text" size="2" name="n" /></input>
    </annotation-xml>
  </semantics>
</msup>
<mo>+</mo>
<semantics>
  <annotation-xml encoding="application/xhtml+xml">
    <input xmlns="http://www.w3.org/1999/xhtml" type="text" size="2" name="b" /></input>
  </annotation-xml>
 </semantics>
</mstyle>
</math>
</script>

1 个答案:

答案 0 :(得分:5)

MathML3.0规范不提供直接嵌入MathML中的HTML元素。 HTML5扩展了定义,允许在MathML中的标记元素中使用HTML标记,例如<mtext>。然而,MathJax是在HTML5完成之前开发的,它遵循MathML3.0规范,因此一般不允许使用HTML标记。

但是,可以使用<semantics><annotation-xml>元素在MathML中包含HTML。请注意,<annotation><annotation-xml>只能显示为<semantics>的子项,因此您需要两者。此外,<annotation>标记的正文应该是纯文本,而不是HTML标记,因此要包含HTML,您必须使用<annotation-xml>而不是<annotation>。最后,您需要为encoding标记提供<annotation-xml>属性,并且注释的内容需要xmlns属性,以确保在popper名称空间中解析它。

以下示例适用于MathJax以及Firefox中的本机MathML:

<script type="math/mml">
<math>
  <mstyle displaystyle="true">
    <msup>
      <mi>x</mi>
      <semantics>
        <annotation-xml encoding="application/xhtml+xml">
          <input xmlns="http://www.w3.org/1999/xhtml" style="text-align:right" type="text" size="2" name="n" />
        </annotation-xml>
      </semantics>
    </msup>
    <mo>+</mo>
    <semantics>
      <annotation-xml encoding="application/xhtml+xml">
        <input xmlns="http://www.w3.org/1999/xhtml" type="text" size="2" name="b" />
      </annotation-xml>
    </semantics>
  </mstyle>
</math>
</script>

我们希望改进MathJax未来版本的情况,但现在这是唯一的选择。我希望这对你有用。