Comprimento das linhas externas nos diagramas de Feynman (TikZ)

Comprimento das linhas externas nos diagramas de Feynman (TikZ)

Eu gostaria de fazer o seguinte diagrama

Eu não entendo por que esta figura fica preta quando é redimensionada

usando TikZ(O diagrama acima foi feito usando feynmfpacote). Até agora escrevi isto:

\documentclass[12pt]{article}
\usepackage[compat=1.1.0]{tikz-feynman}

\begin{document}
\begin{tikzpicture}
    \feynmandiagram [ horizontal=i to v1] {
    i -- [double] v1 -- [double] v2 -- [double] v3 -- [double] v1,
    v2 -- [double] o1,
    v3 -- [double] o2,
};
\end{tikzpicture}
\end{document}

e obtive isso

diagrama2

No entanto, não consigo descobrir como diminuir o comprimento das linhas externas. Além disso, não consigo descobrir como fazer linhas cruzadas como na primeira figura. Alguma sugestão?

Responder1

Se você for usar os algoritmos de posicionamento automático emTikZ-Feynman(CTAN), infelizmente não há uma maneira direta de encurtar as linhas externas, pois o algoritmo subjacente não tem ideia de quais linhas são externas.

É possível ajustar até que ponto as bordas são desenhadas com shorten <=(distance)e shorten >=(distance)(a diferença é se corta o início do fim); mas isso afeta apenas odesenhoda borda e não a maneira como o algoritmo trata o comprimento da borda e, como resultado, eu realmente não recomendaria usar isso. Em particular, isso parecerá estranho se usado em conjunto com o particleestilo, pois o texto estará muito distante do final da linha.

No seu caso, uma maneira bacana de alcançar o resultado desejado é aproveitar as vantagens da geometria simples:

\RequirePackage{luatex85}
\documentclass[tikz,border=10pt]{standalone}
\usepackage[compat=1.1.0]{tikz-feynman}

\begin{document}
\begin{tikzpicture}
  \begin{feynman}
    \vertex (i);
    \vertex [right=2cm of i] (center);
    \pgfmathsetmacro\vert{2 * sin(2 * pi / 6 r)};
    \pgfmathsetmacro\horz{2 * cos(2 * pi / 6 r)}
    \vertex [above right=\vert cm and \horz cm of center] (o1);
    \vertex [below right=\vert cm and \horz cm of center] (o2);
    \vertex (v1) at ($(center)!0.7!(i)$);
    \vertex (v2) at ($(center)!0.7!(o1)$);
    \vertex (v3) at ($(center)!0.7!(o2)$);

    \diagram* [edges=double] {
      (i) -- (v1) -- (v2) -- (v3) -- (v1),
      (v2) -- (o1),
      (v3) -- (o2),
    };
  \end{feynman}
\end{tikzpicture}
\end{document}

saída

Isto inicialmente coloca todos os vértices externos 2cmdo centervértice. Em seguida v1, ele coloca cada vértice v2e na distância entre o centro e o vértice externo desejado.v30.7

Sei que esta solução é muito específica para o layout acima e não é nada geral. Porém, de maneira mais geral, você pode ajustar as distâncias no arquivo above right=(distance) and (distance) of (vertex). Existem muitos outros exemplos que fazem uso disso neste site, e há exemplos disso na documentação do TikO próprio Z-Feynman.

Quanto à segunda parte da sua pergunta sobre as linhas perpendiculares que cruzam os vários propagadores, isso é melhor conseguido usando um estilo personalizado que define uma nova decoração personalizada:

\RequirePackage{luatex85}
\documentclass[tikz,border=10pt]{standalone}
\usepackage[compat=1.1.0]{tikz-feynman}

\tikzfeynmanset{
  crossed/.style={
    /tikz/postaction={
      /tikz/decoration={
        show path construction,
        lineto code={
          \coordinate (tmp1) at ($(\tikzinputsegmentfirst)!5pt!(\tikzinputsegmentlast)$);
          \draw
          ($(tmp1)!4pt!90:(\tikzinputsegmentlast)$)
          -- ($(tmp1)!4pt!-90:(\tikzinputsegmentlast)$);
        },
      },
      /tikz/decorate=true,
    },
  },
  crossed'/.style={
    /tikz/postaction={
      /tikz/decoration={
        show path construction,
        lineto code={
          \coordinate (tmp1) at ($(\tikzinputsegmentlast)!5pt!(\tikzinputsegmentfirst)$);
          \draw
          ($(tmp1)!4pt!90:(\tikzinputsegmentlast)$)
          -- ($(tmp1)!4pt!-90:(\tikzinputsegmentlast)$);
        },
      },
      /tikz/decorate=true,
    },
  },
}

\begin{document}
\begin{tikzpicture}
  \begin{feynman}
    \vertex (i);
    \vertex [right=2cm of i] (center);
    \pgfmathsetmacro\vert{2 * sin(2 * pi / 6 r)};
    \pgfmathsetmacro\horz{2 * cos(2 * pi / 6 r)}
    \vertex [above right=\vert cm and \horz cm of center] (o1);
    \vertex [below right=\vert cm and \horz cm of center] (o2);
    \vertex (v1) at ($(center)!0.7!(i)$);
    \vertex (v2) at ($(center)!0.7!(o1)$);
    \vertex (v3) at ($(center)!0.7!(o2)$);

    \diagram* [edges=double] {
      (i) -- (v1) -- [crossed] (v2) -- [crossed] (v3) -- [crossed'] (v1),
      (v2) -- [crossed] (o1),
      (v3) -- [crossed] (o2),
    };
  \end{feynman}
\end{tikzpicture}
\end{document}

saída

O postactiongarante que o que se segue (neste caso a decoração) seja desenhado por cima. Em seguida, dizemos para ele desenhar uma decoração em postaction, e o tipo de decoração é show path construction.

Esta decoração é um tipo especializado de decoração que dá acesso a \tikzinputsegmentfirste \tikzinputsegmentlaste permite a execução de código arbitrário. Nesse caso, criamos uma coordenada temporária 5ptdistante do início e a chamamos de tmp1, e então desenhamos uma linha reta que 8ptforma um ângulo de 90 graus em relação ao caminho original que passa por tmp1. Por conveniência, também defini um estilo complementar crossed'que afasta a tmp1coordenada 5ptdo final.

informação relacionada