![为什么(或看起来)锚选项是颠倒的?](https://linux22.com/image/321064/%E4%B8%BA%E4%BB%80%E4%B9%88%EF%BC%88%E6%88%96%E7%9C%8B%E8%B5%B7%E6%9D%A5%EF%BC%89%E9%94%9A%E9%80%89%E9%A1%B9%E6%98%AF%E9%A2%A0%E5%80%92%E7%9A%84%EF%BC%9F.png)
由于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”位于您指定的坐标下方或“南”。您必须考虑坐标相对于节点的位置,而不是节点相对于坐标的位置。
我不知道这是否能让你更清楚地了解情况,但我希望如此。