我正在尝试绘制图表并连接节点。因为我想将标签放置在我使用的线条上方every node/.style={above=.4ex, anchor=base}
。但是有时我会coordinates
在角落处绘制,以便可以连接多条线条。但是,这些coordinates
是nodes
,因此会被命令移动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
coordinate
s 是shape
s,并且每个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 :above
above
above
coordinate
above
every 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
我想提出其他几种可能性。
- 使用
label
s。这就是它们存在的原因。 - 如果您的“标签”仅使用
rectangle
形状(默认形状)并且该rectangle
形状仅用于标签,则您可以使用样式every rectangle node
。 - 最后一种可能性是使用 ,
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}