Erstellen Sie einen Befehl, der \foreach verwendet, um ihn in einem baryzentrischen cs zu verwenden

Erstellen Sie einen Befehl, der \foreach verwendet, um ihn in einem baryzentrischen cs zu verwenden

Ich versuche, einen Befehl zu erstellen, der in einem verwendet wird barycentric cs:.

Ich werde barycentric csviel Zeit darauf verwenden, einen Knoten in die Mitte anderer zu setzen, also versuche ich, es für mich weniger schmerzhaft zu machen. Es wird auch in einem anderen Befehl verwendet, der eine Liste als Parameter verwendet.

Nehmen wir an, ich habe diesen Code:

\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}

Ich versuche, einen Befehl zu erstellen, sodass \node (bc#) at (barycentric cs:a=1,b=1,c=1,d=1,<...>) {text};ich statt zu verwenden nur schreiben muss \node (x) at (baricentric cs:\listforbarycentrics{a,b,c,d}) {text};.

Ich habe es mit diesem Befehlscode versucht:

\newcommand{\listforbarycentrics}[1]{\foreach \n in {#1}{
        \n=1,
    };
}

Es funktioniert jedoch nicht. Es kann sein, dass ein Komma am Ende der Liste barycentric cs:(wie dieses barycentric cs:a=1,b=1,c=1,d=1,) einen Fehler verursacht, aber ich bin mir nicht sicher.

Antwort1

Etwas wie das?

\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}

Bildbeschreibung hier eingeben

verwandte Informationen