Υποστήριξη της ελληνικής γλώσσας στο LaTeX
Αυτό το μάθημα παρουσιάζει τα βασικά στοιχεία για την υποστήριξη της ελληνικής γλώσσας στο LaTeX.
Γενικά
Στο μάθημα 14 είδαμε κάποιες βασικές πληροφορίες για τη χρήση του LaTeX για γλώσσες εκτός της αγγλικής.
Η εργασία με τα ελληνικά στο LaTeX είναι πλέον εύκολη, χάρη στις μηχανές lualatex και xelatex, οι οποίες υποστηρίζουν Unicode. Έτσι, οι ελληνικοί χαρακτήρες μπορούν να πληκτρολογηθούν απευθείας στο αρχείο με τον κώδικα LaTeX (αρκεί αυτό να είναι κωδικοποιημένο σε UTF-8 και όχι σε κωδικοποιήσεις 8-bit των ελληνικών όπως ISO-8859-7 ή Windows-1253). Επίσης, οι μηχανές αυτές χρησιμοποιούν τις γραμματοσειρές TrueType και OpenType που έχουμε στον υπολογιστή μας, πολλές από τις οποίες διαθέτουν πλήρες σύνολο ελληνικών χαρακτήρων.
Η παλαιότερη μηχανή pdflatex δεν υποστηρίζει Unicode και έτσι πρέπει να χρησιμοποιηθούν ειδικά πακέτα για την υποστήριξη της ελληνικής γλώσσας (όπως και όλων των άλλων γλωσσών που δεν χρησιμοποιούν το βασικό λατινικό (αγγλικό) αλφάβητο). Επίσης, η μηχανή αυτή χρησιμοποιεί γραμματοσειρές ειδικής μορφής, και έτσι υπάρχουν πολύ λιγότερες τέτοιες γραμματοσειρές που περιέχουν τους ελληνικούς χαρακτήρες.
Πέρα, όμως, από την εισαγωγή των χαρακτήρων, για τη σωστή υποστήριξη της ελληνικής γλώσσας απαιτούνται και πολλές άλλες λειτουργίες, όπως η υποστήριξη συλλαβισμού των ελληνικών λέξεων, η μετάφραση τυπικών όρων («Κεφάλαιο», «Πίνακας περιεχομένων» κ.λπ.), η αντίστοιχη εμφάνιση της ημερομηνίας, η προσαρμογή της αλφαβητικής αρίθμησης («α, β, γ» αντί για «a, b, c»), κ.ά. Στο LaTeX υπάρχουν μερικά πακέτα που υλοποιούν αυτές τις λειτουργίες:
- Το πακέτο babel παρέχει υποστήριξη για πολλές γλώσσες, σε όλες τις σύγχρονες μηχανές (
lualatex,xelatex,pdflatex). - Το πακέτο polyglossia παρέχει υποστήριξη για πολλές γλώσσες, αλλά μόνο στις μηχανές
lualatexκαιxelatex. - Το πακέτο xgreek παρέχει υποστήριξη μόνο για την ελληνική γλώσσα, και μόνο στις μηχανές
lualatexκαιxelatex.
Παρακάτω θα παρουσιάσουμε τη χρήση του πακέτου babel, καθώς μπορεί να χρησιμοποιηθεί με όλες τις μηχανές LaTeX και είναι αυτό που υποστηρίζεται επίσημα από το έργο LaTeX. Επίσης, θα επικεντρωθούμε στη χρήση της μηχανής lualatex, η οποία είναι πλέον η προτεινόμενη μηχανή για χρήση με το LaTeX.
Εργασία με το LuaLaTeX
Το ακόλουθο είναι ένα τυπικό παράδειγμα εγγράφου που περιέχει ελληνικό κείμενο.
%!TEX program=lualatex
\documentclass{report}
\usepackage[greek]{babel}
\babelfont{rm}{NewComputerModern10}
\begin{document}
\chapter{Πρώτο κεφάλαιο}
\today
Όλοι οι άνθρωποι γεννιούνται ελεύθεροι και ίσοι στην αξιοπρέπεια και τα δικαιώματα.
Είναι προικισμένοι με λογική και συνείδηση,
και οφείλουν να συμπεριφέρονται μεταξύ τους με πνεύμα αδελφοσύνης.
Κάθε άνθρωπος δικαιούται να επικαλείται όλα τα δικαιώματα και όλες τις ελευθερίες
που προκηρύσσει η παρούσα Διακήρυξη, χωρίς καμία απολύτως διάκριση, ειδικότερα ως
προς τη φυλή, το χρώμα, το φύλο, τη γλώσσα, τις θρησκείες, τις πολιτικές
ή οποιεσδήποτε άλλες πεποιθήσεις, την εθνική ή κοινωνική καταγωγή, την περιουσία,
τη γέννηση ή οποιαδήποτε άλλη κατάσταση.
\end{document}
Στη γραμμή 5 φορτώνουμε το πακέτο babel με την επιλογή greek. Παρατηρήστε ότι ο όρος «Κεφάλαιο» και η ημερομηνία εμφανίζονται στα ελληνικά, και επίσης οι λέξεις είναι σωστά συλλαβισμένες.
Στη γραμμή 6 χρησιμοποιούμε την εντολή \babelfont για να ορίσουμε τη βασική γραμματοσειρά (rm) του κειμένου. Η εντολή αυτή παρέχει έναν πιο εύχρηστο τρόπο ορισμού γραμματοσειρών σε σχέση με τις εντολές του πακέτου fontspec και μάλιστα ανά γλώσσα για μεικτά κείμενα (αν, π.χ. η γραμματοσειρά που χρησιμοποιούμε για τα αγγλικά δεν περιέχει ελληνικούς χαρακτήρες). Εδώ χρησιμοποιήσαμε τη γραμματοσειρά New Computer Modern, η οποία υπάρχει στις διανομές LaTeX και περιέχει τους ελληνικούς χαρακτήρες· θα μπορούσατε όμως να χρησιμοποιήσετε οποιαδήποτε γραμματοσειρά έχετε στον υπολογιστή σας, π.χ.
\babelfont{rm}{Times New Roman}
\babelfont{sf}{Arial}
\babelfont{tt}{Courier New}
Αν το έγγραφό μας περιέχει και αγγλικό κείμενο, πρέπει να προσθέσουμε την επιλογή english όταν φορτώνουμε το πακέτο babel:
\usepackage[english, greek]{babel}
Η τελευταία επιλογή καθορίζει την κύρια γλώσσα του εγγράφου: είναι η γλώσσα στην οποία εμφανίζονται οι τυπικοί όροι (όπως «Κεφάλαιο», «Πίνακας περιεχομένων» κ.λπ.) και η ημερομηνία, καθώς και η γλώσσα που χρησιμοποιείται για τον συλλαβισμό των λέξεων.
Με την εντολή \selectlanguage{english} αλλάζουμε τη γλώσσα του εγγράφου σε αγγλικά (από εκείνο το σημείο και μέχρι να υπάρξει άλλη τέτοια εντολή, π.χ. \selectlanguage{greek}). Για σύντομα τμήματα κειμένου στην άλλη γλώσσα μπορούμε να χρησιμοποιήσουμε τις εντολές \foreignlanguage{english}{english text} ή αντίστοιχα \foreignlanguage{greek}{ελληνικό κείμενο}. Η επισήμανση της γλώσσας είναι χρήσιμη ώστε αν η λέξη βρεθεί στο τέλος της γραμμής να συλλαβιστεί σωστά.
Είναι εμφανές ότι η εναλλαγή γλώσσας με αυτό τον τρόπο δεν είναι καθόλου βολική. Ευτυχώς, επειδή το αγγλικό και το ελληνικό αλφάβητο είναι διαφορετικά μεταξύ τους, το babel με το lualatex μπορεί να ανιχνεύσει αυτόματα τη γλώσσα σε κάθε σημείο του κειμένου. Για να γίνει αυτό, πρέπει να φορτώσουμε λίγο διαφορετικά τις γλώσσες:
%!TEX program=lualatex
\documentclass{report}
\usepackage{babel}
\babelprovide[
import=el,
main,
onchar=ids fonts,
]{greek}
\babelprovide[
import,
onchar=ids fonts
]{english}
\babelfont{rm}{NewComputerModern10}
\begin{document}
\chapter{Πρώτο κεφάλαιο}
\today
Όλοι οι άνθρωποι γεννιούνται ελεύθεροι και ίσοι στην αξιοπρέπεια και τα δικαιώματα.
Είναι προικισμένοι με λογική και συνείδηση,
και οφείλουν να συμπεριφέρονται μεταξύ τους με πνεύμα αδελφοσύνης.
Κάθε άνθρωπος δικαιούται να επικαλείται όλα τα δικαιώματα και όλες τις ελευθερίες
που προκηρύσσει η παρούσα Διακήρυξη, χωρίς καμία απολύτως διάκριση, ειδικότερα ως
προς τη φυλή, το χρώμα, το φύλο, τη γλώσσα, τις θρησκείες, τις πολιτικές
ή οποιεσδήποτε άλλες πεποιθήσεις, την εθνική ή κοινωνική καταγωγή, την περιουσία,
τη γέννηση ή οποιαδήποτε άλλη κατάσταση.
\chapter{Δεύτερο κεφάλαιο}
\today
All human beings are born free and equal in dignity and rights.
They are endowed with reason and conscience
and should act towards one another in a spirit of brotherhood.
Everyone is entitled to all the rights and freedoms set forth in this Declaration,
without distinction of any kind, such as race, colour, sex, language, religion,
political or other opinion, national or social origin, property,
birth or other status.
\end{document}
Παρατηρήστε ότι οι τυπικοί όροι και η ημερομηνία εμφανίζονται παντού στα ελληνικά, την κύρια γλώσσα του κειμένου.
Επισημαίνεται ότι η αυτόματη ανίχνευση της γλώσσας δουλεύει με τον τρόπο αυτό μόνο με το lualatex. Για το xelatex υπάρχει άλλος μηχανισμός, που όμως δεν καλύπτεται εδώ.
Εργασία με το pdflatex
Για ιστορικούς λόγους, δίνουμε ένα παράδειγμα ελληνικού κειμένου για το pdflatex.
\documentclass{article}
\usepackage[LGR]{fontenc}
\usepackage[english, greek]{babel}
\begin{document}
\today
Όλοι οι άνθρωποι γεννιούνται ελεύθεροι και ίσοι στην αξιοπρέπεια και τα δικαιώματα.
Είναι προικισμένοι με λογική και συνείδηση,
και οφείλουν να συμπεριφέρονται μεταξύ τους με πνεύμα αδελφοσύνης.
Κάθε άνθρωπος δικαιούται να επικαλείται όλα τα δικαιώματα και όλες τις ελευθερίες
που προκηρύσσει η παρούσα Διακήρυξη, χωρίς καμία απολύτως διάκριση, ειδικότερα ως
προς τη φυλή, το χρώμα, το φύλο, τη γλώσσα, τις θρησκείες, τις πολιτικές
ή οποιεσδήποτε άλλες πεποιθήσεις, την εθνική ή κοινωνική καταγωγή, την περιουσία,
τη γέννηση ή οποιαδήποτε άλλη κατάσταση.
\selectlanguage{english}
\today
All human beings are born free and equal in dignity and rights.
They are endowed with reason and conscience
and should act towards one another in a spirit of brotherhood.
Everyone is entitled to all the rights and freedoms set forth in this Declaration,
without distinction of any kind, such as race, colour, sex, language, religion,
political or other opinion, national or social origin, property,
birth or other status.
\end{document}
Εδώ απαιτείται επιπλέον η χρήση του πακέτου fontenc για τη σωστή κωδικοποίηση των ελληνικών χαρακτήρων. Δεν θέτουμε κάποια γραμματοσειρά και χρησιμοποιείται η προεπιλεγμένη γραμματοσειρά του pdflatex· η εντολή \babelfont δεν μπορεί να χρησιμοποιηθεί εδώ καθώς αυτή αφορά μόνο τις μηχανές lualatex και xelatex. Τέλος, δεν υπάρχει μηχανισμός για αυτόματη ανίχνευση της γλώσσας, και πρέπει να χρησιμοποιήσουμε την εντολή \selectlanguage (ή την \foreignlanguage) για την αλλαγή γλώσσας.
Περισσότερες πληροφορίες
Το CTAN έχει ειδικές ενότητες με όλα τα πακέτα που σχετίζονται με την ελληνική γλώσσα καθώς και με όλες τις γραμματοσειρές που υποστηρίζουν ελληνικά. Αυτά αφορούν κυρίως το pdflatex, το οποίο είχε περιορισμούς και δυσκολίες στη χρήση άλλων γλωσσών εκτός από την αγγλική, όπως έχουμε αναφέρει.
Ασκήσεις
Στο δεύτερο παράδειγμα, με το ελληνικό και αγγλικό κείμενο που χρησιμοποιεί το lualatex, δοκιμάστε να μην φορτώσετε το πακέτο babel, βάζοντας σε σχόλιο τις γραμμές 5-15 και προσθέτοντας
\usepackage{fontspec}
\setmainfont{NewComputerModern10}
Θα παρατηρήσετε ότι το κείμενο εμφανίζεται κανονικά, καθώς η μηχανή lualatex υποστηρίζει πλήρως το Unicode, όμως δεν γίνεται συλλαβισμός των ελληνικών λέξεων, και οι όροι όπως «Κεφάλαιο» και η ημερομηνία εμφανίζονται στα αγγλικά.
Στο παράδειγμα με το pdflatex δοκιμάστε να βάλετε σε σχόλιο τη γραμμή 19 που αλλάζει τη γλώσσα σε αγγλικά, και παρατηρήστε τι συμβαίνει στο αγγλικό κείμενο.
Αν γνωρίζετε κάποια άλλη ξένη γλώσσα εκτός από τα αγγλικά, δοκιμάστε να φτιάξετε ένα έγγραφο και με αυτή τη γλώσσα. Παρατηρήστε όμως ότι, αν η γλώσσα χρησιμοποιεί το λατινικό αλφάβητο (π.χ. γαλλικά, ιταλικά), δεν θα μπορεί να γίνει αυτόματη ανίχνευση της γλώσσας και θα πρέπει να επισημαίνετε εσείς τη γλώσσα κάθε τμήματος του κειμένου.