将 tikz 箭头与表格单元格对齐 - tikzmark 覆盖

将 tikz 箭头与表格单元格对齐 - tikzmark 覆盖

可视化示例

我想知道如何移动箭头,使它们不与文本相交。最好能够将下箭头与第二行数字的顶部对齐,而不是与底部对齐。有什么想法可以做到这一点吗?

我正在使用以下代码来生成它

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\begin{document}

\caption{}
\begin{tabular}{|lrrrrrrrrrrrrrrrrrrrl}
\hline
\multicolumn{21}{|l|}{something}\\
\hline
-1 &
11 &
21 &
31 &
41 &
51 &
61 &
71 &
81 &
91 &
101 &
\tikzmark{a}111 &
121 &
131 &
141 &
151 &
161 &
171 &
181 &
191 &
\ldots\\
&\\
\multicolumn{21}{|l}{something\tikzmark{c}}\\
&\\
-1 &
11 &
21 &
31 &
41 &
51 &
61 &
71 &
81 &
91 &
101 &
\tikzmark{b}111 &
121 &
131 &
141 &
151 &
161 &
171 &
181 &
191 &
\ldots\\
\hline
\multicolumn{21}{|r|}{something}\\
\hline
\end{tabular}
\begin{tikzpicture}[overlay,
                remember picture,
                shorten >=2pt]
%
\draw [thick,->]({pic cs:c}) -- ({pic cs:a});
\draw [thick,->] ({pic cs:c}) -- ({pic cs:b});
\end{tikzpicture}

\end{document}

更新: 我面临另一个问题。我在文档中写了几个这样的表格,每个表格都有不同的数字和箭头集。这些箭头必须指向不同表格中的不同数字,例如,在表 1 中,箭头指向 (111,111),而在表 2 中,它们指向 (141,151)。

因此,在表 2 中,我将表 1 中的tikzmark{a}和更改tikzmark{b}为表 2 中包含和111, 111的单元格。141151

问题就在这里。当我重新编译文档时,表 1 和表 2 中的两组箭头都指向141151

看来remember picture表 2 中包含的选项覆盖了表 1 中包含的标记。

我会用tikzmark{d}tikzmark{e}tikzmark{f}来表示表格 2,然后按字母顺序表示表格 3、4 等。但很快字母就会用完,因为正如我之前所说,我在这一章中有几个表格。而且处理起来也会变得混乱。

有没有办法tikzmark在每个表之后“刷新” ,以便我可以在每个表中使用tikzmark{a}tikzmark{b}tikzmark{c}不必担心覆盖?

附言:为了完整起见,我可以说tabular上面显示的环境在主文档中被调用-

\begin{table}[!h]
  \setlength{\tabcolsep}{3pt}
  \centering
    \input{./path-to-tabular}
  \label{3:tab:gnomon 1-1}
\end{table}

序言中提到

\newcommand*\ExpandableInput[1]{\@@input#1 }% to input tables

答案1

使用xshiftyshift例如:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}

\begin{document}

\begin{tabular}{|lrrrrrrrrrrrrrrrrrrrl}
\hline
\multicolumn{21}{|l|}{something}\\
\hline
-1 &
11 &
21 &
31 &
41 &
51 &
61 &
71 &
81 &
91 &
101 &
\tikzmark{a}111 &
121 &
131 &
141 &
151 &
161 &
171 &
181 &
191 &
\ldots\\
&\\
\multicolumn{21}{|l}{something\tikzmark{c}}\\
&\\
-1 &
11 &
21 &
31 &
41 &
51 &
61 &
71 &
81 &
91 &
101 &
\tikzmark{b}111 &
121 &
131 &
141 &
151 &
161 &
171 &
181 &
191 &
\ldots\\
\hline
\multicolumn{21}{|r|}{something}\\
\hline
\end{tabular}
\begin{tikzpicture}[overlay,
                remember picture,
                shorten >=2pt]
%
\draw [thick,->] ([yshift=.66ex,xshift=.25ex]{pic cs:c}) -- ([yshift=-.25ex]{pic cs:a});
\draw [thick,->] ([yshift=.66ex,xshift=.25ex]{pic cs:c}) -- ([yshift=1.75ex]{pic cs:b});
\end{tikzpicture}

\end{document}

相关内容