Download præsentationen
Præsentation er lastning. Vent venligst
Offentliggjort afKatrine Frederiksen Redigeret for ca. et år siden
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
Lignende præsentationer
© 2024 SlidePlayer.dk Inc.
All rights reserved.