Eingabedateien mit unterschiedlichen Zeichenkodierungen Thema ist als GELÖST markiert

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


peekay

Eingabedateien mit unterschiedlichen Zeichenkodierungen

Beitrag von peekay »

Ich habe ein Hauptdokument welches mit dem Zeichensatz utf8 kodiert ist und entsprechend
\usepackage[utf8]{inputenc}
in meiner Latex-Datei stehen. Soweit ist alles gut.

Jetzt sollen Ausgaben einer MS Access Anwendung als separate Dateien mit eingebunden werden. Die Ausgaben sind standardmäßig in latin1.

Jetzt meine Frage:
Gibt es in Latex die Möglichkeit, unterschiedliche Zeichensätze für ein Dokument zu verwenden, wenn mehrere Dateien im Spiel sind?

Der Weg über Umkodierung mittels eines externen Programms (beispielsweise recode) ist mir klar. Insofern sollte eine vorgeschlage Lösung mit Bordmitteln von Latex nicht aufwendiger sein.

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2958
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Man kann sogar unterschiedliche Codierungen innerhalb einer Datei verwenden. Das Paket inputenc stellt nämlich auch die Anweisung \inputencoding{Codierung} bereit, mit der man jederzeit umschalten kann.

pekay

Beitrag von pekay »

Danke - es funktioniert wunderbar!

Da hatte ich wohl zu kompliziert gedacht. Jedenfalls hatte ich über "google" nichts verwertbares gefunden. Anderseits konnte ich mir nicht vorstellen, dass Latex mit solchen Problemen nicht umgehen kann ...

peekay

automatisch in die ursprüngliche Kodierung zurückschalten?

Beitrag von peekay »

Ich öffne diese Frage noch einmal mit einer Nachfrage:

Kann ich vor
\inputencoding{Codierung}
die bisherige Kodierung in einer Variablen merken, die ich ja mit
\inputencodingname
herausbekomme,
und danach in die vorangegangene Kodierung zurück wechseln? Soweit ich das mitbekommen habe gibt es in Latex keine Variablen für Strings - oder doch?

Eina Derskan

Beitrag von Eina Derskan »

Variablen gibt es nicht, aber Makros. Man kann nun einfach ein neues Makro definieren, das den expandierten Inhalt eines anderes Makros enthält:
\newcommand\LastInputEncoding{}% irgendwo in der Präambel
% ...
\edef\LastInputEncoding{\inputencodingname}
\inputencoding{foo}
% Hier beliebiger Code
\inputencoding{\LastInputEncoding}
Schöner wird es natürlich, wenn man richtiges logisches Markup dafür definiert (ungetestet):
% Irgendwo in der Präambel:
\makeatletter
\newcommand*{\inputencodingstack}{}
\newcommand*{\pushinputencoding}{%
  \xdef\inputencodingstack{{\inputencodingname}{\inputencodingstack}}%
}
\newcommand*{\popinputencoding}{%
  \expandafter\pop@inputencoding\inputencodingstack\@empty\@empty}%
\newcommand*{\pop@inputencoding}[2]{%
  \xdef\inputencodingstack{#2}%
  \inputencoding{#1}%
}
\usepackage[latin1]{inputenc}% oder welche Codierung auch immer
% ...
% Und dann irgendwo im Dokument
\pushinputencoding
\inputencoding{utf8}
% Hier irgendwas in der angegebenen Codierung
\popinputencoding
% Und hier geht es in der ursprünglichen Codierung weiter.
Wenn ich keinen Fehler gemacht habe, kann man die Codierung beliebig schachteln. Wenn man zu viele Pop-Anweisungen verwendet, meckert \inputencoding wegen einer nicht definierten Codierung. Wenn ich einen Fehler gemacht habe, funktioniert gar nichts.

Da \xdef im Gegensatz zu \edef nicht im Wiki zu finden ist, sei erwähnt, dass \xdef einfach nur ein \global\edef ist, also auch über die aktuele Gruppe hinaus wirkt. Ich halte das an der Stelle für besser.

peekay

Beitrag von peekay »

Danke für die Antwort, es funktioniert! Ich habe die "schönere" 2. Lösung umgesetzt. Nach der Makrodefinition habe ich noch ein
\makeatother 
eingefügt.

Antworten