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á:
1from aspose.tex.features import *
2from aspose.pydrawing import Color
3from aspose.tex.io import *
4from aspose.tex.presentation.xps import *
5from util import Util
6from io import BytesIO
7from os import path
8###############################################
9###### Class and Method declaration here ######
10###############################################
11
12# Create rendering options setting the image resolution to 150 dpi.
13options = PngFigureRendererOptions()
14options.resolution = 150 # Specify the preamble.
15options.preamble = r"\usepackage{pict2e}"
16# Specify the scaling factor 300%.
17options.scale = 3000
18# Specify the background color.
19options.background_color = Color.white
20# Specify the output stream for the log file.
21options.log_stream = BytesIO()
22# Specify whether to show the terminal output on the console or not.
23options.show_terminal = True
24
25# Create the output stream for the figure image.
26with open(path.join(Util.output_directory, "text-and-formula.png"), "wb") as stream:
27 # Run rendering.
28 size = PngFigureRenderer().render(r"""\setlength{\unitlength}{0.8cm}
29\begin{picture}(6,5)
30\thicklines
31\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$}
32\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}$}
33\end{picture}""", stream, options)
34
35# Show other results.
36print(options.error_report)
37print()
38print(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.
1from aspose.tex.features import *
2from aspose.pydrawing import Color
3from util import Util
4from io import BytesIO
5from os import path
6###############################################
7###### Class and Method declaration here ######
8###############################################
9
10# Create rendering options.
11options = SvgFigureRendererOptions()
12# Specify the preamble.
13options.preamble = r"\usepackage{pict2e}"
14# Specify the scaling factor 300%.
15options.scale = 3000
16# Specify the background color.
17options.background_color = Color.white
18# Specify the output stream for the log file.
19options.log_stream = BytesIO()
20# Specify whether to show the terminal output on the console or not.
21options.show_terminal = True
22
23# Create the output stream for the figure image.
24with open(path.join(Util.output_directory, "text-and-formula.svg"), "wb") as stream:
25 # Run rendering.
26 size = SvgFigureRenderer().render(r"""\setlength{\unitlength}{0.8cm}
27\begin{picture}(6,5)
28\thicklines
29\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$}
30\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}$}
31\end{picture}""", stream, options)
32
33# Show other results.
34print(options.error_report)
35print()
36print(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: