%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Contents: Customising LaTeX output % $Id: custom.tex,v 1.2 2003/03/19 20:57:45 oetiker Exp $ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{Prilagajanje \LaTeX{}a} \begin{intro} Dokumenti narejeni z ukazi, ki smo jih spoznali do tega trenutka, bodo sprejemljivi za večji del občinstva. Kljub temu da njihov videz ni razkošen, se držijo vseh uveljavljenih pravil dobrega stavljenja, kar jih naredi lahko berljive in prijetnega videza. Toda, obstajajo situacije v katerih \LaTeX{} nima na voljo ukaza ali okolja, ki ustreza našim potrebam, ali pa rezultat dobljen z obstoječimi ukazi ne izpolni naših želja. V tem poglavju bomo dali nekaj namigov, kako lahko \LaTeX{} naučimo novih trikov in kako lahko naredimo dokumente z drugačnim videzom od običajno privzetega. \end{intro} \section{Novi ukazi, okolja in paketi} Verjetno ste že opazili, da so vsi ukazi, ko so prvič predstavljeni v knjigi, uokvirjeni, hkrati pa se pojavijo tudi v stvarnem kazalu na koncu knjige. Namesto direktne uporabe potrebnih \LaTeX{}ovih ukazov, s katerimi se da to doseči, sem napisal \wi{paket}, v katerem so definirani novi ukazi in okolja za ta namen. Tako lahko preprosto napišemo: \begin{example} \begin{lscommand} \ci{dum} \end{lscommand} \end{example} V tem zgledu smo uporabili novo okolje \ei{lscommand}, ki nariše okvir okrog ukaza in nov ukaz \ci{ci}, ki zapiše ime ukaza, hkrati pa ustrezni podatek vstavi še v stvarno kazalo. To lahko preverite tako, da v stvarnem kazalu na koncu knjige poiščete geslo \ci{dum}. Tam boste pri \ci{dum} našli referenco na vsako stran, kjer je v tekstu ukaz \ci{dum}. Če se odločimo, da nočemo več imeti novih ukazov v okvirjih, lahko preprosto popravimo definicijo okolja \texttt{lscommand} in naredimo nov videz. To je veliko enostavneje kot pa v celem dokumentu popravljati ustrezen tekst na vseh mestih, kjer se direktno uporabljajo \LaTeX{}ovi ukazi za risanje okvirja okrog besede. \subsection{Novi ukazi} Svoje nove ukaze lahko definiramo z ukazom \begin{lscommand} \ci{newcommand}\verb|{|% \emph{ime}\verb|}[|\emph{num}\verb|]{|\emph{definicija}\verb|}| \end{lscommand} \noindent Ukaz potrebuje dva argumenta: \emph{ime} je ime ukaza, ki ga želimo definirati, \emph{definicija} pa je opis tega, kar želimo, da se izvede, zapisan z ustreznimi \LaTeX{} ukazi. Argument \emph{num} v oglatih oklepajih je neobvezen in določa število argumentov, ki jih potrebuje naš novi ukaz (maksimalno možno število parametrov je 9). Če tega argumenta ni, se privzame vrednost $0$, kar pomeni, da gre za ukaz brez argumentov. Naslednja dva zgleda bosta zadevo še bolj razjasnila. V prvem zgledu definiramo nov ukaz z imenom \ci{xvec}. Ta ukaz nam pride prav vsakič ko je potrebno izpisati vektor $x_1,\ldots,x_n$. Namesto z \verb|$x_1,\ldots,x_n$| lahko sedaj to naredimo z \verb|$\xvec$|. \begin{example} \newcommand{\xvec}{x_1,\ldots,x_n} Vektor $\xvec$ \ldots \end{example} Naslednji zgled prikazuje, kako definiramo ukaz, ki potrebuje en argument. Denimo, da v tekstu poleg $x_1,\ldots,x_n$ večkrat potrebujemo tudi $y_1,\ldots,y_n$. Namesto definicije \verb|\yvec| definiramo splošni ukaz z enim argumentom. Značka \verb|#1| se zamenja z argumentom, ki ga podamo v zavitih oklepajih. Če definiramo ukaz z več kot enim argumentom, potem je naslednji označen z \verb|#2| in tako naprej. \begin{example} % v preambuli: \newcommand{\lvec}[1] {#1_1,\ldots,#1_n} % v telesu dokumenta: Skalarni produkt vektorjev $\lvec{x}$ in $\lvec{y}$ je \ldots \end{example} \LaTeX{} ne dovoli da definiramo nov ukaz, ki bi povozil že obstoječega. Če to na vsak način želimo narediti, imamo na voljo ukaz \ci{renewcommand}. Način uporabe je povsem enak kot pri ukazu \verb|\newcommand|. V nekaterih primerih pride v poštev tudi ukaz \ci{providecommand}. Deluje podobno kot \ci{newcommand}, toda če ukaz že obstaja, potem \LaTeXe{} tiho ignorira ukaz z definicijo in ohrani stari ukaz. Tu se splača še enkrat spomniti, kako je s presledki za \LaTeX{} ukazi. Če se ne spomnite več, poglejte na stran \pageref{whitespace}. \subsection{Nova okolja} Podobno kot ukaz \verb|\newcommand|, obstaja tudi ukaz, s katerim lahko definiramo nova okolja. Ukaz \ci{newenvironment} ima naslednjo obliko: \begin{lscommand} \ci{newenvironment}\verb|{|% \emph{ime}\verb|}[|\emph{num}\verb|]{|% \emph{preden}\verb|}{|\emph{potem}\verb|}| \end{lscommand} Podobno kot pri ukazu \verb|\newcommand|, lahko \ci{newenvironment} uporabljamo z neobveznim argumentom ali pa brez njega. To, kar navedemo v argumentu \emph{preden}, se izvede pred procesiranjem teksta v okolju, vsebina \emph{potem} pa se procesira takrat, ko srečamo ukaz \verb|\end{|\emph{ime}\verb|}|. Spodnji primer prikazuje uporabo ukaza \ci{newenvironment}. \begin{example} \newenvironment{kralj} {\rule{1ex}{1ex}% \hspace{\stretch{1}}} {\hspace{\stretch{1}}% \rule{1ex}{1ex}} \begin{kralj} Moji skromni podložniki \ldots \end{kralj} \end{example} Argument \emph{num} ima podoben pomen kot pri ukazu \verb|\newcommand|. \LaTeX{} poskrbi za to, da ne moremo definirati okolja, ki že obstaja. Če želimo spremeniti kakšno že obstoječe okolje, uporabimo ukaz \ci{renewenvironment}, ki ima enak način uporabe kot ukaz \ci{newenvironment}. Ukazi, uporabljeni v zgornjem primeru, bodo razloženi v nadaljevanju. Za ukaz \ci{rule} poglejte stran \pageref{sec:rule}, za \ci{stretch} stran \pageref{cmd:stretch}, več informacij o \ci{hspace} pa dobite na strani \pageref{sec:hspace}. \subsection{Presledki na začetku in po koncu okolja} Ko kreiramo novo okolje, se nam lahko zgodi, da se na začetku ali na koncu brez kakšnega vidnega vzroka pojavijo nezaželeni presledki. Denimo, da želimo definirati okolje za naslov, ki ne bo zamaknjen, prav tako pa ne bo zamaknjen prvi odstavek za naslovom. Ukaz \ci{ignorespaces} na začetku definicije okolja povzroči, da se ignorirajo vsi morebitni presledki za ukazom \verb|\begin{|\emph{okolje}\verb|}|. Še bolj zapleteno je poskrbeti za dogajanje po koncu bloka, saj na koncu okolja pride do posebne obdelave. Z ukazom \ci{ignorespacesafterend} lahko \LaTeX{}u naročimo, naj za ustreznim \verb|\end{|\emph{okolje}\verb|}| ukazom, ko bo posebne obdelave konec, sproži še ukaz \ci{ignorespaces}. \begin{example} \newenvironment{enostavno}% {\noindent}% {\par\noindent} \begin{enostavno} Pozor na presledek\\na levi strani. \end{enostavno} Enako\\tukaj. \end{example} \begin{example} \newenvironment{pravilno}% {\noindent\ignorespaces}% {\par\noindent% \ignorespacesafterend} \begin{pravilno} Ni presledka\\na levi strani. \end{pravilno} Enako\\tukaj. \end{example} \subsection{Poganjanje \LaTeX{a} iz ukazne vrstice} Če delate na operacijskem sistemu Unix oz.~podobnem, lahko za prevajanje \LaTeX{} projektov uporabljate make datoteke. V tem primeru zna biti za vas zanimivo, da lahko z uporabo dodatnih parametrov pri klicu prevajalnika iz istega dokumenta dobite različne različice. Npr.~če v dokument dodamo naslednjo strukturo: \begin{verbatim} \usepackage{ifthen} \ifthenelse{\equal{\crnobelo}{true}}{ % "črno bel" način; naredi nekaj.. }{ % "barvni" način; naredi nekaj drugega.. } \end{verbatim} lahko potem dokument prevajamo iz ukazne vrstice z: \begin{verbatim} latex '\newcommand{\crnobelo}{true}\input{test.tex}' \end{verbatim} Na ta način se najprej definira ukaz \verb|\blackandwhite|, potem pa se prevede še izbrana datoteka in v njej se prevedejo deli dokumenta v črno belem načinu. Če bi namesto tega uporabili \begin{verbatim} latex '\newcommand{\crnobelo}{false}\input{test.tex}' \end{verbatim} bi dobili barvno verzijo dokumenta. \subsection{Lastni paketi} Če definiramo veliko novih okolij in ukazov, potem bo preambula dokumenta postala kar dolga. V takem primeru je dobro narediti nov \LaTeX{}ov paket, ki vsebuje vse definicije novih okolij in ukazov. V dokumentu potem uporabimo ukaz \ci{usepackage}, da naložimo paket in s tem v dokumentu omogočimo nove ukaze in okolja. \begin{figure}[!htbp] \begin{lined}{\textwidth} \begin{verbatim} % Demo Package by Tobias Oetiker and Bor Plestenjak \ProvidesPackage{demopack} \newcommand{\xvec}[1] {x_1,\ldots,x_n} \newcommand{\lvec}[1] {#1_1,\ldots,#1_n} \newenvironment{kralj} {\rule{1ex}{1ex} \hspace{\stretch{1}}} {\hspace{\stretch{1}} \rule{1ex}{1ex}} \end{verbatim} \end{lined} \caption{Zgled paketa.} \label{package} \end{figure} Pisanje paketa v glavnem pomeni kopiranje vsebine preambule v ločeno datoteko s končnico \texttt{.sty}. Poleg tega je še poseben ukaz \begin{lscommand} \ci{ProvidesPackage}\verb|{|\emph{package name}\verb|}| \end{lscommand} \noindent ki ga je potrebno uporabiti povsem na začetku datoteke s paketom. Ukaz \verb|\ProvidesPackage| sporoči \LaTeX{}u ime paketa in javi resno napako v primeru, ko želimo paket naložiti dvakrat. Slika~\ref{package} prikazuje majhen paket z ukazi, ki smo jih definirali v prejšnjih zgledih. \section{Pisave in velikosti črk} \subsection{Ukazi za spreminjanje pisave} \index{pisava}\index{velikost pisave} \LaTeX{} izbere pisavo in velikost črk glede na logično strukturo dokumenta (razdelki, opombe, \ldots). V določenih primerih pa bi radi ročno spremenili pisavo in velikosti črk. To lahko naredimo z ukazi, navedenimi v tabelah~\ref{fonts} in~\ref{sizes}. Dejanska velikost vsake pisave je oblikovalski problem in je odvisna od razreda dokumenta in uporabljenih opcij. Tabela~\ref{tab:pointsizes} prikazuje absolutno velikost črk pri uporabljenih navedenih ukazih v standardnih razredih dokumentov. \begin{example} {\small The small and \textbf{bold} Romans ruled} {\Large all of great big \textit{Italy}.} \end{example} Pomembna lastnost \LaTeXe{} je, da so vsi atributi pisave neodvisni. To pomen, da lahko vključimo ukaze za spreminjanje velikosti ali tipa pisave, pa se bodo še vedno ohranili atributi za krepko ali poševno pisavo, ki smo jih vključili prej. V \emph{matematičnem načinu} lahko uporabljamo ukaze za spreminjanje pisave tako, da gremo začasno ven iz \emph{matematičnega načina} in vnesemo normalen tekst. Če želimo pri stavljenje formul uporabljati drugačno pisavo, potem za to obstajajo posebno ukazi. Našteti so v tabeli~\ref{mathfonts}. \begin{table}[!bp] \caption{Pisave.} \label{fonts} \begin{lined}{12cm} % % Alan suggested not to tell about the other form of the command % eg \verb|\sffamily| or \verb|\bfseries|. This seems a good thing to me. % \begin{tabular}{@{}rl@{\qquad}rl@{}} \ci{textrm}\verb|{...}| & \textrm{\wi{pokončna pisava}}& \ci{textsf}\verb|{...}| & \textsf{\wi{gladka pisava}}\\ \ci{texttt}\verb|{...}| & \texttt{pisalni stroj}\\[6pt] \ci{textmd}\verb|{...}| & \textmd{srednja pisava}& \ci{textbf}\verb|{...}| & \textbf{\wi{krepka pisava}}\\[6pt] \ci{textup}\verb|{...}| & \textup{\wi{pokončna pisava}}& \ci{textit}\verb|{...}| & \textit{\wi{kurzivna pisava}}\\ \ci{textsl}\verb|{...}| & \textsl{\wi{nagnjena pisava}}& \ci{textsc}\verb|{...}| & \textsc{\wi{velike male črke}}\\[6pt] \ci{emph}\verb|{...}| & \emph{poudarjena pisava} & \ci{textnormal}\verb|{...}| & \textnormal{običajna pisava} font \end{tabular} \bigskip \end{lined} \end{table} \begin{table}[!bp] \index{velikost črk} \caption{Velikosti črk.} \label{sizes} \begin{lined}{12cm} \begin{tabular}{@{}ll} \ci{tiny} & \tiny drobna pisava \\ \ci{scriptsize} & \scriptsize velikost indeksov\\ \ci{footnotesize} & \footnotesize velikost opomb pod črto \\ \ci{small} & \small majhna pisava \\ \ci{normalsize} & \normalsize normalna velikost\\ \ci{large} & \large veliki znaki \end{tabular}% \qquad\begin{tabular}{ll@{}} \ci{Large} & \Large veliki znaki \\[5pt] \ci{LARGE} & \LARGE zelo veliki znaki \\[5pt] \ci{huge} & \huge ogromni znaki \\[5pt] \ci{Huge} & \Huge največji znaki \end{tabular} \bigskip \end{lined} \end{table} \begin{table}[!tbp] \caption{Absolutna velikost pisave v standardnih razredih.}\label{tab:pointsizes} \label{tab:sizes} \begin{lined}{12cm} \begin{tabular}{lrrr} \multicolumn{1}{c}{size} & \multicolumn{1}{c}{10pt (privzeto) } & \multicolumn{1}{c}{11pt opcija} & \multicolumn{1}{c}{12pt opcija}\\ \verb|\tiny| & 5pt & 6pt & 6pt\\ \verb|\scriptsize| & 7pt & 8pt & 8pt\\ \verb|\footnotesize| & 8pt & 9pt & 10pt \\ \verb|\small| & 9pt & 10pt & 11pt \\ \verb|\normalsize| & 10pt & 11pt & 12pt \\ \verb|\large| & 12pt & 12pt & 14pt \\ \verb|\Large| & 14pt & 14pt & 17pt \\ \verb|\LARGE| & 17pt & 17pt & 20pt\\ \verb|\huge| & 20pt & 20pt & 25pt\\ \verb|\Huge| & 25pt & 25pt & 25pt\\ \end{tabular} \bigskip \end{lined} \end{table} \begin{table}[!bp] \caption{Matematične pisave.} \label{mathfonts} \begin{lined}{\textwidth} \begin{tabular}{@{}lll@{}} \textit{Ukaz}&\textit{Zgled}& \textit{Rezultat}\\[6pt] \ci{mathcal}\verb|{...}|& \verb|$\mathcal{B}=c$|& $\mathcal{B}=c$\\ \ci{mathrm}\verb|{...}|& \verb|$\mathrm{K}_2$|& $\mathrm{K}_2$\\ \ci{mathbf}\verb|{...}|& \verb|$\sum x=\mathbf{v}$|& $\sum x=\mathbf{v}$\\ \ci{mathsf}\verb|{...}|& \verb|$\mathsf{G\times R}$|& $\mathsf{G\times R}$\\ \ci{mathtt}\verb|{...}|& \verb|$\mathtt{L}(b,c)$|& $\mathtt{L}(b,c)$\\ \ci{mathnormal}\verb|{...}|& \verb|$\mathnormal{R_{19}}\neq R_{19}$|& $\mathnormal{R_{19}}\neq R_{19}$\\ \ci{mathit}\verb|{...}|& \verb|$\mathit{ffi}\neq ffi$|& $\mathit{ffi}\neq ffi$ \end{tabular} \bigskip \end{lined} \end{table} V povezavi z ukazi za spreminjanje velikosti črk imajo velik pomen \wi{zaviti oklepaji}. Z njimi gradimo \emph{skupine}. Skupine omejujejo območje delovanja \LaTeX{}ovega ukaza.\index{združevanje} \begin{example} He likes {\LARGE large and {\small small} letters}. \end{example} Ukazi za spreminjanje velikosti pisave spremenijo tudi razmike med vrsticami, toda le, če se odstavek konča znotraj območja delovanja ukaza za velikost pisave. Desni zaviti oklepaj \verb|}| zato ne sme nastopati prezgodaj v tekstu. Primerjajte položaj ukaza \ci{par}{} v naslednjih dveh primerih. \footnote{\texttt{\bs{}par} je ekvivalentno prazni vrstici} \begin{example} {\Large Don't read this! It is not true. You can believe me!\par} \end{example} \begin{example} {\Large This is not true either. But remember I am a liar.}\par \end{example} Če želimo, da ukaz za spremenjeno velikost pisave deluje za celotni odstavek ali celo za večji kos teksta, potem je priporočljivo uporabljati okolja za spreminjanje velikosti pisave. \begin{example} \begin{Large} This is not true. But then again, what is these days \ldots \end{Large} \end{example} \noindent To nas lahko reši pred štetjem velikega števila zavitih oklepajev. \subsection{Nevarnost na vidiku} Kot smo omenili že na začetku tega poglavja, je nevarno razmetati eksplicitne ukaze za spreminjanje oblike pisave vsepovsod po tekstu, saj je to v nasprotju z osnovno idejo \LaTeX{}a, ki pravi, da je potrebno ločiti oznake za logični in vizualni del dokumenta. To pomeni, da če uporabljamo isti ukaz za spreminjanje pisave na več mestih z namenom, da poudarimo določen podatek, potem je bolje za to definirati nov ukaz preko \verb|\newcommand| in tako logično povezati vrsto podatka, ki ga poudarjamo s spreminjanjem pisave. \begin{example} \newcommand{\oops}[1]{\textbf{#1}} Do not \oops{enter} this room, it's occupied by a \oops{machine} of unknown origin and purpose. \end{example} Ta pristop ima to prednost, da če se kdaj kasneje odločimo, da bomo za nevarnost uporabili drugačno pisavo kot pa \verb|\textbf|, potem to spremenimo na enem mestu. Sicer bi morali v celotnem dokumentu poiskati vse pojavitve ukaza \verb|\textbf|, potem pa bi se morali pri vsakem posamezno še odločiti, ali je ukaz \verb|\textbf| uporabljen zaradi nevarnosti in moramo pisavo zato zamenjati ali pa ukaz \verb|\textbf| pomeni kaj drugega in ga pustimo pri miru. \subsection{Nasvet} Za konec našega izleta v deželo pisav in velikosti črk še kratek nasvet:\nopagebreak \begin{quote} \underline{\textbf{Pomnite\Huge!}} \textit{Čim} \textsf{V\textbf{\LARGE E} \texttt{Č}} pisav \Huge uporabljate \footnotesize \textbf{v} vašem \small \texttt{dokumentu}, \large \textit{tem} \normalsize lažje \textsc{berljiv} in \textsl{\textsf{lepši} pos\large t\Large a\LARGE n\huge e}. \end{quote} \section{Presledki} \subsection{Razmik med vrsticami} \index{razmik med vrsticami} Če želimo uporabljati v dokumentu večje razmike med vrsticami, potem lahko to spremenimo z ukazom \begin{lscommand} \ci{linespread}\verb|{|\emph{factor}\verb|}| \end{lscommand} \noindent v preambuli dokumenta. Vrednost \verb|\linespread{1.3}| ustreza ">ena in polovičnemu"<, vrednost \verb|\linespread{1.6}| pa ">dvojnemu"< razmiku med vrsticami. Normalno vrstice niso razmaknjene, zato je privzeta vrednost~1.\index{dvojni razmik med vrsticami} Bodite pozorni na to, da je rezultat, ki ga dobimo z uporabo ukaza \ci{linespread} dokaj drastičen in ni primeren za objavljena dela. Če imate dober razlog za spreminjanje privzetih razmikov med vrsticami, zato raje uporabljajte ukaz: \begin{lscommand} \verb|\setlength{\baselineskip}{1.5\baselineskip}| \end{lscommand} \begin{example} {\setlength{\baselineskip}% {1.5\baselineskip} This paragraph is typeset with the baseline skip set to 1.5 of what it was before. Note the par command at the end of the paragraph.\par} This paragraph has a clear purpose, it shows that after the curly brace has been closed, everything is back to normal. \end{example} \subsection{Oblikovanje odstavka}\label{parsp} V \LaTeX{}u imamo dva parametra, ki vplivata na obliko odstavka. Z vključitvijo definicije kot npr. \begin{code} \ci{setlength}\verb|{|\ci{parindent}\verb|}{0pt}| \\ \verb|\setlength{|\ci{parskip}\verb|}{1ex plus 0.5ex minus 0.2ex}| \end{code} v preambulo dokumenta lahko spremenimo obliko odstavkov. Prvi ukaz nastavi zamik prve vrstice v odstavku na 0 (brez zamika), drugi ukaz pa nastavi navpični razmik med odstavki. \index{razmik med odstavki}\index{zamik odstavka} Vrednosti navedeni za \texttt{plus} in \texttt{minus} povesta \TeX{}u, za koliko lahko maksimalno skrči oziroma razširi predpisani razmik med odstavkoma, da se bodo odstavki lepo poravnali na stran. V Evropi so odstavki pogosto ločeni z določenim razmikom, začetne vrstice pa niso zamaknjene. Toda pazite, saj to vpliva tudi na kazalo. Vrstice v kazalu so sedaj ločene z večjimi razmiki kot sicer. Da se izognemo temu, je bolje dva zgornja ukaza iz preambule prestaviti na neko mesto za \verb|\tableofcontents| ali pa jih sploh ne uporabljati, saj večina knjig uporablja začetni zamik in ne navpični razmik za ločevanje odstavkov. Če želimo zamakniti odstavek, ki ni zamaknjen, to naredimo z ukazom \begin{lscommand} \ci{indent} \end{lscommand} \noindent na samem začetku odstavka.\footnote{Če želite zamakniti prvi odstavek v vsakem razdelku, potem uporabite paket \pai{indentfirst} iz svežnja `tools'.} To bo očitno imelo učinek le v primeru, ko vrednost \verb|\parindent| ni nastavljena na $0$. Če želimo nezamaknjen odstavek, potem uporabimo \begin{lscommand} \ci{noindent} \end{lscommand} \noindent kot prvi ukaz v odstavku. To pride v poštev, kadar začnemo besedilo kar s tekstom in ne z ukazom za definiranje poglavja, razdelka, ipd. \subsection{Vodoravni razmiki in zapolnjevalci} \label{sec:hspace} \LaTeX{} avtomatično določi presledek med besedami in stavki. Če želimo dodati vodoravni razmik, uporabimo ukaz \index{vodoravni!presledek} \begin{lscommand} \ci{hspace}\verb|{|\emph{dolžina}\verb|}| \end{lscommand} Če naj se ta presledek obdrži tudi v primeru, ko pade na začetek ali na konec vrstice, uporabimo \verb|\hspace*| namesto \verb|\hspace|. Argument \emph{dolžina} je v enostavni obliki enak številu in merski enoti. Najpomembnejše merske enote so naštete v tabeli~\ref{units}. \index{merska enota}\index{dolžina} \begin{example} Ta\hspace{1.5cm}razmik ima dolžino 1.5 cm. \end{example} \suppressfloats \begin{table}[tbp] \caption{\TeX{} Merske enote.} \label{units}\index{merske enote} \begin{lined}{9.5cm} \begin{tabular}{@{}ll@{}} \texttt{mm} & milimeter $\approx 1/25$~inch \quad \demowidth{1mm} \\ \texttt{cm} & centimeter = 10~mm \quad \demowidth{1cm} \\ \texttt{in} & palec (inč) $=$ 25.4~mm \quad \demowidth{1in}\\ \texttt{pt} & točka (pika) $\approx 1/72$~inča $\approx \frac{1}{3}$~mm \quad\demowidth{1pt}\\ \texttt{em} & približna širina `M' v trenutni pisavi \quad \demowidth{1em}\\ \texttt{ex} & približna višina `x' v trenutni pisavi \quad \demowidth{1ex} \end{tabular} \bigskip \end{lined} \end{table} \label{cmd:stretch} Ukaz \begin{lscommand} \ci{stretch}\verb|{|\emph{n}\verb|}| \end{lscommand} \noindent naredi poseben raztegljiv presledek. Razteza se dokler ne zapolni ves preostali prostor na vrstici. Če uporabimo dva ukaza \verb|\hspace{\stretch{|\emph{n}\verb|}}| v isti vrstici, potem se bosta razširila glede na faktor širjenja. \begin{example} x\hspace{\stretch{1}} x\hspace{\stretch{3}}x \end{example} Ko uporabljamo vodoravne presledke med tekstom, je smiselno velikost presledkov relativno prilagoditi velikosti izbrane pisave. To lahko dosežemo z merskima enotama \texttt{em} in \texttt{ex}: \begin{example} {\Large{}velik\hspace{1em}y}\\ {\tiny{}drobni\hspace{1em}y} \end{example} Ukaz \begin{lscommand} \ci{hfill} \end{lscommand} \noindent je okrajšava za \verb|\hspace{\fill}|. Tu je \verb|\fill| posebna raztegljiva dolžina, ki se lahko od 0 raztegne do maksimalne možne širine. Ukaza \begin{lscommand} \ci{dotfill}\quad in\quad \ci{hrulefill} \end{lscommand} \noindent delujeta tako kot \verb|\hfill|, le da vmesni prostor zapolnita s pikami oziroma z vodoravno črto. \begin{example} Začetek \dotfill\ Konec\\ Levo\ \hrulefill\ Sredina\ \hrulefill\ Desno\\ X\ \hfill\hfill Malo na desno \ \hfill\ X \end{example} \subsection{Navpični presledki} Razmik med odstavki, razdelki, podrazdelki, \ldots\ je v \LaTeX{}u avtomatično določen. Kadar je potrebno, lahko dodatni navpični razmik \emph{med dvema odstavkoma} vstavimo z ukazom: \begin{lscommand} \ci{vspace}\verb|{|\emph{length}\verb|}| \end{lscommand} Ta ukaz naj bi bil normalno uporabljen med dvema praznima vrsticama. Če želimo zadržati prostor na vrhu ali na dnu strani, potem lahko uporabljamo ukaz \verb|\vspace*| namesto \verb|\vspace|. \index{navpični presledek} Ukaz \verb|\stretch| v povezavi z ukazom \verb|\pagebreak| lahko uporabimo za to, da tekst vstavimo na zadnjo vrstico strani ali pa da tekst navpično postavimo na sredo strani. \begin{code} \begin{verbatim} Nekaj teksta \ldots \vspace{\stretch{1}} To gre na zadnjo vrstico strani.\pagebreak \end{verbatim} \end{code} Dodatni razmik med dvema vrsticama v \emph{istem} odstavku je določen z ukazom \begin{lscommand} \ci{\bs}\verb|[|\emph{dolžina}\verb|]| \end{lscommand} Z ukazom \ci{bigskip} in \ci{smallskip} lahko naredimo navpične razmike že vnaprej definiranih velikosti in nam tako ni potrebno skrbeti za točna števila. \section{Oblika strani} \begin{figure}[!hp] \begin{center} \makeatletter\@mylayout\makeatother \end{center} \vspace*{1.8cm} \caption{Parametri oblike strani.} \label{fig:layout} \cih{footskip} \cih{headheight} \cih{headsep} \cih{marginparpush} \cih{marginparsep} \cih{marginparwidth} \cih{oddsidemargin} \cih{paperheight} \cih{paperwidth} \cih{textheight} \cih{textwidth} \cih{topmargin} \end{figure} \index{oblika strani} \LaTeXe{} nam omogoča da v ukazu \verb|\documentclass| podamo \wi{velikost strani}. Velikost \wii{robovi}{robov} za tekst se potem določi avtomatično. V nekaterih primerih lahko nismo zadovoljni s privzetimi vrednostmi in te vrednosti se seveda da ročno spremeniti. %no idea why this is needed here ... \thispagestyle{fancyplain} Slika~\ref{fig:layout} prikazuje vse parametre, ki se jih da spremeniti. Narejena je bila s paketom \pai{layout} iz svežnja ´tools'% \footnote{\texttt{CTAN:/tex-archive/macros/latex/required/tools}}. \textbf{POČAKAJTE!} \ldots preden začnete razmišljati v stilu ">Naredimo to ozko stran malce širšo"<, si vzemite nekaj sekund za razmislek. Kakor velja za večino stvari v \LaTeX{}u, je tudi tu dober razlog za to, da je oblika strani takšna kot je Seveda, če jo primerjamo s stranjo, narejeno s programom MS Word, zgleda grozno ozka. Toda poglejte v vašo priljubljeno knjigo\footnote{Tu mislim na pravo natisnjeno knjigo, ki jo je izdala priznana založba.} in preštejte število znakov v povprečni vrstici teksta. Opazili boste, da v vrstici ni več kot 66 znakov. Isto ponovite na vaši \LaTeX{}ovi strani. Opazili boste, da je tudi tu okrog 66 znakov na stran. Izkušnje kažejo, da branje postane težje takoj, ko vrstica vsebuje več znakov. To je zaradi tega, ker je oči težko premikati od konca ene vrstice na začetek naslednje. To je med drugim tudi en izmed razlogov, da je besedilo v časopisu v več stolpcih. Če torej povečate širino telesa s tekstom, mislite tudi na to, da s tem otežujete življenje vašim bralcem. Naj bo sedaj konec opozoril in si poglejmo, kako lahko vseeno spremenimo obliko strani. Za spreminjanje parametrov ima \LaTeX{} na voljo dva ukaza. Ponavadi jih uporabljamo v preambuli dokumenta. Prvi ukaz določi fiksno vrednost izbranemu parametru: \begin{lscommand} \ci{setlength}\verb|{|\emph{parameter}\verb|}{|\emph{dolžina}\verb|}| \end{lscommand} Drugi ukaz doda dolžino izbranemu parametru: \begin{lscommand} \ci{addtolength}\verb|{|\emph{parameter}\verb|}{|\emph{dožina}\verb|}| \end{lscommand} Drugi ukaz je bolj praktičen od \ci{setlength}, saj lahko obliko spreminjamo relativno glede na obstoječo obliko. Če želimo širino teksta povečati za en centimeter, v preambulo dodamo naslednje ukaze: \begin{code} \verb|\addtolength{\hoffset}{-0.5cm}|\\ \verb|\addtolength{\textwidth}{1cm}| \end{code} Tu se mogoče splača pogledati paket \pai{calc}, ki nam omogoča da v argumentih ukaza \ci{setlength} in drugih, kjer vnašamo numerične vrednosti, uporabljamo aritmetične operacije. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \section{Še več zabave z dolžinami} Kadarkoli se da, se izogibam uporabi absolutnih dolžin v \LaTeX{}ovih dokumentih. Raje uporabljam za osnovne mere širino ali višino elementov na strani. Za širino slike je to npr.~\verb|\textwidth|, če želimo, da slika zapolni celo stran. Naslednji trije ukazi določajo širino, višino in globino tekstovnega niza. \begin{lscommand} \ci{settoheight}\verb|{|\emph{lscommand}\verb|}{|\emph{tekst}\verb|}|\\ \ci{settodepth}\verb|{|\emph{lscommand}\verb|}{|\emph{tekst}\verb|}|\\ \ci{settowidth}\verb|{|\emph{lscommand}\verb|}{|\emph{tekst}\verb|}| \end{lscommand} \noindent Naslednji zgled prikazuje možno uporabo teh ukazov. \begin{example} \flushleft \newenvironment{vardesc}[1]{% \settowidth{\parindent}{#1:\ } \makebox[0pt][r]{#1:\ }}{} \begin{displaymath} a^2+b^2=c^2 \end{displaymath} \begin{vardesc}{Where}$a$, $b$ -- are adjunct to the right angle of a right-angled triangle. $c$ -- is the hypotenuse of the triangle and feels lonely. $d$ -- finally does not show up here at all. Isn't that puzzling? \end{vardesc} \end{example} \section{Škatle} \LaTeX{} sestavlja svoje strani z zlaganjem škatel. Kot prvo je vsaka črka majhna škatla, ta škatla pa se zloži z ostalimi črkami v škatlo za besedo. Beseda se zloži z ostalimi besedami, toda tokrat s posebnim vmesnim vezivom, ki je raztegljiv, kar omogoča, da se vrsta besed tako skrči oziroma raztegne, da zapolnjuje eno vrstico na strani. Priznam, da je to zelo poenostavljen pogled na to, kar se v resnici dogaja, toda bistvo je v tem, da \TeX{} res deluje s škatlami in vmesnim vezivom. Škatle so lahko ne samo črke, pač pa lahko v škatlo vstavimo praktično karkoli, vključno z drugimi škatlami. Vsako škatlo potem \LaTeX{} obravnava tako, kot da gre za posamezno črko. V prejšnjih poglavjih smo se že srečali s škatlami, le omenjali jih nismo eksplicitno. Tako npr.~okolje \ei{tabular} in ukaz \ci{includegraphics} naredita škatlo. To pomeni, da lahko zlahka dve tabeli ali sliki postavimo drugo zraven druge. Poskrbeti moramo le za to, da njuna kombinacija ni širša od širine teksta. Poljuben odstavek lahko vložimo v škatlo ali z ukazom \begin{lscommand} \ci{parbox}\verb|[|\emph{položaj}\verb|]{|\emph{širina}\verb|}{|\emph{tekst}\verb|}| \end{lscommand} ali pa v okolju \begin{lscommand} \verb|\begin{|\ei{minipage}\verb|}[|\emph{položaj}\verb|]{|\emph{širina}\verb|}| tekst \verb|\end{|\ei{minipage}\verb|}| \end{lscommand} Vrednost parametra \texttt{položaj} je ena izmed črk \texttt{c, t} ali \texttt{b} ki pove, kako se škatla navpično poravna glede na osnovnico besedila v tekoči vrstici. Pri tem \texttt{t} pomeni poravnavo zgornjih robov, \texttt{c} sredinsko poravnavo in $\texttt{b}$ poravnana spodnja robova. Z argumentom \texttt{širina} podamo širino škatle. Glavna razlika med \ei{minipage} in \ei{parbox} je, da znotraj \ei{parbox} ne moremo uporabljati vseh ukazov in okolij, medtem ko je v okolju \ei{minipage} možno skoraj vse. Medtem, ko \ci{parbox} vstavi celoten odstavek tako, da prelamlja vrstice, obstaja tudi razred ukazov za škatle, ki delujejo le na vodoravno poravnanih objektih. Enega že poznamo. To je ukaz \ci{mbox}, ki vrsto škatel sestavi v eno, ukaz pa ponavadi uporabljamo zato, da preprečimo \LaTeX{}u, da bi prelomil vrstico med dvema besedama. Ker lahko škatle vstavljamo v nove škatle, nam ti ukazi za vodoravno sestavljanje škatel omogočajo zelo veliko možnosti. V ukazu \begin{lscommand} \ci{makebox}\verb|[|\emph{širina}\verb|][|\emph{položaj}\verb|]{|\emph{tekst}\verb|}| \end{lscommand} argument \emph{širina} definira širino škatle, kot je vidna od zunaj.\footnote{To pomeni, da je škatla lahko manjša kot pa je širina objektov, ki jo sestavljajo. Širino lahko postavimo celo na 0pt, s čimer dosežemo, da se tekst izpiše, a nima nobenega vpliva na sosednje škatle.} Poleg numeričnih vrednosti za dolžino lahko v argumentu \emph{širina} uporabljamo tudi ukaze \ci{width}, \ci{height}, \ci{depth} in \ci{totalheight}. Njihove vrednosti so odvisne od dimenzij stavljenega besedila v parametru \emph{tekst}. Parameter \emph{položaj} ima za vrednost eno črko: \textbf{c} pomeni sredinsko poravnavo, \textbf{l} levo poravnavo, \textbf{r} desno poravnavo in \textbf{s} obojestransko poravnavo teksta znotraj škatle. Ukaz \ci{framebox} deluje tako kot \ci{makebox}, le da dodatno nariše še okvir okrog teksta. Naslednji zgledi prikazujejo, kaj vse se da narediti z ukazoma \ci{makebox} in \ci{framebox}. \begin{example} \makebox[\textwidth]{% s r e d i n s k o}\par \makebox[\textwidth][s]{% o b o j e s t r a n s k o}\par \framebox[1.1\width]{Sedaj sem pa uokvirjen!} \par \framebox[0.8\width][r]{Smola, jaz sem pa preširok!} \par \framebox[1cm][l]{Nič hudega, tudi jaz sem} Kdor prebere to ni osel! \end{example} Sedaj poznamo vodoravne škatle in naslednji korak je, da se lotimo navpičnih škatel.\footnote{Popoln nadzor lahko dobimo le s hkratno vodoravno in navpično kontrolo \ldots} Tudi tu ni težav za \LaTeX{}. Z ukazom \begin{lscommand} \ci{raisebox}\verb|{|\emph{dvig}\verb|}[|\emph{globina}\verb|][|\emph{višina}\verb|]{|\emph{tekst}\verb|}| \end{lscommand} \noindent lahko določimo navpične lastnosti škatle. V prvih treh parametrih lahko uporabljamo tudi \ci{width}, \ci{height}, \ci{depth} in \ci{totalheight}, da velikost določimo glede na velikost teksta v argumentu \emph{tekst}. \begin{example} \raisebox{0pt}[0pt][0pt]{\Large% \textbf{Aaaa\raisebox{-0.3ex}{a}% \raisebox{-0.7ex}{aa}% \raisebox{-1.2ex}{r}% \raisebox{-2.2ex}{g}% \raisebox{-4.5ex}{h}}} se je drl, toda tudi naslednji v vrsti ni opazil, da se mu je dogodilo nekaj groznega. \end{example} \section{Poljubne črte} \label{sec:rule} Nekaj strani nazaj ste mogoče opazili ukaz \begin{lscommand} \ci{rule}\verb|[|\emph{dvig}\verb|]{|\emph{dolžina}\verb|}{|\emph{višina}\verb|}| \end{lscommand} ki nariše črno črto z dano \emph{dolžino} in debelino \emph{višina} v višini \emph{dvig} nad osnovnico tekoče vrstice. Parameter \emph{dvig} je lahko tudi negativen. \newpage \begin{example} \rule{3mm}{.1pt}% \rule[-1mm]{5mm}{1cm}% \rule{3mm}{.1pt}% \rule[1mm]{1cm}{5mm}% \rule{3mm}{.1pt} \end{example} \noindent Ta ukaz uporabljamo za risanje navpičnih in vodoravnih črt. Črta na naslovnici je bila tako npr. narejena z ukazom \ci{rule}. Poseben primer črte je takšna, ki nima širine, a ima določeno višino. V tiskarstvu se to imenuje \wi{prečnik}. Uporabimo ga za to, da poskrbimo, da za določeni objekt na strani podamo minimalno višino. Uporabljamo ga lahko tudi v okolju \texttt{tabular}, s čimer poskrbimo, da imajo vse vrstice določeno minimalno višino. \begin{example} \begin{tabular}{|c|} \hline \rule{1pt}{4ex}S črto \ldots\\ \hline \rule{0pt}{4ex}Z nevidnim prečnikom \ldots \\ \hline \end{tabular} \end{example} \bigskip {\flushright Konec.\par} % % Local Variables: % TeX-master: "lshort2e" % mode: latex % mode: flyspell % End: