
Estou tentando criar um comando que será usado em um arquivo barycentric cs:
.
Vou usar barycentric cs
muito tempo para colocar um nó no meio dos outros, então estou tentando tornar isso menos doloroso para mim. Também será usado em outro comando que usa uma lista como parâmetro.
Digamos que eu tenha este código:
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{positioning}
\begin{document}
\tikzset{
basic/.style={
draw,
rounded corners=2pt,
thick,
text width=8em,
align=flush center,
node distance=2em
}
}
\begin{tikzpicture}
\matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
\node(a){text}; & \node(c){text}; \\
\node(b){text}; & \node(d){text}; \\
% Loads of other nodes
};
\end{tikzpicture}
\end{document}
Estou tentando criar um comando para que, ao invés de usar \node (bc#) at (barycentric cs:a=1,b=1,c=1,d=1,<...>) {text};
, eu só tenha que escrever \node (x) at (baricentric cs:\listforbarycentrics{a,b,c,d}) {text};
.
Eu tentei com este código de comando:
\newcommand{\listforbarycentrics}[1]{\foreach \n in {#1}{
\n=1,
};
}
No entanto, isso não funciona. Pode ser porque uma vírgula no final da lista barycentric cs:
(como esta barycentric cs:a=1,b=1,c=1,d=1,
) cria um erro, mas não tenho certeza.
Responder1
Algo assim?
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{positioning}
\begin{document}
\tikzset{
basic/.style={
draw,
rounded corners=2pt,
thick,
text width=8em,
align=flush center,
node distance=2em
},
barycentric setup/.code={\foreach \X [count=\Y] in {#1}
{\ifnum\Y=1
\xdef\baryarg{\X=1}
\else
\xdef\baryarg{\baryarg,\X=1}
\fi}},
barycentric list/.style={barycentric setup={#1},insert path={%
(barycentric cs:\baryarg)}}
}
\begin{tikzpicture}
\matrix[row sep=2em, column sep=4em, every node/.style={basic}] {
\node(a){text}; & \node(c){text}; \\
\node(b){text}; & \node(d){text}; \\
% Loads of other nodes
};
\path[barycentric list={a,b,c,d}] node {center};
\end{tikzpicture}
\end{document}