PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unicode in pdfLaTeX



kongo09
17-12-2010, 14:56
Das Thema kommt ja immer wieder hoch und ich bin trotz ausgiebiger Suche nicht wirklich schlauer geworden.

Ich habe eine UTF-8 codierte .tex Datei mit einigen vietnamesischen und griechischen Buchstaben drin. Mein Verständnis nach aller Lektüre war, dass ich mit den Packages ucs und inputenx diese Datei setzen können müsste. Das klappt aber nicht.

Minimalbeispiel mit Vietnamesisch:


\documentclass{article}
\usepackage[english]{babel}
\usepackage{ucs}
\usepackage[utf8x]{inputenx}

\begin{document}
This is my Vietnamese text

Việt

Kiều

Trần
\end{document}


im Log steht folgender Fehler:



! Undefined control sequence.
<argument> \relax \ecircumflex
\crcr \hidewidth \ltx@sh@ft {-1ex}.\hidewidth
l.9 Việ
t
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.


Hat jemand einen Vorschlag, wie man das lösen könnte (ohne XeLaTeX)? Bin auf TeX Live 2009/Debian.

nixversteh
17-12-2010, 18:09
Das Thema kommt ja immer wieder hoch und ich bin trotz ausgiebiger Suche nicht wirklich schlauer geworden.

Ich habe eine UTF-8 codierte .tex Datei mit einigen vietnamesischen und griechischen Buchstaben drin. Mein Verständnis nach aller Lektüre war, dass ich mit den Packages ucs und inputenx diese Datei setzen können müsste. Das klappt aber nicht.

Minimalbeispiel mit Vietnamesisch:


\documentclass{article}
\usepackage[english]{babel}
\usepackage{ucs}
\usepackage[utf8x]{inputenx}

\begin{document}
This is my Vietnamese text

Việt

Kiều

Trần
\end{document}


im Log steht folgender Fehler:



! Undefined control sequence.
<argument> \relax \ecircumflex
\crcr \hidewidth \ltx@sh@ft {-1ex}.\hidewidth
l.9 Việ
t
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.


Hat jemand einen Vorschlag, wie man das lösen könnte (ohne XeLaTeX)? Bin auf TeX Live 2009/Debian.

Hallo kongo09,

ja, du hast
\usepackage[utf8x]{inputenx} geschrieben, richtig wäre

\usepackage[utf8x]{inputenc}

dann hast du
\usepackage[english]{babel} benutzt, besser wäre

\usepackage[english, vietnam]{babel}

Viel Erfolg

Lieben Gruß

Martin

kongo09
19-12-2010, 21:03
Vielen Dank für die fixe Antwort. Damit klappts - aber dann doch wieder nicht.

Ich hatte gedacht, das inputenx Package sei eine etwas weiter entwickelte Version von inputenc, daher hatte ich das genommen. Aber kein Problem, nehme gerne inputenc. Soweit so gut.

Bei babel dachte geht es nur um die Silbentrennung und für drei Vietnamesische Wörter in einem ansonsten englischen Text brauche ich ja keine vietnamesische Silbentrennung. Aber auch egal, hauptsache es klappt.

Wenn ich jetzt aber mein Minimalbeispiel erweitere auf das ursprüngliche Problem (das ich in meinem ersten Beispiel leider nur verkürzt widergegeben habe), nämlich einer Mischung aus ganz unterschiedlichen Zeichensätzen, dann klappts leider wieder nicht.

Im konkreten Fall war auch Griechisch dabei. Grundsätzlich würde ich aber gerne jedweden Zeichensatz unterstützen, der halbwegs in einem englischen Text Sinn machen kann. Es könnten also genauso gut auch Thai Zeichen vorkommen, oder isländische Buchstaben, etc...

Hier nochmal das einerseits korrigierte, aber dann auch erweiterete Beispiel, dass ich nicht ans laufen bekomme:

\documentclass{article}
\usepackage[english, vietnam]{babel}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}

\begin{document}
This is my Vietnamese text

Việt

Kiều

Trần

Ähnlich ist Griechisch:
Α α

Β β

Γ γ
\end{document}

Einfach nur Greek bei babel mit aufnehmen, scheint nicht zu funktionieren.

Könnte ihr mir nochmal helfen? Danke!

bobmalaria
19-12-2010, 21:09
hi,

hilft es dir mit \foreignlanguage an den richtigen stellen in eine andere als die hauptsprache zu wechseln?


\foreignlanguage{greek}{something greek}

kongo09
19-12-2010, 21:18
Leider nicht wirklich, da ich automatisch Text auf unbekannten Quellen verarbeite und daher nicht weiss, wo "foreigntext" vorkommt. Ich müsste sonst quasi eine UTF-8 Textanalyse entwickeln, die mein TeX File so modifiziert, dass überall wo notwendig die richtige "foreigntext" Umgebung kommt.

Ich dachte mir, wenn man Englischen, Deutschen und Vietnamesischen Text einfach so mischen kann, dann kann doch Griechisch kein Problem sein. Folgendes Beispiel läuft ja auch durch:

\documentclass{article}
\usepackage[english, vietnam]{babel}
\usepackage{ucs}
\usepackage[utf8x]{inputenc}

\begin{document}
This is my Vietnamese text

Việt

Kiều

Trần

Ähnlich ist dämlich
\end{document}

kongo09
19-12-2010, 23:48
Mit viel probieren habe ich nun einen scheinbar praktikablen Ansatz gefunden. Dazu nutze ich zusätzlich noch die Pakete fontenc und autofe.

Ich bin mir ehrlichgesagt nicht sicher, wie das alles genau zusammenspielt, warum ich einige Sprachen bei Babel angeben muss (z.B. Vietnamesisch und Griechisch), andere aber nicht (z.B. Isländisch) und wieder andere auf diese Weise gar nicht zu funktionieren scheinen (z.B. Thai).

Wenn ich Babel richtig verstehe, gibt die letze Sprache die Hauptsprache des Dokumentes an. Das wäre bei mir Englisch. Dann funktioniert leider aber Vietnamesisch nicht mehr:

Hier mein fast funktionierendes Beispiel:

\documentclass{book}
\usepackage[vietnam,greek,english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{autofe}
\usepackage[T1,T2A]{fontenc}

\begin{document}
\chapter{}
some English

Việt Kiều Trần

née en France ç

ä ö ü ß å Ñ

ą ę Ł

Α α

Æ æ Þ þ Ý ý

Здравко Монов
\end{document}

Wenn ich nun die Babel Zeile umbaue zu:

\usepackage[greek,english,vietnam]{babel}
dann werden alle Zeichen korrekt dargestellt, aber die Kapitelüberschrift wäre ebenfalls in Vietnamesisch, was nicht gewünscht ist.

Kann man nicht einfach Unicode in LaTeX drucken? Das kann doch nicht so wahnsinnig schwierig sein!

u_fischer
20-12-2010, 09:07
inputenc/x kennt nicht alle möglichen Unicodezeichen. Von den Zeichen, die es kennt, lädt es nicht von vornherein für alle Definitionen. inputenc geht so vor: Es lädt immer einen "Basissatz" an Definitionen. Für weitere Definitionen orientiert es sich an den Optionen von fontenc: Wenn du dort T5 (eine Schriftkodierung für vietnamesich) angibst, geht inputenc davon aus, dass du die zugehörigen Eingabezeichen benötigst, und wird versuchen t5enc.dfu zu finden und zu laden.

Du musst die Schriftkodierungen in fontenc nicht unbedingt selbst laden: Manche babel-Schriftdateien laden intern Schriftkodierungen, dann greift das Verfahren natürlich auch.

Es gibt aber viele Löcher (weil niemand die entsprechenden Dateien/Schriftkodierungen geschrieben hat). lgrenc.dfu (das wird für griechisch benutzt) z.B. gibt es meines Wissens nicht auf CTAN sondern nur irgendwo auf der latex-project Seite.

Grundsätzlich gilt: Wenn du eine breite Unicodeunterstützung benötigst, benutze eine der Unicodeengines xelatex oder lualatex.


Wenn ich Babel richtig verstehe, gibt die letze Sprache die Hauptsprache des Dokumentes an. Das wäre bei mir Englisch. Dann funktioniert leider aber Vietnamesisch nicht mehr:

Dann musst du halt die Sprache wechseln: \selectlanguage{vietnam} ...

nixversteh
20-12-2010, 09:31
Mit viel probieren habe ich nun einen scheinbar praktikablen Ansatz gefunden. Dazu nutze ich zusätzlich noch die Pakete fontenc und autofe.

Ich bin mir ehrlichgesagt nicht sicher, wie das alles genau zusammenspielt, warum ich einige Sprachen bei Babel angeben muss (z.B. Vietnamesisch und Griechisch), andere aber nicht (z.B. Isländisch) und wieder andere auf diese Weise gar nicht zu funktionieren scheinen (z.B. Thai).

Wenn ich Babel richtig verstehe, gibt die letze Sprache die Hauptsprache des Dokumentes an. Das wäre bei mir Englisch. Dann funktioniert leider aber Vietnamesisch nicht mehr:

Hier mein fast funktionierendes Beispiel:

\documentclass{book}
\usepackage[vietnam,greek,english]{babel}
\usepackage[utf8x]{inputenc}
\usepackage{autofe}
\usepackage[T1,T2A]{fontenc}

\begin{document}
\chapter{}
some English

Việt Kiều Trần

née en France ç

ä ö ü ß å Ñ

ą ę Ł

Α α

Æ æ Þ þ Ý ý

Здравко Монов
\end{document}

Wenn ich nun die Babel Zeile umbaue zu:

\usepackage[greek,english,vietnam]{babel}
dann werden alle Zeichen korrekt dargestellt, aber die Kapitelüberschrift wäre ebenfalls in Vietnamesisch, was nicht gewünscht ist.

Kann man nicht einfach Unicode in LaTeX drucken? Das kann doch nicht so wahnsinnig schwierig sein!

Hallo kongo09,

versuche mal diesen Code, bei mir läuft es [...]


\documentclass{scrbook} % KOMAklassen scheinen das Problem NICHT zu verursachen
\usepackage[greek,english,vietnam]{babel}
\usepackage[utf8x]{inputenx} % klappt auch mit inputenx
\usepackage{autofe}
\usepackage[T1,T2A]{fontenc}

\begin{document}
\chapter{Alles ist gut so, wie es ist!}
some English

Việt Kiều Trần

née en France ç

ä ö ü ß å Ñ

ą ę Ł

Α α

Æ æ Þ þ Ý ý

Здравко Монов
\end{document}

Lieben Gruß

Martin

kongo09
20-12-2010, 12:41
Hallo Martin,

leider funktioniert das nicht wirklich. Wenn man ein Englisches Inhaltsverzeichnis möchte, muss man "english" bei babel ganz nach hinten stellen. Damit geht aber dann Vietnam wieder verloren und TeX bricht ab.

kongo09

kongo09
20-12-2010, 12:48
Hallo Ulrike,

der Hinweis mit T5 war gut, aber leider ist das Ergebnis immer noch komisch. Ich habe Martins Beispiel wie folgt ergänzt:

\documentclass{scrbook} % KOMAklassen scheinen das Problem NICHT zu verursachen
\usepackage[greek,vietnam,english]{babel}
\usepackage[utf8x]{inputenx} % klappt auch mit inputenx
\usepackage{autofe}
\usepackage[T5,T1,T2A]{fontenc}

\begin{document}
\tableofcontents{}
\chapter{Alles ist gut so, wie es ist!}
some English

Việt Kiều Trần

née en France ç

ä ö ü ß å Ñ

ą ę Ł

Α α

Æ æ Þ þ Ý ý

Здравко Монов
\end{document}
Also T5 bei fontenc aufgenommen. Damit läuft pdfLaTeX nun ohne Fehler durch - aber Vietnamesisch wird trotzdem nicht korrekt angezeigt.

Du sprichst von Definitionen, die nicht geladen werden. Kann ich TeX nicht dazu zwingen, diese zu laden? Oder kann ich die Definitionen selber laden (und wenn ja, wie?). Dann könnte ich doch einfach alle vorhandenen Definitionen laden und alles wird gut, oder?

nixversteh
20-12-2010, 13:21
Hallo kongo09,

du wirst wahrscheinlich nicht umhin kommen, Ulrikes Anregung, die Sprache im Dokument zu wechseln, zu folgen.

Lies mal die PDF.
http://www.google.de/#hl=de&source=hp&q=vietnamesisch+in+latex&aq=f&aqi=&aql=&oq=&gs_rfai=&fp=905072200cf3e114
und dann diesen Eintrag: Typesetting Vietnamese with VnTEX (and with the TEX Gyre fonts too)

Viel Erfolg

Gruß

Martin

kongo09
20-12-2010, 13:49
du wirst wahrscheinlich nicht umhin kommen, Ulrikes Anregung die Sprache im Dokument zu wechseln.

Hm, das geht leider nicht, da ich wie gesagt Texte unbekannten Ursprungs automatisch verarbeite. Da kann halt mal ein fremder (Unicode) Buchstabe drin stecken, das weiss ich aber nicht und sehe es auch nicht.

Ulrike hatte aber auch noch XeLaTeX vorgeschlagen. Wenn das dort alles problemlos klappt, dann muss ich mir das wohl mal anschauen. Habe es noch nie benutzt. Kennt ihr da ein gutes Tutorial - oder klappen alle LaTeX Pakete auch da und man muss nur einen neuen Compiler aufrufen?

nixversteh
20-12-2010, 14:00
Hallo kongo09,

Möglichkeit 3: Verwendung von XeTeX.
XeTeX ist eigentlich der Traum jedes LaTeX-ianers: Echtes Unicode und – endlich – uneingeschränkte Verwendung von allen „normalen“ Computerschriftarten, die man so auf seinem Rechner hat, und zwar, auch unter Windows, mit all den großartigen typographischen Spielereien, die die modernen, sog. OpenType-Schriftarten bieten, die mit Word und Konsorten nicht genutzt werden können. Nachteile gibt es aber trotzdem – leider: Für XeTeX gibt es keine ausreichende Dokumentation, das Programm ist offiziell immer noch im Teststadium. Insbesondere verträgt sich XeTeX nicht mit vielen Erweiterungen (Paketen) von LaTeX; schon die Frage, wie man denn jetzt z.B. für russischen Text die unverzichtbare automatische Silbentrennung einrichten soll, garantiert frustrierte Suchstunden im Internet.

Quelle: http://www.peter-meyer.org/edv/latex/latex.html

Gruß

Martin

u_fischer
20-12-2010, 14:28
Hier gibt es ein Xelatex-Tutorial:

http://www.dante.de/DTK/Ausgaben/2008-3.pdf

Es ist nicht ganz aktuell. Die wichtigste Änderung: xltxtra + xunicode sollte/braucht man nicht mehr zu laden. Es reicht \usepackage{fontspec}.

kongo09
20-12-2010, 15:07
ganz, ganz herzlichen Dank. Habe gerade einfach mal folgendes Dokument durch XeLaTeX laufen lassen und es geht ganz hervorragend. Die ganze Frage scheint sich dahin zu verlagern, einen (oder mehrere) Fonts mit den passenden Skripten zu finden:


\documentclass{scrreprt}
\usepackage{polyglossia}
\usepackage{fontspec}
\setdefaultlanguage{english}

\setromanfont{Times New Roman}

\begin{document}
\tableofcontents{}
\chapter{Alles ist gut so, wie es ist!}
some English

Việt Kiều Trần

née en France ç

ä ö ü ß å Ñ

ą ę Ł

Α α

Æ æ Þ þ Ý ý

Здравко Монов

التاريخ فنّ أنّ اعلم
\end{document}

kongo09
20-12-2010, 16:07
Jetzt habe ich mal versucht, einige meiner TeX files mit XeLaTeX zu bearbeiten. Leider gibt es da ziemlich viele Fehler. Da scheinen doch sehr viele Pakete nicht kompatibel zu sein. Leider ist XeLaTeX für mich dann wohl doch keine Lösung.

Also zurück zu pdfLaTeX. Nochmal die Frage: kann ich pdfLaTeX dazu bringen, die fehlenden Definitionen zu laden? Oder das von Hand machen?

u_fischer
20-12-2010, 16:54
pdflatex kann nur Schriften mit 256 Zeichen nutzen (also die Zeichen aus einer üblichen Zeichentabelle). Wenn es mehrere Skripte anzeigen soll, muss es also zwischendurch die Schrift/Zeichentabelle wechseln.

Dein Vietnamesich funktioniert tadellos, wenn man explizit wechselt:

{\fontencoding{T5}\selectfont Việt Kiều Trần}.

Du willst, dass das automatisch geht. Es sollte dir klar sein, dass pdflatex bei den Zeichen "V", "i", "K" usw keine Chance hat, zu erkennen, dass das vietnamesich sein soll. Bei den anderen Zeichen ist es natürlich prinzipiell möglich und autofe scheint so etwas auch zu versuchen.

Dein wesentliches Problem ist aber, dass ucs/utf8x und autofe seit längerem nicht mehr gewartet werden, die Dokumentation dürftig ist und es keinen Support gibt. Wenn du sie nutzen willst, bist du auf dich alleine gestellt.

Die Probleme mit xelatex aus dem Weg zu räumen, dürfte einfacher sein.

kongo09
20-12-2010, 18:20
Habe Deinen feinen XeLaTeX Artikel gelesen. Das klingt ja alles sehr gut. Bei meinen ersten Gehversuchen habe ich nur gemerkt, dass es doch einige Pakete gibt, die nicht funktionieren.

Meine Sorge ist, dass XeLaTeX zwar wirklich eine coole Lösung wäre, aber dann später der Frust super groß wird, wenn andere Dinge überhaupt nicht mehr funktionieren, nur noch sehr umständlich gehen und man fast gar keine gute Dokumentation findet.

Aber vielleicht muss ich mich nur nochmal länger auf XeLaTeX einlassen. Gibts denn irgendwo eine Übersicht der unterstützten (oder nicht unterstützten) Pakete?