Renderização de figuras de LaTeX | Python via .NET
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á:
Defina ASPOSE_TEX_OUTPUT_DIR como o diretório de saída ou use a pasta padrão output. Todo o código LaTeX está incluído nos exemplos; não são necessários arquivos de entrada externos. Aplique uma licença primeiro.
Licenciamento.
1# Render a LaTeX figure with a triangle and formulas to PNG.
2import os
3from pathlib import Path
4from aspose.pydrawing import Color
5from aspose.tex.features import PngFigureRenderer, PngFigureRendererOptions
6
7# Set an output directory, or use the default output folder.
8output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
9output_dir.mkdir(parents=True, exist_ok=True)
10
11# Create rendering options setting the image resolution to 150 dpi.
12options = PngFigureRendererOptions()
13options.resolution = 150
14# Specify the preamble.
15options.preamble = r"\usepackage{pict2e}"
16# Specify the scaling factor 300%.
17options.scale = 3000
18# Leave space around the rendered fragment.
19options.margin = 5
20# Specify the background color.
21options.background_color = Color.white
22# Specify whether to show the terminal output on the console or not.
23options.show_terminal = False
24
25# Create binary streams for the rendering log and figure image.
26with (output_dir / "text-and-formula.png.log").open("wb") as log_stream, \
27 (output_dir / "text-and-formula.png").open("wb") as stream:
28 options.log_stream = log_stream
29 # Run rendering.
30 size = PngFigureRenderer().render(r"""\setlength{\unitlength}{0.8cm}
31\begin{picture}(6,5)
32\thicklines
33\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$}
34\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}$}
35\end{picture}""", stream, options)
36
37# Show other results.
38print(options.error_report or "No rendering errors.")
39print()
40print(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}Definimos scale = 3000 para uma escala de 300% e margin = 5 para deixar espaço ao redor do fragmento. O exemplo PNG usa resolution = 150 DPI.
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.
O exemplo atribui um fluxo de arquivo binário a log_stream e salva o registro como text-and-formula.png.log ao lado de text-and-formula.png. A instrução with fecha ambos os fluxos automaticamente.
show_terminal controla a saída do terminal no console. Os exemplos o definem como False; o registro continua sendo gravado no arquivo.
O método responsável por renderizar a figura é FigureRenderer.render(). Ele retorna o tamanho da figura em pontos.
O segundo argumento é o fluxo de saída binário aberto para a imagem. O terceiro fornece as opções de renderização.
Por fim, invocamos o método FigureRenderer.render(), passando as opções como o terceiro argumento. O código do LATEX da figura é fornecido como o primeiro argumento.
As últimas linhas mostram o relatório de erros, ou No rendering errors. quando ele está vazio, seguido da largura e da altura em pontos.
Aqui está o resultado da renderização.
Isso representa o caso de uso mais geral para o recurso de renderização de figuras de LaTeX.
Renderizando uma figura de LaTeX para SVG
Da mesma forma, também podemos renderizar uma figura de LaTeX no formato SVG.
1# Render a LaTeX figure with a triangle and formulas to SVG.
2import os
3from pathlib import Path
4from aspose.pydrawing import Color
5from aspose.tex.features import SvgFigureRenderer, SvgFigureRendererOptions
6
7# Set an output directory, or use the default output folder.
8output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
9output_dir.mkdir(parents=True, exist_ok=True)
10
11# Create rendering options.
12options = SvgFigureRendererOptions()
13# Specify the preamble.
14options.preamble = r"\usepackage{pict2e}"
15# Specify the scaling factor 300%.
16options.scale = 3000
17# Leave space around the rendered fragment.
18options.margin = 5
19# Specify the background color.
20options.background_color = Color.white
21# Specify whether to show the terminal output on the console or not.
22options.show_terminal = False
23
24# Create binary streams for the rendering log and figure image.
25with (output_dir / "text-and-formula.svg.log").open("wb") as log_stream, \
26 (output_dir / "text-and-formula.svg").open("wb") as stream:
27 options.log_stream = log_stream
28 # Run rendering.
29 size = SvgFigureRenderer().render(r"""\setlength{\unitlength}{0.8cm}
30\begin{picture}(6,5)
31\thicklines
32\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$}
33\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}$}
34\end{picture}""", stream, options)
35
36# Show other results.
37print(options.error_report or "No rendering errors.")
38print()
39print(f"Size: {size.width}x{size.height}")Este exemplo cria text-and-formula.svg e o registro text-and-formula.svg.log no mesmo diretório de saída.
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:
