
我正在運行 Windows 10 或 11(我不知道),在我的系統 - Ubuntu 發行版上運行 WSL2,並在我的電腦上下載 SageMath。我已經成功地在所有三個軟體之間建立了聯繫,並且能夠運行包含 Sage 程式碼的 .tex 檔案。
我從 Ubuntu 終端運行:
cd /mnt/c/users/myname
pdflatex filename.tex
sage filename.sagetex.sage
pdflatex filename.tex
我想製作一個 TikZ (或漸近線,但這更複雜,我相信它可能合法地需要下面提到的 python 方法)動畫,它基於超出 TeX 能力的數學,使用 sagetex 套件。我在使其正常工作時遇到困難,需要一些建議。最糟糕的情況是製作一個 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 代碼包含代碼\sage{f(\x)}
.為了使sagetex
套件正常運作,您的文件已在步驟 2 ( pdflatex filename.tex
) 中正確編譯。由於Sage
直到步驟 3 才會運行,並且缺少的內容/計算是在步驟 2 中建立繪圖所必需的,因此 LaTeX 編譯失敗。這就是為什麼在我的許多sagetex
問題答案中,我會建立一串 LaTeX 程式碼,然後將其插入到步驟 4 的 LaTeX 文件中的根本原因。如何使用 Tikz/Pgfplot 繪製黎曼 Zeta 函數?。但是,我不知道這種方法如何與該animate
套件一起使用在乳膠中。我認為您可以花費大量時間和精力使用該animate
命令在聖人中建立動畫 .gif。這將涉及使用 Sage 和命令創建 Tikzanimate
映像在聖人中。 Sage 程式碼中的圖形物件清單將animate
是 Tikz 影像。我認為這會顯著增加創建 gif 動畫的時間/複雜性。如果是我,我會使用 Sage 繪圖和 Sage ‘animate’ 來建立動畫。為了說明該方法,請訪問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
在聖人中創建 Tikz 圖片的動畫,但這要複雜得多且耗時。