Циклы и вставки в Tikz-Feynman

Циклы и вставки в Tikz-Feynman

Я хотел бы создать эти диаграммы, используяTikz-Feynman.

введите описание изображения здесь

То, что я имею на данный момент, это

введите описание изображения здесь

\RequirePackage{luatex85}
\documentclass{standalone}

\usepackage[compat=1.1.0]{tikz-feynman}

\begin{document}

$\feynmandiagram [horizontal=a to b, layered layout, baseline=(i1.base)] {
  i1 -- a [dot]
  -- [photon,half left,momentum'=\(q\)] b [dot]
  -- [photon,half left,momentum'=\(q\)] a,
  b -- f1
};
+
\feynmandiagram [horizontal=a to b, layered layout, baseline=(a.base)] {
  {i1,i2} -- a [dot]
  -- [photon,half left,momentum'=\(q\)] b [crossed dot]
  -- [photon,half left,momentum'=\(q\)] a,
};$

\end{document}

Есть несколько открытых вопросов:

  1. Как можно переместить стрелки импульса за пределы циклов?
  2. Как сократить входящие и исходящие линии?
  3. Как можно точно выровнять вертикально центр обеих диаграмм по знаку «плюс»?
  4. Как добавить перечеркнутую точку на первую диаграмму?

Обновлять

С помощьюJP-ЭллисЯ смог получить

введите описание изображения здесь

\RequirePackage{luatex85}
\documentclass{standalone}

\usepackage[compat=1.1.0]{tikz-feynman}

\begin{document}
$\feynmandiagram [horizontal=a to c,inline=(a.base)] {
    a [dot] -- [charged boson,quarter left,edge label=\(q\)] b
    -- [photon,quarter left] c [dot]
    -- [charged boson,quarter left,edge label=\(q\)] d [crossed dot]
    -- [charged boson,quarter left,edge label=\(q\)] a,
    f1 -- c,
    i1 -- a,
};
\quad\raisebox{-0.5ex}{+}\quad
\feynmandiagram [horizontal=a to b, layered layout, inline=(a.base)] {
    {i1,i2} -- a [dot]
    -- [charged boson,half left,edge label=\(q\)] b [crossed dot]
    -- [charged boson,half left,edge label=\(q\)] a [desired at={(0, 0)}],
};$
\end{document}

Остается один вопрос: есть ли способ переместить стрелку дальше charged bosonи edge labelв конец линии? Я хочу, чтобы они были наверху верхней дуги на первой диаграмме (а не в середине первой четверти).

решение1

Отличная работа над диаграммами!

Итак, позвольте мне ответить на вопросы:

Как можно переместить стрелки импульса за пределы циклов?

Ключ momentumпоставляется в двух формах: momentumи momentum'. Они отличаются только стороной, на которой расположены стрелки; поэтому использование momentumрешает проблему в вашем случае.

Как сократить входящие и исходящие линии?

Недавно я ответил на другой вопрос на этом сайте, где рассматривалось использование nudge. Если вы хотите просто настроить внешние линии, это можно использовать. В качестве альтернативы, возможно, вы захотите настроить всю диаграмму, чтобы она стала меньше (так как похоже, что они будут у вас внутри уравнения). Этого можно добиться с помощью small.

Как можно точно выровнять вертикально центр обеих диаграмм по знаку «плюс»?

Вы правы, используя baseline; однако, как вы заметили, символ '+' на самом деле не находится на базовой линии, а на самом деле немного выше. 'Волшебное расстояние' от базовой линии до горизонтальной полосы в '+' составляет -\the\dimexpr\fontdimen22\textfont2\relax; хотя я не помню, откуда на этом сайте я изначально это взял.

Ключ baselineможет затем взять либо узел (как вы сделали), либо фактическое расстояние смещения. В случае, когда расстояние указано, оно относительно координаты, (0, 0)которая, если не указаны другие координаты, будет местоположением первой вершины. Для первой диаграммы это все хорошо, но во втором случае я сообщаю алгоритму, что (a)должно быть при (0, 0)использовании desired atключа.

Как добавить перечеркнутую точку на первую диаграмму?

Вы можете добавить дополнительные вершины в фиксированных местах, хотя, к сожалению, вы не можете сделать это внутри \feynmandiagramкоманды. Решение ниже использует \diagramкоманду внутри {feynman}среды, а затем вручную размещает перечеркнутую точку. Средняя точка вычисляется с помощью (a)!0.5!(b), а затем она просто перемещается вниз, пока не станет выглядеть хорошо.


Вот решение, которое реализует все. Обратите внимание, что я использовал оба nudgeи small. Это означает, что на второй диаграмме все немного меньше (поэтому заполненные и перечеркнутые точки выглядят по-разному). В идеале я бы использовал только один из двух методов, но здесь проиллюстрированы оба.

\documentclass{article}

\usepackage[compat=1.1.0]{tikz-feynman}

\def\plusheight{-\the\dimexpr\fontdimen22\textfont2\relax}

\begin{document}
\begin{equation}
  \begin{tikzpicture}[baseline=\plusheight]
    \begin{feynman}
      \diagram [horizontal=a to b, layered layout] {
        i1 [nudge right=0.7cm] -- a [dot]
        -- [photon, half left, momentum=\(q\)] b [dot]
        -- [photon, half left, momentum=\(q\)] a ,
        b -- f1 [nudge left=0.7cm]
      };
      \vertex [crossed dot, fill=white] (i) at ($(a)!0.5!(b) - (0, 0.75)$) {};
    \end{feynman}
  \end{tikzpicture}
  +
  \feynmandiagram [horizontal=a to b, layered layout, small, baseline=\plusheight] {
    {i1,i2} -- a [dot]
    -- [photon, half left, momentum=\(q\)] b [crossed dot]
    -- [photon, half left, momentum=\(q\)] a [desired at={(0, 0)}],
  };
\end{equation}
\end{document}

выход


Чтобы ответить на обновленный ответ: charged bosonстиль, внутренне, является комбинацией bosonи with arrow=0.99. with arrowСтиль недокументирован на данном этапе, так как я не предполагал, что люди будут его использовать, но, вероятно, мне следует добавить его в документацию. По какой-то причине на with arrow=1самом деле не работает, так что 0.99этого достаточно.

В результате можно просто заменить charged bosonна boson, with arrow=1для получения желаемого результата:

\RequirePackage{luatex85}
\documentclass{standalone}

\usepackage[compat=1.1.0]{tikz-feynman}

\begin{document}
\feynmandiagram [horizontal=a to c, small] {
    a [dot] -- [boson, with arrow=0.99, quarter left, edge label=\(q\)] b
    -- [photon, quarter left] c [dot]
    -- [charged boson, quarter left, edge label=\(q\)] d [crossed dot]
    -- [charged boson, quarter left, edge label=\(q\)] a,
    f1 -- c,
    i1 -- a,
};
\end{document}

выход

решение2

Для вашей второй диаграммы:

% !TEX TS-program = lualatex 
\RequirePackage{luatex85}
\documentclass{standalone}

\usepackage[compat=1.1.0]{tikz-feynman}

\begin{document}

$\feynmandiagram [horizontal=a to b, layered layout, baseline=(a.base)] {
  {i1,i2} -- a [dot]
  -- [charged boson,half left,edge label=\(q\)] b [crossed dot]
  -- [charged boson,half left,edge label=\(q\)] a,
};$

\end{document}

введите описание изображения здесь


Или с индивидуальными наконечниками стрелок:

% !TEX TS-program = lualatex 
\RequirePackage{luatex85}
\documentclass{standalone}

\usepackage[compat=1.1.0]{tikz-feynman}

\tikzfeynmanset{ with arrow/.style = {
   decoration={
     markings,
     mark=at position 0.5
          with {\arrow[xshift=1mm]{Stealth[width=2mm,length=2mm]}}
     },
   postaction=decorate}
}

\begin{document}

$\feynmandiagram [horizontal=a to b, layered layout, baseline=(a.base)] {
  {i1,i2} -- a [dot]
  -- [charged boson,half left,edge label=\(q\)] b [crossed dot]
  -- [charged boson,half left,edge label=\(q\)] a,
};$

\end{document}

введите описание изображения здесь

То же самое с первой диаграммой:

% !TEX TS-program = lualatex 
\RequirePackage{luatex85}
\documentclass{standalone}

\usepackage[compat=1.1.0]{tikz-feynman}

\tikzfeynmanset{ with arrow/.style = {
   decoration={
     markings,
     mark=at position 0.5
          with {\arrow[xshift=1mm]{Stealth[width=1.8mm,length=1.8mm]}}
     },
   postaction=decorate}
}


\begin{document}
$\feynmandiagram [horizontal'=a to c,inline=(a.base)] {
    a [dot] -- [charged boson,half left,edge label=\(q\)] c [dot]
    -- [charged boson,quarter left,edge label=\(q\)] d [crossed dot, yshift=0.4cm]
    -- [charged boson,quarter left,edge label=\(q\)] a,
    f1[yshift=-0.465cm] -- c,
    i1[yshift=-0.465cm] -- a,
};
$
\end{document}

введите описание изображения здесь

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