问题:使用python
LaTeX 中嵌入的工作脚本的可能性。
当我使用 时\usepackage{python}
,它对我的论文产生了神奇的效果(虽然我对 LaTeX 很陌生,但已经用 Python 编写了数千行代码)。Python 绘制图表并将它们放在硬盘上,然后 LaTeX 将它们放入文档中。在系统出现严重问题(Linux Mint)后,我被迫重新安装,并且python
+LaTeX
停止工作。我正在寻找解决方案并pythontex
很有希望。结果发现,最终mwrep
和之间存在一些严重的冲突pythontex
。
可以pythontex
和 一起使用吗mwrep
?(mwrep
必须[编辑:再想想,我不知道这是否真的需要——我以为印刷厂想要这种类型的文件——说实话,我不知道有什么区别。我会问编辑。])
或者是否有更好的可能性在 LaTeX 中嵌入 Python 脚本(即工作脚本)?
附言
我正在寻找答案,但没有找到明确的解决方案。
更新
最小工作示例。
.TEX 文件:
% !TEX options=--shell-escape
\documentclass[11pt]{mwrep}%
\usepackage{pythontex}
\usepackage{graphicx}
\begin{document}
\section{pythontex try}
% \begin{pyconsole}
% x = 987.27
% x = x**2
% print(f"{x = }")
% print("Hello Seba :)")
% \end{pyconsole}
\end{document}
崇高的短信:
This is pdfTeX, Version 3.141592653-2.6-1.40.22 (TeX Live 2022/dev/Debian) (preloaded format=pdflatex)
restricted \write18 enabled.
entering extended mode
(./mwrepPythontryMini.tex
LaTeX2e <2021-11-15> patch level 1
L3 programming layer <2022-01-21>
(/usr/share/texlive/texmf-dist/tex/latex/mwcls/mwrep.cls
Document Class: mwrep 2017/05/13 v0.75 A LaTeX document class (MW)
*** Beta version. Formatting may change
*** in future versions of this class.
(/usr/share/texlive/texmf-dist/tex/latex/mwcls/mw11.clo))
(... cut ...)
(./mwrepPythontryMini.aux)
No file pythontex-files-mwrepPythontryMini/mwrepPythontryMini.pytxmcr.
Run PythonTeX to create it.
! Undefined control sequence.
\newfloat@setwithin ...apter}\@chapterlistsgap@on
{#1}\newfloat@@setwithin {...
l.9 \begin{document}
?
*.sublime构建:
{
"shell_cmd": "pdflatex $file_name && pythontex $file_name --interpreter python:python3 && pdflatex $file_name && xreader $file_base_name.pdf "
}
答案1
看起来newfloat
和之间的接口有些奇怪mwrep
。这是我的理解:
article
与documentclass不同,mwrep
documentclass 没有定义\@chapter
。\DeclareFloatingEnvironment
由于某种原因,这会破坏命令。pythontex
如果之前没有定义过环境,那么包会定义一个listing
环境:\AtBeginDocument
\AtBeginDocument{ \ifcsname listing\endcsname \ifbool{pytx@listingenv}{}% {\PackageWarning{\pytx@packagename}% {A "listing" environment already exists \MessageBreak \pytx@packagename\space will not create one \MessageBreak Use \string\setpythontexlistingenv\space to create a custom listing environment}}% \else \ifbool{pytx@listingenv}{}{\DeclareFloatingEnvironment[fileext=lopytx]{listing}} \fi }
您也可以在没有以下选项的情况下重现该问题newfloat
:
\documentclass{mwrep}
\usepackage{newfloat}
\DeclareFloatingEnvironment{diagram}
\begin{document}
Text
\end{document}
因此,显然一个解决方法(至少在当前版本中)是强制 pythontex 尽早声明浮动环境:
\RequirePackage{pythontex}
\setpythontexlistingenv{listing}
\documentclass[11pt]{mwrep}%
\begin{document}
\section{pythontex try}
\begin{pyconsole}
x = 987.27
x = x**2
print(f"{x = }")
print("Hello Seba :)")
\end{pyconsole}
\end{document}
另一个解决方法是添加
\csname @chapter\endcsname
到文档的最开始处。
看起来它是由其他一些不相关的变化引起的:https://gitlab.com/axelsommerfeldt/newfloat/-/issues/13
答案2
只需添加的虚拟定义\@chapter
,因为newfloat
使用此宏来区分支持章节的类和不支持章节的类。
\documentclass[11pt]{mwrep}
\makeatletter
\providecommand\@chapter{}
\makeatother
\usepackage{pythontex}
\usepackage{graphicx}
\begin{document}
\section{pythontex try}
\begin{pyconsole}
x = 987.27
x = x**2
print(f"{x = }")
print("Hello Seba :)")
\end{pyconsole}
\end{document}