诊断 pythontex 和 siam .cls 文件之间的不兼容性

诊断 pythontex 和 siam .cls 文件之间的不兼容性

我在 SIAM 提供的 documentclass 中使用 pythontex(请参阅http://www.siam.org/meetings/ns14/siam-wns-article.cls- 2014 版少于 100 行,与 2018 版存在同样的问题)。

当我编译时

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


\begin{document}
test
\end{document}

我收到一个错误:

\c@listing=\count122

./tmp.tex:5: 不能在 \the 之后使用“\relax”。

\c@float@类型

我的实际示例的输出很好。但错误仍然存​​在,会议组织者表示他们希望原始 tex 文件用于最终会议记录。所以我想确保我可以告诉他们 documentclass 中需要修复什么。但我一直无法弄清楚。

有什么建议么?

答案1

该问题如下所述https://github.com/gpoore/pythontex/issues/61https://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

作为 David 答案的替代,如果您可以修改类文件。

问题似乎来自于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回未定义

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

相关内容