如何防止标签移动图表的其他部分

如何防止标签移动图表的其他部分

我在 Tikz 中有一个简单的图表。问题是,当我在节点外添加标签时,它会以某种方式移动图表的其他部分。例如,在下面的示例中,G由于标签而被推向左侧O

有什么方法可以告诉 Tikz 不考虑标签占用的空间并绘制图形,就好像根本没有标签一样?我尝试使用\mathllap{}。它有点帮助,但即使是空标签也会影响图表。

谢谢

在此处输入图片描述

工作示例

\documentclass[a5paper]{article}
\usepackage{tikz, mathtools}
\usetikzlibrary{
    arrows.meta,
    graphs,
    matrix,
    positioning,
}
\tikzset{
    o/.style={
      draw, circle, minimum width=5mm, minimum height=5mm, thick,
      fill=black,
    },
    u/.style={
      draw, circle, minimum width=5mm, minimum height=5mm, thick,
      fill=white
    },
    m/.style={
      draw, circle, minimum width=5mm, minimum height=5mm, thick,
      fill=black!30,
    },
}


\begin{document}

{%
\centering
  \begin{tikzpicture}
  \matrix (v) [
      matrix of math nodes,
      column sep=2.5mm,
      row sep=12mm,
  ] {
      |[u,label=above:{G}]| && |[u,label=above:{A}]| & \\
      & |[m,label=left:{\mathllap{O}}]| && |[o,label=right:{C}]| \\
      && |[o,label=below:\hat{O}]| & \\
  };
  \graph[edges={>=Latex, semithick, color=black}] {
      (v-1-1) -> (v-2-2);
      (v-1-3) -> {(v-2-2), (v-2-4)};
      (v-2-2) -> (v-3-3);
      (v-2-4) -> (v-3-3);
  };
  \end{tikzpicture}\par}

\end{document}

答案1

xscale我建议采用不同的方法。手动设置坐标并通过设置和调整间距yscale。为了缩短代码,每个节点的坐标可以放在一个列表中,其中每个条目的形式为x/y/s/l/t,其中坐标为(x,y),样式为s,标签为,l标签相对于节点的角度为t。节点会自动编号,因此可以在第二个循环中绘制箭头。完整代码如下。

在此处输入图片描述

\documentclass{article}

\usepackage{tikz}
\tikzset{
    o/.style={
      draw, circle, minimum width=5mm, minimum height=5mm, thick,
      fill=black,
    },
    u/.style={
      draw, circle, minimum width=5mm, minimum height=5mm, thick,
      fill=white
    },
    m/.style={
      draw, circle, minimum width=5mm, minimum height=5mm, thick,
      fill=black!30,
    },
}

\begin{document}

\begin{tikzpicture}[xscale=.75,yscale=1.5]
\foreach \x/\y/\s/\l/\t[count=\n] in {-2/2/u/G/90,0/2/u/A/90,-1/1/m/O/180,1/1/o/C/0,0/0/o/\hat{O}/270}
    \node[\s,label=\t:{$\l$}] (n\n) at (\x,\y){};
\foreach \a/\b in {1/3,2/3,2/4,3/5,4/5} \draw[semithick, -latex](n\a)--(n\b);
\end{tikzpicture}

\end{document}

相关内容