파인만 다이어그램의 외부 선 길이(TikZ)

파인만 다이어그램의 외부 선 길이(TikZ)

다음 다이어그램을 만들고 싶습니다.

크기가 조정되면 이 그림이 검은색으로 표시되는 이유를 이해하지 못합니다.

using TikZ(위 다이어그램은 feynmf패키지를 사용하여 수행되었습니다). 지금까지 나는 이렇게 썼다:

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

그리고 이것을 얻었다

도표2

그러나 외부 선의 길이를 줄이는 방법을 알 수 없습니다. 게다가 첫 번째 그림처럼 어떻게 선을 교차시키는지 알 수가 없습니다. 어떤 제안이 있으십니까?

답변1

자동 배치 알고리즘을 사용하려는 경우케이Z-파인만(CTAN), 불행하게도 기본 알고리즘이 어떤 선이 외부인지 알 수 없기 때문에 외부 선을 줄이는 간단한 방법은 없습니다.

shorten <=(distance)및 를 사용하여 가장자리를 그리는 정도를 조정할 수 있습니다 shorten >=(distance)(끝의 시작 부분을 자르는지 여부의 차이). 하지만 이는 다음에만 영향을 미칩니다.그림알고리즘이 가장자리 길이를 처리하는 방식이 아니기 때문에 실제로는 이것을 사용하지 않는 것이 좋습니다. 특히 particle텍스트가 줄 끝에서 멀리 떨어져 있기 때문에 스타일과 함께 사용하면 이상하게 보일 것입니다.

귀하의 경우 원하는 결과를 얻는 깔끔한 방법은 간단한 기하학을 활용하는 것입니다.

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

산출

2cm그러면 처음에는 정점 의 모든 외부 정점이 배치됩니다 center. 그런 다음 중심과 원하는 외부 정점 사이의 거리에 각 v1, 정점을 v2배치 합니다 .v30.7

이 솔루션은 위의 레이아웃에만 해당되며 전혀 일반적이지 않다는 것을 알고 있습니다. 그러나 더 일반적으로는 above right=(distance) and (distance) of (vertex). 이 웹사이트에는 이를 활용하는 다른 많은 예가 있으며 Ti 문서에도 이에 대한 예가 있습니다.케이Z-파인만 그 자체.

다양한 전파자를 교차하는 수직선에 관한 질문의 두 번째 부분은 자체적으로 새로운 사용자 정의 장식을 정의하는 사용자 정의 스타일을 사용하여 가장 잘 달성됩니다.

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

산출

다음 항목 postaction(이 경우 장식)이 맨 위에 그려지도록 합니다. 그런 다음 에 장식을 그리라고 지시 postaction하고 장식 유형은 입니다 show path construction.

\tikzinputsegmentfirst이 장식은 및 에 대한 액세스를 제공 \tikzinputsegmentlast하고 임의의 코드가 실행될 수 있도록 하는 특수한 종류의 장식입니다 . 이 경우 5pt시작점에서 멀리 떨어진 임시 좌표를 만들고 이를 호출한 다음 를 통과하는 원래 경로에 대해 90도 각도로 긴 tmp1직선을 그립니다 . 편의상 좌표를 끝에서 멀리 배치하는 보완적인 스타일도 정의했습니다 .8pttmp1crossed'tmp15pt

관련 정보