在此 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*
)命令钛钾费曼(加拿大运输安全局)使用graphdrawing
Ti 的库钾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}
请注意,由于坐标有逗号,
,因此必须将坐标括在括号中,{}
否则 Ti钾Z 会将逗号理解为表示下一个选项的开始。
正如您所看到的,由于所有额外的坐标,这很快就会变得非常混乱,而且我认为这并不比事先使用该命令带来太大的改进\vertex
。
轻推顶点
如果你真正感兴趣的是对某些顶点进行一些小的调整,那么可以使用nudge
命令系列来指定这些调整(参见 PGF/Ti 的 §27.6钾Z 手动)。这仍然使用算法自动计算的坐标,但在绘制所有内容之前会稍微移动坐标。
创建与上图类似的图表的轻推操作示例:
\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}