Інші вихідні формати перетворення TeX | Java

Дуже малоймовірно, що зараз ви захочете конвертувати файл TeX, написаний у будь-якому іншому форматі, крім LaTeX. Але це можливо, якщо ви з якоїсь причини вивчаєте мову TeX та/або внутрішні засоби. У будь-якому разі Aspose.TeX для Java дозволяє конвертувати файли, написані у форматі Plain TeX. Це також дозволяє створювати власні формати та набирати документи, оформлені в цих форматах.

Ми почнемо зі створення спеціального формату.

Створення власного формату

Давайте пам’ятаємо, що файл формату є двійковим дампом внутрішнього стану механізму TeX.

Укажіть у inputDirectory папку з файлом customtex.tex і його залежностями, а в outputDirectory — наявну папку виведення. Вихідний файл формату має закінчуватися командою \dump; приклад створює в папці виведення файл customtex.fmt. Імпортуйте класи Aspose.TeX, використані в прикладах, а для набору тексту також com.aspose.tex.rendering.XpsDevice, java.io.ByteArrayInputStream і java.nio.charset.StandardCharsets. Метод виклику має обробляти або оголошувати винятки. Застосуйте ліцензію згідно з посібником із ліцензування, щоб уникнути обмежень ознайомлювальної версії.

 1// Create a custom TeX format from customtex.tex, which ends with \dump.
 2// inputDirectory contains customtex.tex; outputDirectory is an existing output folder.
 3TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectIniTeX());
 4InputFileSystemDirectory input = new InputFileSystemDirectory(inputDirectory);
 5OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 6options.setInputWorkingDirectory(input);
 7options.setOutputWorkingDirectory(output);
 8options.setInteraction(Interaction.NonstopMode);
 9options.setTerminalOut(new OutputMemoryTerminal());
10try {
11    TeXJob.createFormat("customtex", options);
12} finally {
13    output.close();
14    input.close();
15}

Як бачите, код схожий на код для перетворення файлу TeX. Але є кілька відмінностей.

По-перше, тут ми використовуємо конфігурацію завдання TeXConfig.objectIniTeX() . Це спеціальна конфігурація, яка залишає стан двигуна «незайманим», тобто внутрішні параметри мають значення за замовчуванням, а набір керуючих послідовностей збігається з набором примітивів. У нашому прикладі набір примітивів розширено в сенсі, згаданому тут.

Далі ми налаштовуємо вхідні та вихідні робочі каталоги, як зазвичай. Вхідний робочий каталог має містити вихідний файл основного формату та всі його залежності.

І друга ключова відмінність полягає в тому, як ми виконуємо роботу. Цього разу ми використовуємо статичний метод createFormat() , який разом із параметрами отримує ім’я основного вихідного файлу, яке має збігатися з назвою формату.

Набір файлу TeX у вашому спеціальному форматі

Тепер, коли у нас є власний формат TeX, ми хочемо набрати файл TeX, написаний у цьому форматі. Ось код:

Укажіть у formatDirectory папку з раніше створеним файлом customtex.fmt, а в outputDirectory — наявну папку виведення. Приклад набирає самодостатній текстовий потік у typeset-with-custom-format.xps, тому робоча папка введення не потрібна. Задайте її, якщо основні вхідні дані мають залежності, наприклад зображення.

 1// Typeset text using the previously created customtex.fmt format.
 2// formatDirectory contains customtex.fmt; outputDirectory is an existing output folder.
 3InputFileSystemDirectory formatInput = new InputFileSystemDirectory(formatDirectory);
 4FormatProvider formatProvider = new FormatProvider(formatInput, "customtex");
 5OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 6XpsDevice device = new XpsDevice();
 7TeXJobResult result;
 8try {
 9    TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX(formatProvider));
10    options.setJobName("typeset-with-custom-format");
11    options.setOutputWorkingDirectory(output);
12    options.setInteraction(Interaction.NonstopMode);
13    options.setTerminalOut(new OutputMemoryTerminal());
14    // No input working directory is needed for this self-contained stream.
15    try (ByteArrayInputStream text = new ByteArrayInputStream(
16            "Congratulations! You have successfully typeset this text with your own TeX format!\\end"
17                    .getBytes(StandardCharsets.US_ASCII))) {
18        result = new TeXJob(text, device, options).run();
19    }
20} finally {
21    device.dispose();
22    output.close();
23    formatProvider.close();
24    formatInput.close();
25}

Вочевидь ми повинні якось визначити формат. Перш за все, нам потрібно створити екземпляр класу FormatProvider . Потім у конструкторі параметрів ми використовуємо конфігурацію TeXConfig.objectTeX(FormatProvider), яка приймає наш провайдер формату як аргумент і завантажує формат поверх «незайманого» стану двигуна.

Обидва приклади виконуються без взаємодії з користувачем і зберігають виведення термінала в пам’яті. Після виконання завдання приклад набору закриває вхідний потік, звільняє пристрій XPS і закриває робочу папку та постачальника формату. Ці можливості розглянуто раніше в цьому посібнику.

Набір файлу TeX у форматі Plain TeX

Якщо ми використаємо TeXConfig.objectTeX() без постачальника формату, механізм завантажить формат за замовчуванням, яким є Object TeX у його четвертому значенні. Таким чином, якщо у вас є файл TeX, написаний у форматі Plain TeX, таким чином ви можете перетворити його в будь-який підтримуваний цільовий формат.