Diferenças que a implementação de `\node` e `\coordinate` tem em exibição

Diferenças que a implementação de `\node` e `\coordinate` tem em exibição

Aqui estão quatro TikZambientes para desenhar dois segmentos de linha paralelos. Em todos os ambientes, uma extremidade do primeiro segmento de linha é especificada com ou \coordinate(A), \node(A){$A$};e uma extremidade do segundo segmento de linha é especificada com \coordinate(B)ou \node(B){$B$};.

O ponto A é especificado primeiro; nenhuma coordenada é fornecida para isso. Coloca TikZ-o na origem por padrão? Parece estar colocado na origem porque, no segundo gráfico, tenho o comando \node at (0,0) {$O$};, e "O" está escrito na coordenada de A.

Exceto pelo posicionamento de “A”, o segundo e o terceiro display são idênticos. No segundo display, uso \coordinate(A);e \node at (0,0) {$A$};para posicionar “A”, e no terceiro display, uso \node[inner sep=0pt,outer sep=0pt] (A){$A$};para posicionar “A”. Na segunda exibição, o "A" parece estar centralizado em (0,0), e na terceira exibição, o "A" parece estar escrito à esquerda de (0,0). Por que há uma diferença?

A única diferença na codificação para o terceiro e quarto monitores é que tenho inner sep=0ptcomo opção no comando do nó para composição "A" no terceiro monitor e inner sep=1.5ptcomo opção no comando do nó para composição "A" no quarto monitor. Por que isso muda “tudo” na quarta tela em comparação com a terceira?

\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}

Responder1

O seguinte ajuda?

\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}

caso 1

No primeiro caso, a linha azul é traçada a partir da coordenada Ae Bposicionada em relação a esta coordenada. Como as coordenadas são pontos, isso equivale a desenhar a partir de (0,0).

caso 2

No segundo caso, a linha azul é traçada a partir do nó Ae Bposicionada em relação ao nó. TikZ assume que você deseja desenhar ou medir a partir do ponto mais próximo no limite do nó. Mesmo que Atenha zero inner sepe outer sep, ainda tem tamanho positivo porque contém a letra Aque ocupa espaço. Então, neste caso, a linha é traçada um pouco acima, e um pouco à direita de (0,0)e Bé posicionada em relação a um ponto um pouco à direita de (0,0).

Você pode emular o efeito do uso de uma coordenada especificando a centerâncora:

  \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}

usando uma âncora para emular uma coordenada

Alternativamente, se o nó Anão tiver conteúdo, assim como zero sep, ele se comportará de forma semelhante a uma coordenada porque essencialmente não ocupará espaço:

  \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}

usando um nó vazio para emular uma coordenada

Observe que Aestá centralizado na origem (0,0)(marcado pelo ponto azul) em todos os casos.

informação relacionada