Longitud de líneas externas en diagramas de Feynman (TikZ)

Longitud de líneas externas en diagramas de Feynman (TikZ)

quisiera hacer el siguiente diagrama

No entiendo por qué esta figura se vuelve negra cuando se cambia de tamaño

usando TikZ(El diagrama anterior se realizó usando feynmfel paquete). Hasta ahora he escrito esto:

\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}

y obtuve esto

diagrama2

Sin embargo, no puedo entender cómo disminuir la longitud de las líneas externas. Además, no sé cómo hacer que las líneas se crucen como en la primera figura. ¿Alguna sugerencia?

Respuesta1

Si va a utilizar los algoritmos de colocación automática enTikZ-Feynman(CTAN), desafortunadamente no existe una forma sencilla de acortar las líneas externas ya que el algoritmo subyacente no tiene idea de qué líneas son externas.

Es posible modificar la distancia con la que se dibujan los bordes shorten <=(distance)yshorten >=(distance) (la diferencia es si corta el principio del final); pero esto sólo afecta adibujodel borde y no la forma en que el algoritmo trata la longitud del borde y, como resultado, realmente no recomendaría usar esto. En particular, esto se verá extraño si se usa junto con el particleestilo, ya que el texto estará muy lejos del final de la línea.

En su caso, una buena forma de lograr el resultado deseado es aprovechar la geometría simple:

\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}

producción

Inicialmente, esto coloca todos los vértices externos 2cmdel centervértice. Luego coloca cada vértice y v1a la distancia entre el centro y el vértice exterior deseado.v2v30.7

Me doy cuenta de que esta solución es muy específica del diseño anterior y no es general en absoluto. Sin embargo, en términos más generales, puedes modificar las distancias en elabove right=(distance) and (distance) of (vertex) . Hay muchos otros ejemplos que hacen uso de esto en este sitio web, y hay ejemplos de esto en la documentación de Ti.kEl propio Z-Feynman.

En cuanto a la segunda parte de su pregunta sobre las líneas perpendiculares que cruzan los distintos propagadores, esto se logra mejor utilizando un estilo personalizado que a su vez define una nueva decoración 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}

producción

El postactionasegura que lo que sigue (en este caso la decoración) quede dibujado encima. Luego le decimos que dibuje una decoración en postaction, y el tipo de decoración es show path construction.

Esta decoración es un tipo especializado de decoración que da acceso a \tikzinputsegmentfirsty \tikzinputsegmentlasty permite ejecutar código arbitrario. En este caso, creamos una coordenada temporal 5ptlejos del inicio y la llamamos tmp1, y luego dibujamos una línea recta que es 8ptlarga en un ángulo de 90 grados con respecto a la ruta original que pasa por tmp1. Por conveniencia, también he definido un estilo complementario crossed'que coloca la tmp1coordenada 5ptlejos del final.

información relacionada