Как разместить узел наложения tikz на 4 углах каждого табличного поля?

Как разместить узел наложения tikz на 4 углах каждого табличного поля?

Можно ли наложить узел tikz на правила пересечения табличного. Я пробовал, но часть с запоминанием картинки не работает.

\documentclass[a4paper]{article}

\usepackage{array,tabularx,tikz,ragged2e,siunitx,xparse,hhline}
\usetikzlibrary{calc}

\newcommand{\tikzmark}[1]{%
\tikz[overlay,remember picture,baseline=(#1)]\coordinate (#1) ;
}

\begin{document}

\begin{tabular}{cc}\hhline{\tikzmark{A}--}
A&B \\\hhline{-\tikzmark{B}-}
\end{tabular}

\begin{tikzpicture}[overlay,remember picture]
\fill (A) rectangle (B) ;

\end{tikzpicture}

\end{document}

решение1

Мы знаем минимальную высоту и глубину одной строки, но это не дает нам высоту и глубину конкретной строки, поскольку она может содержать большие записи. Если мы создаем строку, содержащую только tikzmarks, то мы можем использовать отрицательный vskip, чтобы наложить ее на следующую строку.

Обратите внимание, что @{} генерирует несколько координат с одинаковым именем. Учитывается только последняя.

Матрица tikz была бы проще.

\documentclass[a4paper]{article}

\usepackage{array,tabularx,tikz,ragged2e,siunitx,xparse,hhline}% only tikz is needed here
\usetikzlibrary{calc}

\newcommand{\tikzmark}[2][0pt]% #1 = y offset (optional), #2 = coordinate name
{\tikz[overlay,remember picture]\coordinate (#2) at (0pt,#1);}

\newcommand{\tikzrowmark}[2]% #1 = number of columns, #2 = coordinate name
{\multicolumn{#1}{c}{\tikzmark[\arraystretch\ht\strutbox]{#2}}%
\\[\dimexpr -\arraystretch\ht\strutbox-\arraystretch\dp\strutbox]}%

\begin{document}

\begin{tabular}{|@{\tikzmark{A west}\hspace{\tabcolsep}}c@{\hspace{\tabcolsep}\tikzmark{A east}}|c|}
\hline
\tikzrowmark{2}{A north}
A&B \\
\tikzrowmark{2}{A south}
\hline
\end{tabular}

\begin{tikzpicture}[overlay,remember picture]
\fill[yellow] (A west |- A north) rectangle (A east |- A south) ;

\end{tikzpicture}

\end{document}

демо

решение2

Пакет nicematrixвыполняет эту работу (фактически, nicematrixсоздает эти узлы и использует их для предоставления дополнительных функций).

\documentclass{article}
\usepackage{xcolor}
\usepackage{nicematrix,tikz}

\begin{document}

\setlength{\arrayrulewidth}{1pt}
\begin{NiceTabular}{cc}[hvlines,name=MyTable]
A & B 
\end{NiceTabular}

\begin{tikzpicture}[overlay,remember picture,name prefix = MyTable-]
\fill [yellow] (1-|1) rectangle (2-|2) ;
\end{tikzpicture}

\end{document} 

Узлы PGF/Tikz находятся в середине правил (по замыслу).

Вывод кода выше

Связанный контент