Novo comando que exclui um foreach com número desconhecido de parâmetros

Novo comando que exclui um foreach com número desconhecido de parâmetros

Desculpe, mas parte do código está em francês. No entanto, isso não importa porque é apenas o texto listado

Atualmente tenho um novo comando chamado \listerfeque, combinado com \listerfenextarge \listerfegobblenextarg, prossegue com sucesso um número desconhecido de parâmetros para separá-los com um,

Agora, eu tenho 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}

Sem o \foreachlinedo, então sem setas, fica assim:

Agora, quando executo este código, ele me diz o seguinte:

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

Eu criei \foreachlinedoporque não quero criar muitas setas \foreach, porque haverá muitas e muitas setas combinadas no diagrama.

Como posso fazer isso funcionar?

Responder1

Código de trabalho:

% !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}

Não preciso analisar vários argumentos, só preciso fornecer a lista.

informação relacionada