Рендеринг математических формул LaTeX | Java

Как преобразовать математическую формулу LaTeX в PNG

Фактически, самый простой способ продемонстрировать функцию рендеринга математической формулы LaTeX — начать с примера. Вот:

Задайте outputFile как java.nio.file.Path в существующей папке: например, Paths.get(outputDirectory, "math-formula.png") для PNG или Paths.get(outputDirectory, "math-formula.svg") для SVG. Импортируйте используемые классы рендереров, параметров и Size2D из Aspose.TeX, а также java.awt.Color, java.io.ByteArrayOutputStream, java.io.OutputStream, java.nio.file.Files, java.nio.file.Path, java.nio.file.Paths. Вызывающий метод должен обрабатывать или объявлять исключения. Примените лицензию согласно руководству по лицензированию, чтобы избежать ограничений ознакомительной версии.

 1// Render a highlighted LaTeX math formula to PNG.
 2// outputFile is a java.nio.file.Path in an existing output folder.
 3PngMathRendererOptions options = new PngMathRendererOptions();
 4options.setResolution(150);
 5options.setPreamble("\\usepackage{amsmath}\n\\usepackage{amsfonts}\n"
 6        + "\\usepackage{amssymb}\n\\usepackage{color}");
 7options.setScale(3000); // 300%.
 8options.setTextColor(Color.BLACK);
 9options.setBackgroundColor(Color.WHITE);
10options.showTerminal(false);
11
12Size2D size;
13try (ByteArrayOutputStream log = new ByteArrayOutputStream();
14        OutputStream stream = Files.newOutputStream(outputFile)) {
15    options.setLogStream(log);
16    size = new PngMathRenderer().render("\\begin{equation*}\n"
17            + "e^x = x^{\\color{red}0} + x^{\\color{red}1} + \\frac{x^{\\color{red}2}}{2}"
18            + " + \\frac{x^{\\color{red}3}}{6} + \\cdots = \\sum_{n\\geq 0} \\frac{x^{\\color{red}n}}{n!}\n"
19            + "\\end{equation*}", stream, options);
20    System.out.println(options.getErrorReport());
21    System.out.println("Size: " + size.getWidth() + "x" + size.getHeight());
22}

Давайте перейдем к деталям. Прежде всего, мы создаем экземпляр параметры рендеринга, аналогичный набору текста TeX/LaTeX. Мы делаем это здесь, одновременно указывая разрешение выходного изображения.

Далее уточняем преамбулу. Преамбула по умолчанию:

1\usepackage{amsmath}
2\usepackage{amsfonts}
3\usepackage{amssymb}

который обеспечивает немного более продвинутую поддержку математических формул, чем базовый LaTeX. Например, вы можете добавить пакет color, если хотите использовать в формуле собственную подсветку, как мы показали в примере кода.

Затем мы указываем рендереру масштабировать результат на 300%.

Два параметра задают цвета переднего плана и фона. Части формулы без пользовательской подсветки отображаются цветом, заданным через setTextColor().

Пример направляет журнал рендеринга в ByteArrayOutputStream с помощью setLogStream(). Потоки журнала и изображения автоматически закрываются после рендеринга.

showTerminal() управляет выводом терминала в консоль. В примерах задано false; установите true, чтобы показывать вывод.

MathRenderer.render() вызывается на экземпляре PngMathRenderer или SvgMathRenderer и возвращает размеры формулы в пунктах в виде Size2D.

Метод принимает поток вывода изображения вторым аргументом. Пример открывает его в блоке try-with-resources, который закрывает поток после рендеринга.

Затем вызывается render() на экземпляре рендерера: первый аргумент — формула LaTeX, второй — поток вывода изображения, третий — параметры рендеринга.

В последних строках примера выводятся два артефакта отрисовки математической формулы — размер формулы и краткий отчет об ошибке (на случай, если были ошибки).

Вот результат рендеринга.

Рендеринг рисунков LaTeX в PNG

Это наиболее общий вариант использования рендеринга математической формулы LaTeX.

Вы также можете ознакомиться с бесплатным веб-приложением, созданным на основе функции, реализованной в API Aspose.TeX for .NET. Здесь — страница версии Java.

Как преобразовать математическую формулу LaTeX в SVG

Практически таким же образом мы можем преобразовать математическую формулу LaTeX в формат SVG.

 1// Render a highlighted LaTeX math formula to SVG.
 2// outputFile is a java.nio.file.Path in an existing output folder.
 3SvgMathRendererOptions options = new SvgMathRendererOptions();
 4options.setPreamble("\\usepackage{amsmath}\n\\usepackage{amsfonts}\n"
 5        + "\\usepackage{amssymb}\n\\usepackage{color}");
 6options.setScale(3000); // 300%.
 7options.setTextColor(Color.BLACK);
 8options.setBackgroundColor(Color.WHITE);
 9options.showTerminal(false);
10
11Size2D size;
12try (ByteArrayOutputStream log = new ByteArrayOutputStream();
13        OutputStream stream = Files.newOutputStream(outputFile)) {
14    options.setLogStream(log);
15    size = new SvgMathRenderer().render("\\begin{equation*}\n"
16            + "e^x = x^{\\color{red}0} + x^{\\color{red}1} + \\frac{x^{\\color{red}2}}{2}"
17            + " + \\frac{x^{\\color{red}3}}{6} + \\cdots = \\sum_{n\\geq 0} \\frac{x^{\\color{red}n}}{n!}\n"
18            + "\\end{equation*}", stream, options);
19    System.out.println(options.getErrorReport());
20    System.out.println("Size: " + size.getWidth() + "x" + size.getHeight());
21}

Отличия заключаются в следующем:

Вот результат:

Рендеринг математических формул LaTeX в SVG

Вы также можете ознакомиться с бесплатным веб-приложением, созданным на основе функции, реализованной в Aspose.TeX for .NET API.