Otros formatos de salida de conversión TeX | Python
Es poco probable que actualmente necesites convertir un archivo TeX escrito en un formato que no sea LaTeX. Sin embargo, si por algún motivo estás estudiando el lenguaje TeX o las partes internas de TeX, todavía es posible. En cualquier caso, Aspose.TeX para Python le permite convertir archivos escritos en formato Plain TeX y también le permite crear formatos personalizados y componer documentos diseñados en estos formatos.
Para comenzar, crearemos un formato personalizado.
Creando un formato personalizado
Un archivo de formato es una representación binaria del estado interno del motor TeX. Aplique primero una
licencia. Coloque customtex.tex en el subdirectorio CustomTeXFormat de ASPOSE_TEX_INPUT_DIR (predeterminado: input). ASPOSE_TEX_OUTPUT_DIR indica la carpeta de salida (predeterminada: output), donde el primer ejemplo crea customtex.fmt.
1# Create a reusable custom TeX format.
2import os
3from pathlib import Path
4from os import path
5from io import BytesIO
6from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
7from aspose.tex.io import InputFileSystemDirectory, InputZipDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
8from aspose.tex.resourceproviders import FormatProvider
9from aspose.tex.presentation.xps import XpsDevice
10
11output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
12output_dir.mkdir(parents=True, exist_ok=True)
13input_dir = Path(os.environ.get("ASPOSE_TEX_INPUT_DIR", "input")).resolve() / "CustomTeXFormat"
14# Create TeX engine options for no format upon ObjectTeX engine extension.
15options = TeXOptions.console_app_options(TeXConfig.object_ini_tex)
16options.interaction = Interaction.NONSTOP_MODE
17options.terminal_out = OutputMemoryTerminal()
18# Specify a file system working directory for the input.
19options.input_working_directory = InputFileSystemDirectory(str(input_dir))
20# Specify a file system working directory for the output.
21options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
22
23# Run format creation.
24TeXJob.create_format("customtex", options)
25
26# For further output to look fine.
27options.terminal_out.writer.write_line()Como puede ver, el código se parece al código para convertir un archivo TeX. Sin embargo, hay algunas distinciones.
En primer lugar, en este caso, utilizamos la configuración del trabajo TeXConfig.object_ini_tex. Esta configuración garantiza que el estado del motor sea “virgen”, lo que significa que los parámetros internos tienen sus valores predeterminados y el conjunto de secuencias de control se alinea con el conjunto de primitivas. En nuestro ejemplo, el conjunto de primitivas se amplía en el artículo Aspose.TeX y Object TeX.
A continuación, procedemos a configurar los directorios de trabajo de entrada y salida como de costumbre. El directorio de trabajo de entrada debe incluir el archivo fuente del formato principal y todas sus dependencias.
Y la segunda gran diferencia es el método mediante el cual ejecutamos el trabajo. En este caso, utilizamos el método estático create_format(), que, junto con las opciones, requiere que el nombre del archivo fuente principal sea idéntico al nombre del formato.
Componer un archivo TeX en su formato personalizado
El siguiente ejemplo crea primero customtex.fmt para poder ejecutarse de forma independiente. Después carga el formato y compone el texto de un flujo binario en typeset-with-custom-format.xps.
1# Typeset text using a custom TeX format.
2import os
3from pathlib import Path
4from os import path
5from io import BytesIO
6from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
7from aspose.tex.io import InputFileSystemDirectory, InputZipDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
8from aspose.tex.resourceproviders import FormatProvider
9from aspose.tex.presentation.xps import XpsDevice
10
11output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
12output_dir.mkdir(parents=True, exist_ok=True)
13input_dir = Path(os.environ.get("ASPOSE_TEX_INPUT_DIR", "input")).resolve() / "CustomTeXFormat"
14
15format_options = TeXOptions.console_app_options(TeXConfig.object_ini_tex)
16format_options.input_working_directory = InputFileSystemDirectory(str(input_dir))
17format_options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
18format_options.interaction = Interaction.NONSTOP_MODE
19format_options.terminal_out = OutputMemoryTerminal()
20TeXJob.create_format("customtex", format_options)
21# Create the format provider using the file system input working directory.
22# We use the project output directory as our custom format file is supposed to be located there.
23with FormatProvider(InputFileSystemDirectory(str(output_dir)), "customtex") as format_provider:
24 # Create conversion options for a custom format upon ObjectTeX engine extension.
25 options = TeXOptions.console_app_options(TeXConfig.object_tex(format_provider))
26 options.interaction = Interaction.NONSTOP_MODE
27 options.terminal_out = OutputMemoryTerminal()
28 options.job_name = "typeset-with-custom-format"
29 # Specify the input working directory. This is not required here as we are providing the main input as a stream.
30 # But it is required when the main input has dependencies (e.g. images).
31 options.input_working_directory = InputFileSystemDirectory(str(input_dir))
32 # Specify a file system working directory for the output.
33 options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
34
35 # Run the job.
36 TeXJob(BytesIO("Congratulations! You have successfully typeset this text with your own TeX format!\\end".encode('ascii')),
37 XpsDevice(), options).run()
38
39 # For further output to look fine.
40 options.terminal_out.writer.write_line()Para especificar el formato, necesitamos crear una instancia de la clase FormatProvider. En el constructor de opciones, usamos la configuración TeXConfig.object_tex(), que requiere nuestro proveedor de formato como argumento y carga el formato encima del estado “virgen” del motor.
El código restante debería resultarle familiar, ya que utiliza las funciones que se analizaron anteriormente en esta guía.
Composición tipográfica de un archivo TeX en formato Plain TeX
Si eliminamos el proveedor de formato del código mostrado arriba, el motor cargará el formato predeterminado, que es Object TeX en su cuarto sentido. Por lo tanto, si tiene un archivo TeX escrito en formato Plain TeX, puede convertirlo a cualquier formato de destino compatible utilizando este enfoque.