Látex a PDF | Aspose.TeX para Python

Convertir LaTeX a PDF

Ahora, examinemos en profundidad el código Python que ofrece el enfoque más sencillo para convertir LaTeX a formato PDF.

1# Create conversion options for Object LaTeX format upon Object TeX engine extension.
2options = TeXOptions.console_app_options(TeXConfig.object_latex)
3# Specify a file system working directory for the output.
4options.output_working_directory = OutputFileSystemDirectory(Util.output_directory)
5# Initialize the options for saving in PDF format.
6options.save_options = PdfSaveOptions()
7# Run LaTeX to PDF conversion.
8TeXJob(path.join(Util.input_directory, "hello-world.ltx"), PdfDevice(), options).run()

Para comenzar, necesitamos crear una instancia de la clase TeXOptions. El método console_app_options() es el único método estático que logra esto, así que no te preocupes por su nombre. Este método toma una instancia object_latex de la clase TeXConfig, que es perfecta para convertir un archivo LaTeX. Esta configuración indica al motor Object TeX que cargue el formato Object LaTeX y esté preparado para procesar el archivo LaTeX. El formato Object LaTeX es esencialmente el mismo que el formato LaTeX, pero utiliza primitivas específicas de Object TeX para definir las métricas de la página.

La primera opción que debe especificarse es output_working_directory, que determina la ubicación donde se guardará la salida TeX. Si es necesario, puede encontrar más información sobre el concepto de directorio de salida en Aspose.TeX. En este caso particular, utilizamos la clase OutputFileSystemDirectory, que nos permite escribir la salida en un directorio o carpeta designado.

La segunda opción requiere una instancia de la clase SaveOptions, que determina cómo el modelo de objeto se transforma al formato deseado. En nuestro caso, mientras convertimos LaTeX a PDF, se refiere a una instancia de la clase PdfSaveOptions.

Para convertir un archivo LaTeX almacenado en el sistema de archivos, necesitamos crear una instancia de la clase TeXJob usando el constructor que toma la ruta completa del archivo como parámetro. Si no especificamos la ruta completa, el motor buscará el archivo en el directorio actual (que es el directorio de trabajo del script) y es posible que no lo encuentre. Sin embargo, podemos omitir la extensión si nuestro archivo tiene la extensión .tex, ya que el motor la agregará automáticamente. El segundo argumento del constructor es una instancia de la clase Dispositivo. En nuestro caso, dado que estamos convirtiendo LaTeX a PDF, es una instancia de la clase PdfDevice. Finalmente, pasamos las opciones de conversión preparadas recientemente como último argumento.

Ahora, todo lo que queda es ejecutar el trabajo.

Después de la ejecución, independientemente de si fue exitosa o no, lo primero que veremos es la salida del terminal. Si la ejecución es exitosa, el resultado será similar a este:

 1This is ObjectTeX, Version 3.1415926-1.0 (Aspose.TeX 21.8)
 2entering extended mode
 3
 4(<input_directory>\hello-world.ltx
 5LaTeX2e <2011/06/27>
 6(article.cls
 7Document Class: article 2007/10/19 v1.4h Standard LaTeX document class
 8(size10.clo))
 9No file hello-world.aux.
10[1]
11(<output_directory>\hello-world.aux) )
12Output written on hello-world.pdf (1 page).
13Transcript written on hello-world.log.

En la carpeta que especificamos como directorio de salida, encontraremos el archivo de transcripción y, ¡aquí está!, el archivo PDF de salida principal, entre otros resultados del trabajo del motor.

Una forma alternativa de escribir el archivo PDF de salida principal

La clase PdfDevice tiene otro constructor que nos permite obtener el archivo PDF resultante de otra manera.

 1# Create the stream to write the PDF file to.
 2with open(path.join(Util.output_directory, "any-name.pdf"), "wb") as pdf_stream:
 3    # Create conversion options for Object LaTeX format upon Object TeX engine extension.
 4    options = TeXOptions.console_app_options(TeXConfig.object_latex)
 5    # Specify a file system working directory for the output.
 6    options.output_working_directory = OutputFileSystemDirectory(Util.output_directory)
 7    # Initialize the options for saving in PDF format.
 8    options.save_options = PdfSaveOptions()
 9    # Run LaTeX to PDF conversion.
10    TeXJob(path.join(Util.input_directory, "hello-world.ltx"), PdfDevice(pdf_stream), options).run()

El archivo PDF de salida principal se llamará cualquier nombre.pdf y se ubicará en el directorio especificado. Sin embargo, a diferencia de salida de imagen, no habrá otros archivos PDF en el directorio de salida especificado por las opciones de conversión. La excepción es si any-name.pdf está ubicado en el mismo directorio del sistema de archivos asignado a la opción output_working_directory usando OutputFileSystemDirectory.

Acerca de las opciones de entrada

Si nuestro archivo de entrada principal requiere dependencias, como paquetes que no están incluidos en el sistema LaTeX básico y paquetes compatibles, es necesario configurar la opción required_input_directory de manera similar a como configuramos la opción output_working_directory y coloque las dependencias en ese directorio. Las dependencias se pueden organizar en subdirectorios según se desee. Además, si tenemos nuestros propios archivos para incluir en el proceso de composición tipográfica, como archivos de gráficos externos, también debemos configurar el input_working_directory usando la ruta a la ubicación donde se almacenan esos archivos. También podemos colocar el archivo de entrada principal dentro del directorio de entrada y especificar la ruta relativa en el método run(), o no especificar ninguna ruta si el archivo de entrada principal está en la raíz. Para obtener más detalles sobre el concepto de directorio de entrada en Aspose.TeX para Python y las implementaciones proporcionadas, consulte aquí.

También se analizan otras opciones de trabajo TeX.

También puede explorar la aplicación web gratuita para la conversión de LaTeX a PDF, que se desarrolla utilizando Aspose.TeX para .NET API.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.