在 Java 中加载外部 LaTeX 包和类

使用 Aspose.TeX for Java 集成外部宏包(.sty)和自定义文档类(.cls),扩展 LaTeX 文档编译功能。无需完整安装 TeX Live 或 MiKTeX,即可从本地文件系统目录、压缩 ZIP 存档或自定义内存流中动态解析包依赖项。

 

编译包含 \usepackage{custompackage}\documentclass{customclass} 等命令的 LaTeX 文档时,引擎会使用已配置的 IInputWorkingDirectory 实例搜索相应的 .sty.cls 文件。

以下是包解析来源:

  • 对于加载存储在本地文件夹中的公司标准模板文件(.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 包(例如 graphicxamsmathamsfontscolorgeometry)的内置实现。对于非标准或第三方包,请确保相应的 .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.");
    }
}

安装和设置

使用 Maven 将 Aspose.TeX for Java 集成到您的项目中:

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} 时,它会在为 TeXOptions.setInputWorkingDirectory() 提供的目录中查找 name.sty 或 name.cls。

2. 可以使用 TikZ 或 PSTricks 等复杂宏包吗?

Aspose.TeX 支持广泛的宏求值功能。依赖原生 ObjectTeX 扩展或受支持绘图原语的宏包会直接进行求值;对于独立图形输出,也可以使用 PngFigureRendererSvgFigureRenderer

3. 可以预加载大型宏包以加快批量文档处理吗?

可以。您可以创建包含预编译宏包的自定义 TeX 格式文件(.fmt),并通过 TeXConfig.customFormat() 加载该文件,从而显著减少每个文档的执行开销。