animate
我正在尝试使用和包实现一些复杂的动画python
。我可以python
在animate
环境中使用单帧环境,例如:
\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}