Renderização de figuras de LaTeX | Aspose.TeX para Java
Pode acontecer que você queira extrair algum conteúdo (um desenho, uma escrita, um enredo etc.) de um arquivo de LaTeX como uma peça renderizada separadamente, ou a “figure”, independentemente de seu local em uma página de documento de saída. Uma ilustração para sua publicação na Internet, por exemplo, é o caso. Nossa API pode ajudá -lo com a tarefa. Existem dois formatos de destino disponíveis - PNG e SVG. Assim como na renderização da fórmula matemática do LaTeX. Também devemos observar que Renderização de figuras de LaTeX é uma generalização da renderização de fórmula matemática do LATEX.
Como renderizar uma figura de LaTeX para png
E, como na renderização de fórmula, começaremos com um exemplo. Aqui está:
Defina outputFile como um java.nio.file.Path em uma pasta existente, por exemplo Paths.get(outputDirectory, "text-and-formula.png") para PNG ou Paths.get(outputDirectory, "text-and-formula.svg") para SVG. Importe as classes de renderizador, opções e Size2D de Aspose.TeX usadas, além de java.awt.Color, java.io.ByteArrayOutputStream, java.io.OutputStream, java.nio.file.Files, java.nio.file.Path, java.nio.file.Paths. O método que faz a chamada deve tratar ou declarar as exceções. Aplique uma licença conforme o
guia de licenciamento para evitar as restrições de avaliação.
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}Primeiro de tudo, criamos uma instância de renderização. Fazemos isso aqui, além de especificar a resolução da imagem de saída.
Em seguida, especificamos o preâmbulo. Não há preâmbulo padrão para renderização de figuras de LaTeX; portanto, se você quiser, por exemplo, renderizar alguns gráficos plotados usando o pacote pict2e LATEX, você precisa especificá -lo no preâmbulo:
1\usepackage{pict2e}Em seguida, instruímos o renderizador a escalar a saída em 300%. Os exemplos também definem uma margem de 5 pontos com setMargin(5) ao redor da figura. O exemplo PNG utiliza 150 DPI.
A próxima opção define a cor de fundo. Ao contrário da renderização da fórmula matemática, não especificamos uma cor de primeiro plano, pois assumimos que as cores estão inteiramente sob o controle do código de LaTeX. De fato, o mesmo acontece com a cor de fundo, então essa é apenas uma opção de conveniência.
O exemplo direciona os logs de renderização a um ByteArrayOutputStream com setLogStream(). Os fluxos do log e da imagem são fechados automaticamente após a renderização.
showTerminal() controla a saída do terminal no console. Os exemplos usam false; defina true para exibi-la.
FigureRenderer.render() é chamado em uma instância de PngFigureRenderer ou SvgFigureRenderer e retorna as dimensões da figura em pontos como um Size2D.
O método aceita o fluxo de saída da imagem como segundo argumento. O exemplo o abre em um bloco try-with-resources, que o fecha após a renderização.
Por fim, chamamos render() na instância do renderizador: a figura LaTeX é o primeiro argumento, o fluxo da imagem o segundo e as opções de renderização o terceiro.
As últimas linhas do exemplo imprimem dois artefatos de renderização de figuras - o tamanho da figura e o breve relatório de erro (caso haja erros).
Aqui está o resultado da renderização.

Este é o caso de uso mais geral para o recurso de renderização de figuras .
Como renderizar uma figura de LaTeX para SVG
Da mesma maneira, podemos renderizar uma figura de LaTeX ao formato 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}As diferenças são:
- Utilizamos a classe SvgFigureRendererOptions em vez de PngFigureRendererOptions.
- Não especificamos a resolução.
- Usamos a classe SvgFigureRenderer em vez de PngFigureRenderer.
Aqui está o resultado: