> 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/da/dybtgaende-artikler/23-how-does-latex-typeset-headers-and-footers.md).

# Hvordan sætter LaTeX sidehoveder og sidefødder?

## Hvordan sætter LaTeX sidehoveder og sidefødder?

### Introduktion

Hvis du leder efter en vejledning i, hvordan du ændrer sidehoveder og sidefødder, så [besøg vores hjælpeside](/latex/da/formatering/02-headers-and-footers.md) fordi denne artikel fokuserer på at forklare lavniveau-mekanismer, som TeX-motorer og LaTeX bruger til at fremstille sidehoveder og sidefødder.

* **Bemærk (opdatering)**: Denne artikel gennemgår den centrale LaTeX-markmekanisme, der var i brug før juni 2022, hvor en ny og mere alsidig implementering af LaTeX’s markhåndtering blev introduceret. Se [Oversigt over LaTeX’s nye markmekanisme](https://www.latex-project.org/help/documentation/ltmarks-doc.pdf) for flere detaljer. Af hensyn til bagudkompatibilitet understøtter LaTeX fortsat sin ældre markmekanisme. Artiklens indhold om TeX-motorers adfærd påvirkes ikke af disse ændringer i LaTeX.
* **Bemærk**: udtrykkene “LaTeX”, “TeX” og “TeX-motor” bruges gennem hele denne gennemgang, så det er nyttigt at forstå deres betydning—se Overleaf-artiklen [Hvad er der i et navn: En guide til de mange varianter af TeX](/latex/da/dybtgaende-artikler/55-what-s-in-a-name-a-guide-to-the-many-flavours-of-tex.md) for yderligere information.

For at give nyttig baggrund/kontekst starter vi med et overblik over nogle relevante lavniveau-områder inden for TeX-baseret sats—herunder midlertidig (intern) lagring af indhold, sideskift og opbygning. Gennemgangen er strømlinet/forenklet ved at betragte en sat side, som indeholder en “brødtekst” samt nogle sidehoveder og sidefødder. Sideelementer som figurer (floats) og fodnoter behandles ikke, fordi de involverer en kompleks TeX-mekanisme kaldet *insertioner*, hvilket ligger langt uden for denne artikels rammer.

Vi starter med det grundlæggende begreb *noder*: de grundlæggende byggesten, som TeX-motorer bruger til midlertidig (intern) lagring af indhold.

### Nogle noter om lagring af indhold: TeX-noder

Når den underliggende TeX-motor behandler din LaTeX-kode for at fremstille sat materiale—såsom afsnit, tabeller og matematik—skal den midlertidigt lagre dette indhold i hukommelsen i den TeX-motor, der bruges til at behandle din LaTeX-kode. Til at lagre sat indhold bruger TeX-motorer en sekvens af såkaldte *noder*, som du kan tænke på som “stykker” af computerens (enhedens) hukommelse i varierende størrelse, forbundet sammen til en liste (se denne [Wikipedia-artikel om kædede datastrukturer](https://en.wikipedia.org/wiki/Linked_data_structure)).

![Skematisk fremstilling af, hvordan TeX-motorer lagrer indhold ved hjælp af kædede noder](/files/22c38ed455e784004ac93db18034a51550fd822d)

For at repræsentere de grundlæggende elementer i TeX-baseret sats—såsom tegn, glue, bokse, penalties, kerns og [*markeringer*](#why-were-here-understanding-mark-nodes) (for blot at nævne nogle få)—bruger TeX-motorer forskellige *typer* af node. Nogle noder, såsom dem for bokse, skal lagre mere data sammenlignet med enklere nodetyper såsom tegnnoder; derfor er nogle noder større end andre—og kræver flere byte for at lagre dem i hukommelsen. Når du læser om TeX, kan du støde på udtryk som *tegnnoder*, *glue-noder*, [*marknoder*](#why-were-here-understanding-mark-nodes) og så videre: du ved nu, at det blot er navne på hukommelsesstykker, der er tildelt til at lagre data, som repræsenterer et element i TeX’s sats.

#### Hvorfor vi er her: forståelse af marknoder

Blandt de mange nodetyper er den, vi skal tale om, en *marknode* som oprettes af `\mark` kommandoen:

```latex
\mark{stof der skal lagres}
```

Den `\mark` kommandoen producerer ikke direkte noget sat indhold: dens argument `*stof der skal lagres*` gemmes i hukommelsen til senere brug, og en *marknode* oprettes for at indeholde hukommelsesadressen for *stof der skal lagres*. Som vi skal se, blev `\mark` kommandoen skabt *specifikt* for at hjælpe med at fremstille sidehoveder og sidefødder.

Marknoder oprettet af `\mark` kommandoer er “indlejret” i sideindholdet og klar til brug i de afsluttende faser af sideopsætningen, når TeX-motoren er klar til at tilføje sidehoveder og sidefødder til den satte side (brødteksten). Typisk, `*stof der skal lagres*` vil indeholde materiale såsom sidetal og kapitel- eller sektionsoverskrifter/-numre—byggestenene i sidehoveder og sidefødder.

#### ε-TeX tilføjer kommandoen \marks

[Version 2 af ε-TeX](https://texdoc.org/serve/e-TeX/0), en udvidelse til Knuths oprindelige TeX, blev udgivet i 1998 og giver nye muligheder sammen med forbedringer af eksisterende funktioner. I dag er de fleste af ε-TeX’s forbedringer indarbejdet i de almindelige TeX-motorer: pdfTeX, LuaTeX og XeTeX—se [**`-etex`** kommandolinjeindstillingen for TeX-motorer](/latex/da/flere-emner/44-tex-engine-command-line-options-for-pdftex-xetex-and-luatex.md) som aktiverer brugen af ε-TeX-udvidelser.

Knuths oprindelige TeX-software indeholder \mark-kommandoen, som kun opretter 1 “klasse” eller “type” marknode. Dit dokument kan indeholde mange \mark-kommandoer, men de opretter alle marknoder af samme “type” eller “klasse”—der er ingen indbygget mekanisme til at gruppere eller klassificere dem. Denne begrænsning blev fjernet af en ε-TeX-forbedring: \marks-kommandoen, som understøttes af pdfTeX, LuaTeX og XeTeX:

```latex
\marks n {stof der skal lagres}
```

hvor `n` er et heltal (`0` <= `n` < `32768`) som bestemmer marknodens *klasse*.

Bemærkninger:

* at skrive `\marks 0` (dvs., `n`=`0`) er synonymt med at bruge TeX’s oprindelige `\mark` kommando
* ε-TeX introducerede også markvariabler ([se senere](#pre-output-checks-looking-for-mark-nodes)) for hver klasse (`n`) af mark: `\firstmarks n`, `\topmarks n` og `\botmarks n`. Udvalgte klasser af markvariabler kunne bruges til at levere markdata til specifikke satstekniske opgaver.
* LuaTeX øgede maksimumværdien for `n` til `65535`, hvilket muliggør $$2^{16}$$ markklasser

### Årsager til TeX’s brug af markeringer

For at forstå *hvorfor* (og hvordan) TeX-motorer bruger `\mark` (eller `\marks`)-kommandoen til at fremstille sidehoveder og sidefødder, må vi forstå nogle “særheder” ved TeX-motorers mekanismer til at konstruere sider—at finde sideskift og sende færdige sider ud til en PDF-fil. I virkeligheden er disse sideopbygningsprocesser komplekse, men de grundlæggende principper/begreber kan forenkles, så de giver tilstrækkelig baggrundsforståelse, som hjælper os med at forstå markeringer.

Når en TeX-motor afslutter satsningen af enkelte indholdselementer såsom afsnit, tabeller eller matematik, kalder den en intern rutine (en funktion kaldet `build_page(...)`), som forsøger at tilføje disse nyligt satte elementer til den side, der i øjeblikket konstrueres i hukommelsen. Når det nye materiale føjes til den side, der bygges, kontrollerer TeX også, om det nytilføjede indhold har gjort den aktuelle side “tilstrækkeligt fuld”. Hvis siden er fuld, kan TeX skabe et *sideskift*—og sende den pågældende sides indhold til endelig behandling (“pakning”) og efterfølgende output til PDF-filen.

En nøglefunktion i den sidste fase af sidepakning (komposition) er noget, der kaldes en *outputrutine* som i praksis er en brugerdefineret sekvens af kommandoer, der bruges til at pakke siden med indhold, så den er klar til at blive sendt til PDF-filen. Et eksempel på “pakning” er at tilføje sidehoveder og sidefødder, men der er mange måder at bruge outputrutiner på—for eksempel se [denne artikel i TUGboat](https://tug.org/TUGboat/tb11-1/tb27salomon.pdf). Outputrutiner er et ret komplekst område i TeX, så vi går ikke i detaljer her: til formålet her skal du blot huske, at den sidste fase af sidekomposition indebærer brug af en eller anden brugerdefineret sekvens af kommandoer (samlet kaldet en *outputrutine*).

Men lad os overveje, hvad der kunne ske, når TeX er færdig med at sætte et langt tekstafsnit og bryder det op i en sekvens af enkelte satte linjer. TeX vil gerne tilføje det ny-satte afsnit—linje for linje—til den side, der aktuelt bygges, men måske kan kun *nogle* af disse linjer være på den aktuelle side. Bemærk, at med “side” henviser vi til hovedtekstområdet (sidebrødteksten), som *ikke* omfatter andre sideelementer såsom sidehoveder og sidefødder, som tilføjes senere (af outputrutinen).

Efter at flere afsnitslinjer er tilføjet til den aktuelle side, kan den blive “tilstrækkeligt fuld”, og det kan være tid for TeX til at skabe et sideskift. Men vi har noget “tiloversblevet” materiale, fordi kun *en del* af afsnittet kom med på den aktuelle side: det “overskydende afsnitsindhold” gemmes til senere, klar til oprettelse af den *næste* side. Den følgende grafik illustrerer denne idé: en del af afsnittet er på den *aktuelle* side, og en del holdes tilbage til *næste* siden.

![Skematisk fremstilling af et afsnit, der strækker sig over et sideskift](/files/86377853c0023b843b98d71830b81cdbdc1ccadf)

Dette afsnitseksempel viser, at en TeX-motor ofte vil behandle (sætte) indholdsstykker, som ikke kan, *i deres helhed*, passe på den aktuelle side—fordi indholdet rækker ud over det punkt, hvor et sideskift bliver nødvendigt. Husk, at TeX-motorer finder linjeskift ved at indlæse og derefter sætte *hele afsnit* og, i modsætning til nogle programmer, ikke anvender en linje-for-linje-tilgang til satsning af afsnit. Med andre ord sætter TeX det *hele* afsnit, uanset om det passer på den aktuelle side eller ej (det afgøres senere). I øvrigt gælder princippet om “sæt fuldt ud og tilføj derefter til den aktuelle side” også for andre typer TeX-indhold, herunder tabeller, som læses fuldstændigt ind fra .tex-filen og sættes i deres helhed, før man forsøger at tilføje dem til den aktuelle side.

For vores afsnitseksempel er den fulde tekst i det afsnit, *inklusive eventuelle kommandoer i den tekst*, blevet fuldt behandlet—hvilket betyder, at TeX’s satsning har nået en bestemt placering i din `.tex` -fil. TeX-motorens “aktuelle interne tilstand”, såsom værdien af variabler eller lagrede parameterindstillinger, vil afspejle det materiale, inklusive eventuelle kommandoer, der er behandlet frem til den aktuelle placering—afsnittets slutning.

Selvom hele afsnittet er blevet sat, kan noget af det ikke være på den aktuelle side, hvilket resulterer i, at “overskydende afsnitsindhold” gemmes til den *næste* side. Inden for den LaTeX-kode (tekst plus kommandoer), som frembragte det “overskydende afsnitsindhold”, kunne *kunne* have kaldt et hvilket som helst antal kommandoer og makroer, som ændrede værdier og variabler lagret internt af TeX-motoren—dvs. foretog ændringer i TeX’s “aktuelle tilstand”.

Det følgende diagram illustrerer en ekstremt vigtig TeX-“særhed”, som påvirker flere aspekter af TeX-baseret sats. På højre side af diagrammet ser du en fremstilling af noder, der udgør alt det indhold, som aktuelt er lagret i hukommelsen: det lysegrå område indeholder noder, der danner *aktuelle* side, og det mørkegrå område er sat indhold, der er bestemt for *næste* side. Denne situation afspejler vores afsnitseksempel: det mørkegrå område repræsenterer det “overskydende afsnitsindhold”: tekstlinjer, der holdes tilbage, fordi de ikke passer på den aktuelle side.

![Skematisk fremstilling af nodens placering, hvor TeX finder et sideskift, og som også viser indhold, der holdes tilbage til næste side](/files/1b2d0aaf6c3cc16b145dea474e418145a6ae5786)

Husk, at når TeX har en “tilstrækkeligt fuld” side (brødtekst), sender den dette indhold videre til noget, der kaldes en *outputrutine* som er en brugerdefineret sekvens af kommandoer. Blandt andet tilføjer outputrutinen sidehoveder og sidefødder til sidebrødteksten og færdiggør siden, så den er klar til at blive sendt til PDF-filen.

Vores grafik (ovenfor) viser det tilfælde, hvor TeX har valgt at lave et sideskift ved en bestemt node, såsom `\baselineskip` glue mellem satte linjer, og er klar til at begynde pakningen af den aktuelle side ved hjælp af outputrutinen—en sekvens af indbyggede kommandoer og brugerdefinerede makroer. *Men*, ud over indholdet, der udgør den aktuelle side (lagret i hukommelsen), har TeX allerede behandlet og lagret (i hukommelsen) *yderligere materiale*, fra din `.tex` fil. Det ekstra materiale strækker sig *ud over sideskiftet* og *kunne* kan have indeholdt kommandoer, som ændrede vigtige side-relaterede værdier eller variabler og påvirkede TeX’s “aktuelle interne tilstand”—som omfatter værdier af interne parametre eller data gemt af makroer.

Når TeX begynder at pakke den aktuelle side, er dens “aktuelle interne tilstand” *ikke* bestemt af alt, der er sat frem til sideskiftets placering, fordi TeX allerede *er kommet forbi dette punkt* i din fil og behandlet yderligere materiale. Hvis du betragter placeringen i din fil, der svarer til hvor sideskiftet finder sted, og den placering TeX faktisk er nået til i din `.tex` fil, kunne de to tilsvarende interne tilstande i TeX, inklusive lagrede data og variablers værdi, være meget forskellige. Den aktuelle tilstand af TeX’s satsning ligger normalt foran det sted, hvor sideskiftet sker; dvs. TeX's satsningsaktiviteter *er ikke synkroniserede* med processen med at outputte satte sider via outputrutinen.

#### Hypotetisk eksempel: sådan får man forkerte sidehoveder

Det følgende diagram illustrerer hypotetiske kommandoer `\myheader` og `\myfooter` brugt til at gemme den ønskede tekst til sidehoveder og sidefødder; for eksempel ved at bruge grundlæggende definitioner såsom

```latex
\newtoks\headertoks% en ny tokenlistevariabel til headerteksten
\newtoks\footertoks% en ny tokenlistevariabel til footerteksten
% Brug \global for at sikre, at lagrede header- eller footerdata er
% tilgængelige overalt, inklusive kommandoer i
% outputrutinen
\newcommand{\myheader}[1]{\global\headertoks={#1}}
\newcommand{\myfooter}[1]{\global\footertoks={#1}}
```

hvori `\headertoks` og `\footertoks` er tokenlister, der bruges til at lagre teksten til sidehoveder og sidefødder.

Derudover har vores hypotetiske eksempel også en outputrutine, som henter teksten til sidehoved og sidefod fra de aktuelle værdier af `\myheader` og `\myfooter`. Som vist i diagrammet vil der i indholdet bestemt for den aktuelle side, `\myheader` og `\myfooter` sættes de passende (korrekte) værdier. Men det ville være muligt, at `\myheader` og/eller `\myfooter` at blive kaldt inden for et afsnit, som strækker sig over et sideskift. Fordi TeX er nødt til at behandle hele afsnittet, `\myheader` og `\myfooter` ville blive kaldt igen for at nulstille den sidehoved-/sidefodstekst, der er gemt i “TeX’s interne tilstand”, hvilket ville give værdier, som ikke er korrekte for den aktuelle side. Når outputrutinen fremstiller sidehovedet og sidefoden, vil de indeholde tekst, der var tiltænkt næste side.

![Grafik, der viser forkerte sidehoveder og sidefødder, hvis outputrutinen kun bruger TeX-makroer til at hente tekst til sidehoved og sidefod](/files/5e1dce503c4c9d34b3eb8826cf5d731b3394ed03)

#### TeX’s asynkrone adfærd: \mark-kommandoen som redning

TeX’s satsningsaktiviteter (indholdsopbygning) er *ikke synkroniserede* med den endelige proces med at outputte en sat side via kommandoer i outputrutinen. Når det er tid til at outputte en side, ligger den faktiske interne tilstand i TeX foran enhver tilstand, den måtte have haft ved sideskiftets placering—hvor den satte det sidste indholdsstykke på den aktuelle side, der outputtes.

I [The TeXbook](https://www.amazon.co.uk/TeXbook-Donald-Knuth/dp/0201134489)beskriver Donald Knuth, TeX’s skaber, denne situation som

> ... TeX’s outputrutine halter bagefter dens sidekonstruktionsaktiviteter

På grund af dette usynkroniserede forhold er der behov for “særlige faciliteter” i form af *markmekanismen*, anvendt via `\mark` (eller `\marks n`)-kommandoen, for at sikre, at sidehoveder og sidefødder indeholder materiale, der er relevant for den faktiske side, der outputtes.  `\mark` kommandoen indlejrer marknoder i sideindholdet og gemmer hukommelsesadressen for indhold, som kan bruges til den pågældende sides sidehoved og sidefod.

Forfatteren til den velkendte og respekterede bog [TeX by Topic](https://www.eijkhout.net/tex/tex-by-topic.html) beskriver `\mark` mekanismen som

> ... den primære mekanisme, hvorigennem outputrutinen kan få information om indholdet af den aktuelt afbrudte side, især dens top og bund.

Den `\mark` kommandoen er en mekanisme, der er designet til at omgå den asynkrone natur af TeX’s sideskifte- og outputrutinealgoritme.

![Skematisk fremstilling af markdata (noder) indlejret i sidebrødtekstindholdet](/files/4c24eb539610f2699b568ebccf3ad86ceb4a5caa)

### Kontrol før output: søgning efter marknoder

Når TeX-motoren har fastlagt placeringen af et sideskift, kalder den en intern rutine (kaldet `fire_up()`), som foretager en masse forbehandling, før outputrutinen afslutter sidekompositionen og skriver den færdige side til PDF-filen. En vigtig del af disse forbehandlingstrin er at sætte værdien af tre *globale markvariabler*: `\botmark`, `\topmark` og `\firstmark` som bruges til at levere data til opbygning af sidehoveder og sidefødder. En side kan naturligvis indeholde flere marknoder, men disse filtreres for at frembringe de tre markvariabler, som fungerer således:

* **`\botmark`** er den markering, der er gældende ved det aktuelle sideskift; dvs. den sidste markering set på *aktuelle* siden
* **`\topmark`** er værdien af `\botmark` fra *forrige* siden
* **`\firstmark`** er den første markering på *aktuelle* siden—den første markering mellem `\topmark` og `\botmark`

Det følgende skema viser de grundlæggende principper for forbehandling af det satte sideindhold for at bestemme værdierne af de tre globale markvariabler `\botmark`, `\topmark` og `\firstmark`:

![Skematisk fremstilling af de grundlæggende principper, der bruges til at bestemme værdierne af de tre globale markvariabler \botmark, \topmark og \firstmark](/files/4f82087b88a4f20421a30964f0602c3c4b03fba7)

Det næste afsnit bruger nogle af forklaringerne ovenfor til at skitsere, hvordan LaTeX sætter sidehoveder og sidefødder.

### LaTeX’s klasser: sidestile og sidehoveder/sidefødder

Når du skriver `\documentclass{*class*}` hvor `*class*` kan være `article`, `book`, `report` eller `letter`, indlæser LaTeX en fil ved navn `*class*.cls`; for eksempel `book.cls`, `article.cls` og så videre. Disse `.cls` filer indeholder LaTeX-kode til at implementere klassespecifikke varianter af forskellige kommandoer og funktioner, som forventes at være til stede i og leveret af alle dokumentklasser—de adfærdsmønstre, der deles af alle dokumentklasser. Eksempler kan omfatte klassespecifikke sidelayoutmarginer sammen med klassespecifikke versioner af kommandoer såsom `\section`, `\subsection` og så videre.

Et andet vigtigt element i `.cls` filer er den klassespecifikke implementering af standard-sidestile, som definerer sidehoveder og sidefødder i dokumenter, der er produceret ved hjælp af en bestemt klasse og sidestil. For eksempel:

* **`book.cls`** og **`article.cls`** indeholder implementeringer af sidestilene `headings` og `myheadings`
* **`letter.cls`** indeholder definitioner af sidestilene `headings`, `empty`, `plain` og en kaldet `firstpage`
* **`report.cls`** indeholder definitioner af sidestilene `headings` og `myheadings`

Implementeringer af sidestile afhænger ofte af `twoside` -indstillingen i `\documentclass`—om dokumentet er enkeltsidet eller dobbeltsidet—så sidehoveder og sidefødder defineres passende for venstrevendte (lige) sider og højrevendte (ulige) sider.

Dokumentklasser kan være afhængige af standarddefinitioner af de `plain` eller `empty` sidestile, der findes andre steder i LaTeX—uden for den `.cls` fil, der bruges.

#### Mere om sidestile

Når du ændrer sidestilen for en side ved hjælp af `\pagestyle{*somestyle*}` eller `\thispagestyle{*somestyle*}` forventer LaTeX at finde en intern kommando med navnet `ps@*somestyle*`—som normalt leveres af dokumentklassens `.cls` fil eller måske en pakke såsom `fancyhdr`. For øvrigt mener vi med “intern kommando” en kommando, der er en del af LaTeX-kildekoden, og hvis navn indeholder et `@` symbol, hvilket normalt forhindrer almindelig brug (på grund af dens [kategori-kode](/latex/da/flere-emner/43-table-of-tex-category-codes.md)).

Definitionen af `\ps@*somestyle*` er ansvarlig for at implementere funktionerne/adfærdsmønstrene for den sidestil, hvilket omfatter at give definitioner af:

* kommandoer, der bruges under de afsluttende faser af sidekompositionen (til at tilføje sidehoveder og sidefødder, se [senere i artiklen](#commands-for-the-output-routine)):
  * `\@oddhead`
  * `\@oddfoot`
  * `\@evenhead`
  * `\@evenfoot`
* kommandoer til at indsætte sektionsrelaterede markdata til brug ved generering af dokumenters sidehoveder og sidefødder, som indeholder sektionsoverskrifter, numre og lignende. For eksempel definerer `headings` sidestilen (inden for `book.cls`) definerer følgende markproducerende kommandoer:
  * `\chaptermark`
  * `\sectionmark`

Vi vil [udforske markgenererende kommandoer nærmere](#mark-commands-and-mark-data), såsom `\chaptermark`, men blot som eksempel: når du skriver `\chapter{chapter title}` det `\chaptermark` kommandoen, udføres den også for at indsætte kapitelrelaterede markdata til efterfølgende fremstilling af sidehoveder.

#### En gennemgang af sidehoved- og sidefodskommandoer baseret på sidestil

Dette afsnit undersøger nogle af de centrale LaTeX-kommandoer/processer, der bruges til at skabe sidehoveder og sidefødder—med udgangspunkt i forklaringer eller begreber præsenteret tidligere i denne artikel.

**LaTeX’s “model” for sidehoveder og sidefødder**

Indholdet i LaTeX’s (standard) sidehoveder og sidefødder er baseret på et totrins hierarki af dokumentsektioner: en “højere niveau”-sektion, der indeholder flere “lavere niveau”-sektioner. For klasserne book og article betyder dette:

* `**book**` **klasse**: “højere niveau”-sektioner fremstilles af `\chapter` kommandoer, og “lavere niveau”-sektioner via `\section`, hvilket afspejler kapitler, der indeholder mange sektioner.
* `**article**` **klasse** (forudsat dobbeltsidede dokumenter): “højere niveau”-sektioner fremstilles ved hjælp af `\section` kommandoer, og “lavere niveau”-sektionerne via `\subsection`, hvilket afspejler flere undersektioner, der optræder inden for samme sektion.

LaTeX anvender sin “model” for sidehoveder og sidefødder gennem sine sektionskommandoer, som “indsprøjter” marknoder (via `\mark` kommandoen) for at lagre data, der er relevante for den dokumentsektion, der oprettes. For eksempel, hver gang du skriver `\section{*some section title*}` der vil blive oprettet en mærke-node, der indeholder data, som afspejler `*en sektionsoverskrift*` og sektionsnummeret.

LaTeX bruger et system af mærker, der indeholder data i formen `{left}{right}`, som i sidste ende genereres via `\mark` kommandoer

```latex
\mark{{left}{right}}
```

indkapslet i lag af makroer, der er designet til at skærme brugerne fra detaljerne på lavere niveau — som udforskes i de følgende afsnit af denne artikel.

#### Gennemgang af bogklassen

Når `book.cls` filen indlæses, er en af dens sidste handlinger at udføre `\pagestyle{headings}` som sætter standard-sidestilen til `headings`, så vi ser nærmere på den sidestil.

Som [nævnt ovenfor](#more-on-page-styles), er funktionerne/egenskaberne ved `headings` sidestilen, som implementeres af `book` klassen, vil blive defineret af den (interne) kommando `\ps@headings` indeholdt i filen `book.cls`. Den præcise definition af `\ps@headings` afhænger af, om dokumentet er enkelt- eller dobbeltsidet (standard for `book` klassen).

**“Mærke-kommandoer” og “mærkedata”**

For dobbeltsidede dokumenter produceret af `book` klassen, er definitionen af `\ps@headings` opretter (definerer) to “mærke-kommandoer”: `\chaptermark` og `\sectionmark` som producerer “mærkedata” i formen `{left}{right}`, til brug i hoveder og fodlinjer. Disse mærke-kommandoer afspejler LaTeX’s model for hoveder og fodlinjer — baseret på hierarkiet af dokumentafsnit:

* den “højere niveau”-sektionskommando (her, `\chapter`) bruges til at levere “mærkedata” til venstrevendte (lige nummererede) sidehoveder. Når du starter et nyt kapitel ved at skrive `\chapter{*kapiteloverskrift*}`, `\chaptermark` kaldes for at oprette “mærkedata”, som afspejler det nye kapitel — med dets `*kapiteloverskrift*` og nummer.
* den “lavere niveau”-sektionskommando (her, `\section`) bruges til at levere “mærkedata” til højrevendte (ulige nummererede) sider. Når du skriver `\section{*sektionsoverskrift*}` det `\sectionmark` kommandoen vil blive kaldt for at oprette “mærkedata”, som afspejler det nye afsnit — med dets `*sektionsoverskrift*` og nummer. Enhver mærkedata leveret af den forrige `\chapter` påvirkes ikke af efterfølgende \section-kommandoer.

**\markboth and \markright**

LaTeX’s afsnits-specifikke mærke-kommandoer, såsom `\chaptermark` og `\sectionmark`, anvender to yderligere kommandoer kaldet `\markboth` og `\markright` som leverer de faktiske mærkedata til hoveder og fodlinjer. `\markboth` og/eller `\markright` kan indeholde kommandoer til at formatere tekst i hoved eller fod, såsom at gøre den til versaler.

For dokumenter produceret med `book` klassens standardindstillinger (dobbeltsidet, `headings` sidestil), virker de mærke-genererende kommandoer som følger:

* `\chaptermark` genererer mærkedata ved hjælp af `\markboth`
* `\sectionmark` genererer mærkedata `\markright`

`\markboth` og `\markright` er makroer, som i sidste ende bruger den primitive (indbyggede, lavniveau-) `\mark` kommando til faktisk at indsætte mærker genereret inde fra sektionskommandoer.

`\markboth` har formen

* **`\markboth{left}{right}`**: indsætter en mark (node) ved hjælp af `\mark{{left}{right}}` hvilket resulterer i en mark-node, der indeholder et par værdier i klammer `{left}{right}`.

`\markright` har formen

* **`\markright{newright}`**: indsætter en mark (node) ved hjælp af `\mark{{currentleft}{newright}}`; dvs. det ændrer den aktuelle værdi af `højre` til `newright` men den aktuelle værdi af `venstre` (dvs., `currentleft`) forbliver uændret, hvilket resulterer i en mark-node, der indeholder et par værdier i klammer `{currentleft}{newright}`.

Adfærden for `\markboth` og `\markright` understøtter den to-niveaus sektionshierarki, såsom et dokument, der indeholder flere afsnit i hvert kapitel.

Som eksempler på den (dobbeltsidede) `book` dokumentklasse (ved brug af sidestilen headings):

* `\chaptermark` bruger `\markboth` til at sætte:
  * et `{left}` felt, som sætter CHAPTER . i versaler.
  * et {right}-felt, som er tomt (`{}`)
* `\sectionmark` bruger `\markright` til at sætte `{right}` mærkefeltet til at blive sat, også i versaler.

For at forstå hvorfor `\sectionmark` bruger `\markright` kan vi observere, at hver ny `\section` kommando bør:

* indsætte en ny mærke, der indeholder data for dette `\section` (såsom dens titel og nummer).
* men *ikke* påvirke mærkedataværdierne for den aktuelle `\chapter` i hvilket netop den pågældende `\section` kommando forekommer

Af disse grunde `\section` kalder kommandoen `\sectionmark` som bruger `\markright` til at oprette en `\section`-relateret mærke: den opdaterer `{right}` mærkedatafeltet, men påvirker ikke det aktuelle `{left}` mærkedatafeltets værdi, som blev sat af den aktuelle `\chapter`.

Bemærk: LaTeX-kildekoden indeholder advarslen:

> Mærke-kommandoerne fungerer rimeligt godt for højre mærker, der er ‘nummereret inden for’ venstre mærker — f.eks. ændres venstre mærke af en \chapter-kommando, og højre mærke ændres af en \section-kommando. De giver dog noget afvigende resultater, hvis 2 \markboth forekommer på samme side.

**Kommandoer til output-rutinen**

Den `\ps@headings` kommando implementerer definitionerne af de følgende kommandoer

* `\@oddhead`
* `\@oddfoot`
* `\@evenhead`
* `\@evenfoot`

som bruges af output-rutinen til at tilføje hoveder og fodlinjer under den sidste fase af sidesammensætningen. For eksempel, `book.cls` sætter `\@oddfoot` og `\@evenfoot` til værdien `\@empty`, som er defineret som `\def\@empty{}`, og dermed `\ps@headings` giver tomme fodlinjer på venstre- og højrevendte sider:

```latex
\let\@oddfoot\@empty
\let\@evenfoot\@empty
```

Overskrifterne er defineret som:

```latex
\def\@evenhead{\thepage\hfil\slshape\leftmark}%
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}%
```

hvor

* `\leftmark` udtrækker `{left}` værdien fra et `{left}{right}` mærkepar
* `\rightmark` udtrækker `{right}` værdien fra et `{left}{right}` mærkepar
* \thepage udskriver det aktuelle sidetal

Grundlæggende giver disse implementeringer af `\@evenhead` og `\@oddhead` følgende resultater:

* `\@evenhead`: sidetallet vises til venstre i overskriften, og indholdet af `\leftmark`, formateret med skrifttypekommandoen `\slshape`, udskrives til højre i overskriften — mellemrummet imellem leveres af den meget fleksible `\hfil` glue.
* `\@oddhead`: indholdet af `\rightmark`, formateret med skrifttypekommandoen `\slshape`, vises til venstre i overskriften, og det aktuelle sidetal udskrives til højre i overskriften — igen leveres mellemrummet imellem af `\hfil` glue.

Dog står et nøglespørgsmål tilbage: *hvilke* `{left}{right}` mærkepar bruges af `\leftmark` og `\rightmark`: med andre ord, hvorfra får de deres markdata-værdier?

Som [nævnt ovenfor](#filtering) men [forklaret nedenfor](#explainfiltering), bliver alle mærker indeholdt i dokumentsiderne under de sidste sidesammensætningsstadier “filtreret” og brugt til at sætte værdien af tre globale markvariabler: `\botmark`, `\topmark` og `\firstmark`. På grund af [strukturen af LaTeX’s mærker](#latexs-model-of-headers-and-footers), vil hver af disse 3 markvariabler til sidst indeholde en værdi af `{left}{right}` for et eller andet par værdier `{left}` og `{right}` og det er disse, som leverer det faktiske `{left}{right}` mærkepar (felter) for `\leftmark` og `\rightmark`:

* `\leftmark` udtrækker `venstre` værdi fra `{left}{right}` mærkepar (felter), der leveres af `\botmark`
* `\rightmark` udtrækker `højre` værdi fra `{left}{right}` mærkepar leveret af `\firstmark`

Bemærk `\markboth` og `\markright` kan indeholde kommandoer til at formatere tekst i hoved og fod — såsom omdannelse til versaler.

### Eksempler med lavniveau-LaTeX-kommandoer

De følgende eksempler demonstrerer ændringer af sidestile eller hoveder og fodlinjer ved at redefinere nogle af de lavniveau- (interne) LaTeX-kommandoer, der er omtalt i denne artikel (dem, som indeholder @-symbolet). Vi anbefaler ikke denne metode til at ændre hoveder og fodlinjer, men den er tilgængelig for dem, der har brug for den (f.eks. pakkeforfattere). Den foretrukne løsning til at ændre hoveder og fodlinjer er at bruge [`fancyhdr` pakken](https://ctan.org/pkg/fancyhdr?lang=en), som diskuteres i en [Overleaf-hjælpeartikel](/latex/da/formatering/02-headers-and-footers.md).

#### Definition af en minimal sidestil

Det følgende eksempel definerer en ny, yderst minimal sidestil kaldet `demostyle` som bruger statisk tekst til at definere hoveder og fodlinjer og ikke er afhængig af sektionskommandoer (`\chapter`, `\section` osv.) til at sætte indholdet i hoved og fod.

Eksemplet starter med at ændre kategorikoden for `@` tegnet til 11, så det kan bruges i makronavne. Den `\ps@demostyle` kommandoen implementerer vores minimale sidestil ved at redefinere de kommandoer, der bruges (i output-rutinen) til at producere hoveder og fodlinjer: `\@oddhead`, `\@oddfoot`, `\@evenhead` og `\@evenfoot`. Bemærk `twoside` optionen i vores `\documentclass` deklaration — som bruger `article` klassen.

```latex
\documentclass[twoside]{article}
\catcode`@=11
\newcommand{\ps@demostyle}{%
\renewcommand\@oddfoot{\hfil Fodlinjen på ulige sider\hfil}%
\renewcommand\@evenfoot{\hfil Fodlinjen på lige sider\hfil}%
\renewcommand\@evenhead{\thepage\hfil Hovedlinjen på lige sider}%
\renewcommand\@oddhead{Hovedlinjen på ulige sider\hfil\thepage}}
\catcode`@=12
\title{Demonstration af en sidestil}
\author{Overleaf}
\date{august 2022}
\begin{document}
\pagestyle{demostyle}
\maketitle
\newpage
\section{Introduktion}
\newpage
\section{Mere materiale}
\end{document}
```

[Åbn dette eksempel i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Creating+a+new+page+style\&snip=%5Cdocumentclass%5Btwoside%5D%7Barticle%7D%0A%5Ccatcode%60%40%3D11%0A%5Cnewcommand%7B%5Cps%40demostyle%7D%7B%25%0A%5Crenewcommand%5C%40oddfoot%7B%5Chfil+The+odd-page+footer%5Chfil%7D%25%0A%5Crenewcommand%5C%40evenfoot%7B%5Chfil+The+even-page+footer%5Chfil%7D%25%0A%5Crenewcommand%5C%40evenhead%7B%5Cthepage%5Chfil+The+even-page+header%7D%25%0A%5Crenewcommand%5C%40oddhead%7BThe+odd-page+header%5Chfil%5Cthepage%7D%7D%0A%5Ccatcode%60%40%3D12%0A%5Ctitle%7BDemonstrating+a+page+style%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cdate%7BAugust+2022%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bdemostyle%7D%0A%5Cmaketitle%0A%5Cnewpage%0A%5Csection%7BIntroduction%7D%0A%5Cnewpage%0A%5Csection%7BMore+material%7D%0A%5Cend%7Bdocument%7D)

#### Ændring af overskrifter for bogklassen

Det følgende eksempel ændrer overskrifterne for bogklassen ved at redefinere `\@oddhead` og `\@evenhead` så venstre- og højrevendte sideoverskrifter indeholder det aktuelle sidetal og kapitlets titel. Bemærk hvordan den anden `\chapter` kommando bruger den valgfrie korte kapiteloverskrift `[Den korte titel]` som nu leverer overskriftsteksten i stedet for den lange titel.

`\section` kommandoer har ingen indflydelse på overskriftens indhold, fordi vores omskrivninger af overskrifter kun bruger `\leftmark` som henter oplysninger om det aktuelle kapitel. For at få adgang til oplysninger om det aktuelle afsnit skulle vi bruge `\rightmark` i definitionen af `\@oddhead` og/eller `\evenhead`.

```latex
\documentclass{book}
% NB: kategori-koden for '@' ændres midlertidigt til 11
% for at gøre det muligt at bruge den i kommandonavne
\catcode `@=11
% Lad \@oddfoot og \evenfoot være ækvivalente med \@empty
% for at gøre dem tomme
\let\@oddfoot\empty\let\evenfoot\empty
% Omdefinér \@oddhead og \@evenhead
\renewcommand{\@oddhead}{\leftmark\hfil\thepage}
\renewcommand{\@evenhead}{\thepage\hfil\leftmark}
\catcode `@=12
% Brug en praktisk lille sidestørrelse
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=10cm]{geometry}
\title{Memoirer om en \TeX{}-bruger}
\author{Overleaf}
\begin{document}
\frontmatter
\maketitle
Dette er den indledende del, som bruger romertal.
\mainmatter
\chapter{Hvor skal jeg begynde?}
Kapitel 1: Et kort kapitel.
\newpage
\section{I begyndelsen...}
Et afsnit.
\chapter[Den korte titel]{Et kapitel med en meget lang titel, hvilket gør det uegnet til overskrifter}
\newpage
\section{Et andet afsnit}
Med lidt indhold.
\newpage
\section{Hvad, endnu et afsnit?}
Også med lidt indhold.
\end{document}
```

[Åbn dette eksempel i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Changing+headers+for+the+book+class\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+NB%3A+category+code+of+%27%40%27+temporarily+changed+to+11%0A%25+to+enable+its+use+in+command+names%0A%5Ccatcode+%60%40%3D11%0A%25+Let+%5C%40oddfoot+and+%5Cevenfoot+be+equivalent+to+%5C%40empty%0A%25+to+make+them+blank+%28empty%29%0A%5Clet%5C%40oddfoot%5Cempty%5Clet%5Cevenfoot%5Cempty%0A%25+Redefine+%5C%40oddhead+and+%5C%40evenhead%0A%5Crenewcommand%7B%5C%40oddhead%7D%7B%5Cleftmark%5Chfil%5Cthepage%7D%0A%5Crenewcommand%7B%5C%40evenhead%7D%7B%5Cthepage%5Chfil%5Cleftmark%7D%0A%5Ccatcode+%60%40%3D12%0A%25+Use+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Ctitle%7BMemoirs+of+a+%5CTeX%7B%7D+user%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cfrontmatter%0A%5Cmaketitle%0AThis+is+frontmatter+which+uses+Roman+numerals.%0A%5Cmainmatter%0A%5Cchapter%7BWhere+do+I+start%3F%7D%0AChapter+1%3A+A+short+chapter.%0A%5Cnewpage%0A%5Csection%7BIn+the+beginning...%7D%0AA+section.%0A%5Cchapter%5BThe+short+title%5D%7BA+chapter+with+a+very+long+title%2C+making+it+unsuitable+for+headers%7D%0A%5Cnewpage%0A%5Csection%7BAnother+section%7D%0AWith+little+content.%0A%5Cnewpage%0A%5Csection%7BWhat%2C+another+section%3F%7D%0AAlso+with+little+content.%0A%5Cend%7Bdocument%7D)

#### Brug af ε-TeX’s udvidede mærke-kommandoer

Den `book` klassen bruger følgende definitioner af `\@evenhead` og `\@oddhead` for at producere overskrifter:

```latex
\def\@evenhead{\thepage\hfil\slshape\leftmark}
\def\@oddhead{{\slshape\rightmark}\hfil\thepage}
```

hvor kommandoerne `\leftmark` og `\rightmark` er defineret som

```latex
\def\leftmark{\expandafter\@leftmark\botmark\@empty\@empty}
\def\rightmark{\expandafter\@rightmark\firstmark\@empty\@empty}
```

Ved at bruge ε-TeX’s udvidede kommandoer, og ækvivalensen mellem ε-TeX’s mærke-klasse 0 og de oprindelige TeX-kommandoer, kan vi:

* omskrive `\leftmark` for at erstatte `\botmark` med ε-TeX’s `\botmarks0` ækvivalent, og
* omskrive `\rightmark` for at erstatte `\firstmark` med ε-TeX’s `\firstmarks0` ækvivalent

Disse omdefinitioner giver

```latex
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks0\relax\@empty\@empty}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks0\relax\@empty\@empty}
```

Bemærk brugen af `\relax` for at afslutte TeX’s søgen efter flere cifre — du kan også erstatte `\relax` med et mellemrum, som fungerer som afslutter.

Det følgende eksempel giver output, som er identisk med de oprindelige definitioner af `\leftmark` og `\rightmark`.

```latex
\documentclass{book}
% Omdefinér \leftmark og \rightmark til at bruge
% hhv. \botmarks0 og \firstmarks0
% NB: kategori-koden for '@' ændres midlertidigt til 11
% for at gøre det muligt at bruge den i kommandonavne
\catcode `@=11
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks0\relax\@empty\@empty}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks0\relax\@empty\@empty}
\catcode `@=12
% Brug en praktisk lille sidestørrelse
\usepackage[paperheight=16cm,paperwidth=12cm,textwidth=10cm]{geometry}
\title{Memoirer om en \TeX{}-bruger}
\author{Overleaf}
\begin{document}
\frontmatter
\maketitle
Dette er den indledende del, som bruger romertal.
\mainmatter
\chapter{Hvor skal jeg begynde?}
Kapitel 1: Et kort kapitel.
\newpage
\section{I begyndelsen...}
Et afsnit.
\newpage
Et andet afsnit.
\end{document}
```

[Åbn dette eksempel i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+%CE%B5-TeX%E2%80%99s+extended+marks+command\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+Redefine+%5Cleftmark+and+%5Crightmark+to+use+%0A%25+%5Cbotmarks0+and+%5Cfirstmarks0+respectively%0A%25+NB%3A+category+code+of+%27%40%27+temporarily+changed+to+11%0A%25+to+enable+its+use+in+command+names%0A%5Ccatcode+%60%40%3D11%0A%5Crenewcommand%7B%5Cleftmark%7D%7B%5Cexpandafter%5C%40leftmark%5Cbotmarks0%5Crelax%5C%40empty%5C%40empty%7D%0A%5Crenewcommand%7B%5Crightmark%7D%7B%5Cexpandafter%5C%40rightmark%5Cfirstmarks0%5Crelax%5C%40empty%5C%40empty%7D%0A%5Ccatcode+%60%40%3D12%0A%25+Use+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Ctitle%7BMemoirs+of+a+%5CTeX%7B%7D+user%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cfrontmatter%0A%5Cmaketitle%0AThis+is+frontmatter+which+uses+Roman+numerals.%0A%5Cmainmatter%0A%5Cchapter%7BWhere+do+I+start%3F%7D%0AChapter+1%3A+A+short+chapter.%0A%5Cnewpage%0A%5Csection%7BIn+the+beginning...%7D%0AA+section.%0A%5Cnewpage%0AAnother+section.%0A%5Cend%7Bdocument%7D)

**Noter om ε-TeX**

Som [vi bemærkede ovenfor](#etex), introducerer ε-TeX `\marks` kommandoen:

```latex
\marks n {stof der skal lagres}
```

som udvider den oprindelige `\mark` funktion i Knuths TeX-motor og er tilgængelig i alle tre gængse TeX-motorer: pdfTeX, LuaTeX og XeTeX.

ε-TeX’s implementering introducerer også nye globale mærkevariabler `\firstmarks n`, `\botmarks n` og `\topmarks n`: én for hver klasse `n`. Disse klassebaserede mærkevariabler bestemmes [ved hjælp af mekanismerne beskrevet ovenfor](#pre-output-checks-looking-for-mark-nodes), og de kan alle bruges til at producere hoveder og fodlinjer.

Du kan bruge enhver af de $$2^{15}$$ = 32768 mærke-klasser, fra 0 til 32767, inden for omdefinitioner af `\leftmark` eller `\rightmark`. Det forudsætter, at du har leveret (indsat) passende mærkedata til den valgte mærke-klasse, `n`, via `\marks n{{left}{right}}`.

Bemærk, at LuaTeX stiller $$2^{16}$$ = 65536 mærke-klasser til rådighed, med `n` fra 0 til 65535.

**Eksempel med mærke-klasse 10**

Dette eksempel demonstrerer brug af mærke-klasse 10 (valgt tilfældigt) til at oprette dokumentoverskrifter. Eksempeldokumentet sætter 6 sider, som indeholder den sekvens af mærker, der præsenteres i [det gennemarbejdede eksempel i slutningen af denne artikel](#a-worked-example-to-show-how-tex-engines-determine-values-for-botmark-topmark-and-firstmark). En gennemgang af det eksempel viser, hvorfor TeX-motoren har valgt et bestemt mærke, $$\alpha$$, $$\beta$$, $$\gamma$$ og $$\delta$$, til brug i hver af overskrifterne.

Vi starter med at definere en bekvemmelighedsmakro, `\domark`, som bruger `\marks 10` til at indsætte mærkedata, der følger LaTeX’s `{left}{right}` konvention:

```latex
\newcommand{\domark}[2]{\marks 10{{#1}{#2}}}
```

Mærker af klasse 10 gøres tilgængelige for LaTeX’s mekanisme for hoveder og fodlinjer ved at redefinere `\leftmark` og `\rightmark`— med lidt ekstra info tilføjet:

```latex
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks10 \@empty\@empty{} (via \texttt{\string\botmarks10})}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks10 \@empty\@empty{} (via \texttt{\string\firstmarks10})}
```

Efter indsættelse af en række (klasse 10)-mærker opretter TeX-motoren (her pdfTeX) behjælpsomt globale mærkevariabler for klasse 10 —`\botmarks10`, `\topmarks10` og `\firstsmarks10` hvilke `\leftmark` og `\rightmark` til at producere overskrifterne.

```latex
\documentclass{book}
% En kort kommando til at bruge mærker med klasse 10
% og følger LaTeX’s mærkestruktur {left}{right}
\newcommand{\domark}[2]{\marks 10{{#1}{#2}}}
% Omdefinér \leftmark og \rightmark til at bruge
% hhv. \botmarks10 og \firstmarks10
\catcode`@=11
\renewcommand{\leftmark}{\expandafter\@leftmark\botmarks10 \@empty\@empty{} (via \texttt{\string\botmarks10})}
\renewcommand{\rightmark}{\expandafter\@rightmark\firstmarks10 \@empty\@empty{} (via \texttt{\string\firstmarks10})}
\catcode`@=12
\title{Demonstration af \(\varepsilon\)-\TeX’s forbedrede mærker}
\author{Overleaf}
\date{august 2022}
\begin{document}

Side 1: Ingen mærker tilføjet, så alle mærkevariabler forbliver i deres initialiserede tilstand: tom (NULL).

\newpage
Side 2: $\alpha$-mærke tilføjet til denne side via

\verb|\domark{$\alpha$-left}{$\alpha$-right}|\domark{$\alpha$-left}{$\alpha$-right}

\newpage
Side 3: Ingen nye mærker tilføjet til denne side.

\newpage
Side 4: $\beta$-mærke efterfulgt af $\gamma$-mærke tilføjet til denne side via

\verb|\domark{$\beta$-left}{$\beta$-right}|

\verb|\domark{$\gamma$-left}{$\gamma$-right}|.
\domark{$\beta$-left}{$\beta$-right}
\domark{$\gamma$-left}{$\gamma$-right}

\newpage
Side 5: $\delta$-mærke tilføjet til denne side via

\verb|\domark{$\delta$-left}{$\delta$-right}|
\domark{$\delta$-left}{$\delta$-right}

\newpage
Side 6: Der er ikke tilføjet nogen markeringer til denne side.
\end{document}
```

[Åbn dette eksempel i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Using+e-TeX+global+marks+variables\&snip=%5Cdocumentclass%7Bbook%7D%0A%25+A+short+command+to+use+marks+with+class+10%0A%25+and+following+LaTeX%27s+mark+structure+%7Bleft%7D%7Bright%7D%0A%5Cnewcommand%7B%5Cdomark%7D%5B2%5D%7B%5Cmarks+10%7B%7B%231%7D%7B%232%7D%7D%7D%0A%25+Redefine+%5Cleftmark+and+%5Crightmark+to+use+%0A%25+%5Cbotmarks10+and+%5Cfirstmarks10+respectively%0A%5Ccatcode%60%40%3D11%0A%5Crenewcommand%7B%5Cleftmark%7D%7B%5Cexpandafter%5C%40leftmark%5Cbotmarks10+%5C%40empty%5C%40empty%7B%7D+%28via+%5Ctexttt%7B%5Cstring%5Cbotmarks10%7D%29%7D%0A%5Crenewcommand%7B%5Crightmark%7D%7B%5Cexpandafter%5C%40rightmark%5Cfirstmarks10+%5C%40empty%5C%40empty%7B%7D+%28via+%5Ctexttt%7B%5Cstring%5Cfirstmarks10%7D%29%7D%0A%5Ccatcode%60%40%3D12%0A%5Ctitle%7BDemonstrating+%5C%28%5Cvarepsilon%5C%29-%5CTeX%E2%80%99s+enhanced+marks%7D%0A%5Cauthor%7BOverleaf%7D%0A%5Cdate%7BAugust+2022%7D%0A%5Cbegin%7Bdocument%7D%0A%0APage+1%3A+No+marks+added+so+all+mark+variables+remain+in+their+initialized+state%3A+empty+%28NULL%29.%0A%0A%5Cnewpage%0APage+2%3A+%24%5Calpha%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Calpha%24-left%7D%7B%24%5Calpha%24-right%7D%7C%5Cdomark%7B%24%5Calpha%24-left%7D%7B%24%5Calpha%24-right%7D%0A%0A%5Cnewpage%0APage+3%3A+No+new+marks+added+to+this+page.%0A%0A%5Cnewpage%0APage+4%3A+%24%5Cbeta%24-mark+followed+by+%24%5Cgamma%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cbeta%24-left%7D%7B%24%5Cbeta%24-right%7D%7C%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cgamma%24-left%7D%7B%24%5Cgamma%24-right%7D%7C.%0A%5Cdomark%7B%24%5Cbeta%24-left%7D%7B%24%5Cbeta%24-right%7D%0A%5Cdomark%7B%24%5Cgamma%24-left%7D%7B%24%5Cgamma%24-right%7D%0A%0A%5Cnewpage%0APage+5%3A+%24%5Cdelta%24-mark+added+to+this+page+via%0A%0A%5Cverb%7C%5Cdomark%7B%24%5Cdelta%24-left%7D%7B%24%5Cdelta%24-right%7D%7C%0A%5Cdomark%7B%24%5Cdelta%24-left%7D%7B%24%5Cdelta%24-right%7D%0A%0A%5Cnewpage%0APage+6%3A+No+marks+added+to+this+page.%0A%5Cend%7Bdocument%7D)

Den følgende figur viser overskrifterne, der produceres af dette eksempel:

![Figur, der viser outputtet fra LaTeX-kode ved brug af ε-TeX’s udvidede mark-kommandoer](/files/121cb2e07e129052d6e213fc632e3e579789985f)

* **Bemærk**: Overskriften på side 1 oprettes på et tidspunkt, hvor alle tre markvariabler for klasse 10—`\botmarks10`, `\topmarks10` og `\firstsmarks10`—er tomme. Det endelige resultat er, at `\rightmark` (for side 1) indsætter kun det sidste overskriftsfragment: `(via \texttt{\string\firstmarks10})`, som vist i figuren ovenfor.

## Et gennemarbejdet eksempel, der viser, hvordan TeX-motorer bestemmer værdierne for \botmark, \topmark og \firstmark

![Db.gif](/files/842d40f1a5f1a9bb60bc37a99d2a149367f6b196)![Db.gif](/files/842d40f1a5f1a9bb60bc37a99d2a149367f6b196) Det virker passende at efterligne Knuths brug af dobbelte faretegn (billedet er venligst stillet til rådighed af [dette websted](http://www.truetex.com/db.htm)) fordi materialet er noget lav-niveau og “kigger under motorhjelmen”—selv om vi håber, det kan være af interesse for modige læsere, der ønsker at forstå nogle flere detaljer.

Den følgende gennemgang er tæt baseret på det sidste eksempel på side 258 i [The TeXbook](https://www.amazon.co.uk/TeXbook-Donald-Knuth/dp/0201134489). Her har vi redigeret og sat dette eksempel om for dem, der ikke har adgang til The TeXbook:

![En redigeret og om-sat version af et eksempel fra side 258 i TeXbook](/files/adf792b5dcec16e535b58ebcd36a0acd1a3f2d50)

Tabellen i denne figur er gengivet fra en, som Knuth har stillet til rådighed, men ligesom i originalen gives der ingen forklaring på, hvordan den blev udledt. Her vil vi tage fat på det for at give yderligere detaljer, som viser, hvordan disse værdier af `\botmark`, `\topmark` og `\firstmark` blev bestemt—at frembringe disse detaljer krævede, at man undersøgte kildekoden til en TeX-motor!

Processen med at sætte værdier for `\botmark`, `\topmark` og `\firstmark` kan sammenfattes i 3 korte pseudokodefragmenter, som vist i følgende diagram og de efterfølgende forklaringer:

1. Før-indholdskontrol
2. Indholdsløkke
3. Efter-indholdskontrol

Bemærk:

* Testene i trin 1 “Før-indholdskontrol” og trin 3 “Efter-indholdskontrol” udføres én gang pr. side.
* Trin 2 “Indholdsløkke” indebærer, at TeX scanner gennem sideindholdet for at søge efter mark-noder og bruger dem til at sætte markvariabelværdierne som vist.

![Billede, der viser pseudokodeversioner af kode, der bruges til at sætte værdierne for de tre globale markvariabler, som TeX-motorer bruger](/files/11534f75d74f6693272b63ba460667ade9f6bfa9)

Hver gang TeX finder et passende sideskift, sender det indholdet af den pågældende side til endelig behandling og udfører disse (tre) markbehandlingstrin for hver side i dit dokument. Behandlingstrinnene mærket 1, 2 og 3 henvises der til i det afsluttende diagram i dette afsnit.

Bemærk, at:

* før den første side er blevet behandlet, er alle tre globale markvariabler `\botmark`, `\topmark` og `\firstmark` blevet initialiseret til at være tomme (NULL).
* de endelige værdier af `\botmark`, `\topmark` og `\firstmark` bestemt ved slutningen af *forrige* side bliver (input-)værdierne til behandlingen af den *aktuelle* side—den side, der behandles.

De følgende kodefragmenter er ***pseudokode*** afledt (opsummeret) af den faktiske kildekode til en TeX-motor. Målet er at give en kortfattet kodesammenfatning, som hjælper med at demonstrere de centrale principper.

**Trin 1: Før-indholdskontrol** Før TeX gennemgår det faktiske indhold på den aktuelle side, kontrollerer det, om den aktuelle `\botmark` værdi—dvs. resultatet af *forrige* side—er tom (NULL):

```latex
if(\botmark != NULL)
{
   \topmark = \botmark;
   \firstmark= NULL;
}
```

I denne test, hvis `\botmark` (fra *forrige* side) er *ikke* tom:

* `\topmark` for *aktuelle* side sættes til *forrige* sidens `\botmark` værdi
* `\firstmark`, for *aktuelle* side (der behandles) sættes til tom (NULL): start denne side med at antage, at der ikke er nogen `\mark` noder.

Bemærk, at denne test udføres *én gang* for hver side, der behandles.

**Trin 2: Indholdsløkke** Dernæst løber TeX gennem sideindholdet; en del af den løkke omfatter søgning efter `\mark` noder:

```latex
if(type(node)==mark_node)
{
   if(\firstmark==NULL)
   {
      \firstmark=node(text);
   }
   \botmark= node(text);
}
```

Denne test anvendes på hver mark-node, der findes inden for (eller er indeholdt i) den aktuelle side. Den forrige test (trin 1 ovenfor) kunne have sat `\firstmark` til tom, så den allerførste markering, der findes på den aktuelle side, bliver værdien af `\firstmark` og `\botmark`. Enhver *efterfølgende* `\mark` node, der opdages, mens denne løkke udføres, vil ikke ændre værdien af `\firstmark`, fordi den ikke længere er tom (NULL), men `\botmark` opdateres—fordi det er formålet med `\botmark`: at gemme den sidst sete `\mark` node for denne side.

**Trin 3: Efter-indholdskontrol** Når TeX har løbet gennem sideindholdet, anvender det følgende afsluttende test, som også udføres én gang pr. side:

```latex
if((\topmark != NULL)&&(\firstmark==NULL))
{
	\firstmark= \topmark;
}
```

* Hvis `\topmark` ikke er tom (NULL), ved vi fra trin 1, at `\botmark` for den forrige side ikke var tom (NULL).
* Hvis `\firstmark` stadig er tom, så har vi ikke set nogen `\mark` noder, fordi testen i trin 2 ikke blev udløst; følgelig, `\firstmark` sættes til værdien af `\topmark` som også er værdien af `\botmark` fra den forrige side.

Efter sekventiel anvendelse af disse tre trin for alle 6 sider i vores eksempel udledes værdierne af `\botmark`, `\topmark` og `\firstmark` ved hjælp af overgange vist i diagrammet nedenfor, hvor:

* lyseblå afrundede rektangler er de endelige markvariabelværdier for hver side
* lysegrå afrundede kvadrater repræsenterer mellemliggende værdier, der opstår under behandlingen
* mærkede pile repræsenterer ændringer i markervariabelværdier i henhold til trin 1, 2 eller 3 i diagrammet ovenfor—eller at en værdi ikke er blevet ændret af nogen af trinnene; mærket “ingen ændring”.

Det følgende diagram viser, hvordan de tre pseudokodefragmenter genererer de endelige værdier af `\botmark`, `\topmark` og `\firstmark` angivet i tabellen på side 258 i The TeXbook.

![Et overgangsdiagram til at ledsage eksemplet fra side 258 i The TeXbook, der viser interne overgange, når de globale markvariabler tildeles deres værdier](/files/d8393ebfa55cc3d6dd701631e8e362ba412ff523)


---

# 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/da/dybtgaende-artikler/23-how-does-latex-typeset-headers-and-footers.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.
