> 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/perissotera-themata/20-how-tex-macros-actually-work-part-2.md).

# Πώς λειτουργούν πραγματικά οι μακροεντολές TeX: Μέρος 2

[Μέρος 1](/latex/el/perissotera-themata/19-how-tex-macros-actually-work-part-1.md) [Μέρος 2](/latex/el/perissotera-themata/20-how-tex-macros-actually-work-part-2.md) [Μέρος 3](/latex/el/perissotera-themata/21-how-tex-macros-actually-work-part-3.md) [Μέρος 4](/latex/el/perissotera-themata/22-how-tex-macros-actually-work-part-4.md) [Μέρος 5](/latex/el/perissotera-themata/23-how-tex-macros-actually-work-part-5.md) [Μέρος 6](/latex/el/perissotera-themata/24-how-tex-macros-actually-work-part-6.md)

## Εισαγωγή: Μια ιστορία σε εικόνες

Όπως σημειώθηκε στο Μέρος 1, το TeX πρέπει να «διαβάσει» κάθε χαρακτήρα μέσα στο δικό σας `.tex` αρχείο και η διαδικασία αυτού του διαβάσματος αναφέρεται πιο σωστά ως *σάρωση*. Παραδοσιακά, η επεξεργασία εισόδου του TeX (σάρωση) παρομοιάζεται με το TeX να έχει «μάτια» με τα οποία παρατηρεί την είσοδο, οπότε θα υιοθετήσουμε αυτή τη δοκιμασμένη στον χρόνο αναλογία μέσα στα παρακάτω γραφικά.

### Γραφικό 1: Τα μάτια είναι έτοιμα

Υποθέτουμε ότι το TeX έχει λάβει κάποια είσοδο από ένα `.tex` αρχείο και πρόκειται να επεξεργαστεί τη συμβολοσειρά χαρακτήρων μας `Γεια σου Κόσμε \jobname` που περιέχεται μέσα σε μια παράγραφο κειμένου. Θα ελέγχει κάθε χαρακτήρα διαδοχικά και θα εξετάζει τον κωδικό κατηγορίας του.

![Τα μάτια του TeX έτοιμα να σαρώσουν μια γραμμή κειμένου](/files/0334b9aa603a3c757dedbfdac743c86d20f1fb8d)

### Γραφικό 2: Επεξεργασία κωδικών κατηγορίας

Στο επόμενο γραφικό βλέπουμε, σε γενικές γραμμές (με περαιτέρω λεπτομέρειες παρακάτω), πώς το TeX αντιδρά σε αρκετούς διαφορετικούς κωδικούς κατηγορίας. Σημειώστε ότι υπάρχουν συνολικά 16 κωδικοί κατηγορίας, αλλά, για απλότητα, απεικονίζουμε τη χρήση μόνο τριών: 11, 10 και 0. Άλλοι κωδικοί χαρακτήρων γίνονται σημαντικοί κατά τις διεργασίες στοιχειοθεσίας του TeX, όπως η κατασκευή πινάκων, η στοιχειοθεσία μαθηματικών και η αναγνώριση παραμέτρων μακροεντολών.

![Το TeX αντιδρά σε αρκετούς διαφορετικούς κωδικούς κατηγορίας](/files/5dc20b132a70036e83fed5c5659e2a2ca12ff6fc)

#### Σημειώσεις για το Γραφικό 2

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

* **(πράσινα μάτια)** Το TeX θα δει ότι καθένας από αυτούς τους χαρακτήρες έχει κωδικό κατηγορίας 11 («γράμμα») και θα προωθήσει αυτούς τους χαρακτήρες για στοιχειοθεσία ως μέρος της παραγράφου που δημιουργεί. Ωστόσο, το TeX δεν προωθεί (χρησιμοποιεί) μόνο τον κωδικό χαρακτήρα, αλλά αντιθέτως χρησιμοποιεί το ζεύγος αριθμών (κωδικός χαρακτήρα, κωδικός κατηγορίας) για να υπολογίσει μια σύνθετη ακέραια τιμή που ονομάζεται *token χαρακτήρα* (βλ. παρακάτω). Μόλις παραχθεί αυτό το token χαρακτήρα, εισέρχεται στις εσωτερικές διαδικασίες/αλγορίθμους στοιχειοθεσίας του TeX.
* **(μπλε μάτια)** Το TeX βλέπει έναν χαρακτήρα κενού διαστήματος (ASCII 32) με κωδικό κατηγορίας 10 («διαχωριστικά»)—σημειώστε ότι, όπως συζητήθηκε, είναι απολύτως πιθανό ο κωδικός κατηγορίας ενός κενού (ASCII 32), ή οποιουδήποτε χαρακτήρα, να έχει αλλάξει σε άλλη τιμή—πριν διαβαστεί από το TeX.

Ο τρόπος με τον οποίο το TeX πράγματι επεξεργάζεται χαρακτήρες με κωδικό κατηγορίας 10 («διαχωριστικά») διαφέρει ανάλογα με το πότε/πού το TeX τους βλέπει—τη τρέχουσα «λειτουργία» του TeX. Για παράδειγμα, υπάρχουν στιγμές που το TeX απλώς τους παραλείπει. Εδώ, το TeX θα γνωρίζει ότι εντόπισε έναν χαρακτήρα με κωδικό κατηγορίας 10 (που τυχαίνει να είναι ένα κενό, ASCII 32) κατά την επεξεργασία κειμένου παραγράφου, οπότε τελικά θα τον μετατρέψει σε το λεγόμενο interword glue: ένα είδος ευέλικτου κενού που μπορεί να τεντωθεί ή να συρρικνωθεί.

* **(κόκκινα μάτια)** Εδώ, το TeX έχει παρατηρήσει έναν χαρακτήρα ο οποίος έχει έναν πολύ σημαντικό κωδικό κατηγορίας: 0 (χαρακτήρας διαφυγής).

Ένας χαρακτήρας διαφυγής—*οποιοσδήποτε* χαρακτήρας με κωδικό κατηγορίας 0—δείχνει στο TeX να μεταβεί σε μια ειδική λειτουργία ανάγνωσης και να σαρώσει προσεκτικά (να διαβάσει) τους επόμενους χαρακτήρες επειδή αυτοί προσδιορίζουν το όνομα ενός *εντολή*, όχι κείμενο για στοιχειοθεσία. Στη βιβλιογραφία του TeX θα δείτε τον όρο «εντολή» να αναφέρεται επίσης ως *ακολουθίας ελέγχου*. Αφού δει έναν χαρακτήρα διαφυγής, το TeX ελέγχει τον κωδικό κατηγορίας του χαρακτήρα που ακολουθεί *αμέσως μετά από αυτόν*; αυτό συμβαίνει επειδή το TeX αναγνωρίζει δύο είδη εντολών:

* εντολές πολλών γραμμάτων που ονομάζονται *control words*: ο χαρακτήρας που ακολουθεί αμέσως μετά τον χαρακτήρα διαφυγής έχει κωδικό κατηγορίας 11. Όλοι οι επόμενοι χαρακτήρες που έχουν κωδικό κατηγορίας 11 θεωρούνται μέρος του ονόματος μιας εντολής. Το TeX θα σταματήσει να αναζητά χαρακτήρες που αποτελούν μέρος του ονόματος μιας εντολής όταν εντοπίσει οποιονδήποτε χαρακτήρα που *δεν* δεν έχει κωδικό κατηγορίας 11—όπως ένας χαρακτήρας κενού με κωδικό κατηγορίας 10.
* εντολές ενός γράμματος που ονομάζονται *σύμβολα ελέγχου*: ο χαρακτήρας που ακολουθεί αμέσως μετά τον χαρακτήρα διαφυγής *δεν* δεν έχουν κωδικό κατηγορίας 11.

Μπορείτε να σκεφτείτε έναν χαρακτήρα διαφυγής ως κάτι που ενεργοποιεί το TeX να «βγει» από τη συνήθη συμπεριφορά σάρωσής του και να υιοθετήσει μια διαφορετική προσέγγιση για τους επόμενους λίγους χαρακτήρες—αυτό υποδηλώνεται από το κόκκινο διακεκομμένο πλαίσιο που δείχνει ότι το TeX θα **Αρχίσει να σαρώνει για μια εντολή**.

### Γραφικό 3: Επεξεργασία κωδικού κατηγορίας 11 («γράμματα»)

Στο Μέρος 1 αυτής της σειράς σημειώσαμε ότι κάθε χαρακτήρας που διαβάζει το TeX από την είσοδό του περιγράφεται από δύο ακέραιους αριθμούς:

* κωδικός χαρακτήρα: ένας ακέραιος που ορίζει την αριθμητική αναπαράσταση ενός χαρακτήρα·
* κωδικός κατηγορίας: μια τιμή από 0 έως 15 που το TeX αποδίδει σε κάθε χαρακτήρα που μπορεί να εμφανιστεί στην είσοδό του.

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

Το Γραφικό 3 επεκτείνει το Γραφικό 2 για να δείξει τι κάνει το TeX με αυτούς τους χαρακτήρες εισόδου που έχουν κωδικό κατηγορίας 11 (γράμμα): δημιουργεί *tokens χαρακτήρων*—ακέραιες τιμές που το TeX υπολογίζει χρησιμοποιώντας έναν συνδυασμό του κωδικού κατηγορίας και του κωδικού χαρακτήρα του συγκεκριμένου χαρακτήρα.

**Σημείωση**: Σε αυτό το παράδειγμα συζητούμε μόνο χαρακτήρες με κωδικό κατηγορίας 11, αλλά θα πρέπει να γνωρίζετε ότι το TeX δημιουργεί επίσης τιμές token για χαρακτήρες εισόδου που έχουν άλλους κωδικούς κατηγορίας—εκτός από τον κωδικό κατηγορίας 0 που ποτέ δεν μετατρέπεται σε token: ο χαρακτήρας διαφυγής απλώς λειτουργεί ως ένας «διακόπτης» για να ενεργοποιήσει ειδική επεξεργασία.

![Το TeX επεξεργάζεται χαρακτήρες με κωδικό κατηγορίας 11](/files/97e548de12b5748c3473ae550a486a50f47253a0)

Το Γραφικό 5, παρακάτω, θα δείξει τι κάνει το TeX όταν βλέπει έναν χαρακτήρα με κωδικό κατηγορίας 0 (έναν χαρακτήρα διαφυγής).

#### Σημειώσεις για το Γραφικό 3: Επεξεργασία κωδικού κατηγορίας 11 («γράμμα»)

Εδώ, θα επικεντρωθούμε στη **πράσινη** δραστηριότητα: τι συμβαίνει όταν το TeX βλέπει χαρακτήρες που έχουν κωδικό κατηγορίας 11 («γράμμα»). Αφού το TeX διαβάσει έναν χαρακτήρα και καθορίσει τον κωδικό κατηγορίας του (εδώ είναι 11), αυτό που κάνει στη συνέχεια το TeX είναι να *συνδυάσει* αυτό το ζεύγος αριθμών σε έναν ενιαίο ακέραιο που ονομάζεται token χαρακτήρα: αυτά τα token (ακέραιοι) προωθούνται στο επόμενο στάδιο των εσωτερικών αλγορίθμων/της επεξεργασίας στοιχειοθεσίας του TeX. Όπως σημειώθηκε, το TeX θα δημιουργήσει επίσης token χαρακτήρων για χαρακτήρες με άλλους κωδικούς κατηγορίας (δηλ. όχι 11), εδώ απλώς χρησιμοποιούμε τον κωδικό κατηγορίας 11 ως παράδειγμα.

Κάθε token χαρακτήρα (ένας ακέραιος) δεσμεύει μόνιμα έναν χαρακτήρα εισόδου με τον κωδικό κατηγορίας που αποδίδεται σε αυτόν τον χαρακτήρα **τη στιγμή που σαρώθηκε (διαβάστηκε) από το TeX**: αυτό το γεγονός είναι καθοριστικής σημασίας για την κατανόηση της συμπεριφοράς των μακροεντολών TeX/LaTeX. Φυσικά, κατά την περαιτέρω επεξεργασία, το TeX μερικές φορές θα χρειάζεται να διασπάσει ένα token χαρακτήρα για να καθορίσει ποιο ζεύγος (κωδικός χαρακτήρα, κωδικός κατηγορίας) χρησιμοποιήθηκε για την κατασκευή αυτού του token. Ωστόσο, μόλις ένας χαρακτήρας διαβαστεί από τη διαδικασία εισόδου (σάρωσης) του TeX, η τιμή token χαρακτήρα που υπολογίζεται από το TeX έχει ως αποτέλεσμα ο συγκεκριμένος χαρακτήρας να είναι *μόνιμα* συνδεδεμένος με τον κωδικό κατηγορίας που του αποδόθηκε *τη στιγμή που διαβάστηκε*.

**Υπολογισμός token χαρακτήρων**

Οι μηχανές TeX χρησιμοποιούν έναν απλό τύπο για να υπολογίσουν ένα token χαρακτήρα, $$T$$, από έναν χαρακτήρα με κωδικό κατηγορίας $$C$$ και κωδικό χαρακτήρα $$A$$:

$$T = \text{constant} \times C + A$$

Οι 8-bit μηχανές, όπως το pdfTeX, χρησιμοποιούν:

$$T = 256\times C + A$$

Οι μηχανές που υποστηρίζουν Unicode, όπως το XeTeX ή το LuaTeX, πρέπει να χρησιμοποιούν διαφορετικό τύπο, επειδή, στο Unicode, οι κωδικοί χαρακτήρων μπορεί να είναι πολύ μεγαλύτεροι από το μέγιστο των 255 στον παλιότερο κόσμο κωδικοποίησης 8-bit ASCII. Το XeTeX, για παράδειγμα, χρησιμοποιεί:

$$T= 2^{21}\times C + A \hskip5mm \text{(where } A \text{ is a Unicode character code value)}$$

Για άλλη μια φορά, αξίζει να σημειωθεί ότι οι χαρακτήρες με κωδικό κατηγορίας 0 δεν μετατρέπονται σε token χαρακτήρων: ο κωδικός κατηγορίας 0 κατέχει μια πολύ ιδιαίτερη θέση στη φιλτράριση εισόδου του TeX και χρησιμοποιείται αποκλειστικά ως ένας «διακόπτης» για να ενεργοποιήσει το TeX σε μια ειδική λειτουργία σάρωσης των επόμενων λίγων χαρακτήρων. Το Γραφικό 5 ασχολείται με αυτό.

### Γραφικό 4: Επεξεργασία κωδικού κατηγορίας 10 («διαχωριστικό»)

Ο χειρισμός από το TeX χαρακτήρων με κωδικό κατηγορίας 10 («διαχωριστικό») εξαρτάται από το με τι ακριβώς ασχολείται το TeX τη στιγμή που ανιχνεύει έναν χαρακτήρα κατηγορίας 10 μέσα στην είσοδο. Στο παράδειγμά μας, το TeX εκτελεί τη συνήθη επεξεργασία παραγράφου και ο χαρακτήρας κενού, με κωδικό κατηγορίας 10, θα μετατραπεί σε interword glue.

![Το TeX επεξεργάζεται χαρακτήρες με κωδικό κατηγορίας 10](/files/4fab64a3065ae1c93b2e309582cc505785a7a821)

Ο χειρισμός των κενών από το TeX μπορεί να φαίνεται αρκετά ιδιοσυγκρασιακός, αλλά μια καλή επισκόπηση μπορεί να βρεθεί στα κεφάλαια 1 και 2 του [TeX by Topic](http://www.eijkhout.net/texbytopic/texbytopic.html) του Victor Eijkhout—μπορείτε να [κατεβάσετε ένα δωρεάν αντίγραφο PDF](https://bitbucket.org/VictorEijkhout/tex-by-topic) μέσω της ιστοσελίδας του.

Για παράδειγμα, όταν το TeX βλέπει έναν χαρακτήρα με κωδικό κατηγορίας 10, υπάρχουν στιγμές που το TeX θα:

* παραλείψει (αγνοήσει) όλα αυτά—π.χ. όταν το TeX βρίσκεται σε κατακόρυφη λειτουργία;
* μετατρέψει πολλαπλά διαχωριστικά σε ένα μόνο διαχωριστικό—παραλείποντας επιπλέον κενά, όπως κατά την επεξεργασία μιας παραγράφου;
* τα απορροφήσει—π.χ. απορροφώντας ένα μόνο κενό μετά από ένα όνομα εντολής;

Σημειώστε επίσης ότι υπάρχουν στιγμές που το TeX θα *δημιουργήσει* κενά—μετατρέποντας χαρακτήρες τέλους γραμμής σε ένα κενό. Η συμπεριφορά/αντιμετώπιση των χαρακτήρων κενού (οποιοσδήποτε χαρακτήρας με κωδικό κατηγορίας 10) είναι μια από τις «ιδιομορφίες» του TeX: χρειάζεται χρόνος/εξάσκηση για να εξοικειωθεί κανείς (και να νιώσει άνετα) με αυτή την πτυχή του TeX.

### Γραφικό 5a: Επεξεργασία κωδικού κατηγορίας 0 (ένας «χαρακτήρας διαφυγής»)

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

![Το TeX επεξεργάζεται χαρακτήρες με κωδικό κατηγορίας 0](/files/6f28fb32b8243a770ebb20531543a129082fc2b9)

### Γραφικό 5b: Αναζήτηση ονόματος εντολής

Σε αυτό το γραφικό κοιτάζουμε μέσα στην ενότητα του κόκκινου διακεκομμένου πλαισίου (**Αρχίσει να σαρώνει για μια εντολή**) για να δούμε τι κάνει το TeX αφού δει έναν χαρακτήρα διαφυγής.

![Το TeX αναζητά όνομα εντολής](/files/65d3778e3bcb970aa7d812672bf03e319b2e97ee)

**Σημειώσεις για το Γραφικό 5b**

* Μόλις αναγνωριστεί, ο χαρακτήρας διαφυγής έχει ολοκληρώσει το έργο του: λειτούργησε ως διακόπτης και δεν συμμετέχει σε καμία περαιτέρω επεξεργασία—συγκεκριμένα, **όχι** μετατρέπεται σε token χαρακτήρα.
* Για λόγους ευκολίας, θα επαναλάβουμε μερικές λεπτομέρειες που αναφέρθηκαν νωρίτερα. Αφού δει έναν χαρακτήρα διαφυγής, το TeX ελέγχει τον κωδικό κατηγορίας του χαρακτήρα που ακολουθεί *αμέσως μετά από αυτόν*; αυτό συμβαίνει επειδή το TeX αναγνωρίζει δύο είδη εντολών:
* * εντολές πολλών γραμμάτων που ονομάζονται *control words*: ο χαρακτήρας που ακολουθεί αμέσως μετά τον χαρακτήρα διαφυγής έχει κωδικό κατηγορίας 11. Όλοι οι επόμενοι χαρακτήρες που έχουν κωδικό κατηγορίας 11 θεωρούνται ότι σχηματίζουν το όνομα μιας εντολής (*control word*). Το TeX θα σταματήσει να αναζητά χαρακτήρες που αποτελούν μέρος ενός ονόματος εντολής όταν εντοπίσει οποιονδήποτε χαρακτήρα που *δεν* δεν έχει κωδικό κατηγορίας 11—όπως ένας χαρακτήρας κενού με κωδικό κατηγορίας 10.
  * εντολές ενός γράμματος που ονομάζονται *σύμβολα ελέγχου*: ο χαρακτήρας που ακολουθεί αμέσως μετά τον χαρακτήρα διαφυγής *δεν* δεν έχουν κωδικό κατηγορίας 11.
* Στο παράδειγμά μας, ο πρώτος χαρακτήρας μετά το `\` είναι ένα `j` (κωδικός κατηγορίας 11) που λέει στο TeX να αναζητήσει μια εντολή η οποία είναι (πιθανώς) μια πολυγράμματη ακολουθία χαρακτήρων με κωδικό κατηγορίας 11.
* Το TeX συνεχίζει να ελέγχει για περισσότερους χαρακτήρες που έχουν κωδικό κατηγορίας 11. Μόλις εντοπίσει έναν χαρακτήρα με οποιονδήποτε άλλο κωδικό κατηγορίας, όπως ένα κενό με κωδικό κατηγορίας 10, το TeX ξέρει ότι έχει φτάσει στο τέλος του ονόματος της εντολής. Για να τονίσουμε το σημείο: εδώ ήταν ένας χαρακτήρας κενού (κωδικός κατηγορίας 10) που «τερμάτισε» το τέλος της εντολής, αλλά θα μπορούσε να ήταν οποιοσδήποτε χαρακτήρας που **δεν** δεν έχουν κωδικό κατηγορίας 11.

## Μέρος 3

Στο Μέρος 3 συνεχίζουμε από το Γραφικό 5b για να ολοκληρώσουμε αυτό το μέρος της ιστορίας—το πώς το TeX προσδιορίζει μια εντολή—και περνάμε στο τι κάνει στη συνέχεια. Ρίχνουμε επίσης μια βαθύτερη ματιά σε ορισμένες εσωτερικές πτυχές της επεξεργασίας του TeX—μέρη των οποίων μπορούν να παραλειφθούν με το πρώτο διάβασμα, εκτός αν απολαμβάνετε πραγματικά τις λεπτομέρειες.

[Μέρος 1](/latex/el/perissotera-themata/19-how-tex-macros-actually-work-part-1.md) [Μέρος 2](/latex/el/perissotera-themata/20-how-tex-macros-actually-work-part-2.md) [Μέρος 3](/latex/el/perissotera-themata/21-how-tex-macros-actually-work-part-3.md) [Μέρος 4](/latex/el/perissotera-themata/22-how-tex-macros-actually-work-part-4.md) [Μέρος 5](/latex/el/perissotera-themata/23-how-tex-macros-actually-work-part-5.md) [Μέρος 6](/latex/el/perissotera-themata/24-how-tex-macros-actually-work-part-6.md)


---

# 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/perissotera-themata/20-how-tex-macros-actually-work-part-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.
