Representación de figuras LaTeX | Aspose.TeX para Python
En determinadas situaciones, es posible que necesites extraer contenido específico de un archivo LaTeX como una pieza renderizada independiente, comúnmente denominada figura, sin ninguna conexión con el diseño de la página. Esto podría resultar útil, por ejemplo, al crear ilustraciones para una publicación en línea. Nuestra API le permite lograr esto. Los formatos de destino para representar figuras son PNG y SVG, al igual que con la función de representación de fórmulas matemáticas de LaTeX. Vale la pena señalar que la representación de figuras LaTeX es una característica más general en comparación con la representación de fórmulas matemáticas LaTeX.
Renderizar una figura de LaTeX a PNG
Si es necesario, primero eche un vistazo a la sección de referencia de API para este tema. De manera similar a la representación de fórmulas, comenzaremos con un ejemplo. Aquí lo tienes:
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 comenzar, creamos una instancia de la clase opciones de renderizado de figuras LaTeX, donde especificamos simultáneamente la resolución de la imagen de salida.
A continuación, debemos especificar el preámbulo. A diferencia de la representación de fórmulas matemáticas de LaTeX, no existe un preámbulo predeterminado para la representación de figuras de LaTeX. Por lo tanto, si planea renderizar gráficos creados usando el paquete LaTeX pict2e
, por ejemplo, necesitará especificarlo en el preámbulo:
1\usepackage{pict2e}
Luego le indicamos al renderizador que escale la salida en un 300%.
La siguiente opción determina el color de fondo. A diferencia de la representación de fórmulas matemáticas, no necesitamos especificar un color de primer plano, ya que asumimos que los colores están completamente controlados por el código LaTeX. De manera similar, el color de fondo también está controlado por el código LaTeX, por lo que esta opción se proporciona simplemente por conveniencia.
Es posible que la siguiente línea del ejemplo no sea particularmente significativa. Simplemente pretende demostrar que tiene la opción de dirigir la salida del registro a una secuencia específica.
La última opción, ShowTerminal
, le permite controlar si la salida del terminal debe mostrarse en la consola.
El método responsable de renderizar la figura es FigureRenderer.render(). Devuelve el tamaño de la figura en puntos.
El método acepta una secuencia como segundo argumento, que es la secuencia donde se escribirá la imagen. Creamos la secuencia en la siguiente línea.
Finalmente, invocamos el método FigureRenderer.render()
, pasando las opciones como tercer argumento. El código LaTeX de la figura se proporciona como primer argumento.
Las últimas líneas del ejemplo muestran dos datos relacionados con la representación de la figura: el tamaño de la figura y un breve informe de errores (si hay algún error).
Aquí está el resultado del renderizado.
Este representa el caso de uso más general para la función Representación de figuras LaTeX.
Representar una figura de LaTeX a SVG
De manera similar, también podemos renderizar una figura LaTeX en 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}")
Las diferencias son:
- En lugar de utilizar la clase PngFigureRendererOptions, utilizamos la clase SvgFigureRendererOptions.
- No es necesario especificar la resolución.
- En lugar de utilizar la clase PngFigureRenderer, utilizamos la clase SvgFigureRenderer.