%20gif%EC%97%90%20%EB%8C%80%ED%95%9C%20animate%EC%97%90%20sagetex%20%EC%A4%91%EC%B2%A9%20-%20%EA%B0%80%EB%8A%A5%ED%95%98%EA%B1%B0%EB%82%98%20%EB%B6%88%EA%B0%80%EB%8A%A5%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
저는 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 패키지를 사용하여 TeX의 기능을 넘어서는 수학을 기반으로 하는 TikZ(또는 점근선, 그러나 그것은 더 복잡하며 합법적으로 아래에 언급된 Python 방법이 필요하다고 생각합니다) 애니메이션을 만들고 싶습니다. 이 작업을 수행하는 데 문제가 있어 조언을 구하고 싶습니다. 최악의 시나리오는 animate 패키지를 사용하지 않고 각 프레임에 대해 전체 문서를 다시 작성하는 Python 스크립트를 만든 다음 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
)에서 제대로 컴파일되어야 합니다. 3단계까지 실행되지 않고 Sage
2단계에서 플롯을 구성하려면 누락된 콘텐츠/계산이 필요하므로 LaTeX 컴파일이 실패합니다. 이것이 바로 문제에 대한 많은 답변에서 sagetex
LaTeX 코드 문자열을 생성한 다음 4단계의 LaTeX 문서에 삽입하는 근본적인 이유입니다. 예를 들어 다음 답변을 참조하세요.Tikz/Pgfplot을 사용하여 Riemann Zeta 함수를 어떻게 플롯합니까?. 그러나 이 접근 방식이 animate
패키지 에서 어떻게 작동하는지 알 수 없습니다.라텍스에서. 많은 시간과 노력을 들여 animate
명령을 사용할 수 있다고 생각합니다.세이지에서애니메이션 .gif를 만들려면 여기에는 animate
명령 과 함께 Sage를 사용하여 Tikz 이미지를 생성하는 작업이 포함됩니다.세이지에서. Sage animate
코드의 그래픽 개체 목록은 Tikz 이미지입니다. 나는 이것이 애니메이션 gif를 만드는 시간/복잡성을 상당히 증가시킬 것이라고 생각합니다. 저라면 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 사진의 애니메이션을 만드는 것은 훨씬 더 복잡하고 시간이 많이 걸립니다.