mwrep 和 pythontex - 是否可以使用

mwrep 和 pythontex - 是否可以使用

问题:使用pythonLaTeX 中嵌入的工作脚本的可能性。

当我使用 时\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不同, mwrepdocumentclass 没有定义\@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}

在此处输入图片描述

相关内容