โหลดแพ็กเกจและคลาส 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 แบบ native หรือ primitive สำหรับการวาดที่รองรับจะได้รับการประเมินโดยตรง และสำหรับเอาต์พุตรูปภาพแบบแยกเดี่ยว สามารถใช้ PngFigureRenderer หรือ SvgFigureRenderer ได้เช่นกัน

3. สามารถโหลดแพ็กเกจขนาดใหญ่ล่วงหน้าเพื่อเพิ่มความเร็วในการประมวลผลเอกสารแบบแบตช์ได้หรือไม่?

ได้ คุณสามารถสร้างไฟล์รูปแบบ TeX ที่กำหนดเอง (.fmt) ซึ่งมีแพ็กเกจแมโครที่คอมไพล์ไว้ล่วงหน้า และโหลดผ่าน TeXConfig.customFormat() เพื่อลดค่าใช้จ่ายในการทำงานต่อเอกสารได้อย่างมาก