Введення/виведення LaTeX
Файл LaTeX
Якщо у нас є файл TeX, який має таку структуру, ми називатимемо цей файл файлом LaTeX:
1\documentclass{<a document class>}
2% Preamble
3...
4\begin{document}
5% Document body
6...
7\end{document}де <a document class> — це ім’я
document class, який є вхідним файлом TeX, який визначає зовнішній вигляд сторінок і макросів вихідного документа, які найбільше підходять для певного типу документа.
Чесно кажучи, ви можете вставити примітивні керуючі послідовності перед \documentclass{}, наприклад \nonstopmode тощо. Але кожен макрос LaTeX перевіряє, чи він розташований у правильній частині файлу.
У контексті роботи з файлами LaTeX про TeX input і output варто зауважити кілька речей.
Вихідний файл LaTeX
Типове завдання LaTeX створює допоміжний вихідний файл із назвою
назва завдання і розширенням .aux. Цей файл зазвичай містить довідкові дані, які система збирає під час виконання завдання, якщо ви, скажімо, встановлюєте мітки для математичних формул (рівнянь), а потім посилаєтеся на них десь у тексті. Якщо ви не використовуєте нічого подібного, цей файл містить лише керуючу послідовність \relax (яка є одним із примітивів TeX). Так що не дивуйтеся.
Хоча примітиви \openout, \write і \closeout не заборонені, пакети є найкращим місцем для них. Тому краще використовувати їх у власних власних пакетах, якщо ви їх розробляєте.
Інші частини виведення є довільними, також дотримуються загальної концепції TeX output і залежать від того, що саме має робити ваш TeX-файл (програма), які пакети (див. нижче) ви використовуєте тощо.
Вхідний файл LaTeX
Вищезазначений файл .aux водночас є обов’язковою частиною введення в LaTeX. Алгоритмічно LaTeX не може виконати завдання, пов’язані з посиланнями, за один запуск, тому ту саму роботу потрібно виконати двічі — перший раз для збору даних, другий раз для використання цих даних. Багато програмних систем на базі LaTeX запускають завдання LaTeX двічі автоматично. Спойлер: в API Aspose.TeX є параметр, який дозволяє нам контролювати цю поведінку.
Ще одна обов’язкова частина — клас документа. Файл класу документа, у свою чергу, може неявно залежати від інших файлів, які, таким чином, також включені у вхідні дані LaTeX.
Якщо ви хочете використовувати функції, що виходять за рамки базового LaTeX і його класів документів, але підтримуються певною реалізацією механізму TeX, тоді ви зазвичай використовуєте пакет, про який ви повинні повідомити механізм у преамбулі. Пакет LaTeX — це файл або група файлів, зібраних під одним іменем, які надають такі функції. Щоб сповістити движок, вам потрібно використати команду \usepackage з назвою пакета та параметрами, які можна пропустити, якщо пакет визначає такі.
Наприклад,
1\usepackage[a6paper,landscape]{geometry}Хоча примітиви \input, \openin, \read і \closein не заборонені, пакети є найкращим місцем для них. Тому краще використовувати їх у власних користувацьких пакетах, якщо ви їх розробляєте.
Інші частини введення є довільними, також дотримуються загальної концепції TeX input і залежать від того, що саме повинен робити ваш TeX-файл (програма), які пакети ви використовуєте тощо.
Роль абстракції інтерфейсів (IInputWorkingDirectory та IOutputWorkingDirectory)
Традиційні рушії TeX за своєю суттю тісно пов’язані з файловою системою локальної операційної системи, розглядаючи файли як абсолютні або відносні шляхи на диску. Aspose.TeX долає це застаріле обмеження, запроваджуючи надійний рівень абстракції, побудований навколо двох основних інтерфейсів: IInputWorkingDirectory та IOutputWorkingDirectory. Таке роз’єднання дозволяє:
- Обробляти документи повністю в оперативній пам’яті за допомогою потоків даних (streams).
- Працювати безпосередньо з архівами, зчитуючи дані з ZIP-потоків без попереднього розпакування файлів на диск.
- Забезпечувати потокобезпеку в серверних застосунках, що обслуговують багатьох користувачів (multi-tenant), шляхом ізоляції кожного завдання з верстки в окремому екземплярі віртуальної робочої директорії.
Чому абстракція інтерфейсів важлива для розробників
У сучасних корпоративних застосунках — таких як хмарні мікросервіси або черги фонових завдань — прив’язка до фізичних шляхів на диску створює серйозні перешкоди:
- Якщо кілька потоків читають дані з однієї фізичної директорії або записують у неї, виникають конфлікти, або ж потоки можуть перезаписувати тимчасові файли (наприклад,
.aux,.log) чи вихідні файли одне одного. - Запис проміжних ресурсів або динамічних даних (наприклад, рядків із бази даних) на диск лише для того, щоб рушій верстки міг їх зчитати, призводить до зниження продуктивності.
- У хмарних середовищах (наприклад, у контейнерах Docker або безсерверних функціях) файлові системи часто доступні лише для читання, або ж доступ до сховища суттєво обмежений.
Завдяки абстрагуванню вводу та виводу через інтерфейси, Aspose.TeX дозволяє розробникам перенаправляти файлові операції в потоки пам’яті, ZIP-архіви, бази даних або власні віртуальні файлові системи — і все це без жодних змін у основній логіці верстки.