我想要一列文本中的背景箭头来显示传播效果。
我尝试使用 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}