KaTeX
KaTeX — это библиотека JavaScript с открытым исходным кодом, предназначенная для быстрого отображения математических формул в веб-браузерах. Разработанная компанией Khan Academy как альтернатива более медленному MathJax, KaTeX отличается высокой скоростью рендеринга и строгим соответствием стандарту LaTeX. Основное назначение библиотеки — преобразование строк TeX-разметки в статичный HTML и CSS, что позволяет встраивать математические выражения в веб-страницы без использования изображений или Flash.
История
Разработка KaTeX началась в 2013 году в недрах некоммерческой образовательной организации Khan Academy. Основной причиной создания собственного решения стали проблемы с производительностью MathJax на платформе Khan Academy, где математические формулы присутствуют практически на каждой странице. Первая публичная версия (v0.1.0) была выпущена в 2014 году. В отличие от MathJax, который использует динамическую подгрузку шрифтов и сложные алгоритмы разметки, KaTeX с самого начала проектировался как «компилятор» TeX в HTML, работающий синхронно и без дополнительных запросов к серверу.
Ключевые вехи развития:
- 2015 год — выход версии 0.6.0, в которой была добавлена поддержка большинства команд LaTeX, включая окружения
align,matrixиcases. - 2017 год — версия 0.9.0 с новым парсером, полностью переписанным на TypeScript, что повысило стабильность и упростило поддержку.
- 2020 год — выпуск KaTeX 0.12.0, в котором появилась поддержка Unicode-математических символов и улучшена работа с макросами.
- 2023 год — стабильная версия 0.16.x, включающая поддержку расширений
mhchem(химические формулы) иphysics(физическая нотация).
Архитектура и принцип работы
KaTeX состоит из двух основных компонентов: парсера и рендерера. Парсер анализирует строку TeX-кода и строит абстрактное синтаксическое дерево (AST). Рендерер преобразует это дерево в HTML-элементы с CSS-классами, которые затем стилизуются встроенными шрифтами.
Этапы обработки формулы:
- Лексический анализ — строка разбивается на токены: команды (
\frac,\sqrt), символы, скобки, пробелы. - Синтаксический анализ — на основе грамматики TeX строится дерево операций, учитывающее приоритеты и вложенность (например, дробь внутри корня).
- Генерация HTML — для каждого узла дерева создаётся соответствующая HTML-разметка:
<span>для обычных символов,<mo>для операторов,<mi>для переменных и т.д. - Применение CSS — каждый HTML-элемент получает классы, соответствующие его типу и позиции (числитель, знаменатель, индекс). Шрифты (KaTeX_Main, KaTeX_Math, KaTeX_Size1-4) подгружаются как веб-шрифты.
Отличия от MathJax:
- Скорость: KaTeX рендерит формулы за миллисекунды, тогда как MathJax может занимать сотни миллисекунд на сложные выражения.
- Синхронность: KaTeX не требует асинхронных запросов — результат готов сразу после вызова функции.
- Ограничения: KaTeX поддерживает не все возможности LaTeX (например, нет поддержки пакетов
tikzилиpgfplots), но покрывает 95% типичных математических конструкций.
Классификация поддерживаемых конструкций
KaTeX поддерживает практически все стандартные команды LaTeX, используемые в математических текстах. Основные категории:
### Арифметические и алгебраические выражения
- Основные операции:
+,-,\times,\div,\cdot,\pm - Дроби:
\frac{a}{b},\dfrac,\tfrac - Корни:
\sqrt{x},\sqrt[3]{x} - Степени и индексы:
x^2,x_i,x_{ij}
### Интегралы и суммы
- Интегралы:
\int,\iint,\iiint,\oint - Суммы и произведения:
\sum,\prod,\coprod - Пределы:
\lim,\lim_{x \to 0}
### Матрицы и системы
- Окружения:
matrix,pmatrix,bmatrix,vmatrix - Системы уравнений:
\begin{cases} ... \end{cases} - Многострочные формулы:
\begin{aligned},\begin{gathered}
### Греческие буквы и символы
- Все буквы:
\alpha,\beta,\Gamma,\Delta - Специальные символы:
\infty,\partial,\nabla,\hbar
### Стрелки и отношения
- Стрелки:
\rightarrow,\Rightarrow,\leftrightarrow,\mapsto - Отношения:
\leq,\geq,\neq,\approx,\equiv
### Диакритические знаки
- Шляпка:
\hat{x},\widehat{xy} - Тильда:
\tilde{x},\widetilde{xy} - Вектор:
\vec{x},\overrightarrow{AB}
### Расширения (опциональные)
- mhchem — химические формулы:
\ce{H2O},\ce{CO2},\ce{NaCl} - physics — физическая нотация:
\bra{\psi},\ket{\phi},\abs{x}
Применение
KaTeX широко используется в веб-проектах, где требуется быстрый рендеринг математики. Основные сценарии:
Образовательные платформы
- Khan Academy — все математические и естественнонаучные курсы используют KaTeX для отображения формул.
- Brilliant.org — интерактивные задачи и объяснения.
- Desmos — графический калькулятор, где формулы отображаются в реальном времени.
Системы управления обучением (LMS)
- Moodle, Canvas, Blackboard — через плагины или встроенную поддержку.
Блоги и документация
- GitHub — в Markdown-файлах репозиториев KaTeX используется для отображения формул (через
$...$или$$...$$). - Jupyter Notebook — в ячейках Markdown.
- WordPress — через плагины (например, KaTeX для WordPress).
Научные публикации
- arXiv — препринты, где KaTeX используется для предпросмотра формул.
- Overleaf — онлайн-редактор LaTeX, частично использующий KaTeX для мгновенного предпросмотра.
Интеграция
KaTeX может быть подключён к веб-странице несколькими способами:
CDN (Content Delivery Network)
``html <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/katex.min.css"> <script src="https://cdn.jsdelivr.net/npm/katex@0.16.10/dist/katex.min.js"></script> ``
NPM (Node Package Manager)
``bash npm install katex ` После установки библиотека импортируется в JavaScript-код: `javascript import katex from 'katex'; ``
Автоматический рендеринг
Для обработки всех формул на странице используется функция renderMathInElement: ``javascript katex.renderMathInElement(document.body, { delimiters: [ {left: '$$', right: '$$', display: true}, {left: '$', right: '$', display: false} ] }); ``
Преимущества и недостатки
Преимущества:
- Высокая скорость — самый быстрый рендерер математики для веба.
- Независимость от сервера — все вычисления выполняются на стороне клиента.
- Строгая типографика — формулы выглядят так же, как в профессиональной вёрстке LaTeX.
- Маленький размер — около 50 КБ в сжатом виде (без шрифтов).
- Активное сообщество — регулярные обновления и исправления.
Недостатки:
- Ограниченная поддержка LaTeX — отсутствуют пакеты для рисования графиков (
tikz), сложные макросы и некоторые окружения. - Отсутствие интерактивности — KaTeX не позволяет анимировать или динамически изменять формулы (в отличие от MathJax с его SVG-режимом).
- Проблемы с Unicode — некоторые редкие символы могут не отображаться корректно.
Интересные факты
- Название «KaTeX» происходит от слов «Khan Academy» и «TeX».
- KaTeX написан на TypeScript, что обеспечивает строгую типизацию и удобство рефакторинга.
- В 2016 году KaTeX выиграл грант от Фонда Шаттлворта (Shuttleworth Foundation) на развитие.
- Библиотека не использует jQuery или другие зависимости — полностью самодостаточна.
- KaTeX поддерживает рендеринг формул не только в HTML, но и в MathML (через опцию
output: 'mathml').
Сравнение с аналогами
| Характеристика | KaTeX | MathJax | AsciiMath |
|---|---|---|---|
| Скорость рендеринга | <10 мс | 50-500 мс | <20 мс |
| Поддержка LaTeX | 95% | 99% | 30% |
| Размер (сжатый) | ~50 КБ | ~300 КБ | ~20 КБ |
| Поддержка SVG | Нет | Да | Нет |
| Интерактивность | Нет | Да (SVG) | Нет |
| Лицензия | MIT | Apache 2.0 | MIT |
Источники
- Официальная документация KaTeX — katex.org
- Репозиторий на GitHub — github.com/KaTeX/KaTeX
- Статья «KaTeX: The Fastest Math Rendering Library» — блог Khan Academy (2014)
- Сравнение производительности MathJax vs KaTeX — Stack Overflow (2016)
- Спецификация TeX — Дональд Кнут, «The TeXbook»
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →