我有一张表格,里面有一些数字,例如
\documentclass{article}
\begin{document}
\begin{tabular}{llll}
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4
\end{tabular}
\end{document}
我想要为表格设置一个“背景”(我实际上希望能够为表格中的特定块指定它)——背景应该是浅灰色的字母(例如 A),不会隐藏黑色的数字。
这怎么可能呢?
答案1
无需绝对定位即可使用tikzmark
库进行tikz
封装。
\documentclass{article}
\usepackage{tikz, lmodern}
\usetikzlibrary{calc,tikzmark}
\begin{document}
\begin{tikzpicture}[overlay,remember picture]
\node [yshift=.6ex] at ( $(pic cs:A) !.5! (pic cs:B)$ ){ \fontsize{60}{60}\selectfont\textbf{\color{gray!20}A} };
\end{tikzpicture}
\begin{tabular}{llll}
\tikzmark{A}%
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4\tikzmark{B}%
\end{tabular}
\end{document}
请注意,tikzpicture
在表格文本排版和定义其坐标之前,此处绘制了 。此处的目的是让文本位于图片之上。这在大多数情况下都有效,因为坐标是在第一次运行时计算的,并且图片在后续运行时定位正确。
如果由于某种原因,这不起作用,那么您可以添加\usepackage{everypage}
序言并将其放在tikzpicture
表格下方,\AddThispageHook{...}
如下所示:
\AddThispageHook{%
\begin{tikzpicture}[overlay,remember picture]
\node [yshift=.6ex] at ( $(pic cs:A) !.5! (pic cs:B)$ ){ \fontsize{60}{60}\selectfont\textbf{\color{gray!20}A} };
\end{tikzpicture}
}
答案2
\documentclass{article}
\usepackage{color}
\usepackage{lmodern}
\begin{document}
\begin{picture}(0,0)
\put(7,-20){\fontsize{70pt}{70pt}\bfseries\color[gray]{.9}{A}}
\end{picture}%
\begin{tabular}{llll}
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4
\end{tabular}
\end{document}
通过减小字体大小和改变坐标,您当然可以将字母(或字母)放在任何子矩阵块后面。
答案3
这是一个 TikZ 解决方案,它使用matrix of nodes
而不是 来表示表格tabular
,因此会自动从 TikZ 代码中获取字母的位置。它使用matrix
库来实现这一点,并使用backgrounds
库将字母放在背景中绘制的图层上,即矩阵中的数字后面。
\documentclass[border=5pt, multi, tikz]{standalone}
\usepackage[rm={lining},sf={lining},tt={lining,tabular,monowidth}]{cfr-lm}
\usetikzlibrary{backgrounds,matrix}
\begin{document}
\begin{tikzpicture}
[
font=\tstyle,
big alph/.style={text opacity=.2, text=gray, font=\Huge}
]
\matrix (m) [matrix of nodes]
{
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
};
\begin{scope}[on background layer, big alph]
\node at (m-1-1.south east) {A};
\node at (m-1-3.south east) {B};
\node at (m-3-1.south east) {C};
\node at (m-3-3.south east) {D};
\end{scope}
\end{tikzpicture}
\end{document}
如果您的表包含更复杂的数学,请使用matrix of math nodes
节点自动切换到数学模式。
为(m)
矩阵指定其名称,然后通过引用矩阵的名称、行和列(例如m-1-1
等)来定位字母。节点的锚点south east
是矩阵内单个节点边框上的相关位置,即左下角south east
。因此(m-3-3.north west)
将引用名为的矩阵第三列和第三行中节点的右上角m
。
答案4
偷懒方法:tcolorbox
\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{skins}
\newtcbox{\mytable}[1][X]{enhanced, blanker, on line, watermark text=#1}
\begin{document}
My tables
\mytable[A]{
\begin{tabular}{llll}
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4 \\
1 & 2 & 3 & 4
\end{tabular}}
with watermarks
\mytable{\begin{tabular}{lll} 1 & 2 \\3 & 4 \end{tabular}}
\end{document}