的力量\foreach

的力量\foreach

我有一个寄存器\count0=<some-value>,需要获取索引中的字母\count0。也就是说,如果它是 1,我需要一个 A,如果是 2,我需要一个 B,等等。

这可能吗?

我不愿意分享 MWE,因为它似乎让事情变得有点复杂:

\begin{tikzpicture}
\node[regular polygon, regular polygon sides=7, minimum size=5cm] (A) {};
\foreach \i in {1,...,7}{
    \count0=8
    \advance\count0 by -\i
    \node[circle, label=above:\scriptsize\the\count0, fill=black, minimum size=4pt, inner sep=0pt] (\the\count0) at (A.corner \i) {};
}
\end{tikzpicture}

使用 tikz 包和 shapes.geometric tikz 库。

这会在圆上绘制标记为 1 .. 7 的七个节点。我需要 A .. G 而不是 1 .. 7。

答案1

这里不需要计数器,\foreach可以循环字母。

\documentclass[tikz,border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\begin{document}
  \begin{tikzpicture}
    \node[regular polygon, regular polygon sides=7, minimum size=5cm] (A) {};
    \foreach[count=\i] \a in {G,...,A}{
        \node[
          circle,
          label=above:\a,
          fill=black,
          minimum size=4pt,
          inner sep=0pt
        ] (N\i) at (A.corner \i) {};}
  \end{tikzpicture}
\end{document}

在此处输入图片描述

更新:改为顺时针方向。

答案2

的力量\foreach

TikZ/pgf 的循环宏\foreach功能强大,可以在这里使用它们来获取和计算大写字母及其数字表示的三个变量,以及节点位置的相反方向的数字。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\begin{document}
\begin{tikzpicture}
\node[regular polygon, regular polygon sides=7, minimum size=5cm] (A) {};
\foreach \A [count=\i, evaluate=\i as \j using int(8-\i)] in {G, ..., A}{
    \node[
      circle,
      label=above:\scriptsize\A,
      fill=black,
      minimum size=4pt,
      inner sep=0pt,
    ] (\j) at (A.corner \i) {};
}
\end{tikzpicture}
\end{document}

结果

\@Alph大写字母

LaTeX 使用\Alph来生成大写字母。对数字而不是计数器起作用的命令是\@Alph。由于@,需要\makeatletter...\makeatother或以下\csname...\endcsname结构:

\csname @Alph\endcsname{\the\count0}

完整示例:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\begin{document}
\begin{tikzpicture}
\node[regular polygon, regular polygon sides=7, minimum size=5cm] (A) {};
\foreach \i in {1,...,7}{
    \count0=8
    \advance\count0 by -\i
    \node[
      circle,
      label=above:\scriptsize\csname @Alph\endcsname{\the\count0},
      fill=black,
      minimum size=4pt,
      inner sep=0pt,
    ] (\the\count0) at (A.corner \i) {};
}
\end{tikzpicture}
\end{document}

LaTeX 计数器\Alph

以下示例使用 LaTeX 计数器AlphNode进行\pgfmathsetcounter计算:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}

\newcounter{AlphNode}
\renewcommand*{\theAlphNode}{\Alph{AlphNode}}

\begin{document}
\begin{tikzpicture}
\node[regular polygon, regular polygon sides=7, minimum size=5cm] (A) {};
\foreach \i in {1,...,7}{
    \pgfmathsetcounter{AlphNode}{8-\i}
    \node[
      circle,
      label=above:\scriptsize\theAlphNode,
      fill=black,
      minimum size=4pt,
      inner sep=0pt,
    ] (\the\count0) at (A.corner \i) {};
}
\end{tikzpicture}
\end{document}

答案3

您可以使用\Alph或其内部兄弟\@Alph,但由于您可能需要 ASCII 字符而不是语言本地化字符,\symbol所以更好。

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\newcount\stapscount

\begin{document}

\begin{tikzpicture}
\node[regular polygon, regular polygon sides=7, minimum size=5cm] (A) {};
\foreach \i in {1,...,7}{
    \stapscount=8
    \advance\stapscount by -\i
    \node[
      circle,
      label=above:\scriptsize\symbol{\numexpr64+\stapscount\relax},
      fill=black,
      minimum size=4pt,
      inner sep=0pt
    ] (\the\stapscount) at (A.corner \i) {};
}
\end{tikzpicture}

\end{document}

在此处输入图片描述

这利用了 A 的 ASCII 码是 65 这一事实。

排版时避免使用\count0。确实,它\foreach在组中完成其工作,并且\end{tikzpicture}负责打印,但在这种情况下,最好使用特定的计数器。

相关内容