> 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/15-how-do-tex-engines-typeset-tables-2.md).

# Hvordan setter TeX-motorer tabeller 2

## Hvordan setter TeX-motorer tabeller 2

## TeX-motorer omtaler tabeller som justeringer

Innen den [dokumentasjon av TeXs kildekode](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) Knuth diskuterer ikke TeXs evne til å «sette tabeller», men beskriver i stedet TeXs algoritmer for å konstruere såkalte *justeringer*. TeXs tabellsetting er i praksis en automatisert boksjusteringsprosess: å ordne bokser (tabellceller, rader og kolonner) for å oppnå et tiltalende rektangulært rutenett eller matrise—selv om det selvfølgelig, når det gjelder TeX, finnes *mange* nyanser i denne prosessen.

Begrepet «justering» gjenspeiles også i navnene på de to kommandoene for tabellsetting som er innebygd i alle TeX-motorer:

* `\halign` (horisontal justering), og
* `\valign` (vertikal justering).

Vi skal utforske begge kommandoene gjennom hele denne artikkelserien, med start i en mer formell oversikt over formatet/strukturen til `\halign` og `\valign` kommandoene for å legge grunnlaget for senere, mer dyptgående artikler i denne serien.

### TeXs tabeller er bokser og avstand

Enkelte tabellceller inneholder typisk forskjellig innhold, som tekstlinjer, matematikk eller grafikk, noe som gir et sett tabellceller med ulike bredder, høyder eller dybder av satt materiale. På en eller annen måte må TeX arbeide med disse cellene, med varierende innholdsdimensjoner, for å konstruere den endelige tabellen der hver rad har en bestemt høyde og hver kolonne en bestemt bredde. TeX må utlede passende verdier for høyden på hver rad og bredden på hver kolonne ut fra samlingen av tabellceller i varierende størrelse.

TeX kan imidlertid ikke kjenne den egentlige størrelsen på innholdet i hver celle før innholdet er satt; derfor går TeX gjennom hele tabellen, og setter hver celle, for å få størrelsesdataene som trengs for å fullføre tabelloppsettet. Ut fra disse størrelsesdataene kan TeX bestemme riktig høyde for hver rad og bredde for hver kolonne. TeX kan også støte på tomme celler eller celler som brukeren vil la strekke seg over flere kolonner eller flere rader, og alt dette må TeX nøye ta med i beregningene sine. Etter å ha «filtrert» denne heterogene samlingen av celledata (boksstørrelser), er det først da TeX kan bestemme de endelige verdiene for kolonnebredder i en `\halign`, eller radhøyder for `\valign` og bruker disse verdiene i sluttfasen av algoritmene for tabelloppsett.

I praksis, og «under panseret», består TeXs tabellsetting av flere trinn. Grovt sett setter TeX først en «utkast»- eller «ufullstendig» versjon av tabellen mens det samler inn og behandler data om cellestørrelser—og data om eventuelle `\span` kommandoer brukt i tabellen. I de siste trinnene behandler TeX denne «ufullstendige» versjonen av tabellen på nytt, for å fastsette `\halign` kolonnebredder eller `\valign` radhøyder og oppnå det ferdige oppsettet—alt dette skal vi utforske i denne artikkelserien.

## \halign og \valign: to måter å konstruere tabeller på

Alle TeX-motorer tilbyr to *innebygd* kommandoer (primitiver) designet for tabellsetting (justeringer): `\halign` og `\valign`, som deler mange kjernefunksjoner, men også skiller seg på noen grunnleggende måter. Den viktigste forskjellen mellom `\halign` og `\valign` er hvordan de konstruerer sine respektive tabeller: rad for rad eller kolonne for kolonne:

* `\halign`: setter tabeller rad for rad for å lage individuelle rader som stables vertikalt for å produsere tabellens kolonner
* `\valign`: setter tabeller kolonne for kolonne for å lage individuelle kolonner som stables horisontalt for å produsere tabellens rader

### \halign

Følgende diagram viser konstruksjonen av en tabell laget av `\halign`. Tabellen settes rad for rad med individuelle rader stablet vertikalt. Noen konsekvenser av dette er:

* tabellkolonnene oppstår fra vertikal stabling av tabellrader
* sidebrudd kan skje mellom tabellradene
* ikke-tabulært materiale kan settes inn mellom rader (via `\nolign`, som vi skal se på senere)

![](/files/cda10b09cc64a6cd7556da4008dfd5942ce364c5)

### \valign

Følgende diagram viser konstruksjonen av en tabell laget av `\valign`. Tabellen settes kolonne for kolonne med individuelle kolonner stablet horisontalt (side om side). Noen konsekvenser av dette er:

* tabellradene oppstår fra horisontal stabling av tabellkolonner
* linjeskift kan skje mellom tabellkolonnene
* ikke-tabulært materiale kan settes inn mellom kolonner (via `\noalign`, som vi skal se på senere)

![](/files/192d83e6f4aab6187f9a38f1030f3d7c5b9f53b0)

### Eksempler

Følgende eksempel er ment å fremheve rad- *vs*. kolonne-tilnærmingen til \halign og \valign.

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% Tett tilpassede boksrammer
\setlength{\fboxsep}{0pt}

Her er en \verb|\valign|-tabell:
\begingroup
% \hsize styrer \valign
% kolonnebredder. Vi setter også
% \parindent til en mindre verdi
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr % Preambelen: dekkes senere (i stor detalj!)
A&B&C\cr % Den første KOLONNEN i denne \valign-tabellen
D&E&F\cr
G&H&I\cr
}}
\endgroup

% Merk: av grunner som forklares senere
% må \halign settes i en \vbox
Her er en \verb|\halign|-tabell: \fbox{%
\vbox{\halign{
#&#&#\cr % Preambelen: dekkes senere (i stor detalj!)
A&B&C\cr % Den første RADEN i denne \halign-tabellen
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+table+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A+%0A%5Cbegingroup%0A%25+%5Chsize+controls+the+%5Cvalign+%0A%25+column+widths.+We+also+set+%0A%25+%5Cparindent+to+a+smaller+value%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign%7B%0A%23%26%23%26%23%5Ccr+%25+The+preamble%3A+covered+later+%28in+great+detail%21%29%0AA%26B%26C%5Ccr+%25+The+first+COLUMN+of+this+%5Cvalign+table%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%0A%25+Note%3A+for+reasons+explained+later%0A%25+the+%5Chalign+has+to+be+put+in+a+%5Cvbox%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table%3A+%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign%7B%0A%23%26%23%26%23%5Ccr+%25+The+preamble%3A+covered+later+%28in+great+detail%21%29%0AA%26B%26C%5Ccr+%25+The+first+ROW+of+this+%5Chalign+table%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Dette eksemplet gir følgende resultat: ![](/files/8f400e69ef1bf9d462e3e4091e4d1c3b5909dd55)

Følgende grafikk viser en annotert versjon av tabellene som koden ovenfor produserer. Senere i denne artikkelserien skal vi ta for oss emner som:

* hva er tabellpreambler?
* hvorfor setter vi `\hsize` og `\parindent` for `\valign` tabeller?

For nå, legg bare merke til rad- kontra kolonne-tilnærmingen til `\halign` *vs*. `\valign` tabellkonstruksjon:

![](/files/99ed59a34effa489d7ec59ae03663cd382ea3cd7)

## Generell form av \halign og \valign

Til å begynne med skal vi gjennomgå de grunnleggende egenskapene og det generelle formatet til `\halign` og `\valign` men ikke (ennå) gå inn i noen reell detalj. [Som nevnt](#intro), tar vi en litt formell oversikt over form/struktur til `\halign` og `\valign` kommandoene for å legge grunnlaget for senere artikler i denne serien.

Den mest generelle formen av `\halign` og `\valign` kommandoene kan skrives slik:

`\halign` $$\langle$$⁠`valgfri spesifikasjon`⁠$$\rangle$$ { $$\langle$$⁠`preambel`⁠$$\rangle$$ $$\langle$$⁠`kropp`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`valgfri spesifikasjon`⁠$$\rangle$$ { $$\langle$$⁠`preambel`⁠$$\rangle$$ $$\langle$$⁠`kropp`⁠$$\rangle$$ }

Som du kan se, består begge `\halign` og `\valign` av tre hoveddeler:

* [$$\langle$$⁠`valgfri spesifikasjon`⁠$$\rangle$$](#optspec)
* [$$\langle$$⁠`preambel`⁠$$\rangle$$](#preamble)
* [$$\langle$$⁠`kropp`⁠$$\rangle$$](#body)

## Den $$\langle$$⁠valgfri spesifikasjon⁠$$\rangle$$

Standardstørrelsen/utstrekningen til en tabell, dens såkalte «naturlige størrelse», bestemmes av innholdet—bare for å presisere, med størrelse/utstrekning mener vi

* den *bredden* på en tabell laget av `\halign`, eller
* den *høyden* på en tabell laget av `\valign`

Et $$\langle$$⁠`valgfri spesifikasjon`⁠$$\rangle$$ kan brukes til å «overstyre» tabellens naturlige størrelse og har én av to former:

* **`til`** $$\langle$$**⁠`dimensjon`⁠**$$\rangle$$
* **`spread`** $$\langle$$**⁠`dimensjon`⁠**$$\rangle$$

der

* $$\langle$$**⁠`dimensjon`⁠**$$\rangle$$ er en lengde gitt i enheter TeX forstår, som pt, mm eller cm—lengden kan også spesifiseres som en kommando som utvider seg til en verdi angitt i passende enheter;
* **`til`** og **`spread`** er TeX-nøkkelord som angir typen «overstyring» av naturlig størrelse:
  * **`til`**: setter tabellens størrelse til den angitte $$\langle$$⁠`dimensjon`⁠$$\rangle$$ verdi
  * **`spread`**: legger den angitte $$\langle$$⁠`dimensjon`⁠$$\rangle$$ verdien til tabellens naturlige størrelse

Virkningen av en $$\langle$$⁠`valgfri spesifikasjon`⁠$$\rangle$$ avhenger av typen tabell som settes: den vil justere en `\halign` tabells naturlige *bredden*, eller en `\valign` tabells naturlige *høyden*.

Her er noen eksempler:

* `\halign **til 100pt**{...}`: setter `\halign` tabellens bredde til `100pt`
* `\valign **til 50pt**{...}`: setter `\valign` tabellens høyde til `30pt`
* `\halign **spread 30pt**{...}`: legger til 30pt på `\halign` tabellens naturlige bredde. Tilsvarende vil det å skrive **spread -30pt** redusere tabellens bredde med 30pt.
* `\valign **spread 20pt**{...}`: legger til 20pt på `\valign` tabellens naturlige høyde. Tilsvarende vil det å skrive **spread -20pt** redusere tabellens høyde med 20pt.

Følgende kode gjenbruker tabelleksemplene ovenfor, men bruker en $$\langle$$⁠`valgfri spesifikasjon`⁠$$\rangle$$ på en `\valign` og `\halign` tabell:

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% Tett tilpassede boksrammer
\setlength{\fboxsep}{0pt}

Her er en \verb|\valign|-tabell:
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to 50pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup

Her er en \verb|\halign|-tabell:
\fbox{%
\vbox{\halign to 100pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+table+example\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A+%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+50pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table%3A%0A%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign+to+100pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Dette eksemplet produserer resultatet vist nedenfor:

![](/files/4cda38a6c46fbca60bd114633af8103f6165cd9d)

—men legg merke til hvordan innholdet i begge tabellene er «klumpet sammen». Årsaken til det er fravær av fleksibel avstand (glue) som TeX kan bruke til å strekke innholdet ut for å fylle den ekstra plassen som tilbys av **`til`** $$\langle$$**⁠`dimensjon`⁠**$$\rangle$$. Her hopper vi litt frem for å nevne `\tabskip` kommandoen.

#### En innledende introduksjon til kommandoen \tabskip

Estetikken i et tabelloppsett kan kreve justering av avstanden mellom rader eller kolonner, så det er ikke overraskende at TeX-motorer tilbyr en kommando kalt `\tabskip` som lar deg gjøre det. `\tabskip` brukes til å sette (og variere) mengden fleksibel avstand («glue») som TeX plasserer mellom kolonnene i en `\halign` eller radene i en `\valign`. Senere artikler vil utforske `\tabskip` i langt større detalj.

Som et innledende eksempel bruker følgende kode en innstilling for `\tabskip` som får TeX til å sette inn noe (svært) fleksibel avstand mellom radene i en `\valign` tabell. Den fleksible avstanden lar tabellradene spre seg og fylle den ekstra plassen som oppstår ved $$\langle$$⁠`valgfri spesifikasjon`⁠$$\rangle$$ på **`til 50pt`**:

```latex
\documentclass{article}
\setlength{\fboxsep}{0pt}
\setlength{\parindent}{0pt}
\newcommand{\optspec}{\(\langle \texttt{valgfri spesifikasjon} \rangle\)}
\begin{document}
\pagestyle{empty}
Her er en \verb|\valign|-tabell:
\vspace{6pt}

\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\vspace{6pt}

Her er den samme \verb|\valign|-tabellen, men med en \optspec{} på ``\texttt{to 50pt}''. Legg merke til hvordan radene er ``klumpet sammen'' fordi det ikke finnes noe tilgjengelig ``strekkbart glue'' mellom radene:

\vspace{6pt}
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to 50pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\vspace{6pt}

Vi skal bruke \verb|\valign|-tabellen med en \optspec{} på ``\texttt{to 50pt}'', men sørge for ``fleksibel avstand'' via \verb|\tabskip|-kommandoen. Her gir \verb|\tabskip| nok ``glue'' til å gjøre det mulig for \verb|\valign|-radene å ``strekke seg ut'' og fylle eventuell ekstra plass som er tilgjengelig. Her er den ``utstrekte'' \verb|\valign|-tabellen:

\tabskip=0pt plus1fil % Dette setter \tabskip til en svært fleksibel glue
\vspace{6pt}

\def\mylen{50pt}
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to \mylen{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup
\end{document}
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Basic+example+using+tabskip+glue\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%5Csetlength%7B%5Cparindent%7D%7B0pt%7D%0A%5Cnewcommand%7B%5Coptspec%7D%7B%5C%28%5Clangle+%5Ctexttt%7Boptional+specification%7D+%5Crangle%5C%29%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cvspace%7B6pt%7D%0A%0AHere+is+the+same+%5Cverb%7C%5Cvalign%7C+table+but+with+an+%5Coptspec%7B%7D+of+%60%60%5Ctexttt%7Bto+50pt%7D%27%27.+Note+how+the+rows+are+%60%60bunched+up%27%27+because+there%27s+no+available+%60%60stretchable+glue%27%27+between+the+rows%3A+%0A%0A%5Cvspace%7B6pt%7D%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+50pt%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cvspace%7B6pt%7D%0A%0AWe%27ll+use+the+%5Cverb%7C%5Cvalign%7C+table+with+%5Coptspec%7B%7D+of+%60%60%5Ctexttt%7Bto+50pt%7D%27%27%2C+but+provide+%60%60flexible+spacing%27%27+via+the+%5Cverb%7C%5Ctabskip%7C+command.+Here%2C+%5Cverb%7C%5Ctabskip%7C+is+providing+enough+%60%60glue%27%27+to+enable+the++%5Cverb%7C%5Cvalign%7C+rows+to++%60%60stretch+out%27%27+and+fill+any+available+extra+space.+Here+is+the+%60%60stretched+out%27%27+%5Cverb%7C%5Cvalign%7C+table%3A%0A%0A%5Ctabskip%3D0pt+plus1fil+%25+This+sets+%5Ctabskip+to+a+very+flexible+glue%0A%5Cvspace%7B6pt%7D%0A%0A%5Cdef%5Cmylen%7B50pt%7D%0A%5Cbegingroup%0A%5Chsize%3D30pt+%0A%5Cparindent%3D10pt%0A%5Cfbox%7B%5Cvalign+to+%5Cmylen%7B%0A%23%26%23%26%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Dette eksemplet gir følgende resultat:

![](/files/bbe56bd9f7d355bec24c70b8943ada9283733539)

## Introduksjon til tabellens $$\langle$$⁠preamble⁠$$\rangle$$ og $$\langle$$⁠body⁠$$\rangle$$

Denne delen gir en introduksjon til tabellens $$\langle$$⁠`preambel`⁠$$\rangle$$, og *kort* berører tabellens $$\langle$$⁠`kropp`⁠$$\rangle$$ som deretter [utforskes mer detaljert](#bodydetails).

Senere artikler i denne serien vil utforske $$\langle$$⁠`preambel`⁠$$\rangle$$ og $$\langle$$⁠`kropp`⁠$$\rangle$$ mer detaljert, særlig TeXs bruk av og behandling av tabellens $$\langle$$⁠`preambel`⁠$$\rangle$$.

Som nevnt ovenfor kan den mest generelle formen av `\halign` eller `\valign` tabeller skrives som:

`\halign` $$\langle$$⁠`valgfri spesifikasjon`⁠$$\rangle$$ { $$\langle$$⁠`preambel`⁠$$\rangle$$ $$\langle$$⁠`kropp`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`valgfri spesifikasjon`⁠$$\rangle$$ { $$\langle$$⁠`preambel`⁠$$\rangle$$ $$\langle$$⁠`kropp`⁠$$\rangle$$ }

### Den $$\langle$$⁠preamble⁠$$\rangle$$

Den $$\langle$$⁠`preambel`⁠$$\rangle$$ seksjonen inneholder en enkelt $$\langle$$⁠`preambellinje`⁠$$\rangle$$ som er *avsluttet* av `\cr` kommandoen; følgelig kan $$\langle$$⁠`preambel`⁠$$\rangle$$ skrives om som:

$$\langle$$⁠`preambel`⁠$$\rangle$$=$$\langle$$⁠`preambellinje`⁠$$\rangle$$**`\cr`**

### Den $$\langle$$⁠body⁠$$\rangle$$

På samme måte bruker $$\langle$$⁠body⁠$$\rangle$$ seksjonen kan deles videre inn i én eller flere delvise «linjer», men her finnes det to alternativer for hver linje:

* en linje som består av et sett celler som danner en `\halign` rad eller `\valign` kolonne; eller
* a `\noalign` kommando som «injiserer» materiale mellom en `\halign`'s rader eller `\valign`'s kolonner.

For nå vil vi ignorere `\noalign` kommandoen (se [senere i artikkelen](#noalign)) og anta at hver linje i $$\langle$$⁠body⁠$$\rangle$$ er data for et sett med celler og *avsluttet* som er `\cr` kommandoen.

av `\noalign`, den $$\langle$$⁠`kropp`⁠$$\rangle$$ seksjonen, som representerer brukerens innhold, inneholder en sekvens av linjer, som hver av dem vil vi omtale som en $$\langle$$⁠`kroppslinje`⁠$$\rangle$$ som er *avsluttet* av dens tilhørende `\cr` kommandoen.

Den $$\langle$$⁠`kropp`⁠$$\rangle$$ skrives om som:

$$\langle$$⁠kroppslinje$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠kroppslinje$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠kroppslinje$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠kroppslinje$${}*\mathrm{N}$$⁠$$\rangle$$\cr

Setter vi dette sammen, kan vi skrive om den generelle formen av `\halign` og `\valign` slik:

`\halign` $$\langle$$⁠`valgfri spesifikasjon`⁠$$\rangle$$ { $$\langle$$⁠`preambellinje`⁠$$\rangle$$\cr $$\langle$$⁠kroppslinje$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠kroppslinje$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠kroppslinje$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠kroppslinje$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

`\valign` $$\langle$$⁠`valgfri spesifikasjon`⁠$$\rangle$$ { $$\langle$$⁠`preambellinje`⁠$$\rangle$$\cr $$\langle$$⁠kroppslinje$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠kroppslinje$${}\_2$$⁠$$\rangle$$\cr $$\langle$$⁠kroppslinje$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠kroppslinje$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

Av grunner som vil bli behandlet i senere artikler, har $$\langle$$⁠`preambel`⁠$$\rangle$$, bare en enkelt $$\langle$$⁠`preambellinje`⁠$$\rangle$$, en annen form enn alle linjene i tabell $$\langle$$⁠`kropp`⁠$$\rangle$$. Vi skal også [komme tilbake til `\noalign` kommandoen](#noalign) som også kan brukes i tabell $$\langle$$⁠`kropp`⁠$$\rangle$$.

### Den $$\langle$$⁠preambellinje⁠$$\rangle$$

Den $$\langle$$⁠`preambellinje`⁠$$\rangle$$ spiller en *avgjørende* rolle i tabellsetting fordi den gir en slags «blåkopi» som brukes til å sette innholdet—`\halign` rader eller `\valign` kolonner—som finnes i tabellen $$\langle$$⁠`kropp`⁠$$\rangle$$. $$\langle$$⁠`preambellinje`⁠$$\rangle$$ kan også inneholde celle«maler» som brukes til å konstruere radene i en `\halign` eller kolonnene i en `\valign`—et tema som vil bli utforsket i detalj.

Formålet med $$\langle$$⁠`preambellinje`⁠$$\rangle$$ er todelt:

* den bestemmer *maksimum* antall celler per rad i en `\halign` eller per kolonne i en `\valign`.
* den lagrer *cellemaler* som kan brukes til å automatisere formatering eller innholdsinnsetting i celler i tabellen $$\langle$$⁠`kropp`⁠$$\rangle$$. Cellemaler er valgfrie og kan være «tomme», eller du kan inkludere tegn eller kommandoer som TeX automatisk vil sette inn før og/eller etter det faktiske innholdet i bestemte celler i tabellen din. Dette sparer deg for bryet med å måtte skrive/inkludere disse tegnene eller kommandoene manuelt i hver celle du vil at de skal gjelde for.

**Merk**: en `\halign` rad eller `\valign` kolonne kan inneholde færre celler enn maksimumet spesifisert av $$\langle$$⁠`preambellinje`⁠$$\rangle$$ men kan ikke inneholde flere enn dette maksimumet, ellers genererer TeX en feil. For nå utelater vi detaljer om *sykliske* preambler.

Fortsetter vi med strukturdiagrammene våre, kan $$\langle$$⁠`preambellinje`⁠$$\rangle$$ for

* en `\halign` tabellen med et maksimum på $$\mathrm{K}$$ celler per *rad*, eller
* a `\valign` tabellen med et maksimum på $$\mathrm{K}$$ celler per *kolonne*

skrives som:

$$\langle$$⁠mal⁠$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠mal⁠$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠mal⁠$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠mal⁠$${}*\mathrm{K}$$⁠$$\rangle$$

der `&` er *tabulator-tegn for justering* som indikerer slutten på én celle og starten på den neste. Tradisjonelt brukes ampersand-tegnet (`&`) som justeringstab, men hvilket som helst tegn med [kategorikode](/latex/no/flere-emner/43-table-of-tex-category-codes.md) 4 kan brukes i stedet.

Bare som en påminnelse kan $$\langle$$⁠`preambel`⁠$$\rangle$$ skrives $$\langle$$⁠`preambel`⁠$$\rangle$$=$$\langle$$⁠`preambellinje`⁠$$\rangle$$**`\cr`**, eller tilsvarende

$$\langle$$⁠`preambel`⁠$$\rangle$$=$$\langle$$⁠mal⁠$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠mal⁠$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠mal⁠$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠mal⁠$${}*\mathrm{K}$$⁠$$\rangle$$**`\cr`**

#### Strukturen til hver celle $$\langle$$⁠mal⁠$$\rangle$$

Hver celle $$\langle$$⁠mal⁠$${}\_i$$⁠$$\rangle$$ skrives som:

$$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ der:

* $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ er et sett med tegn eller kommandoer (tokens) som TeX automatisk vil sette inn *før* brukerleverte innholdet for celle $$i$$;
* $$\texttt{#}$$ er en plassholder som viser hvor brukerleverte innhold skal vises i celle $$i$$. Igjen er `#` tegnet bare en *tradisjon*, hvilket som helst tegn med [kategorikode](/latex/no/flere-emner/43-table-of-tex-category-codes.md) 6 kan brukes i stedet. Merk at kategori­kode 6 brukes for makroparametere;
* $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ er et sett med tegn eller kommandoer (tokens) som TeX automatisk vil sette inn *etter* brukerleverte innholdet for celle $$i$$.

Merk at alle $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ og $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ er *valgfritt*: du trenger ikke å bruke noen tegn eller kommandoer før eller etter cellens innhold.

**Fullføring av** $$\langle$$**⁠preamble⁠**$$\rangle$$

Til slutt, ved å bruke notasjonen ovenfor, kan $$\langle$$⁠`preambel`⁠$$\rangle$$ for

* en `\halign` tabellen med et maksimum på $$\mathrm{K}$$ celler per *rad*, eller
* a `\valign` tabellen med et maksimum på $$\mathrm{K}$$ celler per *kolonne*

skrives som:

$$\langle$$⁠`preambel`⁠$$\rangle$$=$$\langle$$⁠`preambellinje`⁠$$\rangle$$`**\cr**`

eller

$$\langle$$⁠`preambel`⁠$$\rangle$$=$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}*3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*3$$⁠$$\rangle$$$$\cdots$$$$\langle$$⁠$$\texttt{U}*\mathrm{K}$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

**Den** $$\langle$$**⁠preamble⁠**$$\rangle$$ **og telling av rader og kolonner**

Et **`\halign`** tabell med en $$\langle$$⁠`preambel`⁠$$\rangle$$ som spesifiserer $$\mathrm{K}$$ celler og en $$\langle$$⁠`kropp`⁠$$\rangle$$ som inneholder $$\mathrm{N}$$ $$\langle$$⁠`kroppslinjer`⁠$$\rangle$$ vil produsere en tabell med $$\mathrm{K}$$ *kolonner* og $$\mathrm{N}$$ *rader*, som vist i følgende diagram:

![](/files/173b7a51b6b9fbb595c1078bdf3d6771fc5238f3)

Et **`\valign`** tabell med en $$\langle$$⁠`preambel`⁠$$\rangle$$ som spesifiserer $$\mathrm{K}$$ celler og en $$\langle$$⁠`kropp`⁠$$\rangle$$ som inneholder $$\mathrm{N}$$ $$\langle$$⁠`kroppslinjer`⁠$$\rangle$$ vil produsere en tabell med $$\mathrm{K}$$ *rader* og $$\mathrm{N}$$ *kolonner*, som vist i følgende diagram:

![](/files/34c87235870b6d4877c6cc889df2f3a4f7edf4f8)

### Nok teori, noen eksempler!

Som vi senere skal se i noe detalj, når TeX behandler innholdet i en tabell—tabellcellene som finnes i [$$\langle$$⁠`kropp`⁠$$\rangle$$](#body)—sjekker det om cellemaler er til stede, og disse ble definert i $$\langle$$⁠`preambel`⁠$$\rangle$$, fordi TeX leter etter eventuelle maltegn som skal settes inn før og/eller etter brukerens innhold. De følgende minimale eksemplene demonstrerer bruk av cellemaler $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ i en `\halign` og `\valign` tabellen.

#### En \halign-tabell som bruker cellemaler

Følgende eksempel demonstrerer en `\halign` tabell som bruker en cellemal til automatisk å sette inn doble anførselstegn rundt innholdet i den første cellen i hver rad: dvs. en mal som påvirker hver celle i den første kolonnen:

```latex
\documentclass{article}
\usepackage{parskip} % Sett \parindent til 0pt
% Velg en praktisk liten sidestørrelse
\usepackage[paperheight=10cm,paperwidth=12cm,textwidth=8cm]{geometry}
\setlength{\tabskip}{20pt} % Spre \halign-kolonnene
\begin{document}
\pagestyle{empty}

Her er en \verb|\halign|-tabell \textit{uten} cellemaler:

\halign{
% Ingenting før eller etter hver '#' i <preambelen>
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}

Her er den samme \verb|\halign|-tabellen, men med doble anførselstegn automatisk lagt til den første cellen i hver rad; dvs. den påvirker hver celle i den første kolonnen:

\halign{
% Sitatsmaler i preambelen:
``#''&#&#\cr % Doble anførselstegn før og etter første #
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\end{document}
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=halign+example+of+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D10cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B20pt%7D+%25+Space+out+the+%5Chalign+columns%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%0AHere+is+an+%5Cverb%7C%5Chalign%7C+table+%5Ctextit%7Bwithout%7D+cell+templates%3A+%0A%0A%5Chalign%7B%0A%25+Nothing+before+or+after+each+%27%23%27+in+the+%3Cpreamble%3E%0A%23%26%23%26%23%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%0AHere+is+the+same+%5Cverb%7C%5Chalign%7C+table+but+with+double+quotes+automatically+added+to+the+first+cell+in+each+row%3B+i.e.%2C+it+affects+every+cell+in+the+first+column%3A+%0A%0A%5Chalign%7B%0A%25+Quotation+templates+in+the+preamble%3A%0A%60%60%23%27%27%26%23%26%23%5Ccr+%25+Double+quote+marks+before+and+after+first+%23%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cend%7Bdocument%7D)

Dette eksemplet gir følgende resultat:

![](/files/126ee0d2e403aa724351d85b1709b0d149029228)

Følgende grafikk er en annotert versjon av `\halign` tabellen som ble produsert av eksemplet ovenfor; her sammenligner vi den «formelle» strukturen til en $$\langle$$⁠`preambel`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

med tre celler med den faktiske $$\langle$$⁠`preambel`⁠$$\rangle$$ på ` ``#''&#&#**\cr** `, og fremhever tilstedeværelsen eller fraværet av cellemaler:

![](/files/648dd0f0ebd74ec32a19dfe990ad31ea3d7b687b)

#### En \valign-tabell som bruker cellemaler

Følgende eksempel demonstrerer en `\valign` tabell som bruker en mal for hver celle til automatisk å sette inn sifre rundt brukerens innhold.

```latex
\documentclass{article}
\usepackage{parskip} % Sett \parindent til 0pt
% Velg en praktisk liten sidestørrelse
\usepackage[paperheight=14cm,paperwidth=12cm,textwidth=10cm]{geometry}
\setlength{\tabskip}{8pt} % Spre \valign-radene
\begin{document}
\pagestyle{empty}

Her er en \verb|\valign|-tabell \textit{uten} cellemaler:

\begingroup
\hsize=25pt
\valign{
% Ingenting før eller etter hver '#' i
% <preambelen>
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

Her er den samme \verb|\valign|-tabellen, men med cellemaler brukt til automatisk å sette inn sifre i hver celle:

\begingroup
\hsize=25pt
\valign{
% Sifre satt inn før og etter hver '#' i
% <preambelen>
1#2&3#4&5#6\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup
\end{document}
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+valign+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D14cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D+%25+Space+out+the+%5Cvalign+rows%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%0AHere+is+a+%5Cverb%7C%5Cvalign%7C+table+%5Ctextit%7Bwithout%7D+cell+templates%3A%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%25+Nothing+before+or+after+each+%27%23%27+in+%0A%25+the+%3Cpreamble%3E%0A%23%26%23%26%23%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%0AHere+is+the+same+%5Cverb%7C%5Cvalign%7C+table+but+using+cell+templates+to+automatically+insert+digits+into+every+cell%3A+%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%25+Digits+inserted+before+and+after+every+%27%23%27+in%0A%25+the+%3Cpreamble%3E%0A1%232%263%234%265%236%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Dette eksemplet gir følgende resultat:

![](/files/ce5e5f25be43cdeeefce6bbbf9c491db567a5998)

Følgende grafikk er en annotert versjon av `\valign` tabellen som ble produsert av eksemplet ovenfor; her sammenligner vi den «formelle» strukturen til en $$\langle$$⁠`preambel`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

med tre celler med den faktiske $$\langle$$⁠`preambel`⁠$$\rangle$$ på `1#2&3#4&5#6**\cr**`, og fremhever bruken av cellemaler $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$:

![](/files/4fed097fac4d8d8d643acfeb391d88980c495cb6)

Legg merke til hvordan malen for celle $$i$$ ($$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$) brukes på $$i$$te cellen i hver `\valign` kolonne, noe som gjør at alle cellene i $$i$$te *rad* blir påvirket.

#### Stilsetting av tekst ved hjelp av cellemaler

Det neste eksemplet bruker følgende $$\langle$$⁠`preambel`⁠$$\rangle$$ (cellemaler) for å stilsette teksten i hver rad eller kolonne:

`\textbf{#}&\textit{#}&\texttt{#}\cr`

Hvis vi sammenligner denne $$\langle$$⁠`preambel`⁠$$\rangle$$ med vår «formelle» struktur av en tre-cellers $$\langle$$⁠`preambel`⁠$$\rangle$$:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$`**\cr**`

vi kan se at:

$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$=`\textbf{`

$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$=`}`

$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$=`\textit{`

$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$=`}`

$$\langle$$⁠$$\texttt{U}\_3$$⁠$$\rangle$$=`\texttt{`

$$\langle$$⁠$$\texttt{V}\_3$$⁠$$\rangle$$=`}`

Legg merke til hvordan disse cellemalene, som for eksempel `\textbf{#}` ligner makroer med én parameter (celleinnholdet).

```latex
En \verb|\valign|-tabell med tekst stilisert ved hjelp av cellemaler:

\begingroup
\hsize=25pt
\valign{
\textbf{#}&\textit{#}&\texttt{#}\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

En \verb|\halign|-tabell med tekst stilisert ved hjelp av cellemaler:

\halign{
\textbf{#}&\textit{#}&\texttt{#}\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Styling+with+cell+templates\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D14cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%25+Space+out+the+%5Chalign+columns+or+%5Cvalign+rows%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0AA+%5Cverb%7C%5Cvalign%7C+table+with+text+styled+using+cell+templates%3A%0A%0A%5Cbegingroup%0A%5Chsize%3D25pt%0A%5Cvalign%7B%0A%5Ctextbf%7B%23%7D%26%5Ctextit%7B%23%7D%26%5Ctexttt%7B%23%7D%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cendgroup%0A%0AAn+%5Cverb%7C%5Chalign%7C+table+with+text+styled+using+cell+templates%3A%0A%0A%5Chalign%7B%0A%5Ctextbf%7B%23%7D%26%5Ctextit%7B%23%7D%26%5Ctexttt%7B%23%7D%5Ccr+%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%0A%5Cend%7Bdocument%7D)

Dette eksemplet gir følgende resultat:

![](/files/d8edc80fc3bbb8530e634825935fb6b9113e32b9)

## Mer detalj om tabellen $$\langle$$⁠body⁠$$\rangle$$

I delen [Introduksjon til tabellens $$\langle$$⁠`preambel`⁠$$\rangle$$ og $$\langle$$⁠`kropp`⁠$$\rangle$$](#preamble) så vi hvordan, hvis vi midlertidig ser bort fra `\noalign`, den $$\langle$$⁠`kropp`⁠$$\rangle$$ av en `\halign` eller `\valign` består av flere linjer, hver betegnet $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$, der:

* hver $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ avsluttes med `\cr` kommandoen
* hver $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ av en `\halign` er en tabellrad
* hver $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ av en `\valign` er en tabellkolonne

Rekken av linjer, $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$, der $$j=1\ldots\mathrm{N}$$, gir $$\mathrm{N}$$ rader i en `\halign` eller $$\mathrm{N}$$ kolonner for en `\valign`. Som oppsummert i det følgende diagrammet, en generell $$\langle$$⁠`preambel`⁠$$\rangle$$ som for eksempel

$$\langle$$⁠`preambel`⁠$$\rangle$$=$$\langle$$⁠$$\texttt{U}\_1$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_1$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}\_2$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_2$$⁠$$\rangle$$&$$\langle$$⁠$$\texttt{U}*3$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*3$$⁠$$\rangle$$$$\cdots$$$$\langle$$⁠$$\texttt{U}*\mathrm{K}$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

angir cellemaler for maksimalt $$\mathrm{K}$$ celler i hver av $$\mathrm{N}$$ $$\langle$$⁠`kroppslinje`⁠$$\rangle$$ oppføringene i $$\langle$$⁠`kropp`⁠$$\rangle$$:

![](/files/681e3ace1dfbfe05eb1e73e6b1cf03f3473da617)

### Strukturen til hver $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$

Hver linje $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ i tabellen $$\langle$$⁠body⁠$$\rangle$$ inneholder innhold for opptil $$\mathrm{K}$$ celler—som bestemt av tabellens $$\langle$$⁠preamble⁠$$\rangle$$—og har den generelle formen:

$$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$=$$\langle$$⁠Celle$${}\_1$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠Celle$${}\_2$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠Celle$${}*3$$⁠$$\rangle$$$$\texttt{&}$$$$\cdots$$$$\texttt{&}$$$$\langle$$⁠Celle$${}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

der:

* $$\langle$$⁠Celle$${}\_i$$⁠$$\rangle$$ representerer brukerens innhold for den $$i$$te cellen i en eller annen $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$
* den **`&`** tegnet kalles *justeringsfanen* (samme som brukt i $$\langle$$⁠preamble⁠$$\rangle$$) som markerer slutten på én celle og starten på den neste. Igjen er bruk av **`&`** bare en tradisjon (konvensjon) fordi ethvert tegn med [kategorikode](/latex/no/flere-emner/43-table-of-tex-category-codes.md) 4 kan brukes i stedet.

Selv om hver $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ kan inneholde maksimalt $$\mathrm{K}$$ celler (bestemt av $$\langle$$⁠preamble⁠$$\rangle$$) kan de inneholde *færre* enn $$\mathrm{K}$$ celler, og enhver $$\langle$$⁠Celle$${}\_i$$⁠$$\rangle$$ i $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ kan være tom.

Følgende eksempel demonstrerer en $$\langle$$⁠preamble⁠$$\rangle$$ på `#&#&#&#&#\cr` som gir rom for maksimalt 5 celler per $$\langle$$⁠innholdslinje⁠$$\rangle$$; men de typograferte tabellene inneholder linjer med færre enn 5 celler:

```latex
En \verb|\valign|-tabell med 1 til 5 celler per \textit{kolonne}:

\begingroup
% \hsize styrer \valign-kolonnebreddene (størrelsen på de typograferte linjene).
\hsize=40pt
\fbox{\valign{
% Bruk et forspill som tillater 5 celler per kolonne
% De fleste kolonner gir ikke innhold for 5 celler
#&#&#&#&#\cr% 5 celler per kolonne
\(\mathrm{Celle}{}_1\)\cr
\(\mathrm{Celle}{}_1\)&\(\mathrm{Celle}{}_2\)\cr
\(\mathrm{Celle}{}_1\)&\(\mathrm{Celle}{}_2\)&\(\mathrm{Celle}{}_3\)\cr
\(\mathrm{Celle}{}_1\)&\(\mathrm{Celle}{}_2\)&\(\mathrm{Celle}{}_3\)&\(\mathrm{Celle}{}_4\)\cr
\(\mathrm{Celle}{}_1\)&\(\mathrm{Celle}{}_2\)&\(\mathrm{Celle}{}_3\)&\(\mathrm{Celle}{}_4\)&\(\mathrm{Celle}{}_5\)\cr
}}
\endgroup

% Merk: av grunner som forklares senere
% må \halign settes i en \vbox
En \verb|\halign|-tabell med 1 til 5 celler per \textit{rad}:

\fbox{%
\vbox{\halign{
% Bruk et forspill som tillater 5 celler per rad
% De fleste rader gir ikke innhold for 5 celler
#&#&#&#&#\cr % 5 celler per rad
\(\mathrm{Celle}{}_1\)\cr
\(\mathrm{Celle}{}_1\)&\(\mathrm{Celle}{}_2\)\cr
\(\mathrm{Celle}{}_1\)&\(\mathrm{Celle}{}_2\)&\(\mathrm{Celle}{}_3\)\cr
\(\mathrm{Celle}{}_1\)&\(\mathrm{Celle}{}_2\)&\(\mathrm{Celle}{}_3\)&\(\mathrm{Celle}{}_4\)\cr
\(\mathrm{Celle}{}_1\)&\(\mathrm{Celle}{}_2\)&\(\mathrm{Celle}{}_3\)&\(\mathrm{Celle}{}_4\)&\(\mathrm{Celle}{}_5\)\cr
}}}
```

[Åpne dette eksemplet i Overleaf](/latex/no/dybdeartikler/15-how-do-tex-engines-typeset-tables-2.md)

Dette eksemplet gir følgende resultat:

![](/files/9f93078cce8bca705e3570b9d1778a4bf17c57bf)

Den neste `\halign` eksemplet demonstrerer et varierende antall celler per rad og muligheten for at celler kan være tomme—legg merke til hvordan tomme celler oppstår ved påfølgende **`&`** tegn i tabellen:

```latex
En \verb|\halign|-tabell med noen tomme celler---merk at det er påfølgende \texttt{\&}-tegn i tabellen \(\langle\texttt{body}\rangle\):

\fbox{%
\vbox{\halign{
% Bruk et forspill som tillater 5 celler per rad
% De fleste rader gir ikke innhold for 5 celler
#&#&#&#&#\cr % 5 celler per rad
\(\mathrm{Celle}{}_1\)\cr
\(\mathrm{Celle}{}_1\)&\(\mathrm{Celle}{}_2\)\cr
\(\mathrm{Celle}{}_1\)&&\(\mathrm{Celle}{}_3\)\cr
&\(\mathrm{Celle}{}_2\)&\(\mathrm{Celle}{}_3\)&\(\mathrm{Celle}{}_4\)\cr
\(\mathrm{Celle}{}_1\)&\(\mathrm{Celle}{}_2\)&&&\(\mathrm{Celle}{}_5\)\cr
}}}
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Empty+cells+Number+of+cells+per+row\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%7Bparskip%7D+%25+Set+%5Cparindent+to+0pt%0A%25+Choose+a+conveniently+small+page+size%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D8cm%5D%7Bgeometry%7D%0A%25+Space+out+the+%5Chalign+columns+and+%5Cvalign+rows%0A%5Csetlength%7B%5Ctabskip%7D%7B8pt%7D+%0A%25+Close-fitting+box+borders+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D%0A%5Cbegin%7Bdocument%7D%0AAn+%5Cverb%7C%5Chalign%7C+table+with+some+empty+cells---note+there+are+consecutive+%5Ctexttt%7B%5C%26%7D+characters+in+the+table+%5C%28%5Clangle%5Ctexttt%7Bbody%7D%5Crangle%5C%29%3A%0A%0A%5Cfbox%7B%25%0A%5Cvbox%7B%5Chalign%7B%0A%25+Use+a+preamble+that+allows+for+5+cells+per+row%0A%25+Most+rows+don%27t+provide+content+for+5+cells%0A%23%26%23%26%23%26%23%26%23%5Ccr+%25+5+cells+per+row%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%5Ccr+%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%5Ccr%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_3%5C%29%5Ccr%0A%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_3%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_4%5C%29%5Ccr%0A%5C%28%5Cmathrm%7BCell%7D%7B%7D_1%5C%29%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_2%5C%29%26%26%26%5C%28%5Cmathrm%7BCell%7D%7B%7D_5%5C%29%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Dette eksemplet gir følgende resultat:

![](/files/0aea59d173550c114f30ae28b4fef54a5d019ec8)

### Det er ikke noe spesielt med & og # i typografering av tabeller

TeXs bruk av tegnene `&` og `#` i typograferingen av `\halign`- eller `\valign`-baserte tabeller er en tradisjon som stammer fra Knuths opprinnelige plain TeX-makroer. Det er fullt mulig å bruke andre tegn enn `&` og `#` ved å tilordne de riktige kategori-kodene til dine foretrukne erstatninger, som det følgende eksemplet viser:

* å erstatte `&` med `@` ved å tilordne `@` til kategori 4
* å erstatte `#` med `|` ved å tilordne `|` til kategori 6 (som brukes for makroparametere)

Kategorendringer holdes lokale ved å bruke `\begingroup` og `\endgroup`:

```latex
\documentclass{article}
\begin{document}
\begingroup
\catcode`@=4
\catcode`|=6
\halign{
|@|@|\cr
A@B@C\cr
D@E@F\cr
}
\endgroup
\end{document}
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Tables+and+category+codes\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cbegingroup%0A%5Ccatcode%60%40%3D4%0A%5Ccatcode%60%7C%3D6%0A%5Chalign%7B%0A%7C%40%7C%40%7C%5Ccr%0AA%40B%40C%5Ccr%0AD%40E%40F%5Ccr%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

## Gjeninnføring av \noalign-kommandoen

TeX-motorer tilbyr den innebygde (primitive) `\noalign` kommandoen:

`\noalign{`$$\langle$$⁠`tokens`⁠$$\rangle$$`}`

der $$\langle$$⁠`tokens`⁠$$\rangle$$ er tegn og/eller TeX/LaTeX-kommandoer. Den `\noalign` kommandoen er utelukkende for bruk i en `\halign` eller `\valign` tabell: bruk utenfor disse vil gi en feil.

Hensikten med `\noalign` er å tillate "innsetting" av tekst og TeX/LaTeX-kommandoer *mellom* radene i en `\halign` tabell eller kolonnene i en `\valign` tabell. Den vanligste bruken av `\noalign` er å lage tabellregler (linjer):

* *horisontale* regler mellom `\halign` tabellrader
* *vertikale* regler mellom `\valign` tabellkolonner

Merk følgende:

* den `\noalign` kommandoen er ***ikke avsluttet av \*\*\*\*****&#x20;****`\cr`****&#x20;****\*\*\*\*kommandoen***
* settet av kommandoer som er tillatt innenfor `\\noalign{...}` avhenger av om det brukes i $$\langle$$⁠`kropp`⁠$$\rangle$$ av en `\halign` eller `\valign` tabellen (dvs. i vertikal eller horisontal modus).

Vi kan nå si at tabellen $$\langle$$⁠`kropp`⁠$$\rangle$$ på `\halign` eller `\valign` kan bestå av individuelle linjer $$\langle$$⁠kroppslinje$${}\_i$$⁠$$\rangle$$`\cr` med innslag av `\noalign` kommandoer; en av mange mulige kombinasjoner kan være:

`\noalign{`$$\langle$$⁠`tokens`⁠$$\rangle$$`}` $$\langle$$⁠kroppslinje$${}\_1$$⁠$$\rangle$$\cr $$\langle$$⁠kroppslinje$${}\_2$$⁠$$\rangle$$\cr `\noalign{`$$\langle$$⁠`flere token`⁠$$\rangle$$`}` $$\langle$$⁠kroppslinje$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$⁠kroppslinje$${}*\mathrm{N}$$⁠$$\rangle$$\cr `\noalign{`$$\langle$$⁠`andre token`⁠$$\rangle$$`}`

### Eksempel med \noalign

Vi skal se på andre bruksområder senere i denne artikkelserien, men her er et grunnleggende eksempel som demonstrerer oppretting av tabellregler via `\noalign`:

```latex
\setlength{\tabskip}{5pt}

Bruk av \verb|\noalign| til å plassere horisontale regler mellom radene i en \verb|\halign|-tabell:
\vspace{6pt}

\halign{%
#&#&#&#&#\cr
\noalign{\hrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\hrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\hrule}
}

Bruk av \verb|\noalign| til å plassere vertikale regler mellom kolonnene i en \verb|\valign|-tabell:
\vspace{6pt}

\begingroup % hold endringene i \parindent og \hsize lokale
\parindent=0pt
\hsize=50pt
\valign{%
#&#&#&#&#\cr
\noalign{\vrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\vrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\vrule}
}
\endgroup
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+of+the+noalign+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%0AUsing+%5Cverb%7C%5Cnoalign%7C+to+place+horizontal+rules+between+rows+of+an+%5Cverb%7C%5Chalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Chalign%7B%25%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Chrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%7D%0A%7D%0A%0AUsing+%5Cverb%7C%5Cnoalign%7C+to+place+vertical+rules+between+columns+of+a+%5Cverb%7C%5Cvalign%7C+table%3A%0A%5Cvspace%7B6pt%7D%0A%0A%5Cbegingroup+%25+keep+changes+to+%5Cparindent+and+%5Chsize+local%0A%5Cparindent%3D0pt%0A%5Chsize%3D50pt%0A%5Cvalign%7B%25%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Dette eksemplet gir følgende resultat:

![](/files/01f1276998a9e8b4db88372676a41780699f8e6d)

## Tabskip, omtalt på nytt

Vi skal se nærmere på `\tabskip` kommandoen, videreført fra [introduksjonen i en tidligere seksjon](#tabskip).

Den `\tabskip` kommandoen setter verdien av en spesiell form for "mellomrom" (glue) som brukes *utelukkende* i typografering av tabeller: hensikten er å gi mellomrom mellom tabellrader eller kolonner:

* for `\halign` tabeller: `\tabskip` glue settes inn før og etter tabellen (dvs. til venstre og høyre) og mellom tabellkolonnene
* for `\valign` tabeller: `\tabskip` glue settes inn før og etter tabellen (dvs. over og under) og mellom tabellradene

Verdien av `\tabskip` kan settes ved hjelp av LaTeX- `\setlength` kommandoen:

`\setlength{\tabskip}{`$$\langle$$⁠`glue-verdi`⁠$$\rangle$$`}`

der $$\langle$$⁠`glue-verdi`⁠$$\rangle$$ kan være:

* en fast lengde som for eksempel `5pt`, `3mm`, eller
* en endelig fleksibel glue som for eksempel `3pt plus 2pt minus 1pt`, eller
* en uendelig fleksibel glue som for eksempel `0pt plus1fill`.

Du kan også direkte sette `\tabskip` (ved å omgå `\setlength`) ved å skrive

`\tabskip`=$$\langle$$⁠`glue-verdi`⁠$$\rangle$$

Imidlertid vil enhver endring i verdien av `\tabskip` glue bare påvirke mellomrommene i tabellen når denne endringen er:

* gjort *før* den `\halign` eller `\valign` kommandoen blir behandlet, eller
* gjort innenfor tabellen $$\langle$$⁠`preambel`⁠$$\rangle$$

Forsøk på å sette `\tabskip` verdier inne i tabellinnholdet (celler i tabellen $$\langle$$⁠`kropp`⁠$$\rangle$$) *ikke vil* endrer mellomrommene i `\halign` tabellkolonner eller `\valign` tabellrader. Årsaken til denne oppførselen til `\tabskip` kan spores tilbake til rollen som spilles av $$\langle$$⁠`preambel`⁠$$\rangle$$ under typografering av tabeller—prosesser vi senere skal utforske mer detaljert.

### Å se er å tro

For å bidra til å visualisere tilstedeværelsen av ulike typer mellomrom/glue som brukes i typografering av tabeller, spesielt

* `\tabskip` glue
* `\baselineskip` glue
* manuell kerning (`\kern`)

Overleaf forberedte et LuaTeX-basert prosjekt for å fargelegge komponentene i en tabell. LuaTeX ble valgt fordi det muliggjør lavnivå ombehandling av de interne dataene/strukturene i typograferte tabeller, men vi skal ikke gå inn på disse detaljene her.

Her er noen eksempler som viser ulike anvendelser av `\tabskip`. For hvert eksempel vil vi vise den faktiske utdataen og den fargekodede versjonen produsert av LuaTeX.

### tabskip-eksempel 1

La oss undersøke bruken av `\tabskip` i en `\halign` og `\valign` tabell. Vi vil vise de faktiske typograferte tabellene, med en ramme for å visualisere størrelse og mellomrom, sammen med annoterte grafikker som inneholder fargekodede versjoner som tydelig viser størrelsen på ulike glue-/mellomromselementer i hver tabell.

For det første, den `\halign`:

```latex
% For å visualisere tabellens utstrekning legger vi en kant rundt den
\setlength{\fboxsep}{0pt} % Bruk tettsittende rammer

% Her setter vi \tabskip "direkte"
\tabskip5pt % Sett den innledende \tabskip-verdien utenfor tabellen

% For å sette en kant rundt tabellen må den lagres i en TeX-boks.
% En \halign må plasseres i en \vbox fordi \halign må
% behandles i en "vertikal modus": en \hbox vil ikke fungere fordi
% den behandles i en "horisontal modus"

\fbox{\vbox{\halign{
\tabskip10pt#&
\tabskip15pt#&
\tabskip20pt#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}}
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Tabskip+glue+in+an+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D+%25+sets+%5Cparindent+to+0pt%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%25+To+visualize+the+table%27s+extent+we%27ll+put+a+border+around+it+%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D+%25+Use+close-fitting+borders%0A%0A%25+Here+we+set+%5Ctabskip+%22directly%22%0A%5Ctabskip5pt+%25+Set+the+initial+%5Ctabskip+value+outside+the+table%0A%0A%25+To+put+a+border+around+the+table+it+has+to+be+saved+to+a+TeX+box.%0A%25+An+%5Chalign+has+to+be+placed+in+a+%5Cvbox+because+%5Chalign+must+be+%0A%25+processed+in+a+%22vertical+mode%22%3A+an+%5Chbox+will+not+work+because%0A%25+that+is+processed+in+a+%22horizontal+mode%22%0A%0A%5Cfbox%7B%5Cvbox%7B%5Chalign%7B%0A%5Ctabskip10pt%23%26%0A%5Ctabskip15pt%23%26%0A%5Ctabskip20pt%23%5Ccr%0AA%26B%26C%5Ccr%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%7D%0A%5Cend%7Bdocument%7D)

Dette eksemplet gir følgende resultat:

![](/files/57bdcd7931111b449b97c83d46d3099c63788e7f)

Den neste grafikken er en større, fargekodet og annotert versjon av tabellen produsert av det foregående eksemplet:

![](/files/9868a30e54b95b1cfc26e91ce7a9687a62a31409)

Det finnes 4 forekomster av `\tabskip` kommandoen, og hver av dem tilsvarer en bestemt plassering av mellomrom i tabellen:

1. `\tabskip5pt` brukes utenfor tabellen og setter `\tabskip` verdien som brukes før (til venstre for) den første cellen i hver rad.
2. `\tabskip10pt` settes i den første cellemalen i $$\langle$$⁠`preambel`⁠$$\rangle$$ som påvirker mellomrommet mellom $$\langle$$⁠Celle$${}\_1$$⁠$$\rangle$$ og $$\langle$$⁠Celle$${}\_2$$⁠$$\rangle$$ i hver rad.
3. `\tabskip15pt` settes i den andre cellemalen i $$\langle$$⁠`preambel`⁠$$\rangle$$ som påvirker mellomrommet mellom $$\langle$$⁠Celle$${}\_2$$⁠$$\rangle$$ og $$\langle$$⁠Celle$${}\_3$$⁠$$\rangle$$ i hver rad.
4. `\tabskip20pt` settes i den tredje, og siste, cellemalen i $$\langle$$⁠`preambel`⁠$$\rangle$$ som påvirker mellomrommet som legges til etter $$\langle$$⁠Celle$${}\_3$$⁠$$\rangle$$, den siste cellen i hver rad.

Deretter, `\valign`

```latex
\setlength{\fboxsep}{0pt} % Bruk tettsittende rammer
\tabskip5pt % Sett den innledende \tabskip-verdien utenfor tabellen

% Hold endringer i \hsize lokale (i en gruppe)
\begingroup
% \hsize bestemmer \valign-kolonnebreddene
\setlength{\hsize}{50pt}
% Fordi \valign kan plasseres i en \vbox eller \hbox kan vi bruke
% \fbox direkte
\fbox{\valign{
\tabskip10pt#&
\tabskip15pt#&
\tabskip20pt#\cr
A&B&C\cr
E&E&F\cr
G&H&I\cr
}}
\endgroup
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D+%25+sets+%5Cparindent+to+0pt%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Cfboxsep%7D%7B0pt%7D+%25+Use+close-fitting+borders%0A%5Ctabskip5pt+%25+Set+the+initial+%5Ctabskip+value+outside+the+table%0A%0A%25+Keep+changes+to+%5Chsize+local+%28in+a+group%29%0A%5Cbegingroup%0A%25+%5Chsize+determines+the+%5Cvalign+column+widths%0A%5Csetlength%7B%5Chsize%7D%7B50pt%7D+%0A%25+Because+%5Cvalign+can+be+placed+in+a+%5Cvbox+or+%5Chbox+we+can+use+%0A%25+%5Cfbox+directly%0A%5Cfbox%7B%5Cvalign%7B%0A%5Ctabskip10pt%23%26%0A%5Ctabskip15pt%23%26%0A%5Ctabskip20pt%23%5Ccr%0AA%26B%26C%5Ccr%0AE%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%7D%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Dette eksemplet gir følgende resultat:

![](/files/077585a419af914b3ab34fb2c957f67873cd5658)

Igjen er den neste grafikken en større, fargekodet og annotert versjon av tabellen produsert av det foregående eksemplet:

![](/files/96cae937a96b7754908a8befdaa247a153e9e4bc)

Som med `\halign` eksemplet, er det 4 forekomster av `\tabskip` kommandoen. Men med en `\valign` tabell blir `\tabskip` satt inn mellom tabellradene:

1. `\tabskip5pt` brukes utenfor tabellen og setter `\tabskip` verdien som brukes før (over) den første cellen i hver kolonne.
2. `\tabskip10pt` settes i den første cellemalen i $$\langle$$⁠`preambel`⁠$$\rangle$$ som påvirker mellomrommet mellom $$\langle$$⁠Celle$${}\_1$$⁠$$\rangle$$ og $$\langle$$⁠Celle$${}\_2$$⁠$$\rangle$$ i hver kolonne.
3. `\tabskip15pt` settes i den andre cellemalen i $$\langle$$⁠`preambel`⁠$$\rangle$$ som påvirker mellomrommet mellom $$\langle$$⁠Celle$${}\_2$$⁠$$\rangle$$ og $$\langle$$⁠Celle$${}\_3$$⁠$$\rangle$$ i hver kolonne.
4. `\tabskip20pt` settes i den tredje, og siste, cellemalen i $$\langle$$⁠`preambel`⁠$$\rangle$$ som påvirker mellomrommet som legges til etter $$\langle$$⁠Celle$${}\_3$$⁠$$\rangle$$, den siste cellen i hver kolonne.

**Sammendrag/konklusjoner**

* I en `\halign` tabell blir `\tabskip` settes glue til venstre og høyre for hver celle i en rad, og tabellkolonnene får dermed mer mellomrom.
* I en `\valign` tabell blir `\tabskip` settes glue over og under hver celle i en kolonne, og tabellradene får dermed mer mellomrom.

### \tabskip og \noalign

#### Ved bruk av en \halign

Følgende `\halign` eksemplet bruker `\tabskip` glue og demonstrerer også `\noalign` kommandoen, ved å bruke den til å plassere regler med mellomrom over og under radene i en `\halign` tabell. Disse reglene typograferes ved hjelp av `\hrule` (primitive) kommandoen sammen med mellomrom skapt av `\kern`:

```latex
\setlength{\tabskip}{5pt} % Sett \tabskip utenfor tabellen

\halign{
#&#&#&#&#\cr % Forspillet
\noalign{\hrule\kern2pt} % Regel med mellomrom før rad 1
1&2&3&4&5\cr % Rad 1
\noalign{\kern2pt\hrule\kern2pt} % Regel med mellomrom mellom rad 1/2
6&7&8&9&10\cr % Rad 2
\noalign{\kern2pt\hrule\kern2pt} % Regel med mellomrom mellom rad 2/3
11&12&13&14&15\cr % Rad 3
16&17&18&19&20\cr % Rad 4---ingen regler mellom rad 3/4
\noalign{\kern2pt\hrule} % Regel med mellomrom ved tabellslutt
}
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D10cm%2Ctextwidth%3D6cm%5D%7Bgeometry%7D%0A%5Cusepackage%7Bverbatim%7D+%0A%5Cusepackage%7Bparskip%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D+%25+Set+%5Ctabskip+outside+of+the+table%0A%0A%5Chalign%7B%0A%23%26%23%26%23%26%23%26%23%5Ccr+%25+The+%3Cpreamble%3E%0A%5Cnoalign%7B%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+before+row+1%0A1%262%263%264%265%5Ccr+%25+Row+1%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+between+rows+1%2F2+%0A6%267%268%269%2610%5Ccr+%25+Row+2%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%5Ckern2pt%7D+%25+Spaced+rule+between+rows+2%2F3+%0A11%2612%2613%2614%2615%5Ccr+%25+Row+3%0A16%2617%2618%2619%2620%5Ccr+%25+Row+4---no+rules+between+rows+3%2F4%0A%5Cnoalign%7B%5Ckern2pt%5Chrule%7D+%25+Space+rule+at+table+end%0A%7D%0A%5Cend%7Bdocument%7D)

Dette eksemplet produserer tabellen nedenfor, som er ytterligere annotert for å gjengi (La)TeX-koden og tallene (1) til (4) for å nummerere `\noalign` kommandoene, som inneholder regler og kerns, sammen med deres tilsvarende typograferte utdata:

![](/files/2649682a9016dde2395e788545c651e896458c20)

Den følgende grafikken viser en fargekodet versjon av tabellen, merket for å vise de ulike mellomrommene/glue-elementene i tabellen:

![](/files/9d7ee6ced4b131262200ce2cfbde9bfd7895662c)

Merk følgende:

* bruken av `\noalign` for å sette inn regler mellom bestemte rader og den manuelle bruken av `\kern` verdier for å legge inn noe mellomrom før/etter reglene. TeX-motorer setter ikke inn `\baselineskip` glue etter en typografert regel, og derfor settes mellomrom inn manuelt ved hjelp av `\kern` (andre mellomromskommandoer kunne vært brukt);
* `\baselineskip` glue ble automatisk satt inn mellom rad 3 og 4.

#### Ved bruk av en \valign

Følgende `\valign` eksemplet bruker de samme dataene som det forrige `\halign`:

```latex
\begingroup
\setlength{\parindent}{10pt}
\setlength{\hsize}{50pt}
\setlength{\tabskip}{5pt}
\valign{
#&#&#&#&#\cr
\noalign{\vrule\kern2pt}
1&2&3&4&5\cr
\noalign{\kern2pt\vrule\kern2pt}
6&7&8&9&10\cr
\noalign{\kern2pt\vrule\kern2pt}
11&12&13&14&15\cr
16&17&18&19&20\cr
\noalign{\kern2pt\vrule}
}
\endgroup
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+halign\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D12cm%2Ctextwidth%3D10cm%5D%7Bgeometry%7D%0A%5Cbegin%7Bdocument%7D%0A%5Cpagestyle%7Bempty%7D%0A%5Cbegingroup%0A%5Csetlength%7B%5Cparindent%7D%7B10pt%7D%0A%5Csetlength%7B%5Chsize%7D%7B50pt%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%5Cvalign%7B%0A%23%26%23%26%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern2pt%7D%0A1%262%263%264%265%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A6%267%268%269%2610%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%5Ckern2pt%7D%0A11%2612%2613%2614%2615%5Ccr%0A16%2617%2618%2619%2620%5Ccr%0A%5Cnoalign%7B%5Ckern2pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Dette eksemplet produserer tabellen nedenfor, som er ytterligere annotert for å gjengi (La)TeX-koden og tallene (1) til (4) for å nummerere `\noalign` kommandoene, som inneholder regler og kerns, sammen med deres tilsvarende typograferte utdata:

![](/files/9cd6855e026b46fbf4974638899d806cff683cbc)

![](/files/e6ef758431e5626d61bdfb3117cb7a8ab1e34cc2)

### En \valign-tabell med tekstlinjer

Det neste eksemplet

```latex
\setlength{\tabskip}{5pt}
\begingroup % Hold endringer i \parindent og \hsize lokale
\setlength{\parindent}{10pt}
\setlength{\hsize}{75pt}
\valign{
#&#&#\cr
\noalign{\vrule\kern5pt}
\TeX{} kan typografere svært komplekse
tabeller.&Her er litt ekstra
tekst.&Og til slutt en ekstra linje
i denne kolonnen.\cr
\noalign{\kern5pt\vrule\kern5pt}
A&B&C\cr
\noalign{\kern5pt\vrule\kern5pt}
D&E&F\cr
G&H&I\cr
\noalign{\kern5pt\vrule}
}
\endgroup
```

[Åpne dette eksemplet i Overleaf](https://www.overleaf.com/docs?engine=pdflatex\&snip_name=Example+valign+command\&snip=%5Cdocumentclass%7Barticle%7D%0A%5Cusepackage%5Bpaperheight%3D16cm%2Cpaperwidth%3D16cm%2Ctextwidth%3D12cm%5D%7Bgeometry%7D%0A%5Cbegin%7Bdocument%7D%0A%5Csetlength%7B%5Ctabskip%7D%7B5pt%7D%0A%5Cbegingroup+%25+Keep+changes+to+%5Cparindent+and+%5Chsize+local%0A%5Csetlength%7B%5Cparindent%7D%7B10pt%7D%0A%5Csetlength%7B%5Chsize%7D%7B75pt%7D%0A%5Cvalign%7B%0A%23%26%23%26%23%5Ccr%0A%5Cnoalign%7B%5Cvrule%5Ckern5pt%7D%0A%5CTeX%7B%7D+can+typeset+very+complex%0Atables.%26Here%27s+a+bit+of+extra+%0Atext.%26And%2C+finally%2C+an+extra+line%0Ain+this+column.%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%5Ckern5pt%7D%0AA%26B%26C%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%5Ckern5pt%7D%0AD%26E%26F%5Ccr%0AG%26H%26I%5Ccr%0A%5Cnoalign%7B%5Ckern5pt%5Cvrule%7D%0A%7D%0A%5Cendgroup%0A%5Cend%7Bdocument%7D)

Dette eksemplet gir følgende resultat:

## Angi radbredder og kolonnehøyder

## Mer om tabellen $$\langle$$⁠preamble⁠$$\rangle$$


---

# 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/15-how-do-tex-engines-typeset-tables-2.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.
