Прибивание вершин

Прибивание вершин

В этом 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}

выход

Связанный контент