PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : englische quotes in *.tex/ deutsche im pdf



rafael
08-10-2013, 11:57
Hallo,

das Schreibprogramm ywriter hat einen Latex-export. Dabei kann man einen Latexheader selber basteln. Das Programm führt dann den Header und beliebigen Text in einer *.tex Datei zusammen, die mit pdflatex eine pdf erzeugt.

Anforderung:
- Die von ywriter erzeugte *.tex hat immer englische Anführungszeichen (``Text'').
- In der pdf sollen aber am Ende normale deutsche Anführungsstriche erscheinen.
- Ein nachträgliches Ersetzen `` -> "` im Textkörper der *.tex soll bewusst vermieden werden.

Frage: Was kann im header stehen, damit die Anforderung erfüllt wird?

klops
08-10-2013, 12:10
→ Anleitung zu Paket csquotes (http://www.ctan.org/pkg/csquotes)

rafael
08-10-2013, 13:31
→ Anleitung zu Paket csquotes (http://www.ctan.org/pkg/csquotes)

Ich habe bisher mit dem csquotes-Paket keine Möglichkeit gefunden, dies umzusetzen.
csquotes setzt ja darauf, Zitate in Makros/Umgebungen zu setzen.
Die shorthand von babel zu nutzen, hat ebenfalls nicht funktioniert.
Hier das MB:

\documentclass{scrartcl}
\usepackage[ansinew]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[babel]{csquotes}

%\MakeAutoQuote{``}{''}%nutztcsquotes
%
%\defineshorthand{``}{\openautoquote}%nutzt csquotes+babel
%\defineshorthand{''}{\closeautoquote}%nutzt csquotes+babel

\begin{document}
Normaler Text (englische Anführungsstriche): ``Eine wörtliche Rede''

Normaler Text, bei dem es klappt: \textquote{Wörtliche Rede.}
\end{document}

Deswegen bin ich davon ausgegangen, dass mir csquotes nicht weiterhilft. Gibt es vielleicht doch eine Variante oder andere Ansätze?

klops
08-10-2013, 15:35
Ich habe bisher mit dem csquotes-Paket keine Möglichkeit gefunden, dies umzusetzen.
csquotes setzt ja darauf, Zitate in Makros/Umgebungen zu setzen.
Du bist auf dem richtigen Weg. Woran ich nicht gedacht hatte ist, dass »`« als shorthand nicht richtig funktioniert, weil die \catcode-Änderungen, die babel in die aux-Datei schreibt, von einem nicht aktiven »`« abhängen. Mit folgendem Trick, mit dem »`« als shorthand vor dem Lesen der aux-Datei abgeschaltet wird, scheint es zu funktionieren:

\documentclass{article}
\usepackage[ansinew]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\AtBeginDocument{%
\useshorthands{'}
\defineshorthand{''}{\closeautoquote}
\useshorthands{`}
\defineshorthand{``}{\openautoquote}
}
\AtEndDocument{%
\shorthandoff{`}%
}
\begin{document}
Normaler Text: ``Wörtliche Rede''.

Normaler Text: \enquote{Wörtliche Rede}
\end{document}
Wäre nicht das »`« beteiligt, könnte man sich das \AtBeginDocument um die Definition der shorthands sparen und das \AtEndDocument könnte man sich einschließlich des Arguments sparen.

Ich kann allerdings nicht dafür garantieren, dass das so unter allen Umständen funktioniert.

rafael
08-10-2013, 18:11
Danke, das funktioniert.
Ist nur eben wieder mal deprimierend, dass man mit eigenem Nachdenken fast auf die Lösung kommt und dann abbricht.

Später stellt sich heraus, dass man zwar dem Ziel sehr nahe war, aber der eigene Horizont nie den letzten Schritt gegangen wäre. Ich hab doch keine Ahnung davon, was Pakete mit externen Schreibvorgängen und catcodeänderungen wann machen.

Vielen Dank

klops
09-10-2013, 08:06
Was babel in die aux-Datei schreibt, kann man leicht in der aux-Datei ablesen (die Fehlermeldung, die man ohne die genannten Befehle bekommt, führen ja auch in die aux-Datei). Was man dann noch wissen muss ist, dass die aux-Datei von LaTeX zweimal eingelesen wird, einmal in \begin{document} noch bevor der \AtBeginDocument-Code ausgeführt wird und einmal in \end{document} nachdem der \AtEndDocument-Code ausgeführt wurde. Daher kam eine Idee, die Aktivierung mit \AtBeginDocument zu verzögern und mit \AtEndDocument wieder zu deaktivieren, bevor die aux-Datei gelesen wird.

Das ganze könnte übrigens in die Hose gehen, falls man im Dokument selbst die Sprache umschaltet. Dann landen eventuell weitere \catcode-Änderungen in aux-Datei, die dann wieder in die Hose gehen können. Es ist also eher ein Hack als eine echte Lösung.

Übrigens könnte man mit KOMA-Script bzw. dem Paket scrlfile statt \AtEndDocument auch \BeforeClosingMainAux verwenden. Das wäre vermutlich sogar besser. Würde aber das Problem mit den zusätzlichen Sprachumschaltungen nicht lösen.

Woher man all dies erfährt? Indem man hier fleißig auch die Diskussionen mitliest, die Probleme behandeln, die man noch gar nicht hat. ;)