使用时克劳迪奥·菲安德里诺太棒了雙方库,我意识到与库中的矩阵相关的一个有趣的特性matrix
:如果将矩阵放置在 中\matrix
,它们的分隔符将不会隐藏。以下 MWE 说明了这一点,其中我还介绍了两种可能的解决方法。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{matrix,overlay-beamer-styles}
\usetikzlibrary{positioning} %<- not important here
\begin{document}
\begin{frame}[t]
\frametitle{Matrix delimiters won't hide}
\begin{tikzpicture}[ampersand replacement=\&]
\matrix [matrix of nodes,left delimiter=(,right delimiter=)] (m1)
{
a \\
b \\
};
\matrix [right=1cm of m1,visible on=<2->,matrix of nodes,
left delimiter=(,right delimiter=)] (m2)
{
x \\
y \\
};
\matrix [right=1cm of m2,visible on=<3->,matrix of nodes] (m3)
{
u \\
v \\
};
\begin{scope}[visible on=<4->]
\matrix [right=1cm of m3,matrix of nodes,left delimiter=(,right delimiter=)] (m4)
{
p \\
q \\
};
\end{scope}
\path[visible on=<5->]
node[matrix,right=1cm of m4,matrix of nodes,left delimiter=(,right delimiter=)]
(m5)
{
r \\
s \\
};
\node[visible on=<6->,matrix,right=1cm of m5,matrix of nodes,left delimiter=(,right delimiter=)]
(m6)
{
c \\
d \\
};
\end{tikzpicture}
\end{frame}
\end{document}
该向量x y
说明了问题:即使矩阵应该仅从覆盖层 2 开始可见(即当x
和y
出现时),括号也不会隐藏。u v
显示没有分隔符的矩阵是可以的。p q
和r s
指出两种可能的解决方法:使用scope
或仅使用\path[visible on=<...>] node[matrix ,...
。最后,c d
显示
\node[visible on=<...>,matrix,...
具有与 相同的问题\matrix[visible on=<...>,...
。
对问题根源的评论:问题在于分隔符实际上并不是矩阵(节点)的一部分,如下面的 MWE 所示。
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{matrix,fit}
\usetikzlibrary{positioning} %<- not important here
\begin{document}
\begin{frame}[t]
\frametitle{Comment on the origin of the problem}
\begin{tikzpicture}[ampersand replacement=\&]
\matrix [matrix of nodes,left delimiter=(,right delimiter=)] (m1)
{
a \\
b \\
};
\matrix [right=1cm of m1,matrix of nodes,
left delimiter=(,right delimiter=)] (m2)
{
c \\
d \\
};
\path[local bounding box=m3] node[matrix,right=1cm of m2,matrix of nodes,
left delimiter=(,right delimiter=)]
{
u \\
v \\
};
\path[local bounding box=m4] node[matrix,right=1cm of m3,matrix of nodes,
left delimiter=(,right delimiter=)]
{
x \\
y \\
};
\node[fit=(m1)(m2),draw]{};
\node[fit=(m3)(m4),draw]{};
\end{tikzpicture}
\end{frame}
\end{document}
问题:有没有更好的解决方法,甚至是使用简单的解决方案\tikzset{...}
?
答案1
其他一些可能的解决方法(并不是说它们更好):
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{matrix,overlay-beamer-styles}
\usetikzlibrary{positioning} %<- not important here
\begin{document}
\begin{frame}[t]
\frametitle{Matrix delimiters won't hide}
\begin{tikzpicture}[ampersand replacement=\&]
\matrix [matrix of nodes,left delimiter=(,right delimiter=)] (m1)
{
a \\
b \\
};
\tikzset{every delimiter/.append style={visible on=<2->}}
\matrix [right=1cm of m1,visible on=<2->,matrix of nodes,
left delimiter=(,right delimiter=)] (m2)
{
x \\
y \\
};
\visible<3->{
\matrix [right=1cm of m2,matrix of nodes,
left delimiter=(,right delimiter=)] (m2)
{
x \\
y \\
};
}
\end{tikzpicture}
\end{frame}
\end{document}