2

Consider the following MWE

\documentclass[11pt]{article}
\usepackage{feynmp-auto}

\begin{document}

\begin{fmffile}{afilename} \setlength{\unitlength}{0.1cm} \begin{fmfgraph}(40,25) \fmfleftn{i}{2} \fmfrightn{o}{2} \fmf{dashes,tension=2}{i1,v4} \fmf{dashes,tension=2}{o1,v1} \fmf{dashes,tension=2}{o2,v2} \fmf{dashes,tension=2}{i2,v3} \fmf{dbl_plain_arrow}{v3,v2,v1} \fmf{fermion}{v1,v4,v3} \fmfdotn{v}{4}
\end{fmfgraph} \end{fmffile}

\end{document}

which produces the output enter image description here

How can I change the size of the double-lined arrow-head to have the same size as the arrow-head of the single-line? I've looked into the documentation and in table 3 there is an option listed as decoration.size, but I can't figure out how to use it correctly.. If I exchange the line in the code that produces the double-lined arrow with

\fmf{dbl_plain_arrow,decoration.size=2cm}{v3,v2,v1}

nothing changes..

Appreciate any input on this.

Sito
  • 681

2 Answers2

3

I have done several compilations and changes after I have looked at the documentation...and with a lot of humility I think that it is not possible. In fact I have thought to put, for the same cicle v3, v2, v1 both \fmf{dbl_plain}{v3,v2,v1} (double line) and \fmf{phantom_arrow}{v3,v2,v1}. The proof of my hypothesis it that if you prove this code:

\documentclass[11pt]{article}
\usepackage{feynmp-auto}

\begin{document}

\begin{fmffile}{afilename} \setlength{\unitlength}{0.1cm} \begin{fmfgraph}(40,25) \fmfleftn{i}{2} \fmfrightn{o}{2} \fmf{dashes,tension=2}{i1,v4} \fmf{dashes,tension=2}{o1,v1} \fmf{dashes,tension=2}{o2,v2} \fmf{dashes,tension=2}{i2,v3} \fmf{dbl_plain}{v3,v2,v1} \fmf{phantom_arrow}{v3,v2,v1} \fmf{fermion}{v1,v4,v3} \fmfdotn{v}{4}
\end{fmfgraph} \end{fmffile}

\end{document}

you have a strange output:

enter image description here

where you have not a rectangle. Hence the correct code is only, dbl_plain_arrow with the big arrow.

Follow-up 2021/07/14: Based on the suggestion/comment of the very nice user @campa using tension=0 into the row

\fmf{phantom_arrow,tension=0}{v3,v2,v1}

\documentclass[11pt]{article}
\usepackage{feynmp-auto}
\begin{document}
\begin{fmffile}{afilename}
\setlength{\unitlength}{0.1cm}
\begin{fmfgraph}(40,25)
    \fmfleftn{i}{2}
    \fmfrightn{o}{2}
    \fmf{dashes,tension=2}{i1,v4}
    \fmf{dashes,tension=2}{o1,v1}
    \fmf{dashes,tension=2}{o2,v2}
    \fmf{dashes,tension=2}{i2,v3}
    \fmf{dbl_plain}{v3,v2,v1}
    \fmf{phantom_arrow,tension=0}{v3,v2,v1}
    \fmf{fermion}{v1,v4,v3}
    \fmfdotn{v}{4}  
\end{fmfgraph}
\end{fmffile}

\end{document}

enter image description here

Sebastiano
  • 54,118
  • I can't answer you on MSE: my account has been suspended for14 days, because I dared give hints for questions they declared ‘low quality’. – Bernard Jul 13 '21 at 20:23
  • @Bernard No comment. I'm sorry but to suspend on these occasions seems to me pure folly. :-( – Sebastiano Jul 13 '21 at 20:31
  • 1
    The idea is good. You can get a rectangle by drawing the phantom line with zero tension: \fmf{phantom_arrow,tension=0}{v3,v2,v1}. Or you can draw the rectangle first, issue \fmffreeze, and add the arrows afterwards. – campa Jul 14 '21 at 08:48
  • @campa It is great for me to know English well but I am not able to. I didn't think and didn't see that there was a command like \tikzcdset also for feynmp called \fmfset (I saw the manual on page 31). Now I'm trying. – Sebastiano Jul 14 '21 at 14:01
  • @campa Done! :-)))) What are the rules of tension=0 and \fmffreeze? If I not see an example I often misunderstand. :-( – Sebastiano Jul 14 '21 at 14:17
  • 1
    You declare your vertices, and draw all the lines, and then imagine the lines are springs which try to contract. The "equilibrium position" determines the final form of the diagram. tension=0 means that the line is drawn but it doesn't "pull". \fmffreeze can be used to freeze the vertices in the current configuration, such that drawing additional lines doesn't move them. – campa Jul 14 '21 at 15:02
3

The FeynMF manual describes something similar in section 2.8 (Raw metafont). In particular, it shows how to draw a line with an enlarged arrow. Here we just need the opposite :-)

The standard line styles are defined in the file feynmp.mp, which is the first thing passed to your .mp file when you issue \begin{fmffile}{...}. In feynmp.mp we find

style_def dbl_plain_arrow expr p =
  draw_double_arrow p;
enddef;

so basically dbl_plain_arrow is an alias for double_arrow, which in turn is defined as

style_def double_arrow expr p =
  draw_double p;
  shrink (1.5);
    cfill (arrow p);
  endshrink;
enddef;

The shrink bit is what makes the arrow look larger (because of the factor 1.5). You can then overwrite this definition and use a normal arrow

\documentclass[11pt]{article}
\usepackage{feynmp-auto}

\begin{document}

\begin{fmffile}{afilename} \fmfcmd{% style_def double_arrow expr p = draw_double p; cfill (arrow p); enddef; }% \setlength{\unitlength}{0.1cm}% \begin{fmfgraph}(40,25) \fmfleftn{i}{2} \fmfrightn{o}{2} \fmf{dashes,tension=2}{i1,v4} \fmf{dashes,tension=2}{o1,v1} \fmf{dashes,tension=2}{o2,v2} \fmf{dashes,tension=2}{i2,v3} \fmf{dbl_plain_arrow}{v3,v2,v1} \fmf{fermion}{v1,v4,v3} \fmfdotn{v}{4}
\end{fmfgraph} \end{fmffile}

\end{document}

enter image description here

Alternatively you could redefine only dbl_plain_arrow, such that you can still have the original behaviour with double_arrow.

campa
  • 31,130
  • It is fantastic. How do you find the style_def dbl_plain_arrow expr p = draw_double_arrow p; enddef; and style_def double_arrow expr p = draw_double p; shrink (1.5); cfill (arrow p); endshrink; enddef;? – Sebastiano Jul 14 '21 at 14:04
  • 1
    @Sebastiano I opened feynmp.mp and searched for dbl_plain_arrow. – campa Jul 14 '21 at 14:06
  • But do you have a software to open feynmp.mp? I not remember this. – Sebastiano Jul 14 '21 at 14:08
  • 1
    @Sebastiano feynmp.mp is just a text file, you need no software to open it other than any text editor. – campa Jul 14 '21 at 14:08