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

# Πώς στοιχειοθετούν οι μηχανές TeX πίνακες 2

## Πώς στοιχειοθετούν οι μηχανές TeX πίνακες 2

## Οι μηχανές TeX αναφέρονται στους πίνακες ως ευθυγραμμίσεις

Μέσα στην [τεκμηρίωση του πηγαίου κώδικα του TeX](https://www.overleaf.com/latex/examples/typeset-the-source-code-documentation-for-tex-e-tex-or-pdftex/qkgfgyspnhcv) Ο Knuth δεν συζητά την ικανότητα του TeX να «στοιχειοθετεί πίνακες», αλλά, αντίθετα, περιγράφει τους αλγορίθμους του TeX για την κατασκευή των λεγόμενων *ευθυγραμμίσεων*. Η στοιχειοθεσία πινάκων από το TeX είναι, στην πράξη, μια αυτοματοποιημένη διαδικασία ευθυγράμμισης κουτιών: η διάταξη κουτιών (κελιών πίνακα, γραμμών και στηλών) για την επίτευξη ενός ευχάριστου ορθογώνιου πλέγματος ή πίνακα—αν και, φυσικά, επειδή μιλάμε για TeX υπάρχουν *πολλές* λεπτομέρειες σε αυτήν τη διαδικασία.

Ο όρος «ευθυγράμμιση» αντικατοπτρίζεται επίσης στα ονόματα των δύο εντολών στοιχειοθέτησης πινάκων που είναι ενσωματωμένες σε όλες τις μηχανές TeX:

* `\halign` (οριζόντια ευθυγράμμιση), και
* `\valign` (κατακόρυφη ευθυγράμμιση).

Θα εξερευνήσουμε και τις δύο εντολές σε όλη αυτή τη σειρά άρθρων, ξεκινώντας με μια πιο τυπική επισκόπηση της μορφής/δομής των `\halign` και `\valign` εντολών, ώστε να θέσουμε τα θεμέλια για μεταγενέστερα, αναλυτικά, άρθρα σε αυτή τη σειρά.

### Οι πίνακες του TeX είναι κουτιά και αποστάσεις

Τα επιμέρους κελιά ενός πίνακα συνήθως περιέχουν ποικιλία περιεχομένου, όπως σειρές κειμένου, μαθηματικά ή γραφικά, κάτι που παράγει ένα σύνολο κελιών πίνακα με διαφορετικά πλάτη, ύψη ή βάθη στοιχειοθετημένου υλικού. Κάπως, το TeX πρέπει να δουλέψει με αυτά τα κελιά, με διαφορετικές διαστάσεις περιεχομένου, για να κατασκευάσει τον τελικό πίνακα όπου κάθε σειρά έχει ένα συγκεκριμένο ύψος και κάθε στήλη ένα συγκεκριμένο πλάτος. Το TeX χρειάζεται να συναγάγει κατάλληλες τιμές για τα ύψη κάθε σειράς και τα πλάτη κάθε στήλης από τη συλλογή των κελιών πίνακα μεταβλητού μεγέθους.

Ωστόσο, το TeX δεν μπορεί να γνωρίζει το αληθινό μέγεθος του περιεχομένου κάθε κελιού μέχρι να στοιχειοθετηθεί το περιεχόμενο αυτό· κατά συνέπεια, το TeX διατρέχει ολόκληρο τον πίνακα, στοιχειοθετώντας κάθε κελί, για να αποκτήσει τα δεδομένα μεγέθους που απαιτούνται για την ολοκλήρωση της διάταξης του πίνακα. Από αυτά τα δεδομένα μεγέθους, το TeX μπορεί να προσδιορίσει το σωστό ύψος για κάθε σειρά και το πλάτος για κάθε στήλη. Το TeX μπορεί επίσης να συναντήσει κενά κελιά ή κελιά που ο χρήστης θέλει να εκτείνονται σε πολλές στήλες ή σε πολλές σειρές, όλα τα οποία το TeX πρέπει να ενσωματώσει προσεκτικά στους υπολογισμούς του. Αφού «φιλτραριστεί» αυτή η ανομοιογενής συλλογή δεδομένων μεγέθους κελιών (κουτιών), μόνο τότε το TeX είναι σε θέση να προσδιορίσει τις τελικές τιμές για τα πλάτη στηλών σε ένα `\halign`, ή τα ύψη σειρών για `\valign` και να χρησιμοποιήσει αυτές τις τιμές στα τελικά στάδια των αλγορίθμων του για τη διάταξη του πίνακα.

Στην πράξη, και «υπό το καπό», η στοιχειοθέτηση πινάκων στο TeX αποτελείται από διάφορα βήματα. Σε γενικές γραμμές, το TeX πρώτα στοιχειοθετεί μια «πρόχειρη» ή «ελλιπή» έκδοση του πίνακα, ενώ συλλέγει και επεξεργάζεται τα δεδομένα μεγέθους των κελιών—καθώς και δεδομένα για τυχόν `\span` εντολές που χρησιμοποιήθηκαν στον πίνακα. Στα τελικά βήματα, το TeX επανεπεξεργάζεται εκείνη την «ελλιπή» έκδοση του πίνακα, ώστε να οριστικοποιήσει `\halign` τα πλάτη στηλών ή `\valign` τα ύψη σειρών και να επιτύχει την ολοκληρωμένη διάταξη—όλα αυτά θα τα εξερευνήσουμε σε αυτή τη σειρά άρθρων.

## \halign και \valign: δύο τρόποι για την κατασκευή πινάκων

Όλες οι μηχανές TeX παρέχουν δύο *ενσωματωμένες* εντολές (πρωτογενείς) σχεδιασμένες για τη στοιχειοθέτηση πινάκων (ευθυγραμμίσεων): `\halign` και `\valign`, οι οποίες μοιράζονται πολλά βασικά χαρακτηριστικά αλλά διαφέρουν επίσης σε ορισμένους θεμελιώδεις τρόπους. Η βασική διαφορά μεταξύ `\halign` και `\valign` είναι ο τρόπος με τον οποίο κατασκευάζουν τους αντίστοιχους πίνακές τους: γραμμή-γραμμή ή στήλη-στήλη:

* `\halign`: στοιχειοθετεί πίνακες με βάση τις γραμμές, για να δημιουργήσει επιμέρους γραμμές που στοιβάζονται κατακόρυφα και παράγουν τις στήλες του πίνακα
* `\valign`: στοιχειοθετεί πίνακες με βάση τις στήλες, για να δημιουργήσει επιμέρους στήλες που στοιβάζονται οριζόντια και παράγουν τις γραμμές του πίνακα

### \halign

Το ακόλουθο διάγραμμα απεικονίζει την κατασκευή ενός πίνακα που δημιουργήθηκε από `\halign`. Ο πίνακας στοιχειοθετείται γραμμή-γραμμή με τις επιμέρους γραμμές στοιβαγμένες κατακόρυφα. Ορισμένες συνέπειες αυτού είναι οι εξής:

* οι στήλες του πίνακα προκύπτουν από την κατακόρυφη στοίβαξη των γραμμών του πίνακα
* οι αλλαγές σελίδας μπορούν να συμβούν ανάμεσα στις γραμμές του πίνακα
* μη πινακοειδές υλικό μπορεί να εισαχθεί ανάμεσα στις γραμμές (μέσω του `\nolign`, το οποίο θα δούμε αργότερα)

![](/files/b6681c890661c78e12b318ea29b5949b97dfef95)

### \valign

Το ακόλουθο διάγραμμα απεικονίζει την κατασκευή ενός πίνακα που δημιουργήθηκε από `\valign`. Ο πίνακας στοιχειοθετείται στήλη-στήλη με τις επιμέρους στήλες στοιβαγμένες οριζόντια (πλάι-πλάι). Ορισμένες συνέπειες αυτού είναι οι εξής:

* οι γραμμές του πίνακα προκύπτουν από την οριζόντια στοίβαξη των στηλών του πίνακα
* οι αλλαγές γραμμής μπορούν να συμβούν ανάμεσα στις στήλες του πίνακα
* μη πινακοειδές υλικό μπορεί να εισαχθεί ανάμεσα στις στήλες (μέσω του `\noalign`, το οποίο θα δούμε αργότερα)

![](/files/6e8e560591710413b8be33adb52b70f15557a60d)

### Παραδείγματα

Το ακόλουθο παράδειγμα έχει ως στόχο να αναδείξει την προσέγγιση ανά γραμμή *έναντι*. στήλη των \halign και \valign.

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% Πλαίσια κουτιών που εφαρμόζουν στενά
\setlength{\fboxsep}{0pt}

Ακολουθεί ένας πίνακας \verb|\valign|:
\begingroup
% Το \hsize ελέγχει τα
% πλάτη στηλών του \valign. Ορίζουμε επίσης το
% \parindent σε μικρότερη τιμή
\hsize=30pt
\parindent=10pt
\fbox{\valign{
#&#&#\cr % Το προοίμιο: θα καλυφθεί αργότερα (με μεγάλη λεπτομέρεια!)
A&B&C\cr % Η πρώτη ΣΤΗΛΗ αυτού του πίνακα \valign
D&E&F\cr
G&H&I\cr
}}
\endgroup

% Σημείωση: για λόγους που εξηγούνται αργότερα
% το \halign πρέπει να τοποθετηθεί σε ένα \vbox
Ακολουθεί ένας πίνακας \verb|\halign|: \fbox{%
\vbox{\halign{
#&#&#\cr % Το προοίμιο: θα καλυφθεί αργότερα (με μεγάλη λεπτομέρεια!)
A&B&C\cr % Η πρώτη ΓΡΑΜΜΗ αυτού του πίνακα \halign
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει το ακόλουθο αποτέλεσμα: ![](/files/a39195f9c29d149b0357868afc3a7c152c3da54e)

Το ακόλουθο γραφικό δείχνει μια σχολιασμένη έκδοση των πινάκων που παράγονται από τον παραπάνω κώδικα. Αργότερα σε αυτή τη σειρά άρθρων θα αντιμετωπίσουμε θέματα όπως:

* τι είναι τα προοίμια πινάκων;
* γιατί ορίζουμε `\hsize` και `\parindent` για `\valign` πίνακες;

Προς το παρόν, απλώς σημειώστε την προσέγγιση ανά γραμμή έναντι ανά στήλη των `\halign` *έναντι*. `\valign` της κατασκευής πινάκων:

![](/files/7f111f45c2ab4e4fc8374eab9222535fadb4ad45)

## Γενική μορφή των \halign και \valign

Για αρχή θα επανεξετάσουμε τις βασικές ιδιότητες και τη γενική μορφή των `\halign` και `\valign` αλλά χωρίς ακόμη να μπούμε σε ουσιαστική λεπτομέρεια. [Όπως σημειώθηκε](#intro), υιοθετούμε μια ελαφρώς τυπική επισκόπηση της μορφής/δομής των `\halign` και `\valign` εντολών, ώστε να θέσουμε θεμέλια για τα επόμενα άρθρα σε αυτή τη σειρά.

Η πιο γενική μορφή των `\halign` και `\valign` εντολών μπορεί να γραφτεί ως εξής:

`\halign` $$\langle$$⁠`προαιρετική προδιαγραφή`⁠$$\rangle$$ { $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ $$\langle$$⁠`σώμα`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`προαιρετική προδιαγραφή`⁠$$\rangle$$ { $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ $$\langle$$⁠`σώμα`⁠$$\rangle$$ }

Όπως μπορείτε να δείτε, και οι δύο `\halign` και `\valign` αποτελούνται από τρία κύρια τμήματα:

* [$$\langle$$⁠`προαιρετική προδιαγραφή`⁠$$\rangle$$](#optspec)
* [$$\langle$$⁠`προοίμιο`⁠$$\rangle$$](#preamble)
* [$$\langle$$⁠`σώμα`⁠$$\rangle$$](#body)

## Το $$\langle$$⁠προαιρετική προδιαγραφή⁠$$\rangle$$

Το προεπιλεγμένο μέγεθος/έκταση ενός πίνακα, το λεγόμενο «φυσικό μέγεθος», καθορίζεται από το περιεχόμενό του—για να το διευκρινίσουμε, με μέγεθος/έκταση αναφερόμαστε στο

* το *πλάτος* ενός πίνακα που παράγεται από `\halign`, ή
* το *ύψος* ενός πίνακα που παράγεται από `\valign`

Ένα $$\langle$$⁠`προαιρετική προδιαγραφή`⁠$$\rangle$$ μπορεί να χρησιμοποιηθεί για να «υπερκαλύψει» το φυσικό μέγεθος του πίνακα και παίρνει μία από δύο μορφές:

* **`στο`** $$\langle$$**⁠`διάσταση`⁠**$$\rangle$$
* **`spread`** $$\langle$$**⁠`διάσταση`⁠**$$\rangle$$

όπου

* $$\langle$$**⁠`διάσταση`⁠**$$\rangle$$ είναι ένα μήκος δοσμένο σε μονάδες που καταλαβαίνει το TeX, όπως pt, mm ή cm—το μήκος μπορεί επίσης να δοθεί ως εντολή που αναπτύσσεται σε τιμή καθορισμένη σε κατάλληλες μονάδες;
* **`στο`** και **`spread`** είναι λέξεις-κλειδιά του TeX που προσδιορίζουν τον τύπο της «υπερκάλυψης» του φυσικού μεγέθους:
  * **`στο`**: ορίζει το μέγεθος του πίνακα στη συγκεκριμένη $$\langle$$⁠`διάσταση`⁠$$\rangle$$ τιμή
  * **`spread`**: προσθέτει τη συγκεκριμένη $$\langle$$⁠`διάσταση`⁠$$\rangle$$ τιμή στο φυσικό μέγεθος του πίνακα

Το αποτέλεσμα μιας $$\langle$$⁠`προαιρετική προδιαγραφή`⁠$$\rangle$$ εξαρτάται από τον τύπο του πίνακα που στοιχειοθετείται: θα προσαρμόσει ένα `\halign` φυσικό *πλάτος*, ή ένα `\valign` φυσικό *ύψος*.

Ορίστε μερικά παραδείγματα:

* `\halign **to 100pt**{...}`: ορίζει το `\halign` πλάτος του πίνακα σε `100pt`
* `\valign **to 50pt**{...}`: ορίζει το `\valign` το ύψος του πίνακα σε `30pt`
* `\halign **spread 30pt**{...}`: προσθέτει 30pt στο `\halign` φυσικό πλάτος του πίνακα. Αντίθετα, η γραφή **spread -30pt** θα μείωνε το πλάτος του πίνακα κατά 30pt.
* `\valign **spread 20pt**{...}`: προσθέτει 20pt στο `\valign` φυσικό ύψος του πίνακα. Αντίθετα, η γραφή **spread -20pt** θα μείωνε το ύψος του πίνακα κατά 20pt.

Ο ακόλουθος κώδικας επαναχρησιμοποιεί τα παραδείγματα πινάκων παραπάνω αλλά εφαρμόζει μια $$\langle$$⁠`προαιρετική προδιαγραφή`⁠$$\rangle$$ σε έναν `\valign` και `\halign` πίνακα:

```latex
\documentclass{article}
\begin{document}
\pagestyle{empty}
% Πλαίσια κουτιών που εφαρμόζουν στενά
\setlength{\fboxsep}{0pt}

Ακολουθεί ένας πίνακας \verb|\valign|:
\begingroup
\hsize=30pt
\parindent=10pt
\fbox{\valign to 50pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}
\endgroup

Ακολουθεί ένας πίνακας \verb|\halign|:
\fbox{%
\vbox{\halign to 100pt{
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}}}
\end{document}
```

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει το αποτέλεσμα που φαίνεται παρακάτω:

![](/files/7fe2ca05c824daab327c02e314ea139155ff897e)

—αλλά σημειώστε πώς το περιεχόμενο και των δύο πινάκων είναι «συμπιεσμένο μαζί». Ο λόγος γι’ αυτό είναι η απουσία ευέλικτης απόστασης (glue) που το TeX μπορεί να χρησιμοποιήσει για να τεντώσει το περιεχόμενο ώστε να γεμίσει τον επιπλέον χώρο που παρέχει το **`στο`** $$\langle$$**⁠`διάσταση`⁠**$$\rangle$$. Εδώ θα κάνουμε ένα άλμα μπροστά για να αναφέρουμε το `\tabskip` εντολή.

#### Μια αρχική εισαγωγή στην εντολή \tabskip

Η αισθητική της διάταξης ενός πίνακα μπορεί να απαιτεί προσαρμογή της απόστασης μεταξύ των σειρών ή των στηλών του, οπότε, όχι απροσδόκητα, οι μηχανές TeX παρέχουν μια εντολή που ονομάζεται `\tabskip` η οποία σας επιτρέπει να το κάνετε αυτό. `\tabskip` χρησιμοποιείται για να ορίσει (και να μεταβάλει) την ποσότητα του ευέλικτου χώρου («glue») που το TeX τοποθετεί ανάμεσα στις στήλες ενός `\halign` ή στις σειρές ενός `\valign`. Μεταγενέστερα άρθρα θα εξερευνήσουν το `\tabskip` πολύ πιο αναλυτικά.

Ως εισαγωγικό παράδειγμα, ο ακόλουθος κώδικας χρησιμοποιεί μια ρύθμιση για το `\tabskip` η οποία κάνει το TeX να εισαγάγει λίγο (πολύ) ευέλικτο χώρο ανάμεσα στις σειρές ενός `\valign` πίνακα. Αυτός ο ευέλικτος χώρος επιτρέπει στις σειρές του πίνακα να απλωθούν και να γεμίσουν τον επιπλέον χώρο που δημιουργείται από το $$\langle$$⁠`προαιρετική προδιαγραφή`⁠$$\rangle$$ του **`to 50pt`**:

```latex
\documentclass{article}
\setlength{\fboxsep}{0pt}
\setlength{\parindent}{0pt}
\newcommand{\optspec}{\(\langle \texttt{προαιρετική προδιαγραφή} \rangle\)}
\begin{document}
\pagestyle{empty}
Ακολουθεί ένας πίνακας \verb|\valign|:
\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}

Ακολουθεί ο ίδιος πίνακας \verb|\valign| αλλά με \optspec{} του «\texttt{to 50pt}». Σημειώστε πώς οι σειρές είναι «μαζεμένες» επειδή δεν υπάρχει διαθέσιμο «ελαστικό glue» ανάμεσα στις σειρές:

\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}

Θα χρησιμοποιήσουμε τον πίνακα \verb|\valign| με \optspec{} του «\texttt{to 50pt}», αλλά θα παρέχουμε «ευέλικτη απόσταση» μέσω της εντολής \verb|\tabskip|. Εδώ, η \verb|\tabskip| παρέχει αρκετό «glue» ώστε να επιτρέψει στις σειρές του \verb|\valign| να «απλωθούν» και να γεμίσουν τυχόν διαθέσιμο επιπλέον χώρο. Ακολουθεί ο «απλωμένος» πίνακας \verb|\valign|:

\tabskip=0pt plus1fil % Αυτό ορίζει το \tabskip σε ένα πολύ ευέλικτο 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}
```

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει το ακόλουθο αποτέλεσμα:

![](/files/1fa34453dd985adcb843aaf73cfa913013a511d0)

## Εισαγωγή στο προοίμιο του πίνακα $$\langle$$⁠προοίμιο⁠$$\rangle$$ και $$\langle$$⁠σώμα⁠$$\rangle$$

Αυτή η ενότητα παρέχει μια εισαγωγή στο προοίμιο του πίνακα $$\langle$$⁠`προοίμιο`⁠$$\rangle$$, και *συνοπτικά* θίγει το σώμα του πίνακα $$\langle$$⁠`σώμα`⁠$$\rangle$$ το οποίο στη συνέχεια [εξετάζεται πιο αναλυτικά](#bodydetails).

Μεταγενέστερα άρθρα αυτής της σειράς θα εξερευνήσουν το $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ και $$\langle$$⁠`σώμα`⁠$$\rangle$$ πιο αναλυτικά, ιδίως τη χρήση και την επεξεργασία από το TeX του προοιμίου του πίνακα $$\langle$$⁠`προοίμιο`⁠$$\rangle$$.

Όπως σημειώθηκε παραπάνω, η πιο γενική μορφή των `\halign` ή `\valign` πινάκων μπορεί να γραφτεί ως εξής:

`\halign` $$\langle$$⁠`προαιρετική προδιαγραφή`⁠$$\rangle$$ { $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ $$\langle$$⁠`σώμα`⁠$$\rangle$$ }

`\valign` $$\langle$$⁠`προαιρετική προδιαγραφή`⁠$$\rangle$$ { $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ $$\langle$$⁠`σώμα`⁠$$\rangle$$ }

### Το $$\langle$$⁠προοίμιο⁠$$\rangle$$

Το $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ ενότητα περιέχει μία μόνο $$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$ η οποία *τερματίζεται* από την `\cr` εντολή· κατά συνέπεια, το $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ μπορεί να ξαναγραφεί ως εξής:

$$\langle$$⁠`προοίμιο`⁠$$\rangle$$=$$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$**`\cr`**

### Το $$\langle$$⁠σώμα⁠$$\rangle$$

Ομοίως, η $$\langle$$⁠σώμα⁠$$\rangle$$ ενότητα μπορεί να αναλυθεί περαιτέρω σε μία ή περισσότερες συνιστώσες «γραμμές», αλλά εδώ υπάρχουν δύο επιλογές για κάθε γραμμή:

* μια γραμμή που αποτελείται από ένα σύνολο κελιών που σχηματίζουν ένα `\halign` σειρά ή `\valign` στήλη· ή
* a `\noalign` εντολή η οποία «εισάγει» υλικό ανάμεσα στις `\halign`'s γραμμές ή `\valign`'s στήλες.

Για τους παρόντες σκοπούς θα αγνοήσουμε την `\noalign` εντολή (δείτε [αργότερα στο άρθρο](#noalign)) και ας υποθέσουμε ότι κάθε γραμμή του $$\langle$$⁠σώμα⁠$$\rangle$$ είναι δεδομένα για ένα σύνολο κελιών και *τερματίζεται* από `\cr` εντολή.

Αγνοώντας το `\noalign`, το $$\langle$$⁠`σώμα`⁠$$\rangle$$ τμήμα, το οποίο αντιπροσωπεύει το περιεχόμενο του χρήστη, περιέχει μια ακολουθία γραμμών, καθεμία από τις οποίες θα αναφερόμαστε ως $$\langle$$⁠`γραμμή σώματος`⁠$$\rangle$$ η οποία *τερματίζεται* ακολουθείται από την αντίστοιχη `\cr` εντολή.

Το $$\langle$$⁠`σώμα`⁠$$\rangle$$ μπορεί να ξαναγραφεί ως εξής:

$$\langle$$γραμμή σώματος$${}\_1$$⁠$$\rangle$$\cr $$\langle$$γραμμή σώματος$${}\_2$$⁠$$\rangle$$\cr $$\langle$$γραμμή σώματος$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$γραμμή σώματος$${}*\mathrm{N}$$⁠$$\rangle$$\cr

Συνδυάζοντας αυτά, μπορούμε να ξαναγράψουμε τη γενική μορφή των `\halign` και `\valign` ως εξής:

`\halign` $$\langle$$⁠`προαιρετική προδιαγραφή`⁠$$\rangle$$ { $$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$\cr $$\langle$$γραμμή σώματος$${}\_1$$⁠$$\rangle$$\cr $$\langle$$γραμμή σώματος$${}\_2$$⁠$$\rangle$$\cr $$\langle$$γραμμή σώματος$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$γραμμή σώματος$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

`\valign` $$\langle$$⁠`προαιρετική προδιαγραφή`⁠$$\rangle$$ { $$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$\cr $$\langle$$γραμμή σώματος$${}\_1$$⁠$$\rangle$$\cr $$\langle$$γραμμή σώματος$${}\_2$$⁠$$\rangle$$\cr $$\langle$$γραμμή σώματος$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$γραμμή σώματος$${}*\mathrm{N}$$⁠$$\rangle$$\cr }

Για λόγους που θα αντιμετωπιστούν σε μεταγενέστερα άρθρα, η $$\langle$$⁠`προοίμιο`⁠$$\rangle$$, μόλις μία $$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$, έχει διαφορετική μορφή από όλες τις γραμμές στο τμήμα $$\langle$$⁠`σώμα`⁠$$\rangle$$. Θα [ξαναδούμε το `\noalign` εντολή](#noalign) το οποίο μπορεί επίσης να χρησιμοποιηθεί μέσα στο τμήμα $$\langle$$⁠`σώμα`⁠$$\rangle$$.

### Το $$\langle$$⁠γραμμή προοιμίου⁠$$\rangle$$

Το $$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$ παίζει έναν *ζωτικό* ρόλο στη στοιχειοθέτηση πινάκων επειδή παρέχει ένα είδος «σχεδίου» που χρησιμοποιείται για τη στοιχειοθέτηση του περιεχομένου—`\halign` γραμμών ή `\valign` στηλών—που περιέχεται στον πίνακα $$\langle$$⁠`σώμα`⁠$$\rangle$$. Το $$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$ μπορεί επίσης να περιέχει «πρότυπα» κελιών που χρησιμοποιούνται για την κατασκευή των γραμμών ενός `\halign` ή των στηλών ενός `\valign`—ένα θέμα που θα εξεταστεί αναλυτικά.

Ο σκοπός του $$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$ είναι διπλός:

* καθορίζει τον *μέγιστο* αριθμό κελιών ανά γραμμή ενός `\halign` ή ανά στήλη ενός `\valign`.
* αποθηκεύει *πρότυπα κελιών* τα οποία μπορούν να χρησιμοποιηθούν για να αυτοματοποιήσουν τη μορφοποίηση ή την ενσωμάτωση περιεχομένου μέσα στα κελιά που περιέχονται στον πίνακα $$\langle$$⁠`σώμα`⁠$$\rangle$$. Τα πρότυπα κελιών είναι προαιρετικά και μπορούν να είναι «κενά», ή μπορείτε να συμπεριλάβετε χαρακτήρες ή εντολές που το TeX θα εισαγάγει αυτόματα πριν από και/ή μετά το πραγματικό περιεχόμενο συγκεκριμένων κελιών στον πίνακά σας. Αυτό σας γλιτώνει από την πλήξη του να γράφετε/περιλαμβάνετε χειροκίνητα εκείνους τους χαρακτήρες ή εντολές σε κάθε κελί στο οποίο θέλετε να εφαρμόζονται.

**Σημείωση**: ένα `\halign` σειρά ή `\valign` συγκεκριμένη στήλη μπορεί να περιέχει λιγότερα κελιά από το μέγιστο που ορίζεται από το $$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$ αλλά δεν μπορεί να περιέχει περισσότερα από αυτό το μέγιστο, διαφορετικά το TeX παράγει σφάλμα. Για τους παρόντες σκοπούς παραλείπουμε τις λεπτομέρειες των *κυκλικών* προοιμίων.

Συνεχίζοντας με τα διαγράμματα δομής μας, το $$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$ για

* ένα `\halign` πίνακα με μέγιστο $$\mathrm{K}$$ κελιά ανά *γραμμή*, ή
* a `\valign` πίνακα με μέγιστο $$\mathrm{K}$$ κελιά ανά *στήλη*

μπορεί να γραφτεί ως εξής:

$$\langle$$⁠πρότυπο$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠πρότυπο$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠πρότυπο$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠πρότυπο$${}*\mathrm{K}$$⁠$$\rangle$$

όπου `&` είναι ο *χαρακτήρας καρτέλας ευθυγράμμισης* που υποδεικνύει το τέλος ενός κελιού και την αρχή του επόμενου. Παραδοσιακά, ο χαρακτήρας ampersand (`&`) χρησιμοποιείται ως καρτέλα ευθυγράμμισης, αλλά οποιοσδήποτε χαρακτήρας με [κωδικό κατηγορίας](/latex/el/perissotera-themata/43-table-of-tex-category-codes.md) 4 θα μπορούσε να χρησιμοποιηθεί αντί γι’ αυτό.

Απλώς ως υπενθύμιση, το $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ μπορεί να γραφτεί $$\langle$$⁠`προοίμιο`⁠$$\rangle$$=$$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$**`\cr`**&#x3AE; ισοδύναμα

$$\langle$$⁠`προοίμιο`⁠$$\rangle$$=$$\langle$$⁠πρότυπο$${}\_1$$⁠$$\rangle$$&$$\langle$$⁠πρότυπο$${}\_2$$⁠$$\rangle$$&$$\langle$$⁠πρότυπο$${}*3$$⁠$$\rangle$$ $$\cdots$$ &$$\langle$$⁠πρότυπο$${}*\mathrm{K}$$⁠$$\rangle$$**`\cr`**

#### Δομή κάθε κελιού $$\langle$$⁠πρότυπο⁠$$\rangle$$

Κάθε κελί $$\langle$$⁠πρότυπο$${}\_i$$⁠$$\rangle$$ μπορεί να γραφτεί ως εξής:

$$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ όπου:

* $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ είναι ένα σύνολο χαρακτήρων ή εντολών (διακριτών μονάδων) που το TeX θα εισαγάγει αυτόματα *πριν από* το περιεχόμενο του κελιού που παρέχεται από τον χρήστη $$i$$;
* $$\texttt{#}$$ είναι ένα σύμβολο κράτησης θέσης, που δείχνει πού πρέπει να εμφανιστεί το περιεχόμενο που παρέχεται από τον χρήστη στο κελί $$i$$. Και πάλι, ο `#` χαρακτήρας είναι απλώς μια *παράδοση*, οποιοσδήποτε χαρακτήρας με [κωδικό κατηγορίας](/latex/el/perissotera-themata/43-table-of-tex-category-codes.md) θα μπορούσε να χρησιμοποιηθεί αντί γι’ αυτό. Σημειώστε ότι ο κωδικός κατηγορίας 6 χρησιμοποιείται για παραμέτρους μακροεντολών;
* $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ είναι ένα σύνολο χαρακτήρων ή εντολών (διακριτών μονάδων) που το TeX θα εισαγάγει αυτόματα *μετά* το περιεχόμενο του κελιού που παρέχεται από τον χρήστη $$i$$.

Σημειώστε ότι όλα τα $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$ και $$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ είναι *προαιρετικά*: δεν χρειάζεται να χρησιμοποιήσετε κανέναν χαρακτήρα ή εντολή πριν ή μετά το περιεχόμενο του κελιού.

**Ολοκλήρωση του** $$\langle$$**⁠προοίμιο⁠**$$\rangle$$

Τέλος, χρησιμοποιώντας τη συμβολική γραφή παραπάνω, το $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ για

* ένα `\halign` πίνακα με μέγιστο $$\mathrm{K}$$ κελιά ανά *γραμμή*, ή
* a `\valign` πίνακα με μέγιστο $$\mathrm{K}$$ κελιά ανά *στήλη*

μπορεί να γραφτεί ως εξής:

$$\langle$$⁠`προοίμιο`⁠$$\rangle$$=$$\langle$$⁠`γραμμή προοιμίου`⁠$$\rangle$$`**\cr**`

ή

$$\langle$$⁠`προοίμιο`⁠$$\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**`

**Το** $$\langle$$**⁠προοίμιο⁠**$$\rangle$$ **και η καταμέτρηση σειρών και στηλών**

Ένα **`\halign`** πίνακας με ένα $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ που ορίζει $$\mathrm{K}$$ κελιά και ένα $$\langle$$⁠`σώμα`⁠$$\rangle$$ που περιέχει $$\mathrm{N}$$ $$\langle$$⁠`γραμμές σώματος`⁠$$\rangle$$ θα παράγει έναν πίνακα με $$\mathrm{K}$$ *στήλες* και $$\mathrm{N}$$ *γραμμές*, όπως φαίνεται στο ακόλουθο διάγραμμα:

![](/files/67b225cb5f89f4dc511baad65525c7940d272c66)

Μια **`\valign`** πίνακας με ένα $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ που ορίζει $$\mathrm{K}$$ κελιά και ένα $$\langle$$⁠`σώμα`⁠$$\rangle$$ που περιέχει $$\mathrm{N}$$ $$\langle$$⁠`γραμμές σώματος`⁠$$\rangle$$ θα παράγει έναν πίνακα με $$\mathrm{K}$$ *γραμμές* και $$\mathrm{N}$$ *στήλες*, όπως φαίνεται στο ακόλουθο διάγραμμα:

![](/files/be2c0bd2475925ba2d4fa092cca4e9ed0732684a)

### Αρκετή θεωρία, ας δούμε μερικά παραδείγματα!

Όπως θα δούμε αργότερα με κάποια λεπτομέρεια, όταν το TeX επεξεργάζεται το περιεχόμενο ενός πίνακα—τα κελιά του πίνακα που περιέχονται στο [$$\langle$$⁠`σώμα`⁠$$\rangle$$](#body)—ελέγχει για την παρουσία προτύπων κελιών, τα οποία είχαν οριστεί στο $$\langle$$⁠`προοίμιο`⁠$$\rangle$$, επειδή το TeX αναζητά τυχόν tokens προτύπων που θα εισαχθούν πριν από και/ή μετά το περιεχόμενο του χρήστη. Τα ακόλουθα, ελάχιστα, παραδείγματα δείχνουν τη χρήση προτύπων κελιών $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$ σε έναν `\halign` και `\valign` πίνακα.

#### Ένας πίνακας \halign που χρησιμοποιεί πρότυπα κελιών

Το ακόλουθο παράδειγμα δείχνει έναν `\halign` πίνακα που χρησιμοποιεί ένα πρότυπο κελιού για να εισάγει αυτόματα διπλά εισαγωγικά γύρω από το περιεχόμενο του πρώτου κελιού σε κάθε γραμμή: δηλαδή, ένα πρότυπο που επηρεάζει κάθε κελί στην πρώτη στήλη:

```latex
\documentclass{article}
\usepackage{parskip} % Ορίστε το \parindent σε 0pt
% Επιλέξτε ένα βολικά μικρό μέγεθος σελίδας
\usepackage[paperheight=10cm,paperwidth=12cm,textwidth=8cm]{geometry}
\setlength{\tabskip}{20pt} % Αραιώστε τις στήλες του \halign
\begin{document}
\pagestyle{empty}

Ακολουθεί ένας πίνακας \verb|\halign| \textit{χωρίς} πρότυπα κελιών:

\halign{
% Τίποτα πριν ή μετά από κάθε '#' στο <preamble>
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}

Ακολουθεί ο ίδιος πίνακας \verb|\halign| αλλά με διπλά εισαγωγικά να προστίθενται αυτόματα στο πρώτο κελί κάθε γραμμής· δηλαδή, επηρεάζει κάθε κελί στην πρώτη στήλη:

\halign{
% Πρότυπα εισαγωγικών στο προοίμιο:
``#''&#&#\\cr % Διπλά εισαγωγικά πριν και μετά το πρώτο #
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\end{document}
```

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει το ακόλουθο αποτέλεσμα:

![](/files/c525460c06209c53ff076723ce8b8f461f634638)

Το ακόλουθο γραφικό είναι μια σχολιασμένη εκδοχή του `\halign` πίνακα που παρήγαγε το παραπάνω παράδειγμα· εδώ, συγκρίνουμε την «τυπική» δομή ενός τρικέλιου $$\langle$$⁠`προοίμιο`⁠$$\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**`

με τον πραγματικό $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ του ` ``#''&#&#**\\cr** `, επισημαίνοντας την παρουσία ή την απουσία προτύπων κελιών:

![](/files/20777c8afc91e4009ab4c27cc7d482996188cf3d)

#### Ένας πίνακας \\\valign που χρησιμοποιεί πρότυπα κελιών

Το ακόλουθο παράδειγμα δείχνει έναν `\valign` πίνακα που χρησιμοποιεί ένα πρότυπο για κάθε κελί ώστε να εισάγει αυτόματα ψηφία γύρω από το περιεχόμενο του χρήστη.

```latex
\documentclass{article}
\usepackage{parskip} % Ορίστε το \parindent σε 0pt
% Επιλέξτε ένα βολικά μικρό μέγεθος σελίδας
\\usepackage[paperheight=14cm,paperwidth=12cm,textwidth=10cm]{geometry}
\\setlength{\\tabskip}{8pt} % Απομακρύνετε τις γραμμές του \\valign
\begin{document}
\pagestyle{empty}

Εδώ είναι ένας πίνακας \\verb|\\valign| \\textit{χωρίς} πρότυπα κελιών:

\begingroup
\\hsize=25pt
\\valign{
% Τίποτα πριν ή μετά από κάθε '#' στο
% το <preamble>
#&#&#\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup

Εδώ είναι ο ίδιος πίνακας \\verb|\\valign| αλλά με χρήση προτύπων κελιών για την αυτόματη εισαγωγή ψηφίων σε κάθε κελί:

\begingroup
\\hsize=25pt
\\valign{
% Ψηφία εισάγονται πριν και μετά από κάθε '#' στο
% το <preamble>
1#2&3#4&5#6\\cr
A&B&C\cr
D&E&F\cr
G&H&I\cr
}
\endgroup
\end{document}
```

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει το ακόλουθο αποτέλεσμα:

![](/files/3c2ffd301fed0e0cadd412eea182a3995fe11ad0)

Το ακόλουθο γραφικό είναι μια σχολιασμένη εκδοχή του `\valign` πίνακα που παρήγαγε το παραπάνω παράδειγμα· εδώ, συγκρίνουμε την «τυπική» δομή ενός τρικέλιου $$\langle$$⁠`προοίμιο`⁠$$\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**`

με τον πραγματικό $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ του `1#2&3#4&5#6**\\cr**`, επισημαίνοντας τη χρήση προτύπων κελιών $$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$:

![](/files/a2ab000508434bfcd2028c1b1437d60a7a89a717)

Παρατηρήστε πώς το πρότυπο για το κελί $$i$$ ($$\langle$$⁠$$\texttt{U}\_i$$⁠$$\rangle$$$$\texttt{#}$$$$\langle$$⁠$$\texttt{V}\_i$$⁠$$\rangle$$) εφαρμόζεται στο $$i$$οστό κελί σε κάθε `\valign` στήλη, με αποτέλεσμα όλα τα κελιά του $$i$$ου *γραμμή* να επηρεάζονται.

#### Στυλιζάρισμα κειμένου με χρήση προτύπων κελιών

Το επόμενο παράδειγμα χρησιμοποιεί τα ακόλουθα $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ (πρότυπα κελιών) για να μορφοποιήσει το κείμενο που περιέχεται σε κάθε γραμμή ή στήλη:

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

Αν συγκρίνουμε αυτό $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ με την «τυπική» μας δομή ενός τρικέλιου $$\langle$$⁠`προοίμιο`⁠$$\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**`

μπορούμε να δούμε ότι:

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

Παρατηρήστε πώς αυτά τα πρότυπα κελιών, όπως `\\textbf{#}` μοιάζουν με μακροεντολές με μία μόνο παράμετρο (το περιεχόμενο του κελιού).

```latex
Ένας πίνακας \\verb|\\valign| με κείμενο μορφοποιημένο χρησιμοποιώντας πρότυπα κελιών:

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

Ένας πίνακας \\verb|\\halign| με κείμενο μορφοποιημένο χρησιμοποιώντας πρότυπα κελιών:

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

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει το ακόλουθο αποτέλεσμα:

![](/files/fb7b840aaaf34de7ada107d9e04eb0ff1894469a)

## Περισσότερες λεπτομέρειες για τον πίνακα $$\langle$$⁠σώμα⁠$$\rangle$$

Στην ενότητα [Εισαγωγή στο προοίμιο του πίνακα $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ και $$\langle$$⁠`σώμα`⁠$$\rangle$$](#preamble) είδαμε πώς, αν προσωρινά αγνοήσουμε `\noalign`, το $$\langle$$⁠`σώμα`⁠$$\rangle$$ ενός `\halign` ή `\valign` ο πίνακας αποτελείται από πολλαπλές γραμμές, καθεμία από τις οποίες ορίζεται $$\langle$$γραμμή σώματος$${}\_j$$⁠$$\rangle$$, όπου:

* κάθε $$\langle$$γραμμή σώματος$${}\_j$$⁠$$\rangle$$ τερματίζεται από το `\cr` εντολή
* κάθε $$\langle$$γραμμή σώματος$${}\_j$$⁠$$\rangle$$ ενός `\halign` είναι μια γραμμή πίνακα
* κάθε $$\langle$$γραμμή σώματος$${}\_j$$⁠$$\rangle$$ ενός `\valign` είναι μια στήλη πίνακα

Η ακολουθία των γραμμών, $$\langle$$γραμμή σώματος$${}\_j$$⁠$$\rangle$$, όπου $$j=1\ldots\mathrm{N}$$, παράγει $$\mathrm{N}$$ γραμμές ενός `\halign` ή $$\mathrm{N}$$ στήλες για έναν `\valign`. Όπως συνοψίζεται στο ακόλουθο διάγραμμα, ένα γενικό $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ όπως

$$\langle$$⁠`προοίμιο`⁠$$\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**`

καθορίζει πρότυπα κελιών για το πολύ $$\mathrm{K}$$ κελιά σε καθεμία από τις $$\mathrm{N}$$ $$\langle$$⁠`γραμμή σώματος`⁠$$\rangle$$ εγγραφές στο $$\langle$$⁠`σώμα`⁠$$\rangle$$:

![](/files/9b8f83c6b91ba191222c27cbb0926a9fc3adc164)

### Η δομή κάθε $$\langle$$γραμμή σώματος$${}\_j$$⁠$$\rangle$$

Κάθε γραμμή $$\langle$$γραμμή σώματος$${}\_j$$⁠$$\rangle$$ του πίνακα $$\langle$$⁠σώμα⁠$$\rangle$$ περιέχει περιεχόμενο για έως $$\mathrm{K}$$ κελιά—όπως καθορίζεται από τον πίνακα $$\langle$$⁠προοίμιο⁠$$\rangle$$—και έχει τη γενική μορφή:

$$\langle$$γραμμή σώματος$${}\_j$$⁠$$\rangle$$=$$\langle$$⁠Κελί$${}\_1$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠Κελί$${}\_2$$⁠$$\rangle$$$$\texttt{&}$$$$\langle$$⁠Κελί$${}*3$$⁠$$\rangle$$$$\texttt{&}$$$$\cdots$$$$\texttt{&}$$$$\langle$$⁠Κελί$${}*\mathrm{K}$$⁠$$\rangle$$`**\cr**`

όπου:

* $$\langle$$⁠Κελί$${}\_i$$⁠$$\rangle$$ αντιπροσωπεύει το περιεχόμενο του χρήστη για το $$i$$οστό κελί σε κάποια $$\langle$$γραμμή σώματος$${}\_j$$⁠$$\rangle$$
* το **`&`** ο χαρακτήρας ονομάζεται *tab στοίχισης* (το ίδιο όπως χρησιμοποιείται στο $$\langle$$⁠προοίμιο⁠$$\rangle$$) το οποίο σηματοδοτεί το τέλος ενός κελιού και την αρχή του επόμενου. Και πάλι, η χρήση του **`&`** είναι απλώς μια παράδοση (σύμβαση), επειδή οποιοσδήποτε χαρακτήρας με [κωδικό κατηγορίας](/latex/el/perissotera-themata/43-table-of-tex-category-codes.md) 4 θα μπορούσε να χρησιμοποιηθεί αντί γι’ αυτό.

Αν και κάθε $$\langle$$γραμμή σώματος$${}\_j$$⁠$$\rangle$$ μπορεί να περιέχει το πολύ $$\mathrm{K}$$ κελιά (όπως καθορίζεται από τον $$\langle$$⁠προοίμιο⁠$$\rangle$$) μπορούν να περιέχουν *λιγότερα* από $$\mathrm{K}$$ κελιά και οποιοδήποτε $$\langle$$⁠Κελί$${}\_i$$⁠$$\rangle$$ στο $$\langle$$γραμμή σώματος$${}\_j$$⁠$$\rangle$$ μπορεί να είναι κενό.

Το ακόλουθο παράδειγμα δείχνει έναν $$\langle$$⁠προοίμιο⁠$$\rangle$$ του `#&#&#&#&#\\cr` το οποίο προβλέπει το πολύ 5 κελιά ανά $$\langle$$⁠γραμμή σώματος⁠$$\rangle$$; ωστόσο, οι στοιχειοθετημένοι πίνακες περιέχουν γραμμές με λιγότερα από 5 κελιά:

```latex
Ένας πίνακας \\verb|\\valign| με 1 έως 5 κελιά ανά \\textit{στήλη}:

\begingroup
% Το \\hsize ελέγχει τα πλάτη των στηλών του \\valign (μέγεθος των στοιχειοθετημένων γραμμών).
\\hsize=40pt
\fbox{\valign{
% Χρησιμοποιήστε ένα προοίμιο που επιτρέπει 5 κελιά ανά στήλη
% Οι περισσότερες στήλες δεν παρέχουν περιεχόμενο για 5 κελιά
#&#&#&#&#\\cr% 5 cells per column
\\(\\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

% Σημείωση: για λόγους που εξηγούνται αργότερα
% το \halign πρέπει να τοποθετηθεί σε ένα \vbox
Ένας πίνακας \\verb|\\halign| με 1 έως 5 κελιά ανά \\textit{γραμμή}:

\fbox{%
\vbox{\halign{
% Χρησιμοποιήστε ένα προοίμιο που επιτρέπει 5 κελιά ανά γραμμή
% Οι περισσότερες γραμμές δεν παρέχουν περιεχόμενο για 5 κελιά
#&#&#&#&#\\cr % 5 cells per row
\\(\\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
}}}
```

[Ανοίξτε αυτό το παράδειγμα στο Overleaf](/latex/el/se-vathos-arthra/15-how-do-tex-engines-typeset-tables-2.md)

Αυτό το παράδειγμα παράγει το ακόλουθο αποτέλεσμα:

![](/files/312282e7f5f631db1e2de0a7a9464a5aaf439eae)

Το επόμενο `\halign` παράδειγμα δείχνει έναν μεταβαλλόμενο αριθμό κελιών ανά γραμμή και τη δυνατότητα τα κελιά να είναι κενά—παρατηρήστε πώς τα κενά κελιά παράγονται από διαδοχικούς **`&`** χαρακτήρες στον πίνακα:

```latex
Ένας πίνακας \\verb|\\halign| με ορισμένα κενά κελιά---παρατηρήστε ότι υπάρχουν διαδοχικοί χαρακτήρες \\texttt{\\&} στον πίνακα \\(\\langle\\texttt{body}\\rangle\\):

\fbox{%
\vbox{\halign{
% Χρησιμοποιήστε ένα προοίμιο που επιτρέπει 5 κελιά ανά γραμμή
% Οι περισσότερες γραμμές δεν παρέχουν περιεχόμενο για 5 κελιά
#&#&#&#&#\\cr % 5 cells per row
\\(\\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
}}}
```

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει το ακόλουθο αποτέλεσμα:

![](/files/83112e607b8755987b2a6ce66fcb8f39e1f3e2a5)

### Δεν υπάρχει τίποτα το ιδιαίτερο στα & και # στη στοιχειοθεσία πινάκων

Η χρήση από το TeX των χαρακτήρων `&` και `#` στη στοιχειοθεσία `\halign`- ή `\valign`πινάκων που βασίζονται σε - ή - είναι μια παράδοση που προέρχεται από τις αρχικές plain TeX μακροεντολές του Knuth. Είναι απολύτως δυνατό να χρησιμοποιηθούν άλλοι χαρακτήρες εκτός από `&` και `#` αποδίδοντας τους κατάλληλους κωδικούς κατηγορίας στις προτιμώμενες αντικαταστάσεις σας, όπως δείχνει το ακόλουθο παράδειγμα:

* αντικαθιστώντας το `&` με `@` αποδίδοντας `@` στον κωδικό κατηγορίας 4
* αντικαθιστώντας το `#` με `|` αποδίδοντας `|` στον κωδικό κατηγορίας 6 (που χρησιμοποιείται για παραμέτρους μακροεντολών)

Οι αλλαγές κατηγορίας διατηρούνται τοπικές χρησιμοποιώντας `\begingroup` και `\endgroup`:

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

[Ανοίξτε αυτό το παράδειγμα στο 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)

## Επανεισαγωγή της εντολής \\\noalign

Οι μηχανές TeX παρέχουν την ενσωματωμένη (πρωτόγονη) `\noalign` εντολή:

`\\noalign{`$$\langle$$⁠`διακριτικών`⁠$$\rangle$$`}`

όπου $$\langle$$⁠`διακριτικών`⁠$$\rangle$$ είναι χαρακτήρες και/ή εντολές TeX/LaTeX. Η `\noalign` εντολή προορίζεται αποκλειστικά για χρήση μέσα σε έναν `\halign` ή `\valign` πίνακα: η χρήση της εκτός αυτών θα δημιουργήσει σφάλμα.

Ο σκοπός της `\noalign` είναι να επιτρέπει την «εισαγωγή» κειμένου και εντολών TeX/LaTeX *μεταξύ* των γραμμών ενός `\halign` πίνακα ή των στηλών ενός `\valign` πίνακα. Η πιο συνηθισμένη χρήση της `\noalign` είναι η δημιουργία γραμμών πίνακα (κανόνων):

* *οριζόντιων* γραμμών μεταξύ `\halign` γραμμών πίνακα
* *κάθετων* γραμμών μεταξύ `\valign` στηλών πίνακα

Σημειώστε τα ακόλουθα:

* το `\noalign` εντολής είναι ***δεν τερματίζεται από την\*\*\*\*****&#x20;****`\cr`****&#x20;****\*\*\*\*εντολή***
* το σύνολο των επιτρεπόμενων εντολών μέσα στο `\\noalign{...}` εξαρτάται από το αν χρησιμοποιείται στον $$\langle$$⁠`σώμα`⁠$$\rangle$$ ενός `\halign` ή `\valign` πίνακα (δηλαδή, σε κάθετη ή οριζόντια λειτουργία).

Μπορούμε τώρα να πούμε ότι ο πίνακας $$\langle$$⁠`σώμα`⁠$$\rangle$$ του `\halign` ή `\valign` μπορεί να αποτελείται από μεμονωμένες γραμμές $$\langle$$γραμμή σώματος$${}\_i$$⁠$$\rangle$$`\cr` παρεμβαλλόμενες με `\noalign` εντολές· μία από τις πολλές δυνατότητες/συνδυασμούς θα μπορούσε να είναι:

`\\noalign{`$$\langle$$⁠`διακριτικών`⁠$$\rangle$$`}` $$\langle$$γραμμή σώματος$${}\_1$$⁠$$\rangle$$\cr $$\langle$$γραμμή σώματος$${}\_2$$⁠$$\rangle$$\cr `\\noalign{`$$\langle$$⁠`περισσότερα token`⁠$$\rangle$$`}` $$\langle$$γραμμή σώματος$${}*3$$⁠$$\rangle$$\cr ... $$\langle$$γραμμή σώματος$${}*\mathrm{N}$$⁠$$\rangle$$\cr `\\noalign{`$$\langle$$⁠`άλλα token`⁠$$\rangle$$`}`

### Παράδειγμα με χρήση \\\noalign

Θα εξετάσουμε άλλες περιπτώσεις χρήσης αργότερα σε αυτή τη σειρά άρθρων, αλλά εδώ είναι ένα βασικό παράδειγμα για να δείξουμε τη δημιουργία γραμμών πίνακα μέσω `\noalign`:

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

Χρήση του \\verb|\\noalign| για την τοποθέτηση οριζόντιων γραμμών μεταξύ των γραμμών ενός πίνακα \\verb|\\halign|:
\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}
}

Χρήση του \\verb|\\noalign| για την τοποθέτηση κάθετων γραμμών μεταξύ των στηλών ενός πίνακα \\verb|\\valign|:
\vspace{6pt}

\\begingroup % διατηρήστε τις αλλαγές στο \\parindent και \\hsize τοπικές
\\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
```

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει το ακόλουθο αποτέλεσμα:

![](/files/076b5ee3a5c8086e0f99962071febd4baf20b75a)

## Επανεξέταση του \\\tabskip

Θα ρίξουμε μια πιο προσεκτική ματιά στην `\tabskip` εντολή, βασιζόμενοι στην [εισαγωγή σε προηγούμενη ενότητα](#tabskip).

Το `\tabskip` Η εντολή ορίζει την τιμή μιας ειδικής μορφής «απόστασης» (glue) που χρησιμοποιείται *αποκλειστικά* στη στοιχειοθεσία πινάκων: ο σκοπός της είναι να παρέχει απόσταση μεταξύ των γραμμών ή των στηλών του πίνακα:

* για `\halign` πίνακες: `\tabskip` η κόλλα εισάγεται πριν και μετά τον πίνακα (δηλαδή αριστερά και δεξιά) και μεταξύ των στηλών του πίνακα
* για `\valign` πίνακες: `\tabskip` η κόλλα εισάγεται πριν και μετά τον πίνακα (δηλαδή πάνω και κάτω) και μεταξύ των γραμμών του πίνακα

Η τιμή του `\tabskip` μπορεί να οριστεί χρησιμοποιώντας το LaTeX `\setlength` εντολή:

`\\setlength{\\tabskip}{`$$\langle$$⁠`τιμή της κόλλας`⁠$$\rangle$$`}`

όπου $$\langle$$⁠`τιμή της κόλλας`⁠$$\rangle$$ μπορεί να είναι:

* ένα σταθερό μήκος όπως `5pt`, `3mm`, ή
* μια πεπερασμένη ευέλικτη κόλλα όπως `3pt plus 2pt minus 1pt`, ή
* μια άπειρα ευέλικτη κόλλα όπως `0pt plus1fill`.

Μπορείτε επίσης να ορίσετε απευθείας `\tabskip` (παρακάμπτοντας `\setlength`) γράφοντας

`\tabskip`=$$\langle$$⁠`τιμή της κόλλας`⁠$$\rangle$$

Ωστόσο, οποιαδήποτε αλλαγή στην τιμή του `\tabskip` glue θα επηρεάσει την απόσταση του πίνακα μόνο όταν αυτή η αλλαγή:

* γίνεται *πριν από* το `\halign` ή `\valign` εντολής να επεξεργαστεί, ή
* γίνεται μέσα στον πίνακα $$\langle$$⁠`προοίμιο`⁠$$\rangle$$

Οι προσπάθειες να οριστούν `\tabskip` τιμές μέσα στο περιεχόμενο του πίνακα (κελιά στον πίνακα $$\langle$$⁠`σώμα`⁠$$\rangle$$) *δεν θα* αλλάζουν την απόσταση των `\halign` στηλών του πίνακα ή `\valign` γραμμών του πίνακα. Ο λόγος για αυτή τη συμπεριφορά του `\tabskip` μπορεί να αποδοθεί στον ρόλο που διαδραματίζει η $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ κατά τη στοιχειοθεσία του πίνακα—διαδικασίες που θα εξερευνήσουμε αργότερα με κάποια λεπτομέρεια.

### Το να βλέπεις είναι να πιστεύεις

Για να βοηθήσουμε στην οπτικοποίηση της παρουσίας διαφόρων τύπων απόστασης/glue που χρησιμοποιούνται στη στοιχειοθεσία πινάκων, ειδικά

* `\tabskip` glue
* `\\baselineskip` glue
* χειροκίνητο kerning (`\\kern`)

Το Overleaf ετοίμασε ένα έργο βασισμένο στο LuaTeX για να χρωματίσει τα στοιχεία ενός πίνακα. Το LuaTeX επιλέχθηκε επειδή επιτρέπει χαμηλού επιπέδου επεξεργασία των εσωτερικών δεδομένων/δομών των στοιχειοθετημένων πινάκων, αλλά δεν θα εξετάσουμε αυτές τις λεπτομέρειες εδώ.

Ακολουθούν μερικά παραδείγματα που δείχνουν διάφορες εφαρμογές του `\tabskip`. Για κάθε παράδειγμα θα δείξουμε την πραγματική έξοδο και την έγχρωμη εκδοχή που παράχθηκε από το LuaTeX.

### \\\tabskip παράδειγμα 1

Ας εξετάσουμε τη χρήση του `\tabskip` σε έναν `\halign` και `\valign` πίνακα. Θα δείξουμε τους πραγματικά στοιχειοθετημένους πίνακες, με ένα περίγραμμα για να οπτικοποιήσουμε το μέγεθος και την απόστασή τους, μαζί με σχολιασμένα γραφικά που περιέχουν έγχρωμες εκδοχές οι οποίες δείχνουν ξεκάθαρα το μέγεθος των διαφόρων glue/αποστάσεων σε κάθε πίνακα.

Πρώτα, το `\halign`:

```latex
% Για να οπτικοποιήσουμε την έκταση του πίνακα θα βάλουμε ένα περίγραμμα γύρω του
\\setlength{\\fboxsep}{0pt} % Χρησιμοποιήστε στενά προσαρμοσμένα περιγράμματα

% Εδώ ορίζουμε το \\tabskip «απευθείας»
\\tabskip5pt % Ορισμός της αρχικής τιμής \\tabskip έξω από τον πίνακα

% Για να μπει περίγραμμα γύρω από τον πίνακα, πρέπει να αποθηκευτεί σε ένα TeX box.
% Ένα \\halign πρέπει να τοποθετηθεί σε ένα \\vbox επειδή το \\halign πρέπει να
% επεξεργάζεται σε «κατακόρυφη λειτουργία»: ένα \\hbox δεν θα λειτουργήσει επειδή
% αυτό επεξεργάζεται σε «οριζόντια λειτουργία»

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

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει το ακόλουθο αποτέλεσμα:

![](/files/0c523d396cfcc4d224818d41b17ed2be6fc213be)

Το επόμενο γραφικό είναι μια μεγαλύτερη, έγχρωμη και σχολιασμένη εκδοχή του πίνακα που παρήγαγε το προηγούμενο παράδειγμα:

![](/files/9edd696c3b461c995a495334ca23aa680f26129f)

Υπάρχουν 4 εμφανίσεις της `\tabskip` εντολής, και καθεμία αντιστοιχεί σε μια συγκεκριμένη θέση απόστασης μέσα στον πίνακα:

1. `\\tabskip5pt` χρησιμοποιείται έξω από τον πίνακα και ορίζει την `\tabskip` τιμή που εφαρμόζεται πριν από (στα αριστερά του) το πρώτο κελί σε κάθε γραμμή.
2. `\\tabskip10pt` ορίζεται στο πρώτο πρότυπο κελιού του $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ το οποίο επηρεάζει το διάστημα μεταξύ $$\langle$$⁠Κελί$${}\_1$$⁠$$\rangle$$ και $$\langle$$⁠Κελί$${}\_2$$⁠$$\rangle$$ του κάθε γραμμής.
3. `\\tabskip15pt` ορίζεται στο δεύτερο πρότυπο κελιού του $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ το οποίο επηρεάζει το διάστημα μεταξύ $$\langle$$⁠Κελί$${}\_2$$⁠$$\rangle$$ και $$\langle$$⁠Κελί$${}\_3$$⁠$$\rangle$$ του κάθε γραμμής.
4. `\\tabskip20pt` ορίζεται στο τρίτο, και τελευταίο, πρότυπο κελιού του $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ το οποίο επηρεάζει το διάστημα που προστίθεται μετά από $$\langle$$⁠Κελί$${}\_3$$⁠$$\rangle$$, το τελικό κελί κάθε γραμμής.

Στη συνέχεια, το `\valign`

```latex
\\setlength{\\fboxsep}{0pt} % Χρησιμοποιήστε στενά προσαρμοσμένα περιγράμματα
\\tabskip5pt % Ορισμός της αρχικής τιμής \\tabskip έξω από τον πίνακα

% Διατηρήστε τις αλλαγές στο \\hsize τοπικές (σε μια ομάδα)
\begingroup
% Το \\hsize καθορίζει τα πλάτη των στηλών του \\valign
\\setlength{\\hsize}{50pt}
% Επειδή το \\valign μπορεί να τοποθετηθεί σε ένα \\vbox ή \\hbox μπορούμε να χρησιμοποιήσουμε
% το \\fbox απευθείας
\fbox{\valign{
\\tabskip10pt#&
\\tabskip15pt#&
\\tabskip20pt#\\cr
A&B&C\cr
E&E&F\\cr
G&H&I\cr
}}
\endgroup
```

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει το ακόλουθο αποτέλεσμα:

![](/files/e0ef309073ce37d1ead1ed32ec8d0d7bf648402c)

Και πάλι, το επόμενο γραφικό είναι μια μεγαλύτερη, έγχρωμη και σχολιασμένη εκδοχή του πίνακα που παρήγαγε το προηγούμενο παράδειγμα:

![](/files/028d94def124c9a178586a0dbb1a9868f65e37b8)

Όπως και με το `\halign` παράδειγμα, υπάρχουν 4 εμφανίσεις της `\tabskip` εντολής. Ωστόσο, με έναν `\valign` πίνακα η `\tabskip` εισάγεται μεταξύ των γραμμών του πίνακα:

1. `\\tabskip5pt` χρησιμοποιείται έξω από τον πίνακα και ορίζει την `\tabskip` τιμή που εφαρμόζεται πριν από (πάνω από) το πρώτο κελί σε κάθε στήλη.
2. `\\tabskip10pt` ορίζεται στο πρώτο πρότυπο κελιού του $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ το οποίο επηρεάζει το διάστημα μεταξύ $$\langle$$⁠Κελί$${}\_1$$⁠$$\rangle$$ και $$\langle$$⁠Κελί$${}\_2$$⁠$$\rangle$$ κάθε στήλης.
3. `\\tabskip15pt` ορίζεται στο δεύτερο πρότυπο κελιού του $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ το οποίο επηρεάζει το διάστημα μεταξύ $$\langle$$⁠Κελί$${}\_2$$⁠$$\rangle$$ και $$\langle$$⁠Κελί$${}\_3$$⁠$$\rangle$$ κάθε στήλης.
4. `\\tabskip20pt` ορίζεται στο τρίτο, και τελευταίο, πρότυπο κελιού του $$\langle$$⁠`προοίμιο`⁠$$\rangle$$ το οποίο επηρεάζει το διάστημα που προστίθεται μετά από $$\langle$$⁠Κελί$${}\_3$$⁠$$\rangle$$, το τελικό κελί κάθε στήλης.

**Σύνοψη/συμπεράσματα**

* Σε έναν `\halign` πίνακα η `\tabskip` η κόλλα τοποθετείται αριστερά και δεξιά από κάθε κελί σε μια γραμμή, απομακρύνοντας έτσι τις στήλες του πίνακα.
* Σε έναν `\valign` πίνακα η `\tabskip` η κόλλα τοποθετείται πάνω και κάτω από κάθε κελί σε μια στήλη, απομακρύνοντας έτσι τις γραμμές του πίνακα.

### \\\tabskip και \\\noalign

#### Χρησιμοποιώντας έναν \\\halign

Το ακόλουθο `\halign` παράδειγμα χρησιμοποιεί `\tabskip` glues και επίσης δείχνει την `\noalign` εντολή, χρησιμοποιώντας την για να τοποθετήσει γραμμές με απόσταση πάνω και κάτω από τις γραμμές ενός `\halign` πίνακα. Αυτές οι γραμμές στοιχειοθετούνται χρησιμοποιώντας την `\hrule` (πρωτόγονη) εντολή μαζί με το διάστημα που δημιουργείται από `\\kern`:

```latex
\\setlength{\\tabskip}{5pt} % Ορισμός του \\tabskip έξω από τον πίνακα

\halign{
#&#&#&#&#\\cr % Το <preamble>
\\noalign{\\hrule\\kern2pt} % Γραμμή με απόσταση πριν από τη γραμμή 1
1&2&3&4&5\\cr % Γραμμή 1
\\noalign{\\kern2pt\\hrule\\kern2pt} % Γραμμή με απόσταση μεταξύ των γραμμών 1/2
6&7&8&9&10\\cr % Γραμμή 2
\\noalign{\\kern2pt\\hrule\\kern2pt} % Γραμμή με απόσταση μεταξύ των γραμμών 2/3
11&12&13&14&15\\cr % Γραμμή 3
16&17&18&19&20\\cr % Γραμμή 4---χωρίς γραμμές μεταξύ των γραμμών 3/4
\\noalign{\\kern2pt\\hrule} % Γραμμή με απόσταση στο τέλος του πίνακα
}
```

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει τον πίνακα που φαίνεται παρακάτω, ο οποίος έχει επιπλέον σχολιαστεί για να αναπαράγει τον κώδικα (La)TeX και τους αριθμούς (1) έως (4) για να απαριθμήσει τις `\noalign` εντολές, που περιέχουν γραμμές και kerns, μαζί με το αντίστοιχο στοιχειοθετημένο αποτέλεσμά τους:

![](/files/f9a5113ec2d607ddcfb5e23c6b1a17a9ddd84c20)

Το ακόλουθο γραφικό δείχνει μια έγχρωμη εκδοχή του πίνακα με ετικέτες που δείχνουν τις διάφορες αποστάσεις/glue στον πίνακα:

![](/files/dcf90cadb5601c52034aa7e082018c194cd0550d)

Σημειώστε τα ακόλουθα:

* τη χρήση του `\noalign` για την εισαγωγή γραμμών μεταξύ ορισμένων γραμμών και τη χειροκίνητη χρήση των `\\kern` τιμών για να τοποθετήσουν λίγο διάστημα πριν/μετά από τις γραμμές. Οι μηχανές TeX δεν εισάγουν `\\baselineskip` glue μετά από μια στοιχειοθετημένη γραμμή, γι' αυτό το διάστημα εισάγεται χειροκίνητα χρησιμοποιώντας `\\kern` (θα μπορούσαν να χρησιμοποιηθούν και άλλες εντολές διαστήματος);
* `\\baselineskip` Το διάκενο εισήχθη αυτόματα ανάμεσα στις σειρές 3 και 4.

#### Χρήση ενός \valign

Το ακόλουθο `\valign` Το παράδειγμα χρησιμοποιεί τα ίδια δεδομένα με το προηγούμενο `\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
```

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει τον πίνακα που φαίνεται παρακάτω, ο οποίος έχει επιπλέον σχολιαστεί για να αναπαράγει τον κώδικα (La)TeX και τους αριθμούς (1) έως (4) για να απαριθμήσει τις `\noalign` εντολές, που περιέχουν γραμμές και kerns, μαζί με το αντίστοιχο στοιχειοθετημένο αποτέλεσμά τους:

![](/files/eab418c7eafc35381c11f68d88c1401495022073)

![](/files/d42ac37acd18d6d81395742d8728ce6b61993396)

### Ένας πίνακας \valign με γραμμές κειμένου

Το επόμενο παράδειγμα

```latex
\\setlength{\\tabskip}{5pt}
\begingroup % Κρατήστε τις αλλαγές στα \parindent και \hsize τοπικές
\setlength{\parindent}{10pt}
\setlength{\hsize}{75pt}
\\valign{
#&#&#\cr
\noalign{\vrule\kern5pt}
Η \TeX{} μπορεί να στοιχειοθετήσει πολύ σύνθετα
πίνακες.&Να και λίγο επιπλέον
κείμενο.&Και, τέλος, μια επιπλέον γραμμή
σε αυτήν τη στήλη.\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
```

[Ανοίξτε αυτό το παράδειγμα στο 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)

Αυτό το παράδειγμα παράγει το ακόλουθο αποτέλεσμα:

## Ρύθμιση των πλάτων των σειρών και των υψών των στηλών

## Περισσότερα για τον πίνακα $$\langle$$⁠προοίμιο⁠$$\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/el/se-vathos-arthra/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.
