Feynman Diagrams inside circles

coordinatesdiagramstikz-feynmantikz-pgftikz-positioning

I'm trying to use tikz-feynman to draw Feynman diagrams encased in circles. I need the entire diagram to be inside a circle, with the lines touching the circle. This is necessary because these are diagrams for the Wilson loop operators in a Chern-Simons theory – see examples from Professor Bar-Natan's thesis below:
enter image description here
This example uses ellipses, which also suffice for me, but circles are easier and preferable.

Right now I am trying to draw the circle in tikz-feynman itself, by drawing solid lines for the circle arcs. Options like half left and quarter left allowed me to draw the circle's arcs easily for diagrams C and D. (My attempts are below.) But for something like diagram E, I cannot figure out how to force the triple vertex to be inside the circle. I tried using coordinate calculations to force the vertices to be at certain positions, and use the out,in keys to hardcode the lines to follow circular arcs, but my commands are simply overridden if I get too specific.

I am compiling with Lualatex. I have tried compiling with pdflatex but that only makes it worse.

Any advice on how to manipulate tikz-feynman to get what I want is appreciated.

If the only way is to draw a circle in tikz and then use tikz-feynman for the rest, how do I position the Feynman diagram vertices to lie on the circle?

My successful code for diagrams C, D:

\documentclass{report}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usepackage{tikz-feynman}
\begin{document}

\begin{tikzpicture}
    \feynmandiagram [scale = 1, horizontal=a to b] {
    a -- [quarter left] b -- [quarter left] c -- [quarter left] d -- [quarter left] a,
    a -- [scalar] b,
    c -- [scalar] d
    };
\end{tikzpicture}
\begin{tikzpicture}
    \feynmandiagram [scale = 0.98, horizontal=a to b] {
    a -- [quarter left] b -- [quarter left] c -- [quarter left] d -- [quarter left] a,
    a -- [scalar] c,
    b -- [scalar] d
    };
\end{tikzpicture}

\end{document}

enter image description here

And my various attempts at drawing E:
First, with no positioning,

\begin{tikzpicture}
    \feynmandiagram [scale = 1, horizontal=a to b] {
    a --  b -- c -- a,
    a -- [scalar] d,
    b -- [scalar] d,
    c -- [scalar] d
    };
\end{tikzpicture}

enter image description here

Then, I tried positioning everything explicitly.
Edit: The code below is somewhat incorrect since I have given the angles relative to the line connecting the vertices. According to the documentation, the flag for this should be true by default, but it seems to be false. Below, I have given an example with relative angles on, but the result is still disappointing.

\begin{tikzpicture}
\begin{feynman}
      \vertex (a);
      \vertex[right=of a] (d);
      \vertex (b) at ($(a)!1.73!30:(d)$);
      \vertex (c) at ($(a)!1.73!-30:(d)$);
      \diagram { a --  [out=30, in=30] b -- [out=30, in=30] c -- [out=30, in=30] a,
      a -- [scalar,out=0,in=0] d,
      b -- [scalar,out=0,in=0] d,
      c -- [scalar,out=0,in=0] d
        };
\end{feynman}
\end{tikzpicture}

enter image description here

For comparison, compiling without Lualatex:
enter image description here

With the flag relative=true:

\begin{tikzpicture}
\begin{feynman}
        \vertex (a);
        \vertex[above right= of a] (b);
        \vertex[below right= of a] (c);
        \vertex[right= of a] (d);
        a [particle=a] --[out=30, in = 150, relative=true] b[particle =b] ,
        b -- [out = 30, in = 150, relative = true] c [particle =c],
        c -- [out = 30, in = 150, relative = true] a,
        a -- [scalar] d [particle = d],
        b -- [scalar] d,
        c -- [scalar] d
        };
\end{feynman}
\end{tikzpicture}

enter image description here

Finally, I tried relying on half left and quarter left, but vertex d refuses to stay inside the circle:

\begin{tikzpicture}
\begin{feynman}
        \vertex (a);
        \vertex (b);
        \vertex (c);
        \vertex (d) at ($(a)!0.5!(b)$);      
        \diagram { a[particle = a] --  [half right] b[particle = b] -- [quarter right] c [particle =  c]-- [quarter right] a,
         d -- [scalar] b,
         d -- [scalar] c,
         d -- [scalar] a 
        };         
\end{feynman}
\end{tikzpicture}

enter image description here


Update: I have made some progress using the spring electrical layout:

\begin{tikzpicture}
    \begin{feynman}
        \vertex (a);
        \vertex[above= of a] (b);
        \vertex[below= of a] (c);
        \vertex[right= of a] (d);
        \diagram [spring electrical layout] {
        a [particle=a] --[out=60, in = 120, relative=true] b[particle =b] ,
        b -- [out = 60, in = 120, relative = true] c [particle =c ],
        c -- [out = 60, in = 120, relative = true] a,
        % b-- c [particle =c ],
        a -- [scalar] d [particle = d, electric charge=15],
        b -- [scalar] d,
        c -- [scalar] d
        };
\end{feynman}
\end{tikzpicture}

enter image description here

Best Answer

Based on the answer to Loop along a line in tikz-feynman, I think I have figured out the best way to approach this problem: draw a circle, decorate it with coordinates as markings, and then use tikz-feynman to connect them in whatever way you prefer.

Note that this compiles without lualatex - alternatively, use \diagram* to ensure this particular diagram does not use automatic placement.

It's also important to keep in mind that when using coordinates, vertices or nodes defined outside \diagram inside \diagram* with manual placement, use (a) instead of a, else tikz sometimes treats it as a different vertex. But this also does not work when using automatic placement, lualatex complains when you use (a). If anyone understands this issue in more detail, I would be grateful for an explanation.

\begin{tikzpicture}
\begin{feynman}
    \draw[postaction={decorate,
decoration={markings,
        mark=at position .17 with {\coordinate (b);},
        mark=at position .5 with {\coordinate (a);},
        mark=at position .83 with {\coordinate (c);}
        }}] (0,0) circle (2); 
    
    \vertex[right=2cm of a] (d);

    \diagram*{
    (a)-- [scalar] (d),
    (b)-- [scalar] (d),
    (c)-- [scalar] (d),
    };
\end{feynman}
\end{tikzpicture}

enter image description here

Related Question