LaTeX-sättning som ett programmeringsspråk

LaTeX är ett system för sättning av dokument som ersätter begreppet What-You-See-Is-What-You-Get med standardidéer från konventionella programmeringsspråk. Mark Harman demonstrerar kraften i detta arv.

Alla som har använt en WYSIWYG (What-You-See-Is-What-You-Get)-redigerare, en ordbehandlare eller ett DTP-paket har förmodligen upplevt två frustrationer:

WYSIWYG tycks alltid vara en lögn Det man ser är ganska likt det man får, eller det man ser är nästan alltid det man får, eller det man ser skulle vara det man får om skrivaren hade haft rätt typsnitt, men det man ser är sällan exakt det man får.

WYSIWYG är begränsande Anta att du inte kan få se det du vill? What you see is what you get har den ytterligare och underförstådda innebörden att det du inte kan se kan du inte heller få. Hur ofta har du inte velat att något skall se lite annorlunda ut (eller kanske mycket annorlunda) men din redaktör tillåter det inte?

LaTeX (uttalas Lateck) är ett sättningssystem som inte följer WYSIWYG-principen. Istället är det inspirerat av programmeringsspråk. Det ärver alla fördelar med programmeringsspråk och några av deras nackdelar. I stället för att komponera ett dokument på skärmen (WYSIWYG-metoden) är ett LaTeX-dokument ett program som talar om för LaTeX-systemet hur dokumentet ska skapas. Programmet kompileras med hjälp av en LaTeX-kompilator för att producera ett dokument som kan skrivas ut eller visas.

Detta kan låta lite konstigt för någon som är bekant med WYSIWYG-metoden, men alla som gillar (eller uppskattar) kraften och flexibiliteten hos ett programmeringsspråk på hög nivå kommer snart att upptäcka att LaTeX helt enkelt är ett bättre sätt att utforma dokument.

I den här artikeln kommer jag att förklara lite av LaTeX-språket, tillräckligt för att du ska kunna ladda ner ett gratis LaTeX-system och skriva några vanliga dokument. Det kommer inte att finnas tid att täcka alla funktioner i LaTeX (det skulle ta en hel bok), men jag hoppas att jag kan lämna dig med en stark känsla för på vilket sätt skrivandet av ett dokument, med hjälp av LaTeX, skulle kunna vara en liknande aktivitet som att skriva ett program.

En enkel LaTeX-källfil

Figur 1 innehåller en enkel LaTeX-källfil. Den första raden är ett fördefinierat LaTeX-kommando. Alla kommandon börjar med ett backslash-tecken. Kommandot på den första raden fastställer de globala egenskaperna för det dokument som ska sättas. Dokumentstilen article är den stil som används för en kort artikel. Andra stilar är book, report, thesis och så vidare. Varje dokumentstil ändrar globala parametrar som beskriver dokumentets layout. I bokmiljön produceras till exempel löpande rubriker som ger kapiteltitel och författare på omväxlande sidor.

Som alla bra programmeringsspråk är allt detta naturligtvis helt konfigurerbart. Men som de flesta programmeringsspråk gäller att ju mer flexibilitet du vill ha, desto mer behöver du veta om det underliggande programmeringsspråket. Lyckligtvis ger standardinställningarna för alla LaTeX-miljöer mycket tilltalande resultat, så det är möjligt att komma långt utan att behöva kunna alltför mycket av det underliggande språket. Det du får är troligen vad du vill ha, och om det inte är det så kan du åtminstone ändra det.

Den egentliga dokumenttexten finns i kommandona \begin{document} … \end{document}, \begin{} och \end{} är kommandon som öppnar och stänger en miljö. Alla dokument (och fragment av dokument) sätts inom en miljö. Vi kan också nästla miljöer, vilket vi kommer att se senare.

Rymdtecken är oviktiga för LaTeX; ett rymdtecken är lika bra som hundra. Nya rader kan också infogas var som helst, men två eller fler nya rader används för att ange den punkt där ett stycke slutar och ett annat börjar. När du skriver ut det färdiga dokumentet kommer LaTeX att vänster- och högerjustera texten (genom att infoga bindestreck, där ren justering skulle leda till oattraktiva utdata).

Ett stort dokument består vanligtvis av ett antal avsnitt, som kan innehålla underavsnitt. En ny sektion introduceras i LaTeX med kommandot \section och en ny underavdelning med kommandot \subsection. LaTeX-källkoden i figur 2 beskriver ett dokument med två avsnitt, vars titlar kommer att vara introduktion och motivering. Observera att vi i källkoden inte behöver ge sektionerna ett sektionsnummer. LaTeX kommer att göra detta åt oss när den kompilerar dokumentet. Introduktionen kommer alltså att vara sektion nummer 1 och motiveringen kommer att vara sektion nummer 2. Om vi skulle byta ut den ordning i vilken de två avsnitten förekommer (genom att klippa och klistra in källkoden) kommer rationale att bli avsnitt 1, medan introduktion automatiskt blir avsnitt 2.

En viktig fråga uppstår nu: Hur skulle jag korshänvisa från ett avsnitt till ett annat? Anta till exempel att jag vill hänvisa till avsnittet introduktion i avsnittet rationale. Sättet att åstadkomma detta illustrerar den första fördelen vi får av LaTeX sätt att göra saker och ting.

Symboliska referenser

Då en LaTeX-källfil är ett program kan du använda symboliska namn för att hänvisa till delar av dokumentet. Detta gör korsreferenser till ett nöje, eftersom korsreferensen är en logisk enhet som hänvisar till en namngiven del av dokumentet. Om denna namngivna del av dokumentet ska flyttas behöver vi bara kompilera om.

För att införa en symbolisk referens använder vi kommandot \label{}, och för att hänvisa till den använder vi kommandot \ref{}. Figur 3 illustrerar detta. \label{intro} introducerar ett symboliskt namn, label, vars värde beror på i vilket sammanhang \label-kommandot visas. I det här fallet, eftersom kommandot \label används i det första avsnittet av dokumentet, kommer värdet som tilldelas intro att vara 1. Kommandot \ref{} producerar helt enkelt etikettens värde. Om jag nu flyttar introduktionen till en ny position, till exempel efter avsnittet rationale, kommer värdet för intro att ändras till 2, och korsreferensen i rationale kommer därmed att peka på den nya platsen för avsnittets introduktion.

Detta skrivsätt tvingar oss att tänka på dokumentet på en logisk nivå snarare än på den fysiska nivån. Det skulle vara dumt att skriva som vi såg tidigare i avsnitt \ref{intro} till exempel, eftersom vi kanske flyttar etiketten intro till en punkt efter hänvisningen. I stället för att tänka på vårt dokument som en monolit av text som förekommer i en viss ordning, tänker vi på det på en högre abstraktionsnivå, som en samling avsnitt som vi är fria att flytta runt. Vi kan till och med återanvända sektioner från ett dokument i ett annat, och förutsatt att våra symboliska namn är unika kommer vi att upptäcka att alla korsreferenser fungerar korrekt.

Några fler miljöer

LaTeX har många användbara fördefinierade miljöer. Anta att vi vill producera en sekvens av punkter med hjälp av punkter. Vi kan göra detta med itemize-miljön, källkoden i figur 4 kommer att producera ett dokument som listar de tre huvudsakliga materiatillstånden, ett per rad och vart och ett föregånget av en punktmarkering. I många avseenden liknar LaTeX-sättet att utforma ett dokument HTML-sättet att göra saker och ting. Exempelvis är itemize-miljön ganska lik den osorterade listmiljön i HTML.

Ibland vill vi sätta in objekt i en sorterad, numrerad lista. Detta uppnås med enumerate-miljön. Figur 5 visar en inbäddad sekvens av uppräknade objekt som beskriver de fyra geologiska tidsåldrarna och perioderna inom dem. LaTeX använder olika numreringssystem för varje nivå av nesting (arabiska siffror för nivå ett, alfabetiska tecken för nivå två, romerska siffror för nivå tre). Detta, liksom allt annat, kan ändras om vi så önskar.

För att betona en del av texten omsluts den av em-miljön (betoning), så vi skriver helt enkelt \begin{em} help! \end{em} hon skrek. för att betona ordet hjälp (och utropstecknet som följer efter det).

Procedurer

I ett konventionellt programmeringsspråk ger möjligheten att definiera procedurer programmeraren stor flexibilitet. Även i LaTeX kan vi definiera procedurer för att lägga upp text. Den enklaste formen av procedur är en parameterlös procedur. Den gör det möjligt för oss att namnge en del av källkoden och sedan anropa den. Anta att jag skriver ett dokument där jag vill hänvisa till en frukt, men jag har ännu inte bestämt mig för om det ska vara ett äpple, en apelsin eller ett päron. Jag skulle kunna införa en procedur som heter fruit och sätta ett godtyckligt fruktnamn i dess kropp. När jag slutligen har bestämt mig för vilken frukt jag vill hänvisa till behöver jag bara ändra procedurens kropp; alla punkter där proceduren anropas kommer då automatiskt att ta hänsyn till ändringen av dess kropp.

I LaTeX kallas en procedur för ett kommando, och en ny procedur skapas med kommandot \newcommand. Kommandon kallas ofta för makron eftersom LaTeX expanderar anrop till dessa när den möter dem i dokumentkroppen. Figur 6 illustrerar användningen av ett enkelt parameterlöst makro. När LaTeX-källan i figuren kompileras ger den texten The first apple to appear will be the first apple I shall eat.

För att vara helt rättvis skulle detta kunna åstadkommas, kanske på ett enklare sätt, med en WYSIWYG-ordbehandlare, helt enkelt genom att göra en sökning och ersättning. (Detta skulle naturligtvis inte ha fungerat om meningen hade varit ”den första \frukt som dyker upp är mitt ögons äpple”). Detta är dock bara ett enkelt exempel på vad vi kan göra med LaTeX-makron. De kommer verkligen till sin rätt när vi förser dem med parametrar.

Parametrar

Antag att jag skriver ett dokument om arrayhantering. Jag kanske vill beskriva en algoritm för att hitta det största elementet i en array. För att göra dokumentet mer generiskt och för att slippa skriva om stora delar av det skulle jag kunna producera två versioner, var och en specifik för ett visst programmeringsspråk, till exempel Basic och C. Genom att använda kommandon kan jag undvika att använda den särskilda syntaxen för matriser, eller åtminstone kan jag fånga upp de syntaktiska skillnaderna i ett enda kommando, vilket gör det mycket lättare att anpassa mitt dokument till olika programmeringsspråk.

Figur 7 illustrerar detta. I kommandodefinitionen för \lookup talar den om för LaTeX-kompilatorn att kommandot tar två parametrar, den första kallas #1 och den andra #2. I ett anrop till ett kommando anges parametrarna efter varandra inom parenteser. Så anropet \lookup{S}{2}, kommer att ge texten S(2). Detta är Basic-versionen av kommandot \lookup. Om vi ersätter det med versionen i figur 8 får vi samma dokument, men med array-referenser inom hakparenteser. Detta är C-versionen av dokumentet. Lägg märke till att skillnaden mellan de två LaTeX-källdokumenten är exakt två tecken, nämligen de två tecken som utgör skillnaden mellan arrayreferenser i Basic och C.

Som med procedurer i programmeringsspråk är det möjligt att anropa en procedur från kroppen av en annan och att använda resultatet av ett proceduranrop som den egentliga parametern till en annan. Så till exempel kan vi skriva \lookup{A}{\lookup{B}{1}}} som ger antingen texten A(B(1)) eller A] beroende på om vi använder Basic- eller C-versionen av \lookup-kommandot.

Variabler

LaTeX har egna variabler, på vilka vi kan utföra enkla aritmetiska beräkningar (mer avancerade former av aritmetiska beräkningar är möjliga, men addition är vanligen allt som krävs för sättning). Jag kommer att titta på två enkla exempel på hur vi kan använda variabler, som båda kommer att vara bekanta för programmerare; counter-variabeln och flag-variabeln.

Antag att vi vill inkludera en sekvens av numrerade punkter i ett dokument. Vi kan använda en räknarvariabel för att numrera varje punkt och skriva några enkla kommandon för att styra numreringen. Figur 9 illustrerar detta. Räknaren deklareras med hjälp av kommandot \newcounter. Den sätts till ett visst värde med kommandot \setcounter. Kommandot \point används för att skriva ut det aktuella punktnumret och för att öka räknaren (för att lägga till ett till dess värde). Kommandot \the<name>, för en viss räknare <name>, gör att värdet på variabeln skrivs ut. Detta kommando kan användas med vilken variabel som helst, inte bara de som användaren har infört, så till exempel \thesection skriver ut det aktuella värdet av variabeln section. I figur 9 använder vi kommandot \point för att skriva ut tre punkter. En trevlig egenskap hos detta tillvägagångssätt är att vi kan variera ordningen i vilken punkterna förekommer och numreringen kommer att ändras i enlighet med detta.

Nu ska vi se hur vi kan använda variabler som flaggor för att välja vilken text som ska produceras i ett dokument. Som vi kommer att se tillåter kombinationen av flaggor och makron att vi skriver mycket generiska dokument, som kan instansieras helt enkelt genom att välja ett lämpligt värde för flaggan. Tänk återigen på problemet med att skriva ett dokument om matriser, där vi vill ha två former av kommandot \lookup, en för Basic och en för C. Det skulle vara bättre om vi kunde använda en flagga i vår LaTeX-källa för att ange om språket skulle vara C eller Basic. Allt vi då skulle behöva göra är att ge flaggan rätt värde innan vi kompilerar dokumentet. Figur 10 illustrerar detta.

Det första vi gör är att inkludera alternativet ifthen i documentstyle-deklarationen. Detta gör det möjligt för oss att använda kommandot \ifthenelse senare. Därefter deklarerar vi en motvariabel, language, som sätts till 1 om språket ska vara Basic och till 0 om det ska vara C. Symbolen % används av LaTeX för kommentarer; all text som visas efter en %-symbol (och före radens slut) ignoreras av LaTeX-kompilatorn. Därefter ställer vi in räknaren på 1 med kommandot \setcounter{language}{1}, så att den text vi skall producera i detta fall kommer att vara specialiserad för Basic. Denna specialisering uppnås med hjälp av den modifierade versionen av kommandot \lookup. Den nya versionen av \lookup använder det inbyggda kommandot \ifthenesle för att testa värdet på språkvariabeln. Formatet för ett \ifthenelse-kommando är \ifthenelse{<test>}{<then_branch>}{<else_branch>}. Det beter sig precis som ett if-kommando i ett konventionellt programmeringsspråk. Om <test> utvärderas till sant produceras texten i texten i <then_branch>, om den är falsk produceras texten i <else_branch>.

Med hjälp av den här flaggan kan vi skriva mängder av kommandon som var och en producerar texten för en viss typ av uttalande, språket beror på värdet av flaggans motvariabel. På så sätt kan vi skriva ett generiskt dokument om programmering och helt enkelt ställa in flaggan på rätt sätt för att få fram den specialiserade version av dokumentet som vi vill ha.

Figur 10 visar hur vi skulle kunna göra detta. Vi definierar kommandon som producerar Basic- eller C-syntax för array-sökning (med hjälp av makrot \lookup, som beskrivs ovan), array-uppdatering och, mer utförligt, ett kommando som producerar lämplig syntax för en for-slinga. Det sistnämnda kräver lite ytterligare förklaringar.

Skillnaden mellan en for-slinga i C och i Basic är till stor del syntaktisk, och vi kan använda LaTeX flexibilitet för att slippa dessa syntaktiska detaljer. Kommandot \forloop använde flaggräknarspråket för att avgöra om de fyra elementen i slingan skulle läggas ut i Basic- eller C-stil. Detta gör det möjligt för oss att skriva lite text om array-initiering och slingor, utan att behöva bestämma vilket språk måldokumentet kommer att hänvisa till.

Bemärk att i C-versionen av syntaxen för for-slingan skrivs de parenteser som omsluter utsagorna i slingans kropp som \{ … \}, istället för som { … }. Detta beror på att de krökta parentes-symbolerna redan har en betydelse för LaTeX, så för att få den att skriva ut krökta parenteser föregås de av ett backslash.

I figur 10 ställer vi in räknespråket på 1, så den producerade utgången kommer att vara för Basic. Från källkoden i figur 10 kommer LaTeX att producera utmatningen i figur 11. Om vi vill producera ett dokument som säger samma sak om C-matriser behöver vi bara ändra raden \setcounter{language}{1} till \setcounter{language}{0}. Så enkelt är det.

Matematik

LaTeX hyllas ofta (och med rätta) för det sätt på vilket det möjliggör sättning av komplex matematik. Många moderna texter inom matematik, datateknik och andra naturvetenskapliga och tekniska ämnen sätts med LaTeX.

Matematisk text kan antingen läggas ut på rad, i vilket fall den visas i den mening i vilken den skrivs, eller i visningsläge, i vilket fall den visas centrerad på en egen rad som så att säga visas. Alla matematiska standardsymboler och textformer finns tillgängliga med hjälp av kommandon. Eftersom LaTeX har funnits så länge och har använts, utvecklats och förbättrats av så många matematiker runt om i världen, är det ytterst osannolikt att det finns någon form av matematisk utskrift som inte har tillgodosetts av någon. En snabb genomgång av din bokhylla kommer förmodligen att avslöja erkännanden till LaTeX i flera läroböcker om data och matematik, eftersom det ofta används för att förbereda tekniska böcker, vilket gör det möjligt för författaren/författarna att tillhandahålla kameraklara kopior till sina förläggare.

Det finns också en blomstrande LaTeX-användargemenskap som ser till att all denna värdefulla information samlas in, underhålls och uppdateras. All LaTeX-utveckling är helt bakåtkompatibel, så du behöver inte oroa dig för att dina dokument på något sätt kommer att bli inaktuella.

Nyttjande

Jag uppskattar att det tar mellan två dagar och en vecka att bli produktiv med LaTeX. Många läsare anser kanske att detta är oacceptabelt jämfört med inledningstiden för WYSIWYG-redigerare. Om du bara behöver förbereda dokument som brev och memo är LaTeX förmodligen inte värt att överväga. Men om du har att göra med produktion av en stor mängd text och är beredd att investera i ett system som i slutändan kan spara dig månader av arbete, då kan LaTeX vara lösningen.

En av de mest ogripbara, men ändå mest attraktiva fördelarna som LaTeX-användare upplever kommer från det sätt på vilket LaTeX, i likhet med ett bra programmeringsspråk, stöder återanvändning. Mycket snabbt kommer du att finna dig själv i att bygga upp en uppsättning av dina egna personliga makron som gör det möjligt för dig att skräddarsy dina dokument efter din egen smak. Att återanvända delar av ett dokument i ett annat dokument sker utan ansträngning och sömlöst. Denna sömlöshet beror på två aspekter av LaTeX-metoden. Den symboliska namngivningen av delar av ett dokument gör att korshänvisningar uppdateras automatiskt när dokumentet redigeras. Begreppet miljö innebär att samma stycke källtext kan se olika ut när det ingår i olika sammanhang. Naturligtvis strider detta direkt mot WYSIWYG-principen, men detta är LaTeX’ främsta styrka. Många datortidskrifter , konferenser och förlag tillhandahåller sina egna LaTeX-stilfiler som, när de inkluderas i en LaTeX-källfil, automatiskt lägger dokumentet i den form som krävs för publicering.

Var ska vi ta vägen härnäst

Om du är intresserad av att prova LaTeX själv, kan en MS-Windows-version erhållas (gratis) från http://www.eece.ksu.edu/~khc/tex.html. LaTeX finns som standard på de flesta UNIX-plattformar och i de flesta Linuxdistributioner, så om du använder en av dessa kan du försöka skriva man latex. Det finns en FTP-webbplats med många användbara LaTeX-verktyg, makron och relaterade dokument på ftp.tex.ac.uk.

Det finns två oumbärliga böcker om hur man skriver LaTeX-dokument. Båda är mycket läsvärda och informativa. LaTeX A Document Preparation System av Leslie Lamport (ISBN 0-201-15790-X), beskriver det grundläggande systemet och är en mycket bra bok att komma igång med. Den innehåller tillräckligt med information för att omedelbart skriva de flesta normala dokument. The LaTeX Companion av Mike Goossens, Frank Mittelbach och Alexander Samarin (ISBN 0-201-54199-8) är mer detaljerad och täcker alla de nya funktioner som lagts till i LaTeX genom LaTeX2e-projektet. Den här boken är användbar om du vill skriva många dokument med LaTeX och anpassa språket till din egen smak. Den förklarar hur man uppnår alla möjliga exotiska effekter, t.ex. att lägga ut texten i en hjärtform (kanske användbart för vissa dokument som skrivs strax före den 14 februari). Båda dessa böcker ges ut av Addison-Wesley.

Logiskt är bättre

Dokumentberedningssystemet LaTeX har utvecklats och förbättrats genom åren. Det är extremt robust och erbjuder funktioner för att skriva dokument till publicerbara standarder som innehåller text och matematik. Ett LaTeX-dokument beskrivs med hjälp av ett programmeringsspråk, vilket ger LaTeX-användaren all den kraft och flexibilitet som ett konventionellt programmeringsspråk har. Skrivstilen tvingar användaren att betrakta dokumenten på nivån för deras logiska organisation, snarare än deras fysiska utseende. Detta är till en början lite frustrerande, men i slutändan har det många fördelar, t.ex. stöd för återanvändning och skapande av generiska dokument som kan ha flera fysiska instansieringar.

Mark Harman är forskningsdirektör och tillförordnad chef vid School of Informatics and Multimedia Technology vid University of North London (http://www.unl.ac.uk/~mark/welcome.html). Han kan kontaktas via e-post på [email protected] eller per post till Mark Harman, Project Project, School of Informatics and Multimedia Technology, University of North London, Holloway Road, London N7 8DB.


Figur 1 Ett enkelt LaTeX-dokument.

\documentstyle{article}

\begin{document}

hello world

\end{document}


Figur 2 Avsnitt

\documentstyle{article}

\begin{document}

\section{Introduction}

Detta är ett ganska kort dokument och det här är dess introduktion.

\section{Rationale}

Dokumentet är så kort eftersom det är enkelt och exempel.

\end{document}


Figur 3 Symboliska referenser

\documentstyle{article}

.

\begin{document}

\section{Introduction}

\label{intro}

Detta är ett ganska kort dokument och detta är dess introduktion.

\section{Rationale}

En kort introduktion till detta dokument finns i avsnitt \ref{intro}.

\end{document}


Figur 4 Miljön Itemize.

\begin{itemize}

\item Solid

\item Liquid

\item Gas

\end{itemize}


Figur 5 Miljön enumerate.

\begin{enumerate}

\item Cenozoic

\begin{enumerate}

\item Quaternary

\item Tertiary

\end{enumerate}

\item Mesozoikum

\begin{enumerate}

\item Krita

\item Jura

\item Trias

\end{enumerate}

\item Paleozoikum

\begin{enumerate}

\item Perm

\item Karbon

\item Devon

\item Silur

\item Ordovicium

\item Cambrian

\end{enumerate}

\item Precambrian

\end{enumerate}


Figur 6 Parameterlösa kommandon.

\documentstyle{article}

\newcommand{\fruit} { apple }

\begin{document}

Den första \fruit som dyker upp kommer att vara den första \frukt jag ska äta.

\end{document}


Figur 7 Parametrar: Grundläggande version.

\documentstyle{article}

\newcommand{\lookup} { #1(#2) }

\begin{document}

För att hitta det största elementet i matrisen A, lagrar du det första elementet, \lookup{A}{0}, i variabeln b. Därefter går du in i en slinga, kontrollerad av variabeln i, som börjar med 1 och fortsätter till slutet av matrisen. Vid varje punkt i slingan jämför du element i, \lookup{A}{i}, med värdet i b. Om \lookup{A}{i} är större än b, tilldela \lookup{A}{i} till b.

\end{document}


Figur 8 Parametrar: C version.

\documentstyle{article}

\newcommand{\lookup} { #1 }

\begin{document}

För att hitta det största elementet i matrisen A, lagrar du det första elementet, \lookup{A}{0}, i variabeln b. Därefter går du in i en slinga, som styrs av variabeln i, som börjar med 1 och fortsätter till slutet av matrisen. Vid varje punkt i slingan jämför du element i, \lookup{A}{i}, med värdet i b. Om \lookup{A}{i} är större än b, tilldela \lookup{A}{i} till b.

\end{document}


Figur 9 Räknarvariabler.

\newcounter{pointnumber}

\setcounter{pointnumber}{1}

\newcommand{point}{point} { Point \thepointnumber \stepcounter{pointnumber} }

\point

En viss text som är kopplad till en av punkterna

\point

En viss text som är kopplad till en annan punkt

\point

En annan punkt


Figur 10 Flaggvariabler.

\documentstyle{article}

\newcounter{language} % sätts till 1 för Basic och 0 för C

\setcounter{language}{1}

\newcommand{\lookup}

{

\ifthenelse{\value{language} = 1} {#1(#2)} {#1}

}

\newcommand{\update}

{

\ifthenelse{\value{language} = 1} {LET #1(#2) = #3} {#1 = #3}

}

% Kommandot forloop tar fyra parametrar

% 1. Slingans nedre gräns – ett heltal eller ett integraluttryck.

% 2. Den övre gränsen för slingan – ett heltal eller integraluttryck.

% 3. Slingans styrvariabel – en helhetsvariabel.

% 4. Slingans kropp – en sekvens av uttalanden.

% Flaggan counter language, används för att bestämma det språk som

% syntaxen för slingan skrivs på.

\newcommand{\forloop}

{

{

\ifthenelse{\value{language} = 1}

{

FOR #3 = #1 TO #2

NEXT #3

}

{

for(#3=#1;#3 != #2;#3++)

\{

\}

}

\begin{document}

För att lagra värdet 10 i element nummer 3 i matrisen A skriver vi \update{A}{3}{10}.

För att initialisera elementen 0 till 10 i matrisen A med startvärdet 0 kan vi använda en for-slinga, som börjar vid 0 och går upp till 10. Detta skulle skrivas så här

\forloop{0}{10}{i}{\update{A}{i}{0}}

\end{document}


Figur 11 Resultatet av kompileringen av LaTeX-källkoden i figur 10.

För att lagra värdet 10 i element nummer 3 i matrisen A skriver vi LET A(3) = 10.

För att initialisera elementen 0 till 10 i matrisen A med startvärdet 0 kan vi använda en for-slinga som börjar vid 0 och går upp till 10. Detta skulle skrivas så här

FOR i = 0 TO 10

LET A(i) = 0

NEXT i

(P)1997, Centaur Communications Ltd. EXE Magazine är en publikation av Centaur Communications Ltd. Ingen del av detta verk får publiceras, helt eller delvis, på något sätt, även elektroniskt, utan uttryckligt tillstånd från Centaur Communications och upphovsrättsinnehavaren om denne är en annan part.

EXE Magazine, St Giles House, 50 Poland Street, London W1V 4AX, e-post [email protected]

Lämna ett svar

Din e-postadress kommer inte publiceras.