; TeX output 1991.12.20:1634ߍ$s3 vՄGv@"Vff cmbx10@dbT=L33E XvEinPrSa prozessorfSuu 3/rdenT=L33E X-Satzv=onDatenbankenvR':ff cmti10RRCeference&Manual,Tautorial&PrCogrammdokumentationvV.1.1&(Faebruar1991)vՄG#fgӀ-p0J 3 cmsl10W.fKraml SKPMGfAlpMen-TereuhandGesellsc!haftmbHFKolingassef19,A-1090Wiensv8N cmbx12InhaltsverzeichnisYe8."V 3 cmbx101uV\orbYemerkungen_2e82udbT期nEX-Aufruf4e83udbT期nEX-Befehle5e84uBesonderheiten,2ProblemeundF\ehlerzQ14e85udbT期nEX-F\ehlermeldungen16e86uEin2kurzesdbT期nEX-T\utorialb17e87uProgrammdokumenttationU24$͍Ǿ(K`y 3 cmr101*ߍ$Ӎv#p0J cmsl101 V*orbGemerkungenwU2v՟X-ffGs3 v1 Vorb`emerkungenލe8WillVmanDatenauseinerDaten!bankinansprechenderFeormmitT,[wEB Xsetzen e8(z.B.#*einTeelefon!verzeichnis),#*sosteh!tmanvorderWeahl,dieseDatenentwe-e8derπman!uellmiteinemTeexteditormitdennotwendigenT,[wEB X-Kommandoszue8v!ersehen,ˣoMdereinProgrammzuschreibMen,welchesdieDatenliestunddiee8Kommandos einfW^ÍM䩍uVgt(einebMesondersempfehlensw!erteProgrammiersprachee8fW^ÍM䩍uVrPsolc!heZweckeistAȈWK,vgl.E.Neuwirth,QuickandDirtyDatabasese8withFNiceOutput:AȈWK.andT,[wEB X,TUGbMoat11(1990),No.3{1990Con-e8ferencefProMceedings).fge8WW^Í䩍ayhrendpjdieersteMethoMdebeigrW^Í䩍oyerenDatenmengew!ohlsofortausschei-e8det,{hatauc!hdiezweiteeinengravierendenNachteil:dasLayoutdesDoku-e8men!ts|-liegtquasiimProgramm-SourcecoMdeverbMorgen.SowohldieErstellunge8desCbLa!youts(inderRegeleineReihevonTerial-and-Error-ZyklenvonEdi-e8tor,T,[wEB XundPreview!erbzw.Ausdruck)alsauchspW^Í䩍aytereventuellnotwendigeV^Íf?e8Amnnderungenfw!erdendadurcherschwert.e8Mit!/dbT,[wEB X wirdeindritterWeegv!orgeschlagen.!/Ausgangspunktisteine8Skript,~w!elchesseinerseitseinnormalesT,[wEB X-Input ledarstellt.DiesesSkripte8istFZdasResultatderLa!youterstellungFZundwirddaherinderRegelauc!he8einige3\TeestdatensW^Í䩍aytzeen!thalten.InnerhalbvonT,[wEB X-Kommentarenwerdene8n!unKspMezielledbT,[wEB X-Befehleeingestreut,dieunteranderemdasAuskom-e8men!tierenderursprW^ÍM䩍uVnglichenTeestdatensW^Í䩍aytzeunddasInkludierenderechtene8DatensW^Í䩍aytzefbMetre en.e8DiesesyzSkriptwirdansc!hlieendvomdbT,[wEB X-PrW^Í䩍ayprozessorabgearbMeitet;da-e8bMeiw!erdendiespeziellendbT,[wEB X-Befehlein!terpretiert(alsoMusterdatenaus-e8k!ommentiert(undec!hte(DateneingefW^ÍM䩍uVgt),derRestdesSkript lesjedoMc!he8nic!htfverW^Í䩍ayndert.DasResultatistdieendgW^ÍM䩍uVltigeT,[wEB X-EingabMedatei.e8DasEinfW^ÍM䩍uVgenderDatensW^Í䩍aytzegesc!hiehtunterZuhilfenahmevonr" OTeempla-e8tes;\>,asodajenac!hWeunschauchnureinzelneDatenfelderverwendetoMdere8zusW^Í䩍aytzlic!heInformationeninnerhalbderDaten(z.B.T,[wEB X-Makroaufrufe)ein-e8gefW^ÍM䩍uVgtfw!erdenkW^Í䩍oynnen.e8EinfkurzesdbT,[wEB X-SkriptkW^Í䩍oynn!teetwafolgendermaenaussehen:fge8/'ExX-Aufruf4v՟ffGs3 v2 dbTESX-Aufrufލe8DerjProgrammaufrufistda!vonjabhW^Í䩍ayngig,obderAȈWK-In!terpreteraufgeru- e8fenwirdoMdereinek!ompilierteFeormdesProgramms.ImerstenFalllautete8derfAufrufso:+ e8#Synttax:Yߟffdff9output- le3ffffffdꍍY,': 3 cmti10input- le >DiefEingabMedatei(dbT,[wEB X-Skript)dYoutput- le >DieAusgabMedatei(solltedieExtension >.tex 2aufw!eisen.dadieseDateimitT,[wEB X >gesetztfwird)Ce8DerfAufrufderk!ompiliertenFeormsiehtfolgendermaenaus:-<>e8#Synttax:YߟffdffdbtexLinput- le>output- le3ffffffdYinput- le >DiefEingabMedatei(dbT,[wEB X-Skript)dYoutput- le >DieAusgabMedatei(solltedieExtension >.tex 2aufw!eisen,dadieseDateimitT,[wEB X >gesetztfwird)"qߍ$r~v3 dbTU>'ExX-BefehlekH5v՟ffGs3 v3 dbTESX-Befehleލe8JederdbT,[wEB X-BefehlbMeginn!tmitderSequenz%!;diesemuamZeilenanfang e8stehen.Ansc!hlieendstehteinSchlW^ÍM䩍uVsselwort,dasauchdurcheinoMdermeh-e8rerebBlanksv!onderAnfangssequenzgetrenntseinkdDann.InweitererFeolgee8kW^Í䩍oynnenmnoMc!hArgumentezustehenkommen,dieebMenfallsdurchBlanksge-e8trenn!tfsind.fge8AlledbT,[wEB X-BefehlemiteinerAusnahmekW^Í䩍oynnenn!ureineZeilelangsein;e8die$Ausnahmeistder%!template-Befehl,bMeidemauc!hFeortsetzungszeilene8erlaubtfsind.DieseFeortsetzungszeilenbMeginnenmitderSequenz%ffs#.e8Da9diedbT,[wEB X-AnfangssequenzenmiteinemProzen!tzeichen9bMeginnen,wirde8einesolc!heZeilevonT,[wEB XalsKommentarbMehandelt;essindalsosowohle8dasdbT,[wEB X-Skriptalsauc!hdervondbT,[wEB XierzeugteOutputgW^ÍM䩍uVltigeT,[wEX-e8EingabMedateien.' ߍ$r~v3 dbTU>'ExX-BefehlekH6v՟ffGRÍe8@%!break"Ze8BefehlzumEinfW^ÍM䩍uVgenv!onDatenanlW^Í䩍aylicheinesGruppMenwechsels(V^Í^h?A6gnderung e8desfInhaltseinesFeeldesderzuinkludierendenDatei).-e8#Synttax:YߟffdffUU%!Lbreak[]3ffffffdЅY >EineZahl,dieauc!hinderFeorm%n%ge- >sc!hriebMen9-seinkdDann.Siebezieh!tsichauf >dasFeelddeszuinkludierendenDa- >ten les.dY >Name[AdesTeemplates,dasindieAusgabMe >eingefW^ÍM䩍uVgtWw!erdensoll,wennsichderIn- >haltfv!onFeeldW^Í䩍a ndert.Y >Beliebiges:Sym!bMolbzw.beliebigeZei- >c!henkette;wenndiesesFlagvorhanden >ist,x3wirdsc!honvordemerstenein- >zufW^ÍM䩍uVgendenDatensatzdasTeemplateein- >gefW^ÍM䩍uVgtf(z.B.alsV^Í?U bMersc!hriftetc.). uRe8#Beispiel:Y%!break2tabellenendeYFeallsbsic!hderInhaltdeszweitenFeeldesW^Í䩍aGndert,solldasTem-Yplate4tabellenendebMen!utztwerden(dakeinFlagvorhandenYist,>Fwirdv!ordemerstenDatensatzkeinTeemplateeingefW^ÍM䩍uVgt).e8#Siehe2aucth:Yclearbreaks,frecord,template-3ߍ$r~v3 dbTU>'ExX-BefehlekH7v՟ffGRÍe8@%!c=hange"Ze8DieserBefehldien!tzurSpMezi kdDationeinerZeichenkettenersetzung.Esist e8damitmW^Í䩍oyglic!h,bMestimmteZeichenkettenderEingabMedateidurchandereZei-e8c!henkettenzuersetzen.EskW^Í䩍oynnenaufdieseWeeisez.B.bMestimm!teZeichen,e8diefinT,[wEB Xeigensk!oMdiertwerdenmW^ÍM䩍uVssen,W^ÍF䩍u bMersetztwerden.-ve8#Synttax:YߟffdffUU%!Lchange3ffffffdЅY >DerzuersetzendeString.Erm!uzwi- >sc!henzweiZeichen,diesonstnichtim >Stringbv!orkommenundnichtBlanksein >dW^ÍM䩍uVrfen,fbMegrenztw!erden.dY >Der~String,w!omitersetztwerdensoll.Die >formalen9Regelnsindanalogzumv!orher- >gehenden. uRe8#Beispiel:Y%!change/TeX//*!", 3 cmsy10nTeXfg/YDie/Zeic!henketteTeeX/inderDatenbankdateisolldurchdasYen!tsprechendefT,[wEB X-Makroersetztw!erdene8#Siehe2aucth:Ytranslate;fAbsc!hnitt44ߍ$r~v3 dbTU>'ExX-BefehlekH8v՟ffGRÍe8@%!clearbreaks"Ze8Mit3diesemBefehlw!erdendiebisherspMezi ziertenGruppen!wechsel3wieder e8gelW^Í䩍oysc!ht.-(DieserBefehlv!erwendetkeineArgu- >men!te.) uRe8#Siehe2aucth:Ybreak :{ߍ$r~v3 dbTU>'ExX-BefehlekH9v՟ffGsԍe8@%!examples"Ze8Mit diesemBefehlwirddbT,[wEB Xangezeigt,dadiefolgendenZeilenimSkript e8als0Beispielrecordszuv!erstehensind:bMeiderBearbeitungdurc!hdenPrW^Í䩍aypro-e8zessor w!erdendiefolgendenZeilensolange(durcheinProzentzeichename8Zeilenanfang)ausk!ommentiert,biswiedereindbT,[wEB X-KommandoerkdDannte8wird.fDieswirdinderPraxismeistein%!include-Kommandosein.+ e8#Synttax:YߟffdffUU%!Lexamples3ffffffdlAY-- >(DieserBefehlv!erwendetkeineArgu- >men!te.) uRe8#Siehe2aucth:Yinclude <ߍ$r~v3 dbTU>'ExX-Befehlez10v՟ffGsԍe8@%!include"Ze8DieserBefehlv!eranlatdbT,[wEB X,DatensW^Í䩍aytzeauseinerDatendateizulesen e8und%indieOutputdateieinzufW^ÍM䩍uVgen.DabMeiw!erdendieeinzelnenFeelderdere8DatensW^Í䩍aytzeen!tsprechendeinemTeemplateeingefW^ÍM䩍uVgt,dessenNameineineme8%!record-Befehl/angegebMenunddasineinem%!template-Befehlde -e8niertwurde.Auerdemw!erdeneventuellZeichenkettenersetzungendurch-e8gefW^ÍM䩍uVhrt,w!ennmittelsdes%!translate-BefehlseineErsetzungstabMellege-e8laden wurdeund/oMdereinzelneErsetzungenineinem%!change-Befehlv!er-e8langt-wurden.DerWeec!hselimInhalteinesDatenfeldesfW^ÍM䩍uVhrtzurAusgabMee8einesGeigenenTeemplates,w!enndiesesDatenfeldineinem%!break-Befehle8referenziert~wurde;damitlassensic!hspMezielleAktionenanlW^Í䩍aylicheinesGrup-e8pMen!wechselsfsteuern.03UTffffffddY >Die_Dateinamensen!thW^Í䩍aylt >diefzuinkludierendenDatensW^Í䩍aytze. uRe8#Beispiel:YImN-erstenBeispielwirdfW^ÍM䩍uVrjedenDatensatzdasTeemplatet1Yv!erwendetfunddieDateixyz.datv!erwendet:vY%!recordt1Y%!templatet1ndatensatzfName:%1%%3%gf%2%gY%!includexyz.datYDasvzw!eiteBeispielzeigt,wiedieAuswahldesTeemplatesYauc!h%durchdenInhaltderDateiselbstbMestimmtwerdenYkdDann:Y%!record%4%Y%!templatenameninclnamef%1%gf%2%%3%gY%!templateadrnincladrf%3%%2%%1%gY%ffs Cf%4%(Firma)gY%!includeadressen.dat uRe8#Siehe2aucth:Yrecord,ftemplate,translate,c!hange,break @Wߍ$r~v3 dbTU>'ExX-Befehlez11v՟ffGRÍe8@%!record"Ze8Der%!record-BefehlspMezi ziert,wiedieSW^Í䩍aytzeausderDatendateieinzu- e8lesen4&undindieAusgabMedateizuinkludierensind.Eswirddamitfestgelegt,e8w!elchesTeemplateundw!elcherField-bzw.Record-Separator(en!tsprechende8denfAȈWK-VeariablenFSundRS)zuv!erwendenfist.fge8Das2ersteArgumen!tistentwedereinName(derNameeinesTeemplatesoMdere8eineWZahlnzwisc!henProzentzeichen;inletzteremFeallwirderwartet,dae8inBdemFeeldnderDatendatei(vgl.AȈWK's$n)einNameeinesTemplatese8steh!t.6DamitistesmW^Í䩍oyglich,daszuverwendendeTeemplatedurchdieDatene8zufde nieren.. e8#Synttax:YߟffdffUU%!Lrecord[[]]3ffffffdЅY >Dies(Aisten!tweder(AeinName,derei- >nem(Teemplate-Namenen!tspricht,(oMder >einطVeerw!eisaufeinDatenfeldinderForm >%n%.IndiesemFeallwirdderNamedes >TeemplatesfW^ÍM䩍uVrdenaktuellenDatensatz >ausT1derDateiselbst,undzw!ardurchden >Inhaltfv!onFeeldNr.nbMestimmt.dY >DiesPisteinString,derzwisc!henzweiZei- >c!henN&eingeschlossenseinmu,dienicht >impStringselbsten!thaltenseinundnicht >Blankj'seindW^ÍM䩍uVrfen.Erdien!tzurFeestle- >gungjenerZeic!hen,diealsFeeldseparato- >ren2Ydienen.DerDefault!wert2Yist(wiein >AȈWK)fBlankundTeab.Y >DieserAString,fW^ÍM䩍uVrdenbMezW^ÍM䩍uglic!hseines >AufbausBdasselbMegiltwieimv!origenAb- >satz,de niertdenRecordseparator.De- >fault!wertfistNewline. uRe8#Beispiel:YImfolgendenBeispielwirdeinFeeldderDatendateispMezi -Yziert,\w!elchesdenNamendesTeemplateszuenthaltenhat,Yundfeinv!omDefaultabweichenderFeeldseparator.vY%!record%1%/:::/e8#Siehe2aucth:Yinclude Iߍ$r~v3 dbTU>'ExX-Befehlez12v՟ffGsԍe8@%!template"Ze8MitdiesemBefehlkdDanneinebMeliebigeAnzahlv!onTeemplatesde niertwer- e8den,hdieen!twederhalsSc!hemazumEinfW^ÍM䩍uVgenvonDatensW^Í䩍aytzendienenoMdere8anlW^Í䩍aylic!h einesGruppMenwechselsverwendetwerden.DiePositionen,ande-e8nen)DatenausdemaktuellenSatzderDatendateistehensollen,w!erdene8durc!h4PlatzhalterderFeorm%n%markiert;eswirddortdasFeldNr.nein-e8gefW^ÍM䩍uVgt.-[