tikz 中 for 循环期间边缘标签中的逗号

tikz 中 for 循环期间边缘标签中的逗号

我正在制作一个自动机的图片,其中转换具有逗号分隔的权重元组。这不是问题,直到我尝试使用 for 循环语法将转换分隔在图的同一部分中(感谢:如何绘制上面的多边循环 - tikz)。因为 for 循环的边标签是用逗号分隔的,所以循环会将元组中的每个元素抓取为新标签的一部分,而不是标签的一部分。

\documentclass{article}
\usepackage{pgf}
\usepackage{tikz}
\usetikzlibrary{arrows,automata}

\begin{document}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
                semithick]

\node[initial,state, accepting, align = center] (A) {0};

\path (A)    edge [loop above, align=center] node {a:a \\ $\langle 0, 0, 0, 0 \rangle$} (A);
\begin{pgfinterruptboundingbox}
\foreach \looseness/\label [count=\n] in {15/i:a \\ $\langle 2 1 1 1\rangle$ }
    \path [->] (A) edge [
        loop above, align = center,
        every loop/.append style={
        looseness=\looseness,
        in=60-0.8*\looseness,
        out=120+0.8*\looseness
    }] node {\label} ();
\end{pgfinterruptboundingbox}
\end{tikzpicture}
\end{document}

为了避免这种情况,我省略了逗号。结果是手动指定的弧看起来符合我的要求,但 for 循环创建的弧却不符合我的要求(元素之间没有逗号)。我得到的印象是在 tikz 中使用双重 for 循环for 循环不支持我想要做的事情,但我想确定一下。

PS 我制作的图确实使用了几个弧,因此有理由使用 for 循环。

具有逗号分隔和非逗号分隔权重向量的单状态自动机

答案1

在 TikZ 中,在循环中使用包含逗号的值的通常方法\foreach是使用花括号保护它们。(请注意,坐标可以特殊处理,因此不要对此使用此方法。)

例如:

\documentclass[tikz, border=50pt]{standalone}
\usetikzlibrary{arrows,automata}

\begin{document}
  \begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=2.8cm,
    semithick]

    \node[initial,state, accepting, align = center] (A) {0};

    \path (A)    edge [loop above, align=center] node {a:a \\ $\langle 0, 0, 0, 0 \rangle$} (A);
    \begin{pgfinterruptboundingbox}
    \foreach \looseness/\label [count=\n] in {12/i:a \\ {$\langle 2, 1, 1, 1\rangle$} }
      \path [->] (A) edge [
      loop above, align = center,
      every loop/.append style={
        looseness=\looseness,
        in=60-.8*\looseness,
        out=120+.8*\looseness
      }] node {\label} ();
    \end{pgfinterruptboundingbox}
  \end{tikzpicture}
\end{document}

循环中的逗号

相关内容