
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 newfloat
pacote testa \c@float@type
estar definido com \ifdefined
e isso está errado: deveria usar \@ifundefined
. O problema surge quando listings
é carregado, porque este pacotefazuse \@ifundefined{c@float@type}
, que deixa \c@float@type
equivalente \relax
e \ifdefined\c@float@type
retorna 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 pythontex
elistings
(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 pythontex
antes listings
resolve o problema (ou não carregar listagens :).
Então coloque pythontex
antes listings
e você está pronto para ir.
Responder3
a mensagem de erro sugere que um contador float@type
não está definido
grep 'newcounter.*float@type' /usr/local/texlive/2017/texmf-dist/tex/latex/*/*.*
aparece float.sty
e 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@type
ser \relax
devido a uma característica curiosa do \csname
primitivo.
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@type
a 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}