
tabularx テーブルに複数のセルを垂直に囲むボックスを追加したいのですが、セルを水平に囲む方法を示した投稿があります (表のセルを囲む) ですが、ボックスを複数の行にまたがって拡張するにはどうすればよいかわかりません。大体次のようなものを実現したいと考えています (ただし、ボックスはきれいに表示します)。
Column 1 & Column 2 & Column 3
+-----+
bla & bla & |bla |
| |
bla & bla & |bla |
+-----+
どうすればそれができるのか、何かアイデアはありますか?
編集: 以下に提案されているソリューションは非常に優れています。ただし、これらは tabular 環境のみと互換性があり、tabularx および booktabs とは互換性がないようです。以下は私が使用したコードです。これらのソリューションを tabularx スタイルに拡張する方法を知っている人はいますか? いない場合、単純な tabular スタイルを使用してすべてのテーブルを書き直すだけです。
\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}
答え1
\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}
およびtabularx
と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}
答え2
解決策は常に存在しますtikz
。ここでは基本的に同じコードを使用する方法を紹介します。
マトリックス内の要素を強調表示するただし、より柔軟な\DrawBox
マクロを使用します。これにより、tikz
次のような追加の柔軟性が得られます。
使用法:
\tikzmark{<name>}
特定の場所を で「マーク」するには を使用します<name>
。- これらの名前付き位置は、
\DrawMacro
図面の境界として使用するに渡されます。\DrawBox
それぞれ描きたいボックス。
注記:
これには 2 回の実行が必要です。1 回目は場所を決定するため、2 回目は描画を行うためです。
は
\tikzmark
本文の横に大きな中括弧を追加する。
コード:
\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}
答え3
{NiceTabular}
の環境ではnicematrix
、セルを結合できるコマンドがあります\Block
が、これを使用してセルの四角形の周囲にフレームを描画することもできます。
\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}
複数のコンパイルが必要です (nicematrix
内部で PGF/Tikz ノードが使用されるため)。
セルの内容に合わせてフレームを調整したい場合は、セル、行、列の下\CodeAfter
に作成された PGF/Tikz ノードを使用して、 Tikz でそれを行うことができます。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}