論文のために、ここ 3 か月間 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}
Robinson-Schensted 挿入アルゴリズムの最初から最後までのバンピング ルートの段階的な進行を示し、複数のスライドを使用してこれを実現したいのですが、ノードがどのように機能するのか、またノードを使用すべきかどうかもわかりません。この複数のスライドの「アニメーション」を作成するにはどうすればよいでしょうか。ありがとうございます。
答え1
tikz の強みは、tableaux のような通常のオブジェクトを描画するためのマクロを簡単に記述できることです。私は、同様のことを行うために記述したコードをいくつか持っています。太いフレームを描画するのではなく、セルの背景色を変更しますが、必要に応じて、太いフレームを作成するようにコードを変更するのは簡単です。主なアイデアは、tableaux コードのほとんどをマクロ内に埋め込み、次のような自然で編集しやすい構文を使用して各 tableaux を「記述」できるようにすることです。
\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}}
この\ShadedTableau
マクロは特に複雑ではありません。ティックズ \foreach
ループして、行をループし、次に引数として指定された表の各行のエントリをループして、表をセルごとに描画します\ShadedTableau
。(以下のマクロには、私が便利だと思った追加の機能がいくつかあります。)
これを Beamer で使用すると、MWE は次のようになります (最初に読むときは Beamer フレームまでスキップしてください。そこにタブローがあります)。
\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}
PS. 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}