Rendering di figura in LaTeX | Aspose.TeX per Python
In determinate situazioni, potrebbe essere necessario estrarre contenuti specifici da un file LaTeX come pezzo reso autonomo, comunemente indicato come figur, senza alcuna connessione al layout della pagina. Ciò potrebbe essere utile, ad esempio, quando si creano illustrazioni per una pubblicazione online. La nostra API ti consente di raggiungere questo obiettivo. I formati target per le figure di rendering sono PNG e SVG, proprio come con la funzione di rendering della formula matematica in LaTeX. Vale la pena notare che il rendering di figura in LaTeX è una caratteristica più generale rispetto al rendering di formula matematica in LaTeX.
Rendere una figura in LaTeX a PNG
Se necessario, prima dai un’occhiata alla sezione di riferimento API per questo argomento. Simile al rendering della formula, inizieremo con un esempio. Ecco qui:
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}")
Per iniziare, creiamo un’istanza della classe Opzioni di rendering di figura in LaTeX, in cui specifichiamo contemporaneamente la risoluzione dell’immagine di output.
Successivamente, dobbiamo specificare il preambolo. A differenza del rendering della formula matematica in LaTeX, non esiste un preambolo predefinito per il rendering delle figure in LaTeX. Pertanto, se hai intenzione di rendere la grafica creata utilizzando il pacchetto Pict2e
Latex, ad esempio, dovrai specificarlo nel preambolo:
1\usepackage{pict2e}
Quindi istruiamo il rendering di ridimensionare l’output del 300%.
L’opzione successiva determina il colore di sfondo. A differenza del rendering della formula matematica, non abbiamo bisogno di specificare un colore in primo piano, poiché supponiamo che i colori siano interamente controllati dal codice LaTeX. Allo stesso modo, il colore di sfondo è anche controllato dal codice LaTeX, quindi questa opzione è semplicemente fornita per comodità.
La seguente riga nell’esempio potrebbe non essere particolarmente significativa. È semplicemente destinato a dimostrare che hai la possibilità di dirigere l’output del registro su un flusso specifico.
L’opzione finale, showterminal
, consente di controllare se l’uscita del terminale deve essere visualizzata nella console.
Il metodo responsabile del rendering della figura è figurerender.render(). Restituisce le dimensioni della figura in punti.
Il metodo accetta un flusso come secondo argomento, che è il flusso in cui verrà scritto l’immagine. Creiamo il flusso nella riga successiva.
Infine, invochiamo il metodo figurerender.render()
, passando le opzioni come terzo argomento. Il codice in LaTeX della figura è fornito come primo argomento.
Le ultime righe dell’esempio visualizzano due informazioni relative al rendering della figura: le dimensioni della figura e un breve rapporto di errore (se ci sono errori).
Ecco il risultato del rendering.
Questo rappresenta il caso d’uso più generale per la funzione Figura Latex.
Rendere una figura in LaTeX a SVG
Allo stesso modo, possiamo anche rendere una figura in LaTeX in 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}")
Le differenze sono:
- Invece di utilizzare la classe PNGFigureRenderEroptions, utilizziamo la classe SVGFigureRenderErOptions.
- Non abbiamo bisogno di specificare la risoluzione.
- Invece di utilizzare la classe PNGFigureReder, utilizziamo la classe Svgfigurerender.
Ecco il risultato: