Інші вихідні формати перетворення TeX | Python через .NET
Малоймовірно, що зараз вам знадобиться конвертувати файл TeX, написаний у форматі, відмінному від LaTeX. Однак, якщо ви з будь-якої причини вивчаєте мову TeX або внутрішню частину TeX, це все ще можливо. У будь-якому випадку Aspose.TeX для Python дозволяє конвертувати файли, написані у форматі Plain TeX, а також дозволяє створювати власні формати та набирати документи, розроблені в цих форматах.
Для початку ми створимо власний формат.
Створення власного формату
Файл формату — це двійкове представлення внутрішнього стану рушія TeX. Спочатку застосуйте
ліцензію. Помістіть customtex.tex у підкаталог CustomTeXFormat каталогу ASPOSE_TEX_INPUT_DIR (типово: input). ASPOSE_TEX_OUTPUT_DIR задає папку виведення (типово: output), у якій перший приклад створює 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()Як бачите, код схожий на код для перетворення файлу TeX. Однак є кілька відмінностей.
По-перше, у цьому випадку ми використовуємо конфігурацію завдання TeXConfig.object_ini_tex. Ця конфігурація гарантує, що стан двигуна є «незайманим», тобто внутрішні параметри мають значення за замовчуванням, а набір керуючих послідовностей узгоджується з набором примітивів. У нашому прикладі набір примітивів розширено у статті Aspose.TeX і Object TeX.
Після цього ми продовжуємо налаштування вхідних і вихідних робочих каталогів, як зазвичай. Вхідний робочий каталог має містити вихідний файл основного формату та всі його залежності.
І друга головна відмінність полягає в методі, за допомогою якого ми виконуємо роботу. У цьому випадку ми використовуємо статичний метод create_format(), який у поєднанні з параметрами вимагає, щоб ім’я основного вихідного файлу збігалося з ім’ям формату.
Набір файлу TeX у вашому спеціальному форматі
Наступний приклад спочатку створює customtex.fmt, тому його можна запускати незалежно. Потім він завантажує формат і виконує набір тексту з двійкового потоку в 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()Щоб указати формат, нам потрібно створити екземпляр класу FormatProvider. У конструкторі параметрів ми використовуємо конфігурацію TeXConfig.object_tex(), яка вимагає нашого провайдера формату як аргумент і завантажує формат поверх «незайманого» стану механізму.
Код, що залишився, повинен бути вам знайомий, оскільки він використовує функції, які обговорювалися раніше в цьому посібнику.
Набір файлу TeX у форматі Plain TeX
Якщо ми видалимо постачальника формату з наведеного вище коду, механізм завантажить формат за замовчуванням, яким є Object TeX у його четвертому сенсі. Таким чином, якщо у вас є файл TeX, написаний у форматі Plain TeX, ви можете перетворити його в будь-який підтримуваний цільовий формат за допомогою цього підходу.