# LaTeX/Figuren en drijvende omgevingen
## Importeren van afbeeldingen met het graphicx pakket

LaTeX kan niet zomaar figuren verwerken. Het enige dat LaTeX doet is plaats voorzien om daar een figuur in te plaatsen en dan die figuur op die plaats tonen zonder enige andere bewerkingen. Als je figuren gebruikt moeten ze dus om te beginnen al in het goede formaat staan.
Om figuren in te voegen moet je eerst het graphicx-pakket laden. Zoals je waarschijnlijk wel weet, zou dit in correct Engels graphics moeten zijn. Het pakket graphics bestaat immers al heel lang maar wordt als verouderd beschouwd. Het modernere pakket heeft dan maar de naam graphicx gekregen, omdat ze vanwege de LaTeX Project Public License niet opnieuw de naam graphics mochten gebruiken. Het graphicx-pakket kun je laden door de code
in je pre-ambule te zetten.
Je moet weten dat figuren importeren in LaTeX in feite heel simpel is, zolang je figuur maar in het goede formaat staat voor je ze importeert. Het meeste werk aan figuren in LaTeX krijgen is dan ook de figuren in het juiste formaat te krijgen.
Als je in LaTeX een figuur importeert zoals hieronder beschreven staat, dan zal LaTeX die figuur behandelen zoals een letter behandeld wordt. Als je een figuur dus gewoon tussen tekst zet, dan zal die daar echt tussen staan.

### Documentklasse-opties

Als je in de opties van je documentclass de optie draft vermeld, dan zal LaTeX alle figuren vervangen door een kadertje met de naam van je figuur er in. Dit kan handig zijn als je grote documenten aan het maken bent met veel afbeeldingen waardoor het lang duurt om je document te bouwen.

### Ondersteunde formaten

Welke formaten je kunt gebruiken hangt af van welke uitvoer je kiest. Als je LaTeX-uitvoer kiest (naar een DVI-document) dan mogen je figuren van een ander formaat zijn dan bij het gebruiken van pdfLaTeX.

#### Compileren met pdfLaTeX

Als je met pdfLaTeX werkt heb je de grootste keuze aan formaten:
* JPG: Het beste formaat om foto's in te voegen. JPG is ook het formaat dat meestal gebruikt wordt op het internet.
* PNG: Een verliesvrij gecomprimeerd formaat en het is de beste keuze voor computer-gegenereerde afbeeldingen waar je geen vectorafbeelding van hebt (zoals screenshots).
* PDF: Kan zowel vectorbestanden als bitmap bestanden bevatten, maar voor bitmapbestanden is het het beste om een van de vorige formaten te gebruiken.
Opmerkingen:
PDF wordt voornamelijk gebruikt voor documenten, dus zijn er niet veel grafische programma's die rechtstreeks met PDF-bestanden kunnen werken. Een oplossing kan zijn om eerst een EPS-bestand aan te maken en dat dan te converteren naar een PDF-bestand met het commando epstopdf. Dit is geen LaTeX-commando maar moet via commandline worden uitgevoerd. Gebruik epstopdf als volgt:
   * Open een commandline. (In Windows Vista is deze moeilijk te vinden. Het makkelijkst is cmd in de zoekbalk te typen).
   * Gebruik het commando cd (change directory) om naar je gewenste map te gaan
   * Nu kun je het commando epstopdf met daarna je bestandsnaam gebruiken om je EPS-bestand naar een PDF-bestand om te zetten.
    Je kunt ook zelf een script maken om meer bestanden in een keer uit te voeren:
      * In Windows: maak een .bat bestand met de volgende code:
       for %%f in (*.eps) do epstopdf %%f
       Dit bestand kan dan via de commandline uitgevoerd worden (zonder argument) en zal alle EPS-bestanden naar PDF-bestanden omzetten
      * In Linux: Maak een bestand met de volgende code in (meestal wordt er geen extensie gebruikt, maar soms wordt .sh gebruikt):
       for i in $( ls *.eps); do epstopdf $i done
       Maak het bestand uitvoerbaar en met een simpele dubbelklik op het bestand converteer je alle EPS-afbeeldingen naar PDF-afbeeldingen.
Het programma inkscape is een grafisch openbron-programma dat kan werken met PDF-bestanden. Het kan ook gebruikt worden om bestanden tussen verschillende formaten te converteren.

#### Compileren met LaTeX

Als je compileert met LaTeX heb je echter maar één keuze. Het enige formaat dat je kunt gebruiken is EPS. EPS is een vectorbestand maar kan ook gebruikt worden om bitmap-figuren op te slaan. Er is echter veel geheugen nodig om een bitmap figuur in EPS-formaat op te slaan.
Veel grafische softwarepakketten hebben een optie om bestanden als EPS op te slaan. Hier volgen enkele voorbeelden: Software die EPS-bestanden als output heeft:
* Vectorbestanden maken en converteren
** Commerciële grafische vectorsoftware, zoals Adobe Illustrator, CorelDRAW, en FreeHand zijn veel gebruikt en kunnen EPS-bestanden lezen en schrijven. Het grote nadeel aan deze producten is echter dat ze enkel kunnen gebruikt worden op Windows en Mac OS.
** Inkscape kan EPS-bestanden schrijven, het werkt op de meeste platformen en is opensource. Inkscape kan echter niet zomaar EPS-bestanden openen. Het makkelijkst is het EPS bestand eerst naar PDF te converteren met de het hierboven vermelde epstopdf-commando.
* Maken en converteren van rooster-EPS-bestanden:
** GIMP, heeft een GUI en werkt op de meeste besturingssystemen. Het is ook opensource en dus gratis.
** Command-line gereedschappen (deze gereedschappen kunnen gemakkelijk geautomatiseerd worden met een batch of bash script):
*** Sam2p (convert) of
*** ImageMagick (convert) of
*** GraphicsMagick (gm convert).
** Deze drie programma's worden op ongeveer dezelfde manier bediend en kunnen tussen de meeste grafische formaten converteren. Sam2p is echter de recentste en lijkt de beste kwaliteit te leveren voor de kleinste bestandsgrootte.
*** imgtops. Een eenvoudig grafisch programma.
* Maken van publicatie-kwaliteit vector-gebaseerde plots en grafieken:
** Gnuplot, gebruikt voor het produceren van wetenschappelijke tekeningen sinds 1986.
** R, statistische en wetenschappelijke figuren.
** Generic Mapping Tools (GMT), kaarten en veel gemakkelijk aanpasbare plots.
** Gnumeric, spreadsheet programma, heeft SVG, EPS, PDF export functies.
** Geogabr meetkundig tekenprogramma, bedoeld voor middelbaar leerlingniveau.
Er zijn ook mogelijkheden om andere types bestanden in LaTeX te krijgen. Deze zijn echter veel te ingewikkeld. Het is veel eenvoudiger een van de bovenstaande technieken toe te passen.

### De figuren invoegen

Om figuren in te voegen (als we aannemen dat ze in een van de bovenstaande formaten staan) moet je enkel het commando
In je LaTeX-document invoegen. Een extensie is niet nodig, als er meer bestanden zijn met dezelfde naam zal LaTeX zelf het bestand kiezen met dezelfde kwaliteit.
Het is ook aan te raden opties (i.v.m. de grootte e.d.) in het commando te zetten. Het commando met opties ziet er als volgt uit:
De mogelijke opties staan in een tabel hieronder.
| width=xx | Stel de breedte van de afbeelding in naar xx. | NB. Als je enkel de breedte of hoogte geeft als optie, dan zal de breedte/hoogteverhouding bewaard blijven |
| height=xx | Stel de hoogte van de afbeelding in naar xx. | NB. Als je enkel de breedte of hoogte geeft als optie, dan zal de breedte/hoogteverhouding bewaard blijven |
| keepaspectratio | Deze optie kan true of false zijn. Als ze true is, dan zal de verhouding van de afbeelding altijd bewaard blijven en zowel de breedte als de hoogte zullen kleiner zijn dan de aangegeven waarden bij de opties hierboven. | Deze optie kan true of false zijn. Als ze true is, dan zal de verhouding van de afbeelding altijd bewaard blijven en zowel de breedte als de hoogte zullen kleiner zijn dan de aangegeven waarden bij de opties hierboven. |
| scale=xx | Schaal de figuur met een bepaalde factor. Bijvoorbeeld 0.5 om te halveren of 2 om te verdubbelen. | Schaal de figuur met een bepaalde factor. Bijvoorbeeld 0.5 om te halveren of 2 om te verdubbelen. |
| angle=xx | Roteer de afbeelding met xx graden in positieve zin. | Roteer de afbeelding met xx graden in positieve zin. |
| trim=l b r t | Deze optie zal de foto bijsnijden met de aangegeven waarden: l van de linkerkant b van onderen (bottom) r van rechts t van boven (top). Let er echter op dat de clip-optie op true moet staan. | Deze optie zal de foto bijsnijden met de aangegeven waarden: l van de linkerkant b van onderen (bottom) r van rechts t van boven (top). Let er echter op dat de clip-optie op true moet staan. |
| clip | De clip-optie moet op true staan voor de trim kan werken. | De clip-optie moet op true staan voor de trim kan werken. |

### Voorbeelden

Dankzij een niet al te slim persoon zijn alle voorbeelden verdwenen: https://commons.wikimedia.org/wiki/Commons:Deletion_requests/File:Chick2.png Onze excuses voor het ongemak (of niet)--toch wel
Laten we enkele voorbeelden geven van graphicx.
Dit importeert de figuur zonder verwerking. Omdat deze figuur redelijk groot is hebben we ze niet getoond. Laten we voor het volgende voorbeeld de figuur verkleinen.
* \includegraphics[scale=0.5]{chick}
De figuur was gehalveerd. Als je meer precieze herschaling wil, dan kun je het als volgt doen:
* \includegraphics[width=2.5cm]{chick}
Je kunt de afbeelding ook herschalen met een argument dat dezelfde verhoudingen blijft behouden t.o.v. de tekst waarin het staat. Je kunt dit doen t.o.v. de breedte van een lijn (\linewidth), de breedte van de tekst op de pagina (\textwidth) of de hoogte van de tekst op de pagina (\textheight).
om te roteren:
* \includegraphics[scale=0.5, angle=180]{chick}
En als laatste: een voorbeeld over het bijsnijden van een afbeelding:
* %\includegraphics[trim = <trim from left> <from bottom> <from right> <from top>, clip, <other options>]{<image filename>}
* \includegraphics[trim = 10mm 80mm 20mm 5mm, clip, width=3cm]{chick}
Merk de clip-optie op, zonder zal de afbeelding niet bijgesneden worden.

## Drijvende omgevingen

Hierboven hebben we geleerd hoe we figuren in ons document kunnen brengen. Het is echter zo dat een figuur gewoon tussen twee paragrafen plaatsen zonder een verwijzing er naar niet echt professioneel is en dus biedt LaTeX een gemakkelijke manier aan om het wel professioneler te doen. Dit gebeurt met drijvende omgevingen (floats).
Drijvende omgevingen zijn omgevingen die gebruikt worden bij inhoud die niet over verschillende pagina's mag verdeeld worden. Dit is dus typisch bij figuren en tabellen. Omdat een drijvende omgeving dus niet mag gesplitst worden is er een algoritme in LaTeX dat bepaalt waar de drijvende omgeving dan moet komen om zo goed mogelijk te staan. Zo goed mogelijk is redelijk subjectief, maar LaTeX probeert de volgende eigenschappen te bekomen:
* De drijvende omgeving mag niet gesplitst worden over twee pagina's, dit is de eigenschap die altijd waar is
* In de tekst mogen geen weesregels voorkomen. Een weesregel is één enkele regel die boven een drijvende omgeving komt en alle andere tekst komt er onder, of net omgekeerd. Weesregels hebben een negatief effect op de tekst omdat mensen vaak die regel vergeten te lezen en zo de betekenis in de tekst verliezen.
* De afbeelding moet in de buurt staan van het punt in de code waar je ze invoegt.
Natuurlijk zijn er mogelijkheden het algoritme te beïnvloeden als blijkt dat LaTeX de drijvende omgeving niet goed zet. Het nadeel aan drijvende omgevingen is dat het algoritme dat LaTeX gebruikt niet goed overweg kan met een hoop na elkaar komende drijvende omgevingen. Soms zal LaTeX de drijvende omgevingen dan allemaal samen aan het einde van het hoofdstuk zetten uit protest. Als dit gebeurt, dan moet je eens goed nadenken of je tekst wel goed geschreven is. Bevat je tekst niet teveel figuren? Zou het niet beter zijn de figuren als bijlage toe te voegen?

### Figuren en tabellen

Figuren kun je in de drijvende figure-omgeving zetten en tabellen komen in de table-omgeving. Deze omgevingen zien eruit zoals alle andere omgevingen eruitzien:
Voor figuren:
en voor tabellen:
Deze omgevingen dienen dus niet om rechtstreeks een figuur in te voegen of de data van een tabel in te typen. In de figure moet je nog altijd de commando's van hierboven gebruiken en in de table-omgeving moet je ook nog altijd werken met een tabular-omgeving.
Als opties voor deze omgevingen heb je enkel een plaats optie. Deze optie dient om het algoritme te beïnvloeden. Het beste is om deze opties leeg te laten tot de tekst volledig geschreven is want het algoritme geeft betere resultaten als er meer tekst is. Als echter alle tekst geschreven is en je nog niet tevreden bent met het resultaat, dan kun je de onderstaande opties proberen:
| Optie | Resultaat |
| h | Plaats de omgeving hier, dit wil zeggen zo dicht mogelijk bij het punt in de tekst waar het opgeroepen werd. |
| t | Plaats de omgeving aan de bovenkant (top) van een pagina. |
| b | Plaats de omgeving aan de onderkant (bottom) van een pagina. |
| p | Spaar alle volgende omgevingen op tot er genoeg zijn om een pagina met enkel drijvende omgevingen te vullen. |
| ! | Forceer een van de vorige opties. |
Het is perfect mogelijk verschillende opties mee te geven, zo wil de optie [tb] zeggen dat je het aan de bovenkant of aan de onderkant van een pagina wilt, maar niet in het midden. Het is af te raden om het ! te gebruiken omdat dit het algoritme zodanig beïnvloedt dat het de plaatsing van andere drijvende omgevingen volledig door elkaar kan gooien. Als je te veel uitroeptekens moet gebruiken moet je opnieuw eens nadenken of je niet te veel figuren hebt t.o.v. de hoeveelheid tekst.

## Bijschriften

Om over een figuur of tabel te praten is het altijd handig dat die figuur een naam krijgt. Gelukkig is dit heel gemakkelijk met LaTeX. Het enige wat je moet doen is het \caption{tekst}-commando bij je figuur/tabel zetten. De figuur/tabel krijgt dan automatisch een nummer en de tekst van het \caption-commando verschijnt ook bij de figuur/tabel.
Meestal wordt het \caption-commando onder het \includegraphics-commando of onder de tabular-omgeving gezet, dan verschijnt het bijschrift ook onder de figuur/tabel. Je kunt echter even goed het \caption-commando boven het inhoudelijk commando zetten, dan verschijnt het bijschrift boven de figuur. Het is echter wel belangrijk dat het \caption-commando binnen de drijvende omgeving staat.
Laten we enkele voorbeelden geven:
Opmerkingen:
* Het gebruik van het pakket \usepackage[dutch]{babel} zorgt er voor dat de drijvende omgevingen een nederlandstalige naam krijgen, zoals figuur en tabel.
* De figuren en tabellen krijgen een aparte nummering.

### Lijst van de figuren en tabellen

Net zoals het gemakkelijk is een inhoudsopgave te tonen in LaTeX kun je ook gemakkelijk een lijst van de figuren of een lijst van de tabellen tonen. Dit gebeurt door de volgende commando's op de plaats in het document te zetten waar je wil dat de lijst komt.
Als je deze lijst gebruikt kan het handig zijn het optionele argument van het \caption-commando te gebruiken. Het volledige \caption-commando ziet er immers als volgt uit:
Zoals je ziet (aan de vierkante haakjes) is de korte beschrijving optioneel. De korte beschrijving is degene die gebruikt wordt in de lijst van figuren of tabellen. Als je geen korte beschrijving opgeeft, wordt de standaard beschrijving gebruikt in de lijsten.

### Zijdelingse bijschriften

Als je lange bijschriften wil schrijven kan het handig zijn de bijschriften naast de figuur te plaatsen. Het pakket sidecap kan je daar bij helpen. Het sidecap-pakket staat je toe de SCfigure- en SCtable-omgevingen te gebruiken. We geven een voorbeeldje:

### Labels en referenties

Labels en referenties worden in het gelijknamige hoofdstuk behandeld.

### Tekst rond figuren zetten

Soms kun je als auteur liever hebben dat de tekst rond je figuren loopt i.p.v. onderbroken wordt. Het spreekt voor zich dat je dit enkel kunt doen als je figuur veel smaller is dan de tekst. Om dit effect te verkrijgen zullen we het wrapfig-pakket gebruiken. Er zijn verschillende pakketten gemaakt met hetzelfde doel, maar geen enkel pakket is volledig goed. Misschien zal dit in de toekomst opgelost raken. Anders moet je je eigen pakket beginnen schrijven. Om het wrapfig-pakket te laden gebruik je de code
We geven een voorbeeldje:
We moeten wel een waarschuwing geven over het gebruik van dit pakket. Het kan namelijk gebeuren dat je op een paginasplitsing terecht komt en dan gebeurt het volgende:
Als je kijkt naar de code, dan zie je dat de wrapfigure-omgeving twee verplichte argumenten heeft. Het tweede argument is duidelijk, dat is de breedte van de omgeving. Let er wel op dat de omgeving net iets breder is dan de afbeelding zelf. Als ze even breed zijn, dan plakt de tekst tegen de figuur en als de figuur breder is, dan komt de figuur door de tekst. Het eerste argument is minder duidelijk. Dit is de plaatsing van de omgeving. De opties staan in de tabel hieronder:
| r | Langs de rechterkant. |
| l | Langs de linkerkant. |
| R | Langs de rechterkant maar met een drijvende optie, om splitsing over pagina's tegen te gaan. |
| L | Langs de linkerkant maar met een drijvende optie. |
| i | Voor de binnenkant van de pagina (bij een tweezijdig document, zie Documentklasse) |
| o | Voor de buitenkant van de pagina. |
| I | Voor de binnenkant van de pagina, met een drijvende optie. |
| O | Voor de buitenkant van de pagina, met een drijvende optie. |

### Subfloats

Voor deze sectie heb ik gewoon de engelstalige titel overgenomen omdat onderdrijven nogal idioot klinkt. Als je een betere term weet, wijzig de bovenstaande titel gerust en pas de tekst ook maar wat aan. Na een klein beetje purisme gaan we back to business. Wat je wilt doen met een subfloat is figuren die onder een gemeenschappelijke titel passen ook samen in een drijvende omgeving zetten. Natuurlijk kunnen we gewoon meer \includegraphics-commando's in een drijvende omgeving zetten maar het pakket subfloat geeft ons nog een aantal extra mogelijkheden. Zo is het met een subfloat mogelijk naast een algemene titel voor alle afbeeldingen in de hoofdomgeving ook een klein titeltje per afbeelding te zetten. Je kunt ook apart verwijzen naar figuren aangezien ze een aparte letter krijgen. Hieronder geven we een voorbeeldje:
Opmerkingen:
* De \label-commando's zijn nog niet behandeld maar dit gebeurt in het hoofdstuk over labels en referenties. Ze zijn hier enkel opgenomen in de code ter verduidelijking omdat het niet normaal is zoveel labels na elkaar te hebben.
* Let op de dubbele backslash (\\) na de tweede afbeelding. Die zorgt er voor dat de afbeeldingen over twee regels verdeeld zijn. Normaal zou het pakket zelf naar een nieuwe regel moeten gaan maar dit gebeurt in sommige gevallen niet.