Хоть интернет во многом создан усилиями физиков и математиков, путь математической формулы на его страницах был весьма долог и тернист. Только в последние годы можно сказать, что математические формулы прочно обосновались в Сети.
Дело в том, что в языке HTML, с помощью которого создаются веб-страницы, нет средств для изображения формул. Создателям сайтов приходилось как-то выкручиваться: использовать таблицы, индексы и другие обходные пути. Список подобных приемов приведен здесь, и резюмировать его можно так — путь труден, а результат жалок.
Частичным выходом из положения стала вставка формул в виде рисунков. Для их создания существует немало инструментов. Можно использовать визуальный редактор (например, Equation Editor из Microsoft Office) или преобразовать формулу, набранную в LaTeX, с помощью онлайнового конвертера. Наконец, есть Google Docs, редактор формул которого реализует обе эти возможности. Но подбирать размеры и позиционировать рисунок приходилось веб-мастеру. А значит, об интерактивности сайта оставалось только мечтать. Для этого нужен был язык, который позволил бы посетителю сайта самому набирать формулы.
Таких языков на рубеже 2000-х годов существовало два: LaTeX — для визуального представления формул, и MathML — для описания их структуры. К тому времени LaTeX уже много лет использовался для подготовки математических текстов, поэтому неудивительно, что именно его стали использовать для сетевой математики. Одной из первых попыток такого рода стала программа LaTeXML. Написанная на Perl, она обрабатывает документ LaTeX и выводит результат в файл XML. Затем ее постпроцессор конвертирует полученный XML в другие текстовые форматы, например, в HTML и XHTML (а теперь — и в MathML) или в рисунки. Результаты работы LaTeXML можно посмотреть здесь.
Сравнение записи формулы в MathML и LaTeX
Однако это не решало проблем с интерактивностью. Для этого программа-обработчик должна была выполняться непосредственно в браузере. Первым на сторону клиента перешел jsMath Дэвида Сервона (Davide Cervone). Он преобразовывал формулы, набранные пользователем на языке LaTeX, в изображения, выполненные средствами HTML и CSS. Так появилась возможность создавать по-настоящему интерактивные математические веб-страницы.
Первый шаг был сделан, но проблем оставалось еще много. Нужно было добиться, чтобы программа работала во всех браузерах (начиная с ветеранов, вроде Internet Explorer 6) и наладить экспорт формул в различные форматы, в первую очередь, в MathML. Решить эти задачи призван был проект MathJax, начатый в 2009 г. под руководством Американского математического общества при поддержке Американского института физики и портала Stack Exchange. Созданная в результате библиотека MathJax работает во всех браузерах и умеет сохранять формулы в HTML+CSS, SVG и MathML. Пользователю не нужно устанавливать плагины или шрифты — теперь он просто работает.
Ввод формулы в MathJax…
и ее отображение
Если jsMath оживил математику в интернете, то MathJax "выпустил джинна из бутылки", позволив за короткое время реализовать массу замечательных идей. Хотите получить математическое образование в Сети? Загляните сюда и сюда. Нужно пообщаться с коллегами? Извольте. Создать публикации с «живыми» кодом и формулами? Вот и вот. Интересует система компьютерной алгебры на Android? Почему бы и нет. Чат с математической поддержкой? Легко. Создать блог, чтобы рассказать о своей работе? Пожалуйста. А еще MathJax использует Wikipedia, бесплатный архив электронных публикаций arXiv и Общероссийский математический портал. Так MathJax стал де-факто стандартом для отображения формул на веб-страницах.
Значит ли это, что все проблемы остались в прошлом? Нет, конечно. Так, Академия Ха́на, старающаяся сделать качественное образование доступным каждому, нуждается в быстром отображении формул на старых и слабых компьютерах. Для этого они разрабатывают собственную библиотеку KaTeX, которая в перспективе должна заменить MathJax. Пока KaTeX не может сравниться с MathJax по функциональности, предстоит еще решить проблемы с работой на старых браузерах, зато она существенно быстрее MathJax. Те же задачи решает библиотека jqMath, которая также занимает меньше места и работает быстрее MathJax, но хуже последней поддерживает MathML.
Мы не зря так часто упоминаем здесь о MathML. Он необходим для организации автоматической обработки формул. Например, если вам понадобится организовать поиск по формулам, то MathML — как раз то, что нужно.
Создавать формулы непосредственно с помощью MathML неудобно. Для этого есть визуальный редактор Firemath, выполненный в виде расширения браузера Firefox или конвертер из TeX в MathML — TeXZilla, также доступный в виде расширения Firefox. Ну, и MathJax, конечно.
Дмитрий Храмов
Комментарии
Страницы
Отличная статья, спасибо автору.
Да, интересно.
LaTex, насколько я помню, - это производный продукт от исходного TeX...
Статья хорошая и тема актуальная, но мне в ней не хватило целостности и системности освещения вопроса. Нужно, как мне кажется, отделить временные вещи от майнстрима и расставить приоритеты и тенденции.
Зачем так сурово? Не учебник, поди. Целеуказание даёт. Кто заинтересуется -- освоит.
"LaTex, насколько я помню, - это производный продукт от исходного TeX..."
LaTeX набор макросов для системы компьютерной верстки TeX. Исходный набор макросов — plain TeX, разработанный самим Кнутом, — сейчас практически не используется. Так что язык, с помощью которого набраны формулы, — это именно LaTeX.
"...но мне в ней не хватило целостности и системности освещения вопроса. Нужно, как мне кажется, отделить временные вещи от майнстрима и расставить приоритеты и тенденции."
Очень не хотелось растекаться мыслею по древу и писать текст ради текста. Если у вас возникли вопросы, я охотно на них отвечу. Пока могу только предложить сходить по указанным в статье ссылкам и повторю выводы вкратце:
1. Если формул мало — можно использовать средства HTML.
2. Если нужно набирать формулы руками, то:
- серверное решение: LaTeXML.
- клиентское решение: MathJax - на сегодняшний день это лидер.
3. Если формулы нужно парсить, то: MathML.
Нет, я не ругаюсь:) Статья вполне интересная... Просто, я, как философ, применил бы исторический метод изложения:) Начал бы с TeX, а закончил бы HTML5 и рассказал бы про контейнер <math>...
Нет проблем:) Мое предложение насчет вопросов остается в силе.
Вряд ли можно считать лидером временное решение на основе JS, призванное просто заштопать временные недотяжки браузеров до полноценной поддержки стандарта HTML5. Опять же, не воспринимайте как критику. Просто мне кажется, что логика развития всей технологии сегодня строится на развитии платформы HTML5 как базового концепта. Поддержка математики в HTML5 предусмотрена - это главное. Поэтому имеет значение как раз именно это. А браузеры подтянуться:) очень скоро
"Вряд ли можно считать лидером временное решение на основе JS."
Можете, конечно, и не считать, но даже на страницах, посвященных HTML5, например этой, формулы отображаются с помощью MathJax. К сожалению, наблюдая за ситуацией вот уже почти 20 лет, не вижу пока ничего кроме "временных решений". И в ближайшие несколько лет ситуация не изменится (скорее даже наоборот).
HTML5 поддерживает тег <math>. И все. Включение же MathML-формул проблемы не решает, т.к. ручками ее не набрать. Мне бы хотелось чего-то вроде "один HTML5 и все" (ведь оформляю же я все тексты в LaTeXe), но пока не получается.
Аффигеть, какая "полноценная" "поддержка браузерами!":-) До следующей версии спецификации HTML ждать будете. Так с разработкой игр было, так Flash заранее хоронили - думали, HTML5 заменит. Ага, як жа ж, зараз жа ...
Страницы