我以以下方式定义一个数组:
\begin{tikzpicture}
\def\n{10}
\pgfmathparse{int(\n-1)}
\foreach \x in {0,...,\pgfmathresult} {
\foreach \y in {0,...,\pgfmathresult} {
\pgfmathtruncatemacro{\nodelabel}{\x + \y*\n}
\node at (\x,\y) (\x) {c\nodelabel};
}
}
\end{tikzpicture}
我怎样才能用零填充节点标签以便得到c001
等等c010
?
答案1
另一个解决方案是siuntix
:
\documentclass{article}
\usepackage{siunitx}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\n{10}
\pgfmathparse{int(\n-1)}
\foreach \x in {0,...,\pgfmathresult} {
\foreach \y [evaluate=\y as \ni using {int(\x+\y*\n)}] in {0,...,\pgfmathresult} {
\node at (\x,\y) {c\num[minimum-integer-digits=3]{\ni}};
}
}
\end{tikzpicture}
\end{document}
答案2
调整此处给出的 PGF 答案:如何输出带有前导零的计数器?我们可以对您的示例使用相同的方法。\pgfmathtruncatemacro
我没有使用,而是使用了\pgfmathsetcounter
,然后使用基数转换来填充零。
\documentclass{article}
\usepackage{tikz}
\newcounter{nodelabel}
\begin{document}
\begin{tikzpicture}
\def\n{10}
\pgfmathsetbasenumberlength{3}
\pgfmathparse{int(\n-1)}
\foreach \x in {0,...,\pgfmathresult} {
\foreach \y in {0,...,\pgfmathresult} {
\pgfmathsetcounter{nodelabel}{\x + \y*\n}
\pgfmathbasetodec\nodelabel{\the\value{nodelabel}}{10}%
\node at (\x,\y) (\x) {c\nodelabel};
}
}
\end{tikzpicture}
\end{document}
答案3
更新:
我可能误解了这个问题,因为标签可以像这样自然地写出来:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\n{10}
\pgfmathparse{int(\n-1)}
\foreach \x in {0,...,\pgfmathresult} {
\foreach \y in {0,...,\pgfmathresult} {
\node at (\x,\y) (\x) {c0\y\x};
}
}
\end{tikzpicture}
\end{document}
旧答案:
\opprint
您可以使用包中的宏xlop
来打印数字,包括无用的零。例如00000.000
将写成00000.000
\documentclass{article}
\usepackage{tikz}
\usepackage{xlop}
\begin{document}
\begin{tikzpicture}
\def\n{10}
\pgfmathparse{int(\n-1)}
\foreach \x in {0,...,\pgfmathresult} {
\foreach \y in {0,...,\pgfmathresult} {
\node at (\x,\y) (\x) {c\opprint{0\y\x}};
}
}
\end{tikzpicture}
\end{document}