Pređi na sadržaj

LaTeX/Makroi

Izvor: Викикњиге

LaTeX

Početak
  1. Uvod100% završen  Dec 13, 2015
  2. Instalacija100% završen  Dec 13, 2015
  3. Instalacija dodatnih paketa 100% završen  Dec 13, 2015
  4. Osnove 100% završen  Dec 13, 2015
  5. Kako pronaći pomoć 100% završen  Dec 13, 2015

Zajednički elementi

  1. Struktura dokumenta 100% završen  Dec 28, 2015
  2. Formatiranje teksta 100% završen  Dec 27, 2015
  3. Formatiranje paragrafa 100% završen  Jan 02, 2016
  4. Boje 100% završen  Jan 10, 2016
  5. Slova100% završen  Jan 10, 2016
  6. Struktura listi 100% završen  Jan 10, 2016
  7. Posebni znakovi 100% završen  Jan 10, 2016
  8. Internacionalizacija 100% završen  Jan 10, 2016
  9. Rotacija 100% završen  Jan 10, 2016
  10. Tabele 100% završen  Jan 10, 2016
  11. Stvaranje naslova 100% završen  Jan 10, 2016
  12. Raspored strane 100% završen  Jan 10, 2016
  13. Uvoz grafike 100% završen  Jan 10, 2016
  14. Figure i natpisi100% završen  Jan 10, 2016
  15. Fusnote i Margine100% završen  Jan 10, 2016
  16. Hiperlinkovi 100% završen  Jan 10, 2016
  17. Oznake i referenciranje100% završen  Jan 10, 2016

Mehanika

  1. Greške i upozorenja 75% završen  Jan 02, 2016
  2. Dužine 100% završen  Jan 02, 2016
  3. Brojači 100% završen  Jan 02, 2016
  4. Kutije 100% završen  Jan 02, 2016
  5. Pravila i nosači 100% završen  Jan 02, 2016

Tehnički tekstovi

  1. Matematika100% završen  Jan 10, 2016
  2. Naprednija matematika 75% završen  Jan 10, 2016
  3. Teoreme
  4. Hemijska grafika 75% završen  Jan 02, 2016
  5. Algoritmi 75% završen  Jan 02, 2016
  6. Listiranje izvornog koda 100% završen  Jan 02, 2016
  7. Lingvistika 75% završen  Jan 02, 2016

Posebne strane

  1. Indeksiranje 75% završen  Jan 02, 2016
  2. Rečnik 75% završen  Jan 02, 2016
  3. Upravljanje bibliografijom‎ 75% završen  Jan 10, 2016
  4. Više bibliografije

Posebni dokumenti

  1. Pisma 50% završen  Jan 02, 2016
  2. Prezentacije 75% završen  Jan 02, 2016
  3. Učiteljski deo 75% završen  Jan 10, 2016
  4. Kratka biografija 50% završen  Jan 02, 2016

Kreiranje grafika

  1. Predstavljanje proceduralnih grafika 100% završen  Jan 02, 2016
  2. MetaPostovi 0% završen  Jan 02, 2016
  3. Slika 50% završen  Jan 02, 2016
  4. PGF/TikZ 25% završen  Jan 02, 2016
  5. PSTricks 50% završen  Jan 02, 2016
  6. Xy-pic 25% završen  Jan 02, 2016
  7. Pravljenje 3D grafika 75% završen  Jan 02, 2016

Programiranje

  1. Makroi 100% završen  Jan 10, 2016
  2. Običan TeH‎ 100% završen  Jan 10, 2016
  3. Kreiranje paketa 100% završen  Jan 10, 2016
  4. Teme 75% završen  Jan 10, 2016

Razno

  1. Modularni Dokumenti 100% završen  Jan 10, 2016
  2. Zajedničko pisanje LaTeX dokumenata 75% završen  Jan 10, 2016
  3. Otpremanje u druge formate 100% završen  Jan 10, 2016

Pomoć i preporuke

  1. Najčešće postavljana pitanja 100% završen  Jan 10, 2016
  2. Saveti i trikovi 75% završen  Jan 10, 2016

Dodaci

  1. Autori 0% završen  Jan 10, 2016
  2. Linkovi 0% završen  Jan 10, 2016
  3. Oznake paketa 0% završen  Jan 10, 2016
  4. Primeri LaTeX dokumenata 0% završen  Jan 10, 2016
  5. Indeks 0% završen  Jan 10, 2016
  6. Rečnik naredbi 0% završen  Jan 10, 2016

Dokumenti proizvode sa komandama koje ste naučili do sad i oni izgledaju prihvatljivo za veliki deo auditorijuma. Iako ne izgledaju fensi, oni poštuju sva utvrđena pravila i tekstualni raspored, koji ih čini lakim za čitanje i prijatnim za oko. Međutim, postoje situacije u kojima LaTeX ne daje komandu ili okruženje koje odgovara vašim potrebama, ili izlazna vrednost neke već postojeće komande ne može zadovoljiti vaše zahteve.

U ovom poglavlju ćemo pokušati da damo neke savete o tome kako da naučite nove LaTeX trikove i kako da napravite da štampanje izgleda drugačije od onoga što je obezbeđeno po podrazumevanoj opciji.

LaTeX je jezik na relativno visokom nivou u odnosu na Plain TeX i stoga je ograničeniji. Sledeće poglavlje će se fokusirati na Plain TeX i obajsniće napredne tehnike za programiranje.

Nove komande

[uredi]

Da biste dodali svoje komande, koristite

\newcommand{име}[num]{дефиниција}

komandu. U suštini, komanda zahteva dva argumenta: ime komande koju želite da kreirate i definicija komande. Zapamtite da komanda ime može, ali ne mora biti zatvorena u zagradama, kako vi želite. Argument num u zagradi je opcioni i precizira broj argumenata koje nova komanda uzima (moguće je do 9 komandi). Ako nema podrazumevanu 0, onda nijedan argument nije dozvoljen.

Sledeća dva primera trebalo bi da vam pomognu da dobijete ideju. Prvi primer definiše novu komandu pod nazivom \wbal koja će štampati “Vikiknjiga o LaTeX-u”. Takva naredba može dobro doći ako biste morali da napišete naslov ove knjige iznova i iznova.

\newcommand{\wbal}{Викикњига о \LaTeX}
Ово је ‘‘\wbal'' \ldots{} ‘‘\wbal''

Ovo je “Vikiknjiga o LaTeX” … “Vikiknjiga o LaTeX”

Sledeći primer ilustruje kako treba definisati novu komandu koja uzima jedan argument. Tag #1 biva zamenjen argumentom koji ste odredili. Ako želite da koristite više od jednog argumenta, koristite #2 i tako dalje, ovi argumenti se dodaju u dodatni set zagrada.

\newcommand{\wbalsup}[1] {
  Ово је Викикњига о LaTeX 
  подржана од стране #1}
\newcommand{\wbalTwo}[2] {
  Ово је Викикњига о LaTeX
  подржана од стране #1 и #2}
% у телу документа:
\begin{itemize}
\item \wbalsup{Wikimedia}
\item \wbalsup{многих корисника!}
\item \wbalTwo{John Doe}{Anthea Smith}
\end{itemize}
  • Ovo je Vikiknjiga o LaTeX podržana od strane Wikimedia
  • Ovo je Vikiknjiga o LaTeX podržana od strane mnogih korisnika!
  • Ovo je Vikiknjiga o LaTeX podržana od strane John Doe i Anthea Smith

Imenujte svoju novu komandu \wbalTwo a ne \wbal2 sa brojevima jer se ne može koristiti za imenovanje makroa — nevažeći znakovi će izbaciti grešku pri kompajlovanju.

LaTeX neće dozvoliti da kreirate novu komandu koja će pregaziti postojeću. Ali postoji posebna komanda u slučaju da eksplicitno želite ovo: \renewcommand. Koristi istu sintaksu kao \newcommand komanda.

U određenim slučajevima možda ćete želeti da koristite \providecommand komandu. Radio isto kao \newcommand, ali ako je komanda već definisana, LaTeX će tiho ignorisati novu komandu.

Sa LaTex2e, takođe je moguće dodati podrazumevani parametar u komandu sa sledećom sintaksom:

\newcommand{name}[num][default]{дефиниција}

Ako je podrazumevani parametar \newcommand prisutan, onda je prvi broj argumenata onaj koji je naveo num je ustvari opcionalan sa podrazumevanom vrednošću default; ako nema, onda su svi argumenti obavezni.

\newcommand{\wbalTwo}[2][Wikimedia]{
  Ово је Викикњига о LaTeX
  подржана од стране {#1} и {#2}!}
% in the document body:
\begin{itemize}
\item \wbalTwo{John Doe}
\item \wbalTwo[многих корисника]{John Doe}
\end{itemize}
  • Ovo je Vikiknjiga o LaTeX podržana od strane Wikimedia i John Doe!
  • Ovo je Vikiknjiga o LaTeX podržana od strane mnogih korisnika i John Doe!
Napomena
Kada se komanda koristi sa eksplicitnim prvim parametrom, on je dat u zagradi (ovde "[mnogih korisnika]").

Evo jednog čestog primera: ako pišete knjigu o Matematici i morate da koristite vektore, morate da odlučite kako će izgledati. Postoji nekoliko različitih standarda, koji se koriste u mnogim knjigama. Ako je a vektor, neki ljudi vole da dodaju strelicu iznad njega (), drugi ljudi podvlače (a); još jedna česta verzija je boldovanje (a). Pretpostavimo da želite da pišete vektore sa strelicom iznad njih; onda dodajte sledeću liniju u vaš mystyle.sty.

\newcommand{\myvec}[1]{\vec{#1}}

i pišete vaše vektore u novoj \myvec{...} komandi. Možete ga zvati kako god želite, ali je bolje da izaberete kratko ime jer ćete ga verovatno pisati veoma često. Zatim, ako se predomislite i želite da vaši vektori drugačije izgledaju samo treba da promenite definiciju vaše \myvec{...} komande. Koristite ovaj pristup kad god možete: to će vam uštedeti mnogo vremena i povećati doslednost vašeg dokumenta.

Deklarisanje jakih komandi

[uredi]

Neke komande su lomljive, tako da ne uspevaju u nekim sredinama. Ako makro radi u telu teksta, ali ne i u (na primer) figuri natpisa, vredi pokušavati zamenu \newcommand{\MyCommand}... deklaraciju sa \DeclareRobustCommand{\MyCommand}... u preambuli. Ovo posebno važi za makro koji, kada je proširen, proizvodi tekst koji je upisan u .aux fajl.

Nova okruženja

[uredi]

Baš kao i sa \newcommand komandom, postoji komanda za stvaranje svojeg okruženja. Komanda \newenvironment koristi sledeću sintaksu:

\newenvironment{име}[num]{before}{after}

Ponovo \newenvironment može imati opcioni argument. Kada je \begin{name} komanda (sa kojom počinje okruženje) pronađena, materijal koji je naveden u before argumentu se vodi pre teksta u okruženje na obrađivanje. Materijal u after argumentu biva obrađen kada se naiđe na \end{name} komandu (sa kojim se završava okruženje).

Argument num se koristi na isti način kao i u \newcommand komandi. LaTeX proverava da ne definiše okruženje koje već postoji. Ako ikada poželite da promenite postojeće komande, možete koristiti \renewenvironment komandu. Koristi istu sintaksu kao i \newenvironment komanda.

Primer ispod ilustruje upotrebu \newenvironment komande:

\newenvironment{king}
{ \rule{1ex}{1ex}\hspace{\stretch{1}} }
{ \hspace{\stretch{1}}\rule{1ex}{1ex} }

\begin{king}
Моје скромне теме \ldots
\end{king}

Dodatan prostor

[uredi]

Kada kreirate novo okruženje možete lako biti usporeni od strane dodatnog prostora, koji potencijalno mogu imati fatalne posledice. Na primer, kada vi želite da stvorite okruženje za naslove koje ih potiskuje svojim uvlačenjem kao i naredni paragraf. Komanda \ignorespaces u begin bloku okruženja će ignorisati svaki prostor nakon izvršavanja ovog dela komande. Blok end je malo komplikovaniji jer se javlja kao posebna obrada na kraju okruženja. With the \ignorespacesafterend LaTeX će izdati komandu \ignorespaces nakon što je posebna ‘end’ obrada završena.

\newenvironment{simple}%
{\noindent}%
{\par\noindent}

\begin{simple}
Погледајте простор\\на лево.
\end{simple}
Исто је и\\овде.
  Погледајте простор
на лево.

  Исто је и
овде.


\newenvironment{correct}%
{\noindent\ignorespaces}%
{\par\noindent%
\ignorespacesafterend}

\begin{correct}
Нема места\\на лево.
\end{correct}
Исто је и\\овде.
Нема места
на лево.

Исто је и
овде.

Takođe, ako i dalje imate problema sa dodatnim prostorom koji se pojavlja na kraju vašeg okruženja kada se koristi \input za spoljni izvor, uverite se da nema razmaka između početka, izvora i kraja okruženja, kao što je:

\begin{correct}\input{некифајл.tex}\end{correct}

ili

\begin{correct}%
\input{некифајл.tex}%
\end{correct}

Deklarisanje komandi sa novim okruženjem

[uredi]

Nove komande mogu biti deklarisane u novim okruženjima. Komande koje su deklarisane sa novim okruženjem se odnose na njihove argumente sa udvajanjem # znaka. U sledećem primeru, novo okruženje je deklarisano uz grananje komande:

\newenvironment{topics}{
\newcommand{\topic}[2]{ \item{##1 / ##2\} }
Теме:
\begin{itemize}
}
{
\end{itemize}
}

Ako greškom, argumenti prođu do \topics , makro je definisan sa jednim # znakom, i izaćiće sledeća poruka o grešci:

   ! Illegal parameter number in definition of \topics.

Proširenje broja argumenata

[uredi]

Paket xkeyval će vam omogućiti da definišete ključ/vrednost opcija za komande.

\mycommand[key1=value1, key3=value3]{неки текст}

Paket je prilično kompletan i dokumentacija je potpuna. Preporučujemo programerima da o paketu pročitaju. [1]

Hajde da pogledamo jedan jednostavan primer [1]:

\usepackage{xkeyval}
% ...

\makeatletter
\def\my@emphstyle#1{\csname my@style@#1\endcsname}
%% Предефинисани стилови
\providecommand\my@style@default{\em}
\providecommand\my@style@bold{\bfseries}

\define@key{myemph}{code}{%
  \def\my@emphstyle{#1}
}
\define@key{myemph}{style}{%
  \def\my@emphstyle{\csname my@style@#1\endcsname}
}
\newcommand\setemph[1]{%
  \setkeys{myemph}{#1}
}

\renewcommand\emph[1]{%
  {\my@emphstyle #1}
}

\makeatother

Нешто \emph{битно}

\setemph{style=bold}
Нешто \emph{битно}

\setemph{code=\Large\sffamily}
Нешто \emph{битно}

Aritmetika

[uredi]

LaTeX može manipulisati brojevima.

Paket calc obezbeđuje zajedničku infix notaciju.

\usepackage{calc}
% ...
\newcounter{mine}
\setcounter{mine}{2*17}
\themine

Za visoke preciznosti kod izračunavanja, možete koristiti fp[2] paket.

\usepackage{fp}

% Clip
\[
\FPmul\result{2}{7}
\FPclip\result\result
2*7 = \result
\]

% Infix
\[
\newcommand\result{11}
\sqrt{\sin(2+\result)} \approx
\FPeval\result{round(root(2,sin(result + 2.5)),2)}
\result
\]

% Postfix
\[
\FPupn\result{17 2.5 + 17.5 swap - 2 1 + * 2 swap /} % or \FPupn\result{2 17.5 17 2.5 + - 2 1 + * /}
\FPclip\result\result
(17+2.5 - 17.5) * (2+1) / 2  = \result
\]

% Велика прецизност 
\[
\FPdiv\result{17}{7}
\frac{17}{7} \approx \FPtrunc\result\result{3}
\result
\]

Kondicionali

[uredi]

LaTeX može koristiti kondicionale zahvaljujući ifthen paketu.

\usepackage{ifthen}
% ...

\ifthenelse{ \equal{\myvar}{true} }{
  Ово је true.
}{
  Ово је false.
}

Petlje

[uredi]

Ekstenzija PGF/TikZ pruža \foreach komandu.

\usepackage{tikz}
% ...

\foreach \i/\q in {пшеница/50g, вода/1L, квасац/2g}{
  \noindent\i\dotfill\q\\
}

Ako koristite samo \foreach a ne crtanje grafika, možete koristiti direktno pgffor paket.

Alternativno, možete proveriti multido paket.

Stringovi

[uredi]

xstring pruža puno mogućnosti. Iz CTAN:

  • testiranje sadržaja stringa
  • raspakivanje podstringova
  • zamena podstringova
  • dužina stringa
  • pozicija podstringa
  • broj pojavljivanja podstringa

Primeri:

\usepackage{xstring}
% ...

\newcommand\mystr{Здраво свете!}

Стринг ``\mystr'' има \StrLen{\mystr}{} знакове.

Предикат ``\mystr{} садржи реч Здраво'' је \IfSubStr{\mystr}{Здраво}{true}{false}.

LaTeX "kuke"

[uredi]

LaTeX pruža dve vrste kuke:

  • \AtBeginDocument će vam odrediti skup komandi koje će biti izvršene kada se naiđe na \begin{document}.
  • \AtEndDocument radi isto samo na \end{document}.

To vam daje malo više fleksibilnosti za makroe. To može biti korisno za zamenu postavki koje se izvršavaju posle preambule. Ove kuke se mogu iskoristiti nekoliko puta. Komande će biti izvršene u cilju zbog koga su i postavljene.

Na primer, hajde da zamenimo brojeve stranica sa oldstylenums:

\usepackage{textcomp}

\AtBeginDocument{%
  % Прави бројеве страница у тексту фигура
  \let\myThePage\thepage
  \renewcommand{\thepage}{ \oldstylenums{\myThePage} }
}

Tu su i kuke za klase i pakete. Pogledajte Kreiranje paketa.

Komandna linija LaTeX-a

[uredi]

Ako radite na Unix-like OS, možete da koristite Makefiles ili bilo kakvu drugu skriptu kako bi napravili vaše LaTeX projekte. S tim u vezi moglo bi biti interesantno pravljenje različitih verzija istog dokumenta pozivom LaTeX-a sa parametrima komandne linije. Ako dodate sledeću strukturu u vaš dokument:

\usepackage{ifthen}
%...

% подразумевана вредност.
\providecommand\blackandwhite{false}
%...

\ifthenelse{ \equal{\blackandwhite}{true} }{
% "црно и бело" мод; ради нешто..
}{
% "боја" мод; ради нешто другачије..
}

Sada možete pozvati LaTeX ovako:

latex '\providecommand{\blackandwhite}{true}\input{test.tex}'

Prvo se komanda \blackandwhite definiše, a zatim se stvarni fajl učita sa unosom. Onda, postavljanjem \blackandwhite na false verzija boje dokumenta bi se napravila.

Referenciranje

[uredi]


Prethodno: Kreiranje 3D grafike Indeks Sledeće: Običan TeH