LXF94:LaTeX
|
|
|
Содержание |
Начала программирования
ЧАСТЬ 11 Завершая этот длинный цикл статей, Евгений Балдин посмотрит на LaTeX глазами профессионального программиста.
LaTeX не просто даёт возможность набирать текст – он позволяет его программировать, а следовательно, перекладывать часть своей работы на компьютер. Привычка думать – одна из самых необычных особенностей разумного человека. Она позволяет экономить силы и время.
Создаём свои …
…команды, окружения и прочее. Возникшая в процессе набора простенькая надоедливая проблема наверняка решена, и не один раз. С другой стороны, при нарастающей квалификации бывает проще изобрести этот велосипед заново в удобной на текущий момент форме, например:
\newcommand{\ee}{\ensuremath{e^{+}e^{-}}\xspace}
Новые команды часто создаются для комбинаций, используемых исключительно в математическом окружении. Команда \ensuremath обеспечивает это окружение независимо от текущего режима:
\(J/\psi\to\ee\) является одним из подвидов \ee-рассеяния.
Команда \xspace из одноимённого пакета добавляет в конце команды пробел в случае, если за ней не следует знаков препинания, то есть избавляет от необходимости самому вставлять явный пробел после команды.
Имеются три основные структуры, которые позволяют создавать свои или переименовать уже имеющиеся макросы:
\newcommand{«команда»}[N][«зн. по ум.»]{«определение»} \renewcommand{«команда»}[N][«зн. по ум.»]{«определение»} \providecommand{«команда»}[N][«зн. по ум.»]{«определение»}
\newcommand определяет новую команду. Если такая команда уже существует, то при компиляции генерируется ошибка. \renewcommand переопределяет уже существующую команду. В свою очередь, \providecommand создаёт новую команду, если на момент описания такой команды не было, и ничего не делает в противном случае.
В каждом из этих макросов есть два обязательных параметра: это имя команды и её описание. Если команде необходимо передать параметр/параметры, то первый необязательный аргумент (N) должен принять значение от одного (1) до девяти (9). В LXF85 (см. прилагаемый диск) обсуждался макрос для дублирования знака в формуле при переносе её на следующую строку (\(a+b\hm{=}c\)):
\newcommand*{\hm}[1]{#1\nobreak\discretionary{}% {\hbox{$\mathsurround=0pt #1$}}{}}
Вместо знака решётки (#) с цифрой после него при компиляции макроса подставляется соответствующий параметр. В данном случае параметр был только один, и можно сказать, что его значение сохраняется в «переменной» #1.
Звёздочка (*) в конце макроса \newcommand налагает на передаваемый параметр команды \hm дополнительное условие: в нем не должно быть пустых строк и команды \par. В некоторых случаях это упрощает отладку кода.
Наличие второго необязательного параметра в макросах определения новых команд позволяет определить первый параметр создаваемой команды как параметр по умолчанию:
\newcommand{\exmpl}[1][умолчанию]% {<<значение по #1>>} Сравните \exmpl{} и \exmpl[требованию].
Счётчики и другие переменные
Создаём свой пакет
Установочный INS-файл
Пакетный DTX-файл
Пролог
Пользовательская документация
Код с комментариями
Пакетирование
Напутствие
Документируйте каждый шаг. Пишите как можно больше качественного текста, так как его мало не бывает. Живучесть программы определяется не только кодом, но и описанием. «Светлое будущее» за грамотным программированием.
LaTeX-цикл в Linux Format подошёл к концу. Честно говоря, я сам за это время узнал много нового для себя. Надеюсь, мне удалось поделиться этими знаниями с вами. В этой информации нет никакой чёрной магии – всё просто и логично, и эта информация полезна, так как позволяет автоматизировать одно из самых сложных ремёсел человеческой цивилизации – создание книг. Пишите тексты, большие и маленькие: они не пропадут.