Время от времени возникает задача нарисовать картинку с некой математической формулой . Есть больше одного решения этой проблемы. Сегодня мне хотелось бы рассказать о решении, которое мне лично кажется наиболее простым и при этом достаточно универсальным. Оно заключается в использовании штуки под названием AsciiMath.

AsciiMath является языком для описания формул, а еще JavaScript-библиотекой для рендеринга формул в браузере. Также поддержка синтаксиса AsciiMath реализована в PlantUML . Реализация эта весьма продуманная. В частности, к ней можно обращаться через CLI, что наверняка пригодится при разработке собственных программ или скриптов.

Давайте же попробуем AsciiMath в действии. Качаем plantuml.1.2019.4.jar отсюда , а также файл plantuml-jlatexmath.zip по ссылке внизу этой страницы . К моменту, когда вы будете читать эти строки, номера версий и имена файлов могут измениться, но думаю, вы разберетесь.

Далее говорим:

cd ~ / bin /
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 :

#!/bin/sh

set -e
java -jar ~ / bin / asciimath-files / plantuml.1.2019.4.jar $1

У меня каталог ~/bin прописан в $PATH . Если у вас это не так, не забудьте его прописать.

Теперь создадим файл test.puml, например, такой:

@startmath
sum_(i=1)^n i^3=((n(n+1))/2)^2
@endmath

Говорим asciimath test.puml и открываем test.png. Должно получиться:

Пример формулы, нарисованной в AsciiMath

Интересно, что вы можете использовать и синтаксис LaTeX , но субъективно он не так удобен:

@startlatex
sum_{i=1}^n i^3=bigg ({dfrac{n(n+1)}{2}} bigg)^2
@endlatex

Синтаксис AsciiMath, конечно же, не ограничен скобочками, дробями и возведением в степень. С полным описанием синтаксиса вы можете ознакомиться на сайте asciimath.org .

EnglishRussianUkrainian