Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

T X Makroer Andreas Kirkeskov Carlsen Macro-seminar, 10. maj 2005 E.

Lignende præsentationer


Præsentationer af emnet: "T X Makroer Andreas Kirkeskov Carlsen Macro-seminar, 10. maj 2005 E."— Præsentationens transcript:

1 T X Makroer Andreas Kirkeskov Carlsen Macro-seminar, 10. maj 2005 E

2 TeX er et leksikalt makrosystem Alle makroer starter med tegnet ”\” TeX indeholder desuden TeX-kommandoer Kan ses som TeX-makroer med sideeffekter T X Makroer E Test \bye Test TeX

3 Mange implementationer eksisterer: Til Unix-kompatible systemer: teTeX Til Windows: MiKTeX, PCTeX, TrueTeX, … Til Macintosh: OzTeX, XeTeX, … T X Makroer E

4 Nye makroer kan introduceres med ”\def” T X Makroer E \def\AUDat{ \begin{flushleft} Aarhus Universitet \hspace{\fill} \today \\ \textbf{Datalogisk Institut} \\ IT-parken \\ \AA{}bogade \\ 8200 \AA{}rhus N \\ \end{flushleft}} Definition:Brug: \AUDat Aarhus Universitet 10. maj 2005 Datalogisk Institut IT-parken Åbogade 8200 Århus N Resultat:

5 Nye makroer kan introduceres med ”\def” T X Makroer E \def\AUDat{ \begin{flushleft} Aarhus Universitet \hspace{\fill} \today \\ \textbf{Datalogisk Institut} \\ IT-parken \\ \AA{}bogade \\ 8200 \AA{}rhus N \\ \end{flushleft}} Definition:Brug: \AUDat Aarhus Universitet 10. maj 2005 Datalogisk Institut IT-parken Åbogade 8200 Århus N Resultat:

6 Nye makroer kan introduceres med ”\def” T X Makroer E \def\AUDat{ \begin{flushleft} Aarhus Universitet \hspace{\fill} \today \\ \textbf{Datalogisk Institut} \\ IT-parken \\ \AA{}bogade \\ 8200 \AA{}rhus N \\ \end{flushleft}} Definition:Brug: \AUDat Aarhus Universitet 10. maj 2005 Datalogisk Institut IT-parken Åbogade 8200 Århus N Resultat:

7 Argumenter til makroer er angivet med #1 til #9 T X Makroer E \def\myindent#1#2{ \hangindent=0.3in \hangafter=-1 \noindent \textbf{#1} #2 \smallskip} Definition:Brug: \myindent{I kapitel 1} {besk\ae{}ftiger vi os med... \\ og … \\ og desuden …} I kapitel 1 beskæftiger vi os med… og … og desuden … Resultat:

8 Argumenter til makroer er angivet med #1 til #9 T X Makroer E \def\myindent#1#2{ \hangindent=0.3in \hangafter=-1 \noindent \textbf{#1} #2 \smallskip} Definition:Brug: \myindent{I kapitel 1} {besk\ae{}ftiger vi os med... \\ og … \\ og desuden …} I kapitel 1 beskæftiger vi os med… og … og desuden … Resultat:

9 Argumenter til makroer er angivet med #1 til #9 T X Makroer E \def\myindent#1#2{ \hangindent=0.3in \hangafter=-1 \noindent \textbf{#1} #2 \smallskip} Definition:Brug: \myindent{I kapitel 1} {besk\ae{}ftiger vi os med... \\ og … \\ og desuden …} I kapitel 1 beskæftiger vi os med… og … og desuden … Resultat:

10 Argumenter kan adskilles af tokens: T X Makroer E \def\myindent#1#2by#3{ \hangindent=#3in \hangafter=-1 \noindent \textbf{#1} #2 \smallskip} Definition:Brug: \myindent{I kapitel 1} {besk\ae{}ftiger vi os med... \\ og … \\ og desuden …} by {0.1} I kapitel 1 beskæftiger vi os med… og … og desuden … Resultat:

11 Argumenter kan adskilles af tokens: T X Makroer E \def\myindent#1#2by#3{ \hangindent=#3in \hangafter=-1 \noindent \textbf{#1} #2 \smallskip} Definition:Brug: \myindent{I kapitel 1} {besk\ae{}ftiger vi os med... \\ og … \\ og desuden …} by {0.1} I kapitel 1 beskæftiger vi os med… og … og desuden … Resultat:

12 Argumenter kan adskilles af tokens: T X Makroer E \def\myindent#1#2by#3{ \hangindent=#3in \hangafter=-1 \noindent \textbf{#1} #2 \smallskip} Definition:Brug: \myindent{I kapitel 1} {besk\ae{}ftiger vi os med... \\ og … \\ og desuden …} by {0.1} I kapitel 1 beskæftiger vi os med… og … og desuden … Resultat:

13 Både direkte og indirekte rekursion er muligt: T X Makroer E \newcount \plusses \def\AddPlussesLoop#1{ \ifnum \plusses=0 #1 \else \advance \plusses by -1 \AddPlussesLoop{#1}+ \fi} \def\AddPlusses#1#2{ \plusses=#2 \AddPlussesLoop {#1}} Definition:Brug: \AddPlusses{C}{2} C + + Resultat:

14 Både direkte og indirekte rekursion er muligt: T X Makroer E \newcount \plusses \def\AddPlussesLoop#1{ \ifnum \plusses=0 #1 \else \advance \plusses by -1 \AddPlussesLoop{#1}+ \fi} \def\AddPlusses#1#2{ \plusses=#2 \AddPlussesLoop {#1}} Definition:Brug: \AddPlusses{C}{2} C + + Resultat:

15 Både direkte og indirekte rekursion er muligt: T X Makroer E \newcount \plusses \def\AddPlussesLoop#1{ \ifnum \plusses=0 #1 \else \advance \plusses by -1 \AddPlussesLoop{#1}+ \fi} \def\AddPlusses#1#2{ \plusses=#2 \AddPlussesLoop {#1}} Definition:Brug: \AddPlusses{C}{2} C + + Resultat:

16 Er TeX makroer sproguafhængige? Implementeres (så vidt jeg ved) altid som integreret del af ”oversættelsen” til dvi-fil (eller lignende) Er i deres opbygning ikke sprogafhængige - ”naiv” leksikalsk ekspansion Svaret afhænger af definitionen af sprogafhængighed – makroerne udgør sproget T X Makroer E

17 Ekspansionsorden: Outer T X Makroer E \def\type{\immediate\write16{}} \def\mymessage#1{\type\message{#1}} \def\Id#1{\mymessage{ID} #1} \def\One#1{\mymessage{ONE} \Id{#1}} \def\Two{\mymessage{TWO} {a}{b}} Definition:Brug: \One\Two ONE ID TWO Resultat: ”Makro-beskeder”: ab

18 Ekspansionsorden: Outer T X Makroer E \def\type{\immediate\write16{}} \def\mymessage#1{\type\message{#1}} \def\Id#1{\mymessage{ID} #1} \def\One#1{\mymessage{ONE} \Id{#1}} \def\Two{\mymessage{TWO} {a}{b}} Definition:Brug: \One\Two ONE ID TWO Resultat: ”Makro-beskeder”: ab

19 Ekspansionsorden: Outer T X Makroer E \def\type{\immediate\write16{}} \def\mymessage#1{\type\message{#1}} \def\Id#1{\mymessage{ID} #1} \def\One#1{\mymessage{ONE} \Id{#1}} \def\Two{\mymessage{TWO} {a}{b}} Definition:Brug: \One\Two ONE ID TWO Resultat: ”Makro-beskeder”: ab

20 Bodyexpansion: Lazy T X Makroer E \def\LazyCall#1#2{#2} Definition:Brug: \LazyCall {\CallOfNonExistingMacro} {Hallo} Resultat: Hallo

21 Bodyexpansion: Lazy T X Makroer E \def\LazyCall#1#2{#2} Definition:Brug: \LazyCall {\CallOfNonExistingMacro} {Hallo} Resultat: Hallo

22 Bodyexpansion: Lazy T X Makroer E \def\LazyCall#1#2{#2} Definition:Brug: \LazyCall {\CallOfNonExistingMacro} {Hallo} Resultat: Hallo

23 Parsing ambiguities: shortest Multiple definitioner: nej – gendefinerer makroen T X Makroer E \def\Test#1 by #2{#1 -$>$ #2} \Test 1 by 2\\ \def\Test#1{#1} \Test 1 by 2\\ \def\Test#1 by #2{#1 -$>$ #2} \Test 1 by 2\\ \Test 1 by by 2 Definition og brug: Resultat: 1 -> 2 1 by 2 1 -> 2 1 -> by 2

24 Parsing ambiguities: shortest Multiple definitioner: nej – gendefinerer makroen T X Makroer E \def\Test#1 by #2{#1 -$>$ #2} \Test 1 by 2\\ \def\Test#1{#1} \Test 1 by 2\\ \def\Test#1 by #2{#1 -$>$ #2} \Test 1 by 2\\ \Test 1 by by 2 Definition og brug: Resultat: 1 -> 2 1 by 2 1 -> 2 1 -> by 2

25 Makroer som resultat: Ja? T X Makroer E \def\OnlyAppearOnce {\def\OnlyAppearOnce{} Introduktion…} Definition:Brug: \OnlyAppearOnce Introduktion… Resultat:

26 Makroer som resultat: Ja? T X Makroer E \def\OnlyAppearOnce {\def\OnlyAppearOnce{} Introduktion…} Definition:Brug: \OnlyAppearOnce Introduktion… Resultat:

27 Makroer som resultat: Ja? T X Makroer E \def\OnlyAppearOnce {\def\OnlyAppearOnce{} Introduktion…} Definition:Brug: \OnlyAppearOnce Introduktion… Resultat:

28 Garanteret terminering: nej T X Makroer E \def\loop {\loop} Definition:Brug: \loop Resultat: Ved det ikke – venter stadig…

29 Garanteret terminering: nej T X Makroer E \def\loop {\loop} Definition:Brug: \loop Resultat: Ved det ikke – venter stadig…

30 Garanteret terminering: nej T X Makroer E \def\loop {\loop} Definition:Brug: \loop Resultat: Ved det ikke – venter stadig…

31 Programmerbare: Ja De er turingkomplette (rekursion+conditionals) Svært at skelne mellem om TeX-kommandoer udføres på makroekspansionstid eller efter T X Makroer E


Download ppt "T X Makroer Andreas Kirkeskov Carlsen Macro-seminar, 10. maj 2005 E."

Lignende præsentationer


Annoncer fra Google