如何使用变量设置 tikz-node 的锚点?

如何使用变量设置 tikz-node 的锚点?

以下代码按预期工作。

\documentclass[tikz,margin=1em]{standalone}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}[scale=3]
\draw (0,0) circle [radius=1cm];
\foreach \a in {0,30,...,330}{
    \draw (\a:1cm-1pt) -- (\a:1cm+1pt);
    \tikzmath {
        int \b;
        if \a<90 then { \b = \a; } else {
            if \a==90 then { \b = 0; } else {
                if \a<270 then { \b = \a+180; } else {
                    if \a==270 then { \b = 0; } else {
                        if \a<360 then { \b = \a; };
                    };
                };
            };
        };
    };
    \draw (\a:1cm+1pt) node[rotate=\b,anchor=west]  {$\a^\circ$};
 }
\end{tikzpicture}
\end{document}

这就是它的样子

这段代码是否可以扩展,以从条件语句中设置的变量中设置节点的锚值?类似于以下功能失调的代码。

...
    \tikzmath {
        int \b;
        if \a<90 then { \b = \a; \c = west; } else {
            if \a==90 then { \b = 0; \c = south; } else {
                if \a<270 then { \b = \a+180; \c = east; } else {
                    if \a==270 then { \b = 0; \c = north; } else {
                        if \a<360 then { \b = \a; \c = west; };
                    };
                };
            };
        };
    };
    \draw (\a:1cm+1pt) node[rotate=\b,anchor=\c]  {$\a^\circ$};
...

显然数学库并不是为了处理这个问题。

当然,我可以直接分割循环,但是没有更直接的方法吗?

答案1

我不确定我是否正确理解了你的问题,但我的看法是:你可以将一个角度传递给键,anchor以便在节点的边界上以该角度获取锚点。因此你只需要计算正确的角度。

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{tikz}

\usepackage{siunitx}

\begin{document}

\begin{tikzpicture}[scale=3]
  \draw (0,0) circle [radius=1cm];
  \foreach \a in {0,30,...,330}{
    \draw (\a:1cm-1pt) -- (\a:1cm+1pt);
    \pgfmathsetmacro\anchr{
      ifthenelse(
        mod(\a, 90),
        floor((floor(mod(floor(\a/90), 4)) - 1) / 2) * 180,
        (2 + floor(mod(floor(\a/90), 4))) * 90
      )
    }
    \pgfmathsetmacro\rottn{
      ifthenelse(
        mod(\a, 90),
        \a + \anchr + 180,
        0
      )
    }
    \path (\a:1cm) node [anchor=\anchr, rotate=\rottn, outer sep=1ex] {\ang{\a}};
  }
\end{tikzpicture}

\end{document}

MWE 输出

然而,我发现下面的做法更令人愉快(并且更容易做到)。

\documentclass{article}

\usepackage[T1]{fontenc}
\usepackage{lmodern}

\usepackage{tikz}

\usepackage{siunitx}

\begin{document}

\begin{tikzpicture}[scale=3]
  \draw (0,0) circle [radius=1cm];
  \foreach \a in {0,30,...,330}{
    \draw (\a:1cm-1pt) -- (\a:1cm+1pt);
    \path (\a:1cm) node [anchor=\a+180, outer sep=1ex] {\ang{\a}};
  }
\end{tikzpicture}

\end{document}

MWE 输出

相关内容