LaTeX/Kreiranje paketa
Ako definišete mnogo novih okruženja i komandi, preambula vašeg dokumenta će postati prilično duga. U ovoj situaciji, dobra ideja je da se stvori LaTeH paket ili klasa koja sadrži sve komande i definicije okruženja. Može biti dovoljno dinamičan da odgovara svim vašim budućim dokumentima.
Klase su .cls fajlovi, paketi su sačuvani u .sty fajlovima. Oni su veoma slični, glavna razlika je što možete učitati samo jednu klasu po dokumentu.
Nakon odluke da stvorite sopstveni paket ili klasu, treba da razmislite koju licencu paket/klasa ima. Licenca je od velikog značaja, bilo da štiti fajl, ili da ga čini dostupnim za druge.
makeatletter i makeatother
[uredi]Podrazumevano, LaTeH će dozvoliti upotrebu '@' znakova za kontrolne sekvence iz paketa ili klasa fajlova, ali ne iz dokumenta krajnjeg korisnika. Na ovaj način je moguće zaštititi komande, tj. napraviti ih dostupnim samo iz paketa.
Bilo kako bilo, moguće je preskočiti ovu sigurnost uz pomoć\makeatletter
i \makeatother
. Ove komande imaju smisla samo u regularnim dokumentima, nisu potrebni u fajlovima paketa ili klasa.
\documentclass{...}
%...
\begin{document}
\makeatletter
\@author
\makeatother
\end{document}
|
Stvaranje sopstvenog paketa
[uredi]Vaš paket može biti dostupan u vašem dokumentu kao i bilo koji drugi paket: koristeći \usepackage
komandu. Pisanje paketa se u osnovi sastoji od kopiranja sadržaja preambule vašeg dokumenta u odvojeni fajl sa imenom koje se završava sa .sty.
Hajde da napišemo prvi custom.sty fajl kao primer paketa:
\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{...}
precizira koja verzija TeHa ili LaTeHa je potrebna da se pokrene vaš paket. Opcioni datum se može koristiti za preciznije navođenje verzije.
\ProvidesPackage{<name>}[<version>]
Paket se uvodi koristeći ovu komandu <name> koja treba da bude identična osnovnom imenu samog fajla. <version> treba da počinje datumom u formatu GGGG/MM/DD. Verziju informacije treba čuvati ažuriranom dok se razvija paket.- Sledeće možete napisati neki TeH ili LaTeH kod kao učitavanje paketa, ali napišite samo minimum potreban za opcije paketa navedene u nastavku.
\RequirePackage
je ekvivalentan\usepackage
.\DeclareOptions
su parametri krajnjeg korisnika. Svaka opcija je deklarisana jednom takvom komandom.\ExecuteOptions{...}
pokazuje šta je podrazumevano.\ProcessOptions\relax
prekida obradu opcije.- Napišite šta god želite i pri tome koristite sve LaTeH komande koje znate. Normalno, treba da definišete sve nove komande ili ubacite druge pakete.
\endinput
: ovo mora biti poslednja komanda.
Kada je vaš paket spreman, možemo ga koristiti u bilo kom dokumentu. Ubacite vaš nov paket pomoću poznate komande \usepackage{mypack}
.
Fajl custom.sty i LaTeH izvor koji sastavljate moraju biti u istom direktorijumu.
\documentclass{...}
\usepackage[neverindent,sans]{custom}
%...
\begin{document}
Бла...
\end{document}
|
Za više ugodnosti, moguće je postaviti paket u $TEXMFHOME (koji je ~/texmf podrazumevano) prema strukturi TeH direktorijuma strukture (TDS). To bi bilo
$TEXMFHOME/tex/latex/custom/custom.sty
Na Vindovsu '~' je često C:\Users\username.
Možda ćete morati da pokrenete texhash (ili ekvivalent) kako biste napravili vaš novi fajl TeH distribucioni indeks, koji ga čini dostupnim za korišćenje za bilo koji dokument. To će vam omogućiti da koristite svoj paket kao što je opisano gore, ali bez potrebe da bude u istom direktorijumu kao i dokument.
Stvaranje sopstvene klase
[uredi]Takođe je moguće kreirati svoju fajl klasu. Proces je sličan kreiranju sopstvenog paketa, možete pozvati svoj stil fajl u preambuli bilo kog dokumenta pomoću komande:
\documentclass{myclass}
|
Ime klase fajla je onda myclass.cls. Hajde da napišemo jednostavan primer:
\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
je duplikat\ProvidesPackage
.\PassOptionsToClass
i\PassOptionsToPackage
se koriste za automatsko pozivanje odgovarajuće opcije kada je klasa ili paket učitan.\DeclareOption*
: zvezda verzija vam dozvoljava da rukujete neubačenim opcijama.\ClassWarning
će pokazati odgovarajuću poruku u TeH kompajleru.\LoadClass
označava jedinstvenu roditelj klasu, ako ih ima.
Udice
[uredi]Postoje i udice za klase i pakete.
\AtEndOfPackage
\AtEndOfClass
Oni se ponašaju kao udice dokumenata. Vidi LaTeH Udice.