알 수 없는 수의 매개변수가 있는 foreach를 제외하는 새로운 명령

알 수 없는 수의 매개변수가 있는 foreach를 제외하는 새로운 명령

죄송합니다. 코드의 일부가 프랑스어로 되어 있습니다. 하지만 나열된 텍스트일 뿐이므로 중요하지 않습니다.

현재 및 와 \listerfe결합하여 알 수 없는 수의 매개변수를 성공적으로 진행하여\listerfenextarg\listerfegobblenextarg,

이제 다음 코드가 있습니다.

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

이 없으므로 \foreachlinedo화살표가 없으면 다음과 같습니다.

이제 이 코드를 실행하면 다음과 같은 메시지가 표시됩니다.

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

다이어그램에 너무 많은 화살표가 결합되어 있기 때문에 \foreachlinedo많이 만들고 싶지 않기 때문에 만들었습니다 .\foreach

어떻게 작동하게 할 수 있나요?

답변1

작업 코드:

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

여러 인수를 구문 분석할 필요는 없으며 목록만 제공하면 됩니다.

관련 정보