Я только что сам изучил LaTeX за последние три месяца для своей диссертации. Теперь мне нужно сделать презентацию, и я должен использовать beamer. Я использовал Tikz в своей диссертации и хотел бы использовать его снова в beamer. Как бы мне ни хотелось просто скопировать и вставить мою tikzpicture в презентацию, похоже, это не сработает. Вот пример того, что я использовал в своей диссертации.
\begin{tikzpicture}
\matrix (m) [
matrix of math nodes,
nodes in empty cells,
minimum width=width("8"),
] {
1 & 1 & 2 & 2 & & & & & & & 1 & 1 & 2 & 2 & & & & & & 1 & 1 & 2 & 2 & \leftarrow & 3 & 1 & & 1 & 1 & 2 & 2 & 3 & \leftarrow & 1 & \\
2 & 3 & 3 & 4 & & & & & & & 2 & 3 & 3 & 4 & & & & & & 2 & 3 & 3 & 4 & & & & & 2 & 3 & 3 & 4 & & & & \\
3 & 4 & 6 & & & & & & & = & 3 & 4 & 6 & & & & & & = & 3 & 4 & 6 & & & & & = & 3 & 4 & 6 & & & & & = \\
4 & 7 & & & \leftarrow & 5 & \leftarrow & 3 & 1 & & 4 & 5 & & & & & & & & 4 & 5 & & & & & & & 4 & 5 & & & & & & \\
& & & & & & & & & & & & & & \leftarrow & 7 & \leftarrow 3 & 1 & & 7 & & & & & & & & 7 & & & & & & & \\
} ;
\draw (m-1-1.north west) rectangle (m-1-2.south east);
\draw (m-2-4.north west) rectangle (m-2-4.south east);
\draw[Red!,line width=2] (m-1-4.north west) rectangle (m-1-4.south east);
\draw (m-1-1.north west) rectangle (m-4-1.south east);
\draw (m-1-3.north west) rectangle (m-1-3.south east);
\draw (m-3-3.north west) rectangle (m-3-3.south east);
\draw[Red!,line width=2] (m-2-3.north west) rectangle (m-2-3.south east);
\draw (m-3-1.north west) rectangle (m-3-1.south east);
\draw (m-4-2.north west) rectangle (m-4-2.south east);
\draw[Red!,line width=2] (m-3-2.north west) rectangle (m-3-2.south east);
\draw (m-1-11.north west) rectangle (m-1-11.south east);
\draw (m-1-12.north west) rectangle (m-1-12.south east);
\draw (m-1-13.north west) rectangle (m-1-13.south east);
\draw (m-2-14.north west) rectangle (m-2-14.south east);
\draw (m-2-12.north west) rectangle (m-2-12.south east);
\draw[Red!,line width=2] (m-1-14.north west) rectangle (m-1-14.south east);
\draw (m-2-11.north west) rectangle (m-2-11.south east);
\draw (m-3-13.north west) rectangle (m-3-13.south east);
\draw[Red!,line width=2] (m-2-13.north west) rectangle (m-2-13.south east);
\draw (m-3-11.north west) rectangle (m-3-11.south east);
\draw[Red!,line width=2] (m-3-12.north west) rectangle (m-3-12.south east);
\draw (m-4-11.north west) rectangle (m-4-11.south east);
\draw[Red!,line width=2] (m-4-12.north west) rectangle (m-4-12.south east);
\draw (m-1-21.north west) rectangle (m-1-21.south east);
\draw (m-1-22.north west) rectangle (m-1-22.south east);
\draw (m-1-20.north west) rectangle (m-1-20.south east);
\draw (m-2-20.north west) rectangle (m-2-20.south east);
\draw (m-2-21.north west) rectangle (m-2-21.south east);
\draw (m-2-23.north west) rectangle (m-2-23.south east);
\draw[Red!,line width=2] (m-1-23.north west) rectangle (m-1-23.south east);
\draw (m-3-22.north west) rectangle (m-3-22.south east);
\draw[Red!,line width=2] (m-2-22.north west) rectangle (m-2-22.south east);
\draw (m-3-20.north west) rectangle (m-3-20.south east);
\draw[Red!,line width=2] (m-3-21.north west) rectangle (m-3-21.south east);
\draw (m-4-20.north west) rectangle (m-4-20.south east);
\draw[Red!,line width=2] (m-4-21.north west) rectangle (m-4-21.south east);
\draw[Red!,line width=2] (m-5-20.north west) rectangle (m-5-20.south east);
\draw (m-1-28.north west) rectangle (m-1-31.south east);
\draw[Orange!,line width=2] (m-1-32.north west) rectangle (m-1-32.south east);
\draw (m-1-28.north west) rectangle (m-4-28.south east);
\draw (m-1-30.north west) rectangle (m-3-30.south east);
\draw (m-2-29.north west) rectangle (m-2-31.south east);
\draw (m-4-28.north west) rectangle (m-5-28.south east);
\draw (m-3-28.north west) rectangle (m-3-28.south east);
\draw (m-4-29.north west) rectangle (m-4-29.south east);
\end{tikzpicture}
Я хочу показать пошаговое развитие маршрута столкновений от начала алгоритма вставки Робинсона-Шенстеда до конца, и я бы сделал это с использованием нескольких слайдов, но я не понимаю, как работают узлы для этого, или даже то, что я должен использовать. Как мне создать эту многослайдовую "анимацию"? Спасибо
решение1
Сила tikz в том, что вы можете легко писать макросы для рисования обычных объектов, таких как tableaux. У меня есть код, который я написал, чтобы сделать что-то похожее. Вместо того, чтобы рисовать более толстые рамки, я меняю цвет фона ячейки, но было бы достаточно легко адаптировать мой код, чтобы сделать более толстые рамки, если вы предпочитаете. Основная идея заключается в том, чтобы спрятать большую часть кода tableaux внутри макроса, чтобы вы могли «писать» каждую tableau, используя естественный и простой для редактирования синтаксис, например
\ShadedTableau{{1,1,2,2},{2,3,3,4},{3,4,6},{4,7}}
В вашем случае использования вы хотите иметь возможность затенять определенные ячейки. Чтобы обеспечить это, мы допускаем необязательный аргумент, который представляет собой разделенный запятыми список координат ячеек, которые мы хотим затенять:
\ShadedTableau[(3,0),(2,-1),(1,-2)]{{1,1,2,2},{2,3,3,4},{3,4,6},{4,7}}
The\ShadedTableau
не особенно сложен: он используеттикз \foreach
цикл для рисования ячейки таблицы за ячейкой, проходя по строкам, а затем по записям в каждой строке таблицы, которые указаны в качестве аргументов \ShadedTableau
. (В макросах ниже есть несколько дополнительных функций, которые я нашел полезными.)
Используя это с помощью проектора, ваш MWE будет выглядеть следующим образом (перейдите к кадру проектора при первом прочтении, поскольку именно там находятся ваши таблицы):
\documentclass{beamer}
\usepackage{xcolor}
\usepackage{tikz}
% tikz macro for drawing tableaux with optionally shaded nodes.
% \ShadedTableau{{1,2,3,4},{5,6,7},{8,9}} -> 1234/567/89
% \ShadedTableau[(1,-1),(2,-1),(2,0),(3,0),(4,0)]{{1,2,3,4},{5,6,7},{8,9}}
\newdimen\shadedBaseline\shadedBaseline=-4mm
\newcount\tableauRow\newcount\tableauCol
\newcommand\ShadedTableau[2][\relax]{%
\begin{tikzpicture}[scale=0.4,draw/.append style={thick,black},baseline=\shadedBaseline]
\ifx\relax#1\relax%
\else % shade the boxes in #1
\foreach\bx in {#1} { \filldraw[blue!20]\bx+(-.5,-.5)rectangle++(.5,.5); }
\fi
\tableauRow=0
\foreach \Row in {#2} {
\tableauCol=1
\foreach\k in \Row {
\draw(\the\tableauCol,\the\tableauRow)+(-.5,-.5)rectangle++(.5,.5);
\draw(\the\tableauCol,\the\tableauRow)node{\k};
\global\advance\tableauCol by 1
}
\global\advance\tableauRow by -1
}
\end{tikzpicture}%
}
\begin{document}
\begin{frame}{Bumping}
\ShadedTableau[(4,0),(3,-1),(2,-2)]{{1,1,2,2},{2,3,3,4},{3,4,6},{4,7}}
\quad
\pause $\overset{\longleftarrow 5\longleftarrow 3\ 1}{=}$\quad
\ShadedTableau[(4,0),(3,-1),(2,-2),(2,-3)]{{1,1,2,2},{2,3,3,4},{3,4,6},{4,5}}
\qquad
\pause $\overset{\longleftarrow 7\longleftarrow 3\ 1}{=}$\quad
\ShadedTableau[(4,0),(3,-1),(2,-2),(2,-3),(1,-4)]{{1,1,2,2},{2,3,3,4},{3,4,6},{4,5},{7}}
\end{frame}
\end{document}
Это дает следующий результат:
Поскольку вы спросили о "многослайдовой анимации", в приведенном выше примере это достигается просто с помощью команды \pause
, которая "ставит на паузу" презентацию, пока вы не нажмете клавишу. Возможны и более сложные вещи: см. очень читабельныйпроекторПодробности в руководстве.
решение2
Поскольку изменять код рисунка уже слишком поздно, самый простой способ — добавить маску поверх существующего рисунка.
Основная структура выглядит следующим образом:
\documentclass{beamer}
\usepackage{tikz}
\begin{document}
\foreach\i in{1,...,30}{
\begin{frame}
your picture
\tikz[remember picture,overlay]{
\filldraw[fill=white](current page.west)++(\i/2,-1)rectangle+(12,4)--+(0,0);
}
\transreplace
\transduration{0}
\end{frame}
}
\end{document}
P.S. Если вы используете Adobe Reader и находитесь в полноэкранном режиме, воспроизведение будет происходить автоматически.
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{matrix}
\begin{document}
\def\tempamp{&}
\catcode`\&13 \let&\tempamp
\foreach\i in{1,...,30}{
\begin{frame}
\centering\begin{tikzpicture}[transform canvas={scale=.6}]
\matrix (m) [
matrix of math nodes,
nodes in empty cells,
minimum width=width("8"),
] {
1 & 1 & 2 & 2 & & & & & & & 1 & 1 & 2 & 2 & & & & & & 1 & 1 & 2 & 2 & \leftarrow & 3 & 1 & & 1 & 1 & 2 & 2 & 3 & \leftarrow & 1 & \\
2 & 3 & 3 & 4 & & & & & & & 2 & 3 & 3 & 4 & & & & & & 2 & 3 & 3 & 4 & & & & & 2 & 3 & 3 & 4 & & & & \\
3 & 4 & 6 & & & & & & & = & 3 & 4 & 6 & & & & & & = & 3 & 4 & 6 & & & & & = & 3 & 4 & 6 & & & & & = \\
4 & 7 & & & \leftarrow & 5 & \leftarrow & 3 & 1 & & 4 & 5 & & & & & & & & 4 & 5 & & & & & & & 4 & 5 & & & & & & \\
& & & & & & & & & & & & & & \leftarrow & 7 & \leftarrow 3 & 1 & & 7 & & & & & & & & 7 & & & & & & & \\
} ;
\draw (m-1-1.north west) rectangle (m-1-2.south east);
\draw (m-2-4.north west) rectangle (m-2-4.south east);
\draw[red!,line width=2] (m-1-4.north west) rectangle (m-1-4.south east);
\draw (m-1-1.north west) rectangle (m-4-1.south east);
\draw (m-1-3.north west) rectangle (m-1-3.south east);
\draw (m-3-3.north west) rectangle (m-3-3.south east);
\draw[red!,line width=2] (m-2-3.north west) rectangle (m-2-3.south east);
\draw (m-3-1.north west) rectangle (m-3-1.south east);
\draw (m-4-2.north west) rectangle (m-4-2.south east);
\draw[red!,line width=2] (m-3-2.north west) rectangle (m-3-2.south east);
\draw (m-1-11.north west) rectangle (m-1-11.south east);
\draw (m-1-12.north west) rectangle (m-1-12.south east);
\draw (m-1-13.north west) rectangle (m-1-13.south east);
\draw (m-2-14.north west) rectangle (m-2-14.south east);
\draw (m-2-12.north west) rectangle (m-2-12.south east);
\draw[red!,line width=2] (m-1-14.north west) rectangle (m-1-14.south east);
\draw (m-2-11.north west) rectangle (m-2-11.south east);
\draw (m-3-13.north west) rectangle (m-3-13.south east);
\draw[red!,line width=2] (m-2-13.north west) rectangle (m-2-13.south east);
\draw (m-3-11.north west) rectangle (m-3-11.south east);
\draw[red!,line width=2] (m-3-12.north west) rectangle (m-3-12.south east);
\draw (m-4-11.north west) rectangle (m-4-11.south east);
\draw[red!,line width=2] (m-4-12.north west) rectangle (m-4-12.south east);
\draw (m-1-21.north west) rectangle (m-1-21.south east);
\draw (m-1-22.north west) rectangle (m-1-22.south east);
\draw (m-1-20.north west) rectangle (m-1-20.south east);
\draw (m-2-20.north west) rectangle (m-2-20.south east);
\draw (m-2-21.north west) rectangle (m-2-21.south east);
\draw (m-2-23.north west) rectangle (m-2-23.south east);
\draw[red!,line width=2] (m-1-23.north west) rectangle (m-1-23.south east);
\draw (m-3-22.north west) rectangle (m-3-22.south east);
\draw[red!,line width=2] (m-2-22.north west) rectangle (m-2-22.south east);
\draw (m-3-20.north west) rectangle (m-3-20.south east);
\draw[red!,line width=2] (m-3-21.north west) rectangle (m-3-21.south east);
\draw (m-4-20.north west) rectangle (m-4-20.south east);
\draw[red!,line width=2] (m-4-21.north west) rectangle (m-4-21.south east);
\draw[red!,line width=2] (m-5-20.north west) rectangle (m-5-20.south east);
\draw (m-1-28.north west) rectangle (m-1-31.south east);
\draw[orange!,line width=2] (m-1-32.north west) rectangle (m-1-32.south east);
\draw (m-1-28.north west) rectangle (m-4-28.south east);
\draw (m-1-30.north west) rectangle (m-3-30.south east);
\draw (m-2-29.north west) rectangle (m-2-31.south east);
\draw (m-4-28.north west) rectangle (m-5-28.south east);
\draw (m-3-28.north west) rectangle (m-3-28.south east);
\draw (m-4-29.north west) rectangle (m-4-29.south east);
\end{tikzpicture}
\tikz[remember picture,overlay]{
\filldraw[fill=white](current page.west)++(\i/2,-1)rectangle+(12,4)--+(0,0);
}
\transreplace
\transduration{0}
\end{frame}
}
\end{document}