LaTeX/Algoritmes en broncodes: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
DimiC88 (overleg | bijdragen)
kGeen bewerkingssamenvatting
Lintfouten: Verouderde HTML-elementen
 
Regel 4:
==Algoritmes==
 
Als je algoritmes met een mooie lay-out wilt zetten gebruik je best het <ttcode>algorithmic</ttcode>-pakket (let op de ''h''). Met dit pakket kun je het algoritme op een logische manier opbouwen zoals je de code zou schrijven in een eenvoudige programmeertaal. Het pakket zal dan de code verwerken tot een mooi ogend algoritme.
 
<syntaxhighlight lang="LaTeX">
Regel 10:
</syntaxhighlight>
 
Een algoritme moet je maken binnen een <ttcode>algorithmic</ttcode>-omgeving. We geven een klein voorbeeld:
 
<syntaxhighlight lang="LaTeX">
Regel 22:
\ENDIF
\end{algorithmic}
</syntaxhighlight><br />
[[Bestand:Latex-algorithmic-if-else.png|300px]]
 
===Programmeertaal===
 
Natuurlijk moet het <ttcode>algorithmic</ttcode>-pakket de code zelf ook interpreteren om een degelijke output te krijgen, daarom moet je de algoritmes ook in een gestandaardiseerde manier neerschrijven.
 
====Gewone opdrachten====
 
Onder de gewone opdrachten valt alles wat op één regel komt. Dit zijn bijvoorbeeld oproepen van een andere functie of het toewijzen van een waarde aan een variabele. Een gewone opdracht moet altijd met het <ttcode>\STATE</ttcode>-commando beginnen (let op de hoofdletters). Na het state-commando volgt dan je opdracht. Het is aan te raden opdrachten altijd in wiskunde-modus te schrijven, dan kun je de uitgebreide verzameling aan wiskundige symbolen gebruiken. Een voorbeeld van een klein algoritme:
 
<syntaxhighlight lang="LaTeX">
Regel 44:
De volgende codes spreken voor zich:
 
<ttcode>\IF{<conditie>} <uit te voeren code> \ENDIF<br />
\IF{<conditie>} <uit te voeren code> \ELSE <uit te voeren code> \ENDIF<br />
\IF{<conditie>} <uit te voeren code> \ELSIF{<conditie>} <uit te voeren code> \ELSE <uit te voeren code> \ENDIF<br /></ttcode>
 
Het doet er niet toe of je alles nu op een lijn zet of het splitst over verschillende lijnen, het <ttcode>algorithmic</ttcode>-pakket zorgt voor zijn eigen uitlijning.
 
====Lussen====
 
<ttcode>\FOR{<conditie>} <te herhalen code> \ENDFOR<br />
\FORALL{<conditie>} <te herhalen code> \ENDFOR<br />
\WHILE{<conditie>} <te herhalen code> \ENDWHILE<br /></ttcode>
 
Een lus die normaal niet in programmeertalen zit is de oneindige lus, te vergelijken met ''while(true)''. In het <ttcode>algorithmic</ttcode>-pakket krijgt deze lus een eigen naam.
 
<ttcode>\LOOP <te herhalen code> \ENDLOOP</ttcode>
 
====Pre- en postcondities====
 
In het <ttcode>algorithmic</ttcode>-pakket kun je ook pre- en postcondities invoegen met de volgende commando's:
 
<ttcode>\REQUIRE <preconditie><br />
\ENSURE <postconditie></ttcode>
 
====Andere commando's====
Regel 71:
De andere commando's spreken ook voor zich aangezien ze gebruikt worden in zowat alle programmeertalen.
 
<ttcode>\RETURN <te returnen waarde><br />
\PRINT <een variabele of een vaste tekst><br />
\COMMENT <commentaar><br /></ttcode>
 
Merk op dat het commentaar bij een <ttcode>\COMMENT</ttcode>-commando altijd op dezelfde regel als het vorige commando verschijnt. Het is dan ook niet toegestaan om het <ttcode>\COMMENT</ttcode>-commando te gebruiken na een commando zoals <ttcode>\IF</ttcode>.
 
===Regelnummering===
Regel 89:
===Een drijvende omgeving===
 
Net zoals er voor figuren en tabellen een drijvende omgeving bestaat is er ook zo'n omgeving voor algoritmes. Deze omgeving heeft de naam <ttcode>algorithm</ttcode> gekregen en werkt volledig gelijkaardig aan de [[LaTeX/Figuren en drijvende omgevingen#Drijvende omgevingen|<ttcode>figure</ttcode>]]-omgeving.
 
Als je nog meer informatie wilt, kun je nog eens de [http://developer.berlios.de/docman/display_doc.php?docid=800&group_id=3442 originele handleiding] bekijken ook.
 
==De <ttcode>verbatim</ttcode>-omgeving==
 
Om de <ttcode>verbatim</ttcode>-omgeving te gebruiken moet je eerst het <ttcode>verbatim</ttcode>-pakket laden.
 
<syntaxhighlight lang="LaTeX">
Regel 101:
</syntaxhighlight>
 
De <ttcode>verbatim</ttcode>-omgeving zelf werkt zeer eenvoudig. Alles wat je in die omgeving zet wordt rechtstreeks weergegeven, zonder enige opmaak. Je gebruikt de omgeving dus als volgt:
 
<syntaxhighlight lang="LaTeX">
Regel 109:
</syntaxhighlight>
 
Je kan ook het <ttcode>\verb</ttcode>-commando gebruiken om iets (b.v. de naam van een veriabele) letterlijk weer te geven binnen een regel. Na het <ttcode>\verb</ttcode>-commando moet je eerst een teken gebruiken dat nergens in je code vooromt, b.v. een ":" of een "=", daarna typ je de code die je wil weergeven en je sluit weer af met hetzelfde teken als je eerst gebruikt hebt. We geven een voorbeeldje:
 
<syntaxhighlight lang="LaTeX">
Regel 115:
</syntaxhighlight>
 
==Het <ttcode>listings</ttcode>-pakket==
 
Het <ttcode>listings</ttcode>-pakket is veel geavanceerder dan het <ttcode>verbatim</ttcode>-pakket. Om listings te gebruiken moet je eerst het <ttcode>listings</ttcode>-pakket laden:
 
<syntaxhighlight lang="LaTeX">
Regel 123:
</syntaxhighlight>
 
Merk even op dat alle commando's van het <ttcode>listings</ttcode>-pakket beginnen met <ttcode>lst</ttcode>, dit is om zeker in orde te zijn met de lppl-licentie.
 
De code zelf zet je in een <ttcode>lstlisting</ttcode>-omgeving, net zoals bij de <ttcode>verbatim</ttcode>-omgeving, om inline code te zetten gebruik je het <ttcode>\lstinline</ttcode>-commando op dezelfde manier als het <ttcode>\verb</ttcode>-commando. Je kunt ook code van een extern document laden met het commando <ttcode>\lstinputlisting{padNaarHetBestand}</ttcode> waarbij <ttcode>padNaarHetBestand</ttcode> de (relatieve) locatie van het bronbestand is. Als je code van een bronbestand laadt, ben je zeker dat de code in je LaTeX-document altijd actueel is en zo hou je je LaTeX-document ook meer overzichtelijk. Als de broncode niet dicht bij je LaTeX-document staat (dus niet in dezelfde map of een submap) of je begint te werken met absolute paden, dan zorg je er wel voor dat je LaTeX-document niet op andere computers gecompileerd kan worden.
Alle opties in het <ttcode>listings</ttcode>-pakket hebben eenzelfde structuur: iedere optie kan bepaald worden door een sleutel <ttcode>sleutel=waarde</ttcode>-structuur. De taal waarin je code geschreven is, is ook zo'n optie en wordt dus ook op een dergelijke manier bepaald.
 
===De programmeertaal definiëren===
 
Meestal gebruik je voor het volledige document eenzelfde programmeertaal, dan kun je deze taal in de hoofding definiëren. De taal <ttcode>pascal</ttcode> voor je volledig document definiëren doe je als volgt:
 
<syntaxhighlight lang="LaTeX">
Regel 136:
</syntaxhighlight>
 
De ''sleutel'' is hier dus <ttcode>language</ttcode> en de waarde die je aan de ''sleutel'' geeft is <ttcode>Pascal</ttcode>.
 
Alles wat je als opties binnen het <ttcode>lstset</ttcode>-commando zet kun je ook per <ttcode>lstlisting</ttcode>-omgeving apart definiëren als optie. Dit doe je zoals het voorbeeld hier onder:
 
<syntaxhighlight lang="LaTeX">
Regel 151:
\end{lstlisting}
</syntaxhighlight>
Ook met het commando <ttcode>\lstinputlisting</ttcode> kun je dezelfde opties gebruiken:<syntaxhighlight lang="LaTeX">
\lstinputlisting[language=pascal]{padVanHetBestand}</syntaxhighlight>
 
Van sommige talen zijn er ook dialecten, deze kun je opvragen als <ttcode>language=[XSC]Pascal</ttcode>
 
====Voorgedefinieerde talen====
Regel 160:
Hieronder staat een tabel met voorgedefinieerde talen, tussen haakjes zijn mogelijke dialecten aangegeven en de standaard dialecten zijn onderlijnd.
 
{|{{prettytablewikitable}}
|-
|[[w:ABAP|ABAP]] (R/2 4.3, R/2 5.0, R/3 3.1, R/3 4.6C, <u>R/3 6.10</u>)
Regel 268:
===Regelnummering===
 
In verband met regelnummering zijn er ook heel wat opties in het <ttcode>listings</ttcode>-pakket. De opties zijn hieronder opgesomd en moeten gebruikt worden zoals je de taal bepaalt.
 
{|{{prettytablewikitable}}
!sleutel
!omschrijving
|-
|<ttcode>firstline</ttcode>=<Getal>
|De eerste regel die wordt weergegeven (kun je gebruiken als je enkel een deel code vanuit een extern bestand wilt weergeven)
|-
|<ttcode>lastline</ttcode>=<Getal>
|De laatste regel die wordt weergegeven (zie <ttcode>firstline</ttcode>)
|-
|<ttcode>linerange</ttcode>=<begin1>-<einde1>,<begin2>-<einde2>...
|De vorige twee commando's in één met de mogelijkheid om meer blokken samen te nemen. <begin1>,<einde1> ... zijn allemaal regelnummers.
|-
|<ttcode>numbers=<none/left/right></ttcode>
|De plaats waar de regelnummers geplaatst worden.
|-
|<ttcode>numberstyle</ttcode>=<Opmaakstijl>
|De opmaak voor de regelnummers, je kunt mogelijk <ttcode>\tiny</ttcode> of <ttcode>\color{blue}</ttcode> gebruiken.
|-
|<ttcode>numbersep</ttcode>=<Afstand>
|De afstand van de linkerkant van de regelnummers tot de linkermarge van de broncode.
|-
|<ttcode>stepnumber</ttcode>=<Getal>
|Per hoeveel nummers geteld wordt.
|-
|<ttcode>firstnumber</ttcode>=<<ttcode>auto/last/</ttcode><getal>>
|Bij welk nummer je begint te tellen, <ttcode>auto</ttcode> begint bij 1 voor een nieuwe listing en bij het overeenkomstige regelnummer als je een extern bestand opvraagt. <ttcode>last</ttcode> begint waar de vorige listing gestopt is en je kunt natuurlijk ook een exact getal ingeven.
|}
 
Regel 303:
Escapen kun je vertalen door ''ontsnappen''. We gaan hier dus in onze broncode ontsnappen naar LaTeX. Je kunt dit gebruiken om dynamisch naar regels te verwijzen, om over iets commentaar te geven in wiskunde-modus en om willekeurige, eenmalige opmaak te geven aan je code-documenten.
 
De eerste optie die je kunt gebruiken is de <ttcode>\texcl=true|flase</ttcode>-optie. Met deze optie zorg je er voor dat alle commentaar als <ttcode>LaTeX</ttcode> geïnterpreteerd wordt.
 
Je kunt ook de optie <ttcode>\mathescape=true|false</ttcode> gebruiken om naar wiskunde-modus over te schakelen tussen twee $-tekens. Zorg wel dat er dan geen $-tekens gebruikt worden in je code.
 
Uiteindelijk heb je nog vier commando's om volledig zelf te bepalen wanneer je naar LaTeX modus overschakelt:
{|{{prettytablewikitable}}
|-
|<ttcode>\escapechar</ttcode>=<karakter>
|tussen twee karakters die opgegeven zijn zal er overgegaan worden op LaTeX-modus. Let wel op, als het karakter dat je wilt opgeven een speciale betekenis heeft in LaTeX (zoals het %-teken), dan moet je er een backslash voor zetten (\%).
|-
|<ttcode>escapeinside</ttcode>=<karakter1><karakter2>
|Hetzelfde zoals hierboven maar voor verschillende begin- en eindkarakters
|-
|<ttcode>escapebegin</ttcode>=<karakters>
|Hetzelfde als hierboven maar voor de duidelijkheid kun je het over twee commando's splitsen.
|-
|<ttcode>escapeend</ttcode>=<karakters>
|Hetzelfde als hierboven maar voor de duidelijkheid kun je het over twee commando's splitsen.
|}
om de kracht van het escapen naar LaTeX te zien kun je eens onderstaande code uitproberen. Als je pdfLaTeX gebruik kun je ook het pakket <ttcode>pdfpages</ttcode> toevoegen om een hyperlink naar de juiste regel te krijgen.
 
<syntaxhighlight lang="LaTeX">
Regel 357:
Je kunt ook een dergelijke structuur gebruiken om een dynamisch deel van je tekst te selecteren. In de vorige subsectie heb je gezien dat je delen van je code kunt selecteren om in te voegen in je document. Bij dat selecteren moest je echter vaste regelnummers kiezen. Dit is niet aan te raden als de code nog in ontwikkeling is en er dus nog regels kunnen bij komen. De makers van het listings-pakket waarschuwen wel dat het nog om een experimentele optie gaat, het zou dus kunnen dat in latere versies de syntax of de uitvoer licht gewijzigd wordt en je document niet meer 100% compatibel is.
 
In de uitleg zullen we ook het woord label gebuiken, merk op dat het hier niet gaat om een LaTeX-label maar een label dat enkel binnen het <ttcode>listings</ttcode>-pakket kan gebruikt worden.
 
De twee commando's die je nodig hebt zijn:
{|{{prettytablewikitable}}
|<ttcode>rangeprefix</ttcode>=<karakters>
|De karakters die gebruikt worden om het begin van een label aan te geven.
|-
|<ttcode>rangesuffix</ttcode>=<karakters>
|De karakters die gebruikt worden om het einde van een label aan te geven.
|-
|<ttcode>includerangemarker=true/false</ttcode>
|Toon of verberg de regels waar het label staat.
|}
Regel 404:
 
</syntaxhighlight>
Let wel even op het regelnummer in je document. Het <ttcode>listings</ttcode>-pakket begint standaard te tellen bij 1 aan het begin van de code, maar nu geef je die code niet meer weer. Je kunt mogelijk het pakket instellen om regelnummers weer te geven of je kunt instellen om te beginnen tellen bij de eerste regen van de weergegeven code, dit is al behandeld in een vroegere subsectie.
 
===Kaders en lijnen rond je code===
 
Het eenvoudigste om een kader rond je code te zetten is met de optie <ttcode>frame=''type''</ttcode> waarbij het ''type'' een van de volgende tabel is:
{|{{prettytablewikitable}}
|<ttcode>none</ttcode>
| Geen lijnen.
|-
|<ttcode>leftline</ttcode>
| Een enkele lijn langs de linkerkant.
|-
|<ttcode>topline</ttcode>
|Een enkele lijn langs de bovenkant.
|-
|<ttcode>bottomline</ttcode>
|Een enkele lijn langs de onderkant.
|-
|<ttcode>lines</ttcode>
|Twee enkele lijnen langs de boven en onderkant.
|-
|<ttcode>single</ttcode>
|Een enkel kader.
|-
|<ttcode>shadowbox</ttcode>
|Een schaduw aan je kader geven.
|-
|}
 
Het is ook mogelijk zelf te bepalen welke lijnen je toont i.p.v. een van de vorige keuzes te nemen. Dit is mogelijk door als argument aan de <ttcode>frame</ttcode>-optie enkele van de letters '''tbrlTBRL''' te geven. De hoofdletters stellen dubbele lijnen voor en de kleine letters enkele lijnen. De karakters zelf staan voor waar welke lijn moet getekend worden:
 
{|{{prettytablewikitable}}
|'''t,T'''
|boven (top)
Regel 462:
</syntaxhighlight>
 
een kader rond de java code weergeven met onder en boven een dubbele lijn. Het is het best deze optie met het <ttcode>\lstset</ttcode>-commando te definiëren omdat dan voor alle omgevingen hetzelfde kader gebruikt wordt.
 
====Ronde hoeken====
 
Het is ook mogelijk om ronde hoeken aan je kaders te geven. Dit wordt met de optie <ttcode>frameround</ttcode> gegeven. Als argument bij deze optie horen vier letters. De eerste letter stelt de ronding van de rechter bovenhoek voor, de tweede de rechter benedenhoek, de derde de linker benedenhoek en de vierde en laatste de linker bovenhoek. Ze beginnen dus te tellen bij de rechter bovenhoek en gaan verder in wijzerzin. De letters die je kunt gebruiken zijn <ttcode>t</ttcode> en <ttcode>f</ttcode>. <ttcode>t</ttcode> stelt een afgeronde hoek voor en <ttcode>f</ttcode> een vierkante hoek. De opties <ttcode>frame=RBtl,frameround=ftft</ttcode> stellen dus een kader voor met de onderste en de rechtse lijn dubbel, de andere lijnen enkel en met de linker bovenhoek en de rechter benedenhoek afgerond.
 
Let er wel op dat een viewer zoals adobe wat meer moeite heeft met ronde dan met rechte hoeken. Kijk dus goed of alles correct wordt weergegeven.
Regel 472:
====Kaders en regelnummering====
 
Standaard staat de regelnummering links van de code. Als er dus een kader getekend wordt, dan valt die nummering buiten het kader. Dit kan de bedoeling zijn maar meestal is het niet zo mooi. Je kunt dit oplossen door het kader iets groter te maken met de <ttcode>framexleftmargin</ttcode> optie. Waarschijnlijk zal 5mm groot genoeg zijn, gebruik daarvoor de optie <ttcode>framexleftmargin=5mm</ttcode>.
 
====Achtergrondkleur====
 
Het kan duidelijk zijn als je je code in een achtergrondkleur zet. Dit kan eenvoudig gebeuren met de optie <ttcode>backgroundcolor</ttcode>. Als argument moet je een kleur meegeven zoals uitgelegd in de sectie over [[LaTeX/Tekstopmaak#Kleuren|kleuren]]. Als je bijvoorbeeld een grijze achtergrond wilt, kun je de optie <ttcode>backgroundcolor=\color{gray}</ttcode> gebruiken.
 
Het is wel aan te raden je eigen grijs te definiëren (zoals onder in de sectie over [[LaTeX/Tekstopmaak#Kleuren|kleuren]] uitgelegd) en als je met kleuren werkt, dan werk je beter met eenvoudige of zelfs zonder kaders.
 
{{subSub}}
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.