抱歉,部分代码是法语。不过,这无所谓,因为只是列出的文本
我目前有一个名为的新命令\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}
我不需要解析多个参数,我只需要提供列表。