%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Contents: Customising LaTeX output % $Id: viritys.tex,v 1.1.1.1 2002/12/01 08:05:09 hellgren Exp $ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \chapter{\LaTeX:n virittely} \begin{intro} Tähän asti opetuilla käskyillä tehdyt dokumentit ovat järjellisen näköisiä suurimmalle osalle. Vaikka ne eivät ole mitenkään erikoisen näköisiä, ne noudattavat korkealaatuisen typografian vakiintuneita sääntöjä, jotka tekevät dokumenteista helppolukuisia ja silmää miellyttäviä. On kuitenkin tilanteita, joissa \LaTeX{} ei tarjoa tarpeisiin sopivia käskyjä tai ympäristöjä tai sitten käytössä olleilla käskyillä tuotettu ulkoasu ei täytä sille asetettuja vaatimuksia. Tässä luvussa annetaan joitakin vinkkejä siitä, miten \LaTeX:lle opetetaan uusia temppuja ja miten sen tulostama ulkoasu saadaan näyttämään erilaiselta. \end{intro} \section{Uudet käskyt, ympäristöt ja makropakkaukset} Lukija on varmaankin huomannut, että kaikki tässä kirjasessa esitetyt komennot on ladottu laatikon sisään ja ne esiintyvät kirjasen lopussa olevassa hakemistossa. Tätä varten kirjoittaja on luonut makropaketin \index{makropaketti}, jossa on määritelty uusia komentoja ja ympäristöjä tätä tarkoitusta varten. Nyt voidaan kirjoittaa yksinkertaisesti: \begin{example} \begin{lscommand} \ci{esim} \end{lscommand} \end{example} Tässä esimerkissä käytetään sekä uutta \ei{lscommand}-ympäristöä, joka vastaa laatikon piirtämisestä komennon ympärille, että uutta \ci{ci}-komentoa, joka latoo komennon nimen ja lisää vastaavan hakusanan hakemistoon. Tämän voi tarkistaa etsimällä \ci{esim}-komentoa tämän kirjasen hakemistosta, josta löytyy hakusana \ci{esim}, joka viittaa joka sivulle, jossa esim-komento on mainittu. Jos tekijä päättää, ettei halua enää komentoja ladottavan laatikon sisään, voidaan \texttt{command}-ympäristön määrittelyjä muuttaa. Tämä on helpompaa kuin etsiä dokumentista kaikki ne kohdat, joissa sanojen ympärille on piirretty laatikko \LaTeX:n peruskäskyillä. \subsection{Uudet käskyt} Omien käskyjen lisäämiseen käytetään \begin{lscommand} \ci{newcommand}\verb|{|% \emph{nimi}\verb|}[|\emph{numero}\verb|]{|\emph{määritelmä}\verb|}| \end{lscommand} \noindent "=komentoa. Komento tarvitsee vähintään kaksi argumenttia: uuden komennon \emph{nimen} ja komennon \emph{määritelmän}. Hakasulkeissa oleva \emph{numero} on vaihtoehtoinen. Sitä voidaan käyttää määrittelemään komentoja, jotka saavat maksimissaan 9 argumenttia. Jos se puuttuu, argumenttien määräksi oletataan 0 eli ei lainkaan argumentteja. Asia pitäisi selvitä seuraavasta kahdesta esimerkistä. Ensimmäinen esimerkki määrittelee uuden \ci{pjlk}-komennon. Se on lyhenne sanoista ''Pitkänpuoleinen johdanto \LaTeX2e:n käyttöön''. Kyseinen komento voi olla tarpeen, jos tämän kirjasen nimi pitäisi latoa yhä uudelleen ja uudelleen. \begin{example} \newcommand{\pjlk}{Pitkänpuoleinen johdanto \LaTeX2e:n käyttöön} Tämä on ''\pjlk'' \ldots{} ''\pjlk'' \end{example} Seuraava esimerkki esittää \emph{numero}-argumentin käyttöä. \verb|#1|:n tilalle tulee käyttäjän antama argumentti. Jos halutaan käyttää useampia argumentteja, jatketaan numerointia \verb|#2| jne. \begin{example} \newcommand{\txsit}[1] {Tämä on \emph{#1} johdanto \LaTeX2e:n käyttöön} % varsinaisessa dokumentissa: \begin{itemize} \item \txsit{pitkänpuoleinen} \item \txsit{hyvin lyhyt} \end{itemize} \end{example} \LaTeX{} ei anna määritellä uutta komentoa, jolla on sama nimi kuin jollain jo määritellyllä. Tätä varten on kuitenkin olemassa erityinen komento: \ci{renewcommand}. Sen syntaksi on sama kuin \verb|\newcommand|-komennon. Tietyissä tilanteissa halutaan ehkä käyttää \ci{providecommand}-komentoa. Se toimii kuten \ci{newcommand}, mutta jos samanniminen komento on jo määritelty \LaTeX{} jättää uuden määrittelyn huomiotta. \LaTeX:n komentoja seuraavissa välilyönneissä on tiettyjä seikkoja, jotka tulee ottaa huomioon. Katso sivulta \pageref{whitespace} lisätietoja. \subsection{Uudet ympäristöt} Ympäristöjen määrittelemiseksi on samantapainen komento kuin \verb|\newcommand|. \ci{newenvironment}-komennon syntaksi on seuraava: \begin{lscommand} \ci{newenvironment}\verb|{|% \emph{nimi}\verb|}[|\emph{numero}\verb|]{|% \emph{ennen}\verb|}{|\emph{jälkeen}\verb|}| \end{lscommand} Myös \ci{newenvironment}-komentoa voidaan käyttää vaihtoehtoisen argumentin kanssa tai ilman. \emph{ennen}-argumentin materiaali käsitellään ennen kuin ympäristössä olevaa tekstiä käsitellään. \emph{jälkeen}-argumentin materiaali käsitellään sen jälkeen kun vastaan on tullut \verb|\end{|\emph{nimi}\verb|}|-komento. Alla oleva esimerkki kuvaa \ci{newenvironment}-komennon käyttöä. \begin{example} \newenvironment{kuningas} {\rule{1ex}{1ex}% \hspace{\stretch{1}}} {\hspace{\stretch{1}}% \rule{1ex}{1ex}} \begin{kuningas} Uskolliset alamaiseni \ldots \end{kuningas} \end{example} Argumenttia \emph{numero} käytetään samalla tavoin kuin \verb|\newcommand|"-komennossa. \LaTeX{} varmistaa, ettei jo olemassa olevaa ympäristöä aleta määritellä. Jos olemassa olevaa ympäristöä pitää muuttaa, siihen voidaan käyttää komentoa \ci{renewenvironment}. Se käyttää samaa syntaksia kuin komento \ci{newenvironment}. Esimerkissä käytetyt komennot selitetään myöhemmin: katso komentoa \ci{rule} sivulta \pageref{sec:rule}, \ci{stretch} sivulta \pageref{cmd:stretch} ja lisätietoa \ci{hspace}:sta saa sivulta \pageref{sec:hspace}. \subsection{Ylimääräiset välit} Uuteen ympäristöön tulee helposti mukaan ylimääräisiä tyhjiä välejä, joilla voi olla kohtalokkaat vaikutukset. Otetaan esimerkiksi otsikkoympäristö, jossa ei käytetään sisennystä eikä myöskään sitä seuraavassa kappaleessa. Komento \ci{ignorespaces} ymäpäristön aloituksen määrittelyissä estää rivinvaihtoja tekemästä tyhjiä välejä. Ympäristön lopetuksen määrittely on hankalampi tapaus. Komennolla \ci{ignorespacesafterend} panee {\LaTeX}:n lisäämään komennon \ci{ignorespaces} kun ympäristö on päättynyt. \begin{example} \newenvironment{simple}% {\noindent}% {\par\noindent} \begin{simple} Huomaa välilyönti\\vasemmalla. \end{simple} Tässä\\myös. \end{example} \begin{example} \newenvironment{correct}% {\noindent\ignorespaces}% {\par\noindent\ignorespacesafterend} \begin{correct} Vasemmalla ei ole\\välilyöntiä. \end{correct} Sama\\tässä. \end{example} \subsection{\LaTeX{} komentorivillä} Unixin tapaisissa käyttöjärjestelmissä voidaan {\LaTeX}-projektien koostamiseen käyttää Makefile-tiedostoja. Tähän liittyen voisi olla mielenkiintoista tuottaa erilaisia versioita samasta dokumentista kutsumalla {\LaTeX}:ia erilaisilla komentorivin parametreilla. Mikäli dokumenttiin lisätään seuraava rakenne: \begin{verbatim} \usepackage{ifthen} \ifthenelse{\equal{\blackandwhite}{true}}{ % mustavalkotila; jotain tehdään.. }{ % väritila; jotain muuta tehdään.. } \end{verbatim} Nyt {\LaTeX}:ia voidaan kutsua näin: \begin{verbatim} latex '\newcommand{\blackandwhite}{true}\input{test.tex}' \end{verbatim} Ensin määritellään komento \verb|\blackandwhite| ja sitten luetaan varsinainen tiedosto. Mikäli \verb|\blackandwhite| saa arvon \texttt{false}, dokumentista tehdään väriversio. \subsection{Omat makropakkaukset} Jos dokumentissa määritellään paljon uusia ympäristöjä ja komentoja, tulee esittelyosasta pitkän puoleinen. Silloin on parempi tehdä makropakkaus, joka sisältää kaikki uudet määrittelyt. Makropakkaus saadaan käyttöön komennolla \ci{usepackage}. \begin{figure}[!htbp] \begin{lined}{\textwidth} \begin{verbatim} % Tobias Oetikerin demopaketti \ProvidesPackage{demopack} \newcommand{\pjlk}{Pitkänpuoleinen johdanto \LaTeXe:n käyttöön} \newcommand{\txsit}[1]{The \emph{#1} Johdanto \LaTeXe:n käyttöön} \newenvironment{king}{\begin{quote}}{\end{quote}} \end{verbatim} \end{lined} \caption{Esimerkkipakkaus} \label{package} \end{figure} Makropaketin kirjoittaminen vastaa oikeastaan dokumentin johdanto-osan sisällön kopioimista erilliseen tiedostoon, jolla on \texttt{.sty}-pääte. Makropakettitiedoston alussa annetaan erityinen \begin{lscommand} \ci{ProvidesPackage}\verb|{|\emph{makropaketin nimi}\verb|}| \end{lscommand} \noindent komento. \verb|\ProvidesPackage| kertoo \LaTeX:lle paketin nimen. LaTeX{} antaa virheilmoituksen, mikäli makropaketti yritetään ottaa käyttöön toistamiseen. Kuvassa \ref{package} on pieni esimerkkimakropakkaus, joka sisältää edellisissä esimerkeissä esitetyt komennot. \section{Kirjasinmalli ja "=koko} \subsection{Kirjasimen vaihtokomennot} \index{kirjasin}\index{kirjasimen koko} \LaTeX{} valitsee kirjasimen leikkauksen ja koon dokumentin loogisen rakenteen (otsikot, alaviitteet \ldots) perusteella. Joissain tapauksissa kirjasinleikkaus ja "=koko halutaan ehkä muuttaa käsin. Se voidaan tehdä taulukoissa~\ref{fonts} ja \ref{sizes} listatuilla komennoilla. Jokaisen kirjasimen varsinainen koko riippuu dokumentin luokasta ja sen optioista. Taulukossa~\ref{tab:pointsizes} esitetään näitä komentoja vastaavat absoluuttiset pistekoot, sellaisina kuin ne on määritelty dokumenttien standardiluokissa. \begin{example} {\small Pienet ja \textbf{lihavat} latinot} {\Large isottelivat käyttäen \textit{kursiivia}.} \end{example} \LaTeXe:n eräs tärkeä ominaisuus on se, että kirjasinten määreet ovat toisistaan riippumattomia. Tämä tarkoittaa sitä, että kirjasimen kokoa ja jopa leikkausta voidaan muuttaa ja samalla säilyttää aikaisemmin määritellyt lihavoinnin tai vinouden määreet. \emph{Matematiikkatilassa} voidaan kirjasimen vaihtokomentoja käyttää poistumiseen \emph{matematiikkatilasta} normaaliin tekstitilaan. Jos kirjasinta halutaan vaihtaa matematiikkaa ladottaessa, on sitä varten toinen kokoelma komentoja. Katso talukosta~\ref{mathfonts}. \begin{table}[!bp] \caption{Kirjasimet} \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{antiikva}}& \ci{textsf}\verb|{...}| & \textsf{\wi{groteski}}\\ \ci{texttt}\verb|{...}| & \texttt{kirjoituskone}\\[6pt] \ci{textmd}\verb|{...}| & \textmd{keskivahva}& \ci{textbf}\verb|{...}| & \textbf{\wi{lihavoitu}}\\[6pt] \ci{textup}\verb|{...}| & \textup{\wi{pysty}}& \ci{textit}\verb|{...}| & \textit{\wi{kursiivi}}\\ \ci{textsl}\verb|{...}| & \textsl{\wi{vino}}& \ci{textsc}\verb|{...}| & \textsc{\wi{kapiteelit}}\\[6pt] \ci{emph}\verb|{...}| & \emph{korostettu} & \ci{textnormal}\verb|{...}| & \textnormal{dokumentin} kirjasin \end{tabular} \bigskip \end{lined} \end{table} \begin{table}[!bp] \index{kirjasinkoot} \caption{Kirjasinkoot} \label{sizes} \begin{lined}{12cm} \begin{tabular}{@{}ll} \ci{tiny} & \tiny pikkuruinen kirjasin \\ \ci{scriptsize} & \scriptsize hyvin pieni kirjasin\\ \ci{footnotesize} & \footnotesize melko pieni kirjasin\\ \ci{small} & \small pieni kirjasin \\ \ci{normalsize} & \normalsize normaali kirjasin \\ \ci{large} & \large iso kirjasin \end{tabular}% \qquad\begin{tabular}{ll@{}} \ci{Large} & \Large isompi kirjasin \\[5pt] \ci{LARGE} & \LARGE hyvin iso kirjasin \\[5pt] \ci{huge} & \huge valtava \\[5pt] \ci{Huge} & \Huge suurin \end{tabular} \bigskip \end{lined} \end{table} \begin{table}[!tbp] \caption{Absoluuttiset pistekoot standardiluokissa}\label{tab:pointsizes} \label{tab:sizes} \begin{lined}{12cm} \begin{tabular}{lrrr} \multicolumn{1}{c}{koko} & \multicolumn{1}{c}{10pt (oletusarvo) } & \multicolumn{1}{c}{11pt optio} & \multicolumn{1}{c}{12pt optio}\\ \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{Matemaattiset kirjasimet} \label{mathfonts} \begin{lined}{0.7\textwidth} \begin{tabular}{@{}ll@{}} \fni{mathrm}\verb|{...}|& $\mathrm{Antiikva\ kirjasin}$\\ \fni{mathbf}\verb|{...}|& $\mathbf{Lihavoitu\ kirjasin}$\\ \fni{mathsf}\verb|{...}|& $\mathsf{Groteski\ kirjasin}$\\ \fni{mathtt}\verb|{...}|& $\mathtt{Konekirjoituskirjasin}$\\ \fni{mathit}\verb|{...}|& $\mathit{Kursiivi\ kirjasin}$\\ \fni{mathcal}\verb|{...}|& $\mathcal{KALLIGRAFINEN\ KIRJASIN}$\\ \fni{mathnormal}\verb|{...}|& $\mathnormal{Normaali\ kirjasin}$\\ \end{tabular} %\begin{tabular}{@{}lll@{}} %\textit{Komento}&\textit{Esimerkki}& \textit{Tulos}\\[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} Kirjasinkokojen yhteydessä aaltosulkeilla \index{aaltosulkeet} on merkittävä rooli. Niitä käytetään \emph{ryhmittelyyn}. Ryhmittely rajoittaa useimpien \LaTeX:n komentojen vaikutusaluetta. \index{ryhmittely} \begin{example} Hän pitää {\LARGE Suurista ja {\small pienistä} kirjaimista}. \end{example} Kirjasinkoon muutos vaikuttaa myös riviväleihin, mutta vain jos kappale päättyy ennen kuin kirjasinkokoa vaihtavan komennon vaikutus päättyy. Lopettavaa suljetta \verb|}| ei pitäisi siis käyttää liian aikaisin. Huomaa seuraavissa kahdessa esimerkissä \verb|\par|-komennon sijainti.\footnote{\texttt{\bs{}par} vastaa kappaleiden välissä olevaa tyhjää riviä.} \begin{example} {\Large Älä lue tätä! Se ei ole totta. Usko huviksesi!\par} \end{example} \begin{example} {\Large Tämäkään ei ole totta. Mutta minä olenkin valehtelija.}\par \end{example} Jos kirjasinkokoa halutaan vaihtaa koko kappaleessa tai vielä suuremmassa osassa tekstiä, halutaan ehkä käyttää ympäristöä kirjasinkoon vaihtamiseksi. \begin{example} \begin{Large} Tämä ei ole totta. Mutta mikä nykyään on \ldots \end{Large} \end{example} \noindent Tämä säästää sulkeiden laskemiselta. \subsection{Vaaksa väärään voi olla virsta vaaraan} Kuten tämän luvun alussa todettiin, voi olla vaarallista sorkkia dokumenttia tällaisilla komennoilla, sillä ne toimivat vastoin \LaTeX:n perusajatusta, joka on dokumentin loogisen ja visuaalisen muotoilun erottaminen toisistaan. Tämä tarkoittaa sitä, että kun samaa kirjasinta vaihtavaa komentoa käytetään useammassa paikassa tietyn tyyppistä tietoa ladottaessa, pitäisi käyttää \verb|\newcommand|-määritystä määrittelemään ''looginen peitekomento'', joka käyttää kyseistä kirjasinkomentoa. \begin{example} \newcommand{\hups}[1]{\textbf{#1}} Älä \hups{tule} tähän huoneeseen, siinä on tuntematonta alkuperää oleva \hups{kone}. \end{example} Tällä tavalla on se etu, että myöhemmin voidaan päättää, halutaanko vaaraa ilmaisemaan jokin muu visuaalinen keino kuin \verb|\textbf| ilman, että täytyisi etsiä dokumentista kaikki kohdat, joissa on \verb|\textbf| ja joissa sitä on käytetty nimenomaan ilmaisemaan vaaraa. \subsection{Neuvo} Tämän matkan kirjasinten ja kirjasinkokojen maailmaan päättää muutama neuvon sananen:\nopagebreak \begin{quote} \underline{\textbf{Muista\Huge!}} \textit{Mitä} \textsf{EN\textbf{\LARGE EM} \texttt{M}\textsl{ÄN}} kirjasimia \Huge dokumentissa \tiny käytetään \footnotesize \textbf{sitä} \small \texttt{luettavampi}, \large \textit{ja} \normalsize \textsc{kauniimpi} \textsl{\textsf{siitä} t\large u\Large l\LARGE e\huge e}. \end{quote} \section{Välistys} \subsection{Rivivälit} \index{riviväli} Mikäli dokumentissa halutaan käyttää isompaa riviväliä, voidaan sitä muuttaa panemalla \begin{lscommand} \ci{linespread}\verb|{|\emph{kerroin}\verb|}| \end{lscommand} \noindent "=komento dokumentin esittelyosaan. \verb|\linespread{1.3}| käytetään ''yhden ja puolen'' riviväliin ja \verb|\linespread{1.6}| ''kakkosen'' riviväliin. Normaalisti riviväliä ei levitetä, joten kerroin on silloin 1. \index{kakkosen riviväli} Komennon \ci{linespread} huomattavat vaikutukset eivät sovi julkaistaviin töihin. Mikäli rivivälin muuttamiseen on hyvät syyt, on ehkä syytä käyttää komentoa: \begin{lscommand} \verb|\setlength{\baselineskip}{1.5\baselineskip}| \end{lscommand} \begin{example} {\setlength{\baselineskip}% {1.5\baselineskip} Tämä kappale on ladottu 1,5 kertaa leveämmällä rivivälillä. Huomaa par-komento kappaleen lopussa.\par} Tämän kappaleen tarkoitus on esittää, että sulkeen jälkeen riviväli on taas normaali. \end{example} \subsection{Kappaleen muotoilu}\label{parsp} \LaTeX:ssa on kaksi kappaleen ulkoasuun vaikuttavaa parametria. Panemalla käsikirjoitustiedoston esittelyosaan määrittelyn \begin{code} \ci{setlength}\verb|{|\ci{parindent}\verb|}{0pt}| \\ \verb|\setlength{|\ci{parskip}\verb|}{1ex plus 0.5ex minus 0.2ex}| \end{code} voidaan kappaleiden ulkoasua muuttaa. Nämä kaksi komentoa kasvattavat kappaleiden väliä ja samalla asettavat ensimmäisen rivin sisennyksen nollaksi. Yllä olevan esimerkin \texttt{plus} ja \texttt{minus} kertovat \TeX:lle, että kappaleiden väliä voidaan kasvattaa tai kutistaa kerrottu määrä, jos näin kappaleet sopivat sivulle paremmin. Mannereurooppalaisessa typografiassa (myös Suomessa) kappaleiden väliin tulee usein tyhjä rivi eikä ensimmäistä riviä sisennetä. Tämä vaikuttaa myös sisällysluetteloon. Sen rivit ladotaan myös väljemmin. Tämän välttämiseksi voi olla parempi siirtää nämä kaksi komentoa esittelyosasta johonkin kohtaan \verb|\tableofcontents|-käskyn jälkeen tai sitten jättää käyttämästä niitä, sillä useimmissa ammattilaisen tekemissä kirjoissa ensimmäinen rivi on sisennetty eikä kappaleiden välissä ole tyhjää riviä. Jos halutaan sisentää sellaisen kappaleen ensimmäinen rivi, jossa se ei ole sisennetty voidaan käyttää \begin{lscommand} \ci{indent} \end{lscommand} \noindent "=komentoa kappaleen alussa.\footnote{Jos halutaan sisentää otsikon jälkeinen ensimmäinen kappale, kannattaa käyttää 'tools'-kokoelman \pai{indentfirst}-makropakkausta.} Tämä toimii luonnollisesti vain silloin kuin \verb|\parindent| ei ole saanut arvoa nolla. Jos halutaan luoda sisentämätön kappale, voidaan käyttää \begin{lscommand} \ci{noindent} \end{lscommand} \noindent "=käskyä kappaleen alussa. Tästä voi olla hyötyä silloin kun dokumentti alkaa suoraan leipätekstillä eikä jollain otsikolla. \subsection{Vaakasuora välistys} \label{sec:hspace} \LaTeX{} määrittelee sanojen ja lauseiden välit automaattisesti. Vaakavälistyksen lisäämiseksi käytetään komentoa\index{vaakavälistys} \begin{lscommand} \ci{hspace}\verb|{|\emph{mitta}\verb|}| \end{lscommand} Jos tämä välistys tulee säilyttää vaikka se osuisi rivin loppuun tai alkuun, käytetään \verb|\hspace*|"=komentoa \verb|\hspace|"=komennon sijasta. \emph{Mitta} on yksinkertaisimmillaan vain numero ja mittayksikkö. Tärkeimmät mittayksiköt on listattu taulukossa~\ref{units}. \index{mittayksiköt} \begin{example} Tämä\hspace{1.5cm} on 1,5 cm:n mittainen väli. \end{example} \suppressfloats \begin{table}[tbp] \caption{\TeX:n mittayksiköt} \label{units} \begin{lined}{9.5cm} \begin{tabular}{@{}ll@{}} \texttt{mm} & millimetri $\approx 1/25$~tuumaa \quad \demowidth{1mm} \\ \texttt{cm} & senttimetri = 10~mm \quad \demowidth{1cm} \\ \texttt{in} & tuuma $=$ 25.4~mm \quad \demowidth{1in} \\ \texttt{pt} & piste $\approx 1/72$~tuumaa $\approx \frac{1}{3}$~mm \quad\demowidth{1pt}\\ \texttt{em} & käytössä olevan kirjasimen 'M':n leveys \quad \demowidth{1em}\\ \texttt{ex} & käytössä olevan kirjasimen 'x':n korkeus \quad \demowidth{1ex} \end{tabular} \bigskip \end{lined} \end{table} \label{cmd:stretch} Komento \begin{lscommand} \ci{stretch}\verb|{|\emph{n}\verb|}| \end{lscommand} \noindent luo erityisen kumisen välin. Se venyy niin pitkälle, että rivillä jäljellä oleva tila tulee täyteen. Jos samalla rivillä annetaan kaksi \verb|\hspace{\stretch{|\emph{n}\verb|}}|"-komentoa, kasvavat välit venymiskertoimen mukaisesti. \begin{example} x\hspace{\stretch{1}} x\hspace{\stretch{3}}x \end{example} Tekstiä välistettäessä voi olla järkevää, että välit riippuvat käytetyn kirjasimen koosta. Tätä varten on olemessa suhteelliset mittayksiköt \texttt{em} ja \texttt{ex}.: \begin{example} {\Large{}iso\hspace{1em}y}\\ {\tiny{}pieni\hspace{1em}y} \end{example} \subsection{Pystysuora välistys} Kappaleiden, otsikoiden \ldots\ välit \LaTeX{} määrittää automaattisesti. Tarvittaessa \emph{kahden kappaleen väliin} voidaan lisätä ylimääräinen väli komennolla \begin{lscommand} \ci{vspace}\verb|{|\emph{mitta}\verb|}| \end{lscommand} Tätä komentoa pitäisi normaalisti käyttää kahden tyhjän rivin välissä. Jos tämä väli pitäisi säilyttää myös sivun ylä"- tai alareunassa, käytetään komennon tähtiversiota \verb|\vspace*|. \index{pystysuora välistys} Komentoa \verb|\stretch| voidaan käyttää \verb|\pagebreak|:n yhteydessä latomaan sivun viimeinen rivi tai keskittämään teksti sivulla pystysuunnassa. \begin{code} \begin{verbatim} Vähän tekstiä \ldots \vspace{\stretch{1}} Tämä menee sivun viimeiselle riville.\pagebreak \end{verbatim} \end{code} Ylimääräistä väliä lisätään \emph{saman} kappaleen kahden rivin väliin \begin{lscommand} \ci{\bs}\verb|[|\emph{mitta}\verb|]| \end{lscommand} \noindent "=komennolla. Mikäli väliä ei haluta määritellä tarkkaan, voidaan käyttää komentoja \ci{bigskip} (isoon väliin) ja \ci{smallskip} (pieneen väliin). \section{Sivun ulkoasu} \begin{figure}[!hp] \begin{center} \makeatletter\@layout\makeatother \end{center} \vspace*{1.8cm} \caption{Sivun ulkoasun asetukset.} \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{page layout} \index{sivun ulkoasu} \LaTeXe{} antaa mahdollisuuden määritellä arkkikoon \index{arkin koko} \verb|\documentclass|"-komennossa. \LaTeXe{} valitsee sitten automaattisesti \wi{marginaalit}. Joskus kuitenkin ennalta määrätyt arvot eivät tyydytä. Niitä voidaan luonnollisesti muuttaa. %no idea why this is needed here ... \thispagestyle{fancyplain} Kuvassa~\ref{fig:layout} näytetään kaikki muutettavissa olevat parametrit. Kuva on tehty 'tools' kokoelman \pai{layout}-makropakkauksella.% \footnote{\CTANref|tex-archive/macros/latex/required/tools|}. \textbf{SEIS!} \ldots ennenkuin syöksytään ''kapeat sivut leveämmäksi kiihkoon'' kannattaa asiaa miettiä ensin muutama sekunti. Kuten muillakin asioissa \LaTeX:ssa, on sivun ulkoasulla tarkoituksensa. Niinpä, MS Wordilla tehtyihin sivuihin verrattuna ne näyttävät hyvinkin kapeilta. Katsotaanpa kuitenkin lukijan mielikirjaa\footnote{Nyt on kyse vakavaraisen kustantajan julkaisemasta oikeasta painetusta kirjasta.} ja lasketaan rivillä keskimäärin olevien merkkien määrä. Huomataan, että rivillä on vain noin 66 merkkiä. Tehdäänpä sama myös \LaTeX:n sivulla. Huomataan, että myös siinä on 66 merkkiä rivillä. Kokemus osoittaa, että lukeminen vaikeutuu heti kun rivillä on enemmän merkkejä. Tämä johtuu siitä, että silmiä on vaikea siirtää rivin lopusta seuraavan rivin alkuun. Samasta syystä sanomalehdet ladotaan useammalla palstalla. Eli jos leipätekstin leveyttä lisätään on muistettava, että lukijoiden elämä tehdään vaikeammaksi. Riittäköön tämä kuitenkin varoituksista, lupasinhan kertoa miten se tehdään \ldots \LaTeX{} tarjoaa näiden parametrien muuttamiseksi kaksi komentoa. Niitä käytetään tavallisesti dokumentin johdanto-osassa. Ensimmäinen komento liittää johonkin parametreista tietyn arvon: \begin{lscommand} \ci{setlength}\verb|{|\emph{parametri}\verb|}{|\emph{mitta}\verb|}| \end{lscommand} Seuraava komento lisää pituutta johonkin parametreista. \begin{lscommand} \ci{addtolength}\verb|{|\emph{parametri}\verb|}{|\emph{mitta}\verb|}| \end{lscommand} Tämä toinen komento on oikeastaan hyödyllisempi kuin \ci{setlength}-komento, sillä nyt tullaan työskentelemään yksinomaan aikaisemmin määritellyillä asetuksilla. Koko tekstin levyden kasvattamiseksi yhden senttimetrin verran, dokumentin johdanto-osaan pannaan: \begin{code} \verb|\addtolength{\hoffset}{-0.5cm}|\\ \verb|\addtolength{\textwidth}{1cm}| \end{code} Tässä yhteydessä voitaisiin tutustua \pai{calc}-makropakettiin, joka antaa mahdollisuuden käyttää aritmeettisia operaatioita aina kun funktioiden argumenteille annetaan jotain arvoja. \section{Lisää hupia mitoista} Aina kuin vain mahdollista on \LaTeX"-dokumenteissa parasta välttää absoluuttisia mittoja. On parempi perustaa asiat muiden elementtien leveydelle tai korkeudelle. Kuvan leveys voisi olla \verb|\textwidth|, jotta se täyttäisi sivun. Seuraavat kolme komentoa mahdollistavat tekstijonon leveyden, korkeuden ja syvyyden määrittämisen. \begin{lscommand} \ci{settoheight}\verb|{|\emph{komento}\verb|}{|\emph{teksti}\verb|}|\\ \ci{settodepth}\verb|{|\emph{komento}\verb|}{|\emph{teksti}\verb|}|\\ \ci{settowidth}\verb|{|\emph{komento}\verb|}{|\emph{teksti}\verb|}| \end{lscommand} \noindent Seuraava esimerkki esittää tavan käyttää näitä komentoja. \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}{Jossa}$a$, $b$ -- ovat suorakulmaisen kolmion suoran kulman adjunkteja. $c$ -- on kolmion yksinäinen hypotenuusa. $d$ -- ei lopulta esiinny tässä lainkaan. Eiko olekin hämäävää? \end{vardesc} \end{example} \section{Laatikot} \LaTeX{} rakentaa sivuja työntelemällä laatikoita sinne tänne. Ensinnäkin jokainen kirjain on pieni laatikko, joka sitten liimataan muihin kirjaimiin muodostamaan sanoja. Nämä liimataan edelleen muihin sanoihin, mutta erityisellä elastisella liimalla, jotta joukko sanoja voidaan ahtaa tai levittää täyttämään sivun yksi rivi. Myönnettäköön, että tämä oli yksinkertaistettu kuvaus siitä, mitä todella tapahtuu, mutta ajatus on se, että \TeX{} operoi liimalla ja laatikoilla. Eikä ainoastaan kirjain ole laatikko. Mitä tahansa voidaan panna laatikkoon, myös muita laatikoita. \LaTeX{} käsittelee sitten jokaista laatikkoa aivan kuin yksittäistä kirjainta. Menneissä luvuissa olemme jo törmänneet joihinkin laatikoihin, vaikka niitä ei erikseen mainittu. Esimerkiksi \ei{tabular}"-ympäristö ja komento \ci{includegraphics} saa aikaan laatikon. Tämä tarkoittaa sitä, että kaksi taulukkoa tai kuvaa voidaan helposti asemoida vierekkäin. On vain varmistettava, että niiden yhteisleveys ei ylitä tekstin leveyttä. Tietty kappale voidaan myös pakata laatikkoon joko \begin{lscommand} \ci{parbox}\verb|[|\emph{sijainti}\verb|]{|\emph{leveys}\verb|}{|\emph{teksti}\verb|}| \end{lscommand} \noindent "=komennolla tai \begin{lscommand} \verb|\begin{|\ei{minipage}\verb|}[|\emph{sijainti}\verb|]{|\emph{leveys}\verb|}| teksti \verb|\end{|\ei{minipage}\verb|}| \end{lscommand} \noindent "=ympäristöllä. \texttt{Sijainti} voi olla jokin kirjaimista \texttt{c, t} tai \texttt{b}, jolla määritellään laatikon pystysuora sijainti suhteessa ympäröivän tekstin peruslinjaan. \texttt{leveys} ilmaisee laatikon leveyden. Pääero on siinä, että parboxin sisällä ei voida käyttää kaikkia komentoja, kun taas minipagessa kaikki on mahdollista. Vaikka \ci{parbox} pakkaa koko kappaleen rivinvaihtoineen kaikkineen, on olemassa myös laatikointikomentoja, jotka toimivat vaakasuoralla asemoidulla materiaalilla. Yksi niistä onkin jo tuttu eli \ci{mbox}. Se yksinkertaisesti pakkaa joukon laatikoita toiseen laatikkoon, ja sitä voidaan käyttää estämään \LaTeX:ia panemasta rivinvaihtoa tiettyjen sanojen väliin. Koska kerran laatikoiden sisään voidaan panna laatikoita, ovat nämä vaakasuorat laatikonpakkaajat äärimmäisen joustavia käyttää. \begin{lscommand} \ci{makebox}\verb|[|\emph{leveys}\verb|][|\emph{sijainti}\verb|]{|\emph{teksti}\verb|}| \end{lscommand} \noindent \emph{leveys} määrittää tuloksena saatavan laatikon leveyden ulkoa nähtynä.\footnote{Tämä tarkoittaa sitä, että se voi olla pienempi kuin laatikon sisällä oleva materiaali. Leveydeksi voidaan antaa jopa 0 pt, jolloin laatikon sisällä oleva teksti ladotaan niin, ettei se vaikuta ympäröiviin laatikoihin.} Mittayksiköiden lisäksi leveytenä voidaan antaa \ci{width}, \ci{height}, \ci{depth} ja \ci{totalheight}. Ne saavat arvon ladotun \emph{tekstin} mitoista. \emph{sijainti}"-parametri saa yksikirjaimisen arvon: \textbf{c} keskitetty, \textbf{l} vasemmalle tasattu, \textbf{r} oikealle tasattu tai \textbf{s}, joka tasaa tekstin laatikon koko alalle. \ci{framebox} toimii samalla tavoin kuin \ci{makebox}, mutta se piirtää tekstin ympärille kehyksen. Seuraavat esimerkit näyttävät mitä \ci{makebox}:lla ja \ci{framebox}:lla voidaan muun muassa tehdä. \begin{example} \makebox[\textwidth]{% k e s k i n e n}\par \makebox[\textwidth][s]{% l e v i t e t t y}\par \framebox[1.1\width]{Näin sitä ollaan kehyksissä!} \par \framebox[0.8\width][r]{Hitto, tuli liian leveä} \par \framebox[1cm][l]{Hällä väliä, eiks je?} Pystytkö lukemaan tämän? \end{example} Nyt kun vaakasuorat asiat ovat hallinassa, voidaan siirtyä pystysuoriin.\footnote{Täydellinen kontrolli saavutetaan vain hallitsemalla sekä vaakasuoraa että pystysuoraa materiaalia \ldots} Se ei ole ongelma \LaTeX:lle. \begin{lscommand} \ci{raisebox}\verb|{|\emph{nosto}\verb|}[|\emph{syvyys}\verb|][|\emph{korkeus}\verb|]{|\emph{teksti}\verb|}| \end{lscommand} \noindent "=komennolla voidaan määritellä laatikon ominaisuuksia pystysuoralla akselilla. Kolmessa ensimmäisessä parametrissa voidaan käyttää muuttujia \ci{width}, \ci{height}, \ci{depth} ja \ci{totalheight}, jolloin laatikon kokoon vaikuttaa \emph{teksti}-argumentti. \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}}} hän huusi, mutta ei edes seuraava rivissä huomannut, että jotain kauheaa oli tapahtunut hänelle. \end{example} \section{Linjat ja välikkeet} \label{sec:rule} Muutama sivu sitten nähtiin komento \begin{lscommand} \ci{rule}\verb|[|\emph{noste}\verb|]{|\emph{leveys}\verb|}{|\emph{korkeus}\verb|}| \end{lscommand} \noindent Normaalikäytössä se tekee mustan laatikon. \begin{example} \rule{3mm}{.1pt}% \rule[-1mm]{5mm}{1cm}% \rule{3mm}{.1pt}% \rule[1mm]{1cm}{5mm}% \rule{3mm}{.1pt} \end{example} \noindent Siitä on hyötyä piirrettäessä pysty"- ja vaakasuoria viivoja. Kansisivulla oleva viiva on esimerkiksi tehty \ci{rule}-komennolla. Erityistapaus on linja, jolla ei ole leveyttä, mutta kylläkin tietty korkeus. Painoalalla tätä kutsutaan välikkeeksi. \index{välike} Sitä käytetään varmistamaan, että sivulla olevalla elementillä on tietty minimikorkeus. Sitä voidaan käyttää \texttt{tabular}-ympäristössä varmistamaan, että rivillä on tietty minimikorkeus. \begin{example} \begin{tabular}{|c|} \hline \rule{1pt}{4ex}Tukipalkki \ldots\\ \hline \rule{0pt}{4ex}Välike\\ \hline \end{tabular} \end{example} \bigskip {\flushright Loppu.\par} %%% Local Variables: %%% mode: latex %%% TeX-master: "lyhyt2e" %%% End: