Renderização de figuras de LaTeX | Aspose.TeX para Python
Em determinadas situações, pode ser necessário extrair conteúdo específico de um arquivo de LaTeX como uma peça renderizada independente, comumente referida como uma figura, sem nenhuma conexão com o layout da página. Isso pode ser útil, por exemplo, ao criar ilustrações para uma publicação on -line. Nossa API permite que você faça isso. Os formatos de destino para renderizar os números são PNG e SVG, assim como com o recurso de renderização de fórmula matemática do LATEX. Vale a pena notar que Renderização de figuras de LaTeX é um recurso mais geral em comparação com renderização de fórmula matemática do LATEX.
Renderizando uma figura de LaTeX para png
Se necessário, primeiro dê uma olhada na seção de referência da API para este tópico. Semelhante à renderização da fórmula, começaremos com um exemplo. Aqui está:
1# Create rendering options setting the image resolution to 150 dpi.
2options = PngFigureRendererOptions()
3options.resolution = 150 # Specify the preamble.
4options.preamble = r"\usepackage{pict2e}"
5# Specify the scaling factor 300%.
6options.scale = 3000
7# Specify the background color.
8options.background_color = Color.white
9# Specify the output stream for the log file.
10options.log_stream = BytesIO()
11# Specify whether to show the terminal output on the console or not.
12options.show_terminal = True
13
14# Create the output stream for the figure image.
15with open(path.join(Util.output_directory, "text-and-formula.png"), "wb") as stream:
16 # Run rendering.
17 size = PngFigureRenderer().render(r"""\setlength{\unitlength}{0.8cm}
18\begin{picture}(6,5)
19\thicklines
20\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$}
21\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}$}
22\end{picture}""", stream, options)
23
24# Show other results.
25print(options.error_report)
26print()
27print(f"Size: {size.width}x{size.height}")
Para começar, criamos uma instância da classe Opções do renderizador de figuras do LATEX, onde especificamos simultaneamente a resolução da imagem de saída.
Em seguida, precisamos especificar o preâmbulo. Ao contrário da renderização de fórmula matemática do LATEX, não há preâmbulo padrão para renderização de figuras de LaTeX. Portanto, se você está planejando renderizar gráficos criados usando o pacote pict2e
LATEX, por exemplo, precisará especificá -lo no preâmbulo:
1\usepackage{pict2e}
Em seguida, instruímos o renderizador a escalar a saída em 300%.
A próxima opção determina a cor do fundo. Ao contrário da renderização da fórmula matemática, não precisamos especificar uma cor de primeiro plano, pois assumimos que as cores são totalmente controladas pelo código do LATEX. Da mesma forma, a cor do plano de fundo também é controlada pelo código do LATEX; portanto, essa opção é simplesmente fornecida por conveniência.
A linha a seguir no exemplo pode não ser particularmente significativa. É simplesmente destinado a demonstrar que você tem a opção de direcionar a saída de log para um fluxo específico.
A opção final, showMerminal
, permite controlar se a saída do terminal deve ser exibida no console.
O método responsável por renderizar a figura é FiguureRender.render(). Ele retorna o tamanho da figura em pontos.
O método aceita um fluxo como o segundo argumento, que é o fluxo em que a imagem será gravada. Criamos o fluxo na próxima linha.
Por fim, invocamos o próprio método figuureRender.render()
, passando as opções como o terceiro argumento. O código do LATEX da figura é fornecido como o primeiro argumento.
As últimas linhas do exemplo exibem duas informações relacionadas à renderização de figuras - o tamanho da figura e um breve relatório de erro (se houver algum erro).
Aqui está o resultado da renderização.
Isso representa o caso de uso mais geral para o recurso de renderização de figuras **.
Renderizando uma figura de LaTeX para SVG
Da mesma forma, também podemos renderizar uma figura de LaTeX no formato SVG.
1# Create rendering options.
2options = SvgFigureRendererOptions()
3# Specify the preamble.
4options.preamble = r"\usepackage{pict2e}"
5# Specify the scaling factor 300%.
6options.scale = 3000
7# Specify the background color.
8options.background_color = Color.white
9# Specify the output stream for the log file.
10options.log_stream = BytesIO()
11# Specify whether to show the terminal output on the console or not.
12options.show_terminal = True
13
14# Create the output stream for the figure image.
15with open(path.join(Util.output_directory, "text-and-formula.svg"), "wb") as stream:
16 # Run rendering.
17 size = SvgFigureRenderer().render(r"""\setlength{\unitlength}{0.8cm}
18\begin{picture}(6,5)
19\thicklines
20\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$}
21\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}$}
22\end{picture}""", stream, options)
23
24# Show other results.
25print(options.error_report)
26print()
27print(f"Size: {size.width}x{size.height}")
As diferenças são:
- Em vez de usar a classe pngfigureReRoptions, utilizamos a classe svgfigureReRoptions.
- Não precisamos especificar a resolução.
- Em vez de usar a classe pngfigurerenderer, utilizamos a classe svgfigurerenderer.
Aqui está o resultado: