Зовнішні пакети LaTeX | Python через .NET

Зовнішні пакети LaTeX

Бібліотека Aspose.TeX постачається з різними поширеними пакетами LaTeX, тому немає необхідності вручну надавати ці пакети механізму TeX. Однак можуть виникнути ситуації, коли для вашого файлу LaTeX потрібен пакунок, який не входить до «набору» пакунків бібліотеки. У таких випадках ви можете спробувати надати необхідні вхідні дані, такі як вихідні файли необхідного пакунка, за допомогою параметра required_input_directory екземпляра класу TeXOptions. Ми розглянемо, як це працює, на двох прикладах.

Спочатку застосуйте ліцензію. Укажіть у ASPOSE_TEX_INPUT_DIR папку, що містить ExternalLaTeXPackages із двома файлами .tex та підкаталогом packages (типово: input). Задайте папку виведення в ASPOSE_TEX_OUTPUT_DIR (типово: output).

Необхідні вхідні дані надаються в розпакованому вигляді (пакет fancybox).

Припустімо, що у нас є такий базовий файл LaTeX під назвою required-input-fs.tex, який є частиною нашого прикладу рішення:

 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}

Третій рядок файлу вказує на те, що для нього потрібен пакунок fancybox, який не включено до “рідної” підтримки. Припустімо, що у нас є вихідний файл для пакета fancybox. Оскільки це простий пакет, що складається з одного файлу, ми можемо розмістити цей файл у будь-якому місці нашої файлової системи та вказати шлях до каталогу наступним чином:

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')

Після того, як ми запустимо завдання TeX із цією опцією (не забудьте налаштувати інші опції за потреби), ми отримаємо вихідний документ, який у цьому випадку є зображенням у форматі PNG.

Вихідний документ

Ось повний вихідний код прикладу:

 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()

Надання необхідних вхідних даних в заархівованій формі (пакет pgfplots)

Тепер припустімо, що у нас є такий файл LaTeX під назвою required-input-zip.tex, який також є простим файлом із нашого прикладу рішення:

 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}

У третьому рядку можна помітити, що для файлу потрібен пакет pgfplots, який не підтримується “нативно”. Знову ж таки, припускаючи, що у нас є вихідні файли для пакета pgfplots, цих файлів досить багато і вони розташовані у двох різних каталогах у каталозі інсталяції будь-якої програми верстки LaTeX. Папку pgfplots можна знайти в обох каталогах \tex\generic і \tex\latex. Щоб бібліотека Aspose.TeX функціонувала правильно, необхідно надати вміст обох цих папок як вхідні дані. Щоб досягти цього, ми хочемо запакувати ці вихідні файли в ZIP-архів. Нижче наведено бажаний макет архіву:

Оформлення архіву

А ось метод, за допомогою якого ми визначаємо доступність цих вихідних файлів:

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.

Після виконання завдання TeX із цією опцією ми отримуємо вихідний документ:

Вихідний документ

Ось повний вихідний код прикладу:

 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()

ПРИМІТКА: Результат було перевірено за допомогою пакета pgfplots версії 1.18.1. У той час як версія пакета pfg, включеного в бібліотеку Aspose.TeX, є 3.1.9a.

Обмеження

Якщо ви натрапите на пакет, розроблений під ядром LaTeX3e і потрібен для вашого файлу LaTeX, навряд чи він працюватиме з бібліотекою Aspose.TeX. Це тому, що бібліотека базується на ядрі LaTeX2e.

Крім того, можуть бути випадки, коли пакет, необхідний для вашого файлу LaTeX, безпосередньо використовує залежні від пристрою примітивні команди, які не підтримуються механізмом Object TeX бібліотеки Aspose.TeX. У таких випадках пакет не працюватиме з бібліотекою.