
Ich möchte einer Tabularx-Tabelle eine Box hinzufügen, die mehrere Zellen vertikal umrahmt. Es gibt diesen Beitrag, der zeigt, wie man Zellen horizontal umrahmt (Einrahmen von Zellen in einer Tabelle), aber ich weiß nicht, wie ich die Box über mehrere Zeilen ausdehnen kann. So ungefähr würde ich gerne aussehen (aber mit einer schönen Box):
Column 1 & Column 2 & Column 3
+-----+
bla & bla & |bla |
| |
bla & bla & |bla |
+-----+
Irgendeine Idee, wie ich das machen könnte?
Edit: Die unten vorgeschlagenen Lösungen sind sehr gut. Aber sie scheinen nur mit der tabellarischen Umgebung kompatibel zu sein und nicht mit tabularx und booktabs. Unten ist der Code, den ich verwendet habe. Hat jemand eine Idee, wie man diese Lösungen auf den tabularx-Stil erweitern kann? Wenn nicht, werde ich einfach alle meine Tabellen im einfachen tabellarischen Stil neu schreiben.
\documentclass{article}
\usepackage{tabularx, booktabs}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\newcommand{\DrawBox}[1][]{%
\tikz[overlay,remember picture]{
\draw[black,#1]
($(left)+(-0.5em,2.0ex)$) rectangle
($(right)+(0.75em,-0.75ex)$);}
}
\begin{document}
\begin{table}[H]
\centering
\begin{tabularx}{0.3\textwidth}{Y*{4}{c}}
\toprule
& Masc & Fem & Neut\\
\midrule \cline{4-4}
Nom & hic & haec & \multicolumn{1}{|c|}{hoc} \\
Acc & hunc & hanc & \multicolumn{1}{|c|}{hoc} \\ \cline{4-4}
\bottomrule
\end{tabularx}
\end{table}
\begin{table}[H]
\centering
\begin{tabularx}{0.3\textwidth}{Y*{4}{c}}
\toprule
& Masc & Fem & Neut\\
\midrule
Nom & hic & haec & \tikzmark{left}hoc \\
Acc & hunc & hanc & hoc\tikzmark{right} \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
Antwort1
\documentclass{article}
\begin{document}
\begin{tabular}{*6{c}}\hline
Col 1 & Col 2 & Col 3 & Col 4 & Col 5 & Col 6 \\\cline{1-1}
\multicolumn{1}{|c|}{bla} & bla & bla & bla & bla & bla \\
\multicolumn{1}{|c|}{bla} & bla & bla & bla & bla & bla \\
\multicolumn{1}{|c|}{ble} & ble & ble & bla & bla & bla \\ \cline{1-1}
bla & bla & bla & bla & bla & bla \\ \hline
\end{tabular}
\end{document}
Mit tabularx
und booktabs
:
\documentclass{article}
\usepackage{tabularx, booktabs}
\begin{document}
\begin{table}[H]
\centering
\begin{tabularx}{0.4\textwidth}{X*{4}{c}} %% 0.3\textwidth too narrow
%% and Y column type not known
\toprule
& Masc & Fem & Neut\\
\midrule \cline{4-4}
Nom & hic & haec & \multicolumn{1}{|c|}{hoc} \\
Acc & hunc & hanc & \multicolumn{1}{|c|}{hoc} \\ \cline{4-4}
\bottomrule
\end{tabularx}
\end{table}
\end{document}
Antwort2
Es gibt immer eine tikz
Lösung. Hier ist eine, die im Grunde den gleichen Code verwendet wie
Elemente in der Matrix hervorhebenaber mit einem flexibleren \DrawBox
Makro. Und da dies der Fall ist, tikz
erhalten Sie die zusätzliche Flexibilität, die damit einhergeht:
Verwendung:
\tikzmark{<name>}
Mit „markieren“ Sie einen bestimmten Ort<name>
.- Diese benannten Orte werden an den übergeben,
\DrawMacro
der diese verwendet, um die Grenze der Zeichnung zu bilden. Sie benötigen einen\DrawBox
Aufruf fürjedeFeld, das Sie zeichnen möchten.
Notiz:
Hierzu sind zwei Durchgänge erforderlich. Zunächst zum Bestimmen der Standorte und dann zum Anfertigen der Zeichnung.
Das
\tikzmark
ist vonHinzufügen einer großen Klammer neben einem Textkörper.
Code:
\documentclass{article}
\usepackage{tikz}
\usepackage{booktabs}
\usetikzlibrary{calc}
\newcommand{\tikzmark}[1]{\tikz[overlay,remember picture] \node (#1) {};}
\newcommand{\DrawBox}[3][]{%
\tikz[overlay,remember picture]{
\draw[black,#1]
($(#2)+(-0.5em,2.0ex)$) rectangle
($(#3)+(0.75em,-0.75ex)$);}
}
\begin{document}
\begin{tabular}{*{7}{c}}\toprule
Col 1 & Col 2 & Col 3 & Col 4 & Col 5 & Col 6 & Col 7 \\
\cmidrule(lr){2-6}
0 & 1 & \tikzmark{top left 1}abcd & 0 & 0 & 0 & 1 \\
1 & \tikzmark{top left 3}0 & www & 0 & 0 & 0 & 1 \\
0 & 1 & xyz\tikzmark{bottom right 1} & \tikzmark{top left 2}1 & 0 & 0 & 0 \\
0 & 0 & 1 & 0 & 0 & 0\tikzmark{bottom right 3} & 0 \\
0 & 0 & 0 & 0 & 0 & 1 & 0\tikzmark{bottom right 2} \\
0 & 0 & 1 & 0 & 0 & 0 & 0 \\
\bottomrule
\end{tabular}
\DrawBox[ultra thick, red]{top left 1}{bottom right 1}
\DrawBox[ultra thick, blue]{top left 2}{bottom right 2}
\DrawBox[ultra thick, draw=green, dotted, fill=yellow!15, fill opacity=0.3]{top left 3}{bottom right 3}
\end{document}
Antwort3
In der Umgebung {NiceTabular}
von nicematrix
gibt es einen Befehl \Block
, mit dem Sie Zellen zusammenführen können, mit dem Sie aber auch einen Rahmen um ein Rechteck aus Zellen zeichnen können.
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\begin{NiceTabular}{ccc}
Column 1 & Column 2 & Column 3 \\
bla & bla & \Block[draw=red,rounded-corners]{2-1}{} bla \\
bla & bla & bla
\end{NiceTabular}
\end{document}
Sie benötigen mehrere Kompilierungen (da nicematrix
im Hintergrund PGF/Tikz-Knoten verwendet werden).
Wenn Sie einen an den Inhalt der Zellen angepassten Rahmen bevorzugen, können Sie dies mit Tikz erreichen, indem Sie die von unter den Zellen, Zeilen und Spalten \CodeAfter
erstellten PGF/Tikz-Knoten verwenden .nicematrix
\documentclass{article}
\usepackage{nicematrix,tikz}
\usetikzlibrary{fit}
\begin{document}
\begin{NiceTabular}{ccc}
Column 1 & Column 2 & Column 3 \\
bla & bla & bla \\
bla & bla & bla
\CodeAfter
\tikz \node [draw=red,rounded corners,fit=(2-3)(3-3)] {} ;
\end{NiceTabular}
\end{document}