为什么使用旋转时对象没有水平对齐?

为什么使用旋转时对象没有水平对齐?

这是我的代码。

\documentclass{article}

\usepackage{tikz}

\begin{document}
    \def\magnet at (#1,#2,#3){\draw [rotate=#3] (#1,#2) ellipse (0.8 and 0.4)
        node at (#1-0.4,#2) {N}
        node at (#1+0.4,#2) {S};}

    \begin{figure}
        \centering
        \begin{tikzpicture}
        \magnet at (1,0,30);
        \magnet at (3,0,30);
        \magnet at (5,0,30);
        \end{tikzpicture}
    \end{figure}
\end{document}

为什么即使椭圆的中心有相同的 y 值,它们也不是水平对齐的?

在此处输入图片描述

答案1

pic通过TikZ 3.0 的功能解决:

\documentclass{article}

\usepackage{tikz}

\tikzset{
  magnet/.pic={
    \draw
      ellipse (0.8 and 0.4)
      node at (-0.4, 0) {N}
      node at (0.4, 0) {S}
    ;
  },
}

\begin{document}

  \begin{figure}
    \centering
    \begin{tikzpicture}
      \path
         (1, 0) pic[rotate=30]{magnet}
         (3, 0) pic[rotate=30]{magnet}
         (5, 0) pic[rotate=30]{magnet}
      ;
    \end{tikzpicture}
  \end{figure}
\end{document}

结果

答案2

通过在定义中使用 \tikz,并删除末尾的 ;,结果是三个相邻的省略号。我自己还在学习 tikz。

\documentclass{article}

\usepackage{tikz}

\begin{document}

\def\magnet at (#1,#2,#3){\tikz \draw [rotate=#3] (#1,#2) ellipse (0.8 and 0.4)
    node at (#1-0.4,#2) {N}
    node at (#1+0.4,#2) {S}}

\begin{figure}
    \centering
    \magnet at (1,0,30);
    \magnet at (3,0,30);
    \magnet at (5,0,30);              
\end{figure}
\end{document}

相关内容