tikz (および asymptote) gif の animate で sagetex をネストすることは可能か、不可能か?

tikz (および asymptote) gif の animate で sagetex をネストすることは可能か、不可能か?

私は Windows 10 または 11 (わかりません) を実行しており、システム (Ubuntu ディストリビューション) で WSL2 を実行しており、コンピューターに SageMath をダウンロードしています。3 つのソフトウェア間の接続を正常に確立し、Sage コードを含む .tex ファイルを実行できました。

Ubuntu ターミナルから次のコマンドを実行します:

  1. cd /mnt/c/users/myname

  2. pdflatex filename.tex

  3. sage filename.sagetex.sage

  4. pdflatex filename.tex

私は、TeX の能力を超えた数学に基づいた、sagetex パッケージを使用した TikZ (または asymptote ですが、これはより複雑で、おそらく下記の Python メソッドが正当に必要になると思います) アニメーションを作成したいと考えています。これをうまく機能させるのに苦労しており、アドバイスをいただきたいです。最悪のシナリオは、各フレームのドキュメント全体を書き換える 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 スクリプト オプションの方がよい方法でしょうか。これが asymptote で動作するかどうかは尋ねる必要はないと思います、笑 :)

ありがとう!

答え1

上記のコードでは、animateパッケージを使用してアプローチしますLaTeXでは動作しません。LaTeX コードにコード が含まれているためです\sage{f(\x)}sagetexパッケージが動作するには、ドキュメントがステップ 2 ( pdflatex filename.tex) で適切にコンパイルされている必要があります。Sageはステップ 3 まで実行されず、その欠落しているコンテンツ/計算はステップ 2 でプロットを作成するために必要であるため、LaTeX コンパイルは失敗します。これが、私が多くのsagetex問題に対する回答で、ステップ 4 で LaTeX ドキュメントに挿入される LaTeX コードの文字列を作成する主な理由です。たとえば、Tikz/Pgfplot を使用してリーマン ゼータ関数をプロットするにはどうすればよいですか?animateしかし、このアプローチがパッケージでどのように機能するかはわかりませんLaTeXで時間と労力をかけてコマンドを使用すればanimateセージアニメーション.gifを作成する。これには、Sageと以下のanimateコマンドを使用してTikz画像を作成する必要がある。セージグラフィックスオブジェクトのリストは、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 画像のアニメーションを作成することもできますが、これは非常に複雑で時間がかかります。

関連情報