> 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/05-an-introduction-to-endlinechar-how-tex-reads-lines-from-text-files.md).

# En introduksjon til \endlinechar: Hvordan TeX leser linjer fra tekstfiler

Som mennesker foretrekker vi å vise og redigere tekstfiler linje for linje. Når vi mener at en tekstlinje er lang nok, trykker vi på «retur» (i tekstredigeringsprogrammet) for å signalisere slutten på den linjen. I kulissene vil tekstredigeringsprogrammet tolke det som en instruks om å legge til et [nylinjetegn](https://en.wikipedia.org/wiki/Newline) på stedet der du velger å bryte en linje.

Men skulle bare det vært så enkelt: problemet er at ulike operativsystemer har ulike oppfatninger av hva som utgjør et nylinjetegn. For å gjøre saken verre vil Windows behandle nylinjetegn forskjellig avhengig av om en fil åpnes i såkalt [*binærmodus* eller *tekstmodus*](https://docs.microsoft.com/en-us/cpp/c-runtime-library/text-and-binary-mode-file-i-o?view=vs-2017). Resultatet er at, avhengig av vertsoperativsystemet, kan linjer i en tekstfil avsluttes med ulike kombinasjoner av tegn kalt *vognretur* (ASCII-/Unicode-tegn 13) og *linjeskift* (ASCII-/Unicode-tegn 10): betegnet ved `\r` og `\n` henholdsvis.

Det er tydelig at TeX, for å være systemuavhengig, trenger en måte å håndtere de variasjonene som innføres gjennom de ulike tegnene som brukes til å avslutte en linje i tekstfiler den må lese og behandle.

### TeXs inndatabuffer

Du blir kanskje overrasket, eller kanskje ikke, over å høre at TeX-motorer (inkludert LuaTeX og XeTeX) leser inn datafiler én linje om gangen: de leser ikke hele tekstfilen inn i minnet. Selv om de fleste tekstfiler som behandles av TeX-motorer er mikroskopiske sammenlignet med tilgjengelig minne på moderne enheter, leses og lagres hver linje i filen individuelt i en liten intern buffer. Men TeXs prosess med å lese og lagre en linje har selvfølgelig noen ekstra vrier.

## «Jeg gjør det på min måte»—TeXs \endlinechar-kommando

Når TeX leser en ny linje tekst fra en inndatafil, utfører det to «vedlikeholdsoppgaver»:

* det fjerner eventuelle avsluttende nylinjetegn (\r eller \n) som finnes på slutten av linjen – dvs. det striper ut alle linjeslutt som ble lagt til da tekstfilen opprinnelig ble lagret på disken;
* det fjerner også alle etterfølgende mellomromstegn som finnes på slutten av linjen.

Disse to prosessene skjer før TeX faktisk begynner å skanne tegnene som finnes i selve linjen: tenk på dem som en form for «vedlikehold» som forberedelse til neste behandlingssteg (skanning). Så i denne innledende fasen av linjelesingsprosessen har TeX fjernet alle plattformavhengige linjeslutt (og eventuelle etterfølgende blanktegn): så hvordan skal TeX vite (oppdage) hvor den linjen slutter? TeX har enda et «triks» i ermet: `\endlinechar` kommandoen.

For å unngå problemet med plattformavhengige nylinjetegn innfører TeX konseptet med `\endlinechar`, en brukerdefinerbar parameter som TeX bruker til å sette inn sitt eget linjeslutttegn helt på slutten av en tekstlinje den nettopp har lest fra en fil. Merk igjen at dette skjer før TeX faktisk begynner å skanne tegnene – det er det siste steget i TeXs «vedlikehold» før det er klart til å begynne å lese (skanne) de faktiske tegnene som finnes i linjen.

TeX vil bruke verdien lagret i `\endlinechar` for å legge til sin egen linjesluttmarkør hvis, og bare hvis, `\endlinechar` er definert på riktig måte—i Knuths TeX betyr det at den må ha en verdi som er >-1 og < 256. Vanligvis, `\endlinechar` er satt til verdien 13: vognreturtegnet—vanligvis angitt med `\r` i programmeringslitteraturen.

Men hvis du skriver `\endlinechar=-1` et sted i inndataene dine, så vil *neste gang* TeX leser en linje tekst fra en fil, vil det *inneholder* ikke legge til noen ekstra avslutter på slutten av en linje. Derfor vil inndataene dine bli behandlet som én lang sammenhengende tekststreng helt til du tilbakestiller `\endlinechar` til en passende verdi – vanligvis 13 (`\r`):

```latex
\endlinechar=13
```

En av TeXs 16 kategorikoder (verdi 5) er reservert for å identifisere «slutten av linjen»-tegnet, som vanligvis er tegnet som `\endlinechar` setter inn – og som settes inn hvis (og bare hvis) verdien av `\endlinechar` er satt til en passende verdi.

## Sammendrag av behandling av linjeslutt

Selv om disse detaljene er ganske lavnivå, vil de være av interesse for alle som ønsker å utforske skriving av makroer som håndterer lesing av tekstlinjer.

1. Når TeX leser en linje fra filen din, vil det først fjerne alle linjeslutttegn (`\r` og `\n`) som tekstredigeringsprogrammet la til da filen ble lagret. I tillegg:

* TeX fjerner også eventuelle etterfølgende mellomromstegn fra slutten av linjen;
* TeX *ikke* fjerne etterfølgende tabulatortegn (ASCII-tegnkode 9).

**Sidebemerkning**: En av LuaTeXs kildekodefiler, den som har kode for å utføre denne fjerningen av mellomrom, inneholder følgende merknad:

> (Sitert i filen `luatex.c`) «David Fuchs nevner at denne \[mellomroms]fjerningen ble gjort for å sikre portabiliteten til TeX-dokumenter gitt utfyllingen med mellomrom på «linjer» med fast postlengde på noen systemer den gangen, f.eks. IBM VM/CMS og OS/360.»

3. Etter steg (1) legger TeX til (setter inn) et ekstra tegn hvis verdi er lagret i \endlinechar (forutsatt at det er definert på passende måte: >-1 og < 256)
4. \endlinechar settes vanligvis til verdien 13 (`\r`), som betyr at tegnet som legges til i steg (2) vanligvis er tegn 13 (`\r`)—men du kan selvfølgelig sette \endlinechar til en annen verdi for å oppnå spesielle effekter via makroprogrammering.
5. Når rutiner for inndataskanning oppdager tegnet `\r` (tegnkode 13) på slutten av den interne bufferen sin, vil TeX som vanlig sjekke kategorikoden for å avgjøre hva det skal gjøre med det.
6. Tegn 13 *vanligvis* har kategorikodeverdien 5 («slutten av linjen») med mindre kategorikoden selvfølgelig er blitt endret—noen makroer gjør linjeslutttegnet aktivt for å utføre avansert behandling.
7. Avhengig av TeXs interne tilstand (i praksis det det gjør) kan TeX endre at linjeslutttegnet (vanligvis `\r`, kategorikode 5) til et mellomromstegn—det er slik linjeslutttegn blir til mellomrom.
8. Merk også at TeX bruker tegn med kategorikode 5 til å oppdage når det har lest en tom linje og trenger å generere et `\par` token.

Følgende grafikk gir en visuell oppsummering av steg (1) og (2): fjerning av nylinjetegn og etterfølgende mellomromstegn og innsetting av `\endlinechar` klart for oppgaven med å skanne inndataene.

![Hvordan TeX bruker \endlinechar](/files/d7451be2a381ea2ff01c2d0a91ce8e885819bd2c)


---

# 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/05-an-introduction-to-endlinechar-how-tex-reads-lines-from-text-files.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.
