Renderização de figuras de LaTeX | .NET
Às vezes, você pode extrair algum conteúdo de um arquivo de LaTeX como uma peça renderizada separadamente, ou a “figura”, sem nenhuma conexão com o layout da página. Pode ser uma ilustração para sua publicação na Internet, por exemplo. Você pode fazer isso com nossa API. Quanto aos formatos de destino, existem duas opções - PNG e SVG. Como é no caso do recurso de renderização de fórmula matemática do LATEX. Também vale a pena notar 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
A seção de referência da API relacionada a este tópico é aqui. E, como na renderização de fórmula, começaremos com um exemplo. Aqui está:
1 // Render LaTeX figure to PNG image
2
3 // Create rendering options setting the image resolution to 150 dpi.
4 PngFigureRendererOptions options = new PngFigureRendererOptions();
5 options.Resolution = 150;
6
7 // Specify the preamble.
8 options.Preamble = "\\usepackage{pict2e}";
9
10 // Specify the scaling factor 300%.
11 options.Scale = 3000;
12
13 // Specify the background color.
14 options.BackgroundColor = System.Drawing.Color.White;
15
16 // Specify the output stream for the log file.
17 options.LogStream = new System.IO.MemoryStream();
18
19 // Specify whether to show the terminal output on the console or not.
20 options.ShowTerminal = true;
21
22 // Create the output stream for the figure image.
23 using (System.IO.Stream stream = System.IO.File.Open(
24 System.IO.Path.Combine(OutputDir, "text-and-formula.png"), System.IO.FileMode.Create))
25 {
26 // Run rendering.
27 System.Drawing.SizeF size = new PngFigureRenderer().Render(@"\setlength{\unitlength}{0.8cm}
28\begin{picture}(6,5)
29\thicklines
30\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$}
31\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}$}
32\end{picture}", stream, options);
33
34 // Show other results.
35 System.Console.Out.WriteLine(options.ErrorReport);
36 System.Console.Out.WriteLine();
37 System.Console.Out.WriteLine($"Size: {size}"); // Dimensions of the resulting image.
38 }Primeiro de tudo, criamos uma instância Figura do LATEX. Fazemos isso aqui especificando simultaneamente a resolução da imagem de saída.
Em seguida, especificamos o preâmbulo. Não há preâmbulo padrão para a renderização de figuras de LaTeX; portanto, se você estiver, 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%.
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.
A próxima linha do exemplo não faz muito sentido. Ele apenas demonstra que você pode direcionar a saída de log para algum fluxo.
E a última opção showterminal permite alternar a gravação da saída do terminal no console.
O método que realmente executa a renderização é figuureRender.render(). Ele retorna o tamanho da figura em pontos.
O fluxo em que a imagem deve ser escrito é aceito pelo método como o segundo argumento. Criamos o fluxo a seguir.
E, finalmente, chamamos o próprio método de figuureRender.render(), passando as opções como o terceiro argumento. O código do LATEX da figura é aprovado como o primeiro argumento.
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 no formato SVG.
1 // Render LaTeX figure to SVG image
2
3 // Create rendering options.
4 FigureRendererOptions options = new SvgFigureRendererOptions();
5
6 // Specify the preamble.
7 options.Preamble = "\\usepackage{pict2e}";
8
9 // Specify the scaling factor 300%.
10 options.Scale = 3000;
11
12 // Specify the background color.
13 options.BackgroundColor = System.Drawing.Color.White;
14
15 // Specify the output stream for the log file.
16 options.LogStream = new System.IO.MemoryStream();
17
18 // Specify whether to show the terminal output on the console or not.
19 options.ShowTerminal = true;
20
21 // Create the output stream for the figure image.
22 using (System.IO.Stream stream = System.IO.File.Open(
23 System.IO.Path.Combine(OutputDir, "text-and-formula.svg"), System.IO.FileMode.Create))
24 {
25 // Run rendering.
26 System.Drawing.SizeF size = new SvgFigureRenderer().Render(@"\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.
34 System.Console.Out.WriteLine(options.ErrorReport);
35 System.Console.Out.WriteLine();
36 System.Console.Out.WriteLine($"Size: {size}"); // Dimensions of the resulting image.
37 }As diferenças são:
- Utilizamos svgfigureReroptions Classe em vez de pngfigureReroptions.
- Não especificamos a resolução.
- Utilizamos a classe svgfigurerenderer em vez de pngfigurerenderer.
Aqui está o resultado:
