以特定度数间隔自定义标签圆

以特定度数间隔自定义标签圆

为了以特定的度数间隔绘制带有数字标签的圆圈,我使用了以下代码。

\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 程序中包含编码以方便排版)。

它利用freelabelMetaPost 的 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}

在此处输入图片描述

相关内容