LaTeX/Algoritmes en broncodes: verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Sanderd17 (overleg | bijdragen)
k toevoegen aan inhoud
spelling gecorrigeerd
Regel 1:
{{LaTeX inhoud}}
LaTeX kan goed overweg met het zetten van broncodes, er is zelfs automatische syntax -kleuring, automatische update naar nieuwe code, verwijzing naar regelnummers ... Dit houden we echter even voor later, we gaan eerst de tekstzetting van algoritmes (pseudocode) beschrijven, daarna komt er een korte sectie over letterlijke code zonder opmaak tonen en uiteindelijk de langverwachte sectie over uitgebreide codezetting.
 
==Algoritmes==
 
Als je algoritmes met een mooie layout wilwilt zetten gebruik je best het <tt>algorithmic</tt>-pakket (let op de ''h'') pakket. Met dit pakket kankun 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.
 
<source lang="LaTeX">
Regel 10:
</source>
 
Een algortimealgoritme moet je maken binnen een <tt>algorithmic</tt> -omgeving. We geven een klein voorbeeld:
 
<source lang="LaTeX">
Regel 27:
===Programmeertaal===
 
Natuurlijk moet het <tt>algorithmic</tt> -pakket de code zelf ook interpreteren om een degelijke output te krijgen, daarom moet je de algoritmes ook in een gestandariseerdegestandaardiseerde manier neerschrijven.
 
====Gewone opdrachten====
 
Onder de gewone opdrachten valt alles wat op één regel komt. ZoalsDit hetzijn bijvoorbeeld oproepen van een andere functie of het toewijzntoewijzen van een waarde aan een variabele. Een gewone opdracht moet altijd met het <tt>\STATE</tt> -commando beginnen (let op de hoofdletters). Na het state -commando volgt dan je opdracht. Het is aan te raden om opdrachten altijd in wiskunde -modus te schrijven, dan kankun je de uitgebreide verzameling aan wiskundige symbolen gebruiken. Een voorbeeld van een klein algoritme:
 
<source lang="LaTeX">
Regel 48:
\IF{<conditie>} <uit te voeren code> \ELSIF{<conditie>} <uit te voeren code> \ELSE <uit te voeren code> \ENDIF<br /></tt>
 
Het doet er niet toe alsof je alles nu op een lijn zet of het splitst over verschillende lijnen, het <tt>algorithmic</tt> -pakket zorgt voor zijn eigen uitlijning.
 
====Lussen====
Regel 56:
\WHILE{<conditie>} <te herhalen code> \ENDWHILE<br /></tt>
 
Een lus die normaal niet in programmeertalen zit is de oneindige lus, te vergelijken met ''while(true)''. In het <tt>algorithmic</tt> -pakket krijgt deze lus een eigen naam.
 
<tt>\LOOP <te herhalen code> \ENDLOOP</tt>
Regel 62:
====Pre- en postcondities====
 
In het <tt>algorithmic</tt> -pakket kankun je ook pre- en postcondities invoegen met de volgende commando's:
 
<tt>\REQUIRE <preconditie><br />
Regel 75:
\COMMENT <commentaar><br /></tt>
 
Merk op dat het commentaar bij een <tt>\COMMENT</tt> -commando altijd op dezelfde regel als het vorige commando verschijnt. Het is dan ook niet toegestaan om het <tt>\COMMENT</tt> -commando te gebruiken na een commando zoals <tt>\IF</tt>.
 
===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 <tt>algorithm</tt> gekregen en werkwerkt volledig gelijkaardig aan de [[LaTeX/Figuren_en_drijvende_omgevingen#Drijvende_omgevingen|<tt>figure</tt>]] -omgeving.
 
Als je nog meer informatie wilwilt, kankun je nog eens de [http://developer.berlios.de/docman/display_doc.php?docid=800&group_id=3442 originele handleiding] bekijken ook.
 
==De <tt>verbatim</tt> -omgeving==
 
Om de <tt>verbatim</tt> -omgeving te gebruiken moet je eerst het <tt>verbatim</tt> -pakket laden.
 
<source lang="LaTeX">
Regel 101:
</source>
 
De <tt>verbatim</tt> -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:
 
<source lang="LaTeX">
Regel 109:
</source>
 
Je kan ook het <tt>\verb</tt> -commando gebruiken om iets (b.v. de naam van een veriabele) letterlijk weer te geven binnen een regel. Na het <tt>\verb</tt> -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:
 
<source lang="LaTeX">
Regel 115:
</source>
 
==Het <tt>listings</tt> -pakket==
 
Het <tt>listings</tt> -pakket is veel geavanceerder dan het <tt>verbatim</tt> -pakket. Om listings te gebruiken moet je eerst het <tt>listings</tt> -pakket laden:
 
<source lang="LaTeX">
Regel 123:
</source>
 
Merk even op dat alle commando's van het <tt>listings</tt> -pakket beginnen met <tt>lst</tt>, dit is om zeker in orde te zijn met de lppl -licentie.
 
De code zelf zet je in een <tt>lstlisting</tt> -omgeving, net zoals bij de <tt>verbatim</tt> -omgeving, om inline code te zetten gebruik je het <tt>\lstinline</tt> -commando op dezelfde manier als het <tt>\verb</tt> -commando. Je kankunt ook code van een extern document laden met het commando <tt>\lstinputlisting{padNaarHetBestand}</tt> waarbij <tt>padNaarHetBestand</tt> de (relatieve) locatie van het bronbestand is. Als je code van een bronbestand laadlaadt, dan 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 <tt>listings</tt> -pakket hebben eenzelfde structuur: iedere optie kan bepaald worden door een sleutel <tt>sleutel=waarde</tt> -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 kankun je deze taal in de hoofding definiëren. De taal <tt>pascal</tt> voor je volledig document definiëren doe je als volgt:
 
<source lang="LaTeX">
Regel 139:
De ''sleutel'' is hier dus <tt>language</tt> en de waarde die je aan de ''sleutel'' geeft is <tt>Pascal</tt>.
 
Alles wat je als opties binnen het <tt>lstset</tt> -commando zet kankun je ook per <tt>lstlisting</tt> -omgeving apart definiëren als optie. Dit doe je zoals het voorbeeld hier onder:
 
<source lang="LaTeX">
Regel 152:
\end{lstlisting}
</source>
Ook met het commendo <tt>\lstinputlisting</tt> kankun je dezelfde opties gebruiken:<source lang="LaTeX">
\lstinputlisting[language=pascal]{padVanHetBestand}</source>
 
Van sommige talen zijn er ook dialecten, deze kankun je opvragen als <tt>language=[XSC]Pascal</tt>
 
====Voorgedefinieerde talen====
Regel 268:
===Regelnummering===
 
In verband met regelnummering zijn er ook heel wat opties in het <tt>listings</tt> -pakket. De opties zijn hier onderhieronder opgesomd en moeten gebruikt worden zoals je de taal bepaaldbepaalt.
 
{|{{prettytable}}
Regel 275:
|-
|<tt>firstline</tt>=<Getal>
|De eerste regel die wordt weergegeven (kankun je gebruiken als je enkel een deel code vanuit een extern bestand wilwilt weergeven)
|-
|<tt>lastline</tt>=<Getal>
Regel 281:
|-
|<tt>linerange</tt>=<begin1>-<einde1>,<begin2>-<einde2>...
|De vorige twee commando's in één met de mogelijkheid om meerderemeer blokken samen te nemen. <begin1>,<einde1> ... zijn allemaal regelnummers.
|-
|<tt>numbers=<none/left/right></tt>
Regel 287:
|-
|<tt>numberstyle</tt>=<Opmaakstijl>
|De opmaak voor de regelnummers, je kankunt mogelijk <tt>\tiny</tt> of <tt>\color{blue}</tt> gebruiken.
|-
|<tt>numbersep</tt>=<Afstand>
Regel 296:
|-
|<tt>firstnumber</tt>=<<tt>auto/last/</tt><getal>>
|Bij welk nummer je begint te tellen, <tt>auto</tt> begint bij 1 voor een nieuwe listing en bij het overeenkomstige regelnummer als je een extern bestand opvraagt. <tt>last</tt> begint waar de vorige listing gestopt is en je kankunt natuurlijk ook een exact getal ingeven.
|}
 
===Escapen naar LaTeX en referenties===
 
Escapen kankun je vertalen door ''ontsnappen''. We gaan hier dus in onze broncode ontsnappen naar LaTeX. Je kankunt 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 kankunt gebruiken is de <tt>\texcl=true|flase</tt> -optie. Met deze optie zorg je er voor dat alle commentaar als <tt>LaTeX</tt> geïnterpreteerd wordt.
 
Je kankunt ook de optie <tt>\mathescape=true|false</tt> 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 overschakeldoverschakelt:
{|{{prettytable}}
|-
|<tt>\escapechar</tt>=<karakter>
|tussen twee karakters die opgegeven zijn zal er overgegaan worden op LaTeX -modus. Let wel op, als het karakter dat je wilwilt opgeven een speciale betekenis heeft in LaTeX (zoals het %-teken), dan moet je er een backslash voor zetten (\%).
|-
|<tt>escapeinside</tt>=<karakter1><karakter2>
|Hetzelfde zoals hierboven maar voor verschillende begin- en eind karakterseindkarakters
|-
|<tt>escapebegin</tt>=<karakters>
|Hetzelfde als hierboven maar voor de duidelijkheid kankun je het over twee commando's splitsen.
|-
|<tt>escapeend</tt>=<karakters>
|Hetzelfde als hierboven maar voor de duidelijkheid kankun je het over twee commando's splitsen.
|}
om de kracht van het escapen naar LaTeX te zien kankun je eens onderstaande code uitproberen. Als je pdfLaTeX gebruik kankun je ook het pakket <tt>pdfpages</tt> toevoegen om een hyperlink naar de juiste regel te krijgen.
 
<source lang="LaTeX">
Regel 352:
Let er op dat de code blijft werken want in Java staat commentaar na een "//" en dit is een deel van het escape begin.
 
Ik hoop dat de syntax -kleuring van jouw editor iets beter is dan de wiki syntax -kleuring want binnen een listings -omgeving wordt code normaal niet uitgevoerd en moet ze dus ook niet gekleurd worden in verschillende kleuren.
 
====Dynamische regels====
Je kankunt 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 kankunt 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 outputuitvoer 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 <tt>listings</tt> -pakket kan gebruikt worden.
 
De twee commando's die je nodig hebt zijn:
Regel 404:
 
</source>
Let er wel even op het regelnummer in je document. Het <tt>listings</tt> -pakket begint standaard te tellen bij 1 aan het begin van de code, maar nu geef je die code niet meer weer. Je kankunt mogelijk het pakket instellen om regelnummers weer te geven of je kankunt instellen om te beginnen tellen bij de eerste regen van de weergegeven code, dit is al behandeld in een vroegere subsectie.
 
 
Regel 434:
|}
 
Het is ook mogelijk om zelf te bepalen welke lijnen je toont i.p.v. een van de vorige keuzes te nemen. Dit is mogelijk daardoor als argument aan de <tt>frame</tt> -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:
 
{|{{prettytable}}
Regel 463:
</source>
 
een kader rond de java code weergeven met vanonderonder en vanbovenboven een dubbele lijn. Het is het best om deze optie met het <tt>\lstset</tt> -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 <tt>frameround</tt> 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 kankunt gebruiken zijn <tt>t</tt> en <tt>f</tt>. <tt>t</tt> stelt een afgeronde hoek voor en <tt>f</tt> een vierkante hoek. De opties <tt>frame=RBtl,frameround=ftft</tt> 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 alsof alles correct wordt weergegeven.
 
====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 kankunt dit oplossen door het kader iets groter te maken met de <tt>framexleftmargin</tt> optie. Waarschijnlijk zal 5mm groot genoeg zijn, gebruik daarvoor de optie <tt>framexleftmargin=5mm</tt>.
 
====Achtergrondkleur====
 
Het kan duidelijk zijn als je je code in een achtergrondkleur zet. Dit kan eenvoudig gebeuren met de optie <tt>backgroundcolor</tt>. Als argument moet je een kleur meegeven zoals uitgelegd in de sectie over [[LaTeX/Tekst opmaak#Kleuren|kleuren]]. Als je bijvoorbeeld een grijze achtergrond wilwilt, kankun je de optie <tt>backgroundcolor=\color{gray}</tt> gebruiken.
 
Het is wel aan te raden om je eigen grijs te definiëren (zoals vanonderonder in de sectie over [[LaTeX/Tekst opmaak#Kleuren|kleuren]] uitgelegd) en als je met kleuren werkt, dan werk je beter met eenvoudige of zelfs zonder kaders.
 
 
Informatie afkomstig van https://nl.wikibooks.org Wikibooks NL.
Wikibooks NL is onderdeel van de wikimediafoundation.