我有以下代码:
\documentclass[border=3mm]{standalone}
\usepackage{tikz-feynman}
\usetikzlibrary{shapes.geometric}
\usepackage{amsmath}
\begin{tikzpicture}
\begin{feynman}
\node[shape=circle,draw=black, inner sep=0pt,minimum size=20pt] (m) at ( 0, 0) {};
\node[shape=rectangle,fill=black] (n) at (3, 0) {square };
\vertex (a) at ( 210:2cm) {};
\vertex (b) at ( -30:2cm) {};
\vertex (c) at (150:2cm) {};
\vertex (d) at (30:2cm) {};
\diagram* {
(a) -- [photon,edge label'=$q_2$] (m)
-- [photon,edge label'=$q_1$] (c),
(n) -- [bend left=45, edge label=$\pi^+(K^+)$] (m)
-- [bend left=45, edge label=$\pi^-(K^-)$] (n),
};
\end{feynman}
\end{tikzpicture}
\end{document}
生成结果:
我有三个问题:
怎样才能将长方形变成正方形呢?
如何才能使曲线从左边的两个顶点进入正方形?
我们如何才能从右边正方形的另外两个顶点创建两条直线?
感谢您的帮助!
答案1
- 现在,节点
(n)
包含文本“square”,其宽度比高度大得多。您可以通过\rule
在此处添加一个来使其成为正方形。 - 由于几何关系,上述内容也将解决这个问题...
- 您还需要两个以节点
n
为原点计算出的坐标处的顶点。我将它们称为(e)
和(f)
。
\documentclass[border=3mm]{standalone}
\usepackage{tikz-feynman}
\usetikzlibrary{shapes.geometric,calc}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}
\begin{feynman}
\node[shape=circle,draw=black,inner sep=0pt,minimum size=20pt] (m) at (0, 0) {};
\node[shape=rectangle,fill=black] (n) at (3, 0) {\rule{0.5cm}{0.5cm}};
\vertex (a) at (225:2cm) {};
\vertex (b) at (-45:2cm) {};
\vertex (c) at (135:2cm) {};
\vertex (d) at (45:2cm) {};
\vertex (e) at ($(n) + (-45:2cm)$) {};
\vertex (f) at ($(n) + (45:2cm)$) {};
\diagram*{
(a) -- [photon,edge label'=$q_2$] (m)
-- [photon,edge label'=$q_1$] (c),
(n) -- [bend left=45, edge label=$\pi^+(K^+)$] (m)
-- [bend left=45, edge label=$\pi^-(K^-)$] (n),
(e) -- (n) -- (f),
};
\end{feynman}
\end{tikzpicture}
\end{document}
我还将线条的角度改为 45 度,而不是 30 度,否则离开黑色方块的线条将不会落在顶点上(同样,因为几何原因)。
结果如下所示: