
Я пытаюсь создать команду, которая будет использоваться в 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}