tikz(및 점근선) gif에 대한 animate에 sagetex 중첩 - 가능하거나 불가능합니까?

tikz(및 점근선) gif에 대한 animate에 sagetex 중첩 - 가능하거나 불가능합니까?

저는 Windows 10 또는 11(모름)을 실행 중이고, 내 시스템에서 WSL2(Ubuntu 배포판)를 실행하고 있고, SageMath를 내 컴퓨터에 다운로드했습니다. 세 가지 소프트웨어 모두 간의 연결을 성공적으로 설정했으며 Sage 코드가 포함된 .tex 파일을 실행할 수 있었습니다.

Ubuntu 터미널에서 다음을 실행합니다.

  1. cd /mnt/c/users/myname

  2. pdflatex filename.tex

  3. sage filename.sagetex.sage

  4. 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단계까지 실행되지 않고 Sage2단계에서 플롯을 구성하려면 누락된 콘텐츠/계산이 필요하므로 LaTeX 컴파일이 실패합니다. 이것이 바로 문제에 대한 많은 답변에서 sagetexLaTeX 코드 문자열을 생성한 다음 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 사진의 애니메이션을 만드는 것은 훨씬 더 복잡하고 시간이 많이 걸립니다.

관련 정보