Открыть сервис

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-классами, которые затем стилизуются встроенными шрифтами.

Этапы обработки формулы:

  1. Лексический анализ — строка разбивается на токены: команды (\frac, \sqrt), символы, скобки, пробелы.
  2. Синтаксический анализ — на основе грамматики TeX строится дерево операций, учитывающее приоритеты и вложенность (например, дробь внутри корня).
  3. Генерация HTML — для каждого узла дерева создаётся соответствующая HTML-разметка: <span> для обычных символов, <mo> для операторов, <mi> для переменных и т.д.
  4. Применение 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)

Блоги и документация

  • 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').

Сравнение с аналогами

ХарактеристикаKaTeXMathJaxAsciiMath
Скорость рендеринга<10 мс50-500 мс<20 мс
Поддержка LaTeX95%99%30%
Размер (сжатый)~50 КБ~300 КБ~20 КБ
Поддержка SVGНетДаНет
ИнтерактивностьНетДа (SVG)Нет
ЛицензияMITApache 2.0MIT

Источники

  1. Официальная документация KaTeX — katex.org
  2. Репозиторий на GitHub — github.com/KaTeX/KaTeX
  3. Статья «KaTeX: The Fastest Math Rendering Library» — блог Khan Academy (2014)
  4. Сравнение производительности MathJax vs KaTeX — Stack Overflow (2016)
  5. Спецификация TeX — Дональд Кнут, «The TeXbook»

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →