Programmeren in L A TEX Sjoerd Timmer Jeroen Leeuwestein TEXniCie 4 mei 2010
Inhoud 1 Inleiding 2 Eigen commando s 3 Variabelen 4 Testen en herhalen 5 Commando s vervangen 6 Samenvatting
Commando s Een commando roep je aan als: \commando[optioneel argument]{andere}{argumenten} Een commando kun je ook zelf definiëren: \newcommand{ naam }[ aantal argumenten ]{ definitie } In de definitie kun je argumenten invoegen met #1, #2, #3, etc...
Commando s Een commando roep je aan als: \commando[optioneel argument]{andere}{argumenten} Een commando kun je ook zelf definiëren: \newcommand{ naam }[ aantal argumenten ]{ definitie } In de definitie kun je argumenten invoegen met #1, #2, #3, etc...
Voorbeeld Je maakt een commando met: \newcommand{\plaatje}[3]{ \begin{figure} \includegraphics{#1} \label{#2} \caption{#3} \end{figure} } En vanaf dan kun je een figuur invoegen met: \plaatje{fig.png}{label:fig}{onderschrift}
Voorbeeld Je maakt een commando met: \newcommand{\plaatje}[3]{ \begin{figure} \includegraphics{#1} \label{#2} \caption{#3} \end{figure} } En vanaf dan kun je een figuur invoegen met: \plaatje{fig.png}{label:fig}{onderschrift}
Environments Environments kun je ook zelf maken: \newenvironment{naam}[ aantal argumenten ] { code die aan het begin wordt uitgevoerd } { code die aan het einde wordt uitgevoerd } De argumenten van een environment staan achter \begin{naam}
Environments Environments kun je ook zelf maken: \newenvironment{naam}[ aantal argumenten ] { code die aan het begin wordt uitgevoerd } { code die aan het einde wordt uitgevoerd } De argumenten van een environment staan achter \begin{naam}
variabelen in L A TEX L A TEX kent drie soorten variabelen: counters Voor gehele getallen (zoals pagina nummers) lengths Voor afstanden (zoals paginabreedte) booleans Kan true of false zijn
Counters Een aantal counters worden door L A TEX vanzelf bijgehouden. Dit zijn: part paragraph figure enumi chapter subparagraph table enumii section page footnote enumiii subsection equation mpfootnote enumiv subsubsection
Counters gebruiken De waarde van een counter kun je in tekst in een document opnemen in verschillende formats: \arabic \roman \Roman \alph \Alph 1 i I a A 2 ii II b B 3 iii III c C 4 iv IV d D Bijvoorbeeld: Paginanummers worden standaard geprint met \arabic{page} het \newcounter-commando maakt ook een \the counter commando aan. Dat gebruikt een standaard weergave. Je kunt dus ook \thepage en \thechapter gebruiken.
Counters gebruiken De waarde van een counter kun je in tekst in een document opnemen in verschillende formats: \arabic \roman \Roman \alph \Alph 1 i I a A 2 ii II b B 3 iii III c C 4 iv IV d D Bijvoorbeeld: Paginanummers worden standaard geprint met \arabic{page} het \newcounter-commando maakt ook een \the counter commando aan. Dat gebruikt een standaard weergave. Je kunt dus ook \thepage en \thechapter gebruiken.
Counters gebruiken De waarde van een counter kun je in tekst in een document opnemen in verschillende formats: \arabic \roman \Roman \alph \Alph 1 i I a A 2 ii II b B 3 iii III c C 4 iv IV d D Bijvoorbeeld: Paginanummers worden standaard geprint met \arabic{page} het \newcounter-commando maakt ook een \the counter commando aan. Dat gebruikt een standaard weergave. Je kunt dus ook \thepage en \thechapter gebruiken.
Eigen counters Counters kun je zelf maken en waardes geven met: \newcounter{ counternaam } \setcounter{ counternaam }{ waarde } \addtocounter{ counternaam }{ waarde } \stepcounter{ counternaam } Bijvoorbeeld: \newcounter{mijnteller} \setcounter{mijnteller}{9} \Roman{mijnteller} lever nu IX op
Eigen counters Counters kun je zelf maken en waardes geven met: \newcounter{ counternaam } \setcounter{ counternaam }{ waarde } \addtocounter{ counternaam }{ waarde } \stepcounter{ counternaam } Bijvoorbeeld: \newcounter{mijnteller} \setcounter{mijnteller}{9} \Roman{mijnteller} lever nu IX op
Lengths Lengths zijn net als counters, maar ze hebben een eenheid en een backslash: \newlength{\ naam } \setlength{\ naam }{\ lengte } Bijvoorbeeld: \newlength{\mijnlengte} \setlength{\mijnlengte}{185cm} Lengths kun je gewoon gebruiken door \mijnlengte te typen. L A TEX heeft ook een aantal lengths voorgedefiniëerd zoals \textwidth en \paperwidth
Lengths Lengths zijn net als counters, maar ze hebben een eenheid en een backslash: \newlength{\ naam } \setlength{\ naam }{\ lengte } Bijvoorbeeld: \newlength{\mijnlengte} \setlength{\mijnlengte}{185cm} Lengths kun je gewoon gebruiken door \mijnlengte te typen. L A TEX heeft ook een aantal lengths voorgedefiniëerd zoals \textwidth en \paperwidth
Lengths Lengths zijn net als counters, maar ze hebben een eenheid en een backslash: \newlength{\ naam } \setlength{\ naam }{\ lengte } Bijvoorbeeld: \newlength{\mijnlengte} \setlength{\mijnlengte}{185cm} Lengths kun je gewoon gebruiken door \mijnlengte te typen. L A TEX heeft ook een aantal lengths voorgedefiniëerd zoals \textwidth en \paperwidth
Lengths Lengths zijn net als counters, maar ze hebben een eenheid en een backslash: \newlength{\ naam } \setlength{\ naam }{\ lengte } Bijvoorbeeld: \newlength{\mijnlengte} \setlength{\mijnlengte}{185cm} Lengths kun je gewoon gebruiken door \mijnlengte te typen. L A TEX heeft ook een aantal lengths voorgedefiniëerd zoals \textwidth en \paperwidth
Booleans Booleans kun je alsvolgt gebruiken: \newboolean{naam} \setboolean{naam}{waarde} De waarde vraag je op met \boolean{naam}
Het ifthen-package Het ifthen package levert twee commando s die met tests werken: \ifthenelse{ test }{ then-code }{ else-code } \whiledo{ test }{ do-code } Bijvoorbeeld: \ifthenelse{1 < 2}{Klopt}{Dit gebeurt nooit!} Dit levert altijd de tekst Klopt
Het ifthen-package Het ifthen package levert twee commando s die met tests werken: \ifthenelse{ test }{ then-code }{ else-code } \whiledo{ test }{ do-code } Bijvoorbeeld: \ifthenelse{1 < 2}{Klopt}{Dit gebeurt nooit!} Dit levert altijd de tekst Klopt
Verschillende soorten tests De test in \ifthenelse of \whiledo kan nog verschillende dingen vergelijken: integers(gehele getallen) en counters strings(tekst) lengths booleans
Integers vergelijken Je kunt gehele getallen vergelijken met: < kleiner dan > groter dan = gelijk De waarde van een counter kun je ook vergelijken door \value{counter} te gebruiken.
Integers vergelijken(voorbeeld) \newcounter{teller} \setcounter{teller}{1} \whiledo{\value{teller}< 5}{ \clearpage \stepcounter } Dit voert vier keer het commando \clearpage uit (dus drie witte pagina s)
Tekst vergelijken Met het commando \equal{tekst1}\tekst2 kun je twee teksten vergelijken. Als er L A TEX-commando s in de argumenten zitten worden die eerst uitgevoerd. Je kunt bijvoorbeeld de datum testen met: \ifthenelse{\equal{\today}{mei 4, 2010}} {Vandaag is de presentatie!} {Helaas, geen presentatie} Let op: \today is de dag waarop je pdflatex voor het laatst uitgevoerd hebt.
Andere testen Je kunt lengths ook vergelijken: \lengthtest{\textwidth<5cm} Je kunt ook de waarde van een boolean gebruiken: \ifthenelse{\boolean{naam}}{doe iets}{doe iets anders}
Andere testen Je kunt lengths ook vergelijken: \lengthtest{\textwidth<5cm} Je kunt ook de waarde van een boolean gebruiken: \ifthenelse{\boolean{naam}}{doe iets}{doe iets anders}
Samengestelde tests Je kunt de logische operatoren \and, \or, \not, \( en \) gebruiken: \ifthenelse {1<2 \and\( 2>4\or3<4 \)} {1} {0} Als je het package calc laadt kun je ook +,, en / gebruiken Let op: het tweede deel van een deling of vermenigvuldiging moet een integer zijn
Samengestelde tests Je kunt de logische operatoren \and, \or, \not, \( en \) gebruiken: \ifthenelse {1<2 \and\( 2>4\or3<4 \)} {1} {0} Als je het package calc laadt kun je ook +,, en / gebruiken Let op: het tweede deel van een deling of vermenigvuldiging moet een integer zijn
Voorbeeld: Fibonacci Stel, je bent wiskundige. Je moet een paper schrijven over Fibonacci getallen. Je hebt heel vaak de eerste paar getallen nodig, maar je bent te lui om ze zelf steeds in te typen. Bovendien ben je bang dat je dan typfouten maakt. Zou je daar een L A TEXcommando voor kunnen schrijven?
Voorbeeld: Fibonacci Stel, je bent wiskundige. Je moet een paper schrijven over Fibonacci getallen. Je hebt heel vaak de eerste paar getallen nodig, maar je bent te lui om ze zelf steeds in te typen. Bovendien ben je bang dat je dan typfouten maakt. Zou je daar een L A TEXcommando voor kunnen schrijven?
Fibonacci: Variabelen maken \documentclass{article} \usepackage{ifthen,calc} \newcounter{n} \newcounter{nmineen} \newcounter{nmintwee} \newcounter{aantal}
Fibonacci: Het echte werk \newcommand\fib[1]{ \setcounter{nmineen}{1} \setcounter{nmintwee}{1} \setcounter{aantal}{1} 1 \whiledo{\value{aantal}<#1}{ \stepcounter{aantal} \setcounter{n}{\value{nmineen}+\value{nmintwee}} \setcounter{nmintwee}{\value{nmineen}} \setcounter{nmineen}{\value{n}}, \arabic{nmintwee} } }
Fibonacci: Het echte werk \newcommand\fib[1]{% \setcounter{nmineen}{1}% \setcounter{nmintwee}{1}% \setcounter{aantal}{1}% 1% \whiledo{\value{aantal}<#1}{% \stepcounter{aantal}% \setcounter{n}{\value{nmineen}+\value{nmintwee}}% \setcounter{nmintwee}{\value{nmineen}}% \setcounter{nmineen}{\value{n}}%, \arabic{nmintwee}% }% }%
Fibonacci: gebruik \begin{document} \fib{10} \end{document} Dit levert: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55
Commando s vervangen Stel dat je in een deel van je document sections een andere opmaak wilt geven. Een eerste poging zou kunnen zijn: \newcommand{\oldsection}[1]{\section{#1}} \renewcommand{\section}[1]{\oldsection{\emph{#1}}} L A TEX raakt dan echter in een oneindige lus!
Commando s vervangen Stel dat je in een deel van je document sections een andere opmaak wilt geven. Een eerste poging zou kunnen zijn: \newcommand{\oldsection}[1]{\section{#1}} \renewcommand{\section}[1]{\oldsection{\emph{#1}}} L A TEX raakt dan echter in een oneindige lus!
Commando s vervangen Stel dat je in een deel van je document sections een andere opmaak wilt geven. Een eerste poging zou kunnen zijn: \newcommand{\oldsection}[1]{\section{#1}} \renewcommand{\section}[1]{\oldsection{\emph{#1}}} L A TEX raakt dan echter in een oneindige lus!
Het \let-commando Met \let maak je een letterlijke kopie van een ander commando: \let\oldsection\section \renewcommand{\section}[1]{\oldsection{\emph{#1}}} Nu kun je aan het einde ook de oude stijl terugzetten met: \let\section\oldsection
Het \let-commando Met \let maak je een letterlijke kopie van een ander commando: \let\oldsection\section \renewcommand{\section}[1]{\oldsection{\emph{#1}}} Nu kun je aan het einde ook de oude stijl terugzetten met: \let\section\oldsection
Samenvatting Eigen commando s en environments Het ifthen-package \ifthenelse \whiledo Verschillende soorten tests Het calc-package Het gebruik van \let