为什么(或看起来)锚选项是颠倒的?

为什么(或看起来)锚选项是颠倒的?

由于anchor基点(北、南等)是选项,我期望它们会重现我在地图上通常看到的内容(参见图片中的预期)。请注意情况并非如此(参见真实)。为什么会发生这种情况?(我确实在寻找答案,但不确定要寻找什么)

锚定基数选项

代码:

\documentclass[10pt,a4paper,twoside]{report}
\usepackage{geometry}   
\geometry{verbose,tmargin=2.5cm,bmargin=2.5cm,lmargin=2.5cm,rmargin=2.5cm}
%---------------------------------- tikz ---------------------------------------
\usepackage{tikz}
\usetikzlibrary{positioning,chains,fit,shapes,calc,arrows,patterns,external,shapes.callouts,graphs,decorations.pathreplacing,chains}
\usepackage{fixltx2e} 

\begin{document}

   \begin{tikzpicture}[thick,
      every node/.style={draw,diamond,minimum height=2cm,minimum width=2cm},
      ]

      \node[draw=none] at (0,3)  {Expected};

      \node[anchor=north] at (0,0) {S};
      \node[anchor=south] at (0,0) {N};
      \node[anchor=east] at (0,0) {W};
      \node[anchor=west] at (0,0) {E};


      \node[draw=none] at (5,3)  {Real};

      \node[draw,diamond,anchor=north] at (5,0) {N};
      \node[draw,diamond,anchor=south] at (5,0) {S};
      \node[draw,anchor=east] at (5,0) {E};
      \node[draw,anchor=west] at (5,0) {W};

    \end{tikzpicture}
\end{document}

答案1

这是一个常见的混淆之源;也许这有助于澄清一些事情:

\documentclass{article}    
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}
\draw[fill] (0,0) circle (1.5pt);
\node[draw,text width=1cm,anchor=north] at (0,0) (rect) {};
\node[above] at (rect.north) {north};
\begin{scope}[xshift=2cm]
\draw[fill] (0,0) circle (1.5pt);
\node[draw,text width=1cm,anchor=south] at (0,0) (rect) {};
\node[below] at (rect.south) {south};
\end{scope}
\end{tikzpicture}

\end{document}

在此处输入图片描述

锚点north位于形状上端的中间。当您给出选项时anchor=north,形状将被放置,使得这个北锚点位于指定位置,因此节点位于指定位置下方。

另一方面,south锚点位于形状下端的中间。当您给出选项时anchor=south,形状将被放置,使得这个南锚点位于指定位置,因此节点位于指定位置上方。

事实上,Till Tantau 意识到这会造成混乱;在手册的第 43 页可以找到

然而,Karl 认为,虽然这是“正确的”,但为了将某物放置在给定点下方,他必须使用锚点,这很违反直觉north。为此,有一个名为 的选项below,其功能与 相同anchor=north。同样,above right的功能与 相同anchor=south west

答案2

锚点与正在绘制的节点相关。例如,

\node[anchor=north] at (0,0) {S};

意思是:绘制一个带有文本“S”的节点,并将其北锚点(顶部水平居中的点)置于坐标 (0,0)。因此,文本“S”位于您指定的坐标下方或“南”。您必须考虑坐标相对于节点的位置,而不是节点相对于坐标的位置。

我不知道这是否能让你更清楚地了解情况,但我希望如此。

相关内容