Seite 1 von 1

Eingabedateien mit unterschiedlichen Zeichenkodierungen

Verfasst: Mi 27. Jan 2010, 10:06
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.

Verfasst: Mi 27. Jan 2010, 10:50
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.

Verfasst: Mi 27. Jan 2010, 11:30
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 ...

automatisch in die ursprüngliche Kodierung zurückschalten?

Verfasst: Sa 13. Feb 2010, 11:51
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?

Verfasst: Mo 15. Feb 2010, 08:06
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.

Verfasst: Do 13. Mai 2010, 14:42
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.