#animation #latex #beamer
#Анимация #Латекс #проектор
Вопрос:
Я пытаюсь создать анимацию в LaTeX, используя пакет animate с двумя вложенными циклами, в котором я рисую графику с помощью Tikz. Тем не менее, изображение продолжает слегка изменять масштаб для первой и последней внутренней итерации. В минимальном примере ниже я хочу нарисовать две движущиеся стрелки: одну вверху, представляющую внешний слой, и одну внизу для внутреннего слоя.
Примечательно, что эта проблема исчезает, если внутренний слой имеет только одну итерацию, т. Е. Если переменная jlimit равна 1. Это, по-видимому, наводит на мысль, что что-то идет не так на внутреннем уровне.
Кто-нибудь сталкивался с этой проблемой раньше или вы можете придумать какие-либо решения?
Заранее спасибо 🙂
documentclass[10pt]{beamer}
usepackage[utf8]{inputenc}
usepackage{tikz}
usepackage{ifthen}
usepackage{animate}
newcounter{i} % Outer counter
setcounter{i}{0}
newcounter{j} % Inner counter
defilimit{3} % Outer iteration limit
defjlimit{5} % Inner iteration limit, rescaling doesn't happen if this is 1
begin{document}
begin{frame}[fragile]{Nested animated loops}
begin{center}
begin{animateinline}[loop, poster = first, controls]{2}
whiledo{thei<ilimit} { % Starting outer loop
setcounter{j}{0} % Resetting inner counter
whiledo{thej<jlimit} { % Starting inner loop
begin{tikzpicture}
draw [color=black] (-0.5,-1.5) rectangle (4.5, 0.5); % Draw a bounding rectangle
node[shift={(thei,0)}] at (0,0) {Large $downarrow$};% Draw the first level
node[shift={(thej,0)}] at (0,-1) {Large $uparrow$}; % Draw the second level
end{tikzpicture}
stepcounter{j} % Increase the inner counter
ifthenelse{thej<jlimit} {
newframe % Draw a new inner frame
}{}
}
stepcounter{i} % Increase the outer counter
ifthenelse{thei<ilimit} {
newframe % Draw a new outer frame
}{
end{animateinline}relax % BREAK % End the animation
}
}
end{center}
end{frame}
end{document}
Комментарии:
1. Очень хороший вопрос по тексу! Чтобы иметь более широкую аудиторию для таких вопросов, вам следует подумать о том, чтобы задавать их на tex.stackexchange.com .
Ответ №1:
Проблема заключается в незащищенных окончаниях строк, которые интерпретируются tex как пробелы. Добавьте %
знаки в конце строк, чтобы избежать этой проблемы:
documentclass[10pt]{beamer}
usepackage[utf8]{inputenc}
usepackage{tikz}
usepackage{ifthen}
usepackage{animate}
newcounter{i} % Outer counter
setcounter{i}{0}
newcounter{j} % Inner counter
defilimit{3} % Outer iteration limit
defjlimit{5} % Inner iteration limit, rescaling doesn't happen if this is 1
begin{document}
begin{frame}[fragile]{Nested animated loops}
begin{center}%
begin{animateinline}[loop, poster = first, controls]{2}
whiledo{thei<ilimit} {% % Starting outer loop
setcounter{j}{0}% % Resetting inner counter
whiledo{thej<jlimit} {% % Starting inner loop
begin{tikzpicture}%
draw [color=black] (-0.5,-1.5) rectangle (4.5, 0.5); % Draw a bounding rectangle
node[shift={(thei,0)}] at (0,0) {Large $downarrow$};% Draw the first level
node[shift={(thej,0)}] at (0,-1) {Large $uparrow$}; % Draw the second level
end{tikzpicture}%
stepcounter{j}% % Increase the inner counter
ifthenelse{thej<jlimit} {%
newframe% % Draw a new inner frame
}{}%
}%
stepcounter{i}% % Increase the outer counter
ifthenelse{thei<ilimit} {%
newframe% % Draw a new outer frame
}{%
end{animateinline}relax% % BREAK % End the animation
}%
}%
end{center}
end{frame}
end{document}
(клавиши управления не видны на изображении выше из-за преобразования в .gif, они отлично работают в исходном pdf)
Комментарии:
1. Большое спасибо, это сделало свое дело! Никогда за миллион лет я бы не догадался об этом >. <