MathJax Рендеринг полей ввода HTML в 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>

person Glynbeard    schedule 16.01.2014    source источник
comment
Если требуется дополнительная информация, связанная с проблемой, я могу предоставить некоторые фотографии и т. д. по мере необходимости. Я все еще не могу решить эту проблему на данный момент и ищу помощи.   -  person Glynbeard    schedule 17.01.2014


Ответы (1)


Спецификация MathML3.0 не предусматривает элементы HTML, встроенные непосредственно в MathML. HTML5 расширил определение, чтобы разрешить теги HTML в элементах токена в MathML, например, такие как <mtext>. Однако MathJax был разработан до того, как HTML5 был завершен, и соответствует спецификации MathML3.0, поэтому HTML-теги в целом запрещены.

Однако можно использовать элементы <semantics> и <annotation-xml> для включения HTML в MathML. Обратите внимание, что <annotation> и <annotation-xml> могут появляться только как дочерние элементы <semantics>, поэтому вам нужны оба. Кроме того, тело тега <annotation> должно быть простым текстом, а не тегами HTML, поэтому для включения HTML необходимо использовать <annotation-xml>, а не <annotation>. Наконец, вам нужно предоставить атрибут encoding для тега <annotation-xml>, а содержимому аннотации нужен атрибут xmlns, чтобы убедиться, что оно анализируется в пространстве имен popper.

Вот пример, который работает с MathJax, а также с родным MathML в Firefox:

<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, но сейчас это единственная альтернатива. Я надеюсь, что это работает для вас.

person Davide Cervone    schedule 17.01.2014
comment
Спасибо за твою помощь! Он отлично работает в Firefox и даже в Internet Explorer, однако в chrome выдает следующую ошибку: Ошибка синтаксического анализа MathML: ошибка в строке 1 в столбце 378: Несоответствие открывающего и конечного тегов: строка ввода 0 и аннотация-xml Есть ли какие-либо способ исправить это тоже? Я не верю, что на самом деле происходит несоответствие. - person Glynbeard; 18.01.2014
comment
Вероятно, это связано с самозакрывающимся тегом <input>. Попробуйте сделать это <input ...></input> и посмотрите, поможет ли это. - person Davide Cervone; 18.01.2014
comment
Хм, я попробовал это и все еще получаю ту же ошибку только в хроме. Есть ли что-нибудь еще, что я могу попробовать? Если бы я мог просто заставить его работать и в хроме, я был бы готов! Еще раз спасибо за вашу помощь до сих пор. - person Glynbeard; 18.01.2014
comment
Вы всегда используете MathJax или в Firefox вы просто используете собственный MathML без MathJax? Кроме того, ваш HTML-файл создан программой, над которой вы работаете? Попробуйте поставить <script type="math/mml">...</script> вокруг <math>...</math> и посмотрите, поможет ли это. Я подозреваю, что Chrome удаляет </input> до того, как MathJax обработает страницу, и это предотвратит это. - person Davide Cervone; 18.01.2014
comment
Хорошо, я попробовал это, код Im testing with now is the (now slightly modified) code you gave me. Ive отредактировал этот код в моем исходном сообщении, чтобы вы могли видеть, с чем я работаю. Однако я все еще вижу аналогичную ошибку. Версия Chrome, на которой я сейчас использую это: 33.0.1750.29 beta-m. Если это вообще поможет. - person Glynbeard; 18.01.2014
comment
Я должен изучить это. Вернусь к вам, как только у меня будет шанс. - person Davide Cervone; 18.01.2014
comment
Хорошо, пример работает для меня в Chrome 32, но вы должны изменить /> на > перед </input> или удалить </input>. Тем не менее, вам действительно нужно, чтобы <script> располагалось вокруг <math>. Я изменяю свой ответ на тот, который работает для меня. - person Davide Cervone; 18.01.2014
comment
Круто, спасибо за помощь! Я дома на выходных, поэтому я не смогу протестировать до понедельника, поэтому я отвечу тогда, когда у меня все заработает. - person Glynbeard; 18.01.2014
comment
Теперь, когда я внес эти изменения, все работает отлично. Спасибо еще раз! - person Glynbeard; 20.01.2014