python 环境适用于单帧动画,但不能用于多帧动画

python 环境适用于单帧动画,但不能用于多帧动画

animate我正在尝试使用和包实现一些复杂的动画python。我可以pythonanimate环境中使用单帧环境,例如:

\documentclass{letter}

\usepackage{animate}
\usepackage{python}

\begin{document}

Below changing numbers are displayed after clicking:

\begin{animateinline}[loop]{1}

\begin{python}
print("\LaTeX 0")
\end{python}

\newframe

\begin{python}
print("\LaTeX 1")
\end{python}

\newframe

\begin{python}
print("\LaTeX 2")
\end{python}

\end{animateinline}

\end{document}

使用 编译时可以正常工作pdflatex --shell-escape file.tex。但是

\documentclass{letter}

\usepackage{animate}
\usepackage{python}

\begin{document}

Below changing numbers are displayed after clicking: 

\begin{animateinline}[loop]{1}
\multiframe{3}{i=0+1}{
\begin{python}
print("\LaTeX \i")
\end{python}
}
\end{animateinline}


\end{document}

我已经使用multiframe命令进行循环\i,但是不起作用。

如果我不使用而只是python直接输入文本,两个选项都会给出相同的结果,这表明python环境是问题的原因。

为什么python环境不兼容multiframe?我该如何修复?

答案1

环境python处理逐字内容。将这种环境放入命令参数中通常会导致问题。解决方案可能存在,但可能很复杂,并且涉及大量 catcode 技巧。

另一个选择是使用pythontex包,我创建它是为了提供比python包提供的更多的功能。pythontex提供了一个\pyc内联执行 Python 代码的命令。它通常在命令参数中工作良好,只要不需要#和字符。我在下面提供了一个示例。%

使用pythontex涉及略有不同的编译过程。每当您需要执行新的/修改的代码时,请运行 LaTeX,运行 pythontex.py,然后再次运行 LaTeX(更多详细信息请参阅文档)。该animate包在第一次运行 LaTeX 后会出错,但第二次运行后会正常。如果没有新的/修改的代码,则只需像平常一样运行 LaTeX;输出会被缓存。

我假设您将使用它来创建更复杂的框架。在这种情况下,您可能希望在环境中创建一个 Python 函数,然后使用pycode打印该函数的输出(不带 )。下面的示例也包括对此的演示。\multiframe\pyc

\documentclass{letter}

\usepackage{animate}
\usepackage{pythontex}

\begin{document}

Below changing numbers are displayed after clicking: 

\begin{animateinline}[loop]{1}
\multiframe{3}{i=0+1}{
\pyc{print("\LaTeX \i")}
}
\end{animateinline}

\begin{pycode}
def my_func(x):
    return '\\textbf{' + x + '}'
\end{pycode}

\begin{animateinline}[loop]{1}
\multiframe{3}{i=0+1}{
\pyc{print(my_func("\LaTeX \i"))}
}
\end{animateinline}

\end{document}

相关内容