
En este MWE (ejemplo de trabajo mínimo)
\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}
en lineas
\vertex (ib) at ($(it) + (1.1, 1.1)$);
\draw[->] (1, 2) -- (ib);
Se puede ver la flexibilidad de tikz a la hora de definir coordenadas. Sin embargo, la coordenada sobre la marcha (1,2)
en la línea
(1, 2) -- [fermion] (ib),
no es aceptado.
Sin embargo, es muy deseable definir coordenadas y realizar aritmética de coordenadas dentro del alcance de \diagram
.
¿Alguna sugerencia?
Respuesta1
Los comandos \diagram
(y \diagram*
) deTikZ-Feynman(CTAN) usa la graphdrawing
biblioteca de TikZ que utilizan algoritmos para determinar la ubicación de los nodos. Estos algoritmos no pueden manejar coordenadas puras, por lo que desafortunadamente nunca será posible tener
\diagram* {
(1, 2) -- (i1),
};
Dicho esto, aquí tienes dos alternativas que podrían ayudarte.
Clavar vértices
Es posible dar una pista al algoritmo sobre la ubicación final del vértice con desired at=<coordinate>
; sin embargo, algunos algoritmos no admiten esto y ignorarán la sugerencia por completo.
Para ser más contundente, es posible utilizar el nail at=<coordinate>
que no sólo da una pista al algoritmo, sino que luego ignora la coordenada calculada por el algoritmo subyacente y la anula con la coordenada especificada. Como se trata de un método de fuerza bruta, puede conducir a resultados sorprendentes.
Aquí hay un ejemplo de las claves en acción que especifican todo completamente para crear una ligera inclinación para la línea de bosones:
\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}
Tenga en cuenta que, dado que las coordenadas tienen una coma ,
, es necesario encerrar la coordenada entre llaves, {}
de lo contrario TikZ entenderá que la coma indica el inicio de la siguiente opción.
Como puede ver, esto puede volverse bastante complicado rápidamente con todas las coordenadas adicionales, y no creo que esto proporcione una gran mejora con respecto al uso del \vertex
comando de antemano.
Empujando vértices
Si lo que realmente le interesa es proporcionar pequeños ajustes a ciertos vértices, entonces estos se pueden especificar con la nudge
familia de comandos (ver §27.6 del PGF/TikManual Z). Esto todavía usa la coordenada calculada automáticamente por el algoritmo, pero luego empuja ligeramente la coordenada antes de dibujar todo.
Un ejemplo del empujón en acción para crear un diagrama similar al anterior:
\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}