A simple diagram representing a scattering process in particle physics, where two incoming particles with momenta and interact and produce two outgoing particles with momenta and . The principle of detailed balance states that at equilibrium, each scattering process is in equilibrium with its reverse process.
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[
very thick,font=\huge,
col/.style={circle,draw=gray!90,fill=gray!30,minimum size=15},
incom/.style={<-,shorten <=2},
outgo/.style={->,shorten <=2}
]
\node[scale=2] (eq) at (0,0) {=};
\coordinate[col] (col1) at eq++(-4,0);
\coordinate[col] (col2) at eq++(4,0);
\draw[outgo] (col1) -- ++(2,1) node[right] {$p^\prime$};
\draw[outgo] (col1) -- ++(2,-1) node[right] {$k^\prime$};
\draw[incom] (col1) -- ++(-2,1) node[left] {$p$};
\draw[incom] (col1) -- ++(-2,-1) node[left] {$k$};
\draw[outgo] (col2) -- ++(2,1) node[right] {$p$};
\draw[outgo] (col2) -- ++(2,-1) node[right] {$k$};
\draw[incom] (col2) -- ++(-2,1) node[left] {$p^\prime$};
\draw[incom] (col2) -- ++(-2,-1) node[left] {$k^\prime$};
\end{tikzpicture}
\end{document}
#import "@preview/cetz:0.3.2": canvas, draw, coordinate
#set page(width: auto, height: auto, margin: 8pt)
#canvas({
import draw: line, content, circle
// Diagram dimensions
let circle_radius = 0.3
let circle_spacing = 3 // distance of circles from center
let arrow_length = 2
let arrow_rise = 1 // vertical displacement of arrows
let equals_size = 24pt // font size for equals sign
// Colors and styles
let arrow_style = (
mark: (start: "stealth", fill: black, scale: 0.5),
stroke: (paint: black, thickness: 1.5pt),
)
// Draw equals sign at center
content((0, 0), text(size: equals_size)[=])
// Draw circles on either side
circle((-circle_spacing, 0), radius: circle_radius, fill: gray.lighten(50%), stroke: gray, name: "left-circle")
circle((circle_spacing, 0), radius: circle_radius, fill: gray.lighten(50%), stroke: gray, name: "right-circle")
// Left node arrows and labels
line((rel: (arrow_length, arrow_rise), to: "left-circle"), "left-circle", ..arrow_style, name: "left-ne")
content("left-ne.start", $p'$, anchor: "west")
line((rel: (arrow_length, -arrow_rise), to: "left-circle"), "left-circle", ..arrow_style, name: "left-se")
content("left-se.start", $k'$, anchor: "west")
line("left-circle", (rel: (-arrow_length, arrow_rise), to: "left-circle"), ..arrow_style, name: "left-nw")
content("left-nw.end", $p$, anchor: "east")
line("left-circle", (rel: (-arrow_length, -arrow_rise), to: "left-circle"), ..arrow_style, name: "left-sw")
content("left-sw.end", $k$, anchor: "east")
// Right node arrows and labels
line((rel: (arrow_length, arrow_rise), to: "right-circle"), "right-circle", ..arrow_style, name: "right-ne")
content("right-ne.start", $p$, anchor: "west")
line((rel: (arrow_length, -arrow_rise), to: "right-circle"), "right-circle", ..arrow_style, name: "right-se")
content("right-se.start", $k$, anchor: "west")
line("right-circle", (rel: (-arrow_length, arrow_rise), to: "right-circle"), ..arrow_style, name: "right-nw")
content("right-nw.end", $p'$, anchor: "east")
line("right-circle", (rel: (-arrow_length, -arrow_rise), to: "right-circle"), ..arrow_style, name: "right-sw")
content("right-sw.end", $k'$, anchor: "east")
})