使用 auto=left 控制与箭头的距离

使用 auto=left 控制与箭头的距离

这是用 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}

在此处输入图片描述

相关内容