我正在尝试创建一个将在中使用的命令barycentric cs:
。
我将花费barycentric cs
大量时间来获取其他节点中间的节点,因此我试图让自己不那么痛苦。它还将用于另一个使用列表作为参数的命令中。
假设我有这样的代码:
\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}
我正在尝试创建一个命令,这样,\node (bc#) at (barycentric cs:a=1,b=1,c=1,d=1,<...>) {text};
我只需要写 ,而不需要使用\node (x) at (baricentric cs:\listforbarycentrics{a,b,c,d}) {text};
。
我尝试使用这个命令代码:
\newcommand{\listforbarycentrics}[1]{\foreach \n in {#1}{
\n=1,
};
}
但是,它不起作用。可能是因为列表末尾的逗号barycentric cs:
(像这样barycentric cs:a=1,b=1,c=1,d=1,
)导致错误,但我不确定。
答案1
像这样吗?
\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}