Рендеринг математических формул 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.
Вы также можете ознакомиться с бесплатным веб-приложением, созданным на основе функции, реализованной в 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}Отличия заключаются в следующем:
- Мы используем класс SvgMathRendererOptions вместо PngMathRendererOptions.
- Мы не указываем разрешение.
- Мы используем класс SvgMathRenderer вместо PngMathRenderer.
Вот результат:
Вы также можете ознакомиться с бесплатным веб-приложением, созданным на основе функции, реализованной в Aspose.TeX for .NET API.
