각 표 상자의 네 모서리에 tikz 오버레이 노드를 배치하는 방법은 무엇입니까?

각 표 상자의 네 모서리에 tikz 오버레이 노드를 배치하는 방법은 무엇입니까?

표의 교차 규칙에 오버레이 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 노드는 (설계상) 규칙의 중간에 있습니다.

위 코드의 출력

관련 정보