> 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/sv/fler-amnen/20-how-tex-macros-actually-work-part-2.md).

# Hur TeX-makron egentligen fungerar: Del 2

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

## Introduktion: En berättelse i bilder

Som nämndes i del 1 måste TeX ”läsa” varje tecken i din `.tex` fil och den processen att läsa kallas mer korrekt för *skanning*. Traditionellt liknas TeX:s inläsning av indata (skanning) vid att TeX har ”ögon” med vilka det observerar indata, så vi använder den väl beprövade analogin i bilderna nedan.

### Grafik 1: Ögonen är redo

Vi antar att TeX har fått någon indata från en `.tex` fil och är på väg att bearbeta vår teckensträng `Hello World \jobname` som finns i en textparagraf. Det kommer att kontrollera varje tecken i tur och ordning och granska dess kategorikod.

![TeX:s ögon redo att skanna en textrad](/files/900a3b18686458e3eb6312c6662c03e81807b12c)

### Grafik 2: Bearbetning av kategorikoder

I nästa grafik ser vi översiktligt (med ytterligare detaljer nedan) hur TeX reagerar på flera olika kategorikoder. Det finns totalt 16 kategorikoder men för enkelhets skull visar vi användningen av bara tre: 11, 10 och 0. Andra teckenkoder blir viktiga under TeX:s sättningsprocesser, till exempel när tabeller konstrueras, matematik sätts och makroparametrar känns igen.

![TeX reagerar på flera olika kategorikoder](/files/a5e4dd5729e4328897f1a7fcb5a4a6db80c32e6a)

#### Anteckningar till grafik 2

Här betraktar vi TeX medan det läser (skannar) tecken som utgör en del av en textparagraf. TeX granskar varje tecken, kontrollerar dess kategorikod och vidtar lämplig åtgärd baserat på kategorikoden och TeX:s ”läge” (ett tillstånd baserat på vad det för närvarande gör).

* **(gröna ögon)** TeX kommer att se att vart och ett av dessa tecken har kategorikod 11 (”bokstav”) och kommer att skicka vidare dessa tecken för sättning som en del av den paragraf det bygger. TeX skickar dock inte vidare (använder) bara teckenkoden utan använder i stället paret av tal (teckenkod, kategorikod) för att beräkna ett sammansatt heltalsvärde som kallas en *teckentoken* (se nedan). När den teckentokenen har skapats går den in i TeX:s inre sättningsprocesser/-algoritmer.
* **(blå ögon)** TeX ser ett blankstegstecken (ASCII 32) med kategorikod 10 (”mellanrum”)—notera att, som diskuterats, det är fullt möjligt att kategorikoden för ett blanksteg (ASCII 32), eller vilket tecken som helst, har ändrats till ett annat värde—innan det läses in av TeX.

Hur TeX faktiskt bearbetar tecken med kategorikod 10 (”mellanrum”) varierar beroende på när/var TeX ser det—TeX:s aktuella ”läge”. Till exempel finns det tillfällen när TeX helt enkelt hoppar över dem. Här kommer TeX att veta att det har upptäckt ett tecken med kategorikod 10 (som råkar vara ett blanksteg, ASCII 32) medan det bearbetar paragraftext, så det kommer så småningom att omvandla det till så kallat interword glue: en sorts flexibelt mellanrum som kan töjas eller krympa.

* **(röda ögon)** Här har TeX observerat ett tecken som har en mycket viktig kategorikod: 0 (escape-tecken).

Ett escape-tecken—*vilket som helst* tecken med kategorikod 0—säger till TeX att växla till ett särskilt läsläge och noggrant skanna (läsa) de efterföljande tecknen eftersom de identifierar namnet på en *kommandot*, inte text som ska sättas. I TeX-litteraturen kommer du också att se att termen ”kommando” kallas även för *kontrollsekvens*. Efter att ha sett ett escape-tecken kontrollerar TeX kategorikoden för tecknet som följer *omedelbart efter det*; detta beror på att TeX känner igen två typer av kommandon:

* flerbokstavskommandon kallade *kontrollord*: tecknet som följer omedelbart efter escape-tecknet har kategorikod 11. Alla efterföljande tecken som har kategorikod 11 anses vara en del av namnet på ett kommando. TeX slutar leta efter tecken som ingår i ett kommandonamn när det upptäcker något tecken som *gör inte* inte har kategorikod 11—såsom ett blankstegstecken med kategorikod 10.
* enbokstavskommandon kallade *kontrollsymboler*: tecknet som följer omedelbart efter escape-tecknet *gör inte* har kategorikod 11.

Man kan tänka sig ett escape-tecken som något som får TeX att ”undkomma” sitt vanliga skanningsbeteende och anta ett annat tillvägagångssätt för de nästa få tecknen—detta indikeras av den röda streckade rutan som visar att TeX kommer att **Börja skanna efter ett kommando**.

### Grafik 3: Bearbetning av kategorikod 11 (”bokstäver”)

I del 1 av denna serie nämnde vi att varje tecken som TeX läser från sin indata beskrivs av två heltal:

* teckenkod: ett heltal som definierar den numeriska representationen av ett tecken;
* kategorikod: ett värde från 0 till 15 som TeX tilldelar varje tecken som kan förekomma i dess indata.

TeX använder dessa två informationsdelar i nästa steg av sin bearbetning: att skapa teckentoken.

Grafik 3 bygger vidare på Grafik 2 för att visa vad TeX gör med dessa indatatecken som har kategorikod 11 (bokstav): det skapar *teckentoken*—heltalsvärden som TeX beräknar med en kombination av det tecknets kategorikod och teckenkod.

**Obs**: I detta exempel talar vi bara om tecken med kategorikod 11, men du bör vara medveten om att TeX också skapar tokenvärden för indatatecken som har andra kategorikoder—utom kategorikod 0 som aldrig görs om till en token: escape-tecknet fungerar helt enkelt som en ”brytare” som utlöser särskild bearbetning.

![TeX bearbetar tecken med kategorikod 11](/files/e6035851e498d906cd2111c72dc823da0bdcf182)

Grafik 5 nedan visar vad TeX gör när det ser ett tecken med kategorikod 0 (ett escape-tecken).

#### Anteckningar till grafik 3: Bearbetning av kategorikod 11 (”bokstav”)

Här kommer vi att fokusera på **green** aktiviteten: vad som händer när TeX ser tecken som har kategorikod 11 (”bokstav”). Efter att TeX har läst ett tecken och fastställt dess kategorikod (här är den 11) är det nästa TeX gör att *kombinera* detta talpar till ett enda heltal som kallas en teckentoken: dessa token (heltal) skickas vidare till nästa steg i TeX:s inre sättningsalgoritmer/bearbetning. Som nämnts kommer TeX också att skapa teckentoken för tecken med andra kategorikoder (dvs. inte 11); här använder vi bara kategorikod 11 som exempel.

Varje teckentoken (ett heltal) binder varaktigt samman ett indatatecken med den kategorikod som tilldelats det tecknet **vid den tidpunkt då det skannades (lästes in) av TeX**: det faktumet är av avgörande betydelse för att förstå beteendet hos TeX-/LaTeX-makron. Självklart kan TeX vid vidare bearbetning ibland behöva dela upp en teckentoken för att avgöra vilket par (teckenkod, kategorikod) som användes för att konstruera den tokenen. Men när ett tecken väl har lästs in av TeX:s inmatningsprocess (skanning) leder det av TeX beräknade teckentokenvärdet till att tecknet *permanent* kopplas till den kategorikod som tilldelats det *vid tidpunkten då det lästes in*.

**Beräkning av teckentoken**

TeX-motorer använder en enkel formel för att beräkna en teckentoken, $$T$$, från ett tecken med kategorikod $$C$$ och teckenkod $$A$$:

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

8-bitarsmotorer, såsom pdfTeX, använder:

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

Unicode-medvetna motorer, såsom XeTeX eller LuaTeX, måste använda en annan formel eftersom teckenkoder under Unicode kan vara mycket större än maxvärdet 255 i den äldre 8-bitars ASCII-kodningens värld. XeTeX använder till exempel:

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

Återigen är det värt att notera att tecken med kategorikod 0 inte omvandlas till teckentoken: kategorikod 0 har en mycket speciell plats i TeX:s filtrering av indata och används enbart som en ”brytare” för att få TeX att växla in i ett särskilt läge för att skanna de nästa få tecknen. Grafik 5 behandlar detta.

### Grafik 4: Bearbetning av kategorikod 10 (”mellanrumstecken”)

TeX:s hantering av tecken med kategorikod 10 (”mellanrumstecken”) beror på vad TeX för närvarande arbetar med när det upptäcker ett tecken med kategorikod 10 i indata. I vårt exempel utför TeX rutinmässig styckevis bearbetning och blankstegstecknet med kategorikod 10 kommer att omvandlas till interword glue.

![TeX bearbetar tecken med kategorikod 10](/files/336e7b824ea34599ebc067ca7ef8bd84cdd2c8b3)

TeX:s hantering av blanksteg kan verka ganska egenartad men en bra översikt finns i kapitel 1 och 2 av [TeX by Topic](http://www.eijkhout.net/texbytopic/texbytopic.html) av Victor Eijkhout—du kan [ladda ner en kostnadsfri PDF-kopia](https://bitbucket.org/VictorEijkhout/tex-by-topic) via hans webbplats.

Till exempel, när TeX ser ett tecken med kategorikod 10, finns det tillfällen då TeX kommer att:

* hoppa över (ignorera) alla—t.ex. när TeX är i vertikalläge;
* omvandla flera mellanrumstecken till ett enda mellanrumstecken—och hoppa över extra blanksteg, till exempel vid bearbetning av en paragraf;
* absorbera dem—t.ex. absorbera ett enda blanksteg efter ett kommandonamn;

Notera också att det finns tillfällen när TeX också kommer att *generera* blanksteg—genom att omvandla radslutstecken till ett blanksteg. Beteendet/behandlingen av blankstegstecken (vilket tecken som helst med kategorikod 10) är en av TeX:s ”egenheter”: det tar tid/övning att bli bekväm med denna aspekt av TeX.

### Grafik 5a: Bearbetning av kategorikod 0 (ett ”escape-tecken”)

I denna grafik har TeX bearbetat alla tecken fram till `\` tecknet, som har kategorikod 0: ”escape-tecknet”—vi använder en ytterligare sekvens av bilder för att visa hur TeX bearbetar ett escape-tecken och identifierar namnet på ett kommando.

![TeX bearbetar tecken med kategorikod 0](/files/89895a9b372a78b35fa0b7c96038a1efe50ea9ab)

### Grafik 5b: Letar efter ett kommandonamn

I denna grafik tittar vi in i den rödpunkterade rutan (**Börja skanna efter ett kommando**) för att se vad TeX gör efter att det har sett ett escape-tecken.

![TeX letar efter ett kommandonamn](/files/e9cf9bfdfbda559a7769121025cd19ca007ef467)

**Anteckningar till grafik 5b**

* När escape-tecknet väl har identifierats har det gjort sitt jobb: det fungerade som en brytare och deltar inte i någon vidare bearbetning—mer specifikt, det blir **inte** omvandlat till en teckentoken.
* För enkelhets skull upprepar vi några detaljer som nämnts tidigare. Efter att ha sett ett escape-tecken kontrollerar TeX kategorikoden för tecknet som följer *omedelbart efter det*; detta beror på att TeX känner igen två typer av kommandon:
* * flerbokstavskommandon kallade *kontrollord*: tecknet som följer omedelbart efter escape-tecknet har kategorikod 11. Alla efterföljande tecken som har kategorikod 11 anses utgöra namnet på ett kommando (*kontrollord*). TeX slutar leta efter tecken som ingår i ett kommandonamn när det upptäcker något tecken som *gör inte* inte har kategorikod 11—såsom ett blankstegstecken med kategorikod 10.
  * enbokstavskommandon kallade *kontrollsymboler*: tecknet som följer omedelbart efter escape-tecknet *gör inte* har kategorikod 11.
* I vårt exempel är det första tecknet efter `\` är en `j` (kategorikod 11), vilket säger till TeX att leta efter ett kommando som potentiellt är en flerbokstavssekvens av tecken med kategorikod 11.
* TeX fortsätter att kontrollera om fler tecken har kategorikod 11. Så snart det upptäcker ett tecken med någon annan kategorikod, till exempel ett blanksteg med kategorikod 10, vet TeX att det har nått slutet på kommandonamnet. Bara för att betona poängen: här var det ett blankstegstecken (kategorikod 10) som ”avslutade” kommandot, men det kunde ha varit vilket tecken som helst som **inte** har kategorikod 11.

## Del 3

I del 3 fortsätter vi från grafik 5b för att avsluta denna del av berättelsen—hur TeX identifierar ett kommando—och går vidare till vad det gör härnäst. Vi tar också en djupare titt på några interna aspekter av TeX:s bearbetning—delar som kan hoppas över vid första läsningen, om du inte verkligen tycker om detaljerna.

[Del 1](/latex/sv/fler-amnen/19-how-tex-macros-actually-work-part-1.md) [Del 2](/latex/sv/fler-amnen/20-how-tex-macros-actually-work-part-2.md) [Del 3](/latex/sv/fler-amnen/21-how-tex-macros-actually-work-part-3.md) [Del 4](/latex/sv/fler-amnen/22-how-tex-macros-actually-work-part-4.md) [Del 5](/latex/sv/fler-amnen/23-how-tex-macros-actually-work-part-5.md) [Del 6](/latex/sv/fler-amnen/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/sv/fler-amnen/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.
