Tikz-Feynman diagrams overlapping in subfigure

floatssubfloatstikz-feynman

I want to show three Feynman diagrams next to each other. I use the subfigure environment. However, the vertex labels of the 2nd and 3rd diagram overlap. I tried to use the [scale=0.5] argument to shrink the diagrams, after \begin{tikzpicture}, but this shows no effect at all.
How can I shrink the diagrams here?

\begin{figure}[h!t]
  \centering
     \begin{subfigure}[b]{0.3\textwidth}
         \centering
         \begin{tikzpicture}
         \begin{feynman}
         \vertex (i0) {\(P,M\)};
         \vertex [right=of i0] (v0);
         \vertex [above right=of v0] (v1);
         \vertex [above right=of v1] (o0) {\(p_1,m_1\)};
         \vertex [right=of v1] (o1) {\(p_2,m_2\)};
         \vertex [below right=of v0] (o2) {\(p_3,m_3\)};
         \diagram* {
         (i0) -- [fermion] (v0) -- [fermion, edge label={\(\tilde{p},\tilde{m}\)}] (v1) -- [fermion] (o0),
         (v1) -- [dashed] (o1),
         (v0) -- [dashed] (o2),
         };
         \end{feynman}
         \end{tikzpicture}
     \end{subfigure}
     \hfill
     \begin{subfigure}[b]{0.3\textwidth}
         \centering
         \begin{tikzpicture}
         \begin{feynman}
           \vertex (i0) {\(P,M\)};
           \vertex [right=of i0] (v0);
           \vertex [above right=of v0] (v1);
           \vertex [above right=of v1] (o0) {\(p_1,m_1\)};
           \vertex [right=of v1] (o1) {\(p_2,m_2\)};
           \vertex [below right=of v0] (o2) {\(p_3,m_3\)};
           \diagram* {
         (i0) -- [fermion] (v0) -- [fermion, edge label={\(\tilde{p},\tilde{m}\)}] (v1) -- [fermion] (o0),
         (v1) -- [dashed] (o2),
         (v0) -- [dashed] (o1),
         };
         \end{feynman}
         \end{tikzpicture}
     \end{subfigure}
     \hfill
     \begin{subfigure}[b]{0.3\textwidth}
         \centering
         \begin{tikzpicture}
         \begin{feynman}
         \vertex (i0) {\(P,M\)};
         \vertex [right=of i0] (v0);
         \vertex [below right=of v0] (v1);
         \vertex [above right=of v0] (o0) {\(p_1,m_1\)};
         \vertex [right=of v1] (o1) {\(p_2,m_2\)};
         \vertex [below right=of v1] (o2) {\(p_3,m_3\)};
         \diagram* {
         (i0) -- [fermion] (v0) -- [fermion] (o0),
         (v0) -- [dashed, edge label={\(\tilde{p},\tilde{m}\)}] (v1) -- [dashed] (o1),
         (v1) -- [dashed] (o2),
         };
         \end{feynman}
         \end{tikzpicture}
     \end{subfigure}
\end{figure}

Best Answer

The diagrams are wider than 0.3\textwidth. A simple approach would be to scale them down using \begin{tikzpicture}[scale=0.75,every node/.style={transform shape}]

The key transform shape applies the transformation (scale) to each node.

a

\documentclass[12pt,a4paper]{article}

\usepackage{tikz}

\usepackage{subcaption}
\usepackage[compat=1.1.0]{tikz-feynman}

\begin{document}   

\begin{figure}[h!t]
    \centering
    \begin{subfigure}[b]{0.3\textwidth}
        \centering
        \begin{tikzpicture}[scale=0.75,every node/.style={transform shape}] % changed <<<<<<<<<<<<<<<<
            \begin{feynman}
                \vertex (i0) {\(P,M\)};
                \vertex [right=of i0] (v0);
                \vertex [above right=of v0] (v1);
                \vertex [above right=of v1] (o0) {\(p_1,m_1\)};
                \vertex [right=of v1] (o1) {\(p_2,m_2\)};
                \vertex [below right=of v0] (o2) {\(p_3,m_3\)};
                \diagram* {
                    (i0) -- [fermion] (v0) -- [fermion, edge label={\(\tilde{p},\tilde{m}\)}] (v1) -- [fermion] (o0),
                    (v1) -- [dashed] (o1),
                    (v0) -- [dashed] (o2),
                };
            \end{feynman}
        \end{tikzpicture}
    \end{subfigure}
    \hfill
    \begin{subfigure}[b]{0.3\textwidth}
        \centering
        \begin{tikzpicture}[scale=0.75,every node/.style={transform shape}]
            \begin{feynman}
                \vertex (i0) {\(P,M\)};
                \vertex [right=of i0] (v0);
                \vertex [above right=of v0] (v1);
                \vertex [above right=of v1] (o0) {\(p_1,m_1\)};
                \vertex [right=of v1] (o1) {\(p_2,m_2\)};
                \vertex [below right=of v0] (o2) {\(p_3,m_3\)};
                \diagram* {
                    (i0) -- [fermion] (v0) -- [fermion, edge label={\(\tilde{p},\tilde{m}\)}] (v1) -- [fermion] (o0),
                    (v1) -- [dashed] (o2),
                    (v0) -- [dashed] (o1),
                };
            \end{feynman}
        \end{tikzpicture}
    \end{subfigure}
    \hfill
    \begin{subfigure}[b]{0.3\textwidth}
        \centering
        \begin{tikzpicture}[scale=0.75,every node/.style={transform shape}]
            \begin{feynman}
                \vertex (i0) {\(P,M\)};
                \vertex [right=of i0] (v0);
                \vertex [below right=of v0] (v1);
                \vertex [above right=of v0] (o0) {\(p_1,m_1\)};
                \vertex [right=of v1] (o1) {\(p_2,m_2\)};
                \vertex [below right=of v1] (o2) {\(p_3,m_3\)};
                \diagram* {
                    (i0) -- [fermion] (v0) -- [fermion] (o0),
                    (v0) -- [dashed, edge label={\(\tilde{p},\tilde{m}\)}] (v1) -- [dashed] (o1),
                    (v1) -- [dashed] (o2),
                };
            \end{feynman}
        \end{tikzpicture}
    \end{subfigure}
\end{figure}

\end{document}

\scalebox also works

\scalebox{0.75}{\begin{tikzpicture}
...
\end{tikzpicture}}
Related Question