Diagnostizieren einer Inkompatibilität zwischen Pythontex und einer Siam-CLS-Datei

Diagnostizieren einer Inkompatibilität zwischen Pythontex und einer Siam-CLS-Datei

Ich verwende Pythontex innerhalb einer von SIAM bereitgestellten Dokumentklasse (siehehttp://www.siam.org/meetings/ns14/siam-wns-article.cls- weniger als 100 Zeilen für die Version 2014, die dasselbe Problem aufweist wie die Version 2018).

Wenn ich kompiliere

\documentclass{siam-wns-article}
\usepackage{pythontex}


\begin{document}
test
\end{document}

Ich erhalte eine Fehlermeldung:

\c@listing=\count122

./tmp.tex:5: Sie können „\relax“ nicht nach \the verwenden.

\c@float@Typ

Die Ausgabe meines tatsächlichen Beispiels ist in Ordnung. Aber der Fehler besteht weiterhin und die Organisatoren der Konferenz haben gesagt, dass sie für die Abschlussveranstaltung die Original-Tex-Dateien benötigen. Daher möchte ich sicherstellen, dass ich ihnen sagen kann, was in der Dokumentklasse behoben werden muss. Aber ich konnte es nicht herausfinden.

Irgendwelche Vorschläge?

Antwort1

Das Problem ist wie beschrieben inhttps://github.com/gpoore/pythontex/issues/61Undhttps://github.com/axelsommerfeldt/caption/issues/5

Problemumgehung: Verwenden Sie einen anderen Namen für die PythonTeX-Floats (unabhängig davon, ob Sie sie verwenden oder nicht).

\documentclass{siam-wns-article}
\usepackage{pythontex}

\setpythontexlistingenv{pylisting}

\begin{document}
test
\end{document}

Erklärung des Problems. Das newfloatPaket prüft, ob \c@float@typees mit definiert ist \ifdefined, und das ist falsch: Es sollte verwenden \@ifundefined. Das Problem tritt auf, wenn listingsgeladen wird, da dieses Pakettutverwenden \@ifundefined{c@float@type}, was \c@float@typeein Äquivalent zu hinterlässt \relaxund dann \ifdefined\c@float@typetrue zurückgibt. Die von Ihnen verwendete SIAM-Klasse lädt listings.

Ein Fehler in newfloat.

Antwort2

Als Alternative zu Davids Antwort können Sie die Klassendatei ändern.

Das Problem scheint von einemInkompatibilität zwischen pythontexundlistings(Letzteres wird von Ihrer Klassendatei geladen).

Wie in einem der Kommentare auf der GitHub-Seite des Problems angemerkt, wird das Problem pythontexdurch vorheriges Laden listingsgelöst (oder durch gar kein Laden von Einträgen:).

Geben Sie es also pythontexvorher ein listingsund schon kann es losgehen.

Antwort3

Die Fehlermeldung deutet darauf hin, dass ein Zähler float@typenicht definiert ist

grep 'newcounter.*float@type' /usr/local/texlive/2017/texmf-dist/tex/latex/*/*.*

erscheint float.styund eine mögliche Lösung ist daher

\documentclass{siam-wns-article}
\usepackage{float}
\usepackage{pythontex}


\begin{document}
test
\end{document}

läuft ohne Fehler.

Ich stelle jedoch fest, dass Pythontex Newfloat lädt, sodass dies möglicherweise nicht die beste Lösung ist, da Sie wahrscheinlich nicht wirklich möchten, dass sowohl Float als auch Newfloat geladen werden. Die andere Antwort weist auf einen Hinweis hin. Ein wenig Nachverfolgung zeigt dann, dass dies das allgemeine Problem des Latextests ist, bei dem \@ifundefined{c@float@typ}die Nebenwirkung auf eine merkwürdige Funktion des Primitivs zurückzuführen \c@float@typeist .\relax\csname

Zufällig wird die nächste Version von Latex wahrscheinlich Code enthalten, um dieses Problem zu vermeiden. In der Zwischenzeit können Sie jedoch den Zustand \c@float@typewieder auf „undefiniert“ zurücksetzen.

\documentclass{siam-wns-article}

\AtBeginDocument{%
\expandafter\ifx\csname c@float@type\endcsname\relax
\expandafter\let\csname c@float@type\endcsname\undefined
\fi
}
\usepackage{pythontex}



\begin{document}
test
\end{document}

verwandte Informationen