![透過表格單元格中的連接巨集連接的節點鏈](https://rvso.com/image/461921/%E9%80%8F%E9%81%8E%E8%A1%A8%E6%A0%BC%E5%96%AE%E5%85%83%E6%A0%BC%E4%B8%AD%E7%9A%84%E9%80%A3%E6%8E%A5%E5%B7%A8%E9%9B%86%E9%80%A3%E6%8E%A5%E7%9A%84%E7%AF%80%E9%BB%9E%E9%8F%88.png)
微量元素:
\documentclass{article}
\usepackage{tabularray}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
chains,
positioning}
\begin{document}
\tikzset{
node distance = 0mm and 5mm,
start chain = going right,
N/.style = {fill=#1!20, name=N,
inner ysep=4mm, inner xsep=0mm, minimum width=22mm,
on chain, join=by -Straight Barb}
}
\begin{tblr}{colspec = {Q[l,m] X[l,m]}}
DE & \tikz[baseline=(N.base)]{\node[N=red] {D}; \node[N=blue] {E};}
\end{tblr}
\end{document}
如您所見,結果是錯誤的。第一個箭頭是什麼生成的?我的 MWE 是否有錯誤或我錯過了什麼?有人知道解決方法嗎?
編輯:
表中也得到相同的結果tabularx
:
\documentclass{article}
\usepackage{tabularx}
\UseTblrLibrary{count}
\usepackage{tikz}
\usetikzlibrary{arrows.meta,
chains,
positioning}
\begin{document}
\tikzset{
node distance = 0mm and 5mm,
start chain = going right,
N/.style = {fill=#1!20, name=N,
inner ysep=4mm, inner xsep=0mm, minimum width=22mm,
on chain,join=by -Straight Barb}
}
\begin{tabularx}{\linewidth}{l X}
DE & \tikz[baseline=(N.base), on chain,join=by -Straight Barb]{\node[N=red] {D}; \node[N=blue] {E};}
\end{tabularx}
\end{document}
答案1
tblr
在實際將其內容放在頁面上之前,顯然至少將其內容排版三次(用於測量)。- 該鏈在 TikZ 圖片之外開始,因此所有這些 4×2 節點都被視為同一個鏈的一部分。
- PGF/TikZ 並不真正檢查引用的節點是否是同一張圖片的一部分。
您最終在頁面上看到的“D”節點也不是放置在(0, 0)
其中,而是放置在上一張圖片的right
最後一個節點。N
看一下下面的例子。tblr
基本上是做同樣的事情,四次相同的圖:
\tikzset{
node distance = 0mm and 5mm,
start chain = going right,
N/.style = {fill=#1!20, name=N,
inner ysep=4mm, inner xsep=0mm, minimum width=22mm,
on chain, join=by -Straight Barb}
}
\tikzset{every picture/.append style={
execute at end picture={
\node[circle, draw, label=$O$] at (0,0) {};
\draw[help lines] (-1.25,0|-N.south west) grid (N.north east);}}}
\tikz[baseline=(N.base)]{
\node[N=red]{D \pgfpictureid\ \tikzchaincount};
\node[N=blue]{E \pgfpictureid\ \tikzchaincount};}
\tikz[baseline=(N.base)]{
\node[N=red]{D \pgfpictureid\ \tikzchaincount};
\node[N=blue]{E \pgfpictureid\ \tikzchaincount};}
\tikz[baseline=(N.base)]{
\node[N=red]{D \pgfpictureid\ \tikzchaincount};
\node[N=blue]{E \pgfpictureid\ \tikzchaincount};}
\tikz[baseline=(N.base)]{
\node[N=red]{D \pgfpictureid\ \tikzchaincount};
\node[N=blue]{E \pgfpictureid\ \tikzchaincount};}
\tikz % this picture doesn't have a node N but it still finds it.
\draw foreach \ang in {0, 15, ..., 359} { (N.\ang) -- ++(\ang:5pt)};
我已在所有圖表中添加了原點和網格,以便您可以更清楚地看到實際發生的情況。
該手冊規定start chain
:
該密鑰應該(但不必)作為包含鏈的所有節點的範圍的選項給出。通常,這將是一個
scope
或整個tikzpicture
,但它可能只是找到鏈的所有節點的路徑。如果不連鎖名稱chain
給出後,將使用預設值。
這並不是很清楚,但暗示它可能只應該在每張圖片的基礎上使用。不過,它肯定不會預見一張圖片會被排版四次。
不管怎樣,我建議把圖片放在start chain
上面\tikz
,或至少放在tblr
牢房裡。無論如何,圖片之間的鏈其實沒有意義。
我添加了一個reset chain
密鑰來重置給定鏈(如果沒有給出值,則重置活動鏈),我們可以添加它,every picture
但我不會使用它。 (它還缺少檢查給定的鍊是否存在。)
程式碼
\documentclass{article}
\usepackage{tabularray}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, chains, positioning}
\makeatletter
\tikzset{
reset chain/.code=%
\expandafter\gdef\csname tikz@lib@chain@count@#1\endcsname{0},
reset chain/.default=\tikz@lib@current@chain}
\makeatother
\begin{document}
\tikzset{
node distance = 0mm and 5mm,
% start chain = going right,
N/.style = {fill=#1!20, name=N,
inner ysep=4mm, inner xsep=0mm, minimum width=22mm,
on chain, join=by -Straight Barb}
}
\begin{tblr}{colspec = {Q[l,m] X[l,m]}}
DE & \tikz[start chain=going right, baseline=(N.base)]{
\node[N=red] {D}; \node[N=blue] {E};}
\end{tblr}
\hrule
\begin{tblr}{colspec = {Q[l,m] X[l,m]}}
DE & \tikzset{start chain=going right}
\tikz[baseline=(N.base)]{\node[N=red] {D}; \node[N=blue] {E};}
\end{tblr}
\hrule
\tikzset{start chain=going right, every picture/.append style=reset chain}
\begin{tblr}{colspec = {Q[l,m] X[l,m]}}
DE & \tikz[baseline=(N.base)]{\node[N=red] {D}; \node[N=blue] {E};}
\end{tblr}
\end{document}
輸出
您也可以使用該graphs
庫,您也可以預先設定放置和連接策略。 (不過,我會將其指定為\tikz
or的一部分,\graph
而不是全局的。)
由於節點D
和E
不通過--
或相似的方式連接,因此它們被視為兄弟節點,因此branch right sep
使用 not grow right sep
。
\documentclass{article}
\usepackage{tabularray}
\usepackage{tikz}
\usetikzlibrary{arrows.meta, graphs}
\begin{document}
\tikzset{
N/.style={
fill=#1!20, inner ysep=4mm, inner xsep=0mm, minimum width=22mm, alias=N}}
\tikzgraphsset{branch right sep=5mm,
every graph/.append style={path, ->, /tikz/>=Straight Barb}}
\begin{tblr}{colspec = {Q[l,m] X[l,m]}}
DE & \tikz[baseline=(N.base)]\graph{D[N=red], E[N=blue]};
\end{tblr}
\end{document}