我需要为我的研究论文绘制一些费曼图。虽然我有一些使用 PSTricks 绘图的经验,但绘制费曼图仍然不是一件容易的事。有人可以提供一些技巧让它更容易吗?提前谢谢!
答案1
评论
这是使用包\pssin
中的命令pst-coil
和包ArrowInside
中的选项的最小工作示例pstricks-add
。
这种实现方式有一个很大的缺点:缩短线时无法保留正弦的频率。无论线的实际长度如何,该命令始终会绘制与参数中给出的周期数相同的周期数。比较:\pssin[periods=5](0,0)(2,0)
和\pssin[periods=5](0,0)(8,0)
。
示例
用 编译xelatex
。
1.)
受到 g.kov 的回答的启发,我添加了一些标签。
执行
\documentclass[border=3mm]{standalone}
\usepackage{pstricks-add}
\usepackage{pst-coil}
\begin{document}
\psset{arrowscale=2}
\begin{pspicture}(-1.5,-1.5)(4.5,1.5)
% Particles
\psline[ArrowInside=->](-1,-1)(0,0)
\psline[ArrowInside=->](0,0)(-1,1)
\pssin[periods=9,amplitude=0.1,coilarm=0](0,0)(3,0)
\psline[ArrowInside=->](4,-1)(3,0)
\psline[ArrowInside=->](3,0)(4,1)
% Labels
\uput[45](-0.5,0.5){$k'$}
\uput[-45](-0.5,-0.5){$k$}
\uput[135](-1,1){$e^+$}
\uput[225](-1,-1){$e^-$}
\uput[-90](1.5,0){$q$}
\uput[135](3.5,0.5){$q'$}
\uput[225](3.5,-0.5){$q$}
\uput[45](4,1){$\mu^+$}
\uput[-45](4,-1){$\mu^-$}
% Arrows
\psline{->}(-1,0.6)(-0.5,0.1)
\psline{->}(3.5,-0.1)(4,-0.6)
\psline{->}(1,0.3)(2,0.3)
\end{pspicture}
\end{document}
输出
2.)
执行
\documentclass[border=3mm]{standalone}
\usepackage{pstricks-add}
\usepackage{pst-coil}
\begin{document}
\psset{arrowscale=2}
\begin{pspicture}(-1,-1)(4,1)
\psline[ArrowInside=->](-1,-1)(0,0)
\psline[ArrowInside=->](0,0)(-1,1)
\pssin[periods=3,amplitude=0.1,coilarm=0](0,0)(1,0)
%No ArrowInside for \psarc :(
\psarc(1.5,0){0.5}{0}{180}\psarc{->}(1.5,0){0.5}{0}{100}
\psarc(1.5,0){0.5}{180}{360}\psarc{->}(1.5,0){0.5}{180}{280}
\pssin[periods=3,amplitude=0.1,coilarm=0](2,0)(3,0)
\psline[ArrowInside=->](4,-1)(3,0)
\psline[ArrowInside=->](3,0)(4,1)
\end{pspicture}
\end{document}
输出
3.)
执行
正如您在屏幕截图中看到的,\pscoil
事情有点棘手。
\documentclass[border=3mm]{standalone}
\usepackage{pstricks-add}
\usepackage{pst-coil}
\begin{document}
\psset{arrowscale=2}
\begin{pspicture}(0,0)(3,-4)
\psline[ArrowInside=->](0,0)(1,-1)
\psline[ArrowInside=->](2,-1)(3,0)
\pssin[periods=3.5,amplitude=0.1,coilarm=0](1,-1)(2,-1)
\psline[ArrowInside=->](1,-1)(1.5,-2)
\psline[ArrowInside=->](1.5,-2)(2,-1)
\pscoil[coilwidth=0.2,coilarm=0](1.5,-2)(1.5,-3)
\psline[ArrowInside=->](0,-4)(1.5,-3)
\psline[ArrowInside=->](1.5,-3)(3,-4)
\end{pspicture}
\end{document}
输出
答案2
还有一个Asymptote
模块feynman
可能很有趣。这是eetomumu.asy
发行版中的一个示例演示:
import feynman;
// set default line width to 0.8bp
currentpen = linewidth(0.8);
// scale all other defaults of the feynman module appropriately
fmdefaults();
// define vertex and external points
real L = 50;
pair zl = (-0.75*L,0);
pair zr = (+0.75*L,0);
pair xu = zl + L*dir(+120);
pair xl = zl + L*dir(-120);
pair yu = zr + L*dir(+60);
pair yl = zr + L*dir(-60);
// draw propagators and vertices
drawFermion(xu--zl);
drawFermion(zl--xl);
drawPhoton(zl--zr);
drawFermion(yu--zr);
drawFermion(zr--yl);
drawVertex(zl);
drawVertex(zr);
// draw momentum arrows and momentum labels
drawMomArrow(xl--zl, Relative(left));
label(Label("$k'$",2RightSide), xl--zl);
label(Label("$k$",2LeftSide), xu--zl);
drawMomArrow(zl--zr, Relative(left));
label(Label("$q$",2RightSide), zl--zr);
drawMomArrow(zr--yu, Relative(right));
label(Label("$p'$",2LeftSide), zr--yu);
label(Label("$p$",2RightSide), zr--yl);
// draw particle labels
label("$e^-$", xu, left);
label("$e^+$", xl, left);
label("$\mu^+$", yu, right);
label("$\mu^-$", yl, right);