Dit is deel 7 van de LaTeX cursus.
voortzetting van de serie door Dick Tanis

Deze keer behandelen we het maken van tabellen en zwevende objecten

Het maken van tabellen in LaTeX doen we met de tabular omgeving. Hierbij wordt de breedte van de kolommen automatisch bepaald. Het table spec argument in het

\begin{tabular}[pos]{table spec}

commando bepaalt het formaat van de tabel. De volgende argumenten zijn mogelijk:

Als tekst in een kolom te groot is om op een pagina te passen, wordt deze niet automatisch afgebroken door LaTeX. Door gebruik te maken van p{width} wordt de tekst wel automatisch afgebroken zoals in een paragraaf.

Het pos argument geeft de verticale positie aan van de tabel. Deze positie is relatief aan de basislijn van de tekst die om de tabel heen staat en heeft 3 mogelijkheden:

In de tabel omgeving kunnen we met & naar de volgende kolom springen, met \\ starten we een nieuwe regel en \hline geeft een horizontale lijn. Ook kunnen we horizontale lijnstukken maken met \cline{j-i}, waarbij j en i de nummers van de kolommen zijn waaronder de horizontale lijn moet komen.

Nu wat voorbeelden van tabellen:

\begin{tabular}{|r|l|}
\hline
7C0 & hexadecimaal \\
3700 & octaal \\ \cline{2-2}
11111000000 & binair \\
\hline \hline
1984 & decimaal \\
\hline
\end{tabular}

\begin{tabular}{|p{4.7cm}|}
\hline
Hierbij een paragraaf maar nu zit deze paragraaf in een tabel.\\
\hline
\end{tabular}

Verder kunnen we ook de standaard ruimte tussen kolommen nog aanpassen. Dit doen we met het commando @{...} waarbij de standaard ruimte van kolommen vervangen wordt door datgene wat tussen accolades staat. Dit is bijvoorbeeld handig voor het opmaken van decimale getallen (zie volgend stukje). Ook kunnen we het gebruiken om de witruimtes voor en na een kolom weg te halen.

\begin{tabular}{@{} l @{}}
\hline
geen witruimtes meer tussen een kolom
\hline
\end{tabular}\\
\begin{tabular}{l}
\hline
wel witruimtes tussen een kolom\\
\hline
\end{tabular}

Aangezien LaTeX niet standaard een functie heeft om decimale getallen te laten centreren tenopzichte van de komma, gebruiken we een trucje door getallen in twee kolommen te zetten waarbij de witruimte tussen die kolommen vervangen wordt door een komma. Via het \multicolumn commando kunnen we zorgen dat de titel van onze 'kolom' met decimale getallen wordt gecentreerd boven deze twee kolommen.

\begin{tabular}{c r @{,} l}
Machten van $\pi$     &
\multicolumn{2}{c}{Value} \\
\hline
$\pi$               & 3&1416 \\
$\pi^{\pi}$         & 36&46  \\
$(\pi^{\pi})^{\pi}$ & 8066&7 \\
\end{tabular}

Meestal bevat een verslag, scripties en dergelijke veel afbeeldingen en tabellen. Deze objecten kunnen niet zoals normale tekst over meerdere pagina's worden verdeeld. Een methode om dit op te lossen is door het object op een nieuwe pagina zetten wanneer deze niet meer op de huidige pagina past. Het nadeel van deze methode is dat dan sommige pagina's dan gedeeltelijk leeg blijven.

De oplossing is om het object, dat niet meer op de pagina past, dan zwevend te maken zodat deze naar een later pagina verhuist terwijl de tekst op de huidige pagina gewoon door gaat. LaTeX heeft twee omgevingen voor zwevende objecten; één voor tabellen en één voor figuren/afbeeldingen. Om goed gebruik te maken van deze omgevingen is het belangrijk te weten hoe LaTeX zwevende objecten intern behandelt. Anders worden deze zwevende objecten alleen maar een bron van ergenis omdat LaTeX ze dan neerzet op een plek waar we ze juist niet willen hebben,

De volgende twee commando's starten een omgeving waardoor een object zwevend wordt:


\begin{figure}[positie specifatie] of \begin{table}[positie specificatie]

Beide commando's hebben een mogelijkheid positie specificatie om aan te geven waar het zwevend object op de pagina mag worden neergezet. Deze rechten zijn:

Een voorbeeld van een zwevende tabel:

\begin{table}[!hbp]

Volgens de positie specificatie mag LaTeX deze tabel direct hier (h) in de tekst plaatsten, onderaan aan een pagina (o) of op een speciale pagina voor zwevende objecten (p) zelfs als het voor LaTeX een slechte opmaak geeft. Als we de positie specificatie niet opgeven dan gaat LaTeX uit van [tbp].

LaTeX kijkt wanneer ie een zwevend object tegenkomt, of deze op de huidige pagina neer is te zetten volgens de opgeven restricties in de posititie specificatie . Mocht erg geen ruimte meer zijn dan wordt het object of in de tabel-wachtrij of figuur-wachtrij neergezet. Bovenaan zo'n wachtrij staat het object dat als eerste in de wachtrij is geplaatst. Wanneer een nieuwe pagina wordt gestart dan kijkt LaTeX eerst of dit een 'speciale' pagina is voor zwevende objecten. Als dit niet het geval dan wordt het zwevende object dat als eerst in de wachtrij was geplaatst, gezien alsof het op deze nieuwe pagina was aangeroepen en LaTeX probeert het zwevende object opnieuw te plaatsten volgens de opgegeven restricties (behalve h want dat kan niet meer). Nieuwe zwevende objecten die op deze nieuwe pagina in de tekst staan worden weer in de desbetreffende wachtrijen gezet. Oftewel de originele volgorde van zwevende objecten blijft behouden. Dus als een zwevend object nergens meer past dan worden alle andere zwevende objecten aan het einde van het document geplaatst. Conclusie:

Als LaTeX zwevende objecten niet plaatst zoals we willen, dan is er meestal één zwevend object (figuur of tabel) die beide wachtrijen van zwevende objecten stoort.

Het is mogelijk om LaTeX te forceren om een zwevend object op één manier op een pagina te plaatsten door in de positie specificatie één mogelijkheid te zetten. Dit is alleen niet aan te raden omdat als het object niet past, andere zwevende objecten in de wachtrij geblokkeert kunnen worden.

Dit was even het moeilijke gedeelte maar er is nog meer te melden over de table en figure omgevingen. Met het

\caption{onderschrift tekst}

commando kunnen we een onderschrift bij het zwevende object plaatsen. LaTeX voegt automatisch de tekst "Figure", "Table", of een equivalent in een andere taal toe aan het onderschrift.

De twee commando's

\listoffigures of \listoftables

geeft een lijst van figuren en tabellen zoals bij het \tableofcontents commando. In deze lijsten wordt het hele onderschrift weergegeven. Mochten we lange onderschriften hebben dan moeten we deze afkorten. Dit is mogelijk door de afgekorte versie tussen vierkante haken zetten na het \caption commando.

\caption[Kort]{Kort en krachtige onderschriften zijn beter}

Met \label en \ref kunnen we referenties naar zwevende objecten in de tekst plaatsten.

Hiervan een voorbeeld:

Gebruik figuur~\ref{e_schema2} voor onderstaande opdracht.

\begin{figure}[!htp]\includegraphics[width=0.7\textwidth]{E_schema2.eps}
\caption{Energie schema's van hexatrieen en cyclohexadieen.} \label{e_schema2}
\end{figure}

In sommige gevallen is het handig om het

\clearpage of zelfs het \cleardoublepage

commando te gebruiken. Het geeft de opdracht aan LaTeX om alle zwevende objecten die nog in de wachtrij staan meteen in te voegen en een nieuwe pagina te starten. Het commando \cleardoublepage voegt zelfs nog een tweede pagina toe.

Hierboven in het voorbeeld hebben we het commando \includegraphics gebruikt om een Encapsulated PostScript afbeelding in het document op te nemen. Later in deze cursus leggen we precies uit hoe we dit moeten doen.

Sommige commando's waarbij tekst als een argument wordt meegegeven zoals \caption of \section staan meestal meerdere keren in een document. Als we bij deze commando's in het argument ook nog een commando meegeven dan werkt het soms niet goed. Dat gebeurt bij delicate commando's zoals \footnote of \phantom. Deze commando's hebben een extra commando \protect nodig om ze weer goed te laten werken.

\protect werkt alleen op het commando wat er direct achter staat. Dus niet op het argument van het desbetreffende commando.

Zo dit was het voor deze keer. De volgende keer gaan we echte werk doen. We behandelen dan namelijk het maken van formules en wiskundige symbolen, iets waar LaTeX heel sterk in is.

Voor verdere opmerkingen of vragen, ben ik bereikbaar op onderstaand e-mailadres:

dtanis@student.ru.nl

Dick Tanis