我有一张大型 (13x13) 表格,需要在其中突出显示单元格子集。我知道我可以使用colortbl
或为这些单元格设置背景颜色xcolor
。但我需要在不使用颜色的情况下突出显示表格(这是一篇科学论文,表格应该传达其目的,而无需假设读者可以使用彩色打印机)。有办法吗?例如在单元格周围画一个圆圈?
答案1
总体而言,我同意 lockstep 的观点,即圈出可能不是突出显示文本的最佳方式。除了他的建议之外,您还可以尝试使用浅灰色背景。
话虽如此,这里有一种使用 TikZ 圈出文本的方法:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit,shapes.geometric}
\newcounter{nodemarkers}
\newcommand\circletext[1]{%
\tikz[overlay,remember picture]
\node (marker-\arabic{nodemarkers}-a) at (0,1.5ex) {};%
#1%
\tikz[overlay,remember picture]
\node (marker-\arabic{nodemarkers}-b) at (0,0){};%
\tikz[overlay,remember picture,inner sep=2pt]
\node[draw,ellipse,fit=(marker-\arabic{nodemarkers}-a.center) (marker-\arabic{nodemarkers}-b.center)] {};%
\stepcounter{nodemarkers}%
}
\begin{document}
\begin{tabular}{*6{c}}\hline
Col 1 & Col 2 & Col 3 & Col 4 & Col 5 & Col 6 \\\hline
bla & bla & \circletext{bla} & bla & bla & bla \\
bla & bla & bla & bla & bla & bla \\
ble & ble & ble & bla & \circletext{bla} & bla \\
bla & bla & bla & bla & bla & bla \\ \hline
\end{tabular}
\end{document}
该\circletext
命令在文本的左侧和右侧定义一个节点,然后在它们周围放置一个椭圆。当然,可以制作更奇特的图形,这是一个相当基本的示例(因为我不知道您的表格是什么样子)。需要运行两次 LaTeX 才能让所有内容显示在正确的位置。
编辑:下面是如何标记任意块的示例。椭圆形与大块不相配,因此改用圆角矩形:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{fit,shapes.misc}
\newcommand\marktopleft[1]{%
\tikz[overlay,remember picture]
\node (marker-#1-a) at (0,1.5ex) {};%
}
\newcommand\markbottomright[1]{%
\tikz[overlay,remember picture]
\node (marker-#1-b) at (0,0) {};%
\tikz[overlay,remember picture,thick,dashed,inner sep=3pt]
\node[draw,rounded rectangle,fit=(marker-#1-a.center) (marker-#1-b.center)] {};%
}
\begin{document}
\begin{tabular}{*6{c}}\hline
Col 1 & Col 2 & Col 3 & Col 4 & Col 5 & Col 6 \\\hline
bla & bla & \marktopleft{c1}bla & bla & bla & bla \\
bla & bla & bla & bla & bla & bla \\
ble & ble & ble & bla & bla\markbottomright{c1} & bla \\
bla & bla & bla & bla & bla & bla \\
bla & \marktopleft{c2}bla & bla & bla & bla\markbottomright{c2} & bla \\ \hline
\end{tabular}
\end{document}
答案2
我无法提供“技术”答案,只能提供印刷方面的建议:在一个大表格中,围绕单元格子集的圆圈可能看起来像与表格无关的叠加图形 - 换句话说,它可能非常令人困惑。相反,我会尝试以下方法之一:
在特定的单元格周围画一个矩形(可能仍然看起来不太好看);
使用栅格作为背景;
将单元格内容设置为粗体或斜体。
答案3
我认为用 TiKZ 矩阵替换矩阵可以让你适应细胞组周围的路径。
答案4
除了在表格单元格周围添加框架外,您可能还需要添加颜色和/或音符编号至少,这是我的情况。
我从@Caramdir 的答案中的代码开始,并对其进行了扩展。以下是我的命令:
\mtl{<note number>}
-- 标记左上角\mbr[<optional fill color>]{<note number>}
-- 标记右下角
如果单元格中有较长的文本(见注释 2),框架可能会越过它。为了避免这种情况,请使用间距宏如注释4()所述\quad\mbr...
。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,fit,shapes.misc}
% Mark top left
\newcommand\mtl[2][none]{%
\tikz[overlay,remember picture]
\node (marker-#2-a) at (0,0.9ex) {};%
}
% Mark bottom right
\newcommand\mbr[2][none]{%
\tikz[overlay,remember picture]
\node (marker-#2-b) at (0.2ex,0.3ex) {};%
\tikz[overlay,remember picture,thick,inner sep=5pt]
\node[draw,
blend mode=darken,
rectangle,
rounded corners,
fill=#1,
fit=(marker-#2-a.center) (marker-#2-b.center)] {};%
\tikz[overlay,remember picture]
\path
let
\p{mtl} = (marker-#2-a), \p{mbr} = (marker-#2-b)
in
% Tweak xshift and yshift values to change note number position
[x=\x{mbr}, y=\y{mtl}, xshift=1em, yshift=0.5em]
node[rounded corners,inner sep=2pt,fill=white,opacity=0.8,text opacity=1] at (1, 1) {\footnotesize{\textbf{#2}}};%
}
\begin{document}
\begin{tabular}{*5{c}}\hline
Col 1 & Col 2 & Col 3 & Col 4 & Col 5 \\\hline
bla & bla & bla & bla & \mtl{2}blabla \\
\mtl{1}bla & bla & bla & bla & bla\mbr{2} \\
ble & ble\mbr{1} & bla & bla & bla \\
bla & bla & bla & bla & \mtl{4}blabla \\
\mtl{3}bla & bla & bla\mbr[cyan]{3} & bla & bla\quad\mbr{4} \\ \hline
\end{tabular}
\end{document}