
在此 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*
來自鈦kZ-費曼(CTAN)使用graphdrawing
Ti 中的函式庫kZ 使用演算法來決定節點的位置。這些演算法無法處理純座標,因此不幸的是,永遠不可能有
\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}
請注意,由於座標有逗號,
,因此必須將座標用大括號括起來{}
,否則 TikZ 會將逗號理解為表示下一個選項的開始。
正如您所看到的,這很快就會因所有額外的座標而變得非常混亂,而且我認為這與事先使用該命令相比並沒有帶來太大的改進\vertex
。
微移頂點
如果您真正感興趣的是對某些頂點進行一些調整,那麼可以使用nudge
命令系列來指定這些調整(請參閱 PGF/Ti 的第 27.6 節)kZ 手冊)。這仍然使用演算法自動計算的座標,但在繪製所有內容之前稍微微調座標。
建立與上面類似的圖表的微移範例:
\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}