To make such a u-channel diagram, you can use one of the algorithm to determine the locations of the vertices automatically. Here's an example I copied from the documentation for TikZ-Feynman:
\documentclass[border=1ex, tikz]{standalone}
\usepackage[compat=1.1.0]{tikz-feynman}
\begin{document}
\begin{tikzpicture}
\begin{feynman}
\diagram [vertical'=a to b] {
i1 [particle=\(e^{-}\)]
-- [fermion] a
-- [draw=none] f1 [particle=\(e^{+}\)],
a -- [photon, edge label'=\(p\)] b,
i2 [particle=\(e^{+}\)]
-- [anti fermion] b
-- [draw=none] f2 [particle=\(e^{-}\)],
};
\diagram* {
(a) -- [fermion] (f2),
(b) -- [anti fermion] (f1),
};
\end{feynman}
\end{tikzpicture}
\end{document}
Since by default the graph placement will not intersect lines, the first command (\diagram
) sets up the general structure, and the second command (\diagram*
) draws crossed lines. Note that this layout is fairly tight, and adding momentum arrows is difficult without become very cluttered.
This is can be more easily fine-tuned if you use manual placements of the vertices (as you did), especially given that you can specify the separation between vertices with:
below=<distance> of <node>
or
above right=<distance> and <distance> of <node>
if you wish to specify the vertical and horizontal distances.
Making use of this, you can get:
\documentclass[border=1ex, tikz]{standalone}
\usepackage[compat=1.1.0]{tikz-feynman}
\begin{document}
\begin{tikzpicture}
\begin{feynman}[large]
\vertex (a);
\vertex [below =of a] (b);
\vertex [above left=of a] (i1) {\(e^{-}\)};
\vertex [below left =of b] (i2) {\(e^{-}\)};
\vertex [right =4cm of i2] (f1) {\(e^{-}\)};
\vertex [right =4cm of i1] (f2) {\(e^{-}\)};
\diagram* {
(i1) -- [fermion, momentum'=\(p_{1}\)] (a)
-- [fermion, momentum={[arrow shorten=0.4]\(k_{1}\)}] (f1),
(a) -- [plain] (b),
(i2) -- [fermion, momentum=\(p_{2}\)] (b),
(b) -- [fermion, momentum'={[arrow shorten=0.4]\(k_{2}\)}] (f2),
};
\end{feynman}
\end{tikzpicture}
\end{document}
Note that I changed the naming scheme you used for the nodes so that instead of a, b, c, ...
, I used i1, i2
for initial states, f1, f2
for final states, and a, b
for the internal vertices.
I have adapted the example I made in another question you asked. I didn't include the nudging here to make the code a bit clearer (but you can add it back in easily).
I also took the liberty of cleaning up the way the diagram is created, I hope you don't mind :) It should make it a bit simpler and a bit easier.
Now, the algorirthm will, be default, avoid having lines crossing over. As a result, to draw the diagram you want, you'll have to either manually specify the location of vertices or do it in two steps. I've shown below how it can be done in two steps, and I've commented the code to explain what part does what. I hope it's clear, but feel free to comment if you need some clarifications.
\documentclass[tikz,border=10pt]{standalone}
\usepackage[compat=1.1.0]{tikz-feynman}
\begin{document}
\feynmandiagram [
baseline={(current bounding box.center)},
vertical'=a to b,
] {
%% Instead of having to specify `fermion` over and over, group them
%% together.
{[edges={fermion}]
a -- [edge label'=\(k_{1}\)] b [label=0:\(\mu_{2}\)]
-- [edge label'=\(k_{2}\)] c [label=-180:\(\mu_{3}\)]
-- [edge label'=\(k_{3}\)] d [label=-180:\(\mu_{4}\)]
-- [edge label'=\(k_{4}\)] a [label=0:\(\mu_{1}\)],
},
{[edges={photon}]
%% Sometimes, the algorithms gets stuck when trying to figure out the final
%% layout, hence why I'm switching the order of d and c below.
a -- ap [particle=\(p_{1}\)],
b -- bp [particle=\(p_{2}\)],
d -- dp [particle=\(p_{4}\)],
c -- cp [particle=\(p_{3}\)],
},
};
\begin{tikzpicture}[baseline={(current bounding box.center)}]
\begin{feynman}
%% Just like before, we create the internal box of fermion lines, but this
%% time we use `draw=none` so they are invisible.
\diagram [vertical'=a to b] {
{[edges={draw=none}]
a -- b [label=0:\(\mu_{2}\)]
-- c [label=-180:\(\mu_{3}\)]
-- d [label=-180:\(\mu_{4}\)]
-- a [label=0:\(\mu_{1}\)],
},
{[edges={photon}]
%% Sometimes, the algorithms gets stuck when trying to figure out the final
%% layout, hence why I'm switching the order of d and c below.
a -- ap [particle=\(p_{1}\)],
b -- bp [particle=\(p_{2}\)],
d -- dp [particle=\(p_{4}\)],
c -- cp [particle=\(p_{3}\)],
},
};
%% We now need to add in the fermion lines. Since we just want to connect
%% existing vertices, we use the `\diagram*` command. The parentheses are
%% important as it tells the algorithm that these vertices exist already
%% (instead of trying to create new ones).
\diagram* {
(a) -- [fermion] (b)
-- [fermion] (d)
-- [fermion] (c)
-- (a), %% No fermion line hear as it looks weird with the two arrows
%% overlapping.
};
\end{feynman}
\end{tikzpicture}
\end{document}
Best Answer
You have to enclose the expression that contains the equality sign in braces, otherwise the equality sign is mixed up with the equality signs separating keywords and values.