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.

Figura de LaTeX renderização para png

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:

Aqui está o resultado:

Figura de LaTeX renderização para SVG