Загрузка внешних пакетов и классов LaTeX в Java
Расширьте возможности компиляции документов LaTeX, добавляя внешние макропакеты (.sty) и пользовательские классы документов (.cls) с помощью Aspose.TeX for Java. Динамически разрешайте зависимости пакетов из каталогов локальной файловой системы, сжатых ZIP-архивов или пользовательских потоков памяти без необходимости полной установки TeX Live или MiKTeX.
При компиляции документов LaTeX, содержащих такие команды, как \usepackage{custompackage} или \documentclass{customclass}, движок ищет соответствующие файлы .sty или .cls с помощью настроенных экземпляров IInputWorkingDirectory.
Ниже приведены следующие источники разрешения пакетов:
- Для загрузки стандартных корпоративных файлов шаблонов (
.sty/.cls), хранящихся в локальных папках, используйте Локальный каталог в качестве поставщика пакетов и классInputFileSystemDirectory. - Для дистрибутива в одном файле, содержащего основные файлы TeX вместе со всеми необходимыми зависимостями пакетов, используйте ZIP-архив в качестве поставщика пакетов и класс
InputZipDirectory. - Для высокопроизводительного выполнения с предварительно загруженными часто используемыми наборами пакетов, встроенными в файл
.fmt, используйте Предкомпилированный формат в качестве поставщика пакетов иTeXConfig.customFormat().
Загрузка внешних пакетов из локальной папки
Укажите локальный каталог, содержащий пользовательские файлы стилей (.sty) или определения классов (.cls), в качестве рабочего входного каталога для поиска пакетов.
import com.aspose.tex.*;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
public class LoadExternalPackagesFromFileSystem {
public static void main(String[] args) throws Exception {
// Step 1: LaTeX source referencing a custom package 'companylayout.sty'
String latexCode = "\\documentclass{article}\n" +
"\\usepackage{companylayout}\n" + // Custom external package
"\\begin{document}\n" +
"\\customHeader{Monthly Financial Report}\n" +
"Document compiled using external style package.\n" +
"\\end{document}";
ByteArrayInputStream inputStream = new ByteArrayInputStream(latexCode.getBytes(StandardCharsets.UTF_8));
// Step 2: Initialize LaTeX conversion options
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
// Step 3: Set input working directory pointing to folder where 'companylayout.sty' resides
options.setInputWorkingDirectory(new InputFileSystemDirectory("C:/TeXProject/CustomPackages/"));
// Step 4: Set output working directory for compiled PDF
options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));
// Step 5: Run compilation job
TeXJob job = new TeXJob(inputStream, new PdfDevice(), options);
job.run();
System.out.println("LaTeX document compiled successfully using external .sty package.");
}
}Загрузка пакетов и классов из сжатого ZIP-архива
Поместите исходные файлы .tex, пользовательские пакеты .sty и изображения в архив .zip и укажите Aspose.TeX разрешать зависимости пакетов непосредственно из сжатого архива.
import com.aspose.tex.*;
import java.io.FileInputStream;
public class LoadExternalPackagesFromZip {
public static void main(String[] args) throws Exception {
// Step 1: Initialize options for LaTeX format
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
// Step 2: Open ZIP archive containing 'main.tex' and dependent '.sty'/'.cls' files
FileInputStream zipStream = new FileInputStream("C:/TeXProject/TemplateBundle.zip");
options.setInputWorkingDirectory(new InputZipDirectory(zipStream, "packages_subfolder"));
// Step 3: Configure output working directory
options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));
// Step 4: Execute compilation job
TeXJob job = new TeXJob("main", new PdfDevice(), options);
job.run();
zipStream.close();
System.out.println("LaTeX document and external packages loaded from ZIP archive successfully.");
}
}Обработка отсутствующих или стандартных пакетов TeX
Aspose.TeX for Java включает встроенные реализации популярных основных пакетов LaTeX (таких как graphicx, amsmath, amsfonts, color и geometry). Для нестандартных пакетов или пакетов сторонних разработчиков убедитесь, что соответствующие файлы .sty находятся в активном IInputWorkingDirectory.
import com.aspose.tex.*;
import java.io.ByteArrayInputStream;
import java.nio.charset.StandardCharsets;
public class StandardLaTeXPackagesDemo {
public static void main(String[] args) throws Exception {
// Standard packages like amsmath and graphicx are processed natively
String latexCode = "\\documentclass{article}\n" +
"\\usepackage{amsmath}\n" +
"\\usepackage{graphicx}\n" +
"\\begin{document}\n" +
"\\equation: e^{i\\pi} + 1 = 0\n" +
"\\end{document}";
ByteArrayInputStream inputStream = new ByteArrayInputStream(latexCode.getBytes(StandardCharsets.UTF_8));
TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectLaTeX());
options.setOutputWorkingDirectory(new OutputFileSystemDirectory("C:/TeXProject/Output/"));
TeXJob job = new TeXJob(inputStream, new PdfDevice(), options);
job.run();
System.out.println("Document with standard LaTeX packages rendered successfully.");
}
}Установка и настройка
Интегрируйте Aspose.TeX for Java в свой проект с помощью Maven:
Package Manager Console Command
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-tex</artifactId>
<version>Latest</version>
</dependency>
FAQ
1. Как Aspose.TeX находит внешние файлы .sty и .cls?
Когда движок LaTeX встречает \usepackage{name} или \documentclass{name}, он ищет name.sty или name.cls в каталоге, указанном в TeXOptions.setInputWorkingDirectory().
2. Можно ли использовать сложные пакеты макросов, такие как TikZ или PSTricks?
Aspose.TeX поддерживает широкий спектр функций вычисления макросов. Пакеты, использующие нативные расширения ObjectTeX или поддерживаемые графические примитивы, обрабатываются напрямую; для вывода отдельных рисунков также можно использовать PngFigureRenderer или SvgFigureRenderer.
3. Можно ли предварительно загружать ресурсоёмкие пакеты для ускорения пакетной обработки документов?
Да. Можно создать пользовательский файл формата TeX (.fmt), содержащий предварительно скомпилированные пакеты макросов, и загрузить его через TeXConfig.customFormat(), чтобы значительно сократить накладные расходы на выполнение для каждого документа.