Wie platziere ich einen Tikz-Overlay-Knoten an den vier Ecken jedes Tabellenfelds?

Wie platziere ich einen Tikz-Overlay-Knoten an den vier Ecken jedes Tabellenfelds?

Ist es möglich, einen Overlay-Tikz-Knoten auf die Kreuzungsregeln einer Tabelle zu setzen? Ich habe es versucht, aber der Teil mit dem Merken von Bildern funktioniert nicht.

\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}

Antwort1

Wir kennen die Mindesthöhe und -tiefe einer Zeile, aber das gibt uns nicht die Höhe und Tiefe einer bestimmten Zeile an, da diese große Einträge enthalten kann. Wenn wir eine Zeile erstellen, die nur Tikzmarks enthält, können wir sie mit einem negativen vskip mit der nächsten Zeile überlagern.

Beachten Sie, dass @{} mehrere Koordinaten mit demselben Namen generiert. Nur die letzte zählt.

Eine Tikz-Matrix wäre einfacher gewesen.

\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}

Demo

Antwort2

Das Paket nicematrixübernimmt diese Aufgabe (erstellt tatsächlich nicematrixdiese Knoten und verwendet sie, um weitere Funktionen bereitzustellen).

\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} 

Die PGF/Tikz-Knoten befinden sich (sollte so sein) in der Mitte der Regeln.

Ausgabe des obigen Codes

verwandte Informationen