Использование LaTeX animate & Tikz с двумя вложенными циклами - PullRequest
1 голос
/ 12 апреля 2019

Я пытаюсь создать анимацию в LaTeX, используя пакет анимации с двумя вложенными циклами, в котором я рисую графику с помощью 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
\def\ilimit{3}    % Outer iteration limit
\def\jlimit{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 Ответ

0 голосов
/ 12 апреля 2019

Проблема в незащищенных концах строк, которые интерпретируются тексами как пробелы. Чтобы избежать этой проблемы, добавьте знаки % в конце строк:

\documentclass[10pt]{beamer}

\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{ifthen}
\usepackage{animate}

\newcounter{i}    % Outer counter
\setcounter{i}{0}   
\newcounter{j}    % Inner counter
\def\ilimit{3}    % Outer iteration limit
\def\jlimit{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}

enter image description here

(управляющие клавиши не видны на изображении выше из-за преобразования в .gif, они отлично работают в оригинальном pdf)

...