Interfaz de entrada de Aspose.TeX | Python

Para obtener definiciones formales de la implementación de E/S en Aspose.TeX para Python, consulte la referencia de API.

La idea detrás del directorio de entrada

Dado que las primitivas de E/S del lenguaje TeX solo pueden manejar nombres de archivos, Aspose.TeX para Python define un directorio como un mapeo entre nombres y colecciones de datos. Estas colecciones de datos pueden ser archivos, secuencias, matrices o cualquier otro tipo. La API permite la especificación separada de directorios de trabajo de entrada y salida. Proporciona la clase general InputWorkingDirectory, que los usuarios pueden implementar para sus necesidades específicas. Además, la API proporciona implementaciones integradas, que se analizarán más adelante. La interfaz incluye el método get_file(), que recupera el flujo de datos y determina el nombre completo del archivo en función de un nombre determinado, que sirve como clave de mapeo.

Recuperar la entrada de archivos del sistema de archivos del disco

Este es el enfoque que adoptaríamos:

Establezca ASPOSE_TEX_OUTPUT_DIR en el directorio de salida (predeterminado: output). Aplique primero una licencia. Licensing.

 1# Read a TeX file from a file system working directory.
 2import os
 3from pathlib import Path
 4from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 5from aspose.tex.io import InputFileSystemDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 6from aspose.tex.presentation.xps import XpsDevice
 7
 8input_dir = Path(os.environ.get("ASPOSE_TEX_INPUT_DIR", "input")).resolve()
 9if not (input_dir / "hello-world.tex").is_file():
10    raise FileNotFoundError(input_dir / "hello-world.tex")
11output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
12output_dir.mkdir(parents=True, exist_ok=True)
13
14options = TeXOptions.console_app_options(TeXConfig.object_tex())
15options.interaction = Interaction.NONSTOP_MODE
16options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
17options.terminal_out = OutputMemoryTerminal()
18options.input_working_directory = InputFileSystemDirectory(str(input_dir))
19device = XpsDevice()
20job_result = TeXJob("hello-world.tex", device, options).run()

Establezca ASPOSE_TEX_INPUT_DIR en la carpeta con hello-world.tex (predeterminada: input). El ejemplo usa TeX simple con TeXConfig.object_tex() y genera hello-world.xps y hello-world.log. Entrada:

1Hello, World!
2\end

Recuperar la entrada de un archivo desde un archivo ZIP

Otra opción es almacenar los archivos de entrada en un archivo ZIP y tratarlo como un directorio de entrada. En tal escenario, se deben seguir los siguientes pasos:

 1# Read a TeX file from a subdirectory inside a ZIP archive.
 2import os
 3from pathlib import Path
 4from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 5from aspose.tex.io import InputZipDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 6from aspose.tex.presentation.xps import XpsDevice
 7
 8output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
 9output_dir.mkdir(parents=True, exist_ok=True)
10input_zip = Path(os.environ.get("ASPOSE_TEX_INPUT_ZIP", "zip-in.zip")).resolve()
11
12# Keep the binary ZIP stream open until the job finishes.
13with input_zip.open("rb") as input_stream:
14    options = TeXOptions.console_app_options(TeXConfig.object_tex())
15    options.interaction = Interaction.NONSTOP_MODE
16    options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
17    options.terminal_out = OutputMemoryTerminal()
18    # Resolve hello-world.tex inside the in/ directory of the archive.
19    options.input_working_directory = InputZipDirectory(input_stream, "in")
20    device = XpsDevice()
21    job_result = TeXJob("hello-world.tex", device, options).run()

ASPOSE_TEX_INPUT_ZIP indica un archivo con in/hello-world.tex (predeterminado: zip-in.zip). Ábralo en modo binario rb y mantenga el flujo abierto hasta que termine el trabajo.

Para empezar, creamos la secuencia que contiene el archivo ZIP. Posteriormente, después de crear las opciones de conversión, asignamos una instancia de la clase InputZipDirectory a la propiedad input_working_directory. El segundo parámetro del constructor representa la ruta base dentro del archivo. Si deseamos que todo el archivo funcione como directorio de entrada, debemos proporcionar una cadena vacía como argumento.

La idea detrás del terminal de entrada

Ahora consideremos el concepto de entrada terminal. Aspose.TeX para Python define la interfaz general IInputTerminal específicamente para este propósito, que incluye una propiedad única que devuelve una instancia de la implementación TerminalReader. Las implementaciones disponibles se discutirán más adelante.

Obtener entrada de terminal desde la consola

Para lograr esto, necesitamos asignar una instancia de la clase InputConsoleTerminal a la opción terminal_in.

 1# Read a line from the console while processing a TeX stream.
 2import os
 3from pathlib import Path
 4from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 5from io import BytesIO
 6from aspose.tex.io import InputConsoleTerminal, OutputConsoleTerminal, OutputFileSystemDirectory
 7from aspose.tex.presentation.xps import XpsDevice
 8
 9output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
10output_dir.mkdir(parents=True, exist_ok=True)
11
12options = TeXOptions.console_app_options(TeXConfig.object_tex())
13options.interaction = Interaction.SCROLL_MODE
14options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
15options.terminal_in = InputConsoleTerminal()
16options.terminal_out = OutputConsoleTerminal()
17# Enter a line of text when TeX requests input.
18with BytesIO(br"\read-1 to \answer \answer\par\end") as input_stream:
19    job_result = TeXJob(input_stream, XpsDevice(), options).run()

El ejemplo lee una línea mediante \read y la escribe en texput.xps. Introduzca, por ejemplo, Terminal input works! en el terminal o suministre la línea por la entrada estándar. SCROLL_MODE permite esta solicitud de entrada.