在不影响坐标样式的情况下为每个节点设置样式

在不影响坐标样式的情况下为每个节点设置样式

我正在尝试绘制图表并连接节点。因为我想将标签放置在我使用的线条上方every node/.style={above=.4ex, anchor=base}。但是有时我会coordinates在角落处绘制,以便可以连接多条线条。但是,这些coordinatesnodes,因此会被命令移动above

是否style有影响仅有的 nodes(不coordinates)或仅有的 coordinates(不是nodes)?

更新沿着讨论到答案的路径,这里有一个例子,我将上面的值设置为 0 而不是负值

\begin{tikzpicture}[demo/.style={every node/.style={above=3 pt}}, every coordinate node/.style={above=0}]
   \draw[demo] (0, 0) -- node{Label} coordinate(c1) (1,0);
   \node at (c1) [red]{x};
\end{tikzpicture}

覆盖上面的示例

完整代码:(包括不必要的标题),在 writelatex 上查看实际操作

\documentclass{article}
\usepackage{tikz}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{bm}
\usepackage[margin=0cm,nohead]{geometry}
\usepackage[active,tightpage]{preview}

\usetikzlibrary{calc}
\usetikzlibrary{positioning}
\usetikzlibrary{shapes}
\usetikzlibrary{arrows}
\usetikzlibrary{circuits}
\usetikzlibrary{patterns}
\usetikzlibrary{shadows}

\PreviewEnvironment{tikzpicture}
\listfiles
\begin{document}
\begin{tikzpicture}[demo/.style={every node/.style={above=3 pt}}, every coordinate node/.style={above=0}]
   \draw[demo] (0, 0) -- node{Label} coordinate(c1) (1,0);
   \node at (c1) [red]{x};
\end{tikzpicture}
\end{document}

答案1

coordinates 是shapes,并且每个shape都有一个every shape node可以设置的。例如,

示例输出

\documentclass{article}

\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[every node/.style={red},every coordinate node/.style={above=1cm}]
  \coordinate (A) at (0,0);
  \draw (0,0) node {\( O \)}-- (2,2) node {\( X \)};
  \draw[blue] (A) node {\( A \)} -- (1,1);
\end{tikzpicture}

\end{document}

这里,与您的用例相反,坐标节点被移动,而其他节点留在原处。

在您的用例中,您可以above通过将坐标移回来取消坐标:

\begin{tikzpicture}[every node/.style={above=2ex,anchor=base},every coordinate node/.style={above=-2ex,anchor=base}]
  \coordinate (A) at (0,0);
  \draw (0,0) node {\( O \)}-- (2,2) node {\( X \)};
  \draw[very thick,red] (A) -- (1,1);
\end{tikzpicture}

示例用例

编辑正如 Andrew Stacey 所指出的,该above命令的这种附加行为是出乎意料的。然而,我们并不经常看到这种情况。事实上,如果你above在同一个节点中使用两个 ,你确实会看到附加效果:

添加剂样品

\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \draw[red] (A) -- (1,0);
  \draw (A) node[anchor=base,above=2ex,above=1ex] {\( x \)};
  \draw[blue] (A) node[anchor=base,above=3ex] {\( O \)};
\end{tikzpicture}

这里我们将O其基线放置3ex在原点上方,并将放置x在基线位于above=2ex,above=1ex原点处并获得相同的定位。

进一步编辑如果库定位已加载,则不再发生tikz附加行为。最后一个指令是使用的指令,并且for将覆盖for :aboveaboveabovecoordinateaboveevery node

定位输出样例

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}

\begin{tikzpicture}[every node/.style={above=2ex,anchor=base},every coordinate node/.style={above=-2ex,anchor=base}]
  \coordinate (A) at (0,0);
  \draw (0,0) node {\( O \)}-- (2,2) node {\( X \)};
  \draw[very thick,red] (A) -- (1,1);
\end{tikzpicture}

\vspace{2cm}

\begin{tikzpicture}
  \coordinate (A) at (0,0);
  \draw[red] (A) -- (1,0);
  \draw (A) node[anchor=base,above=2ex,above=1ex] {\( x \)};
  \draw[red] (A) node[anchor=base,above=10cm,above=1ex] {\( \quad x \)};
  \draw[blue] (A) node[anchor=base,above=3ex] {\( O \)};
\end{tikzpicture}

\end{document}

答案2

我想提出其他几种可能性。

  1. 使用labels。这就是它们存在的原因。
  2. 如果您的“标签”仅使用rectangle形状(默认形状)并且该rectangle形状仅用于标签,则您可以使用样式every rectangle node
  3. 最后一种可能性是使用 ,every not coordinate node当节点不是 时应用coordinate。形状名称必须由 指定every not

代码

\documentclass[tikz,convert=false]{standalone}
\usetikzlibrary{positioning}
\makeatletter
\tikzset{
  every not/.code=%
    \expandafter\def\expandafter\tikz@node@begin@hook\expandafter{%
      \tikz@node@begin@hook
      \def\pgf@tempa{#1}%
      \ifx\tikz@shape\pgf@tempa\else
        \tikzset{every not \pgf@tempa\space node/.try}%
      \fi
    }
}
\makeatother
\begin{document}
\begin{tikzpicture}[demo/.style={every label/.style={label distance=3pt, label position=above}}]
   \draw[demo] (0, 0) -- coordinate[label=Label] (c1) (1,0);
   \node at (c1) [red]{x};
\end{tikzpicture}

\begin{tikzpicture}[demo/.style={every rectangle node/.style={above=3pt}}]
   \draw[demo] (0, 0) -- node {Label} coordinate (c1) (1,0);
   \node at (c1) [red]{x};
\end{tikzpicture}

\begin{tikzpicture}[demo/.style={every not=coordinate, every not coordinate node/.style={above=3pt}}]
   \draw[demo] (0, 0) -- node {Label} coordinate (c1) (1,0);
   \node at (c1) [red]{x};
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容