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

# En ny artikkelserie: TeX-tokens og beslektede begreper—men hvorfor (og hvordan)?

Denne innledende artikkelen har som mål å forklare hvorfor denne serien ble skrevet, hva jeg håper å oppnå, og å gi bakgrunnsinformasjon om teknikkene som brukes for å utforske TeX-tokener gjennom observasjon av de indre arbeidsprosessene i en TeX-motor. Denne artikkelsiden er også laget for å inneholde lenkene til alle artiklene i serien og vil bli oppdatert for å gi disse lenkene etter hvert som hver ny artikkel publiseres.

### Lenker til artiklene

Hver artikkel vil inneholde en rekke lenker til andre artikler i denne serien.

* [Hva er et «TeX-token»?](/latex/no/dybdeartikler/53-what-is-a-tex-token.md)
* [Hva er en «TeX-tokenliste»?](/latex/no/dybdeartikler/54-what-is-a-tex-token-list.md)

## Bakgrunnen for denne artikkelserien

Motivasjonen til å skrive denne serien med artikler oppstod gjennom lesning av materiale om TeX som forklarte mange av TeXs aktiviteter gjennom konseptet «tokener» sammen med TeXs «tokeniseringsprosess», «tokenlister» og beslektede begreper som «makroekspansjon» og «utvidbare kommandoer». Hver gang jeg støtte på TeX-relaterte forklaringer formulert i termer av «TeX-tokener», dukket det samme spørsmålet stadig opp i hodet mitt: Hva, helt presist, *er* et TeX-token? Jeg måtte finne det ut.

Omfanget og innholdet i den første artikkelen, [Hva er et «TeX-token»?](/latex/no/dybdeartikler/53-what-is-a-tex-token.md)er, av sin helt natur, ganske «nær maskinvaren», som programmerere kanskje ville si, og det er ingen tvil om at «TeX-tokener» kunne klassifiseres som et temmelig esoterisk emne å skrive om: så hvorfor bry seg? Til syvende og sist tar man et standpunkt — eller kanskje et sprang i tro — om at andre mennesker også kan ha fundert på det samme temaet, og at det finnes rom for en artikkel eller to som kan fylle noen hull. Målet mitt er å gi noen nyttige bakgrunnsforklaringer som kan utfylle annet materiale du kanskje leser, og forhåpentligvis bidra til bedre forståelse av noen nøkkelbegreper som oppstår når du lærer om TeX og utforsker makroer og programmering.

Tydeligvis kan vi innenfor rammene av bloggartikler bare skrape overflaten — det er rett og slett ikke praktisk mulig å forsøke en forklaring av alle vesentlige emner eller å dykke ned i de mørkeste vannene. Av nødvendighet vil jeg hoppe over betydelige detaljer og gå den fine linjen mellom å overforenkle og å trekke analogier så langt at de ryker.

«Skriv artikler du gjerne selv ville ha lest» er en nyttig rettesnor, og en jeg har forsøkt hardt å følge mens jeg skrev denne serien.

## Når spørsmålet først er stilt, hva nå?

Den umiddelbare utfordringen var klar: hvordan finner man ut om TeX-tokener, siden slike detaljer (om tokener, tokenisering osv.) er begravd dypt i programkoden til TeX-motorer — du er egentlig ikke ment å bekymre deg for det med mindre du selvfølgelig faktisk er interessert i disse detaljene.

Én måte å utforske svarene på disse spørsmålene er å prøve å lese gjennom TeXs opprinnelige kildekode i [`tex.web`](https://www.ctan.org/tex-archive/systems/knuth/dist/tex)—ved å kjøre [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) for å hente ut TeX-dokumentasjonen — eller ved å kjøpe et eksemplar av boken [Computers & Typesetting, Volume B: TeX: The Program](https://www.amazon.co.uk/Computers-Typesetting-TEX-Program-v/dp/0201134373). Jeg kjøpte et eksemplar av den trykte boken! Det er helt klart svært nyttig å ha TeXs kildekode publisert i bokform, og det finnes naturligvis mange nyttige forklaringer gjennom hele verket. Knuths TeX er imidlertid skrevet i Pascal, og Pascal-kildekoden er naturligvis dokumentert ved hjelp av Knuths metode for litterær programmering — der koden presenteres i små, lettfordøyelige biter. Det er lett å sette pris på hvordan Knuths dokumentasjonsmetode virkelig hjelper for et stykke programvare så komplekst som TeX, men å lese boken innebærer likevel en god del kryssreferanser og hopping mellom sider.

Selv om den er nyttig, var ikke boken alene helt tilstrekkelig for meg til å få en bedre forståelse av hva som skjer når TeX lager «tokener» — temaet jeg var spesielt interessert i. Det finnes bare én måte å virkelig finne det ut på: bygg TeX-programmet, kjør det på en liten TeX-fil og se bokstavelig talt koden kjøre mens TeX skanner og leser inn inputen. Detaljene rundt å bygge TeX fra kildekode er noe esoteriske — å konvertere Pascal til C — men det finnes en kort beskrivelse i neste avsnitt sammen med en lenke til et personlig blogginnlegg som går mer i detalj.

I motsetning til XeTeX og LuaTeX — som kan behandle tekst i UTF-8-format og støtte Unicode-tekstkoding — er Knuths TeX en 8-bits motor, noe som betyr at den antar at inndatategn er i området 0 til 255. Selv om dette er en viktig forskjell, påvirker det ikke *vesentlig* diskusjonen vår om TeX-tokener fordi vi dekker emner og prinsipper som er felles for alle TeX-motorer: de er selve kjernen i programvaren.

## Hvordan kan du studere TeX-tokener?

Å nøste opp veien fra inndatatekst til TeX-tokener har for meg vært en ganske lang reise — jeg må innrømme at varierende grader av forvirring var halvpermanente følgesvenner underveis: TeX er et så komplekst stykke programvare.

I flere år (siden rundt 2009) har jeg rutinemessig kompilert den nyeste versjonen av LuaTeX fra kildekoden — en prosess som er ganske rett frem takket være den helt ypperlige måten LuaTeXs kildekode distribueres på. Basert på den erfaringen ble jeg interessert i å forstå bedre hvordan man bygger Knuths opprinnelige TeX fra kildekoden — en *svært* annerledes sak, fordi TeX er skrevet ved hjelp av Knuths metode for litterær programmering. Den personlige byggingen av TeX, på Windows men ved bruk av kompilatorer og verktøysett med åpen kildekode, ble utført utenfor TeX Live-distribusjonen og er et selvstendig prosjekt. Det krevde også å bygge verktøykjeden som trengs for å konvertere `tex.web` til et C-program som kunne kompileres og deretter kjøres i en debugger for å se hva TeX faktisk gjør mens det behandler tegnene i inputen.

Knuths opprinnelige TeX ble brukt i stedet for pdfTeX, XeTeX eller LuaTeX fordi jeg trengte en versjon av TeX som lå nærmest den trykte kildekoden i boken TeX: The Program. Den boken ble først utgitt i 1986, og selv om TeX har gjennomgått noen oppdateringer siden den gang, er den nyeste versjonen av TeX (3.14159265, utgitt i januar 2014) definitivt tilstrekkelig nær kildekoden som finnes i boken.

I tråd med Knuths metode for litterær programmering distribueres TeXs kildekode i et tekstformat kalt WEB: en blanding av TeX-dokumentasjon og Pascal-kildekode. Den grunnleggende ideen er at du bruker to verktøy kalt TANGLE og WEAVE som behandler WEB-filer for å hente ut enten TeX-dokumentasjonen eller Pascal-kildekoden:

* [TANGLE](http://tug.org/texinfohtml/web2c.html#tangle-invocation) henter ut Pascal-kildekoden fra en WEB-fil
* [WEAVE](http://tug.org/texinfohtml/web2c.html#weave-invocation) henter ut TeX-dokumentasjonen fra WEB-filen

Men før du henter ut Pascal-kildekoden må du forbehandle Knuths `tex.web` fil for å gjøre en rekke endringer som muliggjør konvertering av TeXs Pascal-kode til C-kode ved hjelp av en prosess kalt Web2C. Dette forbehandlingstrinnet omtales som *å bruke endringsfiler*.

Knuths opprinnelige kodefil (tex.web) må ikke endres direkte på noen måte; i stedet bruker du endringer ved hjelp av såkalte endringsfiler (filendelse `.ch`) som inneholder endringene du ønsker å bruke på hoved- `.web` filen — som for eksempel `tex.web`. Endringsfiler flettes sammen med Knuths opprinnelige kildekode — ved hjelp av et ekstra hjelpeprogram kalt TIE — for å lage en fil kalt, la oss si, `mytex.web` som du behandler med TANGLE for å hente ut Pascal-koden til `mytex.pas`. Når du har en passende Pascal-kildefil, kan du utføre de siste trinnene i Web2C-prosessen for å konvertere den til en C-kildefil som du kan kompilere til et kjørbart TeX-program. Hvis du vil lese om den ganske omstendelige Web2C-konverteringsprosessen, finnes det flere detaljer på denne forfatterens [personlige bloggside](http://www.readytext.co.uk/?p=2529).

Sluttresultatet er et TeX-program som kan kjøres ved hjelp av den gratis og utmerkede [Eclipse IDE for C/C++](http://www.eclipse.org/home/index.php) for å gå trinnvis gjennom TeXs kildekode (i C) og se hva som skjer mens den skanner gjennom inputen din. Det er definitivt ikke den mest underholdende av sysler, fordi C-koden er maskingenerert og enkelte steder ekstremt vanskelig å følge (TeXs kildekode bruker GOTO-er og globale variabler svært raust). Boken TeX: The Program er fortsatt uvurderlig når man skal navigere i C-koden, selv om boken inneholder TeXs kildekode satt vakkert i Pascal.

For bare å runde av diskusjonen, her er et eksempelbilde som viser TeX som kjøres via Eclipse IDE mens kjøringen er satt på pause ved funksjonen `getnext()`—som er kjernen i TeXs prosesser for generering av tokener.

![Skjermbilde som viser TeX som kjøres via Eclipse IDE](/files/12a9bc588428cd438629cd7745d10c0ac75b746e)

Trinnvis gjennomgang av TeXs C-kildekode ved hjelp av den åpne Eclipse IDE for C/C++.

## Konklusjoner og en takk

Å skrive den første artikkelen og sette sammen ideer til fremtidige blogginnlegg i serien har definitivt vært ganske tidkrevende. Jeg er svært takknemlig overfor John Hammersley og Mary Anne Baynes hos Overleaf for deres støtte til denne serieideen og for at de lot meg ta den tiden som trengtes til ytterligere bakgrunnsresearch. Jeg håper at denne artikkelserien lykkes med å identifisere og ta opp emner som mange er opptatt av, og at den viser seg å være verdifull for dem som leser den.


---

# 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/dybdeartikler/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.
