LaTex 的费曼图

LaTex 的费曼图

我用油漆绘制了以下图案:

在此处输入图片描述

我需要用 LaTex 替换它。我搜索了这个网站,找到了一些关于使用 LateX 绘制费曼图的信息,但没有一个与我的图表相匹配。任何帮助或其他材料或网站的链接都值得赞赏。

编辑

我对左侧的尝试:

\documentclass{standalone}
\usepackage{tikz-feynman,contour}
\begin{document}
\begin{tikzpicture}
\begin{feynman}

\vertex[blob] (m) at ( 0, 0) {};
\vertex (a) at (-1,-2) {};
\vertex (b) at ( 1,-2) {};
\vertex (c) at (-1, 2) {};
\vertex (d) at ( 1, 2) {};
\diagram* {
    (a) -- [photon,edge label=$q_2$] (m) -- [photon,edge   label=$q_1$] (c),
    (b) -- [plain,edge label'=$p_2$] (m) -- [plain, edge label'=$p_1$] (d),
  };
\end{feynman}

\end{tikzpicture}
\end{document}

结果是

在此处输入图片描述

但是,我无法重现我用油漆绘制的图形。

答案1

tikz我建议学习ctan.org,因为它可能提供了您需要的一切。以下是使用包时的一些示例,用于扩充或替换代码tikz-feynman

  • 不需要轮廓
  • tikz没有明确包括:tikz-feynman是吗?所以它基于tikz
  • 你可能想要添加 tikzlibraries
  • (1)是你的原始代码
  • (2)将第一个替换\vertex为空\node:你可以将两个包合并起来
  • (3)将圆形变为蓝色,无需进一步调整
  • (4)用一个笨拙的黑色矩形做同样的事情
  • (5)连接\node两个
  • 改变路径或光子等的颜色很容易,但没有显示

您可能希望从 tikz 的简单介绍开始,然后仔细查看大型手册(或搜索此网站)。decoration您可能对 tikz 中的 -lib 感兴趣。像上一个示例一样,将文本放在路径上也很容易做到。

例子

\documentclass[border=3mm]{standalone}
\usepackage{tikz-feynman}% not needed: ,contour}
\usetikzlibrary{shapes.geometric}

\begin{document}
    % ~~~ (1) your code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    \begin{tikzpicture}
        \begin{feynman}
            \vertex[blob] (m) at ( 0, 0) {};
            \vertex (a) at (-1,-2) {};
            \vertex (b) at ( 1,-2) {};
            \vertex (c) at (-1, 2) {};
            \vertex (d) at ( 1, 2) {};
            \diagram* {
                (a) -- [photon,edge label=$q_2$] (m) 
                    -- [photon,edge   label=$q_1$] (c),
                (b) -- [plain,edge label'=$p_2$] (m) 
                    -- [plain, edge label'=$p_1$] (d),
              };
        \end{feynman}   
    \end{tikzpicture}
    
    % ~~~ (2) just replacing a vertex by an empty node ~~~~~~~~~~~~~~~~~~~~~~
    \tikz{% equivalent
        \begin{feynman}
            \node (m) at ( 0, 0) {};
            \vertex (a) at (-1,-2) {};
            \vertex (b) at ( 1,-2) {};
            \vertex (c) at (-1, 2) {};
            \vertex (d) at ( 1, 2) {};
            \diagram* {
                (a) -- [photon,edge label=$q_2$] (m) 
                    -- [photon,edge   label=$q_1$] (c),
                (b) -- [plain,edge label'=$p_2$] (m) 
                    -- [plain, edge label'=$p_1$] (d),
              };
        \end{feynman}   
    }   
    
    % ~~~ (3) making said node a circle ~~~~~~~~~~~~~~~~~~~~~~
    \tikz{% equivalent
        \begin{feynman}
            \node[shape=circle,fill=blue] (m) at ( 0, 0) {};
            \vertex (a) at (-1,-2) {};
            \vertex (b) at ( 1,-2) {};
            \vertex (c) at (-1, 2) {};
            \vertex (d) at ( 1, 2) {};
            \diagram* {
                (a) -- [photon,edge label=$q_2$] (m) 
                    -- [photon,edge   label=$q_1$] (c),
                (b) -- [plain,edge label'=$p_2$] (m) 
                    -- [plain, edge label'=$p_1$] (d),
              };
        \end{feynman}   
    }   
    
    % ~~~ (4) making said node a rectangle ~~~~~~~~~~~~~~~~~~~~~~
    \tikz{% equivalent
        \begin{feynman}
            \node[shape=rectangle,fill=black] (m) at ( 0, 0) {Rectangle\vrule width 1pt height 2cm};
            \vertex (a) at (-1,-2) {};
            \vertex (b) at ( 1,-2) {};
            \vertex (c) at (-1, 2) {};
            \vertex (d) at ( 1, 2) {};
            \diagram* {
                (a) -- [photon,edge label=$q_2$] (m) 
                    -- [photon,edge   label=$q_1$] (c),
                (b) -- [plain,edge label'=$p_2$] (m) 
                    -- [plain, edge label'=$p_1$] (d),
              };
        \end{feynman}   
    }
    
    % ~~~ (5) connecting two nodes ~~~~~~~~~~~~~~~~
    \tikz{
        \node[shape=circle,fill=blue] (m) at ( 0, 0) {};
        \node[shape=circle,fill=red]  (q) at ( 2, 0) {};
        
        \draw  (m) to [bend left=45] (q);
        \draw  (m) to [bend right=85] (q);
    }
    
\end{document}

来自评论:当然,你可以将 tikz-commands 与 tikz-feynman 一起使用。这是一个有趣的演示:

奇怪的费曼

\documentclass[border=3mm]{standalone}
\usepackage{tikz-feynman}% not needed: ,contour}
\usetikzlibrary{shapes.geometric}

\begin{document}
    % ~~~ some variations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    \begin{tikzpicture}
        \begin{feynman}
            \vertex[blob] (m) at ( 0, 0) {};
            \vertex (a) at (-1,-1) {};% <<< changed y-coordinate
            \vertex (b) at ( -60:1cm) {};%<<< switched to polar: -60 deg, 1 cm radius
            \vertex (c) at (-1, 2) {};
            \vertex (d) at ( 1, 2) {};
            \diagram* {
                (a) -- [photon,bend left=72,edge label=$q_2$] (m) % <<< funny bend
                    -- [photon,edge   label=$q_1$] (c),
                (b) -- [plain,color=red,edge label'=$p_2$] (m) %<<< some color
                    -- [plain, edge label'=$p_1$] (d),
              };
        \end{feynman}   
    \end{tikzpicture}

\end{document}

答案2

关于插入 (a)、= 和 + 一起的评论有资格获得新的答案。

你可以做的一件事就是将任何\tikz{}语句视为一封复杂的信件。因此,你可以在里面写类似这样的内容document-environment

(a) \tikz{} = \tikz{} + \tikz{}

但是,所有这些“字符”都会与底部对齐,就像排版中的字符一样。要解决这个问题,有几种选择,例如:

  • 将 (a)、= 和 + 提高一定量
  • 使用垂直对齐的表格(第一列(a),第二列 \tikz{} 等)

其中tikz一种方法是:

  • 定义几张图片
  • 在(水平)路径上绘制它们

该示例演示了这种方法以及您在使用图片时可能遇到的问题。因此代码:

  • 首先定义 3 个费曼图
  • 定义 3 个文本元素 (a)、= 和 +
  • 将它们绘制在一条路径上的绝对位置上

不过,可能还有更优雅的方式来做到这一点。

演示

\documentclass[border=3mm]{standalone}
\usepackage{tikz-feynman}% not needed: ,contour}
\usetikzlibrary{shapes.geometric}

\begin{document}
% defining some pictures
% diagrams
    % ~~~ (1) your code ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    \tikzset{
        A/.pic={
        \begin{feynman}
            \vertex[blob] (m) at ( 0, 0) {};
            \vertex (a) at (-1,-1) {};\vertex (b) at ( -60:1cm) {};
            \vertex (c) at (-1, 2) {};
            \vertex (d) at ( 1, 2) {};
            \diagram* {
                (a) -- [photon,edge label=$q_2$] (m) 
                    -- [photon,edge   label=$q_1$] (c),
                (b) -- [plain,edge label'=$p_2$] (m) 
                    -- [plain, edge label'=$p_1$] (d),
              };
        \end{feynman}
        }
    }
        
    % ~~~ (3) making said node a circle ~~~~~~~~~~~~~~~~~~~~~~
    \tikzset{
        B/.pic={
        \begin{feynman}
            \node[shape=circle,fill=blue] (m) at ( 0, 0) {};
            \vertex (a) at (-1,-2) {};
            \vertex (b) at ( 1,-2) {};
            \vertex (c) at (-1, 2) {};
            \vertex (d) at ( 1, 2) {};
            \diagram* {
                (a) -- [photon,edge label=$q_2$] (m) 
                    -- [photon,edge   label=$q_1$] (c),
                (b) -- [plain,edge label'=$p_2$] (m) 
                    -- [plain, edge label'=$p_1$] (d),
              };
        \end{feynman}
        }
    }   
    
    % ~~~ (4) making said node a rectangle ~~~~~~~~~~~~~~~~~~~~~~
    \tikzset{
        C/.pic={
        \begin{feynman}
            \node[shape=rectangle,fill=black] (m) at ( 0, 0) {Rectangle\vrule width 1pt height 2cm};
            \vertex (a) at (-1,-2) {};
            \vertex (b) at ( 1,-2) {};
            \vertex (c) at (-1, 2) {};
            \vertex (d) at ( 1, 2) {};
            \diagram* {
                (a) -- [photon,edge label=$q_2$] (m) 
                    -- [photon,edge   label=$q_1$] (c),
                (b) -- [plain,edge label'=$p_2$] (m) 
                    -- [plain, edge label'=$p_1$] (d),
              };
        \end{feynman}
        }
    }

% texts 
    \tikzset{t1/.pic={\node {(a)};}}
    \tikzset{t2/.pic={\node {=};}}
    \tikzset{t3/.pic={\node {+};}}


\tikz{
% drawing them all together
    \draw        pic{t1} -- (2,0) pic{A} -- 
         (3.5,0) pic{t2} -- (5,0) pic{B} -- 
         (6.5,0) pic{t3} -- (8,0) pic{C}
    ;
}   
    
\end{document}

相关内容