
In diesem MWE (minimales Arbeitsbeispiel)
\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}
An den Linien
\vertex (ib) at ($(it) + (1.1, 1.1)$);
\draw[->] (1, 2) -- (ib);
man kann die Flexibilität von tikz bei der Definition von Koordinaten sehen. Allerdings ist die On-the-Fly-Koordinate (1,2)
in Zeile
(1, 2) -- [fermion] (ib),
wird nicht akzeptiert.
Dennoch ist es äußerst wünschenswert, Koordinaten zu definieren und Koordinatenarithmetik im Rahmen von durchzuführen \diagram
.
Irgendwelche Vorschläge?
Antwort1
Die \diagram
(und \diagram*
) Befehle vonTikZ-Feynman(CTAN) verwenden Sie die graphdrawing
Bibliothek von TikZ, die Algorithmen verwenden, um die Platzierung von Knoten zu bestimmen. Diese Algorithmen können keine reinen Koordinaten verarbeiten, daher wird es leider nie möglich sein,
\diagram* {
(1, 2) -- (i1),
};
Allerdings gibt es hier zwei Alternativen, die Ihnen helfen könnten.
Scheitelpunkte festnageln
Es ist möglich, dem Algorithmus mit einen Hinweis auf die endgültige Platzierung des Scheitelpunkts zu geben. desired at=<coordinate>
Einige Algorithmen unterstützen dies jedoch nicht und ignorieren den Hinweis vollständig.
Um noch wirkungsvoller zu sein, kann man Folgendes verwenden: nail at=<coordinate>
Dies gibt dem Algorithmus nicht nur den Hinweis, sondern ignoriert dann die vom zugrunde liegenden Algorithmus berechnete Koordinate und überschreibt sie mit der angegebenen Koordinate. Da dies eine ziemlich brachiale Methode ist, kann sie zu einigen überraschenden Ergebnissen führen.
Hier ist ein Beispiel für die Tasten in Aktion, die alles vollständig angeben, um eine leichte Neigung für die Bosonenlinie zu erzeugen:
\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}
Beachten Sie, dass Koordinaten mit Kommas versehen sind ,
. Daher müssen die Koordinaten in Klammern gesetzt werden {}
, sonstkZ versteht dieses Komma so, dass es den Beginn der nächsten Option markiert.
Wie Sie sehen, kann dies mit all den zusätzlichen Koordinaten schnell ziemlich chaotisch werden, und ich glaube nicht, dass dies eine große Verbesserung gegenüber der \vertex
vorherigen Verwendung des Befehls darstellt.
Verschieben von Scheitelpunkten
nudge
Wenn Sie wirklich daran interessiert sind, kleine Anpassungen an bestimmten Eckpunkten vorzunehmen, können Sie diese mit der Befehlsfamilie angeben (siehe §27.6 des PGF/TikZ Manuell). Dabei wird immer noch die vom Algorithmus automatisch berechnete Koordinate verwendet, die Koordinate wird dann aber leicht verschoben, bevor alles gezeichnet wird.
Ein Beispiel für den Einsatz des Nudge zum Erstellen eines ähnlichen Diagramms wie oben:
\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}