我用油漆绘制了以下图案:
我需要用 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}