Pregando Vértices

Pregando Vértices

Neste MWE (exemplo mínimo de trabalho)

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

Nas linhas

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

pode-se ver a flexibilidade do tikz na definição de coordenadas. No entanto, a coordenada instantânea (1,2)na linha

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

não é aceito.

No entanto, é altamente desejável definir coordenadas e realizar aritmética de coordenadas dentro do escopo de \diagram.

Alguma sugestão?

Responder1

Os comandos \diagram(e \diagram*) deTikZ-Feynman(CTAN) use a graphdrawingbiblioteca do TikZ que usam algoritmos para determinar a colocação dos nós. Esses algoritmos não conseguem lidar com coordenadas puras, então, infelizmente, nunca será possível ter

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

Dito isto, aqui estão duas alternativas que podem ajudá-lo.

Pregando Vértices

É possível dar uma dica ao algoritmo quanto ao posicionamento final do vértice com desired at=<coordinate>; no entanto, alguns algoritmos não suportam isso e desconsiderarão totalmente a dica.

Para ser mais contundente, é possível usar o nail at=<coordinate>que não apenas fornece a dica ao algoritmo, mas também desconsidera a coordenada calculada pelo algoritmo subjacente e a substitui pela coordenada especificada. Como este é um método bastante de força bruta, pode levar a alguns resultados surpreendentes.

Aqui está um exemplo das teclas em ação que especificam tudo completamente para criar uma ligeira inclinação para a linha do bóson:

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

saída

Observe que como as coordenadas possuem vírgula ,, é necessário colocar a coordenada entre colchetes, {}caso contrário TikZ entenderá essa vírgula como denotando o início da próxima opção.

Como você pode ver, isso pode rapidamente se tornar bastante confuso com todas as coordenadas extras, e não acho que isso melhore muito em relação ao uso do \vertexcomando anterior.

Deslocando vértices

Se o que você realmente está interessado é fornecer pequenos ajustes em certos vértices, então estes podem ser especificados com a nudgefamília de comandos (veja §27.6 do PGF/Tikmanual Z). Isso ainda usa a coordenada calculada automaticamente pelo algoritmo, mas depois desloca levemente a coordenada antes de desenhar tudo.

Um exemplo do empurrão em ação para criar um diagrama semelhante ao acima:

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

saída

informação relacionada