Zellen in einer Tabelle vertikal einrahmen

Zellen in einer Tabelle vertikal einrahmen

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}

Bildbeschreibung hier eingeben

Mit tabularxund 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}

Bildbeschreibung hier eingeben

Antwort2

Es gibt immer eine tikzLösung. Hier ist eine, die im Grunde den gleichen Code verwendet wie Elemente in der Matrix hervorhebenaber mit einem flexibleren \DrawBoxMakro. Und da dies der Fall ist, tikzerhalten Sie die zusätzliche Flexibilität, die damit einhergeht:

Bildbeschreibung hier eingeben

Verwendung:

  1. \tikzmark{<name>}Mit „markieren“ Sie einen bestimmten Ort <name>.
  2. Diese benannten Orte werden an den übergeben, \DrawMacroder diese verwendet, um die Grenze der Zeichnung zu bilden. Sie benötigen einen \DrawBoxAufruf fürjedeFeld, das Sie zeichnen möchten.

Notiz:

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 nicematrixgibt 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 nicematrixim Hintergrund PGF/Tikz-Knoten verwendet werden).

Ausgabe des ersten Codes

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

Ausgabe des obigen Codes

verwandte Informationen