정점 못박기

정점 못박기

이 MWE(최소 작업 예)에서

\RequirePackage{luatex85}
\documentclass{article}
\thispagestyle{empty}
\usepackage{tikz}
\usepackage[compat=1.1.0]{tikz-feynman}
\begin{document}
\begin{tikzpicture}
  \begin{feynman}
    \vertex (it) at (0, 0);
    \vertex (ib) at ($(it) + (1.1, 1.1)$);
    \diagram*
        {
          (it) -- [photon] (ib),
          (1, 2) -- [fermion] (ib),
        };
       \draw[->] (1, 2) -- (ib);
  \end{feynman}
\end{tikzpicture}
\end{document}

라인에서

\vertex (ib) at ($(it) + (1.1, 1.1)$);
\draw[->] (1, 2) -- (ib);

좌표 정의에서 tikz의 유연성을 볼 수 있습니다. 그러나 (1,2)라인에서의 즉석 좌표는

(1, 2) -- [fermion] (ib),

허용되지 않습니다.

그럼에도 불구하고 의 범위 내에서 좌표를 정의하고 좌표 연산을 수행하는 것이 매우 바람직합니다 \diagram.

어떤 제안이 있으십니까?

답변1

\diagram(및 \diagram*) 명령은 다음과 같습니다 .케이Z-파인만(CTAN) graphdrawingTi의 라이브러리를 사용하세요케이Z는 노드 배치를 결정하기 위해 알고리즘을 사용합니다. 이러한 알고리즘은 순수 좌표를 처리할 수 없으므로 불행히도 절대 좌표를 가질 수 없습니다.

\diagram* {
  (1, 2) -- (i1),
};

그렇다면 도움이 될 수 있는 두 가지 대안이 있습니다.

정점 못박기

를 사용하여 정점의 최종 배치에 관해 알고리즘에 힌트를 제공하는 것이 가능합니다 desired at=<coordinate>. 그러나 일부 알고리즘은 이를 지원하지 않으며 힌트를 완전히 무시합니다.

nail at=<coordinate>보다 강력하게 하려면 알고리즘에 힌트를 제공할 뿐만 아니라 기본 알고리즘에서 계산된 좌표를 무시하고 이를 지정된 좌표로 재정의하는 를 사용할 수 있습니다 . 이는 상당히 무차별적인 방법이므로 놀라운 결과가 나올 수 있습니다.

다음은 보존선에 약간의 경사를 만들기 위해 모든 것을 완전히 지정하는 실제 키의 예입니다.

\RequirePackage{luatex85}
\documentclass[tikz, border=10pt]{standalone}

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

\begin{document}
\begin{tikzpicture}
  \begin{feynman}
    \diagram {
      i1 [nail at={(-2, 1)}]
      -- [fermion] a
      -- [fermion] i2 [nail at={(-2, -1)}],
      a [nail at={(-1, 0.2)}] -- [boson] b [nail at={(1, -0.2)}],
      f1 [nail at={(2, 1)}]
      -- [fermion] b
      -- [fermion] f2 [nail at={(2, -1)}],
    };
  \end{feynman}
\end{tikzpicture}
\end{document}

산출

좌표에는 쉼표가 있으므로 ,좌표를 중괄호로 묶어야 합니다. {}그렇지 않으면 Ti케이Z는 쉼표가 다음 옵션의 시작을 나타내는 것으로 이해합니다.

보시다시피, 모든 추가 좌표로 인해 매우 지저분해질 수 있으며 \vertex사전에 명령을 사용하는 것보다 많은 개선이 제공되지 않는다고 생각합니다.

정점 이동

정말로 관심이 있는 것이 특정 정점에 약간의 조정을 제공하는 것이라면 nudge명령 계열을 사용하여 이를 지정할 수 있습니다(PGF/Ti의 §27.6 참조).케이Z 매뉴얼). 이것은 여전히 ​​알고리즘에 의해 자동으로 계산된 좌표를 사용하지만 모든 것을 그리기 전에 좌표를 약간 움직입니다.

위와 유사한 다이어그램을 생성하기 위한 넛지의 예:

\RequirePackage{luatex85}
\documentclass[tikz, border=10pt]{standalone}

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

\begin{document}
\feynmandiagram [horizontal=a to b] {
  i1 -- [fermion] a -- [fermion] i2,
  a [nudge up=0.2cm] -- [boson] b [nudge down=0.2cm],
  f1 -- [fermion] b -- [fermion] f2,
};
\end{document}

산출

관련 정보