диагностика несовместимости между pythontex и файлом siam .cls

диагностика несовместимости между pythontex и файлом siam .cls

Я использую pythontex в классе документа, предоставленном SIAM (см.http://www.siam.org/meetings/ns14/siam-wns-article.cls- менее 100 строк для версии 2014 года, в которой та же проблема, что и в версии 2018 года).

Когда я компилирую

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


\begin{document}
test
\end{document}

Я получаю сообщение об ошибке:

\c@listing=\count122

./tmp.tex:5: Вы не можете использовать `\relax' после \the.

\c@float@тип

Вывод моего реального примера в порядке. Но ошибка сохраняется, и организаторы конференции заявили, что им понадобятся оригинальные файлы tex для финальных протоколов. Поэтому я хотел бы убедиться, что смогу сообщить им, что нужно исправить в documentclass. Но я не смог разобраться.

Какие-либо предложения?

решение1

Проблема описана вhttps://github.com/gpoore/pythontex/issues/61иhttps://github.com/axelsommerfeldt/caption/issues/5

Обходной путь: используйте другое имя для плавающих элементов PythonTeX (независимо от того, используете вы их или нет).

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

\setpythontexlistingenv{pylisting}

\begin{document}
test
\end{document}

Объяснение проблемы. newfloatПакет проверяется на \c@float@typeопределение с помощью , \ifdefinedи это неправильно: он должен использовать \@ifundefined. Проблема возникает при listingsзагрузке, поскольку этот пакетделаетиспользуйте \@ifundefined{c@float@type}, который оставляет \c@float@typeэквивалент \relaxи затем \ifdefined\c@float@typeвозвращает true. Класс SIAM, который вы используете, загружает listings.

Ошибка в newfloat.

решение2

В качестве альтернативы ответу Дэвида, если вы можете изменить файл класса.

Проблема, кажется, исходит изнесовместимость между pythontexиlistings(последний, который загружается вашим файлом класса).

Как отмечено в одном из комментариев на странице GitHub, загрузка pythontexдо проблемы listingsрешает проблему (или вообще не загрузка списков:).

Так что ставьте pythontex«до» listingsи все готово.

решение3

сообщение об ошибке предполагает, что счетчик float@typeне определен

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

появляется float.styи возможное исправление поэтому

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


\begin{document}
test
\end{document}

работает без ошибок.

Однако я отмечаю, что pythontex загружает newfloat, так что это, возможно, не лучшее решение, поскольку вы, вероятно, на самом деле не хотите, чтобы float и newfloat загружались одновременно, а другой ответ указывает на подсказку, а затем небольшое отслеживание показывает, что это распространенная проблема теста latex, \@ifundefined{c@float@typ}имеющего побочный эффект определения, \c@float@typeкоторый возникает \relaxиз-за любопытной особенности примитива \csname.

Как это часто бывает, в следующем выпуске Latex, вероятно, будет код, позволяющий обойти эту проблему, но пока вы можете вернуться \c@float@typeк состоянию undefined

\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}

Связанный контент