суббота, 3 июля 2010 г.

В борьбе за аудиторию

Вчера убил вечер, пытаясь заставить блоггер показывать математические формулы во всех браузерах. Ну, по-крайней мере, в Firefox, Opera и Chrome.
Гришино решение, конечно, впечатляет. Везде выглядит нормально, даже на смартфоне (он его, правда, по-другому называет). Но если заглянуть в код, то видно, что эта красота нерукотворная создана посредством шинкования пространства с помощью клеток таблицы. Это означает, что обратный процесс перевода в человеческий формат едва ли возможен. А теперь допустим появится через полгодика идеальный способ воспроизводить формулы в вебе. Тогда эта красота останется не у дел, не исправить ее, не использовать повторно будет невозможно. Так что такой подход, по-моему, даже хуже замены формул картинками. А полная масштабируемость, ну кому она особенно нужна? Картинки ведь тоже можно немного растянуть если очень хочется.
Так что я решил остаться на MathML. Фактически, это означает, что формулы у меня в блоге нормально выглядели только в FF. Вчера я нашел в и-нете проект под названием MathJax и он мне показался ничего. Синтаксис копирует MathML, заменяя родные <mrow...></mrow> таги на что-то типа <span class='mrow'...></span> и т.д.
Одна проблема, все работает, когда он установлен на том же сервере, что и страничка, на которой он используется. Дело оказалось в излишней подозрительности современных браузеров. При попытке на лету добыть нужные шрифты с http://www.mathjax.org они применяют same-origin security policy и не грузят шрифты. Утверждалось, что это исключительно проблемы FF, но вскрытие показало, что и современная Opera тоже не лучше. В Chrome, впрочем, все работает. Нужно просто вставить
<script src="http://www.mathjax.org/MathJax/MathJax.js">
    MathJax.Hub.Config({
    delayStartupUntil: "onload",
    jax: ["input/MathML", "input/TeX", "output/HTML-CSS"],
    extensions: ["tex2jax.js"],
    tex2jax: {
      inlineMath: [['$','$'], ['\\(','\\)']], 
      processEscapes: 1
    }
  });
</script>
куда-нибудь в голову страницы.
В результате я сделал так, чтобы в FF работал прежний скрипт LaTeXMathML.js, а в остальных браузерах MathJax. Но, как я уже сказал, в Опере рецепт не работал. Помогло просто тупое скачивание шрифтов с сайта MathJax и установка .otf версий в систему. Теперь, наверное, и в FF работал бы MathJax, но ведь не все захотят шрифты устанавливать.

PS. Забыл какую-нибудь тестовую формулу вставить. Вот
\[ \int_{-\infty}^{\infty} dx\int_{-\infty}^{\infty} dy \frac{x^2-y^2}{(1+x^2+y^2)^2}=? \]

4 комментария:

  1. Рома, в Chrome выглядит все очень круто. Круче чем все, что я видел. Тормозит чуть-чуть, но результат того стоит. В IE не работает вообще. Меня очень расстраивает тот факт, что в настоящий момент нет ни одного браузер, где бы правильно отображался TreeOfKnowledge. Я, кстати, формулы все храню в LaTeX, хотя полностью автоматическую трансляцию так и не доделал (все допиливаю напильником).

    Есть еще такая штука http://www.math.union.edu/~dpvc/jsMath/ . Только она тоже работает на сервере. Но как круто она поддерживает ТеХ! Смотри, например, коммутативную диаграмму: http://www.math.union.edu/~dpvc/jsMath/examples/TeXbook18y.html

    Кстати, для любителей MathML. Периодически читаю The n-Category Cafe. http://golem.ph.utexas.edu/category/ Понимаю мало чего, но несколько интересных вещей от туда узнал.

    ОтветитьУдалить
  2. Про jsMath я, конечно, знаю. Более того, утверждается, что MathJax является последователем jsMath-а. Но коммутативная диаграмма не отображается, я попробовал. Кстати, блоггер вырезает все символы ему не нравящиеся из комментариев, гад. В твоей ссылке, похоже, тильду вырезал. Ну-ка попробую:
    ~~~~~~~~~~~~~~~~~~ (куча тильд).

    IE - пошел он в ж... По определению браузер для домохозяек, а домохозяйки мой блог все равно читать не будут. Я мог бы с ним как с FF поступить, но он, похоже DOM не уважает никак. Разберусь, м.б. со временем, а пока - в ж.

    ОтветитьУдалить
  3. Подскажите кто нибудь как поставить MathJax на MediaWiki?
    чей то ничего не получается...

    ОтветитьУдалить
    Ответы
    1. В MediaWiki я не специалист, но что именно из вышеприведенного не получается?

      Удалить