Der folgende (fast) minimale LaTeX-Code lässt sich mit pdflatex übersetzen, aber pythontex liefert anschließend eine Fehlermeldung:

The .pytxcode file appears to have an outdated format or be invalid.

Hat jemand einen Workaround oder einen Hinweis?

Öffne in Overleaf
\documentclass{dinbrief}
\usepackage{pythontex}
\begin{document}
\begin{pycode}
print('Hello DIN')
\end{pycode}
Hello
\end{document}

gefragt 08 Mai '17, 19:46

pddp's gravatar image

pddp
4124
Akzeptiert-Rate: 0%

bearbeitet 08 Mai '17, 20:24

saputello's gravatar image

saputello
11.1k154365

Ich kann das Problem bestätigen. Es besteht offenbar schon länger (bei TeX Live 2015 gab es sogar noch Fehler beim pdflatex-Lauf). Auf der anderen Seite scheint es zu funktionieren, scrlttr2 oder scrartcl + scrletter mit pythontex zu kombinieren. Also würde ich empfehlen, für Briefe mit pythontex darauf umzusteigen. Ob dinbrief noch weiter entwickelt wird, ist ohnehin eher fraglich.

(08 Mai '17, 20:21) saputello

dinbrief definiert \enddocument (der Befehl, der durch \end{document} aufgerufen wird) um, und zwar so, dass unter anderem \@enddocumenthook nicht aufgerufen wird. Ohne \@enddocumenthook sind alle Anweisungen in, die mit \AtEndDocument eigentlich am Ende des Dokuments gemacht werden sollten, verloren. Gerade die braucht pythontex aber, da hier wichtige Informationen in die pytxcode-Datei geschrieben werden. Da die mit dinbrief nun fehlen, ist die Datei logischerweise fehlerhaft. Daher dann auch die Fehlermeldung.

Du kannst das mit etoolbox und \patchcmd nun reparieren:

Öffne in Overleaf
\documentclass{dinbrief}
\usepackage{pythontex}
\usepackage{etoolbox}

\makeatletter
\patchcmd\enddocument
  {\@checkend{document}}
  {\@enddocumenthook\@checkend{document}}
  {}
  {Fehler: Patch misslungen}
\makeatother

\begin{document}
\begin{pycode}
print('Hello DIN')
\end{pycode}
Hello
\end{document}

Mein Bauchgefühl und die Tatsache, dass die Umdefinierung von \enddocument weitere Nachteile mit sich bringt (siehe Kommentare) sagt mir aber, dass es klüger wäre, auf eine modernere Alternative scrlttr2 oder scrletter (mit scrartcl) umzusteigen, und dinbrief gar nicht zu verwenden. Letzteres hat seit 2007 kein Update mehr erhalten, das log deutet an, dass der Großteil 17 Jahre alt ist:

Öffne in Overleaf
Document Class/Style 'dinbrief' - Version 1.73 
University of Karlsruhe - 2000/03/02 12:49:21

*** dinbrief: Running in LaTeX 2e mode!
*** dinbrief: NFSS 2!
Document Class: dinbrief 2000/03/02 LaTeX2e class

Die beiden Hinweise Running in LaTeX 2e mode! und dinbrief: NFSS 2! erstaunen heutzutage einigermaßen, gelten sie doch seit 1994.

Permanenter link

beantwortet 08 Mai '17, 20:36

cgnieder's gravatar image

cgnieder
22.1k243463
Akzeptiert-Rate: 60%

bearbeitet 08 Mai '17, 22:18

esdd's gravatar image

esdd
17.7k254256

Als Ergänzung: Schriftgrößenwarnungen, Warnungen wegen undefinierter oder mehrfach definierter Labels oder Rerun-Warnungen wegen Label-Änderungen gibt es bei dinbrief übrigens auch nicht. Insgesamt ist die Umdefinierung von \enddocument in dinbrief sehr restriktiv und vermutlich der Tatsache geschuldet, dass die Klasse gleichzeitig noch als LaTeX-2.09-Style funktionieren soll, was eigentlich schon 2007 mehr als überflüssig war.

(08 Mai '17, 20:43) saputello

@saputello ich hab mir das gar nicht genauer angesehen, aber Du hast recht. Umso mehr ein Grund, auf dinbrief zu verzichten und was moderneres zu verwenden.

(08 Mai '17, 20:45) cgnieder

Merci - alle Fragen geklärt. Danke für die schnelle Hilfe. Dann muss ich wohl den Style für unser Institut mal anpassen (lassen). Der Style ist auch schon viele Jahre alt.

(08 Mai '17, 21:23) pddp

@pddp Ich habe Deine „Antwort“ in einen Kommentar umgewandelt. Hier sind Antworten stets „echte“ Antworten, keine Gespräche oder Rückfragen oder Zusatzinfos, sondern Lösungen. Das verbessert die Übersicht erheblich für die Archivierung der Lösungen. Ungewohnt und anders als in Webforen, doch innovativ und nutzbarer. Bemerkungen gern wie hier als Kommentare.

(08 Mai '17, 21:32) cgnieder
1

@pddp Falls die Antwort Dein Problem löst, kannst Du sie gern akzeptieren, also auf den Haken oben links neben der Antwort klicken. Dann sehen andere Anwender gleich, dass die Antwort geholfen hat…

(08 Mai '17, 21:34) cgnieder

Briefe im DIN-Format kann man auch in ConTeXt MKIV setzen. Von ConTeXt aus ist es sehr einfach mit Lua zu interagieren und man kann sich den Umweg über Python sparen, siehe dazu

Öffne in Overleaf
\usemodule[letter]

\mainlanguage[de]
\useletterstyle[dinb]

\setupletterlayer
  [reference]
  [list={name,phone,email,date}]

\setupletter
  [
    name={Max Mustermann},
    phone={01234/567890},
    email={max.mustermann@example.com},
    date={\currentdate},
  ]

\setupletter
  [
    toname={Hans Hansen},
    toaddress={Zielgasse 23\\34789 New Mustertown},
  ]

\setupletter
  [
    fromname={\correspondenceparameter{name}},
    fromaddress={Musterstraße 12\\12345 Musterstadt},
  ]

\starttext

\startletter
  [
    opening={Sehr geehrte Damen und Herren,},
    subject={Grund des Anschreibens},
    closing={Mit freundlichen Grüßen},
    signature={\correspondenceparameter{name}},
  ]

  \input knuth

\stopletter

\stoptext

alt text

Permanenter link

beantwortet 09 Mai '17, 03:40

Henri's gravatar image

Henri
15.7k133943
Akzeptiert-Rate: 46%

bearbeitet 09 Mai '17, 03:45

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×127
×1
×1

gestellte Frage: 08 Mai '17, 19:46

Frage wurde gesehen: 9,130 Mal

zuletzt geändert: 09 Mai '17, 03:45