Работа с MathML

Re: Работа с MathML

от Vadim Tabunshchik -
Количество ответов: 5
Изображение пользователя Developers
В ответ на Vadim Tabunshchik

Re: Работа с MathML

от Артём Мазитов -

Как я понял это документация по использованию TeX...
Я знаю что можно формулы вводить в виде "TeX", а так же видел фильтр для него, но к сожалению мне необходим "MathML".
Спасибо за ответ.

В ответ на Артём Мазитов

Re: Работа с MathML

от Vadim Tabunshchik -
Изображение пользователя Developers
мне необходим "MathML"

Зачем? Формулы на MathML тоже можно вставлять на странице (в режиме редактирования исходного кода), но они мелкие и не интерактивные, в отличие от MathJax. Сравните:

MathML

image001

MathJax

image002

Масштаб одинаковый.

ЗЫ: и фильтры тут не нужны, MathML не обрабатывается фильтрами Мудл, браузер «читает» код MathML и показывает формулу.

В ответ на Vadim Tabunshchik

Re: Работа с MathML

от Артём Мазитов -
ЗЫ: и фильтры тут не нужны, MathML не обрабатывается фильтрами Мудл, браузер «читает» код MathML и показывает формулу.

Увы но MathML читает только Firefox, для других браузеров необходима библиотека MathJax, он преобразует верстку TeX и MathML в нормальный вид

Зачем? Формулы на MathML тоже можно вставлять на странице (в режиме редактирования исходного кода), но они мелкие и не интерактивные, в отличие от MathJax. Сравните:

Зачем? - Мне приходит материал и там все формулы на MathML.
Да, я вставлял в режиме редактирования исходного кода.

Теже я заметил свойство фильтра при настройках "из коробки":

  • когда на странице только MathML он его не читает.
  • Но когда вместе с TeX отображает, пример:
When $a \ne 0$, there are two solutions to \(ax^2 + bx + c = 0\) and they are
$$x = {-b \pm \sqrt{b^2-4ac} \over 2a}.$$
<math xmlns="http://www.w3.org/1998/Math/MathML"><mfrac><mn>1</mn><mn>2</mn></mfrac></math>

По этому я и в поисках оптимального "filter_mathjaxloader | mathjaxconfig"

Кстати, размер формул можно поправить в этом же поле.

В ответ на Артём Мазитов

Re: Работа с MathML

от Vadim Tabunshchik -
Изображение пользователя Developers

mathjaxconfig у меня такой:

MathJax.Hub.Config({
  config: ["Safe.js"],
  jax: ["input/TeX","input/MathML","output/HTML-CSS","output/NativeMML"],
  extensions: ["tex2jax.js","mml2jax.js","MathMenu.js","MathZoom.js"],
  TeX: {
//equationNumbers: {autoNumber: "all"},
    extensions: ["AMSmath.js","AMSsymbols.js","mhchem.js","noErrors.js","noUndefined.js"],
    Macros: {
      textsf: ['\\mathord{\\sf{\\text{#1}}}', 1],
      texttt: ['\\mathord{\\tt{\\text{#1}}}', 1],
      vline: ['\\smash{\\large\\lvert}', 0],
      le: ['\\leqslant', 0],
      ge: ['\\geqslant', 0],
      phi: ['\\varphi', 0], // греческая фи, как принято в нашей нотации
      EDS: ['\\mathscr{E}', 0], // красивая буква для ЭДС
      degree: ['^\\circ', 0],
      celsius: ['\\degree{}C', 0],
      arctg: ['\\mathop{\\rm arctg}\\nolimits', 0],
      ch: ['\\mathop{\\rm ch}\\nolimits', 0],
      ctg: ['\\mathop{\\rm ctg}\\nolimits', 0],
      sh: ['\\mathop{\\rm sh}\\nolimits', 0],
      arcctg: ['\\mathop{\\rm arcctg}\\nolimits', 0],
      cosec: ['\\mathop{\\rm cosec}\\nolimits', 0],
      cth: ['\\mathop{\\rm cth}\\nolimits', 0],
      tg: ['\\mathop{\\rm tg}\\nolimits', 0],
      th: ['\\mathop{\\rm th}\\nolimits', 0]
    },
    noErrors: { disabled: true }, // для возврата к TeX в случае проблем с mathjax
    noUndefined: { disabled: true } // для возврата к TeX в случае проблем с mathjax
  },
  tex2jax: {
      inlineMath: [ ['$$','$$'], ['$','$'], ["\\(","\\)"] ],
      displayMath: [ ["\\[","\\]"] ]
  },
  menuSettings: {
    zoom: "Click",
    zscale: "200%"
  },
  skipStartupTypeset: true,
  messageStyle: "none",
  // showMathMenu: false, // отключает мею по правой клавише
  preRemoveClass: "MathJax_Preview_Alternative", // для возврата к TeX в случае проблем с mathjax
  "HTML-CSS": { scale: 120} // для увеличения размера формул
});

// Для исправления ошибок в формулах, содержащих команду \nulldelimiterspace
MathJax.Hub.Register.StartupHook("TeX Jax Ready", function () {
  var TEX = MathJax.InputJax.TeX;
  var PREFILTER = TEX.prefilterMath;
  TEX.Augment({
    prefilterMath: function (math,displaymode,script) {
      math = math.replace(/\\nulldelimiterspace/g, "0em");
      return PREFILTER.call(TEX,math,displaymode,script);
    }
  });
});

// Для большого размера всех дробей. Аналог команды \everymath{\displaystyle}
MathJax.Hub.Register.StartupHook("TeX Jax Ready", function () {
  var TEX = MathJax.InputJax.TeX;
  var PREFILTER = TEX.prefilterMath;
  TEX.Augment({
    prefilterMath: function (math,displaymode,script) {
      math = "\\displaystyle{"+math+"}";
      return PREFILTER.call(TEX,math,displaymode,script);
    }
  });
});

// для возврата к TeX в случае проблем с mathjax
MathJax.Hub.Typeset_source = MathJax.Hub.Typeset;
MathJax.Hub.Typeset = function(node, callback) {
  return MathJax.Hub.Typeset_source(node, function() {
    var jax = MathJax.Hub.getAllJax(node);
    for (var i = 0, m = jax.length; i < m; i++) {
      var math = jax[i];
      if (!math.texError) {
        var pre = math.SourceElement().previousSibling.previousSibling;
        if (pre && pre.className !== "MathJax_Preview") {
          pre = pre.previousSibling;
        };
        if (pre && pre.className === "MathJax_Preview") {
          pre.innerHTML = "";
        };
      } else {
        var pre = math.SourceElement().previousSibling;
        if (pre && pre.className === "MathJax") {
          pre.innerHTML = "";
        };
      };
    };
    return callback;
  });
};

Во всех браузерах формулы MathML нормально выглядят:

IE 11 image001

Opera image002

Pale Moon (fork Firefox) image003

Edge image004

По настройкам mathjaxconfig ищите тему на форуме, Вадим Дворовенко там целый ликбез провёл улыбаюсь

В ответ на Vadim Tabunshchik

Re: Работа с MathML

от Артём Мазитов -

Довольно интересный конфиг, взял на вооружение, но так и не сработал с чистым mathML.
Гибридный по прежнему работает.
Не сразу обратил внимание на "filter_mathjaxloader | additionaldelimiters" забив туда "<math" все заработало! (даже с mathjaxconfig из коробки)

Во всех браузерах формулы MathML нормально выглядят:
Без библиотеки нет, только-что проверил в 5 популярных браузеров, только в Firefox из коробки читает теги MathML.

Спасибо за уделенное время и за mathjaxconfig! улыбаюсь