为了以特定的度数间隔绘制带有数字标签的圆圈,我使用了以下代码。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[line cap=rect,line width=3pt]
\draw[] (0,0) circle [radius=8cm];
\foreach \angle [count=\xi] in {60,30,...,-270}
{
\draw[line width=1.5pt] (\angle:7.8cm) -- (\angle:8.2cm);
\node[font=\large] at (\angle:9cm) {\xi*12000};
}
\end{tikzpicture}
\end{document}
标签应由循环计数器和整数 12000 的乘积组成,因此应读取 12000、24000、36000 等。但是,当前代码将乘法按字符串逐字打印。
正确的代码是什么样的?
答案1
还有另外两种方法,无需加载任何额外的包。请注意,我手动\xi*12
添加了,000
以简化和加快计算,从而加快编译过程。
有\pgfmathtruncatemacro
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[line cap=rect,line width=3pt]
\draw[] (0,0) circle [radius=8cm];
\foreach \angle [count=\xi] in {60,30,...,-270}{
\pgfmathtruncatemacro{\xx}{\xi*12}
\draw[line width=1.5pt] (\angle:7.8cm) -- (\angle:8.2cm);
\node[font=\large] at (\angle:9cm) {\xx 000};
}
\end{tikzpicture}
\end{document}
使用内置功能evaluate
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[line cap=rect,line width=3pt]
\draw[] (0,0) circle [radius=8cm];
\foreach \angle [count=\xi, evaluate=\xi as \xx using int(\xi*12)] in {60,30,...,-270}{
\draw[line width=1.5pt] (\angle:7.8cm) -- (\angle:8.2cm);
\node[font=\large] at (\angle:9cm) {\xx 000};
}
\end{tikzpicture}
\end{document}
两种情况下的结果如下:
答案2
这fp
包中有您需要的内容-请尝试下面的代码。
\documentclass{standalone}
\usepackage{tikz,fp}
\begin{document}
\begin{tikzpicture}[line cap=rect,line width=3pt]
\draw[] (0,0) circle [radius=8cm];
\foreach \angle [count=\xi] in {60,30,...,-270}
{
\FPeval{\result}{round(\xi*12000,0)}
\draw[line width=1.5pt] (\angle:7.8cm) -- (\angle:8.2cm);
\node[font=\large] at (\angle:9cm) {\result};
}
\end{tikzpicture}
\end{document}
答案3
一种方法是使用 MetaPost 来实现此目的(在 LuaLaTeX 程序中包含编码以方便排版)。
它利用freelabel
MetaPost 的 Metafun 格式提供的循环标记宏和numprint
用于数字格式化的 LaTeX 包。
\documentclass[border=2mm]{standalone}
\usepackage{luamplib, numprint}
\mplibtextextlabel{enable}
\mplibsetformat{metafun}
\mplibnumbersystem{double}
\begin{document}
\begin{mplibcode}
beginfig(0);
u = 3cm; len = 4bp; pair radius, hmark;
draw fullcircle scaled 2u;
freelabeloffset := 6bp;
for i = 1 upto 12:
angl := 90-30i;
radius := u*dir angl; hmark := .5len*dir angl;
draw (-hmark -- hmark) shifted radius;
freelabel("\numprint{" & decimal(12000i) & "}", radius, origin);
endfor;
endfig;
\end{mplibcode}
\end{document}