
В этом 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-Фейнман(КТАН) используйте graphdrawing
библиотеку от Tiк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
семейства команд (см. §27.6 PGF/TiкZ Manual). Здесь по-прежнему используются координаты, автоматически рассчитанные алгоритмом, но затем координаты слегка смещаются перед рисованием всего.
Пример подталкивания в действии для создания диаграммы, аналогичной приведенной выше:
\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}