Другие выходные форматы преобразования TeX | С++

Крайне маловероятно, что вы сейчас захотите конвертировать файл TeX, написанный в любом другом формате, кроме LaTeX. Но это возможно, если вы по какой-то причине изучаете язык TeX и/или его внутренности. В любом случае, Aspose.TeX for C++ позволяет конвертировать файлы, написанные в формате Plain TeX. Он также позволяет создавать собственные форматы и верстать документы, разработанные в этих форматах.

Начнем с создания пользовательского формата.

Создание пользовательского формата

Напомним, что файл формата представляет собой двоичный дамп внутреннего состояния движка TeX.

 1// Create typesetting options for no format on ObjectTeX engine extension.
 2System::SharedPtr<TeXOptions> options = TeXOptions::ConsoleAppOptions(TeXConfig::get_ObjectIniTeX());
 3// Specify a file system working directory for input.
 4options->set_InputWorkingDirectory(System::MakeObject<InputFileSystemDirectory>(RunExamples::InputDirectory));
 5// Specify a file system working directory for output.
 6options->set_OutputWorkingDirectory(System::MakeObject<OutputFileSystemDirectory>(RunExamples::OutputDirectory));
 7    
 8// Run format creation.
 9Aspose::TeX::TeXJob::CreateFormat(u"customtex", options);
10    
11// For further output to look write.
12options->get_TerminalOut()->get_Writer()->WriteLine();

Как видите, код аналогичен коду конвертации файла TeX. Но есть несколько отличий.

Во-первых, здесь мы используем конфигурацию задания TeXConfig.ObjectIniTeX. Это специальная конфигурация, которая оставляет состояние движка «девственным», т. е. внутренние параметры имеют значения по умолчанию, а набор управляющих последовательностей совпадает с набором примитивов. В нашем примере набор примитивов расширен в смысле, упомянутом здесь.

Далее мы настраиваем рабочие каталоги ввода и вывода как обычно. Входной рабочий каталог должен содержать исходный файл основного формата и все его зависимости.

И второе ключевое отличие — это то, как мы выполняем работу. На этот раз мы используем статический метод CreateFormat(), который вместе с параметрами принимает имя основного исходного файла, которое должно совпадать с именем формата.

Набор текста TeX-файла в вашем пользовательском формате

Теперь, когда у нас есть собственный формат TeX, мы хотим набрать файл TeX, написанный в этом формате. Вот код:

 1// Create typesetting options for a custom format on ObjectTeX engine extension.
 2System::SharedPtr<TeXOptions> options = TeXOptions::ConsoleAppOptions(TeXConfig::ObjectTeX(formatProvider));
 3options->set_JobName(u"typeset-with-custom-format");
 4// Specify the input working directory.
 5options->set_InputWorkingDirectory(wd);
 6// Specify a file system working directory for output.
 7options->set_OutputWorkingDirectory(System::MakeObject<OutputFileSystemDirectory>(RunExamples::OutputDirectory));
 8            
 9// Run typesetting.
10System::MakeObject<Aspose::TeX::TeXJob>(System::MakeObject<System::IO::MemoryStream>(System::Text::Encoding::get_ASCII()->GetBytes(u"Congratulations! You have successfully typeset this text with your own TeX format!\\end")), System::MakeObject<XpsDevice>(), options)->Run();
11            
12// For further output to look write.
13options->get_TerminalOut()->get_Writer()->WriteLine();

Очевидно, нам нужно как-то указать формат. Прежде всего, нам нужно создать экземпляр класса FormatProvider. Затем в конструкторе параметров мы используем конфигурацию TeXConfig.ObjectTeX(), которая принимает нашего поставщика формата в качестве аргумента и загружает формат поверх «девственного» состояния движка.

Остальная часть кода должна быть вам знакома. Он использует функции, обсуждавшиеся ранее в этом руководстве.

Набор текста файла TeX в формате Plain TeX

Если мы выкинем поставщика формата из только что продемонстрированного кода, движок загрузит формат по умолчанию, то есть Object TeX в четвертом смысле. Таким образом, если у вас есть файл TeX, написанный в формате Plain TeX, вы можете преобразовать его в любой поддерживаемый целевой формат.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.