
次の引用は、pgf マニュアルの第 17 章、セクション 5.3 にあります。(「このオプション」は、2 つの測定値によるノードの位置の指定を指します。):
このオプションの効果は次のとおりです。まず、
(<number or dimension 2>, <number or dimension 1>)
座標を評価するための通常のルールを使用してポイントが計算され、位置が算出されます。次に、ノードはこの点の垂直成分だけシフトされます。アンカーは南に設定されます。
マニュアルに記載されている例を示します。この例は「このオプション」を示していますか?and 3mm
ノードの位置はどのように変更しますか?
\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc,angles,shapes,positioning}
\begin{document}
\begin{tikzpicture}
\draw [help lines] (0,0) grid (2,2);
\node at (1,1) [above=0.2 and 3mm, draw] {over};
\end{tikzpicture}
\end{document}
もっとわかりやすい例を挙げてくれる人はいませんか?
答え1
このオプションは、、または、を追加しないと機能しませんabove right
。またabove left
、を省略すると結果が異なります。次のものを比較してください。below right
below left
and 3mm
[above right=0.2, draw]
[above right=0.2 and 3mm, draw]
引用文で説明されているように、アンカーはノードの南側に設定されます。アンカーは「移動」されるものです。もちろん、シェイプの残りの部分はそれに従います。アンカーが何であるか分からない場合は、Tikz-Pgf マニュアル(477 ページ) 必要に応じて、キーを追加するanchor=north
か、anchor=north west
オプションで別のアンカーを設定することもできます。
円の場合も同じように動作しますが、アンカーは南ではなく円の中心に設定されます。例を に変更すると\node at (1,1) [circle, draw] {over};
、アンカーが正確に中心に配置されていることがわかりますが、 を追加するとanchor=south
、アンカーの南がグリッドの中心と一致するように上方に移動します。
答え2
もう少し明確にする必要があると思います。まず、なぜ構文エラーがないのか。それは、if then 構文をかなり節約できるからです。これらのオプションの内部コードを、古いスタイルの\tikzoption
( と同等\tikzset
)で確認してください。
\tikzoption{above}[]{\def\tikz@anchor{south}\tikz@possibly@transform{y}{}{#1}}
\tikzoption{below}[]{\def\tikz@anchor{north}\tikz@possibly@transform{y}{-}{#1}}
\tikzoption{above left}[]%
{\def\tikz@anchor{south east}%
\tikz@possibly@transform{x}{-}{#1}\tikz@possibly@transform{y}{}{#1}}
ここで、変換などで何が行われるかを知る必要はありません。ただし、above、below などを指定すると、明示的に 0.2 および 3mm を指定しても x 情報が破棄されることに気付くでしょう。
また、反対のアンカーが有効になっていることも確認できます。1 つのオプションを選択すると、アンカーのコンパス方向が反対に選択されます。これを上書きする場合は、anchor=<foo>
オプションに明示的に追加する必要があります。
より細かいグリッドを有効にすると、実際に位置がよりよくわかります
%\usetikzlibrary{positioning}
\begin{tikzpicture}
\draw [help lines] (0,0) grid[step=1mm] (2,2) node at (1,1) {o};
\node at (1,1) [circle,above=0.2 and 3mm, draw] {over};
\end{tikzpicture}
また、右上ではシフトの正確な量が得られます
%\usetikzlibrary{positioning,shapes.geometric}
\begin{tikzpicture}
\draw [help lines] (0,0) grid[step=1mm] (2,2) node at (1,1) {o};
\node at (1,1) [ellipse,above right=0.2 and 3mm, draw] {over};
\fill[red] (1,1) ++(3mm,2mm) circle(0.5pt);
\end{tikzpicture}