> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/no/flere-emner/20-how-tex-macros-actually-work-part-2.md).

# Hvordan TeX-makroer egentlig fungerer: Del 2

[Del 1](/latex/no/flere-emner/19-how-tex-macros-actually-work-part-1.md) [Del 2](/latex/no/flere-emner/20-how-tex-macros-actually-work-part-2.md) [Del 3](/latex/no/flere-emner/21-how-tex-macros-actually-work-part-3.md) [Del 4](/latex/no/flere-emner/22-how-tex-macros-actually-work-part-4.md) [Del 5](/latex/no/flere-emner/23-how-tex-macros-actually-work-part-5.md) [Del 6](/latex/no/flere-emner/24-how-tex-macros-actually-work-part-6.md)

## Introduksjon: En historie i bilder

Som nevnt i del 1 må TeX «lese» hvert tegn i din `.tex` fil, og denne leseprosessen omtales riktigere som *skanning*. Tradisjonelt blir TeXs inngangsbehandling (skanning) sammenlignet med at TeX har «øyne» som kan observere inputen, så vi vil bruke den tidstestede analogien i grafikkene nedenfor.

### Grafikk 1: Øynene er klare

Vi antar at TeX har fått noe input fra en `.tex` fil og er i ferd med å behandle vår tegnstreng `Hello World \jobname` som finnes i et avsnitt med tekst. Den vil kontrollere hvert tegn i tur og orden og undersøke kategorikoden.

![TeXs øyne klare til å skanne en linje med tekst](/files/815f18be4de5b135f3643cd3b2d9b94acdc614b4)

### Grafikk 2: Behandling av kategorikoder

I neste grafikk ser vi i grove trekk (med flere detaljer nedenfor) hvordan TeX reagerer på flere ulike kategorikoder. Det finnes 16 kategorikoder totalt, men for enkelhets skyld viser vi bare bruken av tre: 11, 10 og 0. Andre tegnekoder blir viktige under TeXs satsingsprosesser, som å konstruere tabeller, sette matematikk og gjenkjenne makroparametere.

![TeX som reagerer på flere ulike kategorikoder](/files/94d591d6dfdf81856e4dadfa7323b9cfc7558a80)

#### Merknader til grafikk 2

Her ser vi på TeX mens det leser (skanner) tegn som inngår i et avsnitt med tekst. TeX undersøker hvert tegn, sjekker kategorikoden og utfører den passende handlingen basert på kategorikoden og TeXs «modus» (en status basert på hva det holder på med).

* **(grønne øyne)** TeX vil se at hvert av disse tegnene har kategorikode 11 («bokstav») og vil sende disse tegnene videre til satsing som en del av avsnittet det bygger opp. TeX sender imidlertid ikke bare tegnekoden videre (bruker den), men bruker i stedet paret av tall (tegnekode, kategorikode) til å beregne en sammensatt heltallsverdi kalt et *tegntoken* (se nedenfor). Når dette tegntokenet er produsert, går det inn i TeXs interne satsingsprosesser/-algoritmer.
* **(blå øyne)** TeX ser et mellomromstegn (ASCII 32) med kategorikode 10 («mellomromstegn»)—merk at, som diskutert, er det fullt mulig at kategorikoden til et mellomrom (ASCII 32), eller et hvilket som helst tegn, har blitt endret til en annen verdi før TeX leser det inn.

Hvordan TeX faktisk behandler tegn med kategorikode 10 («mellomromstegn») varierer avhengig av når/hvor TeX ser det—TeXs nåværende «modus». For eksempel finnes det tider hvor TeX rett og slett vil hoppe over dem. Her vil TeX vite at den har oppdaget et tegn med kategorikode 10 (som tilfeldigvis er et mellomrom, ASCII 32) mens den behandler avsnittstekst, så den vil til slutt konvertere det til såkalt interword glue: en slags fleksibelt mellomrom som kan strekkes eller krympes.

* **(røde øyne)** Her har TeX observert et tegn som har en svært viktig kategorikode: 0 (escape-tegn).

Et escape-tegn—*ethvert* tegn med kategorikode 0—forteller TeX å skifte til en spesiell lesemodus og nøye skanne (lese) de påfølgende tegnene fordi de identifiserer navnet på en *kommandoen*, ikke tekst som skal settes. I TeX-litteraturen vil du se at termen «command» også omtales som *kontrollsekvens*. Etter å ha sett et escape-tegn sjekker TeX kategorikoden til tegnet som følger *umiddelbart etter det*; dette er fordi TeX kjenner igjen to typer kommandoer:

* flertegns-kommandoer kalt *kontrollord*: tegnet som følger umiddelbart etter escape-tegnet har kategorikode 11. Alle påfølgende tegn som har kategorikode 11, regnes som en del av navnet på en kommando. TeX slutter å lete etter tegn som utgjør en del av kommandonavnet når det oppdager et hvilket som helst tegn som *ikke* har kategorikode 11—for eksempel et mellomromstegn med kategorikode 10.
* ettbokstavs-kommandoer kalt *kontrollsymboler*: tegnet som følger umiddelbart etter escape-tegnet *ikke* har kategorikode 11.

Du kan tenke på et escape-tegn som noe som får TeX til å «escape» ut av sin vanlige skanneoppførsel og ta i bruk en annen tilnærming for de neste få tegnene—dette er markert av den røde, stiplede boksen som viser at TeX vil **Begynne å skanne etter en kommando**.

### Grafikk 3: Behandling av kategorikode 11 («bokstaver»)

I del 1 av denne serien nevnte vi at hvert tegn TeX leser fra inputen sin, beskrives av to heltall:

* tegnekode: et heltall som definerer den numeriske representasjonen av et tegn;
* kategorikode: en verdi fra 0 til 15 som TeX tildeler hvert tegn som kan forekomme i inputen.

TeX bruker disse to opplysningene i neste trinn av behandlingen: å lage tegntoken.

Grafikk 3 bygger videre på grafikk 2 for å vise hva TeX gjør med disse inngangstegnene med kategorikode 11 (bokstav): det lager *tegntoken*—heltallsverdier som TeX beregner ved å kombinere det tegnets kategorikode og tegnekode.

**Merk**: I dette eksemplet diskuterer vi bare tegn med kategorikode 11, men du bør være klar over at TeX også oppretter tokenverdier for inngangstegn som har andre kategorikoder—bortsett fra kategorikode 0 som aldri blir gjort om til et token: escape-tegnet fungerer bare som en «bryter» for å utløse spesiell behandling.

![TeX som behandler tegn med kategorikode 11](/files/7f04a00719c7d25e98d58226bbb85bb0cb53781a)

Grafikk 5 nedenfor vil vise hva TeX gjør når det ser et tegn med kategorikode 0 (et escape-tegn).

#### Merknader til grafikk 3: Behandling av kategorikode 11 («bokstav»)

Her vil vi fokusere på **grønn** aktiviteten: hva som skjer når TeX ser tegn som har kategorikode 11 («bokstav»). Etter at TeX har lest et tegn og fastslått kategorikoden (her er den 11), er det neste TeX gjør å *kombinere* dette tallet paret til ett enkelt heltall kalt et tegntoken: disse tokenene (heltall) sendes videre til neste trinn i TeXs interne satsingsalgoritmer/-behandling. Som nevnt vil TeX også lage tegntoken for tegn med andre kategorikoder (dvs. ikke 11); her bruker vi bare kategorikode 11 som et eksempel.

Hvert tegntoken (et heltall) binder permanent et inngangstegn til kategorikoden som er tildelt det tegnet **på det tidspunktet det ble skannet (lest inn) av TeX**: dette faktumet er av avgjørende betydning for å forstå oppførselen til TeX-/LaTeX-makroer. Under videre behandling vil TeX selvsagt noen ganger måtte splitte opp et tegntoken for å avgjøre hvilket par av (tegnekode, kategorikode) som ble brukt til å konstruere tokenet. Men når et tegn først er lest inn av TeXs input- (skanne)prosess, fører tegntokenverdien TeX beregner til at det tegnet blir *permanent* koblet til kategorikoden som er tildelt det *på tidspunktet det ble lest inn*.

**Beregning av tegntoken**

TeX-motorer bruker en enkel formel for å beregne et tegntoken, $$T$$, fra et tegn med kategorikode $$C$$ og tegnekode $$A$$:

$$T = \text{constant} \times C + A$$

8-bits motorer, som pdfTeX, bruker:

$$T = 256\times C + A$$

Unicode-bevisste motorer, som XeTeX eller LuaTeX, må bruke en annen formel fordi tegnekoder under Unicode kan være langt større enn maksverdien 255 i den eldre 8-bits ASCII-kodingsverdenen. XeTeX bruker for eksempel:

$$T= 2^{21}\times C + A \hskip5mm \text{(where } A \text{ is a Unicode character code value)}$$

Igjen er det verdt å merke seg at tegn med kategorikode 0 ikke konverteres til tegntoken: kategorikode 0 har en helt spesiell plass i TeXs inputfiltrering og brukes kun som en «bryter» for å få TeX inn i en spesiell modus for å skanne de neste få tegnene. Grafikk 5 tar for seg dette.

### Grafikk 4: Behandling av kategorikode 10 («mellomromstegn»)

TeXs håndtering av tegn med kategorikode 10 («mellomromstegn») avhenger av hva TeX for øyeblikket arbeider med når det oppdager et tegn med kategorikode 10 i inputen. I vårt eksempel utfører TeX rutinemessig avsnittsbehandling, og mellomromstegnet med kategorikode 10 vil bli konvertert til interword glue.

![TeX som behandler tegn med kategorikode 10](/files/e79d81a65959bbac07046e274967b33374dc92b0)

TeXs håndtering av mellomrom kan virke ganske særegen, men en god oversikt finnes i kapittel 1 og 2 av [TeX by Topic](http://www.eijkhout.net/texbytopic/texbytopic.html) av Victor Eijkhout—du kan [laste ned en gratis PDF-kopi](https://bitbucket.org/VictorEijkhout/tex-by-topic) via nettstedet hans.

For eksempel, når TeX ser et tegn med kategorikode 10, finnes det tider hvor TeX vil:

* hoppe over (ignorere) dem alle—for eksempel når TeX er i vertikal modus;
* konvertere flere mellomromstegn til ett enkelt mellomromstegn—hoppe over ekstra mellomrom, for eksempel ved behandling av et avsnitt;
* absorbere dem—for eksempel ved å absorbere ett enkelt mellomrom etter et kommandonavn;

Merk også at det finnes tider hvor TeX også vil *generere* mellomrom—ved å konvertere linjeslutttegn til et mellomrom. Oppførselen/behandlingen av mellomromstegn (ethvert tegn med kategorikode 10) er en av TeXs «særheter»: det tar tid/øvelse å bli fortrolig (komfortabel) med denne siden av TeX.

### Grafikk 5a: Behandling av kategorikode 0 (et «escape-tegn»)

I denne grafikken har TeX behandlet alle tegn fram til `\` tegnet, som har kategorikode 0: «escape-tegnet»—vi bruker en videre serie grafikker for å vise hvordan TeX behandler et escape-tegn og identifiserer navnet på en kommando.

![TeX som behandler tegn med kategorikode 0](/files/c2fc87c0e587298db78db6d02bb8a172bf318f29)

### Grafikk 5b: På jakt etter et kommandonavn

I denne grafikken ser vi nærmere på seksjonen i den røde, stiplede boksen (**Begynne å skanne etter en kommando**) for å se hva TeX gjør etter at det har sett et escape-tegn.

![TeX på jakt etter et kommandonavn](/files/0ef556c15b5c2aad622a60e6637916d01ccb68ce)

**Merknader til grafikk 5b**

* Når escape-tegnet er gjenkjent, har det gjort jobben sin: det fungerte som en bryter og deltar ikke i videre behandling—nærmere bestemt blir det **inneholder** konvertert til et tegntoken.
* For enkelhets skyld gjentar vi en detalj nevnt tidligere. Etter å ha sett et escape-tegn sjekker TeX kategorikoden til tegnet som følger *umiddelbart etter det*; dette er fordi TeX kjenner igjen to typer kommandoer:
* * flertegns-kommandoer kalt *kontrollord*: tegnet som følger umiddelbart etter escape-tegnet har kategorikode 11. Alle påfølgende tegn som har kategorikode 11, regnes som å utgjøre navnet på en kommando (*kontrollord*). TeX slutter å lete etter tegn som inngår i et kommandonavn når det oppdager et hvilket som helst tegn som *ikke* har kategorikode 11—for eksempel et mellomromstegn med kategorikode 10.
  * ettbokstavs-kommandoer kalt *kontrollsymboler*: tegnet som følger umiddelbart etter escape-tegnet *ikke* har kategorikode 11.
* I vårt eksempel er det første tegnet etter `\` er en `j` (kategorikode 11), noe som forteller TeX å lete etter en kommando som er en (potensielt) flertegnssekvens av tegn med kategorikode 11.
* TeX fortsetter å sjekke etter flere tegn som har kategorikode 11. Så snart det oppdager et tegn med en annen kategorikode, for eksempel et mellomrom med kategorikode 10, vet TeX at det har nådd slutten på kommandonavnet. Bare for å understreke poenget: her var det et mellomromstegn (kategorikode 10) som «avsluttet» kommandoen, men det kunne ha vært hvilket som helst tegn som **ikke** har kategorikode 11.

## Del 3

I del 3 fortsetter vi fra grafikk 5b for å fullføre denne delen av historien—hvordan TeX identifiserer en kommando—og går videre til hva det gjør deretter. Vi tar også et dypere blikk på noen interne sider ved TeXs behandling—deler av dette kan hoppes over ved første lesning, med mindre du virkelig liker detaljene.

[Del 1](/latex/no/flere-emner/19-how-tex-macros-actually-work-part-1.md) [Del 2](/latex/no/flere-emner/20-how-tex-macros-actually-work-part-2.md) [Del 3](/latex/no/flere-emner/21-how-tex-macros-actually-work-part-3.md) [Del 4](/latex/no/flere-emner/22-how-tex-macros-actually-work-part-4.md) [Del 5](/latex/no/flere-emner/23-how-tex-macros-actually-work-part-5.md) [Del 6](/latex/no/flere-emner/24-how-tex-macros-actually-work-part-6.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/no/flere-emner/20-how-tex-macros-actually-work-part-2.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
