Другие выходные форматы преобразования TeX | Java
Крайне маловероятно, что вы сейчас захотите конвертировать файл TeX, написанный в любом другом формате, кроме LaTeX. Но это возможно, если вы по какой-то причине изучаете язык TeX и/или его внутренности. В любом случае, Aspose.TeX for Java позволяет конвертировать файлы, написанные в формате Plain TeX. Он также позволяет создавать собственные форматы и верстать документы, разработанные в этих форматах.
Начнем с создания пользовательского формата.
Создание пользовательского формата
Напомним, что файл формата представляет собой двоичный дамп внутреннего состояния движка TeX.
1// Create TeX engine options for no format upon ObjectTeX engine extension.
2TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectIniTeX());
3// Specify a file system working directory for the input.
4options.setInputWorkingDirectory(new InputFileSystemDirectory(Utils.getInputDirectory()));
5// Specify a file system working directory for the output.
6options.setOutputWorkingDirectory(new OutputFileSystemDirectory(Utils.getOutputDirectory()));
7
8// Run format creation.
9TeXJob.createFormat("customtex", options);
10
11// For further output to look fine.
12options.getTerminalOut().getWriter().newLine();
Как видите, код аналогичен коду конвертации файла TeX. Но есть несколько отличий.
Во-первых, здесь мы используем конфигурацию задания TeXConfig.objectIniTeX(). Это специальная конфигурация, которая оставляет состояние движка «девственным», т. е. внутренние параметры имеют значения по умолчанию, а набор управляющих последовательностей совпадает с набором примитивов. В нашем примере набор примитивов расширен в смысле, упомянутом здесь.
Далее мы настраиваем рабочие каталоги ввода и вывода как обычно. Входной рабочий каталог должен содержать исходный файл основного формата и все его зависимости.
И второе ключевое отличие — это то, как мы выполняем работу. На этот раз мы используем статический метод createFormat(), который вместе с параметрами принимает имя основного исходного файла, которое должно совпадать с именем формата.
Набор текста TeX-файла в вашем пользовательском формате
Теперь, когда у нас есть собственный формат TeX, мы хотим набрать файл TeX, написанный в этом формате. Вот код:
1// Create the format provider using the file system input working directory.
2// We use the project output directory as our custom format file is supposed to be located there.
3final FormatProvider formatProvider = new FormatProvider(
4 new InputFileSystemDirectory(Utils.getOutputDirectory()), "customtex");
5try {
6 // Create conversion options for a custom format upon ObjectTeX engine extension.
7 TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX(formatProvider));
8 options.setJobName("typeset-with-custom-format");
9 // Specify the input working directory. This is not required here as we are providing the main input as a stream.
10 // But it is required when the main input has dependencies (e.g. images).
11 options.setInputWorkingDirectory(new InputFileSystemDirectory(Utils.getInputDirectory()));
12 // Specify a file system working directory for the output.
13 options.setOutputWorkingDirectory(new OutputFileSystemDirectory(Utils.getOutputDirectory()));
14
15 // Run the job.
16 new TeXJob(new ByteArrayInputStream(
17 "Congratulations! You have successfully typeset this text with your own TeX format!\\end".getBytes("ASCII")),
18 new XpsDevice(), options).run();
19
20 // For further output to look fine.
21 options.getTerminalOut().getWriter().newLine();
22} finally {
23 formatProvider.close();
24}
Очевидно, нам нужно как-то указать формат. Прежде всего, нам нужно создать экземпляр класса FormatProvider. Затем в конструкторе параметров мы используем конфигурацию TeXConfig.objectTeX(), которая принимает нашего поставщика формата в качестве аргумента и загружает формат поверх «девственного» состояния движка.
Остальная часть кода должна быть вам знакома. Он использует функции, обсуждавшиеся ранее в этом руководстве.
Набор текста файла TeX в формате Plain TeX
Если мы выкинем поставщика формата из только что продемонстрированного кода, движок загрузит формат по умолчанию, то есть Object TeX в четвертом смысле. Таким образом, если у вас есть файл TeX, написанный в формате Plain TeX, вы можете преобразовать его в любой поддерживаемый целевой формат.