Інтерфейс введення Aspose.TeX | Python через .NET

Щоб отримати офіційні визначення реалізації вводу-виводу в Aspose.TeX для Python, зверніться до [посилання на API]( https://reference.aspose.com/tex/python-net/aspose.tex.io /).

Ідея вхідного каталогу

Враховуючи, що примітиви вводу-виводу мови TeX можуть обробляти лише імена файлів, Aspose.TeX для Python визначає каталог як відображення між іменами та колекціями даних. Ці колекції даних можуть бути файлами, потоками, масивами або будь-яким іншим типом. API дозволяє окремо вказувати вхідні та вихідні робочі каталоги. Він надає загальний клас InputWorkingDirectory, який користувачі можуть реалізувати для своїх конкретних потреб. Крім того, API забезпечує вбудовані реалізації, які будуть обговорюватися пізніше. Інтерфейс містить метод get_file(), який отримує потік даних і визначає повне ім’я файлу на основі заданого імені, яке служить ключем відображення.

Отримання вхідних файлів із файлової системи диска

Ось наш підхід:

Укажіть вихідний каталог у ASPOSE_TEX_OUTPUT_DIR (типово output). Спочатку застосуйте ліцензію. 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()

Укажіть у ASPOSE_TEX_INPUT_DIR папку з hello-world.tex (типово input). Приклад використовує plain TeX із TeXConfig.object_tex() і створює hello-world.xps та hello-world.log. Вхідний файл:

1Hello, World!
2\end

Отримання введених файлів із ZIP-архіву

Інший варіант — зберігати вхідні файли в архіві ZIP і розглядати його як вхідний каталог. У такому сценарії слід виконати такі дії:

 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 задає архів із in/hello-world.tex (типово zip-in.zip). Відкрийте його у двійковому режимі rb і тримайте потік відкритим до завершення завдання.

Для початку ми створюємо потік, який містить ZIP-файл. Згодом, після створення параметрів перетворення, ми призначаємо екземпляр класу InputZipDirectory властивості input_working_directory. Другий параметр конструктора представляє базовий шлях в архіві. Якщо ми хочемо, щоб весь архів функціонував як вхідний каталог, ми повинні надати порожній рядок як аргумент.

Ідея вхідного терміналу

Тепер давайте розглянемо концепцію термінального введення. Aspose.TeX для Python визначає загальний інтерфейс IInputTerminal спеціально для цієї мети, який включає одну властивість, яка повертає екземпляр реалізації TerminalReader. Доступні реалізації будуть обговорені пізніше.

Отримання введення терміналу з консолі

Щоб досягти цього, нам потрібно призначити екземпляр класу InputConsoleTerminal опції 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()

Приклад читає рядок командою \read і записує його в texput.xps. Уведіть у терміналі, наприклад, Terminal input works! або передайте рядок через стандартне введення. SCROLL_MODE дозволяє такий запит введення.