钉住顶点

钉住顶点

在此 MWE(最小工作示例)中

\RequirePackage{luatex85}
\documentclass{article}
\thispagestyle{empty}
\usepackage{tikz}
\usepackage[compat=1.1.0]{tikz-feynman}
\begin{document}
\begin{tikzpicture}
  \begin{feynman}
    \vertex (it) at (0, 0);
    \vertex (ib) at ($(it) + (1.1, 1.1)$);
    \diagram*
        {
          (it) -- [photon] (ib),
          (1, 2) -- [fermion] (ib),
        };
       \draw[->] (1, 2) -- (ib);
  \end{feynman}
\end{tikzpicture}
\end{document}

在线

\vertex (ib) at ($(it) + (1.1, 1.1)$);
\draw[->] (1, 2) -- (ib);

可以看出 tikz 在定义坐标方面的灵活性。然而,第 3(1,2)行的即时坐标

(1, 2) -- [fermion] (ib),

不被接受。

尽管如此,我们仍然非常希望在 的范围内定义坐标并执行坐标运算\diagram

有什么建议么?

答案1

\diagram来自的(和\diagram*)命令费曼加拿大运输安全局)使用graphdrawingTi 的库Z 使用算法来确定节点的位置。这些算法无法处理纯坐标,因此不幸的是,永远不可能有

\diagram* {
  (1, 2) -- (i1),
};

话虽如此,这里有两种可能对您有帮助的替代方案。

钉住顶点

可以用 给算法一个关于顶点最终位置的提示desired at=<coordinate>;然而,有些算法不支持这一点,并且会完全忽略该提示。

为了更有力,可以使用nail at=<coordinate>不仅向算法提供提示,而且忽略底层算法计算的坐标并用指定的坐标覆盖它。由于这是一种相当蛮力的方法,它可能会导致一些令人惊讶的结果。

下面是按键操作的示例,它完全指定了所有内容,以便为玻色子线创建轻微倾斜:

\RequirePackage{luatex85}
\documentclass[tikz, border=10pt]{standalone}

\usepackage[compat=1.1.0]{tikz-feynman}

\begin{document}
\begin{tikzpicture}
  \begin{feynman}
    \diagram {
      i1 [nail at={(-2, 1)}]
      -- [fermion] a
      -- [fermion] i2 [nail at={(-2, -1)}],
      a [nail at={(-1, 0.2)}] -- [boson] b [nail at={(1, -0.2)}],
      f1 [nail at={(2, 1)}]
      -- [fermion] b
      -- [fermion] f2 [nail at={(2, -1)}],
    };
  \end{feynman}
\end{tikzpicture}
\end{document}

输出

请注意,由于坐标有逗号,,因此必须将坐标括在括号中,{}否则 TiZ 会将逗号理解为表示下一个选项的开始。

正如您所看到的,由于所有额外的坐标,这很快就会变得非常混乱,而且我认为这并不比事先使用该命令带来太大的改进\vertex

轻推顶点

如果你真正感兴趣的是对某些顶点进行一些小的调整,那么可以使用nudge命令系列来指定这些调整(参见 PGF/Ti 的 §27.6Z 手动)。这仍然使用算法自动计算的坐标,但在绘制所有内容之前会稍微移动坐标。

创建与上图类似的图表的轻推操作示例:

\RequirePackage{luatex85}
\documentclass[tikz, border=10pt]{standalone}

\usepackage[compat=1.1.0]{tikz-feynman}

\begin{document}
\feynmandiagram [horizontal=a to b] {
  i1 -- [fermion] a -- [fermion] i2,
  a [nudge up=0.2cm] -- [boson] b [nudge down=0.2cm],
  f1 -- [fermion] b -- [fermion] f2,
};
\end{document}

输出

相关内容