MWE:
\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}
Como você pode ver, o resultado está errado. O que gera a primeira flecha? Tenho algum erro no MWE ou perdi alguma coisa? Alguém conhece uma solução alternativa?
Editar:
O mesmo resultado tabularx
também é obtido na tabela:
\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}
Responder1
tblr
aparentemente compõe seu conteúdo pelo menos três vezes (para medição) antes de ser realmente colocado na página.- A cadeia começa fora da sua imagem TikZ, então todos esses nós 4×2 são considerados parte de uma mesma cadeia.
- O PGF/TikZ realmente não verifica se um nó referenciado faz parte da mesma imagem.
O nó “D” que você finalmente vê na página (0, 0)
também não está colocado, ele está localizado right
no último N
nó da imagem anterior.
Dê uma olhada no exemplo a seguir. tblr
está basicamente fazendo o mesmo, quatro vezes o mesmo diagrama:
\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)};
Adicionei a origem e uma grade a todos os diagramas para que você possa ver mais claramente o que realmente está acontecendo.
O manual indica para start chain
:
Esta chave deve, mas não precisa, ser fornecida como uma opção para um escopo que abrange todos os nós da cadeia. Normalmente, será um
scope
ou o todotikzpicture
, mas pode ser apenas um caminho no qual todos os nós da cadeia são encontrados. Se nãonome da cadeiafor fornecido, o valor padrãochain
será usado.
o que não é muito claro, mas dá uma dica de que talvez deva ser usado apenas por imagem. Porém, certamente não previu que uma imagem fosse composta quatro vezes.
De qualquer forma, recomendo colocar start chain
na \tikz
foto ou pelo menos na tblr
cela. De qualquer forma, uma cadeia entre imagens não faz sentido.
Adicionei uma reset chain
chave que redefine a cadeia fornecida (ou a cadeia ativa se nenhum valor for fornecido), à qual poderíamos adicionar, every picture
mas eu não a usaria. (Também falta verificar se a cadeia fornecida existe.)
Código
\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}
Saída
Você também pode usar a graphs
biblioteca onde também pode configurar a estratégia de posicionamento e conexão de antemão. (Embora eu especificaria isso como parte de \tikz
ou \graph
em vez de global.)
Como os nós D
e E
não estão conectados --
ou semelhantes, eles são considerados irmãos e, portanto, branch right sep
não são usados 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}