> 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/21-how-tex-macros-actually-work-part-3.md).

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

[Μέρος 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)

## Ώρα για παύση!

Πριν προχωρήσουμε στο επόμενο μέρος αυτής της ιστορίας, χρειάζεται να κάνουμε μια ανακεφαλαίωση: να θυμηθούμε πού πηγαίνουμε και να συγκεντρώσουμε τις σκέψεις μας, ώστε να βεβαιωθούμε ότι όλες οι βασικές ιδέες βρίσκονται στη θέση τους. Μια υπενθύμιση: το δουλεμένο μας παράδειγμα βασίζεται στην υπόθεση ότι το TeX έχει διαβάσει μια γραμμή κειμένου που περιέχει `Hello World \jobname` και ότι το TeX στοιχειοθετεί αυτό για να δημιουργήσει μια παράγραφο.

### Ο τελικός στόχος

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

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

Μέχρι τώρα, έχουμε εξετάσει τη διαδικασία σάρωσης εισόδου του TeX, καθώς αναγνωρίζει μεμονωμένους χαρακτήρες και χρησιμοποιεί τον κωδικό κατηγορίας κάθε χαρακτήρα για να διαπιστώσει τι θα κάνει στη συνέχεια. Μερικοί χαρακτήρες είναι απλώς συνηθισμένα στοιχεία κειμένου για στοιχειοθεσία (π.χ., κωδικός κατηγορίας 11), αλλά έχουμε δει επίσης χαρακτήρες κενού διαστήματος (κωδικός κατηγορίας 10) και χαρακτήρες διαφυγής (κωδικός κατηγορίας 0). Υπάρχουν και άλλοι κωδικοί κατηγορίας τους οποίους, για συντομία, δεν έχουμε εξετάσει—όπως ο κωδικός κατηγορίας 1 («έναρξη ομάδας», π.χ., `{`), κωδικός κατηγορίας 2 («λήξη ομάδας», π.χ., `}`) και άλλοι. Κάθε κωδικός κατηγορίας επιτελεί τον δικό του ρόλο στη σάρωση εισόδου του TeX και στην επακόλουθη επεξεργασία από τις διεργασίες/αλγορίθμους λογισμικού μέσα στο TeX.

### Τοκεν: μια σύντομη ανασκόπηση

Η έννοια των «τοκεν» είναι κεντρική στον τρόπο λειτουργίας του TeX: θα δείτε να γίνεται αναφορά στα «τοκεν» σε βιβλία, άρθρα και διαδικτυακές κοινότητες σχετικά με το TeX, οπότε αξίζει να αναθεωρήσουμε σύντομα αυτό το θέμα—μπορείτε να βρείτε περισσότερες λεπτομέρειες σε ένα προηγουμένως δημοσιευμένο άρθρο [Τι είναι ένα «TeX token»;](/latex/el/se-vathos-arthra/53-what-is-a-tex-token.md)

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

## Λοιπόν, τι ακολουθεί;

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

Μόλις το TeX έχει αναγνωρίσει ότι μια συγκεκριμένη ακολουθία χαρακτήρων στο αρχείο εισόδου σας αντιπροσωπεύει το όνομα μιας εντολής (εδώ, `jobname`) το TeX μπορεί, ανάλογα με το τι κάνει, να χρειαστεί να εκτελέσει εκείνη την εντολή. Λέμε «μπορεί να χρειαστεί να» επειδή υπάρχουν στιγμές κατά τις οποίες το TeX δεν θα προσπαθήσει αμέσως να εκτελέσει μια εντολή: για παράδειγμα, όταν ορίζει μια μακροεντολή (το TeX δημιουργεί λίστες τοκεν)—θέματα που θα συζητήσουμε αργότερα. Ωστόσο, θα συνεχίσουμε να ακολουθούμε το παράδειγμά μας όπου το TeX στοιχειοθετεί μια παράγραφο και *θα*, σε αυτή την περίπτωση, να χρειαστεί να εκτελέσει `\jobname`.

### Από μια συμβολοσειρά χαρακτήρων στην εκτέλεση μιας εντολής: πώς;

Πρώτα, ας ξαναδούμε το Γράφημα 5β από το Μέρος 2, στο οποίο το TeX έχει αναγνωρίσει ότι μια συγκεκριμένη συμβολοσειρά χαρακτήρων μέσα στην είσοδο αποτελεί το όνομα μιας εντολής: `jobname`. Το Γράφημα 5β δείχνει ότι το TeX πρέπει να «Ελέγξει εσωτερικούς πίνακες...». Τι σημαίνει *αυτό στην πραγματικότητα*?

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

Μια άλλη, πιο λεπτομερής, περιγραφή του πώς το TeX «ελέγχει εσωτερικούς πίνακες» ώστε να περάσει από το ότι έχει μια συμβολοσειρά χαρακτήρων (π.χ., `jobname`) στο να καταλάβει ακριβώς ποια είναι η εντολή και τι σημαίνει, μπορείτε να τη βρείτε σε ένα προηγούμενο άρθρο [Τι είναι ένα «TeX token»;](/latex/el/se-vathos-arthra/53-what-is-a-tex-token.md) Εδώ, θα συνοψίσουμε τις βασικές ιδέες προσπαθώντας παράλληλα να αποφύγουμε την υπερβολική επανάληψη.

Ας ξεκινήσουμε με μια αναλογία. Ας υποθέσουμε ότι διαβάζετε ένα βιβλίο και συναντάτε μια άγνωστη λέξη: τι κάνετε; Σήμερα, σχεδόν σίγουρα θα «αρπάζατε το Google», αλλά ας υποθέσουμε ότι προτιμάτε μια παλαιότερη μέθοδο: πιάνετε ένα λεξικό που απαριθμεί λέξεις και παρέχει τη σημασία/τις σημασίες τους. Το TeX έχει έναν ανάλογο μηχανισμό: ένα εσωτερικό «λεξικό» που απαριθμεί όλες τις εντολές που είναι αυτή τη στιγμή γνωστές στο TeX—και τη «σημασία» αυτών των εντολών. Με τον όρο «σημασία» αναφερόμαστε στο τι είδους εντολή είναι: τι κάνει, καθώς και οποιαδήποτε άλλη πληροφορία μπορεί να χρειάζεται το TeX για να εκτελέσει εκείνη την εντολή. Σημειώστε επίσης ότι ο όρος «εντολή» περιλαμβάνει οποιεσδήποτε μακροεντολές TeX/LaTeX που έχουν γραφτεί από χρήστες/προγραμματιστές TeX και τις [εκατοντάδες ενσωματωμένες πρωτόγονες εντολές](/latex/el/perissotera-themata/46-tex-primitives-listed-by-tex-engine.md).

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

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

Κάθε φορά που το TeX εντοπίζει μια εντολή που χρησιμοποιείται στην είσοδό σας και χρειάζεται να ξέρει κάτι για εκείνη την εντολή, μετατρέπει την ακολουθία χαρακτήρων στο όνομα της εντολής σε έναν «ισοδύναμο» ακέραιο και χρησιμοποιεί εκείνον τον ακέραιο για να αναζητήσει την εντολή μέσα στο «μεγάλο λεξικό» του. Οι προγραμματιστές ανάμεσά σας ίσως θέλουν να γνωρίζουν ότι το TeX χρησιμοποιεί μια μορφή [συνάρτηση κατακερματισμού](https://en.wikipedia.org/wiki/Hash_function) συνάρτησης κατακερματισμού

![Διάγραμμα συνάρτησης κατακερματισμού](/files/0e8aa3ea915b677c48e93960ca5e89ab188f4241)

### Γράφημα 6: Από χαρακτήρες στη σημασία της εντολής

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

![Το TeX μετατρέπει μια συμβολοσειρά χαρακτήρων σε έναν ισοδύναμο ακέραιο για να αναζητήσει τη σημασία της εντολής](/files/1a9a944ee38c37e5ba4df978b60d67359f0eb820)

Εσωτερικά, το TeX διατηρεί μια μεταβλητή που ονομάζεται **curcs** (**τρέχ**ουσα **c**ελέγχ **ος**ακολουθίας) η οποία χρησιμοποιείται για να αποθηκεύει την ακέραιη τιμή της εντολής με την οποία εργάζεται αυτή τη στιγμή το TeX—δηλ., **curcs** αποθηκεύει τον ακέραιο που υπολογίζεται από το όνομα της εντολής. Αυτό όμως δεν είναι όλη η ιστορία, επειδή υπάρχει μία ακόμη λεπτομέρεια: αν το TeX μόλις διάβασε/επεξεργάστηκε έναν χαρακτήρα, όχι μια εντολή, θα θέσει **curcs** σε τιμή 0, για να θυμάται ότι το τελευταίο πράγμα που διαβάστηκε ήταν ένας χαρακτήρας, όχι μια εντολή.

### Τι σημαίνουν οι εντολές για το TeX

Αν εξετάσουμε το σύνολο των [ενσωματωμένων εντολών που παρέχονται από τις μηχανές TeX](/latex/el/perissotera-themata/46-tex-primitives-listed-by-tex-engine.md) μπορούμε να δούμε ότι ορισμένες από αυτές τις εντολές είναι στενά συνδεδεμένες: εκτελούν παρόμοιες εργασίες· για παράδειγμα, υπάρχουν 4 πρωτόγονες εντολές που όλες οι μηχανές TeX χρησιμοποιούν για να ορίσουν (δημιουργήσουν) μακροεντολές: `\def`, `\gdef`, `\edef`, `\xdef`. Αυτές οι 4 εντολές ορίζουν όλες μακροεντολές αλλά, φυσικά, η καθεμία το κάνει ελαφρώς διαφορετικά. Αν το δούμε από την άποψη του προγραμματισμού: εδώ έχουμε 4 εντολές ορισμού μακροεντολών που, γενικά, κάνουν το ίδιο πράγμα, αλλά χρειάζεται να επιλέξουμε μεταξύ τους ώστε να καλύψουμε την επιμέρους συμπεριφορά τους.

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

* **κωδικός εντολής**: ένα είδος «γενικής ταξινόμησης» που υποδηλώνει τι «τύπος» εντολής είναι—όπως μια εντολή «ορισμού μακροεντολής» (μία από τις `\def`, `\gdef`, `\edef`, `\xdef`); μια εντολή «δημιουργίας πλαισίου» (μία από τις `\hbox`, `\vbox` ή `\vcenter`) και ούτω καθεξής για τις εκατοντάδες εντολές που υποστηρίζουν οι μηχανές TeX. Οι μακροεντολές (εντολές ορισμένες από τον χρήστη) λαμβάνουν επίσης έναν κωδικό εντολής.
* **τροποποιητής εντολής**: Πρόκειται για βοηθητικές πληροφορίες που παρέχουν στο TeX συγκεκριμένες λεπτομέρειες για μια εντολή. Οι μακροεντολές (εντολές ορισμένες από τον χρήστη) λαμβάνουν επίσης έναν τροποποιητή εντολής—αν και, στις μακροεντολές, ο τροποποιητής εντολής παίζει ελαφρώς διαφορετικό ρόλο απ’ ό,τι στις πρωτόγονες εντολές (για τις μακροεντολές, ο τροποποιητής εντολής υποδηλώνει πού είναι αποθηκευμένος στη μνήμη ο ορισμός της μακροεντολής).

Συνδυασμένα, ο κωδικός εντολής και ο τροποποιητής εντολής ταυτοποιούν μοναδικά κάθε εντολή. Ακολουθούν οι κωδικοί εντολών και οι τροποποιητές εντολών για τις εντολές ορισμού μακροεντολών όπως χρησιμοποιούνται από το αρχικό λογισμικό TeX του Knuth—σημειώστε ότι άλλες μηχανές TeX μπορεί να χρησιμοποιούν διαφορετικές τιμές, αλλά ακολουθούν ακριβώς την ίδια αρχή:

|            |                                                            |                                                                 |
| ---------- | ---------------------------------------------------------- | --------------------------------------------------------------- |
| **Εντολή** | <p><strong>Εντολή</strong><br><strong>κωδικός</strong></p> | <p><strong>Εντολή</strong><br><strong>τροποποιητής</strong></p> |
| `\def`     | 97                                                         | 0                                                               |
| `\gdef`    | 97                                                         | 1                                                               |
| `\edef`    | 97                                                         | 2                                                               |
| `\xdef`    | 97                                                         | 3                                                               |

### Ανακεφαλαίωση: πώς βγάζουν νόημα όλες αυτές οι μεταβλητές/τιμές

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

* Για **χαρακτήρια**: χρειάζεται να καταγράψει τον κωδικό χαρακτήρα και τον κωδικό κατηγορίας. Χρειάζεται επίσης να δημιουργήσει και να αποθηκεύσει την τιμή τοκεν που υπολογίζει το TeX χρησιμοποιώντας αυτές τις τιμές.
* Για **εντολές**: το TeX χρειάζεται να γνωρίζει το αριθμητικό ισοδύναμο, **curcs**, που υπολόγισε από το όνομα της εντολής. Μπορεί επίσης να χρειαστεί να αποθηκεύσει τη «σημασία» που ανέκτησε αναζητώντας την εντολή στο «λεξικό» του TeX: τον κωδικό εντολής και τον τροποποιητή εντολής. Πέρα από αυτό, το TeX θα χρειαστεί επίσης να υπολογίσει μια τιμή τοκεν που αντιπροσωπεύει αυτή την εντολή.

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

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

* **curcmd**: (τρέχουσα εντολή) ακέραιη μεταβλητή. Χρησιμοποιείται για να αποθηκεύει την *τρέχουσα εντολή* τιμή για την εντολή που υποβάλλεται σε επεξεργασία *ή* αποθηκεύει το *κωδικός κατηγορίας* του χαρακτήρα που υποβάλλεται σε επεξεργασία·
* **curchr**: (τρέχων χαρακτήρας) ακέραιη μεταβλητή, αλλά αυτό που αποθηκεύει εξαρτάται από το τι μόλις διάβασε το TeX από την είσοδό του:
* **χαρακτήρα**: Αν το πιο πρόσφατο στοιχείο που διαβάστηκε είναι χαρακτήρας, **curchr** αποθηκεύει το τρέχον *κωδικό χαρακτήρα*.
* **εντολή**: Αν το πιο πρόσφατο στοιχείο που διαβάστηκε είναι εντολή, **curchr** αποθηκεύει το *τροποποιητής εντολής*: πρόσθετες πληροφορίες που χρησιμοποιεί το TeX για να υποστηρίξει/διευκρινίσει **curcmd**—επειδή, όπως είδαμε παραπάνω, ορισμένες εντολές μοιράζονται την ίδια τιμή **curcmd**
* **curcs**: (τρέχουσα ακολουθία ελέγχου) ακέραιη μεταβλητή που αποθηκεύει την τιμή που υπολογίζεται από τη συμβολοσειρά χαρακτήρων σε ένα όνομα εντολής. **curcs** = 0 αν το τελευταίο στοιχείο που διαβάστηκε ήταν ένας μεμονωμένος χαρακτήρας και όχι το όνομα μιας ακολουθίας ελέγχου (όνομα εντολής)·
* **curtok**: (τρέχον τοκεν) ακέραιη μεταβλητή που κρατά την τιμή του τρέχοντος τοκεν—το οποίο είναι είτε ένα τοκεν εντολής είτε ένα τοκεν χαρακτήρα.

Ακολουθούν οι παραπάνω πληροφορίες παρουσιασμένες σε πίνακα:

|                                                          |                                                                                                                                                                                                                                                    |                                                                                                                                                                                                                                                                                                                                                      |
| -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Καθολική μεταβλητή που χρησιμοποιείται μέσα στο TeX:** | **Όταν το TeX σαρώνει έναν χαρακτήρα:**                                                                                                                                                                                                            | **Όταν το TeX σαρώνει μια εντολή:**                                                                                                                                                                                                                                                                                                                  |
| **curcmd**                                               | Αποθηκεύει τον κωδικό κατηγορίας του τρέχοντος χαρακτήρα                                                                                                                                                                                           | Αποθηκεύει το *κωδικός εντολής*—το οποίο προσδιορίζει τον «τύπο» της τρέχουσας εντολής                                                                                                                                                                                                                                                               |
| **curchr**                                               | Αποθηκεύει τον κωδικό χαρακτήρα του τρέχοντος χαρακτήρα                                                                                                                                                                                            | Αποθηκεύει συμπληρωματικά δεδομένα (που ονομάζονται το *τροποποιητής εντολής*) τα οποία παρέχουν πρόσθετες πληροφορίες για την τρέχουσα εντολή                                                                                                                                                                                                       |
| **curcs**                                                | 0                                                                                                                                                                                                                                                  | Ένας μη μηδενικός θετικός ακέραιος που υπολογίζεται (μέσω μιας συνάρτησης κατακερματισμού) χρησιμοποιώντας τη συμβολοσειρά χαρακτήρων που υπάρχει στο όνομα της εντολής. Χρησιμοποιείται για την πρόσβαση στο «λεξικό» του TeX ώστε να αναζητηθεί η τρέχουσα σημασία μιας εντολής—για να ανακτηθεί ο κωδικός εντολής και ο τροποποιητής εντολής της. |
| **curtok**                                               | Για μηχανές TeX 8-bit, ένα *χαρακτηρικό token* υπολογίζεται με τον τύπο: $$\text{curtok}=256\times \text{curcmd} + \text{curchr}$$ όπου $$\text{curcmd}$$ είναι ο κωδικός κατηγορίας του χαρακτήρα και $$\text{curchr}$$ είναι ο κωδικός χαρακτήρα | Για μηχανές TeX 8-bit, ένα *token εντολής* υπολογίζεται με τον τύπο: $$\text{curtok}=4095 + \text{curcs}$$                                                                                                                                                                                                                                           |

### Περαιτέρω σημειώσεις για το τρέχον τοκεν

Για τους χαρακτήρες, η μέγιστη δυνατή τιμή τοκεν προκύπτει χρησιμοποιώντας τον μεγαλύτερο κωδικό κατηγορίας (15) και τον μεγαλύτερο κωδικό χαρακτήρα που, για μηχανές TeX 8-bit, είναι 255. Θεωρητικά (για μηχανές TeX 8-bit), η μέγιστη τιμή τοκεν χαρακτήρα, $$\text{curtok}\_{\text{max}}$$, είναι:

$$\text{curtok}\_{\text{max}}= 256\times 15 + 255 = 4095$$

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

Για τις εντολές, το τρέχον τοκεν ($$\text{curtok}$$) υπολογίζεται από $$\text{curtok}=4095 + \text{curcs}$$ αλλά για τις εντολές $$\text{curcs}$$ είναι *πάντα* μη μηδενικό, έτσι το TeX μπορεί εύκολα να προσδιορίσει τι αναπαριστά ένα τοκεν:

* Αν $$\text{curtok} > 4095$$ τότε είναι τοκεν εντολής·
* Αν $$\text{curtok} < 4095$$ είναι τοκεν χαρακτήρα.

Στην πράξη, το TeX χρησιμοποιεί τοκεν, μια απλή ακέραιη τιμή, για να «συσκευάζει» όλες τις πληροφορίες που χρειάζεται να ξέρει για ένα στοιχείο που διαβάζεται από την είσοδο.

## Μέρος 4

Στο Μέρος 4 εξερευνούμε μια σειρά από παραδείγματα μακροεντολών για να καταδείξουμε τον ρόλο και τον σκοπό του `<parameter text>` τμήματος μιας μακροεντολής ώστε να λειτουργεί ως «πρότυπο τοκεν», το οποίο μπορεί να κατασκευαστεί μέσω της χρήσης διακριτικών οριοθέτησης.

[Μέρος 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/21-how-tex-macros-actually-work-part-3.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.
