Візуалізація фігур LaTeX | Aspose.TeX для 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, тому, якщо ви хочете, наприклад, відобразити деяку графіку, намальовану за допомогою пакета pict2e LaTeX, вам потрібно вказати це у преамбулі:
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 rendering figure.
Як відобразити фігуру 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.
Ось результат: