> 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/fordjupade-artiklar/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md).

# En ny artikelserie: TeX-tokens och närliggande begrepp—men varför (och hur)?

Denna inledande artikel syftar till att förklara varför den här serien skrevs, vad jag hoppas uppnå och att ge bakgrundsinformation om de tekniker som används för att utforska TeX-token genom att observera det inre arbetet i en TeX-motor. Denna artikelsida är också avsedd att innehålla länkarna till alla artiklar i serien och kommer att uppdateras för att tillhandahålla dessa länkar i takt med att varje ny artikel publiceras.

### Länkar till artiklarna

Varje artikel kommer att innehålla en uppsättning länkar till andra artiklar i den här serien.

* [Vad är en ”TeX-token”?](/latex/sv/fordjupade-artiklar/53-what-is-a-tex-token.md)
* [Vad är en ”TeX-tokenlista”?](/latex/sv/fordjupade-artiklar/54-what-is-a-tex-token-list.md)

## Bakgrund till denna artikelserie

Motivationen att skriva denna serie artiklar uppstod när jag läste material om TeX som förklarade många av TeX:s aktiviteter genom begreppet ”token” tillsammans med TeX:s ”tokeniseringsprocess”, ”tokenlistor” och besläktade begrepp som ”makroexpansion” och ”expanderbara kommandon”. Varje gång jag stötte på TeX-relaterade förklaringar formulerade i termer av ”TeX-token” fortsatte samma fråga att dyka upp i mitt huvud: Vad, exakt, *är* en TeX-token? Det behövde jag ta reda på.

Omfattningen och innehållet i den första artikeln, [Vad är en ”TeX-token”?](/latex/sv/fordjupade-artiklar/53-what-is-a-tex-token.md), är till sin natur ganska ”nära metallen”, som programmerare skulle säga, och det råder ingen tvekan om att ”TeX-token” skulle kunna klassificeras som ett ganska esoteriskt ämne att skriva om: så varför bry sig? I slutändan gör man en bedömning — eller kanske ett hopp i tro — att andra människor också kan ha grunnat på samma ämne och att det finns utrymme för en eller två artiklar för att fylla i vissa luckor. Mitt mål är att ge några användbara bakgrundsförklaringar som kan komplettera annat material du kanske läser och, förhoppningsvis, hjälpa till att bättre förstå några nyckelbegrepp som uppstår när du lär dig om TeX och utforskar makron och programmering.

Uppenbarligen kan vi inom ramen för bloggartiklar bara skrapa på ytan — det är helt enkelt inte praktiskt att försöka förklara alla viktiga ämnen eller att dyka ned i de mest dunkla vattnen. Nödvändigtvis kommer jag att hoppa över betydande detaljrikedom och gå den fina linjen mellan överförenkling och att driva analogier till bristningsgränsen.

”Skriv artiklar som du själv skulle vilja ha läst” är en användbar vägledning, och en som jag har försökt följa noggrant när jag skrev denna serie.

## När frågan väl hade ställts, vad nu?

Den omedelbara utmaningen var tydlig: hur tar man reda på TeX-token eftersom sådana detaljer (om token, tokenisering osv.) ligger djupt begravda i programkoden i TeX-motorer — man förväntas egentligen inte behöva bekymra sig om det om man förstås inte faktiskt är intresserad av just de detaljerna.

Ett sätt att utforska och besvara dessa frågor är att försöka läsa igenom TeX:s ursprungliga källkod i [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)—genom att köra [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) för att extrahera TeX-dokumentationen — eller genom att köpa ett exemplar av boken [Computers & Typesetting, Volume B: TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). Jag köpte ett exemplar av den tryckta boken! Det är verkligen mycket hjälpsamt att ha TeX:s källkod utgiven i bokform och det finns naturligtvis många användbara förklaringar genom hela boken. Men Knuths TeX är skriven i Pascal och Pascal-källkoden dokumenteras naturligtvis med Knuths metod för literate programming — där koden presenteras i små, lättsmälta bitar. Det är lätt att uppskatta hur Knuths sätt att dokumentera verkligen hjälper för en mjukvara så komplex som TeX, men att läsa boken innebär också en hel del korsreferenser och sidbläddrande.

Även om boken var hjälpsam räckte den inte riktigt ensam för att jag skulle få en bättre förståelse för vad som händer när TeX skapar ”token” — det ämne jag var särskilt intresserad av. Det finns egentligen bara ett sätt att verkligen ta reda på det: bygg TeX-programmet, kör det på en liten TeX-fil och se bokstavligen koden exekveras medan TeX skannar och läser inmatningen. Detaljerna kring att bygga TeX från källkod är något esoteriska — att konvertera Pascal till C — men det finns en kort beskrivning i nästa avsnitt tillsammans med en länk till ett personligt blogginlägg som går in på mer detaljer.

Till skillnad från XeTeX och LuaTeX — som kan bearbeta text i UTF-8-format och stödjer Unicode-textkodning — är Knuths TeX en 8-bitarsmotor, vilket innebär att den antar att inmatningstecken ligger i intervallet 0 till 255. Även om detta är en viktig skillnad påverkar det inte *i någon större utsträckning* vår diskussion om TeX-token eftersom vi tar upp ämnen och principer som är gemensamma för alla TeX-motorer: de är själva hjärtat i mjukvaran.

## Hur kan man studera TeX-token?

Att reda ut vägen från inmatningstext till TeX-token har för mig varit en ganska resa — jag ska erkänna att varierande grader av förvirring var halvt permanenta följeslagare längs vägen: TeX är en så komplex mjukvara.

Under några år (sedan omkring 2009) har jag rutinmässigt kompilerat den senaste versionen av LuaTeX från dess källkod — en process som är ganska enkel tack vare det helt enastående sätt på vilket LuaTeX:s källkod distribueras. Baserat på den erfarenheten blev jag intresserad av att bättre förstå hur man bygger Knuths ursprungliga TeX från dess källkod — ett *mycket* annorlunda förslag eftersom TeX är skrivet med Knuths metod för literate programming. Det där personliga bygget av TeX, på Windows men med öppen källkod-kompilatorer och verktyg, genomfördes utanför TeX Live-distributionen och är ett fristående projekt. Det krävde också att man byggde den verktygskedja som behövs för att konvertera `tex.web` till ett C-program som kunde kompileras och sedan köras i en debugger för att se vad TeX faktiskt gör när det bearbetar inmatningens tecken.

Knuths ursprungliga TeX användes i stället för pdfTeX, XeTeX eller LuaTeX eftersom jag behövde en version av TeX som låg närmast den tryckta källkoden i boken TeX: The Program. Den boken publicerades första gången 1986 och även om TeX har genomgått vissa uppdateringar sedan dess, är den senaste versionen av TeX (3.14159265, släppt i januari 2014) verkligen tillräckligt nära källkoden som finns i boken.

Som en återspegling av Knuths metod för literate programming distribueras TeX:s källkod i ett textformat som kallas WEB: en blandning av TeX-dokumentation och Pascal-källkod. Grundidén är att du använder två verktyg som kallas TANGLE och WEAVE, vilka bearbetar WEB-filer för att extrahera antingen TeX-dokumentationen eller Pascal-källkoden:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) extraherar Pascal-källkoden från en WEB-fil
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) extraherar TeX-dokumentationen från WEB-filen

Men innan du extraherar Pascal-källkoden måste du förbehandla Knuths `tex.web` fil för att tillämpa ett antal ändringar som möjliggör konvertering av TeX:s Pascal-kod till C-kod med hjälp av en process som kallas Web2C. Detta förbehandlingssteg kallas *att tillämpa förändringsfiler*.

Knuths ursprungliga kodfil (tex.web) får inte ändras direkt på något sätt; i stället tillämpar du ändringar med så kallade förändringsfiler (ändelsen `.ch`) som innehåller de ändringar du vill tillämpa på huvud `.web` filen — till exempel `tex.web`. Förändringsfiler slås samman med Knuths ursprungliga källkod — med hjälp av ett extra hjälpprogram som kallas TIE — för att skapa en fil som till exempel `mytex.web` vilken du bearbetar med TANGLE för att extrahera Pascal-koden till `mytex.pas`. När du har en lämplig Pascal-källfil kan du tillämpa de sista stegen i Web2C-processen för att konvertera den till en C-källkodfil som du kan kompilera till ett körbart TeX-program. Om du vill läsa om den ganska snåriga Web2C-konverteringsprocessen finns det ytterligare detaljer på denna författares [personliga blogg](http://www.readytext.co.uk/?p=2529).

Slutresultatet är ett TeX-program som kan köras med den kostnadsfria och utmärkta [Eclipse IDE for C/C++](http://www.eclipse.org/home/index.php) för att stega igenom TeX:s källkod (i C) och se vad som händer när den skannar igenom din inmatning. Det är definitivt inte det mest underhållande tidsfördrivet eftersom C-koden är maskin-genererad och på vissa ställen extremt svår att följa (TeX:s källkod använder GOTO-satser och globala variabler i mycket generös omfattning). Boken TeX: The Program är fortfarande ovärderlig för att hjälpa till att navigera i C-källkoden, även om boken innehåller TeX:s källkod i vackert satt Pascal-kod.

Som avslutning på diskussionen, här är en exempelbild som visar TeX som körs via Eclipse IDE med exekveringen pausad vid funktionen `getnext()`—som är kärnan i TeX:s token-genereringsprocesser.

![Skärmbild som visar TeX som körs via Eclipse IDE](/files/1eb8059cb5c48cec121a1f315616498979b43f4b)

Stegvis genomgång av TeX:s C-källkod med hjälp av öppen källkod-IDE:n Eclipse för C/C++.

## Slutsatser och ett tack

Att skriva den första artikeln och sätta ihop idéer för framtida blogginlägg i serien har verkligen tagit ganska mycket tid. Jag är mycket tacksam mot John Hammersley och Mary Anne Baynes på Overleaf för deras stöd för denna serieidé och för att de tillät mig att ta den tid som behövdes för ytterligare bakgrundsforskning. Min förhoppning är att denna serie artiklar på ett framgångsrikt sätt identifierar och tar upp ämnen av gemensam betydelse och visar sig vara till värde för dem som läser dem.


---

# 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/fordjupade-artiklar/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.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.
