Externe LaTeX-Pakete | Python

Externe LaTeX-Pakete

Die Aspose.TeX-Bibliothek enthält eine Vielzahl gängiger LaTeX-Pakete, sodass diese Pakete nicht manuell für die TeX-Engine bereitgestellt werden müssen. Es kann jedoch Situationen geben, in denen Ihre LaTeX-Datei ein Paket erfordert, das nicht im „Paketpaket“ der Bibliothek enthalten ist. In solchen Fällen können Sie versuchen, die erforderliche Eingabe, beispielsweise die Quelldateien des erforderlichen Pakets, über die Option required_input_directory der Klasseninstanz TeXOptions bereitzustellen. Wir werden anhand von zwei Beispielen untersuchen, wie das funktioniert.

Wenden Sie zuerst eine Lizenz an. ASPOSE_TEX_INPUT_DIR muss auf den Ordner zeigen, der ExternalLaTeXPackages mit den beiden .tex-Dateien und dem Unterverzeichnis packages enthält (Standard: input). Setzen Sie ASPOSE_TEX_OUTPUT_DIR auf den Ausgabeordner (Standard: output).

Erforderliche Eingaben in entpackter Form (das „fancybox“-Paket).

Angenommen, wir haben die folgende grundlegende LaTeX-Datei mit dem Namen „required-input-fs.tex“, die Teil unserer Beispiellösung ist:

 1\documentclass{article}
 2\usepackage[a6paper,landscape]{geometry}
 3\usepackage{fancybox}
 4\begin{document}
 5Test: \fbox{
 6  \begin{Bitemize}[b]
 7  \item First item
 8  \item A second one\\ on two lines
 9  \item(2pt) A third with extra space
10  \end{Bitemize}
11}
12\par\bigskip
13Test: \fbox{
14  \begin{Beqnarray}[t]
15  y & = & x^2 \\
16  a^2 + 2ab + b^2 & = & (a + b)^2 \\
17  \int_0^\infty e^{-ax} dx & = & \frac{1}{a}
18  \end{Beqnarray}
19}
20\end{document}

Die 3. Zeile der Datei weist darauf hin, dass das Paket „fancybox“ erforderlich ist, das nicht in der „nativen“ Unterstützung enthalten ist. Nehmen wir an, wir haben die Quelldatei für das Paket „fancybox“. Da es sich um ein einfaches Paket handelt, das aus einer einzelnen Datei besteht, können wir diese Datei an einer beliebigen Stelle in unserem Dateisystem platzieren und den Verzeichnispfad wie folgt angeben:

1from aspose.tex.io import InputFileSystemDirectory
2
3# Configure an existing TeXOptions instance.
4options.required_input_directory = InputFileSystemDirectory('path-to-directory-where-fancybox.sty-located')

Sobald wir einen TeX-Job mit dieser Option ausführen (denken Sie daran, die anderen Optionen nach Bedarf anzupassen), erhalten wir das Ausgabedokument, in diesem Fall ein PNG-Bild.

Ausgabedokument

Hier ist der vollständige Quellcode für das Beispiel:

 1# Load an external LaTeX package from a directory.
 2import os
 3from pathlib import Path
 4from os import path
 5from io import BytesIO
 6from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 7from aspose.tex.io import InputFileSystemDirectory, InputZipDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 8from aspose.tex.presentation.image import ImageDevice, PngSaveOptions
 9
10output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
11output_dir.mkdir(parents=True, exist_ok=True)
12input_dir = Path(os.environ.get("ASPOSE_TEX_INPUT_DIR", "input")).resolve() / "ExternalLaTeXPackages"
13# Create conversion options for Object LaTeX format upon Object TeX engine extension.
14options = TeXOptions.console_app_options(TeXConfig.object_latex)
15options.interaction = Interaction.NONSTOP_MODE
16options.terminal_out = OutputMemoryTerminal()
17# Specify a file system working directory for the output.
18options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
19# Specify a file system working directory for the required input.
20# The directory containing packages may be located anywhere.
21options.required_input_directory = InputFileSystemDirectory(path.join(str(input_dir), "packages"))
22# Initialize the options for saving in PNG format.
23options.save_options = PngSaveOptions()
24# Run LaTeX to PNG conversion.
25TeXJob(path.join(str(input_dir), "required-input-fs.tex"), ImageDevice(True), options).run()

Bereitstellung erforderlicher Eingaben in archivierter Form (Paket „pgfplots“)

Angenommen, wir haben die folgende LaTeX-Datei mit dem Namen „required-input-zip.tex“, bei der es sich ebenfalls um eine einfache Datei aus unserer Beispiellösung handelt:

 1\documentclass{article}
 2\usepackage[margin=0.25in]{geometry}
 3\usepackage{pgfplots}
 4\pgfplotsset{width=10cm,compat=1.18}
 5\begin{document}
 6
 7First example is 2D and 3D math expressions plotted side-by-side.
 8
 9%Here begins the 2D plot
10\begin{tikzpicture}
11\begin{axis}
12\addplot[color=red]{exp(x)};
13\end{axis}
14\end{tikzpicture}
15%Here ends the 2D plot
16\hskip 5pt
17%Here begins the 3D plot
18\begin{tikzpicture}
19\begin{axis}
20\addplot3[
21    surf,
22]
23{exp(-x^2-y^2)*x};
24\end{axis}
25\end{tikzpicture}
26%Here ends the 3D plot
27
28\end{document}

In der dritten Zeile ist zu erkennen, dass die Datei das Paket „pgfplots“ erfordert, das nicht „nativ“ unterstützt wird. Auch hier gilt: Vorausgesetzt, dass wir über die Quelldateien für das Paket „pgfplots“ verfügen, sind diese Dateien recht zahlreich und befinden sich in zwei verschiedenen Verzeichnissen im Installationsverzeichnis jeder LaTeX-Satzanwendung. Der Ordner „pgfplots“ befindet sich sowohl im Verzeichnis „\tex\generic“ als auch im Verzeichnis „\tex\latex“. Damit die Aspose.TeX-Bibliothek ordnungsgemäß funktioniert, ist es notwendig, den Inhalt dieser beiden Ordner als Eingabe bereitzustellen. Um dies zu erreichen, möchten wir diese Quelldateien in ein ZIP-Archiv packen. Nachfolgend finden Sie das gewünschte Layout des Archivs:

Layout des Archivs

Und hier ist die Methode, mit der wir den Zugriff auf diese Quelldateien definieren:

1from aspose.tex.io import InputZipDirectory
2
3# Configure an existing TeXOptions instance and run the job while the stream is open.
4with open("path-to-zip-with-pgfplots-sources", "rb") as zip_stream:
5    options.required_input_directory = InputZipDirectory(zip_stream, "")
6    # Run TeXJob here, as shown in the complete example below.

Nachdem wir einen TeX-Job mit dieser Option ausgeführt haben, erhalten wir das Ausgabedokument:

Ausgabedokument

Hier ist der vollständige Quellcode für das Beispiel:

 1# Load external LaTeX packages from a ZIP archive.
 2import os
 3from pathlib import Path
 4from os import path
 5from io import BytesIO
 6from aspose.tex import Interaction, TeXConfig, TeXJob, TeXOptions
 7from aspose.tex.io import InputFileSystemDirectory, InputZipDirectory, OutputFileSystemDirectory, OutputMemoryTerminal
 8from aspose.tex.presentation.image import ImageDevice, PngSaveOptions
 9
10output_dir = Path(os.environ.get("ASPOSE_TEX_OUTPUT_DIR", "output")).resolve()
11output_dir.mkdir(parents=True, exist_ok=True)
12input_dir = Path(os.environ.get("ASPOSE_TEX_INPUT_DIR", "input")).resolve() / "ExternalLaTeXPackages"
13# Create conversion options for Object LaTeX format upon Object TeX engine extension.
14options = TeXOptions.console_app_options(TeXConfig.object_latex)
15options.interaction = Interaction.NONSTOP_MODE
16options.terminal_out = OutputMemoryTerminal()
17# Specify a file system working directory for the output.
18options.output_working_directory = OutputFileSystemDirectory(str(output_dir))
19# Initialize the options for saving in PNG format.
20options.save_options = PngSaveOptions()
21# Create a file stream for the ZIP archive containing the required package.
22# The ZIP archive may be located anywhere.
23with open(path.join(str(input_dir), "packages/pgfplots.zip"), "rb") as zip_stream:
24    # Specify a ZIP working directory for the required input.
25    options.required_input_directory = InputZipDirectory(zip_stream, "")
26
27    # Run LaTeX to PNG conversion.
28    TeXJob(path.join(str(input_dir), "required-input-zip.tex"), ImageDevice(True), options).run()

HINWEIS: Das Ergebnis wurde mit dem Paket pgfplots, Version 1.18.1, überprüft. Die Version des pfg-Pakets, das in der Aspose.TeX-Bibliothek enthalten ist, ist 3.1.9a.

Einschränkungen

Wenn Sie auf ein Paket stoßen, das unter dem LaTeX3e-Kernel entwickelt wurde und von Ihrer LaTeX-Datei benötigt wird, ist es unwahrscheinlich, dass es mit der Aspose.TeX-Bibliothek funktioniert. Dies liegt daran, dass die Bibliothek auf dem LaTeX2e-Kernel basiert.

Darüber hinaus kann es Fälle geben, in denen ein von Ihrer LaTeX-Datei benötigtes Paket direkt geräteabhängige primitive Befehle verwendet, die von der Object TeX-Engine der Aspose.TeX-Bibliothek nicht unterstützt werden. In solchen Fällen funktioniert das Paket nicht mit der Bibliothek.