我正在尝试重现 Hartree-Fock 自能的费曼图,它由两个项(交换和库仑)组成,如下图所示:
我试过下面的代码,第二项没问题,但第一项还差一半就得到不错的结果了。为什么我不能将点 c 固定在与 ab 相同的轴上,将点 cd 固定在其正交轴上,如上图所示?
有人能建议如何将气泡放在正确的位置并在上面放置箭头吗?欢迎提出任何其他建议。
非常感谢
\documentclass{standalone}
\usepackage{tikz-feynman,contour}
\begin{document}
\begin{tikzpicture}
\begin{feynman}
\coordinate (a);
\coordinate[left=1cm of a] (b);
\coordinate[left=1cm of b] (c);
\coordinate[top=1.0cm of c] (d);
\diagram* {
a --[fermion] b[dot];
b --[photon] d;
b --[fermion] c;
};
\end{feynman}
\draw[arc arrow={to pos 0.1 with length 2mm}] (d) arc(0:360:0.5);
\end{tikzpicture}
\begin{tikzpicture}
\begin{feynman}
\coordinate (a);
\coordinate[left=1cm of a] (b);
\coordinate[left=2.0cm of b] (c);
\coordinate[left=4.0cm of a] (d);
\diagram* {
a -- b[dot] -- [photon, half left] c[dot] -- d,
b -- [fermion] c };
\end{feynman}
\end{tikzpicture}
\end{document}
答案1
基于塞巴斯蒂亚诺的回答这个答案,我可以得到更好但不完整的结果。 我不得不:
- 使用 lulatex 进行编译
feynman
从内部移除环境tikzpicture
- 我定义了一种
photon1/.style={decorate, decoration={snake}, draw=black}
风格\tikzset
(我试图修改波幅=0.3mm 和波数=10,但我无法使这些等于风格photon
)。
我还需要:
- 使两个光子看起来相同
- 旋转气泡并将其与光子边缘的顶部对齐(我现在添加了另一个点
e
,可能只需使用正确的选项即可修复它d
) - 在气泡中添加两个箭头
下面是代码的更新版本。
谢谢
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes,arrows,positioning,automata,backgrounds,calc,er,patterns}
\usepackage{tikz-feynman}
\tikzfeynmanset{compat=1.1.0}
% adapted from https://tex.stackexchange.com/a/160358/21344; changed photon style
\tikzset{
fermion/.style={draw=black, postaction={decorate},decoration={markings,mark=at position .55 with {\arrow{Latex}}}},
vertex/.style={draw,shape=circle,fill=black,minimum size=2pt,inner sep=0pt},
photon/.style={wavy semicircle,wave amplitude=0.3mm,wave count=10},
photon1/.style={decorate, decoration={snake}, draw=black}
}
% adapted from https://tex.stackexchange.com/a/89003/21344; swapped atan args
\newif\ifmirrorsemicircle
\tikzset{
wave amplitude/.initial=0.2cm,
wave count/.initial=8,
mirror semicircle/.is if=mirrorsemicircle,
mirror semicircle=false,
wavy semicircle/.style={
to path={
let \p1 = (\tikztostart),
\p2 = (\tikztotarget),
\n1 = {veclen(\y2-\y1,\x2-\x1)},
\n2 = {atan2(\x2-\x1,\y2-\y1))} in
plot [
smooth,
samples=(\pgfkeysvalueof{/tikz/wave count}+0.5)*8+1, % Calculate the number of samples needed, so the samples are in sync with the wave and fall on the extrema
domain=0:1,
shift={($(\p1)!0.5!(\p2)$)}
] ({ % Polar coordinates: Angle...
(\x*180-\n2 + 180 + \ifmirrorsemicircle 1 \else -1 \fi * 90%
}:{ % ... and radius
(%
\n1/2+\pgfkeysvalueof{/tikz/wave amplitude} * %
sin(
\x * 360 * (\pgfkeysvalueof{/tikz/wave count} + 0.5%
)%
)%
})
} (\tikztotarget)
}
}
\begin{document}
\begin{tikzpicture}
\coordinate (i);
\coordinate[vertex, right=of i] (v1);
\coordinate[vertex, right=of v1] (v2);
\coordinate[right=of v2] (o);
\draw (i) -- (v1);
\draw[fermion] (v1) -- (v2);
\draw[photon] (v1) to (v2);
\draw (v2) -- (o);
\end{tikzpicture}
+
\begin{tikzpicture}
\coordinate (a);
\coordinate[vertex, right=of a] (b);
\coordinate[vertex, right=of b] (c);
\coordinate[vertex, above=of b] (d);
\coordinate[vertex, above=of d] (e);
\draw [fermion] (a) -- (b);
\draw [fermion] (b) -- (c);
\draw [photon1] (b) to (d);
\draw [arc arrow={to pos 0.0 with length 1mm}] (e) arc(0:360:0.4);
\end{tikzpicture}
\end{document}
答案2
这是半个答案:你的原始绘图是用feynMF
包。
feynMF
使用METAFONT(或METAPOST)。
这里您可以看到第 30 页的示例,其中有带箭头的相同循环。这是 1996 年的旧包装。
现在我建议看一下这个链接:Tikz,装饰品或者排版费曼图的包(“feynmp”和“tikz”的效率)其中它用于费曼图:
TikZ-Feynman
包。
附录:如果你喜欢用 flash 来绘制图像,可以使用费恩游戏Java 中绘制费曼图的工具,仅适用于 Linux 和 MacOS。