Рендерим математические формулы с помощью AsciiMath
6 мая 2019
Время от времени возникает задача нарисовать картинку с некой математической формулой. Есть больше одного решения этой проблемы. Сегодня мне хотелось бы рассказать о решении, которое мне лично кажется наиболее простым и при этом достаточно универсальным. Оно заключается в использовании штуки под названием AsciiMath.
AsciiMath является языком для описания формул, а еще JavaScript-библиотекой для рендеринга формул в браузере. Также поддержка синтаксиса AsciiMath реализована в PlantUML. Реализация эта весьма продуманная. В частности, к ней можно обращаться через CLI, что наверняка пригодится при разработке собственных программ или скриптов.
Давайте же попробуем AsciiMath в действии. Качаем plantuml.1.2019.4.jar
отсюда, а также файл plantuml-jlatexmath.zip
по ссылке внизу этой страницы. К моменту, когда вы будете читать эти строки, номера версий и имена файлов могут измениться, но думаю, вы разберетесь.
Далее говорим:
mkdir asciimath-files
cd asciimath-files
cp ~/Downloads/plantuml.1.2019.4.jar ./
cp ~/Downloads/plantuml-jlatexmath.zip ./
unzip plantuml-jlatexmath.zip
rm plantuml-jlatexmath.zip
Суммарный размер jar-файлов составил 12 Мб.
Также создаем скрипт ~/bin/asciimath и даем ему +x
:
set -e
java -jar ~/bin/asciimath-files/plantuml.1.2019.4.jar $1
У меня каталог ~/bin прописан в $PATH
. Если у вас это не так, не забудьте его прописать.
Теперь создадим файл test.puml, например, такой:
sum_(i=1)^n i^3=((n(n+1))/2)^2
@endmath
Говорим asciimath test.puml
и открываем test.png. Должно получиться:
Интересно, что вы можете использовать и синтаксис LaTeX, но субъективно он не так удобен:
\sum_{i=1}^n i^3=\bigg ({\dfrac{n(n+1)}{2}} \bigg)^2
@endlatex
Синтаксис AsciiMath, конечно же, не ограничен скобочками, дробями и возведением в степень. С полным описанием синтаксиса вы можете ознакомиться на сайте asciimath.org.
Метки: Разработка.
Вы можете прислать свой комментарий мне на почту, или воспользоваться комментариями в Telegram-группе.