这是用 tikz 绘制的最小图,将边缘节点放置在auto=left
:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\node at (0,0) (A) {A};
\node at (2,1) (B) {B};
\node at (3,0) (C) {C};
\path[->] (A) edge node[auto=left] {x} (B);
\path[->] (B) edge node[auto=left] {y} (C);
\path[->] (C) edge node[auto=left] {z} (A);
\end{tikzpicture}
\end{document}
但是,边缘节点 (x、y、z) 距离箭头的距离比我想要的要远。我该如何调整这个距离?
要清楚:我不想手动微调每个边缘标签的位置。(例如,我不想使用“上方”、“下方”等来将它们放置在相对于线的中点的位置,因为这必须为每个标签单独指定。)相反,我想使用auto=left
/auto=right
或等效功能,但只是让它将标签放置在离边缘更近一点的地方。这是因为我的图是自动生成的,我无法手动调整每个图。
答案1
对于 TikZ,anode
是包含文本的框。此默认框是矩形的。如果它完美地框住文本,框的边缘就会接触文本,这是不美观的。
默认情况下,TikZ 会在文本和框边缘之间留出一个空格,该空格由长度 ìnner sep 定义(最初为0.3333em
)。
\documentclass{article}
\usepackage{tikz}
\usepackage{amsmath}
%\tikzset{every node/.style={draw}}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\node at (0,0) (A) {A};
\node at (2,1) (B) {B};
\node at (3,0) (C) {C};
\path[->] (A) edge node[auto=left,draw,inner sep=3em] {x} (B);
\path[->] (B) edge node[auto=left,draw] {y} (C);
\path[->] (C) edge node[auto=left,draw,inner sep=0em] {z} (A);
\end{scope}
\begin{scope}[xshift=6cm]
\node at (0,0) (A) {A};
\node at (2,1) (B) {B};
\node at (3,0) (C) {C};
\path[->] (A) edge node[blue,auto=left,draw,inner sep=3em,label={[blue,above]:$\text{inner sep}=3em$}](bigx) {x} (B);
\node[inner sep=0pt](smallx) at (bigx){x};
\draw[|<->,red] (smallx.west)--(bigx.west)node[midway,below,font=\footnotesize]{$3em$};
\path[->] (B) edge node[red,auto=left,draw,label={[red,above right,align=center]:initially\\$\text{inner sep}=0.3333em$}] {y} (C);
\path[->] (C) edge node[violet,auto=left,draw,inner sep=0em,label={[violet,below,yshift=-5pt]:$\text{inner sep}=0em$}] {z} (A);
\end{scope}
\end{tikzpicture}
\end{document}
当节点为圆时,该圆为限制的到默认绘制的矩形节点。
\documentclass[border=5mm,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[]
\node[draw=red] (a) at (0,0){A};
\node[draw=blue,circle] (a) at (0,0){A};
\node[align=center,font=\tiny] at (0,-.8) {same node with \textcolor{blue}{circle}\\ and \textcolor{red}{rectangular} shape};
\end{tikzpicture}
\end{document}
答案2
我相信你指的是边缘/箭头上方的标签
每个标签都被定义为一个节点——节点周围总是有一些由键定义的保留空间inner sep
可以在开始时全局设置键,包括自动键,以便将标签和所有节点移动到靠近边缘/或更远
\begin{tikzpicture}[inner sep=1pt,auto=left, node distance=2cm,>=latex']
....
\end{tikzpicture}
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows,positioning}
\begin{document}
\begin{tikzpicture}[inner sep=1pt,auto=left, node distance=2cm,>=latex']
\node at (0,0) (A) {A};
\node at (2,1) (B) {B};
\node at (3,0) (C) {C};
\path[->] (A) edge node {x} (B);
\path[->] (B) edge node{y} (C);
\path[->] (C) edge node {z} (A);
\end{tikzpicture}
\end{document}
更好的选择是将标签定义为标签而不是节点 - 请参阅我的答案 -
https://tex.stackexchange.com/a/558016/197451
修改后的相同代码(无需inner sep
调用)
\begin{tikzpicture}[]
\node at (0,0) (A) {A};
\node at (2,1) (B) {B};
\node at (3,0) (C) {C};
\path[draw] (A) edge[->] node [pos=0.5, above, sloped,](){x} (B);
\path[draw] (B) edge[->] node [midway, label={[label distance=-13pt,
rotate=45]135:$y$}](){}(C);
\path[draw] (C) edge[->] node [midway, label={[label distance=-6pt,
rotate=0]-90:z}](){} (A);
\end{tikzpicture}