Richtige Kodierung der PDF-Ausgabe

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


Stefan Knauf
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Di 11. Okt 2011, 20:35

Richtige Kodierung der PDF-Ausgabe

Beitrag von Stefan Knauf »

Hallo Leute!

Mit LaTeX gesetzte Dokumente sehen zwar prima aus, sind aber in der PDF-Ausgabe normalerweise falsch kodiert. Der Ausgabetext „heißt offen“ sieht zwar so aus, wie er soll, ist aber als „heit oen“ kodiert. Von dem Problem betroffen sind Umlaute, Ligaturen, das ß, nichtlateinische Schriftzeichen (z.B. Kyrillisch) und lauter mathematische Sonderzeichen.
Das Problem fällt auf, wenn man ein mit LaTeX gesetztes PDF-Dokument mit Volltextsuche durchsuchen möchte (die Suche nach den Zeichenfolgen „heißt“ oder „offen“ liefert dann keine Treffer, weil die gemeinten Wörter im Dokument ja anders kodiert sind) oder wenn man Text aus so einem PDF-Dokument irgendwo anders hin kopieren möchte.

Gibt es da vielleicht einen Schalter wie
\So_du_LaTeX{Du kodierst gefälligst richtig}
der bewirkt, dass alles genau wie vorher aussieht, aber korrekt in Unicode kodiert ist?

MfG
Stefan Knauf

csaf5941
Forum-Anfänger
Forum-Anfänger
Beiträge: 25
Registriert: Sa 12. Mär 2011, 20:26

Beitrag von csaf5941 »

Ohne Minimalbeispiel kann ich eigentlich nur ins Blaue raten und tippe mal darauf, dass du das `fontenc` Paket nicht verwendest. Bei meinem Beispiel kann man das PDF ohne Probleme nach Umlauten durchsuchen.
\documentclass{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}

\begin{document}
Zwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich.
\end{document}

Stefan Knauf
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Di 11. Okt 2011, 20:35

Beitrag von Stefan Knauf »

Hallo csaf5941!

Danke für die Antwort. Verstehe ich Dein Beispiel richtig, dass „T1“ bewirkt, dass die deutschen Umlaute und das ß richtig kodiert werden, und dass das Paket lmodern bewirkt, dass die Schrift wieder normal aussieht?

Ich nenne Dir mal alle nichtmathematischen Pakete, die ich in meinem Dokument einbinde:
\documentclass[a4paper, 12pt, bibliography=totoc]{scrreprt} %für das Papierformat und das gesamte Satzbild
\usepackage[OT2,OT1]{fontenc} %für die Kodierung kyrillischer Zeichen
\usepackage[russian, USenglish, french, ngerman]{babel} % für Silbentrennung und Ligaturen
\usepackage{url} % um Internetadressen bequemer setzen zu können (mit \url{Adresse})
\usepackage[ansinew]{inputenc} % für deutsche Umlaute
\usepackage{ltablex} % für die Tabellenumgebung tabularx, die Seitenumbrüche in Tabellen beherrscht
\usepackage{scrpage2} % für Kopf- und Fußzeilenanpassung
\usepackage[colorlinks,pdfpagelabels,pdfstartview = FitH,bookmarksopen = true,bookmarksnumbered = true,linkcolor = black,plainpages = false,hypertexnames = false,citecolor = black,urlcolor=black]{hyperref} % für interaktive Verweise, z.B. im Inhaltsverzeichnis
Und hier etwas, das ich für ein Minimalbeispiel zur Kodierung halte:
%LaTeX

\documentclass[a4paper, 12pt, bibliography=totoc]{scrreprt} %für das Papierformat und das gesamte Satzbild
\usepackage[OT2,OT1]{fontenc} %für die Kodierung kyrillischer Zeichen
\usepackage[russian, USenglish, french, ngerman]{babel} % für Silbentrennung und Ligaturen
\usepackage[ansinew]{inputenc} % für deutsche Umlaute

\begin{document} % Der Beginn des eigentlichen Dokuments
\frenchspacing % damit der Abstand zwischen zwei Sätzen genau wie der Abstand zwischen zwei Wörtern behandelt wird (sollte bei deutschen Spracheinstellungen sowieso der Fall sein, ist es aber leider nicht).

Der russische Name \foreignlanguage{russian}{Novikov} wird im Deutschen mit "`Nowikow"' und im Englischen mit "`\foreignlanguage{USenglish}{Novikov}"' umschrieben.

Zwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich.

Todor\v{c}evi\'{c}

\end{document}
 
Wenn ich in meinem Beispiel beim Laden das Paketes fontenc „OT1“ durch „T1“ ersetze, wirft mir der Übersetzer folgende komische Warnungen entgegen:
LaTeX Font Warning: Font shape `OT2/lmr/m/n' undefined
(Font)              using `OT2/cmr/m/n' instead on input line 17.

[1

{C:/Users/Stefan Knauf/AppData/Local/MiKTeX/2.9/pdftex/config/pdftex.map}]
("C:\Stefan\wiederverwertbare Texte\Mathematikstudium\Mengenlehre und Logik\G0-
Dichotomie\Minimalbeispiel zur Kodierung.st.aux")

LaTeX Font Warning: Some font shapes were not available, defaults substituted.

 ) 
Haben die was zu bedeuten? (Zusätzlich erhalte ich natürlich die Warnung, dass das französische Babelpaket sich unwohl fühlt, wenn es zusammen mit einer KOMA-Klasse aufgerufen wird, aber ich denke, das hat überhaupt nichts zu bedeuten.)

MfG
Stefan

csaf5941
Forum-Anfänger
Forum-Anfänger
Beiträge: 25
Registriert: Sa 12. Mär 2011, 20:26

Beitrag von csaf5941 »

Auweh. Mit kyrillischem Textsatz kenn ich mich überhaupt nicht aus.

Grundsätzlich hast du das aber schon richtig verstanden: die OT1 Kodierung enthält keine Umlaute weshalb diese zusammengesetzt werden. Bei T1 gibts Umlaute als eigene Zeichen; folglich lässt sich im PDF danach suchen.
Die Latin Modern ist eine überarbeitete Fassung der Standardschrift Computer Modern und die liegt auch als Type 1-Schrift in T1-Kodierung vor. Deshalb schaut die Schrift wieder »normal aus« :wink:.

Die Fehlermeldung die du erhältst sagt nichts anderes, als dass für die Latin Modern (mit normaler Schriftstärke und Lage) keine OT2 Kodierung vorliegt und stattdessen die Computer Modern verwendet wird. Im PDF solltest du Новиков als Rastergrafik sehen. Um das zu umgehen, könntest du statt der Latin Modern die cm-super Schriften und T2A-Kodierung verwenden. Nachteil (oder vielleicht auch Vorteil) ist dabei, dass du auf utf8 umsteigen und die kyrillischen Zeichen explizit eingeben musst (sofern ich weiß – bitte mich sonst zu korrigieren):
\documentclass{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage[T2A,T1]{fontenc}
\usepackage[russian,american,french,ngerman]{babel}

\begin{document}
\frenchspacing
Der russische Name \foreignlanguage{russian}{Новиков} wird im Deutschen mit „Nowikow“ und im Englischen mit „\foreignlanguage{american}{Novikov}“ umschrieben.

Zwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich.
\end{document}
Zum `\frenchspacing` wenns dich interessiert: http://meinews.niuz.biz/problem-t568406.html
Und für Anführungszeichen würde ich dir das `csquotes` Paket empfehlen.


Schöne Grüße,
Johannes

edit: Kyrillisch in der Code-Umgebung hat wohl nicht so funktioniert. Die ganze Zeichenkette musst du natürlich mit Новиков ersetzen.

Stefan Knauf
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Di 11. Okt 2011, 20:35

Beitrag von Stefan Knauf »

Hallo Johannes!

Dein letztes Beispiel wird bei mir wie folgt kodiert:

»Der russische Name Íîâèêîâ wird im Deutschen mit Nowikow und im Englischen
mit Novikov umschrieben.
Zwölf Boxkämpfer jagen Viktor quer über den groÿen Sylter Deich.«

Das heißt, Gänsefüßchen, das ß und natürlich die kyrillischen Zeichen werden falsch kodiert. Wenn ich das Paket lmodern dazulade, werden auch die Gänsefüßchen und das ß korrekt kodiert, dann sind in dem Beispiel die kyrillischen Zeichen das einzige, was falsch kodiert wird. Dafür erhalte ich dann aber so eine ähnliche Warnung wie letztens:
LaTeX Font Warning: Font shape `T2A/lmr/m/n' undefined
(Font)              using `T2A/cmr/m/n' instead on input line 9.

[1

{C:/Users/Stefan Knauf/AppData/Local/MiKTeX/2.9/pdftex/config/pdftex.map}]
("C:\Stefan\wiederverwertbare Texte\Mathematikstudium\Mengenlehre und Logik\G0-
Dichotomie\UTF-8-Test.st.aux")

LaTeX Font Warning: Some font shapes were not available, defaults substituted.
Aber Deine Lösung mit Verwendung einer T1-Schrift und dem Laden das Paketes lmodern ist schon viel besser als das, was ich vorher hatte. Auf diese Weise werden ja immerhin Umlaute, Ligaturen und das ß korrekt kodiert. Dass noch Kyrillisch, diakritische Zeichen wie in „Todorčević“ und die ganzen mathematischen Sonderzeichen richtig kodiert wären, wäre zwar ganz nett, aber wirklich wichtig ist das eher nicht.
Danke auch für den Hinweis zu \frenchspacing. Die Seite http://meinews.niuz.biz/problem-t568406.html konnte ich aber leider erst sehen, nachdem ich dieser Seite das Setzen von Cookies erlaubt hatte, was ich für äußerst schlechten Stil seitens der Seitenbetreiber halte. Bloß um Text zu betrachten, sind Cookies eigentlich vollkommen überflüssig.

MfG
Stefan

csaf5941
Forum-Anfänger
Forum-Anfänger
Beiträge: 25
Registriert: Sa 12. Mär 2011, 20:26

Beitrag von csaf5941 »

Hmm... Bei mir wird – abgesehen vom russischen Namen – alles richtig kodiert. Hinzufügen von Latin Modern ist irgendwie doppelt gemoppelt. Das machst du ja nur um die Schrift »schön« zu bekommen (mal abgesehen davon, dass Latin Modern und Computer Modern nicht ganz identisch sind). Mit cm-super solltest du aber bereits eine Type1-Schrift in T1-Kodierung haben.

Die Warnung die du bekommst ist bei Verwendung von Latin Modern wieder klar. Dort gibt es die kyrillischen Zeichen nämlich nicht und deshalb wird auf cm-super umgeschaltet.

Stefan Knauf
Forum-Anfänger
Forum-Anfänger
Beiträge: 23
Registriert: Di 11. Okt 2011, 20:35

Faszinierend!

Beitrag von Stefan Knauf »

Hallo Johannes!

Ich nutze MiKTeX 2.9 unter Windows 7 und habe MiKTeX heute mal alle Pakete aktualisieren lassen. Trotzdem konnte ich das eigentümliche Kodierungsverhalten soeben reproduzieren. :)
Ich finde es auch faszinierend, dass ein und derselbe Quelltext auf verschiedenen Systemen zu verschiedenen Kodierungen der PDF-Ausgabe führen kann.

MfG
Stefan

Antworten