Использование LaTeX animate и Tikz с двумя вложенными циклами

#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. Большое спасибо, это сделало свое дело! Никогда за миллион лет я бы не догадался об этом >. <