LaTeX Рендеринг фигур | Java
Может случиться так, что вы захотите извлечь некоторый контент (рисунок, надпись, сюжет и т. д.) из файла LaTeX как отдельно визуализируемый фрагмент или “рисунок”, независимо от его места на странице выходного документа. . Например, иллюстрация для вашей публикации в Интернете. Наш API может помочь вам с этой задачей. Доступны два целевых формата — PNG и SVG. Точно так же, как при рендеринге математических формул LaTeX. Мы также должны отметить, что рендеринг фигур LaTeX является обобщением рендеринга математических формул LaTeX.
Как преобразовать фигуру LaTeX в PNG
Как и в случае с рендерингом формул, мы начнем с примера. Вот:
Задайте outputFile как java.nio.file.Path в существующей папке: например, Paths.get(outputDirectory, "text-and-formula.png") для PNG или Paths.get(outputDirectory, "text-and-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 LaTeX figure to PNG.
2// outputFile is a java.nio.file.Path in an existing output folder.
3PngFigureRendererOptions options = new PngFigureRendererOptions();
4options.setResolution(150);
5options.setPreamble("\\usepackage{pict2e}");
6options.setScale(3000); // 300%.
7options.setMargin(5); // Leave space around the figure.
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 PngFigureRenderer().render("\\setlength{\\unitlength}{0.8cm}\r\n" +
16 "\\begin{picture}(6,5)\r\n" +
17 "\\thicklines\r\n" +
18 "\\put(1,0.5){\\line(2,1){3}} \\put(4,2){\\line(-2,1){2}} \\put(2,3){\\line(-2,-5){1}} \\put(0.7,0.3){$A$} \\put(4.05,1.9){$B$} \\put(1.7,2.95){$C$}\r\n" +
19 "\\put(3.1,2.5){$a$} \\put(1.3,1.7){$b$} \\put(2.5,1.05){$c$} \\put(0.3,4){$F=\\sqrt{s(s-a)(s-b)(s-c)}$} \\put(3.5,0.4){$\\displaystyle s:=\\frac{a+b+c}{2}$}\r\n" +
20 "\\end{picture}", stream, options);
21 System.out.println(options.getErrorReport());
22 System.out.println("Size: " + size.getWidth() + "x" + size.getHeight());
23}Прежде всего, мы создаем экземпляр параметры рендеринга. Мы делаем это здесь вместе с указанием разрешения выходного изображения.
Далее уточняем преамбулу. Для рендеринга фигур LaTeX нет преамбулы по умолчанию, поэтому, если вы хотите, например, визуализировать некоторую графику, построенную с использованием пакета LaTeX pict2e, вам необходимо указать ее в преамбуле:
1\usepackage{pict2e}Затем мы указываем рендереру масштабировать результат на 300%. Примеры также задают отступ в 5 пунктов вокруг фигуры через setMargin(5). В PNG-примере используется разрешение 150 DPI.
Следующая опция определяет цвет фона. В отличие от рендеринга математических формул, мы не указываем цвет переднего плана, поскольку предполагаем, что цвета полностью находятся под контролем кода LaTeX. Собственно, как и цвет фона, так что это просто опция для удобства.
Пример направляет журнал рендеринга в ByteArrayOutputStream с помощью setLogStream(). Потоки журнала и изображения автоматически закрываются после рендеринга.
showTerminal() управляет выводом терминала в консоль. В примерах задано false; установите true, чтобы показывать вывод.
FigureRenderer.render() вызывается на экземпляре PngFigureRenderer или SvgFigureRenderer и возвращает размеры фигуры в пунктах в виде Size2D.
Метод принимает поток вывода изображения вторым аргументом. Пример открывает его в блоке try-with-resources, который закрывает поток после рендеринга.
Затем вызывается render() на экземпляре рендерера: первый аргумент — фигура LaTeX, второй — поток вывода изображения, третий — параметры рендеринга.
В последних строках примера выводятся два артефакта отрисовки фигуры — размер фигуры и краткий отчет об ошибке (в случае возникновения ошибок).
Вот результат рендеринга.

Это наиболее общий вариант использования функции рендеринга фигур LaTeX.
Как преобразовать фигуру LaTeX в SVG
Примерно таким же образом мы можем преобразовать фигуру LaTeX в формат SVG.
1// Render a LaTeX figure to SVG.
2// outputFile is a java.nio.file.Path in an existing output folder.
3SvgFigureRendererOptions options = new SvgFigureRendererOptions();
4options.setPreamble("\\usepackage{pict2e}");
5options.setScale(3000); // 300%.
6options.setMargin(5); // Leave space around the figure.
7options.setBackgroundColor(Color.WHITE);
8options.showTerminal(false);
9
10Size2D size;
11try (ByteArrayOutputStream log = new ByteArrayOutputStream();
12 OutputStream stream = Files.newOutputStream(outputFile)) {
13 options.setLogStream(log);
14 size = new SvgFigureRenderer().render("\\setlength{\\unitlength}{0.8cm}\r\n" +
15 "\\begin{picture}(6,5)\r\n" +
16 "\\thicklines\r\n" +
17 "\\put(1,0.5){\\line(2,1){3}} \\put(4,2){\\line(-2,1){2}} \\put(2,3){\\line(-2,-5){1}} \\put(0.7,0.3){$A$} \\put(4.05,1.9){$B$} \\put(1.7,2.95){$C$}\r\n" +
18 "\\put(3.1,2.5){$a$} \\put(1.3,1.7){$b$} \\put(2.5,1.05){$c$} \\put(0.3,4){$F=\\sqrt{s(s-a)(s-b)(s-c)}$} \\put(3.5,0.4){$\\displaystyle s:=\\frac{a+b+c}{2}$}\r\n" +
19 "\\end{picture}", stream, options);
20 System.out.println(options.getErrorReport());
21 System.out.println("Size: " + size.getWidth() + "x" + size.getHeight());
22}Отличия заключаются в следующем:
- Мы используем класс SvgFigureRendererOptions вместо PngFigureRendererOptions.
- Разрешение не указываем.
- Мы используем класс SvgFigureRenderer вместо PngFigureRenderer.
Вот результат: