我运行的是 Windows 10 或 11(我不知道),系统上运行着 WSL2 - Ubuntu 发行版,电脑上下载了 SageMath。我已成功建立这三个软件之间的联系,并且能够运行包含 Sage 代码的 .tex 文件。
从 Ubuntu 终端运行:
cd /mnt/c/users/myname
pdflatex filename.tex
sage filename.sagetex.sage
pdflatex filename.tex
我想使用 sagetex 包制作一个 TikZ(或 asymptote,但这更复杂,我相信它可能确实需要下面提到的 python 方法)动画,该动画基于超出 TeX 能力的数学。我无法让它工作,想要一些建议。最坏的情况是制作一个 Python 脚本来重写每个帧的整个文档 - 不使用 animate 包,然后使用 ImageMagick 或类似的东西将它们附加在一起 - 如果需要的话,这是可以的。我只关心产品;我不在乎我的电脑要花多长时间才能制作出来。
这是一个最小的非工作示例:
\documentclass{beamer}
\usepackage{sagetex,animate,tikz}
\begin{document}
\begin{sageblock}
f(x) = x
\end{sageblock}
\begin{animateinline}[palindrome]{1}
\multiframe{10}{x=0+1}{
\begin{tikzpicture}
\draw (0,0) -- (\sage{f(\x)},0);
\end{tikzpicture}}
\end{animateinline}
\end{document}
请告诉我;我可以让这个适用于 tikz 吗,或者 Python 脚本选项是更好的选择?我不认为我需要询问这是否适用于渐近线,哈哈 :)
谢谢!
答案1
上面的代码中,使用animate
包的方法在 LaTeX 中不起作用,因为您的 LaTeX 代码包含代码\sage{f(\x)}
。要使sagetex
软件包正常工作,您的文档必须在步骤 2 中正确编译(pdflatex filename.tex
)。由于Sage
直到步骤 3 才会运行,并且缺少的内容/计算对于在步骤 2 中构建绘图是必需的,因此 LaTeX 编译失败。这就是为什么在我的许多sagetex
问题的答案中,我创建了一串 LaTeX 代码,然后在您的步骤 4 中将其插入到 LaTeX 文档中。例如,请参阅我对如何使用 Tikz/Pgfplot 绘制黎曼 Zeta 函数?。但是,我不明白这种方法如何与animate
软件包一起工作在 LaTeX 中。我认为你可以花很多时间和精力使用animate
命令在 Sage 中创建动画 .gif。这将涉及使用 Sage 以及命令创建 Tikzanimate
图像在 Sage 中。Sage 代码中的图形对象列表将animate
是 Tikz 图像。我认为这会显著增加创建动画 gif 的时间/复杂性。如果是我,我会使用 Sage 绘图和 Sage“动画”来构建动画。为了说明这种方法,请转到Sage 单元服务器。将下面的代码复制/粘贴到框中。然后按下图中所示的“评估”按钮。您将看到 Sage 运行动画。
def Rotate(A,P,degrees):
A1 = [A[0]-P[0],A[1]-P[1]]
theta = degrees*pi/180
R = [A1[0]*cos(theta)-A1[1]*sin(theta), A1[0]*sin(theta)+A1[1]*cos(theta)]
return [R[0]+P[0],R[1]+P[1]]
L=[]
for j in range(1,15):
G = Graphics()
N = j
Start = [1,0]
Finish = [0,0]
Curve = [[1,0], [0,0]]
n = 1
while n<N:
CurveR=[]
for i in range(0,len(Curve)-1):
CurveR += [Rotate(Curve[i],Curve[len(Curve)-1],-90)]
for i in range(len(CurveR)-1,-1,-1):
Curve += [CurveR[i]]
n += 1
G += line(Curve)
L += [G.plot()]
d=animate([L[k]for k in range(1,14)],xmin=-22,xmax=87,ymin=-44,ymax=90,axes=False)
d.show(delay=100)
最终结果就是下图中的动画:
您可以gif
通过右键单击图像来下载。关于上面的代码,我认为此代码更接近您所写的内容:
f(x)=x
L=[]
for j in range(0,15):
G = Graphics()
Curve = line([(0,0), (f(j),0)])
G += Curve
L += [G.plot()]
d=animate([L[k]for k in range(1,14)],xmin=0,xmax=15,ymin=0,ymax=2,axes=False)
d.show(delay=100)
您可以在下面看到右键单击的结果:
仅使用 Sage 创建动画应该相对快速和容易。要制作 Tikz 图像的动画,L += [G.plot()]
必须修改该行以包含已经创建的 png/pdf Tikz 图(额外步骤)或动态创建的(大量额外编码)。所以我怀疑你可以适应animate
在 Sage 中创建 Tikz 图片的动画,但是这会更加复杂并且耗时。