PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Griechisch unter fontenc + babel + lualatex



Amandus
30-06-2010, 17:21
Korrektur: im Titel muß es fontspec statt fontenc heißen

Hallo,

ich habe stellenweise griechischen Text zu setzen. Die verwendeten Schriften sind Opentype-Fonts, die Fontspec bereitstellt. Die lateinische und griechische Schrift liegt in je einem eigenen Font vor.

Da mit luaLaTeX kompiliert wird kann für die Spracheinstellung nicht Polyglossia eingesetzt werden.

Bis jetzt bin ich nur soweit gekommen, wie das nachfolgende Beispiel zeigt:


\documentclass[fontsize=12pt]{scrreprt}

\usepackage{luaotfload}
\usepackage[EU2]{fontenc}

\usepackage[greek,latin]{babel}
%\languageattribute{greek}{polutoniko}

\usepackage{fontspec}
\setmainfont [Ligatures=TeX]{Tex Gyre Pagella}
\setsansfont [Ligatures=TeX,Scale=MatchLowercase]{Linux Libertine O}
%\newfontfamily\greekfont[Ligatures=TeX,Scale=MatchLowercase]{Linux Libertine O}

\usepackage{lipsum}

\begin{document}

\lipsum[1]

\textsf{μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος οὐλομένην, ἣ μυρί' Ἀχαιοῖς ἄλγε' ἔθηκε, πολλὰς δ' ἰφθίμους ψυχὰς Ἄϊδι προί̈αψεν ἡρώων, αὐτοὺς δὲ ἑλώρια τεῦχε κύνεσσιν οἰωνοῖσί τε πᾶσι, Διὸς δ' ἐτελείετο βουλή, ἐξ οὗ δὴ τὰ πρῶτα διαστήτην ἐρίσαντε Ἀτρεί̈δης τε ἄναξ ἀνδρῶν καὶ δῖος Ἀχιλλεύς.}

\lipsum[1]

\end{document}

Über diese Art der Schriftzuweisung mit der (sonst nicht benötigten) Serifenlosen kann ich zwar griechischen Text setzen, allerdings ohne die Silbentrennung von Babel.

Soweit ich verstanden habe müßte mit einem
\greektext{} Babel die griechische Silbentrennung angezeigt werden können, was jedoch nicht funktioniert.

Ich habe einen verwandten Thread gefunden, der mich jedoch nicht weiterbrachte: http://comments.gmane.org/gmane.comp.tex.luatex.user/1528

Wie stellt man die Sache richtig an?

u_fischer
30-06-2010, 18:11
Die Sprache für die Silbentrennung kannst du auch ohne babel über \language ändern (die log-Datei zeigt die die unterschiedlichen Trennungen):


\documentclass[12pt]{book}
\begin{document}
\makeatletter
\language=\l@english
\showhyphens{minister}

\language=\l@ngerman

\showhyphens{minister}
\end{document}


Wenn du das Paket babel lädst, kannst du auch \hyphenrule{Sprache} oder \begin{hyphenrules}{Sprache}...\end{hyphenrules} benutzen.

Ich würde aber mit lualatex keine babel-Optionen benutzen, die auf Sprachen mit fremde Skripte (russisch, griechisch ...) umschalten. Die entsprechenden Sprachbefehle schalten meist auch die Schriftkodierung um, und das beißt sich fürchterlich mit fontspec + unicode-Input. Z.B. \greektext benutzt LGR:


\DeclareRobustCommand{\greektext}{%
\fontencoding{LGR}\selectfont
\def\encodingdefault{LGR}}


Westliche Sprachen wie ngerman, english oder frenchb sind meist kein Problem.


Anmerkung: Soweit ich sehe, benutzen weder gloss-greek noch gloss-latin von polyglossia \XeTeXinterclass-Befehle. D.h. folgendes könnte funktionieren:


\usepackage{fontspec}
% Schrift definieren, bevor polyglossia gloss-greek lädt!
\newfontfamily\greekfont[Ligatures=TeX,Scale=MatchLowercase]{....}
\def\newXeTeXintercharclass#1{}%hack
\usepackage[greek]{polyglossia}


Aber bitte mit Vorsicht genießen, und nicht auch noch french dazuladen.

u_fischer
30-06-2010, 18:21
Nachtrag: Ich sehe gerade in der Diskussion, auf die du verwiesen hattest, dass man eventuell neben der Aktivierung der Sprache auch noch diverse \lccode/\uccode-setzen muss. Ich denke (ungetestet!) die nötigen Definitionen stehen am Anfang von gloss-greek.ldf, notfalls kannst du dir sie auch aus unicode-letters.tex kopieren.

Amandus
01-07-2010, 08:20
Jetzt bin ich mit LaTeX an einen Punkt angekommen, wo wenn ich ein Loch stopfe, sich an anderer Stelle wieder eins aufreißt. Ein nach Möglichkeiten eingedampftes, die bestehenden Probleme aufzeigendes Minimalbeispiel soll dies deutlich machen:


\documentclass[fontsize=12pt,DIV=9]{scrreprt}
\usepackage{luaotfload}
\usepackage[EU2]{fontenc}
\pdfprotrudechars2\pdfadjustspacing2

\usepackage[frenchb,latin,german]{babel}\frenchbsetup{og=«,fg=»}
\usepackage[autostyle]{csquotes}
\MakeAutoQuote «»

\usepackage{fixltx2e,setspace,xspace,blindtext}

\usepackage{fontspec}
\DeclareUTFcharacter[\UTFencname]{x00BB}{\guillemotright}
\DeclareUTFcharacter[\UTFencname]{x00AB}{\guillemotleft}

\newfontfamily\greekfont[Ligatures=TeX,Scale=MatchLowercase]{Linux Libertine O}
\def\newXeTeXintercharclass#1{}
\usepackage[greek]{polyglossia}

\newfontfeature{Microtype}{protrusion=default;expa nsion=default;}
\directlua{fonts.protrusions.setups.default.factor =0.5}

\defaultfontfeatures{Microtype,Ligatures=TeX,Numbe rs=OldStyle}
\setromanfont [Microtype,Ligatures=TeX,Numbers=OldStyle]{Tex Gyre Pagella}

\usepackage{hyperref}

\begin{document}
\begin{hyphenrules}{greek}
μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος οὐλομένην, ἣ μυρί' Ἀχαιοῖς ἄλγε' ἔθηκε, πολλὰς δ' ἰφθίμους ψυχὰς Ἄϊδι προί̈αψεν ἡρώων, αὐτοὺς δὲ ἑλώρια τεῦχε κύνεσσιν οἰωνοῖσί τε πᾶσι, Διὸς δ' ἐτελείετο βουλή, ἐξ οὗ δὴ τὰ πρῶτα διαστήτην ἐρίσαντε Ἀτρεί̈δης τε ἄναξ ἀνδρῶν καὶ δῖος Ἀχιλλεύς.
\end{hyphenrules}

\selectlanguage{latin}
\blindtext[1]

\selectlanguage{german}
Jemand musste Josef K. verleumdet haben, denn ohne dass er etwas Böses getan hätte, wurde er eines Morgens verhaftet. »Wie ein Hund!« sagte er, es war, als sollte die Scham ihn überleben. Als Gregor Samsa eines Morgens aus unruhigen Träumen erwachte, fand er sich in seinem Bett zu einem ungeheueren Ungeziefer verwandelt. Und es war ihnen wie eine Bestätigung ihrer neuen Träume und guten Absichten, als am Ziele ihrer Fahrt die Tochter als erste sich erhob und ihren jungen Körper dehnte. »Es ist ein eigentümlicher Apparat«, sagte der Offizier zu dem Forschungsreisenden und überblickte mit einem gewissermaßen bewundernden Blick den ihm doch wohlbekannten Apparat. Sie hätten noch ins Boot springen können, aber der Reisende hob ein schweres, geknotetes Tau vom Boden, drohte ihnen damit und hielt sie dadurch von dem Sprunge ab. In den letzten Jahrzehnten ist das Interesse an Hungerkünstlern sehr zurückgegangen. Aber sie überwanden sich, umdrängten den Käfig und wollten sich gar nicht fortrühren. Jemand musste Josef K. verleumdet haben, denn ohne dass er etwas Böses getan hätte, wurde er eines Morgens verhaftet.

\selectlanguage{french}
En se réveillant un matin après des rêves agités, Gregor Samsa se retrouva, dans son lit, métamorphosé en un monstrueux insecte. Il était sur le dos, un dos aussi dur qu’une carapace, et, en relevant un peu la tête, il vit, bombé, brun, cloisonné par des arceaux plus rigides, son abdomen sur le haut duquel la couverture, prête à glisser tout à fait, ne tenait plus qu’à peine. Ses nombreuses pattes, lamentablement grêles par comparaison avec la corpulence qu’il avait par ailleurs, grouillaient désespérément sous ses yeux. «Qu’est-ce qui m’est arrivé?» pensa-t-il. Ce n’était pas un rêve. Sa chambre, une vraie chambre humaine, juste un peu trop petite, était là tranquille entre les quatre murs qu’il connaissait bien. Au-dessus de la table où était déballée une collection d’échantillons de tissus - Samsa était représentant de commerce - on voyait accrochée l’image qu’il avait récemment découpée dans un magazine et mise dans un joli cadre doré. Elle représentait une dame munie d’une toque et d’un boa tous les deux en fourrure et qui, assise bien droite, tendait vers le spectateur un lourd manchon de fourrure où tout son avant-bras avait disparu. Le regard de Gregor se tourna ensuite vers la fenêtre, et le temps maussade - on entendait les gouttes de pluie frapper le rebord en zinc - le rendit tout mélancolique. «Et si je redormais un peu et oubliais toutes ces sottises ?» se dit-il ; mais c’était absolument irréalisable, car il avait l’habitude de dormir sur le côté droit et, dans l’état où il était à présent, il était incapable de se mettre dans cette position. En se réveillant un matin après des rêves agités, Gregor Samsa se retrouva, dans son lit, métamorphosé en un monstrueux insecte.
\end{document}

Das Beispiel wäre kürzer, wenn der Beispieltext mittels \blindtext auch wirklich auf die entsprechende Sprache umschalten würde (tut es nicht, es bleibt immer Latein).

Dann fängt csquotes an zu meckern, weil es französische «» statt deutsche »« erwartet, obwohl doch \selectlanguage{german} vorangestellt ist. Die mühsam erworbene Lösung mit csquotes werde ich wohl zurückstellen und doch mit «\,Text\,» arbeiten, wenn sich csquotes so empfindlich zeigt.

Wenn ich den deutschen Beispieltext kurzerhand rauswerfe läuft die Kompilierung anstandslos durch. Den DIV-Wert habe ich so gewählt, daß am griechischen Text die funktionierende Silbentrennung sichtbar wird.

Obwohl die Auszeichnung mit \begin{hyphenrules}{greek} eine Angelegenheit von Babel ist, funktioniert sie nicht mehr, wenn ich Polyglossia auskommentiere! Ich verstehe nicht mehr, wer für was zuständig ist. Daß Babel und Polyglossia gleichzeitig nutzbar sind und sich nur um die jeweils für sich definierten Sprachen kümmern finde ich ja ganz reizvoll – solange es funktioniert …

Der mir so teure Code
\usepackage{fontspec}
% Schrift definieren, bevor polyglossia gloss-greek lädt!
\newfontfamily\greekfont[Ligatures=TeX,Scale=MatchLowercase]{....}
\def\newXeTeXintercharclass#1{}%hack
\usepackage[greek]{polyglossia} führt dazu, daß Microtype seine Mitarbeit wieder aufgibt.

So hängt alles mit allem irgendwie zusammen und ich habe den Eindruck, daß LaTeX mit seiner Rückwärtskompatibilität den fortschreitenden Anforderungen eines unicodebasierten vielsprachigen Textsatzes nicht mehr ganz mithält. (Ich bin ja nur ein Laie in der Angelegenheit mit momentan vielen offenen Fragen – darum bitte diese pers. Einschätzung nicht zu hoch hängen!)

lockstep
01-07-2010, 10:36
[I]ch habe den Eindruck, daß LaTeX mit seiner Rückwärtskompatibilität den fortschreitenden Anforderungen eines unicodebasierten vielsprachigen Textsatzes nicht mehr ganz mithält.

Meine Einschätzung: Ich behalte die Entwicklung von Lua(La)TeX im Auge und freue mich auf den (nicht mehr allzu fernen?) Tag, an dem ich sowohl OpenType-Schriften als auch alle Features von microtype (neben optischem Randausgleich und Schriftdehnung z.B. auch Sperren) nutzen kann. Momentan muss man sich im produktiven Einsatz wohl noch für eines von beiden entscheiden (in meinem Fall für microtype, da ich die Palatino schätze und mit dem latin9-Zeichensatz auskomme). Deine Berichte über die Kompatibilität bestimmter Pakete mit luaLaTex (und natürlich Ulrikes Lösungen und Workarounds) bereiten den Weg für spätere Nutzer, aber du hast damit die Rolle eines Beta-, wenn nicht sogar Alpha-Testers übernommen.

lockstep

u_fischer
01-07-2010, 10:42
Dann fängt csquotes an zu meckern, weil es französische «» statt deutsche »« erwartet, obwohl doch \selectlanguage{german} vorangestellt ist. Die mühsam erworbene Lösung mit csquotes werde ich wohl zurückstellen und doch mit «\,Text\,» arbeiten, wenn sich csquotes so empfindlich zeigt.

Du hast die Dokumentation von csquotes nicht gelesen. Insbesondere hast du nicht verstanden, was \MakeAutoQuote eigentlich tut.


\documentclass{article}
\usepackage{luaotfload}
\usepackage{fontspec}
\DeclareUTFcharacter[\UTFencname]{x00BB}{\guillemotright}
\DeclareUTFcharacter[\UTFencname]{x00AB}{\guillemotleft}
\DeclareUTFcharacter[\UTFencname]{x2039}{\guilsinglleft}
\DeclareUTFcharacter[\UTFencname]{x203A}{\guilsinglright}

\usepackage[frenchb,latin,german]{babel}
\usepackage[autostyle, german=guillemets]{csquotes}
\DeclareQuoteAlias{english/british}{latin}
\MakeAutoQuote «»
\begin{document}
«deutsch, «innen»»

\selectlanguage{french}
«französisch, «innen»»

\selectlanguage{latin}

«latein, «innen»»

\end{document}



Obwohl die Auszeichnung mit \begin{hyphenrules}{greek} eine Angelegenheit von Babel ist, funktioniert sie nicht mehr, wenn ich Polyglossia auskommentiere!

"Funktioniert nicht mehr" ist eine leere Beschreibung. Gibt es Fehler oder versagt die Silbentrennung oder was?


führt dazu, daß Microtype seine Mitarbeit wieder aufgibt.

Ebenfalls eine leere Beschreibung.


Ich kann übrigens kein Griechisch. Und normalerweise benutze ich Winedt, das utf8 nur sehr begrenzt beherrscht. Das Testen von Beispielen mit Nicht-Ansi-Buchstaben (also z.B. griechischen Buchstaben) ist daher für mich deutlich aufwendiger.



So hängt alles mit allem irgendwie zusammen und ich habe den Eindruck, daß LaTeX mit seiner Rückwärtskompatibilität den fortschreitenden Anforderungen eines unicodebasierten vielsprachigen Textsatzes nicht mehr ganz mithält.

Es gibt nun zwei unicodebasierten Engines, xetex und luatex: xetex gibt es schon einige Jahre und viel LaTeX-Pakete wurden an diese engine angepasst oder wie polyglossia und fontspec sogar speziell dafür entwickelt. Die meisten normalen Probleme sind gelöst.

Du hast dich aber für luatex entschieden. Eine Engine, die derzeit Version 0.61 hat. Für die es LaTeX-Pakete wie luaotfload seit vielleicht einem Jahr gibt und für die fontspec erst vor kurzem angepasst wurde. Wo es Diskussionen über grundlegende Probleme bei der Silbentrennung gibt, die kein Monat alt sind. Hast du ernsthaft erwartet, dass das ein einfacher Spaziergang wird, mit lauter geräumten und gut ausgeschilderten Wegen?
Wenn es dir keinen Spaß macht, Probleme zu erforschen und zu lösen, oder wenn dir ein Abgabetermin droht: Nimm xelatex. Die neueste Version kann übrigens angeblich auch Protrusion.