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.
#import "@preview/cetz:0.5.2": canvas, draw
#import draw: arc, circle, content, group, line, translate
#set page(width: auto, height: auto, margin: 8pt, fill: none)
#set text(size: 12pt)
#canvas({
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),
)
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
// Regulator insertion: a circled cross on an opaque gray disc.
content(
"loop." + cross-pos,
text(size: 16pt, baseline: -0.5pt)[$times.o$],
stroke: none,
fill: rgb("#cdd3da"),
frame: "circle",
padding: -2.5pt,
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
for (x, rel-label) in ((-radius, (-0.2, -0.2)), (radius, (0.2, -0.2))) {
vertex((x, 0), label: "g", rel-label: rel-label)
}
for (start, end) in (
((-ext-len, 0), (-radius, 0)),
((radius, 0), (ext-len, 0)),
) { line(start, end, stroke: 1pt) }
for (start, end, label-pos) in (
((-ext-len + 0.2, 0.15), (-radius - 0.2, 0.15), (-1.5 * radius, 0.3)),
((radius + 0.2, 0.15), (ext-len - 0.2, 0.15), (1.5 * radius, 0.3)),
) {
momentum-arrow(start, end, label-pos)
}
})
}
draw-diagram()
content((4, 0), text(size: 18pt)[$+$])
draw-diagram(offset: 8, cross-pos: "0%", arc-start: 220deg, arc-stop: 320deg)
})