在表格文本下绘制箭头作为背景(tikz 或其他解决方案)

在表格文本下绘制箭头作为背景(tikz 或其他解决方案)

我想要一列文本中的背景箭头来显示传播效果。

我尝试使用 tikzmark 和 tikz,但箭头覆盖了文本,并且 tikz 不透明度与常规文本不太兼容。

\documentclass[a6paper]{article}
\usepackage{array}
\usepackage{graphicx,colortbl,booktabs,environ,hhline}
\usepackage{tikz}
\usetikzlibrary{calc,arrows}
\begin{document}
\pagestyle{empty}
\newcommand{\tikzmark}[1]{%
    \tikz[overlay,remember picture] \node (#1) {};}

\begin{table}
    \centering
    \resizebox{0.5\columnwidth}{!}{%    
    \newcommand{\bluecells}{\cellcolor{blue!08!white}\textcolor{black}}
    \newcommand{\greencells}{\cellcolor{green!10!white}\textcolor{purple!3!black}}
    \renewcommand{\arraystretch}{1.4}
    \setlength{\extrarowheight}{1.2pt}
    \begin{tabular}{m{1.5cm}m{1.5cm}m{1.5cm}m{1.5cm}m{1.5cm}m{1.5cm}}
        \hskip1ex & A & G\tikzmark{a} & X & G & R   \\\hhline{~-----}
%row 1
        A & A &A &A &A &A   \\
%row 2      
        A &A &A &A &A   \\
%row 3
        A &A &A &A &A   \\
%row 4
    A &A & XX\tikzmark{b} & A & A & A   \\
%row 5
        A & A & A & A & A   \\
    \end{tabular}

\tikz[overlay,remember picture] \draw[-triangle 45,draw=green!20!white,line width=5pt,fill opacity=0.2] ($(a.south)+(-.2,-.3)$) -- ($(b.south)+(-.4,-.1)$);
    }

\end{table}
\end{document}

我想避免在 tikz 中重做表格只是为了得到箭头,因为我必须转换它们。如果我能以某种方式说服 tikz 在文本下方绘制,或者甚至更好地让表格在整个内容上重新绘制第二次,那么就可以解决问题。

此外,如果有人有比背景箭头更好的建议来显示传播效果,我很想知道。但是,我必须做行和列,并将事物编织在一起,因为有时效果(箭头)会相互交叉。如果我能让 Tikz 运行良好,那么它不会有问题。

答案1

我能提供的是在背景中绘制箭头的解决方案:eso-pic。(顺便说一句,fill opacity这不是正确的键。)但是,你\resizebox把事情搞砸了,包括 Ti 的定位机制Z.所以我放弃了。

\documentclass[a6paper]{article}
\usepackage{array}
\usepackage{graphicx,colortbl,booktabs,environ,hhline}
\usepackage{tikz}
\usetikzlibrary{arrows,tikzmark}
\usepackage{eso-pic}
\begin{document}
\pagestyle{empty}

\begin{table}
    \centering
    %\resizebox{0.5\columnwidth}{!}{%    
    \newcommand{\bluecells}{\cellcolor{blue!08!white}\textcolor{black}}
    \newcommand{\greencells}{\cellcolor{green!10!white}\textcolor{purple!3!black}}
    \renewcommand{\arraystretch}{1.4}
    \setlength{\extrarowheight}{1.2pt}
    \begin{tabular}{m{1.5cm}m{1.5cm}m{1.5cm}m{1.5cm}m{1.5cm}m{1.5cm}}
        \hskip1ex & A & \tikzmarknode{a}{G} & X & G & R   \\\hhline{~-----}
%row 1
        A & A &A &A &A &A   \\
%row 2      
        A &A &A &A &A   \\
%row 3
        A &A &A &A &A   \\
%row 4
    A &A & \tikzmarknode{b}{XX} & A & A & A   \\
%row 5
        A & A & A & A & A   \\
    \end{tabular}%}

\AddToShipoutPictureBG*{%
\tikz[overlay,remember picture] 
\draw[-triangle 45,draw=green!20!white,line width=5pt] 
(a.south) -- ([yshift=-1em]b.south-|a);
    }

\end{table}
\end{document}

在此处输入图片描述

答案2

如果你使用 tikzmark tikz 库,那么由 tikzmark 定义的坐标是可用的它们在文档中定义。浮动和调整大小框有点麻烦,但通过将箭头命令放在两者内部但放在表格之前,我就能得到我想要的东西。

\documentclass[a6paper]{article}
\usepackage{array}
\usepackage{graphicx,colortbl,booktabs,environ,hhline}
\usepackage{tikz}
\usetikzlibrary{calc,arrows,tikzmark}
\begin{document}
\pagestyle{empty}


\begin{table}
    \centering
   \resizebox{0.5\columnwidth}{!}{%    
\tikz[overlay,remember picture] \draw[-triangle 45,draw=green!20!white,line width=5pt,fill opacity=0.2] ($(pic cs:a)+(-.2,-.3)$) -- ($(pic cs:b)+(-.4,-.1)$);
    \newcommand{\bluecells}{\cellcolor{blue!08!white}\textcolor{black}}
    \newcommand{\greencells}{\cellcolor{green!10!white}\textcolor{purple!3!black}}
    \renewcommand{\arraystretch}{1.4}
    \setlength{\extrarowheight}{1.2pt}
    \begin{tabular}{m{1.5cm}m{1.5cm}m{1.5cm}m{1.5cm}m{1.5cm}m{1.5cm}}
        \hskip1ex & A & G\tikzmark{a} & X & G & R   \\\hhline{~-----}
%row 1
        A & A &A &A &A &A   \\
%row 2      
        A &A &A &A &A   \\
%row 3
        A &A &A &A &A   \\
%row 4
    A &A & XX\tikzmark{b} & A & A & A   \\
%row 5
        A & A & A & A & A   \\
    \end{tabular}

 }

\end{table}
\end{document}

列后面带有箭头的表格

相关内容