> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/sv/fordjupade-artiklar/15-how-do-tex-engines-typeset-tables-2.md).

# Hur TeX-motorer sätter tabeller 2

## Hur sätter TeX-motorer tabeller 2

## TeX-motorer kallar tabeller för justeringar

Inom den [dokumentation av TeX:s källkod](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) Knuth diskuterar inte TeX:s förmåga att “sätta tabeller” utan beskriver i stället TeX:s algoritmer för att konstruera så kallade *justeringar*. TeX:s sättning av tabeller är i praktiken en automatiserad process för att justera lådor: att ordna lådor (tabellceller, rader och kolumner) för att åstadkomma ett tilltalande rektangulärt rutnät eller en matris — även om det förstås, eftersom det är TeX, finns det *många* nyanser i den processen.

Termen “alignment” återspeglas också i namnen på de två kommandon för tabellsättning som är inbyggda i alla TeX-motorer:

* `\halign` (horisontell justering), och
* `\valign` (vertikal justering).

Vi kommer att utforska båda kommandona genom hela denna artikelserie, med början i en mer formell översikt av formatet/strukturen hos `\halign` och `\valign` kommandona för att lägga grunden för senare, fördjupande artiklar i denna serie.

### TeX:s tabeller är lådor och mellanrum

Enskilda tabellceller innehåller vanligtvis en mängd olika innehåll som textrader, matematik eller grafik, vilket ger en uppsättning tabellceller som har olika bredder, höjder eller djup hos det satta materialet. På något sätt behöver TeX arbeta med dessa celler, med varierande innehållsdimensioner, för att konstruera den slutliga tabellen där varje rad har en viss höjd och varje kolumn en viss bredd. TeX behöver härleda lämpliga värden för höjderna för varje rad och bredderna för varje kolumn från samlingen av tabellceller i varierande storlek.

TeX kan emellertid inte känna till den verkliga storleken på varje cells innehåll förrän det innehållet har satts; därför arbetar TeX igenom hela tabellen, sätter varje cell, för att få fram de storleksdata som krävs för att slutföra tabellayouten. Utifrån dessa storleksdata kan TeX bestämma rätt höjd för varje rad och rätt bredd för varje kolumn. TeX kan också stöta på tomma celler eller celler som användaren vill låta sträcka sig över flera kolumner eller flera rader, allt detta måste TeX noggrant ta med i beräkningarna. Efter att ha “filtrerat” denna disparata samling av cellers (lådors) storleksdata kan TeX först då bestämma de slutliga värdena för kolumnbredder i en `\halign`tabell, eller radhöjder för `\valign` och använder dessa värden i de sista stegen av sina tabellayoutalgoritmer.

I praktiken, och “under huven”, består TeX:s tabellsättning av flera steg. Översiktligt sätter TeX först en “utkast”- eller “ofullständig” version av tabellen medan det samlar in och bearbetar cellernas storleksdata — och data om eventuella `\span` kommandon som används i tabellen. `\halign` I de sista stegen bearbetar TeX på nytt den “ofullständiga” versionen av tabellen för att färdigställa `\valign` kolumnbredder eller

## \halign och \valign: två sätt att konstruera tabeller

Alla TeX-motorer tillhandahåller två *inbyggt* kommandon (primitiver) avsedda för att sätta tabeller (justeringar): `\halign` och `\valign`, som delar många kärnfunktioner men också skiljer sig åt på några grundläggande sätt. Den viktigaste skillnaden mellan `\halign` och `\valign` är hur de konstruerar sina respektive tabeller: rad för rad eller kolumn för kolumn:

* `\halign`: sätter tabeller rad för rad för att skapa enskilda rader som staplas vertikalt för att bilda tabellens kolumner
* `\valign`: sätter tabeller kolumn för kolumn för att skapa enskilda kolumner som staplas horisontellt för att bilda tabellens rader

### \halign

Följande diagram visar konstruktionen av en tabell skapad av `\halign`. Tabellen sätts rad för rad med enskilda rader staplade vertikalt. Några konsekvenser av detta är:

* tabellens kolumner uppstår genom vertikal stapling av tabellrader
* sidbrytningar kan ske mellan tabellraderna
* icke-tabellmaterial kan infogas mellan raderna (via `\nolign`, vilket vi tittar på senare)

![](/files/4f0fe66eb4b1fae85e5214b71eee6f71e947ca47)

### \valign

Följande diagram visar konstruktionen av en tabell skapad av `\valign`. Tabellen sätts kolumn för kolumn med enskilda kolumner staplade horisontellt (bredvid varandra). Några konsekvenser av detta är:

* tabellens rader uppstår genom horisontell stapling av tabellkolumner
* radbrytningar kan ske mellan tabellkolumnerna
* icke-tabellmaterial kan infogas mellan kolumnerna (via `\noalign`, vilket vi tittar på senare)

![](/files/0de57e815897da68ad0a0f7746fc728c373afbe5)

### Exempel

Följande exempel är avsett att framhäva rad *jämfört med*. kolumnmetoden hos \halign och \valign.

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% Tätt anpassade lådkanter
\setlength{\fboxsep}{0pt}

Här är en \verb|\valign|-tabell:
\begingroup
% \hsize styr \valign
% kolumnbredder. Vi sätter också
% \parindent till ett mindre värde
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr % Preambeln: behandlas senare (i stor detalj!)
A&B&C\cr % Den första KOLUMNEN i denna \valign-tabell
D&E&F\cr
G&H&I\cr
}}
\endgroup

% Observera: av skäl som förklaras senare
% måste \halign placeras i en \vbox
Här är en \verb|\halign|-tabell: \fbox{%
\vbox{\halign{
#&#&#\cr % Preambeln: behandlas senare (i stor detalj!)
A&B&C\cr % Den första RADEN i denna \halign-tabell
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[Öppna detta exempel 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)

Det här exemplet ger följande utdata: ![](/files/fcfed3a5e826c34f82d432e4816b0becee8d6b9f)

Följande grafik visar en kommenterad version av tabellerna som produceras av koden ovan. Senare i denna artikelserie kommer vi att ta upp ämnen som:

* vad är tabellpreamblar?
* varför sätter vi `\hsize` och `\parindent` för `\valign` tabeller?

För närvarande, notera bara rad- kontra kolumnansatsen hos `\halign` *jämfört med*. `\valign` tabellkonstruktionen:

![](/files/1ae8b43bad981d54cf197eab9d082451d4144738)

## Allmän form av \halign och \valign

Till att börja med kommer vi att gå igenom de grundläggande egenskaperna och den allmänna formen av `\halign` och `\valign` men utan att än gå in på några riktiga detaljer. [Som nämnt](#intro), antar vi en något formell översikt av formen/strukturen hos `\halign` och `\valign` kommandona för att lägga grunden för senare artiklar i denna serie.

Den mest allmänna formen av `\halign` och `\valign` kommandon kan skrivas så här:

`\halign` $$\langle$$⁠`valfri specifikation`⁠$$\rangle$$ { $$\langle$$⁠`preamble`⁠$$\rangle$$ $$\langle$$⁠`kropp`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`valfri specifikation`⁠$$\rangle$$ { $$\langle$$⁠`preamble`⁠$$\rangle$$ $$\langle$$⁠`kropp`⁠$$\rangle$$ }

Som du kan se består båda `\halign` och `\valign` av tre huvudsektioner:

* [$$\langle$$⁠`valfri specifikation`⁠$$\rangle$$](#optspec)
* [$$\langle$$⁠`preamble`⁠$$\rangle$$](#preamble)
* [$$\langle$$⁠`kropp`⁠$$\rangle$$](#body)

## Den $$\langle$$⁠valfri specifikation⁠$$\rangle$$

Tabellens standardstorlek/utsträckning, dess så kallade ”naturliga storlek”, bestäms av dess innehåll — för att klargöra, med storlek/utsträckning avses

* den *bredd* hos en tabell skapad av `\halign`, eller
* den *höjd* hos en tabell skapad av `\valign`

En $$\langle$$⁠`valfri specifikation`⁠$$\rangle$$ kan användas för att “skriva över” tabellens naturliga storlek och finns i någon av två former:

* **`till`** $$\langle$$**⁠`dimension`⁠**$$\rangle$$
* **`spread`** $$\langle$$**⁠`dimension`⁠**$$\rangle$$

där

* $$\langle$$**⁠`dimension`⁠**$$\rangle$$ är en längd angiven i enheter som TeX förstår, såsom pt, mm eller cm — längden kan också anges som ett kommando som expanderar till ett värde angivet i lämpliga enheter;
* **`till`** och **`spread`** är TeX-nyckelord som anger typen av “överskrivning” av den naturliga storleken:
  * **`till`**: sätter tabellens storlek till den angivna $$\langle$$⁠`dimension`⁠$$\rangle$$ värde
  * **`spread`**: lägger till den angivna $$\langle$$⁠`dimension`⁠$$\rangle$$ värdet till tabellens naturliga storlek

Effekten av en $$\langle$$⁠`valfri specifikation`⁠$$\rangle$$ beror på vilken typ av tabell som sätts: den kommer att justera en `\halign` tabellens naturliga *bredd*, eller en `\valign` tabellens naturliga *höjd*.

Här är några exempel:

* `\halign **to 100pt**{...}`: sätter `\halign` tabellens bredd till `100pt`
* `\valign **to 50pt**{...}`: sätter `\valign` tabellens höjd till `30pt`
* `\halign **spread 30pt**{...}`: lägger till 30pt till `\halign` tabellens naturliga bredd. Om man däremot skriver **spread -30pt** skulle minska tabellens bredd med 30pt.
* `\valign **spread 20pt**{...}`: lägger till 20pt till `\valign` tabellens naturliga höjd. Om man däremot skriver **spread -20pt** skulle minska tabellens höjd med 20pt.

Följande kod återanvänder tabellexemplen ovan men tillämpar en $$\langle$$⁠`valfri specifikation`⁠$$\rangle$$ på en `\valign` och `\halign` tabell:

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% Tätt anpassade lådkanter
\setlength{\fboxsep}{0pt}

Här är 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

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

[Öppna detta exempel 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)

Detta exempel ger den utmatning som visas nedan:

![](/files/d95957f9e709bd2984eff5e82c8548aba2bfd0b6)

—men lägg märke till hur innehållet i båda tabellerna är “hopträngt”. Anledningen till detta är avsaknaden av flexibelt mellanrum (glue) som TeX kan använda för att sträcka ut innehållet och fylla det extra utrymme som ges av **`till`** $$\langle$$**⁠`dimension`⁠**$$\rangle$$. Här hoppar vi fram för att nämna `\tabskip` kommandot.

#### En inledande introduktion till kommandot \tabskip

Estetiken i en tabells layout kan kräva justering av mellanrummen mellan dess rader eller kolumner, så det är inte förvånande att TeX-motorer tillhandahåller ett kommando som heter `\tabskip` vilket låter dig göra det. `\tabskip` används för att ställa in (och variera) mängden flexibelt utrymme (“glue”) som TeX placerar mellan kolumnerna i en `\halign` eller raderna i en `\valign`. Senare artiklar kommer att utforska `\tabskip` i mycket större detalj.

Som ett inledande exempel använder följande kod en inställning för `\tabskip` som gör att TeX infogar lite (mycket) flexibelt utrymme mellan raderna i en `\valign` tabell. Det flexibla utrymmet gör att tabellraderna kan sprida ut sig och fylla det extra utrymme som skapas av $$\langle$$⁠`valfri specifikation`⁠$$\rangle$$ för **`till 50pt`**:

```latex
\documentclass{article}
\setlength{\fboxsep}{0pt}
\setlength{\parindent}{0pt}
\newcommand{\optspec}{\(\langle \texttt{optional specification} \rangle\)}
\begin{document}
\pagestyle{empty}
Här är 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}

Här är samma \verb|\valign|-tabell men med en \optspec{} på ``\texttt{to 50pt}''. Lägg märke till hur raderna är ``hopträngda'' eftersom det inte finns något tillgängligt ``sträckbart glue'' mellan raderna:

\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 kommer att använda \verb|\valign|-tabellen med \optspec{} ``\texttt{to 50pt}'', men tillhandahålla ``flexibelt mellanrum'' via kommandot \verb|\tabskip|. Här ger \verb|\tabskip| tillräckligt med ``glue'' för att göra det möjligt för  \verb|\valign|-raderna att  ``sträcka ut sig'' och fylla allt tillgängligt extra utrymme. Här är den ``utsträckta'' \verb|\valign|-tabellen:

\tabskip=0pt plus1fil % Detta sätter \tabskip till ett mycket flexibelt 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}
```

[Öppna detta exempel 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)

Det här exemplet ger följande utdata:

![](/files/2b24a00830d1e365f16ac8d26849db8932832148)

## Introduktion till tabellen $$\langle$$⁠preambel⁠$$\rangle$$ och $$\langle$$⁠kropp⁠$$\rangle$$

Detta avsnitt ger en introduktion till tabellen $$\langle$$⁠`preamble`⁠$$\rangle$$, och *kortfattat* berör tabellen $$\langle$$⁠`kropp`⁠$$\rangle$$ som därefter [utforskas mer i detalj](#bodydetails).

Senare artiklar i denna serie kommer att utforska $$\langle$$⁠`preamble`⁠$$\rangle$$ och $$\langle$$⁠`kropp`⁠$$\rangle$$ mer i detalj, särskilt TeX:s användning och bearbetning av tabellen $$\langle$$⁠`preamble`⁠$$\rangle$$.

Som nämnt ovan är den mest allmänna formen av `\halign` eller `\valign` tabeller följande:

`\halign` $$\langle$$⁠`valfri specifikation`⁠$$\rangle$$ { $$\langle$$⁠`preamble`⁠$$\rangle$$ $$\langle$$⁠`kropp`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`valfri specifikation`⁠$$\rangle$$ { $$\langle$$⁠`preamble`⁠$$\rangle$$ $$\langle$$⁠`kropp`⁠$$\rangle$$ }

### Den $$\langle$$⁠preambel⁠$$\rangle$$

Den $$\langle$$⁠`preamble`⁠$$\rangle$$ sektion innehåller en enda $$\langle$$⁠`preambellinje`⁠$$\rangle$$ som är *som avslutas* av `\cr` kommandot; följaktligen kan $$\langle$$⁠`preamble`⁠$$\rangle$$ skrivas om så här:

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

### Den $$\langle$$⁠kropp⁠$$\rangle$$

På samma sätt, $$\langle$$⁠kropp⁠$$\rangle$$ sektionen kan delas upp ytterligare i en eller flera beståndsdelande ”rader”, men här finns två alternativ för varje rad:

* en rad som består av en uppsättning celler som bildar en `\halign` rad eller `\valign` kolumn; eller
* a `\noalign` kommando som “injicerar” material mellan en `\halign`'s rader eller `\valign`'s kolumner.

För närvarande bortser vi från `\noalign` kommandot (se [senare i artikeln](#noalign)) och antar att varje rad i $$\langle$$⁠kropp⁠$$\rangle$$ är data för en uppsättning celler och *som avslutas* av `\cr` kommandot.

Om vi bortser från `\noalign`, den $$\langle$$⁠`kropp`⁠$$\rangle$$ sektionen, som representerar användarens innehåll, innehåller en sekvens av rader, var och en av vilka vi kommer att hänvisa till som en $$\langle$$⁠`kroppslinje`⁠$$\rangle$$ som är *som avslutas* av dess tillhörande `\cr` kommandot.

Den $$\langle$$⁠`kropp`⁠$$\rangle$$ skrivas om så här:

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

Om vi sammanför detta kan vi skriva om den allmänna formen av `\halign` och `\valign` på följande sätt:

`\halign` $$\langle$$⁠`valfri specifikation`⁠$$\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$$⁠`valfri specifikation`⁠$$\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 skäl som kommer att behandlas i senare artiklar har den $$\langle$$⁠`preamble`⁠$$\rangle$$, bara en enda $$\langle$$⁠`preambellinje`⁠$$\rangle$$, har ett annat format än alla rader i tabellen $$\langle$$⁠`kropp`⁠$$\rangle$$. Vi kommer också att [återkomma till `\noalign` kommandot](#noalign) som också kan användas i tabellen $$\langle$$⁠`kropp`⁠$$\rangle$$.

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

Den $$\langle$$⁠`preambellinje`⁠$$\rangle$$ spelar en *avgörande* roll vid tabellsättning eftersom den tillhandahåller en sorts ”ritning” som används för att sätta innehållet —`\halign` rader eller `\valign` kolumner — som finns i tabellen $$\langle$$⁠`kropp`⁠$$\rangle$$. Paketet $$\langle$$⁠`preambellinje`⁠$$\rangle$$ kan också innehålla cell”mallar” som används för att konstruera raderna i en `\halign` eller kolumnerna i en `\valign`—ett ämne som kommer att utforskas i detalj.

Syftet med $$\langle$$⁠`preambellinje`⁠$$\rangle$$ är tvåfaldigt:

* det bestämmer *maximala* antalet celler per rad i en `\halign` eller per kolumn i en `\valign`.
* det lagrar *cellmallar* som kan användas för att automatisera formatering eller innehållsinfogning i celler som finns i tabellen $$\langle$$⁠`kropp`⁠$$\rangle$$. Cellmallar är valfria och kan vara ”tomma”, eller så kan du inkludera tecken eller kommandon som TeX automatiskt infogar före och/eller efter det faktiska innehållet i specifika celler i din tabell. Detta sparar dig besväret med att manuellt skriva/inkludera dessa tecken eller kommandon i varje cell som du vill att de ska tillämpas på.

**Obs**: en `\halign` rad eller `\valign` kolumn kan innehålla färre celler än det maxvärde som anges av $$\langle$$⁠`preambellinje`⁠$$\rangle$$ men kan inte innehålla fler än detta maxvärde, annars genererar TeX ett fel. För närvarande utelämnar vi detaljer om *cykliska* preambler.

Om vi fortsätter med våra strukturdiagram kan $$\langle$$⁠`preambellinje`⁠$$\rangle$$ för

* en `\halign` tabell med maximalt $$\mathrm{K}$$ celler per *rad*, eller
* a `\valign` tabell med maximalt $$\mathrm{K}$$ celler per *kolumn*

skrivas så här:

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

där `&` är *justeringstabulatortecken* som markerar slutet på en cell och början på nästa. Traditionellt används ampersandtecknet (`&`) [kategorikod](/latex/sv/fler-amnen/43-table-of-tex-category-codes.md) 4 skulle kunna användas i stället.

Som en påminnelse kan $$\langle$$⁠`preamble`⁠$$\rangle$$ skrivas $$\langle$$⁠`preamble`⁠$$\rangle$$=$$\langle$$⁠`preambellinje`⁠$$\rangle$$**`\cr`**, eller ekvivalent

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

#### Strukturen hos varje cell $$\langle$$⁠mall⁠$$\rangle$$

Varje cell $$\langle$$⁠mall$${}\_i$$⁠$$\rangle$$ skrivas så här:

$$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ där:

* $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ är en uppsättning tecken eller kommandon (token) som TeX automatiskt infogar *innan* användarlevererat innehåll för cellen $$i$$;
* $$\texttt{#}$$ är en platshållare som visar var användarlevererat innehåll ska visas i cellen $$i$$. Återigen är `#` tecknet bara en *tradition*, vilket som helst tecken med [kategorikod](/latex/sv/fler-amnen/43-table-of-tex-category-codes.md) 6 skulle kunna användas i stället. Observera att kategorikod 6 används för makroparametrar;
* $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ är en uppsättning tecken eller kommandon (token) som TeX automatiskt infogar *efter* användarlevererat innehåll för cellen $$i$$.

Observera att alla $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ och $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ är *valfri*: du behöver inte använda några tecken eller kommandon före eller efter cellens innehåll.

**För att slutföra** $$\langle$$**⁠preambel⁠**$$\rangle$$

Slutligen, med notationen ovan, kommer $$\langle$$⁠`preamble`⁠$$\rangle$$ för

* en `\halign` tabell med maximalt $$\mathrm{K}$$ celler per *rad*, eller
* a `\valign` tabell med maximalt $$\mathrm{K}$$ celler per *kolumn*

skrivas så här:

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

eller

$$\langle$$⁠`preamble`⁠$$\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$$**⁠preambel⁠**$$\rangle$$ **och räkning av rader och kolumner**

En **`\halign`** tabell med en $$\langle$$⁠`preamble`⁠$$\rangle$$ som anger $$\mathrm{K}$$ celler och en $$\langle$$⁠`kropp`⁠$$\rangle$$ som innehåller $$\mathrm{N}$$ $$\langle$$⁠`kroppslinjer`⁠$$\rangle$$ kommer att ge en tabell med $$\mathrm{K}$$ *kolumner* och $$\mathrm{N}$$ *rader*, som visas i följande diagram:

![](/files/6720852a4298400c649d6174c95b86436ecf528c)

Ett **`\valign`** tabell med en $$\langle$$⁠`preamble`⁠$$\rangle$$ som anger $$\mathrm{K}$$ celler och en $$\langle$$⁠`kropp`⁠$$\rangle$$ som innehåller $$\mathrm{N}$$ $$\langle$$⁠`kroppslinjer`⁠$$\rangle$$ kommer att ge en tabell med $$\mathrm{K}$$ *rader* och $$\mathrm{N}$$ *kolumner*, som visas i följande diagram:

![](/files/c4e1cc98e4531cbb99e7c47ea91e7f7eaf439018)

### Nog med teori, några exempel!

Som vi senare kommer att se i detalj, när TeX bearbetar en tabells innehåll — tabellceller som finns i [$$\langle$$⁠`kropp`⁠$$\rangle$$](#body) — kontrollerar det om det finns cellmallar, vilka definierades i $$\langle$$⁠`preamble`⁠$$\rangle$$, eftersom TeX letar efter några malltoken som ska infogas före och/eller efter användarens innehåll. Följande minimala exempel visar användningen av cellmallar $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ i en `\halign` och `\valign` tabellen.

#### En \halign-tabell med cellmallar

Följande exempel visar en `\halign` tabell som använder en cellmall för att automatiskt infoga dubbla citattecken runt innehållet i den första cellen i varje rad: det vill säga en mall som påverkar varje cell i den första kolumnen:

```latex
\documentclass{article}
\usepackage{parskip} % Sätt \parindent till 0pt
% Välj en lämpligt liten sidstorlek
\usepackage[paperheight=10cm,paperwidth=12cm,textwidth=8cm]{geometry}
\setlength{\tabskip}{20pt} % Sprid ut \halign-kolumnerna
\begin{document}
\pagestyle{empty}

Här är en \verb|\halign|-tabell \textit{utan} cellmallar:

\halign{
% Inget före eller efter varje '#' i <preambeln>
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}

Här är samma \verb|\halign|-tabell men med dubbla citattecken automatiskt tillagda i den första cellen i varje rad; det vill säga, den påverkar varje cell i den första kolumnen:

\halign{
% Citatteckenmallar i preambeln:
``#''&#&#\cr % Dubbla citattecken före och efter första #
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\end{document}
```

[Öppna detta exempel 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)

Det här exemplet ger följande utdata:

![](/files/eb5bfdaa5485a5cd3e3dc6faac92c6706bace42e)

Följande grafik är en kommenterad version av `\halign` tabell som produceras av exemplet ovan; här jämför vi den ”formella” strukturen hos en tabell med tre celler $$\langle$$⁠`preamble`⁠$$\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 den faktiska $$\langle$$⁠`preamble`⁠$$\rangle$$ för ` ``#''&#&#**\cr** `, vilket belyser närvaron, eller frånvaron, av cellmallar:

![](/files/5d27a1a4c85415eeb4e210f2342cd1e65faeaead)

#### En \valign-tabell med cellmallar

Följande exempel visar en `\valign` tabell som använder en mall för varje cell för att automatiskt infoga siffror runt användarens innehåll.

```latex
\documentclass{article}
\usepackage{parskip} % Sätt \parindent till 0pt
% Välj en lämpligt liten sidstorlek
\usepackage[paperheight=14cm,paperwidth=12cm,textwidth=10cm]{geometry}
\setlength{\tabskip}{8pt} % Sprid ut \valign-raderna
\begin{document}
\pagestyle{empty}

Här är en \verb|\valign|-tabell \textit{utan} cellmallar:

\begingroup
\hsize=25pt
\valign{
% Inget före eller efter varje '#' i
% preambeln
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

Här är samma \verb|\valign|-tabell men med cellmallar som automatiskt infogar siffror i varje cell:

\begingroup
\hsize=25pt
\valign{
% Siffror infogas före och efter varje '#' i
% preambeln
1#2&3#4&5#6\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup
\end{document}
```

[Öppna detta exempel 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)

Det här exemplet ger följande utdata:

![](/files/75d7c594f793263e90060e25b3f32f7d6b65c3d3)

Följande grafik är en kommenterad version av `\valign` tabell som produceras av exemplet ovan; här jämför vi den ”formella” strukturen hos en tabell med tre celler $$\langle$$⁠`preamble`⁠$$\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 den faktiska $$\langle$$⁠`preamble`⁠$$\rangle$$ för `1#2&3#4&5#6**\cr**`, vilket belyser användningen av cellmallar $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$:

![](/files/90bb4a871ee026366c017519a33084d309e40e51)

Lägg märke till hur mallen för cell $$i$$ ($$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$) tillämpas på $$i$$n:e cellen i varje `\valign` kolumn, vilket gör att alla celler i den $$i$$n:e *rad* påverkas.

#### Formatering av text med cellmallar

Nästa exempel använder följande $$\langle$$⁠`preamble`⁠$$\rangle$$ (cellmallar) för att formatera texten i varje rad eller kolumn:

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

Om vi jämför detta $$\langle$$⁠`preamble`⁠$$\rangle$$ med vår ”formella” struktur hos en tabell med tre celler $$\langle$$⁠`preamble`⁠$$\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 att:

$$\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$$=`}`

Observera hur dessa cellmallar, såsom `\textbf{#}` liknar makron med en enda parameter (cellinnehållet).

```latex
En \verb|\valign|-tabell med text formaterad med cellmallar:

\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 text formaterad med cellmallar:

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

[Öppna detta exempel 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)

Det här exemplet ger följande utdata:

![](/files/da51dca7875263969d4bd3fbf73b546d9581d2d8)

## Mer detaljer om tabellen $$\langle$$⁠kropp⁠$$\rangle$$

I avsnittet [Introduktion till tabellen $$\langle$$⁠`preamble`⁠$$\rangle$$ och $$\langle$$⁠`kropp`⁠$$\rangle$$](#preamble) såg vi hur, om vi tillfälligt bortser från `\noalign`, den $$\langle$$⁠`kropp`⁠$$\rangle$$ av en `\halign` eller `\valign` tabell består av flera rader, var och en betecknad $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$, där:

* varje $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ avslutas med `\cr` kommandot
* varje $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ av en `\halign` är en tabellrad
* varje $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ av en `\valign` är en tabellkolumn

Sekvensen av rader, $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$, där $$j=1\ldots\mathrm{N}$$, ger $$\mathrm{N}$$ rader i en `\halign` eller $$\mathrm{N}$$ kolumner för en `\valign`. Som sammanfattas i följande diagram, en generell $$\langle$$⁠`preamble`⁠$$\rangle$$ såsom

$$\langle$$⁠`preamble`⁠$$\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**`

anger cellmallar för högst $$\mathrm{K}$$ celler i varje av de $$\mathrm{N}$$ $$\langle$$⁠`kroppslinje`⁠$$\rangle$$ posterna i $$\langle$$⁠`kropp`⁠$$\rangle$$:

![](/files/38d5dcfe3d19531facd573edccde8be66a97c6c0)

### Strukturen för varje $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$

Varje rad $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ i tabellen $$\langle$$⁠kropp⁠$$\rangle$$ innehåller innehåll för upp till $$\mathrm{K}$$ celler—som bestäms av tabellens $$\langle$$⁠preambel⁠$$\rangle$$—och har den allmänna formen:

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

där:

* $$\langle$$⁠Cell$${}\_i$$⁠$$\rangle$$ representerar användarens innehåll för $$i$$e cellen i någon $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$
* den **`&`** tecknet kallas *justeringstabulatorn* (samma som används i $$\langle$$⁠preambel⁠$$\rangle$$) som signalerar slutet på en cell och början på nästa. Återigen är användningen av **`&`** är bara en tradition (konvention) eftersom vilket tecken som helst med [kategorikod](/latex/sv/fler-amnen/43-table-of-tex-category-codes.md) 4 skulle kunna användas i stället.

Även om varje $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ kan innehålla högst $$\mathrm{K}$$ celler (bestämt av $$\langle$$⁠preambel⁠$$\rangle$$) kan de innehålla *färre* än $$\mathrm{K}$$ celler och vilken $$\langle$$⁠Cell$${}\_i$$⁠$$\rangle$$ i $$\langle$$⁠kroppslinje$${}\_j$$⁠$$\rangle$$ kan vara tom.

Följande exempel visar en $$\langle$$⁠preambel⁠$$\rangle$$ för `#&#&#&#&#\cr` vilket ger högst 5 celler per $$\langle$$⁠innehållsrad⁠$$\rangle$$; dock innehåller den satta tabellen rader med färre än 5 celler:

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

\begingroup
% \hsize styr \valign-kolumnbredderna (de satta radernas storlek).
\hsize=40pt
\fbox{\valign{
% Använd ett förled som tillåter 5 celler per kolumn
% De flesta kolumner ger inte innehåll för 5 celler
#&#&#&#&#\cr% 5 celler per kolumn
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)&\(\mathrm{Cell}{}_5\)\cr
}}
\endgroup

% Observera: av skäl som förklaras senare
% måste \halign placeras i en \vbox
En \verb|\halign|-tabell med 1 till 5 celler per \textit{rad}:

\fbox{%
\vbox{\halign{
% Använd ett förled som tillåter 5 celler per rad
% De flesta rader ger inte innehåll för 5 celler
#&#&#&#&#\cr % 5 celler per rad
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)&\(\mathrm{Cell}{}_5\)\cr
}}}
```

[Öppna detta exempel i Overleaf](/latex/sv/fordjupade-artiklar/15-how-do-tex-engines-typeset-tables-2.md)

Det här exemplet ger följande utdata:

![](/files/25ffa2488abb8a562bbe86381040b8e8d9c06e31)

Nästa `\halign` exempel visar ett varierande antal celler per rad och att celler kan vara tomma—observera hur tomma celler skapas av efterföljande **`&`** tecken i tabellen:

```latex
En \verb|\halign|-tabell med några tomma celler—observera att det finns på varandra följande \texttt{\&}-tecken i tabellen \(\langle\texttt{body}\rangle\):

\fbox{%
\vbox{\halign{
% Använd ett förled som tillåter 5 celler per rad
% De flesta rader ger inte innehåll för 5 celler
#&#&#&#&#\cr % 5 celler per rad
\(\mathrm{Cell}{}_1\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)\cr
\(\mathrm{Cell}{}_1\)&&\(\mathrm{Cell}{}_3\)\cr
&\(\mathrm{Cell}{}_2\)&\(\mathrm{Cell}{}_3\)&\(\mathrm{Cell}{}_4\)\cr
\(\mathrm{Cell}{}_1\)&\(\mathrm{Cell}{}_2\)&&&\(\mathrm{Cell}{}_5\)\cr
}}}
```

[Öppna detta exempel 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)

Det här exemplet ger följande utdata:

![](/files/0408fa8aa4888d08732599a80ace8e6e5f060716)

### Det finns inget särskilt med & och # i tabellsättning

TeX:s användning av tecknen `&` och `#` i sättningen av `\halign`- eller `\valign`-baserade tabeller är en tradition som härstammar från Knuths ursprungliga plain TeX-makron. Det går mycket väl att använda andra tecken än `&` och `#` genom att tilldela lämpliga kategorikoder till dina föredragna ersättare, som följande exempel visar:

* att ersätta `&` med `@` genom att tilldela `@` till kategorikod 4
* att ersätta `#` med `|` genom att tilldela `|` till kategorikod 6 (som används för makroparametrar)

Kategoriändringar hålls lokala genom att använda `\begingroup` och `\endgroup`:

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

[Öppna detta exempel 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)

## Återinför kommandot \noalign

TeX-motorer tillhandahåller den inbyggda (primitiva) `\noalign` kommandot:

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

där $$\langle$$⁠`tokens`⁠$$\rangle$$ är tecken och/eller TeX-/LaTeX-kommandon. Den `\noalign` kommandot är endast avsett för användning inom en `\halign` eller `\valign` tabell: att använda det utanför dessa ger ett fel.

Syftet med `\noalign` är att tillåta "insättning" av text och TeX-/LaTeX-kommandon *mellan* raderna i en `\halign` tabell eller kolumnerna i en `\valign` tabell. Den vanligaste användningen av `\noalign` är att skapa tabelllinjer (regler):

* *horisontella* regler mellan `\halign` tabellrader
* *vertikala* regler mellan `\valign` tabellkolumner

Observera följande:

* den `\noalign` kommandot är ***inte avslutas med\*\*\*\*****&#x20;****`\cr`****&#x20;****\*\*\*\*kommandot***
* mängden kommandon som tillåts inom `\\noalign{...}` beror på om det används i $$\langle$$⁠`kropp`⁠$$\rangle$$ av en `\halign` eller `\valign` tabell (dvs. i vertikalt eller horisontellt läge).

Vi kan nu säga att tabellen $$\langle$$⁠`kropp`⁠$$\rangle$$ för `\halign` eller `\valign` kan bestå av enskilda rader $$\langle$$⁠kroppslinje$${}\_i$$⁠$$\rangle$$`\cr` varvade med `\noalign` kommandon; en av många möjligheter/kombinationer kan vara:

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

### Exempel med \noalign

Vi kommer att titta på andra användningsfall senare i denna artikelserie, men här är ett grundläggande exempel som visar hur man skapar tabelllinjer via `\noalign`:

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

Användning av \verb|\noalign| för att placera horisontella linjer mellan raderna 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}
}

Användning av \verb|\noalign| för att placera vertikala linjer mellan kolumnerna i en \verb|\valign|-tabell:
\vspace{6pt}

\begingroup % håll ändringar av \parindent och \hsize lokala
\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
```

[Öppna detta exempel 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)

Det här exemplet ger följande utdata:

![](/files/498b3147eacd54f5c66fb9f865d8e94e9f5a3e31)

## Tabskip återbesökt

Vi ska titta närmare på `\tabskip` kommandot, med utgångspunkt i [inledningen i ett tidigare avsnitt](#tabskip).

Den `\tabskip` kommandot sätter värdet för en särskild form av "mellanrum" (glue) som används *uteslutande* vid tabellsättning: dess syfte är att ge mellanrum mellan tabellrader eller kolumner:

* för `\halign` tabeller: `\tabskip` glue infogas före och efter tabellen (dvs. till vänster och höger) samt mellan tabellkolumnerna
* för `\valign` tabeller: `\tabskip` glue infogas före och efter tabellen (dvs. ovanför och nedanför) samt mellan tabellraderna

Värdet på `\tabskip` kan ställas in med LaTeX `\setlength` kommandot:

`\setlength{\tabskip}{`$$\langle$$⁠`gluevärde`⁠$$\rangle$$`}`

där $$\langle$$⁠`gluevärde`⁠$$\rangle$$ kan vara:

* en fast längd såsom `5pt`, `3mm`, eller
* ett ändligt flexibelt glue såsom `3pt plus 2pt minus 1pt`, eller
* ett oändligt flexibelt glue såsom `0pt plus1fill`.

Du kan också direkt ställa in `\tabskip` (förbigår `\setlength`) genom att skriva

`\tabskip`=$$\langle$$⁠`gluevärde`⁠$$\rangle$$

Alla ändringar av värdet på `\tabskip` glue påverkar dock endast tabellmellanrummet när ändringen:

* görs *innan* den `\halign` eller `\valign` kommandot ska behandlas, eller
* görs inom tabellen $$\langle$$⁠`preamble`⁠$$\rangle$$

Försök att sätta `\tabskip` värden inne i tabellinnehållet (cellerna i tabell $$\langle$$⁠`kropp`⁠$$\rangle$$) *inte kommer att* ändrar mellanrummet i `\halign` tabellkolumner eller `\valign` tabellrader. Anledningen till detta beteende hos `\tabskip` kan spåras till den roll som spelas av $$\langle$$⁠`preamble`⁠$$\rangle$$ under tabellsättning—processer som vi senare ska utforska mer i detalj.

### Att se är att tro

För att hjälpa till att visualisera förekomsten av olika typer av mellanrum/glue som används vid tabellsättning, särskilt

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

har Overleaf förberett ett LuaTeX-baserat projekt för att färglägga komponenterna i en tabell. LuaTeX valdes eftersom det möjliggör lågnivå-ombearbetning av de interna data-/strukturerna hos satta tabeller, men vi kommer inte att gå in på de detaljerna här.

Här är några exempel som visar olika tillämpningar av `\tabskip`. För varje exempel visar vi det faktiska resultatet och den färglagda versionen som produceras av LuaTeX.

### \tabskip exempel 1

Låt oss undersöka användningen av `\tabskip` i en `\halign` och `\valign` tabell. Vi visar de faktiskt satta tabellerna, med en ram för att visualisera deras storlek och mellanrum, tillsammans med kommenterade grafikbilder som innehåller färglagda versioner som tydligt visar storleken på olika glue/mellanrum i varje tabell.

Först, `\halign`:

```latex
% För att visualisera tabellens utbredning lägger vi en ram runt den
\setlength{\fboxsep}{0pt} % Använd tätt sittande ramar

% Här ställer vi in \tabskip "direkt"
\tabskip5pt % Ställ in det initiala \tabskip-värdet utanför tabellen

% För att lägga en ram runt tabellen måste den sparas i en TeX-låda.
% En \halign måste placeras i en \vbox eftersom \halign måste vara
% bearbetad i ett "vertikalt läge": en \hbox fungerar inte eftersom
% den bearbetas i ett "horisontellt läge"

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

[Öppna detta exempel 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)

Det här exemplet ger följande utdata:

![](/files/940139bfe0608ebb96d707d915263d3fd7c59a10)

Nästa grafik är en större, färglagd och kommenterad version av tabellen som producerades av föregående exempel:

![](/files/0e349ea1d145afc739fc33042fafe755d2083a6a)

Det finns 4 förekomster av `\tabskip` kommandot, var och en motsvarar en viss plats för mellanrum i tabellen:

1. `\tabskip5pt` används utanför tabellen och ställer in `\tabskip` värdet som tillämpas före (till vänster om) den första cellen i varje rad.
2. `\tabskip10pt` ställs in i den första cellmallen för $$\langle$$⁠`preamble`⁠$$\rangle$$ vilket påverkar utrymmet mellan $$\langle$$⁠Cell$${}\_1$$⁠$$\rangle$$ och $$\langle$$⁠Cell$${}\_2$$⁠$$\rangle$$ i varje rad.
3. `\tabskip15pt` ställs in i den andra cellmallen för $$\langle$$⁠`preamble`⁠$$\rangle$$ vilket påverkar utrymmet mellan $$\langle$$⁠Cell$${}\_2$$⁠$$\rangle$$ och $$\langle$$⁠Cell$${}\_3$$⁠$$\rangle$$ i varje rad.
4. `\tabskip20pt` ställs in i den tredje och sista cellmallen för $$\langle$$⁠`preamble`⁠$$\rangle$$ vilket påverkar utrymmet som läggs till efter $$\langle$$⁠Cell$${}\_3$$⁠$$\rangle$$, den sista cellen i varje rad.

Därefter, `\valign`

```latex
\setlength{\fboxsep}{0pt} % Använd tätt sittande ramar
\tabskip5pt % Ställ in det initiala \tabskip-värdet utanför tabellen

% Håll ändringar av \hsize lokala (i en grupp)
\begingroup
% \hsize bestämmer \valign-kolumnbredderna
\setlength{\hsize}{50pt}
% Eftersom \valign kan placeras i en \vbox eller \hbox kan vi använda
% \fbox direkt
\fbox{\valign{
\tabskip10pt#&
\tabskip15pt#&
\tabskip20pt#\cr
A&B&C\cr
E&E&F\cr
G&H&I\cr
}}
\endgroup
```

[Öppna detta exempel 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)

Det här exemplet ger följande utdata:

![](/files/b99ee4235a34bb1d1dd44d32a61debba5f452c6d)

Återigen är nästa grafik en större, färglagd och kommenterad version av tabellen som producerades av föregående exempel:

![](/files/13bcc56e6d4ff5cb43de57e543d82a7ae6317bc8)

Liksom med `\halign` exemplet finns det 4 förekomster av `\tabskip` kommandot. Men med en `\valign` tabell `\tabskip` infogas mellan tabellraderna:

1. `\tabskip5pt` används utanför tabellen och ställer in `\tabskip` värdet som tillämpas före (ovanför) den första cellen i varje kolumn.
2. `\tabskip10pt` ställs in i den första cellmallen för $$\langle$$⁠`preamble`⁠$$\rangle$$ vilket påverkar utrymmet mellan $$\langle$$⁠Cell$${}\_1$$⁠$$\rangle$$ och $$\langle$$⁠Cell$${}\_2$$⁠$$\rangle$$ i varje kolumn.
3. `\tabskip15pt` ställs in i den andra cellmallen för $$\langle$$⁠`preamble`⁠$$\rangle$$ vilket påverkar utrymmet mellan $$\langle$$⁠Cell$${}\_2$$⁠$$\rangle$$ och $$\langle$$⁠Cell$${}\_3$$⁠$$\rangle$$ i varje kolumn.
4. `\tabskip20pt` ställs in i den tredje och sista cellmallen för $$\langle$$⁠`preamble`⁠$$\rangle$$ vilket påverkar utrymmet som läggs till efter $$\langle$$⁠Cell$${}\_3$$⁠$$\rangle$$, den sista cellen i varje kolumn.

**Sammanfattning/slutsatser**

* I en `\halign` tabell `\tabskip` placeras glue till vänster och höger om varje cell i en rad, vilket ger avstånd mellan tabellkolumnerna.
* I en `\valign` tabell `\tabskip` placeras glue ovanför och nedanför varje cell i en kolumn, vilket ger avstånd mellan tabellraderna.

### \tabskip and \noalign

#### Användning av en \halign

Följande `\halign` exempel använder `\tabskip` glue och visar också `\noalign` kommandot, och använder det för att placera avståndssatta linjer ovanför och nedanför raderna i en `\halign` tabell. Dessa linjer sätts med `\hrule` (primitiva) kommandot tillsammans med mellanrum som skapas av `\kern`:

```latex
\setlength{\tabskip}{5pt} % Ställ in \tabskip utanför tabellen

\halign{
#&#&#&#&#\cr % Förledet <preamble>
\noalign{\hrule\kern2pt} % Avståndssatt linje före rad 1
1&2&3&4&5\cr % Rad 1
\noalign{\kern2pt\hrule\kern2pt} % Avståndssatt linje mellan raderna 1/2
6&7&8&9&10\cr % Rad 2
\noalign{\kern2pt\hrule\kern2pt} % Avståndssatt linje mellan raderna 2/3
11&12&13&14&15\cr % Rad 3
16&17&18&19&20\cr % Rad 4—inga linjer mellan raderna 3/4
\noalign{\kern2pt\hrule} % Linje med mellanrum vid tabellslutet
}
```

[Öppna detta exempel 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)

Detta exempel ger tabellen som visas nedan, vilken har kommenterats ytterligare för att återge (La)TeX-koden och siffrorna (1) till (4) för att numrera `\noalign` kommandon, som innehåller linjer och kernar, tillsammans med deras motsvarande satta utdata:

![](/files/80d6b72189e7e27ed8ec7b3de597086cc72b7a1a)

Följande grafik visar en färglagd version av tabellen märkt för att visa de olika mellanrummen/glue i tabellen:

![](/files/22215ffce89727eb21048dbd7d28cc4ee9ac93ff)

Observera följande:

* användningen av `\noalign` för att infoga linjer mellan vissa rader och den manuella användningen av `\kern` värden för att lägga till lite mellanrum före/efter linjerna. TeX-motorer infogar inte `\baselineskip` glue efter en satt linje, därför infogas mellanrum manuellt med `\kern` (andra mellanrums-kommandon kunde användas);
* `\baselineskip` glue infogades automatiskt mellan raderna 3 och 4.

#### Användning av en \valign

Följande `\valign` exempel använder samma data som det föregående `\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
```

[Öppna detta exempel 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)

Detta exempel ger tabellen som visas nedan, vilken har kommenterats ytterligare för att återge (La)TeX-koden och siffrorna (1) till (4) för att numrera `\noalign` kommandon, som innehåller linjer och kernar, tillsammans med deras motsvarande satta utdata:

![](/files/ca5da5d3d952fda47585987a11c7fea95d7cc717)

![](/files/726326fa5e63e09a2cb95c73900e2980c5fe332b)

### En \valign-tabell med textrader

Nästa exempel

```latex
\setlength{\tabskip}{5pt}
\begingroup % Håll ändringar av \parindent och \hsize lokala
\setlength{\parindent}{10pt}
\setlength{\hsize}{75pt}
\valign{
#&#&#\cr
\noalign{\vrule\kern5pt}
\TeX{} kan sätta mycket komplexa
tabeller.&Här är lite extra
text.&Och slutligen en extra rad
i denna kolumn.\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
```

[Öppna detta exempel 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)

Det här exemplet ger följande utdata:

## Ställa in radbredder och kolumnhöjder

## Mer om tabellen $$\langle$$⁠preambel⁠$$\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/sv/fordjupade-artiklar/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.
