Caricare pacchetti e classi LaTeX esterni in Java

Estendi le funzionalità di compilazione dei documenti LaTeX integrando pacchetti di macro esterni (.sty) e classi di documenti personalizzate (.cls) utilizzando Aspose.TeX for Java. Risolvi dinamicamente le dipendenze dei pacchetti da directory del file system locale, archivi ZIP compressi o stream di memoria personalizzati senza dover installare completamente TeX Live o MiKTeX.

 

Durante la compilazione di documenti LaTeX contenenti comandi come \usepackage{custompackage} o \documentclass{customclass}, il motore cerca i file .sty o .cls corrispondenti utilizzando le istanze IInputWorkingDirectory configurate.

Di seguito sono riportate le successive origini per la risoluzione dei pacchetti:

  • Per caricare file modello standard aziendali (.sty/.cls) archiviati in cartelle locali, utilizzare Directory locale come provider dei pacchetti e la classe InputFileSystemDirectory.
  • Per una distribuzione in un singolo file contenente i file TeX principali insieme a tutte le dipendenze dei pacchetti necessarie, utilizzare Archivio ZIP come provider dei pacchetti e la classe InputZipDirectory.
  • Per un’esecuzione ad alte prestazioni con set di pacchetti precaricati e utilizzati frequentemente, integrati in un file .fmt, utilizzare Formato precompilato come provider dei pacchetti e TeXConfig.customFormat().

Caricare pacchetti esterni da una cartella locale

Specificare una directory locale contenente file di stile personalizzati (.sty) o definizioni di classi (.cls) come directory di lavoro di input per la ricerca dei pacchetti.

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.");
    }
}

Caricare pacchetti e classi da un archivio ZIP compresso

Inserire i file sorgente .tex, i pacchetti .sty personalizzati e le immagini in un archivio .zip, quindi indicare ad Aspose.TeX di risolvere le dipendenze dei pacchetti direttamente dall’archivio compresso.

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.");
    }
}

Gestire i pacchetti TeX mancanti o standard

Aspose.TeX for Java include implementazioni integrate dei più diffusi pacchetti LaTeX di base (come graphicx, amsmath, amsfonts, color e geometry). Per i pacchetti non standard o di terze parti, assicurarsi che i file .sty corrispondenti siano inseriti nell’IInputWorkingDirectory attivo.

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.");
    }
}

Installazione e configurazione

Integra Aspose.TeX for Java nel tuo progetto utilizzando 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. Come trova Aspose.TeX i file .sty e .cls esterni?

Quando il motore LaTeX incontra \usepackage{name} o \documentclass{name}, cerca name.sty o name.cls nella directory fornita a TeXOptions.setInputWorkingDirectory().

2. Posso utilizzare pacchetti di macro complessi come TikZ o PSTricks?

Aspose.TeX supporta un’ampia gamma di funzionalità di valutazione delle macro. I pacchetti che si basano su estensioni native ObjectTeX o su primitive di disegno supportate vengono valutati direttamente; per l’output di figure autonome, è inoltre possibile utilizzare PngFigureRenderer o SvgFigureRenderer.

3. È possibile precaricare pacchetti pesanti per velocizzare l’elaborazione batch dei documenti?

Sì. È possibile creare un file di formato TeX personalizzato (.fmt) contenente pacchetti di macro precompilati e caricarlo tramite TeXConfig.customFormat() per ridurre significativamente l’overhead di esecuzione per singolo documento.