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

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

[Μέρος 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 (όπως οι εντολές LaTeX) — στο πιο θεμελιώδες επίπεδο, μέσα στο ίδιο το λογισμικό της μηχανής TeX. Αντί να βασιζόμαστε *αποκλειστικά* σε μια συλλογή από παραδειγματικές μακροεντολές σχεδιασμένες να καταδεικνύουν διάφορα χαρακτηριστικά, ακραίες περιπτώσεις και συμπεριφορές του TeX, θα κοιτάξουμε μέσα στο ίδιο το TeX για να δούμε *πώς* και *γιατί* πώς οι μέθοδοι προγραμματισμού μακροεντολών του λειτουργούν έτσι όπως λειτουργούν.

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

### Η γλώσσα προγραμματισμού TeX: σας θυμίζει κάτι;

Δεν είναι υπερβολικά σκληρό να περιγράψουμε τη γλώσσα προγραμματισμού TeX ως κάπως απόκρυφη, επειδή είναι — τουλάχιστον με τα κριτήρια των περισσότερων κυρίαρχων γλωσσών προγραμματισμού που χρησιμοποιούνται σήμερα. Καθώς ξεκινάτε το ταξίδι σας για να μάθετε περισσότερα για το TeX/LaTeX, ιδιαίτερα αν θέλετε να γράψετε μη τετριμμένες μακροεντολές, συναντάτε γρήγορα έννοιες όπως οι κωδικοί κατηγοριών, τα tokens/η αποτύπωση σε tokens και η «εξάπλωση» των εντολών ή των μακροεντολών. Αυτός ο καταιγισμός εννοιών είναι πιθανό να σας είναι αρκετά ξένος, ίσως αφήνοντάς σας μπερδεμένους και, κατά καιρούς, πιθανώς λίγο απογοητευμένους, καθώς η πορεία σας προς την επιτυχία δεν βοηθιέται πάντα από κάποια από τα σχεδόν αδιαπέραστα μηνύματα σφάλματος του TeX/LaTeX.

## Λοιπόν, από πού ξεκινάμε; Με τους κωδικούς κατηγοριών.

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

Ας ρίξουμε μια πιο προσεκτική ματιά στην πηγαία, ή εισόδου, «γλώσσα» που χρησιμοποιείται για να γραφτεί το αρχείο TeX σας. Ένα `.tex` αρχείο είναι, τελικά, μια μεγάλη συνεχής ακολουθία χαρακτήρων (συμπεριλαμβανομένων των χαρακτήρων αλλαγής γραμμής): αποτελείται από κείμενο που προορίζεται για στοιχειοθεσία, παρεμβαλλόμενο με `\`, `}`, `$`, `[` και με κάθε λογής χαρακτήρες που μπορούν να εμφανιστούν σε μια φαινομενικά σχεδόν άπειρη ποικιλία συνδυασμών. Όποιος δεν χρησιμοποιεί TeX/LaTeX μπορεί να κοιτάξει ένα τυπικό `.tex` αρχείο και να δικαιολογηθεί αν το αντιληφθεί ως ένα μάλλον συγκεχυμένο συνονθύλευμα χαρακτήρων με ελάχιστη, αν υπάρχει, ορατή δομή αρχείου. Το πακέτο μακροεντολών LaTeX σίγουρα επιβάλλει σε κάποιο βαθμό κάποια βασική δομή σε ένα αρχείο εισόδου .tex. Ωστόσο, ανάμεσα στα `\begin{document}` και `\end{document}` εναπόκειται στον συντάκτη του εγγράφου τι θα μπει εκεί. Αν κοιτάξετε τα `.tex` αρχεία που γράφτηκαν με το αρχικό πακέτο Plain TeX του Knuth, θα δείτε ότι η δομή του εγγράφου είναι σχεδόν εντελώς απούσα.

Έτσι, γενικά, ένα αρχείο εισόδου TeX μπορεί να φαίνεται μάλλον αδόμητο, ένα φαινομενικά αυθαίρετο μείγμα περιεχομένου που πρόκειται να στοιχειοθετηθεί, παρεμβαλλόμενο με οδηγίες (εντολές) που κατευθύνουν τη στοιχειοθεσία αυτού του περιεχομένου. Πώς είναι καν δυνατό για το TeX να βγάλει νόημα από ένα τυπικό `.tex` αρχείο εισόδου: να φιλτράρει αυτό το εισερχόμενο συνονθύλευμα χαρακτήρων σε εφαρμόσιμες οδηγίες για τη μηχανή στοιχειοθεσίας και περιεχόμενο που πρόκειται να στοιχειοθετηθεί;

### Το φιλτράρισμα του συνονθυλεύματος: Πείτε γεια στους κωδικούς κατηγοριών

Ένας οποιοσδήποτε ανθρώπινος παρατηρητής, που δεν γνωρίζει τίποτα για το TeX, μπορεί να κοιτάξει ένα `.tex` αρχείο και να αναγνωρίσει ορισμένους χαρακτήρες όπως `$` και να ξέρει ότι είναι το σύμβολο για ένα νόμισμα, ή να δει ένα `&` και να το αναγνωρίσει ως εμπορικό και. Εκείνος ο παρατηρητής συμπεραίνει μια *σημασίας* για κάθε χαρακτήρα που βλέπει — ένα νόημα βασισμένο στον ρόλο που παίζει ο συγκεκριμένος χαρακτήρας στην ανθρώπινη επικοινωνία. Επιπλέον, μπορεί να δει χαρακτήρες όπως `a`, `e`, `ή` και να γνωρίζει ότι ταξινομούνται ως φωνήεντα, ενώ άλλοι όπως `b`, `c` ή `d` ταξινομούνται ως σύμφωνα. Ως άνθρωποι, έχουμε κάτι σαν ενσωματωμένο πίνακα αναζήτησης (στη μνήμη μας) μέσω του οποίου αποδίδουμε νόημα σε κάθε χαρακτήρα που βλέπουμε — ένα νόημα βασισμένο στον ρόλο που επιτελεί ο συγκεκριμένος χαρακτήρας στις γλώσσες στις οποίες μπορούμε να επικοινωνούμε.

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

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

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

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

| **Κωδικός κατηγορίας** | **Περιγραφή**                                                                 | **Τυπικό LATEX/TEX**                                                               |
| ---------------------- | ----------------------------------------------------------------------------- | ---------------------------------------------------------------------------------- |
| 0                      | Χαρακτήρας διαφυγής—λέει στο TEX να αρχίσει να αναζητά μια εντολή             | `\`                                                                                |
| 1                      | Έναρξη ομάδας                                                                 | {                                                                                  |
| 2                      | Τέλος ομάδας                                                                  | }                                                                                  |
| 3                      | Μετατόπιση μαθηματικού—εναλλαγή προς/από τη μαθηματική λειτουργία             | $                                                                                  |
| 4                      | Στηλοθέτης στοίχισης                                                          | &                                                                                  |
| 5                      | Τέλος γραμμής                                                                 | Κωδικός ASCII 13 (`\\r`)                                                           |
| 6                      | Παράμετρος μακροεντολής                                                       | #                                                                                  |
| 7                      | Εκθέτης—για στοιχειοθεσία μαθηματικών: `$y=x^2$` $$y=x^2$$                    | ˆ                                                                                  |
| 8                      | Υποδείκτης—για στοιχειοθεσία μαθηματικών: `$y=x_2$` $$y=x\_2$$                | \_                                                                                 |
| 9                      | Αγνοούμενος χαρακτήρας                                                        | ASCII 0 `<null>`                                                                   |
| 10                     | Διάκενο                                                                       | Κωδικοί ASCII 32 (κενό) και 9 (χαρακτήρας tab)                                     |
| 11                     | Γράμμα                                                                        | A...Z, a...z, (και χιλιάδες χαρακτήρες Unicode)                                    |
| 12                     | Άλλα                                                                          | 0...9 συν ,.;?" και πολλοί άλλοι                                                   |
| 13                     | Ενεργός χαρακτήρας                                                            | Ειδικός κωδικός κατηγορίας για τη δημιουργία μακροεντολών ενός χαρακτήρα όπως το ˜ |
| 14                     | Χαρακτήρας σχολίου—αγνόησε ό,τι ακολουθεί μέχρι το τέλος της γραμμής          | %                                                                                  |
| 15                     | Μη έγκυρος χαρακτήρας, δεν επιτρέπεται να εμφανίζεται στο αρχείο εισόδου .tex | Κωδικός ASCII 127 (`DEL`)                                                          |

Η χρήση των κωδικών κατηγοριών είναι ο βασικός μηχανισμός του TeX για το φιλτράρισμα της εισερχόμενης ροής χαρακτήρων, ώστε να κατανοεί την είσοδό του και να προσδιορίζει:

* χαρακτήρες που αποτελούν το κείμενο προς στοιχειοθεσία·
* οριοθέτηση περιεχομένου που πρέπει να στοιχειοθετηθεί ως μαθηματικά·
* ακολουθίες χαρακτήρων που είναι ονόματα εντολών προς επεξεργασία ή εκτέλεση·
* … και πολλές άλλες εργασίες στοιχειοθεσίας.

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

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

Όταν η μηχανή TeX σας ξεκινά («[εκκινείται](https://en.wikipedia.org/wiki/Bootstrapping)») θα χρησιμοποιήσει ένα σύνολο προεπιλεγμένων αναθέσεων χαρακτήρων σε κωδικούς κατηγοριών αλλά, μέσω της `\catcode` εντολής, αυτές οι προεπιλογές μπορούν να αλλάξουν από τον βασικό κώδικα LaTeX (μακροεντολές) ή/και από τα πακέτα LaTeX που έχετε φορτώσει — ή πράγματι από τον δικό σας κώδικα ή τις μακροεντολές TeX. Ωστόσο, με τον καιρό και μέσω της παράδοσης/χρήσης, ορισμένοι χαρακτήρες που έχουν ανατεθεί σε συγκεκριμένους κωδικούς κατηγοριών έχουν καθιερωθεί ως «πρότυπα» και η τήρηση αυτών των προτύπων είναι σίγουρα επιθυμητή αν θέλετε τα έγγραφά σας να είναι φορητά και εύκολα να μοιράζονται με συναδέλφους ή άλλους χρήστες. Για παράδειγμα, ο `\` χαρακτήρας [παραπάνω πίνακα](#tbl-0).

### Ανάγνωση (σάρωση) της εισόδου

Όταν το TeX διαβάζει (σαρώνει) τον επόμενο χαρακτήρα από το αρχείο εισόδου σας, το πρώτο πράγμα που κάνει είναι να κοιτάξει τον κωδικό κατηγορίας του, οπότε ας ρίξουμε μια πιο προσεκτική ματιά στο τι συμβαίνει όταν το TeX διαβάζει μια τυπική γραμμή εισόδου.

Ας υποθέσουμε ότι έχουμε ένα αρχείο .tex που περιέχει το κείμενο `Hello World \jobname` κάπου μέσα σε μια παράγραφο. Αν κοιτάξουμε μέσα στο `.tex` αρχείο χρησιμοποιώντας έναν [δεκαεξαδικό επεξεργαστή](https://en.wikipedia.org/wiki/Hex_editor), βλέπουμε ότι η ακολουθία χαρακτήρων `Hello World \jobname` στο δικό μας `.tex` αρχείο είναι απλώς μια σειρά ακεραίων, ή *κωδικών χαρακτήρων*, όπως φαίνεται στο στιγμιότυπο παρακάτω ως η δεκαεξαδική ακολουθία:

`48, 65, 6C, 6C, 6F, 20, 57, 6F, 72, 6C, 64, 20, 5C, 6A, 6F, 62, 6E, 61, 6D, 65, 20`

![Δεκαεξαδικοί κωδικοί χαρακτήρων σε ένα αρχείο TeX](/files/a3c3e150d60265a9bbdee283d5efaf3c143b712f)

Αν μετατρέψουμε από δεκαεξαδικό (βάση 16) σε δεκαδικό (βάση 10), η ακολουθία των κωδικών χαρακτήρων είναι:

![Δεκαδικοί κωδικοί χαρακτήρων σε ένα αρχείο TeX](/files/a268e782a4168c83cd03565cab935f96ba2fd998)

Γνωρίζουμε επίσης ότι, για το TeX, κάθε χαρακτήρας έχει έναν αντίστοιχο κωδικό κατηγορίας· έτσι, με βάση το [παραπάνω πίνακα](#tbl-0) γνωρίζουμε ότι οι ακόλουθες προεπιλεγμένες αναθέσεις κωδικών κατηγοριών χρησιμοποιούνται (πιθανότατα) επίσης:

![Κωδικοί κατηγοριών TeX](/files/3507e525751db3eb954d7ba396e65e063698a984)

Έτσι, για το TeX, κάθε χαρακτήρας στο αρχείο εισόδου αναπαρίσταται από *δύο* αριθμητικές τιμές — τον κωδικό χαρακτήρα του και τον κωδικό κατηγορίας του:

![Κωδικοί χαρακτήρων και αντίστοιχοι κωδικοί κατηγοριών TeX](/files/5517dde267d14446694708b48e23e69f06a467d8)

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

## Μέρος 2

Στο μέρος 2 ρίχνουμε μια πιο προσεκτική ματιά στο πώς το 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/19-how-tex-macros-actually-work-part-1.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.
