Это небольшая матрица с 5x3 узлами. Моя настоящая матрица намного больше, и я предпочел дать номер каждой ячейке (от 1 до 15 — да, я знаю, что от 0 до 14 было бы проще). Я уже пронумеровал ячейки с помощью foreach, чтобы проиллюстрировать нумерацию.
Мне нужно раскрасить несколько горизонтальных разделительных линий, указав номер ячейки слева и номер ячейки справа. Это работает отлично, когда координаты матрицы заданы статическими числами (например, красная линия между 7 и 9). Это не работает, если я пытаюсь динамически генерировать номера ячеек в цикле foreach (например, синяя линия между 1 и 3). По-видимому, смещение (север, юг, восток...) игнорируется. Как вы можете себе представить, я сделал много вариантов, прежде чем обратиться за помощью сюда.
Не могли бы вы подсказать, в чем моя ошибка?
Заранее спасибо.
Это мой МВЭ
\documentclass[a4paper, 11pt]{report}
% --- DOCUMENT
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{caption}
\begin{document}
\begin{figure}[!h]\centering
\usetikzlibrary{matrix,calc}
\begin{tikzpicture}[ampersand replacement=\&]
\tikzset{
table nodes/.style={rectangle, draw, align=center, minimum height=5mm,
text depth=0.5ex,text height=1ex,inner xsep=0pt,outer sep=0pt
},
table/.style={matrix of nodes, row sep=-\pgflinewidth, column sep=-\pgflinewidth,
nodes={table nodes},
execute at empty cell={\node[draw=none]{}; }
}
}
\matrix at (0,0) [table,text width=5mm,name=MX] {%
\ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\};
\foreach \i [evaluate={\r=int((\i-1)/3+1); \c={int(mod(\i-1,3)+1)} }] in {1,...,15} {
\node at ($(MX-\r-\c)$) {\footnotesize\i};
}
\foreach \b/\e [evaluate={\r=int((\b-1)/3+1); \c={int(mod(\b-1,3)+1)}; \d={int(mod(\e-1,3)+1)} }] in {1/3} { %
\draw[red,semithick] ($(MX-\r-\c)$) circle(2pt); <--- THIS WORKS
\draw[blue,semithick] ($(MX-\r-\c)$.south) -- ($(MX-\r-\d)$.south); <--- THIS DOESN'T WORK
%\coordinate (N) at ($(MX-\r-\c)$);
%\draw[blue,semithick] (N.south) circle(2pt); <--- THIS DOESN'T WORK
%\draw[blue,semithick] (N.south) circle(2pt); <--- THIS DOESN'T WORK
}
\draw[red,semithick] (MX-3-1.south west) -- (MX-3-3.south east); % <--- THIS WORKS
% useasboundingbox
\useasboundingbox[blue] ($(MX-1-1.north west)+(135:10pt)$) rectangle ($(MX-5-3.south east)+(315:10pt)$);
\end{tikzpicture}
\caption{Matrix example}
\end{figure}
\end{document}
решение1
« .south west
И» .south east
было снаружи скобок, а не внутри.
\documentclass[a4paper, 11pt]{report}
% --- DOCUMENT
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\usepackage{caption}
\begin{document}
\begin{figure}[!h]\centering
\usetikzlibrary{matrix,calc}
\begin{tikzpicture}[ampersand replacement=\&]
\tikzset{
table nodes/.style={rectangle, draw, align=center, minimum height=5mm,
text depth=0.5ex,text height=1ex,inner xsep=0pt,outer sep=0pt
},
table/.style={matrix of nodes, row sep=-\pgflinewidth, column sep=-
\pgflinewidth,
nodes={table nodes},
execute at empty cell={\node[draw=none]{}; }
}
}
\matrix at (0,0) [table,text width=5mm,name=MX] {%
\ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\\ \&\ \&\ \\};
\foreach \i [evaluate={\r=int((\i-1)/3+1);
\c={int(mod(\i-1,3)+1)} }] in {1,...,15} {
\node at ($(MX-\r-\c)$) {\footnotesize\i};
}
\foreach \b/\e [evaluate={\r=int((\b-1)/3+1);
\c={int(mod(\b-1,3)+1)};
\d={int(mod(\e-1,3)+1)} }] in {1/3} { %
\draw[red,line width=1pt] (MX-\r-\c) circle(2pt); % <--- THIS WORKS
\draw[blue,line width=2pt] (MX-\r-\c.south west) -- (MX-\r-\d.south east);
% <--- THIS ALSO WORKS NOW the .south west was outside the brackets
%instead of inside
%\coordinate (N) at ($(MX-\r-\c)$);
%\draw[blue,semithick] (N.south) circle(2pt); <--- THIS DOESN'T WORK
%\draw[blue,semithick] (N.south) circle(2pt); <--- THIS DOESN'T WORK
}
\draw[red,line width=2pt] (MX-3-1.south west) -- (MX-3-3.south east); % <---
%THIS WORKS
% useasboundingbox
\useasboundingbox[blue, line width=2pt] ($(MX-1-1.north west)+(135:10pt)$)
rectangle ($(MX-5-3.south east)+(315:10pt)$);
\end{tikzpicture}
\caption{Matrix example}
\end{figure}
\end{document}