Andere TeX-Konvertierungsausgabeformate | Java

Es ist höchst unwahrscheinlich, dass Sie derzeit eine TeX-Datei konvertieren möchten, die in einem anderen Format als LaTeX geschrieben ist. Dies ist jedoch aus irgendeinem Grund möglich, wenn Sie die TeX-Sprache und/oder Interna studieren. Wie auch immer, Aspose.TeX für Java ermöglicht Ihnen die Konvertierung von Dateien, die im einfachen TeX-Format geschrieben wurden. Sie können damit auch benutzerdefinierte Formate erstellen und in diesen Formaten gestaltete Dokumente setzen.

Wir beginnen mit der Erstellung eines benutzerdefinierten Formats.

Erstellen eines benutzerdefinierten Formats

Denken Sie daran, dass die Formatdatei ein binärer Speicherauszug des internen Zustands der TeX-Engine ist.

Setzen Sie inputDirectory auf einen Ordner mit customtex.tex und dessen Abhängigkeiten und outputDirectory auf einen vorhandenen Ausgabeordner. Die Formatquelle muss mit \dump enden; dieses Beispiel erstellt dort customtex.fmt. Importieren Sie die in den Beispielen verwendeten Aspose.TeX-Klassen sowie für den Textsatz com.aspose.tex.rendering.XpsDevice, java.io.ByteArrayInputStream und java.nio.charset.StandardCharsets. Die aufrufende Methode muss Ausnahmen behandeln oder deklarieren. Wenden Sie eine Lizenz gemäß dem Lizenzleitfaden an, um Einschränkungen der Evaluierung zu vermeiden.

 1// Create a custom TeX format from customtex.tex, which ends with \dump.
 2// inputDirectory contains customtex.tex; outputDirectory is an existing output folder.
 3TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectIniTeX());
 4InputFileSystemDirectory input = new InputFileSystemDirectory(inputDirectory);
 5OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 6options.setInputWorkingDirectory(input);
 7options.setOutputWorkingDirectory(output);
 8options.setInteraction(Interaction.NonstopMode);
 9options.setTerminalOut(new OutputMemoryTerminal());
10try {
11    TeXJob.createFormat("customtex", options);
12} finally {
13    output.close();
14    input.close();
15}

Wie Sie sehen, ähnelt der Code dem Code zum Konvertieren einer TeX-Datei. Aber es gibt ein paar Unterschiede.

Zunächst verwenden wir hier die Jobkonfiguration TeXConfig.objectIniTeX() . Dies ist eine spezielle Konfiguration, die den Zustand der Engine „unberührt“ belässt, d. h. die internen Parameter haben ihre Standardwerte und der Satz von Steuersequenzen stimmt mit dem Satz von Grundelementen überein. In unserem Beispiel wird die Menge der Grundelemente in dem hier erwähnten Sinne erweitert.

Als nächstes richten wir wie gewohnt die Eingabe- und Ausgabearbeitsverzeichnisse ein. Das Eingabearbeitsverzeichnis muss die Hauptformatquelldatei und alle ihre Abhängigkeiten enthalten.

Und der zweite wesentliche Unterschied ist die Art und Weise, wie wir den Job ausführen. Dieses Mal verwenden wir die statische Methode createFormat() , die zusammen mit den Optionen den Namen der Hauptquelldatei übernimmt, der mit dem Formatnamen identisch sein muss.

Textsatz einer TeX-Datei in Ihrem benutzerdefinierten Format

Da wir nun über unser eigenes TeX-Format verfügen, möchten wir eine in diesem Format geschriebene TeX-Datei setzen. Hier ist der Code:

Setzen Sie formatDirectory auf den Ordner mit der zuvor erstellten Datei customtex.fmt und outputDirectory auf einen vorhandenen Ausgabeordner. Das Beispiel setzt einen eigenständigen Textstrom in typeset-with-custom-format.xps, daher ist kein Eingabearbeitsverzeichnis erforderlich. Legen Sie ein Eingabearbeitsverzeichnis fest, wenn die Haupteingabe Abhängigkeiten wie Bilder hat.

 1// Typeset text using the previously created customtex.fmt format.
 2// formatDirectory contains customtex.fmt; outputDirectory is an existing output folder.
 3InputFileSystemDirectory formatInput = new InputFileSystemDirectory(formatDirectory);
 4FormatProvider formatProvider = new FormatProvider(formatInput, "customtex");
 5OutputFileSystemDirectory output = new OutputFileSystemDirectory(outputDirectory);
 6XpsDevice device = new XpsDevice();
 7TeXJobResult result;
 8try {
 9    TeXOptions options = TeXOptions.consoleAppOptions(TeXConfig.objectTeX(formatProvider));
10    options.setJobName("typeset-with-custom-format");
11    options.setOutputWorkingDirectory(output);
12    options.setInteraction(Interaction.NonstopMode);
13    options.setTerminalOut(new OutputMemoryTerminal());
14    // No input working directory is needed for this self-contained stream.
15    try (ByteArrayInputStream text = new ByteArrayInputStream(
16            "Congratulations! You have successfully typeset this text with your own TeX format!\\end"
17                    .getBytes(StandardCharsets.US_ASCII))) {
18        result = new TeXJob(text, device, options).run();
19    }
20} finally {
21    device.dispose();
22    output.close();
23    formatProvider.close();
24    formatInput.close();
25}

Natürlich müssen wir das Format irgendwie festlegen. Zunächst müssen wir eine Instanz der Klasse FormatProvider erstellen. Dann verwenden wir im Optionskonstruktor die Konfiguration TeXConfig.objectTeX(FormatProvider), die unseren Formatanbieter als Argument verwendet und das Format über den „jungfräulichen“ Zustand der Engine lädt.

Beide Beispiele werden ohne Benutzerinteraktion ausgeführt und erfassen die Terminalausgabe im Speicher. Das Textsatzbeispiel schließt nach dem Auftrag den Eingabestrom, gibt das XPS-Gerät frei und schließt das Arbeitsverzeichnis und den Formatanbieter. Diese Funktionen werden zuvor in diesem Leitfaden erläutert.

Textsatz einer TeX-Datei im Plain-TeX-Format

Wenn wir TeXConfig.objectTeX() ohne Formatanbieter verwenden, lädt die Engine das Standardformat, das im vierten Sinne Object TeX ist. Wenn Sie also eine TeX-Datei im einfachen TeX-Format geschrieben haben, können Sie sie auf diese Weise in jedes unterstützte Zielformat konvertieren.