Другие выходные форматы преобразования TeX | Python
Маловероятно, что вам в настоящее время понадобится конвертировать файл TeX, написанный в формате, отличном от LaTeX. Однако, если вы по какой-либо причине изучаете язык TeX или внутренние устройства TeX, это все равно возможно. В любом случае Aspose.TeX for Python позволяет конвертировать файлы, написанные в формате Plain TeX, а также позволяет создавать собственные форматы и верстать документы, разработанные в этих форматах.
Для начала мы создадим собственный формат.
Создание пользовательского формата
Давайте помнить, что файл формата представляет собой двоичное представление внутреннего состояния движка TeX.
1from aspose.tex import *
2from aspose.tex.io import *
3from util import Util
4###############################################
5###### Class and Method declaration here ######
6###############################################
7
8# Create TeX engine options for no format upon ObjectTeX engine extension.
9options = TeXOptions.console_app_options(TeXConfig.object_ini_tex)
10# Specify a file system working directory for the input.
11options.input_working_directory = InputFileSystemDirectory(Util.input_directory)
12# Specify a file system working directory for the output.
13options.output_working_directory = OutputFileSystemDirectory(Util.output_directory)
14
15# Run format creation.
16TeXJob.create_format("customtex", options)
17
18# For further output to look fine.
19options.terminal_out.writer.write_line()
Как видите, код похож на код конвертации файла TeX. Однако есть несколько различий.
Во-первых, в этом случае мы используем конфигурацию задания TeXConfig.object_ini_tex. Эта конфигурация гарантирует, что состояние механизма является «девственным», что означает, что внутренние параметры имеют значения по умолчанию, а набор управляющих последовательностей соответствует набору примитивов. В нашем примере набор примитивов расширен в статье Aspose.TeX и Object TeX.
После этого приступаем к настройке входных и выходных рабочих каталогов как обычно. Входной рабочий каталог должен включать исходный файл основного формата и все его зависимости.
И второе важное отличие — это метод, с помощью которого мы выполняем работу. В этом случае мы используем статический метод create_format(), который в сочетании с опциями требует, чтобы имя основного исходного файла было идентично имени формата.
Набор текста TeX-файла в вашем пользовательском формате
Теперь, когда мы создали собственный формат TeX, мы можем приступить к верстке файла TeX, написанного в этом формате. Вот код:
1from aspose.tex import *
2from aspose.tex.io import *
3from aspose.tex.resourceproviders import FormatProvider
4from util import Util
5from io import BytesIO
6###############################################
7###### Class and Method declaration here ######
8###############################################
9
10# Create the format provider using the file system input working directory.
11# We use the project output directory as our custom format file is supposed to be located there.
12with FormatProvider(InputFileSystemDirectory(Util.output_directory), "customtex") as format_provider:
13 # Create conversion options for a custom format upon ObjectTeX engine extension.
14 options = TeXOptions.console_app_options(TeXConfig.object_tex(format_provider))
15 options.job_name = "typeset-with-custom-format"
16 # Specify the input working directory. This is not required here as we are providing the main input as a stream.
17 # But it is required when the main input has dependencies (e.g. images).
18 options.input_working_directory = InputFileSystemDirectory(Util.input_directory)
19 # Specify a file system working directory for the output.
20 options.output_working_directory = OutputFileSystemDirectory(Util.output_directory)
21
22 # Run the job.
23 TeXJob(BytesIO("Congratulations! You have successfully typeset this text with your own TeX format!\\end".encode('ascii')),
24 XpsDevice(), options).run()
25
26 # For further output to look fine.
27 options.terminal_out.writer.write_line()
Чтобы указать формат, нам нужно создать экземпляр класса FormatProvider. В конструкторе параметров мы используем конфигурацию TeXConfig.object_tex(), которая требует нашего поставщика формата в качестве аргумента и загружает формат поверх «девственного» состояния движка.
Оставшийся код должен быть вам знаком, поскольку он использует функции, обсуждавшиеся ранее в этом руководстве.
Набор текста файла TeX в формате Plain TeX
Если мы удалим поставщика формата из кода, показанного выше, движок загрузит формат по умолчанию, то есть Object TeX в четвертом смысле. Таким образом, если у вас есть файл TeX, написанный в формате Plain TeX, вы можете преобразовать его в любой поддерживаемый целевой формат, используя этот подход.