
Следующая цитата находится в главе 17, разделе 5.3 руководства pgf. («Эта опция» относится к указанию местоположения узла по двум измерениям.):
Эффект этой опции следующий. Сначала точка
(<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
out. Сравните следующее:
[above right=0.2, draw]
[above right=0.2 and 3mm, draw]
Как объясняется в цитате, якорь устанавливается к югу от узла. Якорь — это то, что «перемещается». Остальная часть формы, конечно, следует за ним. Если вы не знаете, что такое якоря, проверьте раздел 49 «Формы» вРуководство по эксплуатации 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}}
Теперь вам не нужно знать, что он делает с возможным преобразованием и т. д. Но вы заметили, что если вы указываете выше, ниже и т. д., он отбрасывает информацию об x, даже если вы явно указываете 0,2 и 3 мм.
Также вы можете увидеть противоположную привязку в действии: вы выбираете одну опцию, и она выбирает противоположное направление компаса для привязки. Если вы хотите переопределить ее, вам нужно добавить explicit 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}