Two Feynman diagrams showing loop corrections to a propagator. Each diagram contains a loop with momentum q₀ and two external lines with coupling g. The loops include mass terms m₁², m₂² and width terms γ₁², γ₂². The diagrams differ in the position of the regulator insertion (cross marker) which appears at the bottom vertex in the first diagram and at the top in the second.
\documentclass[tikz,svgnames]{standalone}
\usetikzlibrary{patterns}
\begin{document}
\begin{tikzpicture}[
very thick,
q0/.style={->,DarkBlue,semithick,yshift=5pt,shorten >=5pt,shorten <=5pt},
cross/.style={
path picture={
\draw[black,thick]
(path picture bounding box.south east) -- (path picture bounding box.north west)
(path picture bounding box.south west) -- (path picture bounding box.north east);
}
}
]
% Loop
\def\radius{1.5}
\draw (0,0) circle (\radius);
\node[above] (1) at (0,\radius) {$m_1^2$, $\gamma_1^2$};
\node[below] (2) at (0,-\radius) {$m_2^2$, $\gamma_2^2$};
\draw[q0] (140:0.75*\radius) arc (140:40:0.75*\radius) node[midway,below] {$q_0$};
\draw[fill=white,cross,thick] (0,-\radius) circle (4pt);
% External lines
\filldraw
(-2*\radius,0) -- (-\radius,0) circle (2pt) node[below left] {$g$}
(\radius,0) circle (2pt) node[below right] {$g$} -- (2*\radius,0);
\draw[q0] (-2*\radius,0) -- (-\radius,0) node[midway,above] {$q_0$};
\draw[q0] (\radius,0) -- (2*\radius,0) node[midway,above] {$q_0$};
\node[xshift=4cm,scale=1.5] at (0,0) {$+$};
\begin{scope}[xshift=8cm]
% Loop
\def\radius{1.5}
\draw (0,0) circle (\radius);
\node[above=3pt] (1) at (0,\radius) {$m_1^2$, $\gamma_1^2$};
\node[below] (2) at (0,-\radius) {$m_2^2$, $\gamma_2^2$};
\draw[q0,yshift=-10pt] (220:0.75*\radius) arc (220:320:0.75*\radius) node[midway,above] {$q_0$};
\draw[fill=white,cross,thick] (0,\radius) circle (4pt);
% External lines
\filldraw
(-2*\radius,0) -- (-\radius,0) circle (2pt) node[below left] {$g$}
(\radius,0) circle (2pt) node[below right] {$g$} -- (2*\radius,0);
\draw[q0] (-2*\radius,0) -- (-\radius,0) node[midway,above] {$q_0$};
\draw[q0] (\radius,0) -- (2*\radius,0) node[midway,above] {$q_0$};
\end{scope}
\end{tikzpicture}
\end{document}
#import "@preview/cetz:0.3.4": canvas, draw
#import draw: line, content, circle, arc, group, translate
#set page(width: auto, height: auto, margin: 8pt)
#canvas({
// Define styles and constants
let radius = 1.5
let dark-blue = rgb("#4040d9")
let arrow-style = (
mark: (end: "stealth", fill: dark-blue, scale: .5),
stroke: (paint: dark-blue, thickness: 0.75pt),
)
// Helper functions
let cross(pos, name: none) = {
content(
pos,
text(size: 16pt, baseline: -0.5pt)[$times.circle$],
stroke: none,
fill: white,
frame: "circle",
padding: -2.5pt,
name: name,
)
}
let vertex(pos, label: none, rel-label: (-0.2, -0.2)) = {
circle(pos, radius: 2pt, fill: black)
if label != none {
content((rel: rel-label, to: pos), $#label$)
}
}
let momentum-arrow(start, end, label-pos, anchor: "south") = {
line(start, end, ..arrow-style)
content(label-pos, text(fill: dark-blue)[$q_0$], anchor: anchor)
}
let draw-diagram(offset: 0, cross-pos: "50%", arc-start: 140deg, arc-stop: 40deg) = {
group({
if offset != 0 { translate((offset, 0)) }
// Main circle and labels
circle((0, 0), radius: radius, stroke: 1pt, name: "loop")
content((0, radius), $m_1^2, gamma_1^2$, anchor: "south", padding: (bottom: 7pt))
// Momentum arrow on loop
arc(
(rel: (.23, 0), to: if arc-start > 180deg { "loop.35%" } else { "loop.15%" }),
radius: 0.85 * radius,
start: arc-start,
stop: arc-stop,
..arrow-style,
name: "momentum-arrow",
)
content(
"momentum-arrow.mid",
text(fill: dark-blue)[$q_0$],
anchor: if arc-start > 180deg { "south" } else { "north" },
padding: if arc-start > 180deg { (bottom: 3pt) } else { none },
)
// Cross marker
cross("loop." + cross-pos, name: "cross")
content(
"loop.50%",
$m_2^2, gamma_2^2$,
anchor: "north",
padding: (top: 7pt),
)
// External lines and vertices
let ext-len = 2 * radius
vertex((-radius, 0), label: "g")
vertex((radius, 0), label: "g", rel-label: (0.2, -0.2))
line((-ext-len, 0), (-radius, 0), stroke: 1pt)
line((radius, 0), (ext-len, 0), stroke: 1pt)
// External momentum arrows
momentum-arrow(
(-ext-len + 0.2, 0.15),
(-radius - 0.2, 0.15),
(-1.5 * radius, 0.3),
)
momentum-arrow(
(radius + 0.2, 0.15),
(ext-len - 0.2, 0.15),
(1.5 * radius, 0.3),
)
})
}
// Draw diagrams
draw-diagram()
content((4, 0), text(size: 18pt)[$+$])
draw-diagram(
offset: 8,
cross-pos: "0%",
arc-start: 220deg,
arc-stop: 320deg,
)
})