我想按提供的列表中的指定顺序强调/突出显示矩阵条目。从概念上讲,我希望可以更改指定覆盖层上提供的矩阵单元格的样式。下面的代码在相应覆盖层上围绕指定条目绘制一个框,但我想更改单元格的样式(颜色为蓝色、粗体或其他)。
是否可以通过这种方式“动态”更改单元格的样式?当然可以在矩阵设置中设置单个单元格的样式。
非常感谢。
\begin{tikzpicture}
% \tikzstyle{unseen} = []
\tikzstyle{seen} = [color=blue!70]
\matrix (m) [matrix of math nodes,
nodes in empty cells,
minimum size=7mm, ampersand replacement=\&, every
node/.style={font={\large\ttfamily\bfseries}}] {
1 \& 0 \& 0 \& 0 \& 0 \& 0 \& 0 \\
0 \& 1 \& 1 \& 1 \& 0 \& 0 \& 0 \\
0 \& 1 \& 1 \& 0 \& 1 \& 1 \& 0 \\
0 \& 0 \& 0 \& 1 \& 1 \& 1 \& 0 \\
0 \& 0 \& 0 \& 0 \& 0 \& 0 \& 1 \\
};
\foreach \o/\r/\c in {1/2/1,2/3/1} {
\draw<\o->[seen] (m-\r-\c.north west) rectangle (m-\r-\c.south east);
}
\end{tikzpicture}
答案1
alt
使用以下键更改节点的外观aobs-tikz
/overlay-beamer-styles
非常简单。
改变节点的内容也是可能的,但需要进行调整matrix of nodes
。
代码
\documentclass{beamer}
\usepackage{tikz}
\usetikzlibrary{matrix, overlay-beamer-styles}
\tikzset{
matrix beamer/.style args={<#1>#2-#3:#4#5}{
row #2 column #3/.append style={
every node/.append style={
alt=<{#1}>{#4}{#5}}}}}
\begin{document}
\begin{frame}
\begin{tikzpicture}[
% unseen/.style={},
seen/.style={blue!70},
matrix seen/.style args={####1/####2}{% ####‽ Ugh.
matrix beamer={<####1->####2:{seen}{}}}
]
\matrix (m) [
matrix of math nodes,
nodes in empty cells,
ampersand replacement=\&,
minimum size=7mm,
matrix seen/.list={1/2-1, 2/3-1}, % <overlay>/<row>-<column>
every node/.style={font={\large\ttfamily\bfseries}}
] {
1 \& 0 \& 0 \& 0 \& 0 \& 0 \& 0 \\
0 \& 1 \& 1 \& 1 \& 0 \& 0 \& 0 \\
0 \& 1 \& 1 \& 0 \& 1 \& 1 \& 0 \\
0 \& 0 \& 0 \& 1 \& 1 \& 1 \& 0 \\
0 \& 0 \& 0 \& 0 \& 0 \& 0 \& 1 \\
};
\end{tikzpicture}
\end{frame}
\end{document}
答案2
这个问题最好在 TikZ 矩阵之外解决。在如图所示的环境\alt
中使用 beamerarray
更新 beamer 中的矩阵条目是我现在正在考虑的一个更简单、更合适的解决方案。