假设我在 Feynmp 中有两条外线,o1 和 o2。我知道如何标记每一条线。但假设我想画一个从 o1 到 o2 的大括号,然后标记该括号。只使用 Feynmp 可以做到这一点吗,还是我需要使用 Tikz?
示例(摘自第 28 页):
\begin{fmfgraph}(40,25)
\fmfpen{thick}
\fmfleft{ip,il}
\fmfright{oq1,oq2,d1,oq3,d2,d3,ol}
\fmf{fermion,tension=2}{ip,vp}
\fmf{fermion}{vp,vq,oq3}
\fmf{fermion}{vp,oq1}
\fmf{fermion}{vp,oq2}
\fmf{photon}{vl,vq}
\fmf{fermion,tension=2}{il,vl}
\fmf{fermion}{vl,ol}
\fmfblob{.15w}{vp}
\fmfdot{vq,vl}
\fmffreeze
\fmfi{plain}{vpath (__ip,__vp) shifted (thick*(0,2))}
\fmfi{plain}{vpath (__ip,__vp) shifted (thick*(1,-2))}
\end{fmfgraph}
假设我想集体标记传出/传入线路,如何在 中进行操作feynmp
?还是必须使用tikz
?
答案1
已编辑,允许定制标签支架的垂直偏移和范围。再次已编辑,添加前标签和后标签。
首先请注意,图表上的边界框似乎只包围了“节点”,但没有包围箭头。提供给新宏的前两个参数\prefeynlabel
和 \postfeynlabel
是该框高度的分数。这些宏的语法是
\prefeynlabel{v-offset fraction}{v-extent fraction}{boxname}{label}
\postfeynlabel{v-offset fraction}{v-extent fraction}{boxname}{label}
注意:由于此包使用了 metapost,因此必须先使用 进行编译pdflatex
,然后运行 (在本例中为 )mpost x.mp
,最后重新运行pdflatex
。
已修改以改善支架和标签的相对位置。
\documentclass{article}
\usepackage{scalerel}
\usepackage{feynmp-auto}
\newsavebox\feynbox
\newlength\tmplength
\parskip 2em
\newcommand\prefeynlabel[4]{%
\setlength{\tmplength}{#2\ht#3}%
\raisebox{#1\tmplength}{%
\raisebox{\dimexpr.5\tmplength-.35\ht\strutbox}{#4}%
\scaleto[1.7ex]{\raisebox{2.33pt}{\{}}{\tmplength}}%
}
\newcommand\postfeynlabel[4]{%
\setlength{\tmplength}{#2\ht#3}%
\raisebox{#1\tmplength}{%
\scaleto[1.7ex]{\raisebox{2.33pt}{\}}}{\tmplength}%
\raisebox{\dimexpr.5\tmplength-.35\ht\strutbox}{#4}}%
}
\begin{document}
\savebox\feynbox{%
\begin{fmffile}{x}
\begin{fmfgraph}(40,25)
\fmfpen{thick}
\fmfleft{ip,il}
\fmfright{oq1,oq2,d1,oq3,d2,d3,ol}
\fmf{fermion,tension=2}{ip,vp}
\fmf{fermion}{vp,vq,oq3}
\fmf{fermion}{vp,oq1}
\fmf{fermion}{vp,oq2}
\fmf{photon}{vl,vq}
\fmf{fermion,tension=2}{il,vl}
\fmf{fermion}{vl,ol}
\fmfblob{.15w}{vp}
\fmfdot{vq,vl}
\fmffreeze
\fmfi{plain}{vpath (__ip,__vp) shifted (thick*(0,2))}
\fmfi{plain}{vpath (__ip,__vp) shifted (thick*(1,-2))}
\end{fmfgraph}
\end{fmffile}%
}
Note diagram extends past bounding box:
\fboxsep=0pt
\fbox{\usebox{\feynbox}}
Label a portion of the diagram
\usebox{\feynbox}\postfeynlabel{0}{1}{\feynbox}{\{See, the brace centers match}
\usebox{\feynbox}\postfeynlabel{-.15}{.7}{\feynbox}{\{for big and small braces.}
\prefeynlabel{-.45}{.6}{\feynbox}{\textbackslash prefeynlabel}%
\usebox{\feynbox}%
\postfeynlabel{.42}{.8}{\feynbox}{\textbackslash postfeynlabel}
\end{document}