diagnosticando uma incompatibilidade entre pythontex e um arquivo siam .cls

diagnosticando uma incompatibilidade entre pythontex e um arquivo siam .cls

Estou usando pythontex dentro de uma documentclass fornecida pelo SIAM (vejahttp://www.siam.org/meetings/ns14/siam-wns-article.cls- menos de 100 linhas para a versão 2014 que apresenta o mesmo problema da versão 2018).

quando eu compilar

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


\begin{document}
test
\end{document}

Eu recebo um erro:

\c@listagem=\count122

./tmp.tex:5: Você não pode usar `\relax' depois de \the.

\c@float@tipo

A saída do meu exemplo real está boa. Mas o erro persiste e os organizadores da conferência afirmaram que vão querer os arquivos tex originais para os procedimentos finais. Então, gostaria de ter certeza de que posso dizer a eles o que precisa ser corrigido na documentclass. Mas não consegui descobrir.

Alguma sugestão?

Responder1

O problema é descrito emhttps://github.com/gpoore/pythontex/issues/61ehttps://github.com/axelsommerfeldt/caption/issues/5

Solução alternativa: use um nome diferente para os carros flutuantes do PythonTeX (independentemente de você usá-los ou não).

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

\setpythontexlistingenv{pylisting}

\begin{document}
test
\end{document}

Explicação do problema. O newfloatpacote testa \c@float@typeestar definido com \ifdefinede isso está errado: deveria usar \@ifundefined. O problema surge quando listingsé carregado, porque este pacotefazuse \@ifundefined{c@float@type}, que deixa \c@float@typeequivalente \relaxe \ifdefined\c@float@typeretorna verdadeiro. A classe SIAM que você está usando carrega listings.

Um bug no newfloat.

Responder2

Como alternativa à resposta de David, se você puder modificar o arquivo de classe.

O problema parece vir de umaincompatibilidade entre pythontexelistings(este último, que é carregado pelo seu arquivo de classe).

Conforme observado em um dos comentários da página do GitHub sobre o problema, carregar pythontexantes listingsresolve o problema (ou não carregar listagens :).

Então coloque pythontexantes listingse você está pronto para ir.

Responder3

a mensagem de erro sugere que um contador float@typenão está definido

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

aparece float.stye uma possível solução é, portanto,

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


\begin{document}
test
\end{document}

é executado sem erros.

Noto, no entanto, que pythontex carrega newfloat, então talvez essa não seja a melhor solução, pois você provavelmente não deseja que float e newfloat sejam carregados e a outra resposta aponta para uma pista e, em seguida, um pouco de rastreamento revela que esse é o problema comum de o teste de látex \@ifundefined{c@float@typ}tem o efeito colateral de definir \c@float@typeser \relaxdevido a uma característica curiosa do \csnameprimitivo.

Acontece que a próxima versão do latex provavelmente terá código para evitar esse problema, mas enquanto isso você pode voltar \c@float@typea ser indefinido

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

informação relacionada