我有一个寄存器\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}
负责打印,但在这种情况下,最好使用特定的计数器。