
Вот четыре TikZ
среды для рисования двух параллельных отрезков. Во всех средах одна конечная точка первого отрезка линии указывается либо с помощью , \coordinate(A)
либо \node(A){$A$};
, а одна конечная точка второго отрезка линии указывается либо с \coordinate(B)
помощью \node(B){$B$};
.
Точка A указана первой; для нее не указаны координаты. TikZ
Размещает ли ее в начале координат по умолчанию? Кажется, она размещена в начале координат, потому что во втором графике у меня есть команда \node at (0,0) {$O$};
, а «O» набрано в координате для A.
За исключением позиционирования "A", второе и третье отображения идентичны. Во втором отображении я использую \coordinate(A);
и \node at (0,0) {$A$};
для позиционирования "A", а в третьем отображении я использую \node[inner sep=0pt,outer sep=0pt] (A){$A$};
для позиционирования "A". Во втором отображении "A" кажется центрированным в (0,0), а в третьем отображении "A" кажется набранным слева от (0,0). Почему есть разница?
Единственное отличие в кодировке для третьего и четвертого дисплеев заключается в том, что у меня есть inner sep=0pt
опция в команде узла для набора "A" на третьем дисплее и inner sep=1.5pt
опция в команде узла для набора "A" на четвертом дисплее. Почему это смещает "все" на четвертом дисплее по сравнению с третьим дисплеем?
\documentclass{amsart}
\usepackage{tikz}\usetikzlibrary{calc,positioning}
\begin{document}
\begin{tikzpicture}
\coordinate(A);
\coordinate[right=of A](B);
\draw[yellow, line width=2pt] (A) -- ++(1,1);
\draw[red] (B) -- ++(1,1);
\end{tikzpicture}
\vskip1.25mm
\begin{tikzpicture}
\coordinate(A);
\coordinate[right=of A](B);
\draw[yellow, line width=2pt] (A) -- ++(1,1);
\draw[red] (B) -- ++(1,1);
\node at (0,0) {$A$};
\end{tikzpicture}
\vskip1.25mm
\begin{tikzpicture}
\node[inner sep=0pt,outer sep=0pt] (A){$A$};
\coordinate[right=of A](B);
\draw[yellow, line width=2pt] (A) -- ++(1,1);
\draw[red] (B) -- ++(1,1);
\end{tikzpicture}
\vskip1.25mm
\begin{tikzpicture}
\node[inner sep=1.5pt,outer sep=0pt] (A) {$A$};
\coordinate[right=of A] (B);
\draw[yellow, line width=2pt] (A) -- ++(1,1);
\draw[red] (B) -- ++(1,1);
\end{tikzpicture}
\end{document}
решение1
Помогает ли следующее?
\documentclass[tikz,border=5pt,mult]{standalone}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}[every node/.style={draw}]
\draw [help lines] (-1,-1) grid (2,2);
\coordinate(A);
\coordinate[right=of A](B);
\draw [blue] (A) -- ++(1,1);
\draw (B) -- ++(1,1);
\node at (0,0) {$A$};
\path [fill=blue] (0,0) circle (1.5pt);
\end{tikzpicture}
\begin{tikzpicture}[every node/.style=draw]
\draw [help lines] (-1,-1) grid (2,2);
\node[inner sep=0pt,outer sep=0pt] (A){$A$};
\coordinate[right=of A](B);
\draw [blue] (A) -- ++(1,1);
\draw (B) -- ++(1,1);
\path [fill=blue] (0,0) circle (1.5pt);
\end{tikzpicture}
\end{document}
В первом случае синяя линия рисуется из координаты A
и B
располагается относительно этой координаты. Поскольку координаты являются точками, это равносильно рисованию из (0,0)
.
Во втором случае синяя линия рисуется из узла A
и B
располагается относительно узла. TikZ предполагает, что вы хотите рисовать или измерять от ближайшей точки на границе узла. Даже если A
имеет ноль inner sep
и outer sep
, он все равно имеет положительный размер, поскольку содержит букву A
, которая занимает место. Таким образом, в этом случае линия рисуется немного выше и немного правее (0,0)
и B
располагается относительно точки немного правее (0,0)
.
Вы можете эмулировать эффект использования координат, указав якорь center
:
\begin{tikzpicture}[every node/.style=draw]
\draw [help lines] (-1,-1) grid (2,2);
\node[inner sep=0pt,outer sep=0pt] (A){$A$};
\coordinate[right=of A.center](B);
\draw [blue] (A.center) -- ++(1,1);
\draw (B) -- ++(1,1);
\path [fill=blue] (0,0) circle (1.5pt);
\end{tikzpicture}
В качестве альтернативы, если узел A
не имеет содержимого, а также равен нулю sep
, он будет вести себя аналогично координате, поскольку по сути не будет занимать места:
\begin{tikzpicture}[every node/.style=draw]
\draw [help lines] (-1,-1) grid (2,2);
\node[inner sep=0pt,outer sep=0pt] (A){};
\coordinate[right=of A](B);
\draw [blue] (A) -- ++(1,1);
\draw (B) -- ++(1,1);
\node at (A) {$A$};
\path [fill=blue] (0,0) circle (1.5pt);
\end{tikzpicture}
Обратите внимание, что в каждом случае A
центр находится в начале координат (0,0)
(отмечено синей точкой).