%20gif%20-%20%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%20%D0%B8%D0%BB%D0%B8%20%D0%BD%D0%B5%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%3F.png)
Я использую Windows 10 или 11 (не знаю), в моей системе запущен WSL2 - дистрибутив Ubuntu, и на моем компьютере загружен SageMath. Я успешно установил связь между всеми тремя программами и смог запустить файлы .tex, содержащие код Sage.
Из терминала Ubuntu я запускаю:
cd /mnt/c/users/myname
pdflatex filename.tex
sage filename.sagetex.sage
pdflatex filename.tex
Я хотел бы сделать анимацию TikZ (или asymptote, но это сложнее, и я считаю, что для этого, вероятно, законно требуется метод 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? Я не думаю, что мне нужно спрашивать, будет ли это работать для asymptote, lol :)
Спасибо!
решение1
Ваш подход в коде выше, с использованием animate
пакетав LaTeXне работает, потому что ваш код LaTeX включает код \sage{f(\x)}
. Для sagetex
работы пакета ваш документ был правильно скомпилирован на шаге 2 ( pdflatex filename.tex
). Так как Sage
не будет работать до шага 3, и этот отсутствующий контент/вычисления необходимы для построения графика на шаге 2, компиляция LaTeX завершается неудачей. Это основная причина, по которой во многих моих ответах на sagetex
проблемы я создаю строку кода LaTeX, которая затем вставляется в документ LaTeX на шаге 4. Например, см. мой ответ наКак построить график дзета-функции Римана с помощью Tikz/Pgfplot?. Однако я не вижу, как этот подход может работать с animate
пакетомв LaTeXЯ думаю, что вы могли бы, затратив много времени и усилий, использовать animate
командув шалфеедля создания анимированного .gif. Это будет включать создание изображений Tikz с использованием Sage вместе с animate
командойв шалфее. Ваш список графических объектов в коде Sage animate
будет изображениями Tikz. Я думаю, это значительно увеличит время/сложность создания анимированного gif. Если бы это был я, я бы построил анимацию, используя Sage plotting вместе с 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, но это гораздо сложнее и требует больше времени.