Nuevo comando que excluye un foreach con un número desconocido de parámetros

Nuevo comando que excluye un foreach con un número desconocido de parámetros

Lo sentimos, pero parte del código está en francés. Sin embargo, no importará porque es solo el texto listado.

Actualmente tengo un nuevo comando llamado \listerfeque, combinado con \listerfenextargy \listerfegobblenextarg, procede con éxito con un número desconocido de parámetros para separarlos con un,

Ahora tengo este código:

% !TeX encoding = UTF-8
% !TeX spellcheck = fr_FR


\documentclass[utf8]{article}
\usepackage{tikz}
\makeatletter
\newcommand{\foreachlinedo}[2]{\foreach \noeud in {\listerfe#1} {\draw[<-] (#2.east) -| ++(-1em,0em) |- (\noeud.west);}}

\newcommand{\listerfe}[1]{#1\listerfenextarg}
\newcommand{\listerfenextarg}{\@ifnextchar\bgroup{\listerfegobblenextarg}{}}
\newcommand{\listerfegobblenextarg}[1]{,#1\@ifnextchar\bgroup{\listerfegobblenextarg}{}}
\makeatother

\begin{document}

    \definecolor{couleurbackintr}{HTML}{7F00FF}
    \definecolor{couleurtextintr}{HTML}{FFFFFF}
    \definecolor{couleurbackfonc}{HTML}{C780FF}
    \definecolor{couleurtext}{HTML}{000000}
    \definecolor{couleurbackextr}{HTML}{DDB3FF}
    \begin{figure}[htp]
        \centering
        \tikzset{
            basic/.style={draw, rounded corners=2pt, thick, text width=8em, align=flush center, text=couleurtext, node distance=2em},
            intrant/.style={basic, fill=couleurbackintr, text=couleurtextintr},
            fonction/.style={basic, fill=couleurbackfonc},
            extrant/.style={basic, fill=couleurbackextr}
        }
        \begin{tikzpicture}[]
        \fontsize{8}{9} \selectfont
        % intrants
        \matrix[row sep=2em, column sep=2em] {
            % 1re ligne
            %TODO changer nom
            \node[intrant](forcutil){Force utilisée}; & \node[fonction](instcapt){Installer capteur sous l'eau}; & & & \node[extrant](captinst){Capteur installé}; \\
            % 2me ligne
            \node[intrant](defailla){Défaillance}; & \node[fonction](detcdefa){Détecter défaillance}; & & \node[fonction](genralrm){Générer alarme}; & \node[extrant](alarme){Alarme}; \\
            \node[intrant](poissons){Poissons}; & \node[fonction](detecteu){Détecteur}; & \node[fonction](photo){Photo}; & \node[fonction](accudonn){Accumuler données}; & \\
            \node[intrant](elecbatt){Électicité batterie}; & \node[fonction](alimcapt){Alimenter capteur}; & & \node[fonction](idenpois){Identifier poisson}; & \\
            \node[intrant](tempreau){Température de l'eau}; & \node[fonction](captteau){Capteur température eau}; & & \node[fonction](archdonn){Archiver donnéees}; & \node[extrant](donnarch){Données archivées}; \\
            \node[intrant](tempintr){Température interne}; & \node[fonction](capttcpt){Capteur température interne}; & & & \\
            \node[intrant](confvolm){Configuration volume}; & \node[fonction](confcapt){Configurer capteur}; & & & \\
            \node[intrant](entrutil){Entrées utilisateurs}; & \node[fonction](authutil){Authentifier utilisateur}; & \node[fonction](accedonn){Accéder aux données}; & & \\
        };
        \foreachlinedo{{forcutil}{defailla}{poissons}}{instcapt};
        \end{tikzpicture}
        \caption{Diagramme fonctionnel}
        \label{f:caf_diag_fonc}
    \end{figure}

\end{document}

Sin el \foreachlinedo, es decir, sin flechas, se ve así:

Ahora, cuando ejecuto este código, me dice esto:

Argument of \XC@definec@lor has an extra }. ...{{forcutil}{defailla}{poissons}}{instcapt}
Paragraph ended before \XC@definec@lor was complete. ...{{forcutil}{defailla}{poissons}}{instcapt}
Paragraph ended before \tikz@@scan@@no@calculator was complete. ...{{forcutil}{defailla}{poissons}}{instcapt}
Extra }, or forgotten \endgroup. \end{tikzpicture}
Missing } inserted. \end{tikzpicture}
Extra }, or forgotten \endgroup. \end{tikzpicture}
Missing } inserted. \end{tikzpicture}
Extra }, or forgotten \endgroup. \end{figure}
\begin{figure} on input line 30 ended by \end{document}. \end{document}
You can't use `\end' in internal vertical mode. \end{document}
\begin{figure} on input line 30 ended by \end{document}. \end{document}
Missing } inserted. \end{document}
Emergency stop.
Unused global option(s): [utf8]. % doesn't matter

Creé \foreachlinedoporque no quiero crear muchas \foreach, porque habrá muchísimas flechas combinadas en el diagrama.

¿Cómo puedo hacerlo funcionar?

Respuesta1

Código de trabajo:

% !TeX encoding = UTF-8
% !TeX spellcheck = fr_FR


\documentclass[utf8]{article}
\usepackage{tikz}

\newcommand{\foreachlinedo}[2]{\foreach \noeud in {#1} {\draw[<-] (#2.east) -| ++(-1em,0em) |- (\noeud.west);}}

\begin{document}

    \definecolor{couleurbackintr}{HTML}{7F00FF}
    \definecolor{couleurtextintr}{HTML}{FFFFFF}
    \definecolor{couleurbackfonc}{HTML}{C780FF}
    \definecolor{couleurtext}{HTML}{000000}
    \definecolor{couleurbackextr}{HTML}{DDB3FF}
    \begin{figure}[htp]
        \centering
        \tikzset{
            basic/.style={draw, rounded corners=2pt, thick, text width=8em, align=flush center, text=couleurtext, node distance=2em},
            intrant/.style={basic, fill=couleurbackintr, text=couleurtextintr},
            fonction/.style={basic, fill=couleurbackfonc},
            extrant/.style={basic, fill=couleurbackextr}
        }
        \begin{tikzpicture}[]
        \fontsize{8}{9} \selectfont
        % intrants
        \matrix[row sep=2em, column sep=2em] {
            % 1re ligne
            %TODO changer nom
            \node[intrant](forcutil){Force utilisée}; & \node[fonction](instcapt){Installer capteur sous l'eau}; & & & \node[extrant](captinst){Capteur installé}; \\
            % 2me ligne
            \node[intrant](defailla){Défaillance}; & \node[fonction](detcdefa){Détecter défaillance}; & & \node[fonction](genralrm){Générer alarme}; & \node[extrant](alarme){Alarme}; \\
            \node[intrant](poissons){Poissons}; & \node[fonction](detecteu){Détecteur}; & \node[fonction](photo){Photo}; & \node[fonction](accudonn){Accumuler données}; & \\
            \node[intrant](elecbatt){Électicité batterie}; & \node[fonction](alimcapt){Alimenter capteur}; & & \node[fonction](idenpois){Identifier poisson}; & \\
            \node[intrant](tempreau){Température de l'eau}; & \node[fonction](captteau){Capteur température eau}; & & \node[fonction](archdonn){Archiver donnéees}; & \node[extrant](donnarch){Données archivées}; \\
            \node[intrant](tempintr){Température interne}; & \node[fonction](capttcpt){Capteur température interne}; & & & \\
            \node[intrant](confvolm){Configuration volume}; & \node[fonction](confcapt){Configurer capteur}; & & & \\
            \node[intrant](entrutil){Entrées utilisateurs}; & \node[fonction](authutil){Authentifier utilisateur}; & \node[fonction](accedonn){Accéder aux données}; & & \\
        };
        \foreachlinedo{forcutil,defailla,poissons}{instcapt};
        \end{tikzpicture}
        \caption{Diagramme fonctionnel}
        \label{f:caf_diag_fonc}
    \end{figure}

\end{document}

No necesito analizar varios argumentos, solo necesito proporcionar la lista.

información relacionada