> 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/19-how-tex-macros-actually-work-part-1.md).

# Hur TeX-makron egentligen fungerar: Del 1

[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: Mål med denna serie

Den här artikelserien har ett ambitiöst mål: att förklara *hur* hur TeX-makron (såsom LaTeX-kommandon) faktiskt fungerar—på den mest grundläggande nivån, inne i själva TeX-motorns programvara. I stället för att förlita *enbart* oss på en uppsättning exempelmakron som är utformade för att demonstrera olika funktioner, specialfall och beteenden hos TeX, ska vi titta in i TeX självt för att se *hur* och *varför* hur dess makroprogrammeringsmetoder fungerar som de gör.

För att uppnå vårt mål måste vi börja med att diskutera ämnen som är ganska lågnivåmässiga och som till en början kan verka något avlägsna från uppgiften att sätta ditt dokument. Förhoppningsvis kommer du, efter en djupdykning, att ha en grund för att bygga upp en bättre förståelse som i slutändan sparar dig mycket tid och kanske också minskar frustrationen.

### TeX-programmeringsspråket: Känner du igen känslan?

Det vore inte orimligt att beskriva TeX-programmeringsspråket som något esoteriskt, eftersom det är det—åtminstone enligt måtten hos de flesta vanliga programmeringsspråk som används i dag. När du börjar din resa för att lära dig mer om TeX/LaTeX, särskilt om du vill skriva icke-triviala makron, stöter du snabbt på begrepp som kategorikoder, tokenisering av tokens och ”expansion” av kommandon eller makron. Denna anstormning av begrepp är sannolikt ganska främmande och kan kanske få dig att känna dig förvirrad och ibland möjligen något frustrerad, eftersom vägen till framgång inte alltid underlättas av några av TeX/LaTeX:s nästan ogenomträngliga felmeddelanden.

## Så var börjar vi? Med kategorikoder.

TeX-motorer tillhör en programvaruklass som kallas [kompilatorer](https://en.wikipedia.org/wiki/Compiler): program som tar in en fil skriven i ett *källspråk* och *kompilerar* (omvandlar) den till en utdatafil skriven i ett *mål* språk. Mer specifikt är TeX en *dokumentkompilator*. För TeX-motorer (kompilatorer) är indatafilen skriven i TeX:s sättningsspråk och målet är en utdatafil skriven i ett annat ”språk”, såsom [DVI](https://en.wikipedia.org/wiki/Device_independent_file_format) eller PDF—även om vi använder begreppet ”språk” ganska fritt.

Låt oss ta en närmare titt på det käll-, eller indata-, ”språk” som används för att skriva din TeX-fil. En `.tex` fil är i slutänden en lång sekvens av tecken (inklusive radbrytningstecken): bestående av text som ska sättas, varvat med `\`, `}`, `$`, `[` kommandon och alla möjliga slags tecken som kan förekomma i en till synes nästan oändlig mängd kombinationer. Den som inte använder TeX/LaTeX kanske tittar på en typisk `.tex` fil och kan ursäktas för att uppfatta den som en ganska förvirrande röra av tecken med liten, om ens någon, synlig filstruktur. LaTeX-makropaketet går visserligen en bit på vägen mot att ”påtvinga” en viss grundläggande struktur på en .tex-indatafil. Men mellan `\begin{document}` och `\end{document}` det är upp till dokumentförfattaren att avgöra vad som hamnar där. Om du tittar på `.tex` filer skrivna med Knuths ursprungliga makropaket Plain TeX, ser du att dokumentstrukturen nästan helt saknas.

Så, i allmänhet kan en TeX-indatafil verka ganska ostrukturerad, en till synes godtycklig blandning av innehåll som ska sättas och instruktioner (kommandon) som styr sättningen av det innehållet. Hur är det ens möjligt för TeX att förstå en typisk `.tex` indatafil: att filtrera den inkommande röran av tecken till användbara instruktioner för sättningsmotorn och innehåll som ska sättas?

### Filtrera röran: Säg hej till kategorikoder

Vilken mänsklig observatör som helst, som inte vet något om TeX, kanske tittar på en `.tex` fil och känner igen vissa tecken såsom `$` och vet att det är symbolen för en valuta, eller ser ett `&` och identifierar det som ett et-tecken. Den observatören drar en *betydelse* betydelse för varje tecken de ser—en betydelse baserad på den roll som tecknet spelar i mänsklig kommunikation. Dessutom kan de se tecken såsom `a`, `e`, `eller` och veta att de klassificeras som vokaler medan andra såsom `b`, `c` eller `d` klassificeras som konsonanter. Som människor har vi något slags inbyggd uppslagstabell (i vårt minne) genom vilken vi tilldelar en betydelse till varje tecken vi ser—en betydelse baserad på den roll som tecknet har i de språk vi kan kommunicera på.

För att bearbeta en `.tex` fil måste TeX-programvaran också titta på varje tecken i din indata och den måste även tilldela en *betydelse* till varje enskilt tecken som den ”ser”. Dock är TeX bara en programvarubaserad maskin som hanterar textbearbetning—lagrad som en sekvens av heltal (teckenkoder) i en indatafil. Som maskin måste TeX programmeras med relevanta data som talar om hur den ska avgöra betydelsen av ett tecken den ”tittar på” och därefter vad den behöver göra med det. Hur uppnår TeX detta?

Svaret är ett av de där TeX-specifika begreppen: *kategorikoder,* av vilka det finns 16, från 0 till 15. Såvitt TeX beträffar har varje tecken som det någonsin förväntar sig att se i en `.tex` fil en så kallad *kategorikod* fördefinierad *för närvarande* tilldelad den för varje tecken som TeX kan tänkas se i en .tex-indatafil. Man bör tänka på TeX:s kategorikoder som att de tilldelar en *betydelse* till varje enskilt tecken i den ström av indata som TeX måste granska (skanna).

För att sätta ditt dokument måste en TeX-motor läsa (skanna) varje enskilt tecken, men TeX:s omedelbara intresse gäller inte de faktiska tecknen (teckenkoderna): ett teckens *kategorikod* är av större betydelse vid inläsningen av indata. Ett teckens *aktuella* kategorikod avgör *den* aktuella betydelsen *av det tecknet*vid den tidpunkt då TeX läser in det*kommandon* att kategorikoden avgör hur TeX kommer att behandla/bearbeta varje tecken—vi ska förklara varför vi säger ”aktuell kategorikod” och ”aktuell betydelse”. Det är genom kategorikoder som TeX kan filtrera den inkommande teckenröran för att skilja mellan tecken (innehåll) som ska sättas och tecken som utgör instruktioner som ska bearbetas—

som TeX behöver exekvera.

| **Kategorikod** | **Beskrivning**                                                 | **Standard LATEX/TEX**                                      |
| --------------- | --------------------------------------------------------------- | ----------------------------------------------------------- |
| 0               | Escape-tecken—säger åt TEX att börja leta efter ett kommando    | `\`                                                         |
| 1               | Starta en grupp                                                 | {                                                           |
| 2               | Avsluta en grupp                                                | }                                                           |
| 3               | Matematikskifte—växla in/ur matematikläge                       | $                                                           |
| 4               | Justeringstabulator                                             | &                                                           |
| 5               | Radslut                                                         | ASCII-kod 13 (`\r`)                                         |
| 6               | Makroparameter                                                  | #                                                           |
| 7               | Upphöjt tecken—för sättning av matematik: `$y=x^2$` $$y=x^2$$   | ˆ                                                           |
| 8               | Nedsänkt tecken—för sättning av matematik: `$y=x_2$` $$y=x\_2$$ | \_                                                          |
| 9               | Ignorerat tecken                                                | ASCII 0 `<null>`                                            |
| 10              | Mellanrum                                                       | ASCII-koderna 32 (mellanslag) och 9 (tabbtecken)            |
| 11              | Bokstav                                                         | A...Z, a...z, (och tusentals Unicode-tecken)                |
| 12              | Övrigt                                                          | 0...9 plus ,.;?" och många andra                            |
| 13              | Aktivt tecken                                                   | Särskild kategorikod för att skapa enkelteckensmakron som ˜ |
| 14              | Kommentartecken—ignorera allt som följer till radens slut       | %                                                           |
| 15              | Ogiltigt tecken, får inte förekomma i .tex-indatafilen          | ASCII-kod 127 (`DEL`)                                       |

Följande tabell listar dessa 16 kategorikoder: vad de var och en betyder tillsammans med exempel på tecken som typiskt tilldelas varje kategori.

* tecken som utgör den text som ska sättas;
* avgränsning av innehåll som ska sättas som matematik;
* teckensekvenser som är namn på kommandon som ska bearbetas eller verkställas;
* … och många andra sättningsoperationer.

Inledningsvis kanske du tror att varje teckens kategorikod (betydelse) är någon sorts fast tilldelning: oföränderlig och permanent inbyggd i TeX-programvarans innersta grundvalar, men så är det inte. Som nämnts upprätthåller TeX en intern uppslagstabell för att lagra uppgifter om vilken kategorikod som är *för närvarande* tilldelad varje tecken—vi säger mycket medvetet *för närvarande tilldelad* eftersom kategorikoden för vilket tecken som helst (som ännu inte lästs in) kan ändras med hjälp av ett primitivt (inbyggt) kommando som kallas `\\catcode`\catcode.

Detta ger avsevärd flexibilitet eftersom du, om du vill, helt kan ändra hur TeX senare kommer att behandla eller tolka betydelsen av vilket tecken som helst som läses in från indata, vilket öppnar enorma möjligheter för avancerade sättningstillämpningar.

När din TeX-motor startar upp (”[bootstrappas](https://en.wikipedia.org/wiki/Bootstrapping)”) kommer den att använda en uppsättning standardtilldelningar av tecken till kategorikoder men, via `\\catcode` kommandot, kan dessa standardvärden ändras av den centrala LaTeX-koden (makron) och/eller av LaTeX-paket som du har laddat—eller av din egen TeX-kod eller dina egna makron. Över tid och genom tradition/användning har dock vissa tecken som tilldelats särskilda kategorikoder blivit accepterade som ”standarder”, och det är definitivt önskvärt att följa dessa standarder om du vill att dina dokument ska vara portabla och lätta att dela med kollegor eller andra användare. Till exempel tilldelas `\` tecknet kategorikod 0 för att ange starten av ett TeX/LaTeX-kommando—se [tabellen ovan](#tbl-0).

### Läsa (skanna) indata

När TeX läser (skannar) nästa tecken från din indatafil är det allra första den gör att titta på dess kategorikod, så låt oss ta en närmare titt på vad som händer när TeX läser en typisk indatarad.

Anta att vi har en .tex-fil som innehåller texten `Hej världen \\jobname` någonstans i ett stycke. Om vi tittar in i `.tex` filen med hjälp av en [hexeditor](https://en.wikipedia.org/wiki/Hex_editor), ser vi att teckensekvensen `Hej världen \\jobname` i vår `.tex` fil bara är en serie heltal, eller *teckenkoder*, vilket visas i skärmbilden nedan som den hexadecimala sekvensen:

`48, 65, 6C, 6C, 6F, 20, 57, 6F, 72, 6C, 64, 20, 5C, 6A, 6F, 62, 6E, 61, 6D, 65, 20`

![Hexadecimala teckenkoder i en TeX-fil](/files/4a5cccde327dd571c84e68ed38b123898639db89)

Om vi konverterar från hexadecimal (bas 16) till decimal (bas 10) är sekvensen av teckenkoder:

![Decimala teckenkoder i en TeX-fil](/files/646a58d7cc32b949972889ab21ade6d2eb0ac3d8)

Vi vet också att varje tecken för TeX har en motsvarande kategorikod; så, baserat på [tabellen ovan](#tbl-0) vet vi att följande standardtilldelningar av kategorikoder (troligen) också används:

![TeX:s kategorikoder](/files/7e09852bcac69d187ef71a862e3e7369a7fe9a11)

Så för TeX representeras varje tecken i indatafilen av *två* numeriska värden—dess teckenkod och dess kategorikod:

![Teckenkoder och motsvarande TeX-kategorikoder](/files/d3ab3a76d990b65c1fa3c16228c624d4c9a39b14)

Vid denna punkt betraktar vi bara det allra första steget i TeX:s bearbetning av din fil: att skanna de enskilda tecknen. Så vad gör egentligen TeX med dessa par av teckenkoder och kategorikoder? När TeX har skannat ett enskilt tecken och slagit upp dess motsvarande kategorikod, hur använder TeX exakt denna information för att ”filtrera” de inkommande tecknen?

## Del 2

I del 2 tar vi en närmare titt på hur TeX läser din indata: vi låtsas vara TeX:s ”ögon” när det tittar på din indata, tecken för tecken.

[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/19-how-tex-macros-actually-work-part-1.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.
