Содержание


Каталог классов и стилей LaTeX. Част11. Программирование в среде LaTeX

Comments

При работе над документом может возникнуть ситуация, когда уже имеющихся в LaTeX возможностей (очень обширных, как мы узнали из 10 предыдущих статей) всё-таки окажется недостаточно.

В этом случае можно воспользоваться "техническими" пакетами LaTeX и запрограммировать собственное расширение для выполнения требуемых действий. А если оно получится удобным и востребованным, то можно будет даже опубликовать его, чтобы сделать доступным и для других пользователей LaTeX.

Контроль над выводом сообщений в процессе компиляции

Если вы решили заняться разработкой собственных расширений для LaTeX, то в процессе наверняка возникнет проблема с отладкой пакета и исправлением допущенных ошибок. Возможности LaTeX в этом плане довольно ограничены и в основном сводятся к увеличению количества информации, выводимой в ходе компиляции документов.

  • trace из пакета tools — этот стиль позволяет увеличить количество информации, которая будет выводиться в предупреждениях в ходе компиляции.
  • show2e – ещё один пакет для облегчения поиска ошибок в LaTeX документе.
  • silence – этот пакет напротив отвечает за "подавление" сообщений, чтобы не пропустить действительно важные.

Счётчики и переменные

Разработка собственной функциональности чаще всего начинается с объявления необходимых переменных.

  • dcounter из пакета ncctools — стиль для создания счётчиков с возможностью настройки различных параметров.
  • memory — пакет для определения сложных объектов и их массивов.
  • namespc — пакет для определения пространств имён, как в C++.
  • aliascnt из пакета oberdiek — стиль для добавления ссылок на счётчик.
  • chngcntr — позволяет добавить или убрать зависимость после определения счётчика.
  • alphalph из пакета oberdiek — позволяет заменять числа символами, например, когда необходимо использовать нестандартную систему счисления.
  • fmtcount — представляет различные форматы (двоичный, восьмеричный, шестнадцатеричный и так далее) для отображения счётчиков.
  • clefval — позволяет создавать связанные пары "ключ/значение" с доступом к значению по ключу.
  • engord из пакета oberdiek — добавляет правильные английские суффиксы к числительным.
  • zahl2string, numnamefnumprint — эти пакеты при передаче числа формируют соответствующую строку текста на английском или немецком языке.
  • eemeir, he-she — пакеты для идентификации пола персоны, к которой относится текст шаблона; не могут использоваться для текстов на кириллице.
  • emarks — доступ к регистру по имени, а не по числу.
  • fwlw — предоставляет переменные, в которых хранятся первое слово на этой и следующей страницах, а также последнее слово на этой.
  • regcount — записывает в log-файл информацию о значении регистров LaTeX.
  • sublabel из пакета preprint — позволяет счётчикам иметь дополнительную поднумерацию, то есть 4a, 4b, 4c и т.д.

Строки, списки и массивы

Массивы или другие структуры данных также являются одним из ключевых компонентов любой программы.

  • arrayjobx — этот пакет добавляет в LaTeX поддержку массивов и операций над ними.
  • arraysort, forarray – другие пакеты для создания и обработки массивов.
  • bitset из пакета oberdiek — определяет вектор битов.
  • readarray — пакет для считывания двумерных и трёхмерных массивов.
  • coollist, gtl — пакеты, предлагающие различные операции со списками.
  • coolstr — пакет для работы со строками (поддерживается только латинский алфавит); в пакете определена команда \substr, извлекающая подстроку от и до указанных позиций символов из строки, переданной в качестве параметра.
  • stringstrings — набор макросов для работы со строками.
  • substr — пакет для поиска подстроки в строке.
  • fifo-stack — реализация FIFO стэка.
  • ran_toks — пакет случайным образом перемешивает объекты в списке.
  • xstring — набор инструментов для манипуляций со строками.
  • ted — аналог sed, но для объектов LaTeX.

Вычисления с использованием LaTeX

В одной из предыдущих статей рассказывалось, как можно использовать LaTeX для подготовки математических статей, но как ни странно LaTeX можно использовать и непосредственно для вычислений.

  • bigintcalc из пакета oberdiek— пакет для операций с большими целыми числами.
  • binhex из kastrup — перевод из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления.
  • calc — из пакета tools – пакет позволяет выполнять арифметические операции с длинами и счётчиками.
  • calculator — использование LaTeX в качестве научного калькулятора, поддерживаются даже операции с векторами и матрицами третьего ранга.
  • fltpoint — вычисления с плавающей точкой.
  • refcount из пакета oberdiek — предоставляет набор макросов, позволяющих выполнять операцию присваивания между счётчиками.
  • fp — пакет, включающий тригонометрические функции и операторы для высокоточных вычислений с фиксированной запятой.
  • lcg — генератор псевдослучайных чисел.
  • tabularcalc — создание таблицы, содержимое которой вычисляется по определённым формулам.

Макросы

Программирование в LaTeX начинается с определение своего личного макроса.

  • newcommand — пакет содержит Python-сценарий newcommand.py, который создаёт LaTeX-код для создания новой команды по заданной спецификации.
  • makecmds — определяет новые макросы \makecommand, \makeenvironment и \provideenvironment, позволяющие задать новую команду, если она до этого отсутствовала, или переопределить, если она уже была определена ранее.
  • optparams из пакета sauerj — создание новой команды с несколькими необязательными параметрами, но не более девяти.
  • twoopt из пакета oberdiek — позволяет создавать новые команды с двумя необязательными параметрами, которые имеют значения по умолчанию.
  • cmdstring — определяет макрос \cmdstring, позволяющий распечатать имя другого макроса.
  • cmdtrack — добавляет в вывод latex информацию об использовании команд вида \newcommand.
  • collectbox — механизм передачи параметров при создании нового макроса без описания всех передаваемых параметров.
  • keycommand — интерфейс для определения команды, в которую встроен механизм разбора пар параметров "ключ=значение".
  • environ — альтернативный механизм определения окружения по примеру определения новых макросов.
  • etextools — богатый набор инструментов с качественной документацией, включает макросы для работы со списками, строками, символами, управляющими последовательностями, макросами и числами.
  • etoolbox — ещё один набор инструментов для разработки собственных расширений.
  • lmake — пакет позволяет единообразно создавать группу команд для упрощения набора.
  • makerobust из oberdiek — позволяет превратить "непроверенную" (англ. fragile) команду в "проверенную" (англ. robust).
  • multienv — определяет макросы для создания окружений, принимающих параметры вида "ключ=значение".
  • nameauth — если в тексте используется много имён, то удобнее будет задать для них сокращения и работать уже с этими сокращениями.
  • noconflict — разрешение конфликтов из-за определения макросов с одинаковыми именами; эту же проблему решает стиль etexcmds из oberdiek.
  • parselines — пакет определяет окружение, в котором в начале и в конце каждой строки текста выполняются команды, определённые пользователем.
  • robustcommand — пакет для создания "проверенных" команд.
  • showexpl — пакет печатает код LaTeX и результат его выполнения, может использоваться для подготовки документации для пакетов.
  • stringenc из oberdiek — перекодировка строки из одной кодировки в другую.
  • toolbox — пакет для создания новых типов предметных указателей, глоссариев и макросов.
  • trimspace — ликвидация пробельных символов.
  • xargs — определение макроса с необязательными параметрами.
  • xspace из пакета tools — определяет команду \xspace, которая при необходимости добавляет текстовый пробел в конце команды.
  • xpeek — позволяет определять команды, которые по примеру, например, xspace будут "подглядывать" немного вперёд и действовать в соответствии с тем, что они "увидели".

Условные выражения и циклы

Автоматизация любой операции начинается с объявления циклов, а учёт внешнего окружения с объявления условий.

  • ifdraft из пакета oberdiek — предоставляет набор условных выражений для определения режимов документа draft (черновик) или final (окончательная версия).
  • ifmtarg из пакета ltxmisc — условный оператор для определения существования аргумента; аргумент считается отсутствующим, если представляет собой ноль или более пробелов.
  • ifpdf из пакета oberdiek — предоставляет условное выражение \ifpdf для определения типа компилятора latex или pdflatex.
  • ifthen — стандартный макропакет, в котором определены команды \ifthenelse (условный переход) и \whiledo (цикл).
  • xifthen – усовершенствованная версия ifthen.
  • ifmtarg — пакет проверяет, является ли аргумент пустой строкой.
  • ifnextok — пакет проверяет символ на соответствие искомому значению.
  • ifoddpage — определяет тип страницы чётная/нечётная.
  • ifplatform — позволяет проверить тип платформы, на которой собирается документ.
  • iftex — ещё один пакет для определения типа компилятора, различающий pdflatex, xetex и luatex.
  • ifthenx — расширение с дополнительными условиями для стандартного пакета ifthen.
  • ifxetex — проверка того, что используется компилятор xetex.
  • forloop — определяет пользовательскую команду \forloop.
  • labelcas — проверка существования метки в документе.
  • loops — цикл по csv, nsv/tsv спискам.
  • multido — определяет оператор цикла \multido.
  • stdclsdv — набор условных выражений для определения используемого класса.
  • xfor — модификация команды \for так, что её можно прервать.

Операции с датами и временем

В LaTeX присутствует большое число пакетов для манипуляции временными значениями, используемыми внутри документа

  • advdate из пакета ltxmisc — набор макросов, позволяющий добавить несколько дней к текущему времени, что влияет, например, на вывод команды \today.
  • calcage — вычисление возраста в годах или днях.
  • datetime, isodate — пакеты для управления форматом вывода даты и времени.
  • eukdate — позволяет выбрать формат представления даты для команды \today.
  • weekday — пакет для вычисления дня недели по дате.

Использование внешних инструментов и языков

Если возможностей для программирования, доступных в LaTeX, оказывается недостаточно, то можно воспользоваться настоящими языками программирования, которые можно интегрировать с LaTeX.

  • bashful — пакет для исполнения сценариев bash во время компиляции.
  • cweb-latex — использование LaTeX-нотации для документирования CWEB программ.
  • lisp-on-tex — интерпретатор LISP, написанный средствами TeX, может использоваться прямо в документе.
  • perltex — расширение PerlTeX позволяет использовать возможности Perl в среде LaTeX.
  • pythontex, python — эти пакеты позволяют выполнить код, написанный на Python, и вывести результат на печать.
  • rterface — пакет с интерфейсом к языку программирования R, специально разработанному для статистиков.
  • sasnrdisplay — интерфейс к SAS, коммерческому аналогу R.

Переопределение функциональности

В большинстве случаев нет необходимости полностью переписывать стандартное поведение LaTeX, достаточно будет только "изменить" или "дополнить" отдельные аспекты функциональности.

  • atbegshi из пакета oberdiek — пакет позволяет исполнить пользовательский код, перед тем как страница начинает обрабатываться.
  • afterpage из tools — позволяет отложить исполнение команды до перехода на следующую страницу.
  • atveryend из пакета oberdiek — возможность исполнения пользовательского кода на момент окончания документа.
  • auxhook из пакета oberdiek — исполнение пользовательского кода в момент начала записи файла с расширением aux.
  • blkcntrl из пакета frankenstein — возможность "переопределить" функциональность сносок и некоторых блочных окружений.
  • everypage — исполнение команд в начале каждой страницы.
  • everyhook — набор средств для "перехвата" управления в определённые моменты: \everypar (начало параграфа), \everymath (начало математической формулы), \everydisplay (сразу после выполнения команды \displaymath), \everyhbox (начало \hbox), \everyvbox (начало \vbox) и \everycr (после \cr).
  • filehook — набор инструментов для переопределения функциональности \input, \include и \InputIfFileExists.

Разбор параметров

Чем больше параметров может принять на вход макрос, тем более гибким получается его реализация, благодаря возможности воспринимать контекст собственного окружения.

  • keyval из graphics — пакет для разбора списков параметров вида "ключ=значение".
  • xkeyval — улучшенная версия пакета keyval, позволяет передавать и принимать в качестве параметра список пар "ключ=значение".
  • keyreader – дополнительные возможности для xkeyval.
  • ltxkeys — улучшенная версия xkeyval.
  • keyval2e — упрощенная версия ltxkeys.
  • pgfkeys из пакета pgf — ещё один пакет с богатыми возможностями для разбора параметров.
  • processkv из пакета sauerj — пакет для разбора списка пар "ключ=значение", при этом при разборе каждой пары может выполняться определённый пользователем макрос.
  • tokenizer — позволяет разбивать текстовые списки на элементы.
  • skeyval — в документации написано, что это смесь лучших особенностей xkeyval и pgfkeys.

Файлы и каталоги

Возможности для работы с файлами и каталогами могут понадобиться при создании составных документов.

  • catchfile из oberdiek — этот пакет передаёт содержимое файла в макрос.
  • currfile — набор макросов, содержащих информацию об имени, расширении и каталоге файла, загруженного с помощью команд \input или \include.
  • datatool — набор макросов для работы с текстовыми базами данных.
  • delimtxt — чтение табличных файлов с каким-то определённым символом в качестве разделителя между полями.
  • directory — пакет, использующий возможности LaTeX и BibTeX для организации базы данных из адресной книжки.
  • download — закачка файлов из Интернет.
  • fink — доступ к имени файла, который компилируется на момент исполнения команды \finkfile.
  • filemod — предоставляет макросы для чтения и сравнения времени модификации файлов.
  • extract — в пакете определены окружения, позволяющие во время компиляции записать указанный текст в файл.
  • filecontents — запись LaTeX-кода в файл с возможностью включить этот файл с помощью команды \include.
  • inputtrc — добавляет в вывод latex при компиляции информацию о файлах, вставленных через \input, маркируя отступами уровень вложенности вставки.
  • inversepath — получение инверсивного пути от файла до текущего документа.
  • getfiledate — позволяет получить время модификации для указанного файла.
  • newfile — пользовательский интерфейс для чтения/записи файлов.
  • nicefilelist — расширение стандартной команды \listfiles, выводящей список стилей и классов, используемых при компиляции документа.
  • verbatimcopy — копирование файлов.

Пакеты LaTeX

Если вам кажется, что созданная функциональность может оказаться полезной и для других пользователей, то можно оформить пакет и выложить его на Web-сайт каталога пакетов CTAN.

  • afterpackage из пакета ncctools — позволяет добавить команды к пакету, после того как он уже загружен.
  • cnltx — специализированный класс для подготовки документации для пакета LaTeX.
  • ctanify — инструмент, который поможет подготовить пакета для загрузки на CTAN.
  • doc — пакет для создания новых пакетов, который позволяет держать код пакета и документацию в одном файле (грамотное программирование).
  • docx, xdoc – пакеты для расширения возможностей пакета doc.
  • colordoc – выделение цветом синтакиса LaTeX в документации.
  • docmfp и documentation – эти пакеты позволяют использовать функциональность doc для языков программирования, отличных от LaTeX.
  • docstrip — пакет, который готовит код и документацию, созданные с помощью пакета doc, к реальному использованию.
  • codedoc — аналог механизма DocStrip.
  • diagnose — набор макросов для диагностирования ошибок.
  • dialogl — набор макросов для создания интерактивных LaTeX-сценариев.
  • export — экспорт/импорт переменных LaTeX во внешний файл.
  • filedate, fileinfo и zwgetfdate — пакеты для получения информации о дате выпуска загруженного пакета.
  • makedtx — пакет для автоматизации создания пакетных dtx-файлов.
  • msg — пакет для локализации сообщений других пакетов.
  • pkgloader — загрузка группы пакетов, при этом определяется по возможности правильный порядок для разрешения конфликтов.
  • somedefs из пакета tools — позволяет написать пакет, для которого пользователь может указать, что именно из всей функциональности пакета будет использоваться; потенциально этот пакет может уменьшить объём памяти, используемой в ходе компиляции.

Заключение

В этой статье были рассмотрены возможности, которые используются для создания, отладки и публикации собственных расширений для LaTeX.

На этом наш цикл статей заканчивается, и мы надеемся, что читатели смогли оценить богатейшие возможности, предоставляемые системой LaTeX для подготовки и публикации различных документов.


Ресурсы для скачивания


Похожие темы


Комментарии

Войдите или зарегистрируйтесь для того чтобы оставлять комментарии или подписаться на них.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=Open source
ArticleID=972535
ArticleTitle=Каталог классов и стилей LaTeX. Част11. Программирование в среде LaTeX
publish-date=05282014