
我想在 tabularx 表中新增一個框,該框將垂直框住多個儲存格。有一篇文章展示如何水平建立單元格(表格中的儲存格框架),但我不知道如何讓盒子延伸到幾行。這是我大致想要得到的(但有一個漂亮的盒子):
Column 1 & Column 2 & Column 3
+-----+
bla & bla & |bla |
| |
bla & bla & |bla |
+-----+
知道我該怎麼做嗎?
編輯:下面提出的解決方案非常好。但它們似乎只與表格環境相容,而不與 tabularx 和 booktabs 相容。下面是我使用過的程式碼。有誰知道如何將這些解決方案擴展到 tabularx 風格?如果沒有,那麼我將使用簡單的表格樣式來重寫所有表格。
\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
電話每個您要繪製的框框。
筆記:
這確實需要兩次運行。第一個確定位置,第二個進行繪圖。
這
\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}