ЛаТеX/Креирање пакета
Ако дефинишете много нових окружења и команди, преамбула вашег документа ће постати прилично дуга. У овој ситуацији, добра идеја је да се створи ЛаТеХ пакет или класа која садржи све команде и дефиниције окружења. Може бити довољно динамичан да одговара свим вашим будућим документима.
Класе су .cls фајлови, пакети су сачувани у .sty фајловима. Они су веома слични, главна разлика је што можете учитати само једну класу по документу.
Након одлуке да створите сопствени пакет или класу, треба да размислите коју лиценцу пакет/класа има. Лиценца је од великог значаја, било да штити фајл, или да га чини доступним за друге.
makeatletter и makeatother
[уреди]Подразумевано, ЛаТеХ ће дозволити употребу '@' знакова за контролне секвенце из пакета или класа фајлова, али не из документа крајњег корисника. На овај начин је могуће заштитити команде, тј. направити их доступним само из пакета.
Било како било, могуће је прескочити ову сигурност уз помоћ\makeatletter
и \makeatother
. Ове команде имају смисла само у регуларним документима, нису потребни у фајловима пакета или класа.
\documentclass{...}
%...
\begin{document}
\makeatletter
\@author
\makeatother
\end{document}
|
Стварање сопственог пакета
[уреди]Ваш пакет може бити доступан у вашем документу као и било који други пакет: користећи \usepackage
команду. Писање пакета се у основи састоји од копирања садржаја преамбуле вашег документа у одвојени фајл са именом које се завршава са .sty.
Хајде да напишемо први custom.sty фајл као пример пакета:
\NeedsTeXFormat{LaTeX2e}[1994/06/01]
\ProvidesPackage{custom}[2013/01/13 Custom Package]
\RequirePackage{lmodern}
%% 'sans serif' по избору
\DeclareOption{sans}{
\renewcommand{\familydefault}{\sfdefault}
}
%% 'roman' по избору
\DeclareOption{roman}{
\renewcommand{\familydefault}{\rmdefault}
}
%% Глобално увлаћење по избору
\newif\if@neverindent\@neverindentfalse
\DeclareOption{neverindent}{
\@neverindenttrue
}
\ExecuteOptions{roman}
\ProcessOptions\relax
%% Традиционални ЛаТеХ или ТеХ следи...
% ...
\newlength{\pardefault}
\setlength{\pardefault}{\parindent}
\newcommand{\neverindent}{ \setlength{\parindent}{0pt} }
\newcommand{\autoindent}{ \setlength{\parindent}{\pardefault} }
\if@neverindent
\neverindent
\fi
% ...
\endinput
|
\NeedsTeXFormat{...}
прецизира која верзија ТеХа или ЛаТеХа је потребна да се покрене ваш пакет. Опциони датум се може користити за прецизније навођење верзије.
\ProvidesPackage{<name>}[<version>]
Пакет се уводи користећи ову команду <name> која треба да буде идентична основном имену самог фајла. <version> треба да почиње датумом у формату ГГГГ/ММ/ДД. Верзију информације треба чувати ажурираном док се развија пакет.- Следеће можете написати неки ТеХ или ЛаТеХ код као учитавање пакета, али напишите само минимум потребан за опције пакета наведене у наставку.
\RequirePackage
је еквивалентан\usepackage
.\DeclareOptions
су параметри крајњег корисника. Свака опција је декларисана једном таквом командом.\ExecuteOptions{...}
показује шта је подразумевано.\ProcessOptions\relax
прекида обраду опције.- Напишите шта год желите и при томе користите све ЛаТеХ команде које знате. Нормално, треба да дефинишете све нове команде или убаците друге пакете.
\endinput
: ово мора бити последња команда.
Када је ваш пакет спреман, можемо га користити у било ком документу. Убаците ваш нов пакет помоћу познате команде \usepackage{mypack}
.
Фајл custom.sty и ЛаТеХ извор који састављате морају бити у истом директоријуму.
\documentclass{...}
\usepackage[neverindent,sans]{custom}
%...
\begin{document}
Бла...
\end{document}
|
За више угодности, могуће је поставити пакет у $TEXMFHOME (који је ~/texmf подразумевано) према структури ТеХ директоријума структуре (ТДС). То би било
$TEXMFHOME/tex/latex/custom/custom.sty
На Виндовсу '~' је често C:\Users\username.
Можда ћете морати да покренете texhash (или еквивалент) како бисте направили ваш нови фајл ТеХ дистрибуциони индекс, који га чини доступним за коришћење за било који документ. То ће вам омогућити да користите свој пакет као што је описано горе, али без потребе да буде у истом директоријуму као и документ.
Стварање сопствене класе
[уреди]Такође је могуће креирати своју фајл класу. Процес је сличан креирању сопственог пакета, можете позвати свој стил фајл у преамбули било ког документа помоћу команде:
\documentclass{myclass}
|
Име класе фајла је онда myclass.cls. Хајде да напишемо једноставан пример:
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{myclass}[2011/12/23 Моја класа]
%% Члан по избору
\DeclareOption{10pt}{
\PassOptionsToClass{\CurrentOption}{article}
}
%% Одабир пакета по избору
\DeclareOption{sansserif}{
\PassOptionsToPackage{\CurrentOption}{paxcommands}
}
\DeclareOption{neverindent}{
\PassOptionsToPackage{\CurrentOption}{paxcommands}
}
%% Повлачење
\DeclareOption*{
\ClassWarning{myclass}{Unknown option '\CurrentOption'}
}
%% Извршавање подразумеване опције
\ExecuteOptions{10pt}
%% Процес опције
\ProcessOptions\relax
%% Учитана база
\LoadClass[a4paper]{article}
%% Учитани додатни пакети или команде
\RequirePackage{custom}
%% Додатни ТеХ/ЛаТеХ код...
\endinput
|
\ProvidesClass
је дупликат\ProvidesPackage
.\PassOptionsToClass
и\PassOptionsToPackage
се користе за аутоматско позивање одговарајуће опције када је класа или пакет учитан.\DeclareOption*
: звезда верзија вам дозвољава да рукујете неубаченим опцијама.\ClassWarning
ће показати одговарајућу поруку у ТеХ компајлеру.\LoadClass
означава јединствену родитељ класу, ако их има.
Удице
[уреди]Постоје и удице за класе и пакете.
\AtEndOfPackage
\AtEndOfClass
Они се понашају као удице докумената. Види ЛаТеХ Удице.