
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 graphdrawing
biblioteca 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}
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 \vertex
comando 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 nudge
famí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}