FeynMF:TeXによるファインマン・ダイアグラムの書き方
Last updated 2015/4/9



Windows上でTeXを用いている人が、ファインマン・ダイアグラム(Feynman Diagram)をTeXで書くための方法を解説していきます。ここでは、角藤版のTeXがインストールされていて、dviファイルの出力用ソフトウェアとして、dvioutを使っているとします。(その他のOSでも原理的には同じなので、その環境に応じて応用してください。また、この解説ページを2004/1/25に大幅に更新しました。乙部さんの本からTeXをインストールしている場合などで、古い情報が必要な方はこちらを参照してください)

TeXでファインマン・ダイアグラムを書くには、パッケージが必要です。角藤版のTeXを標準インストールでインストールした場合には、デフォルトで入っています。もし、FeynMFがインストールされていないならば、pLaTeX2eならここから、LaTeX2.09ならここからinsファイルを、さらに、ここから、dtxファイルをダウンロード(DL)してください。DL先は、

c:\usr\local\share\texmf\tex\latex\feynmf

というディレクトリを作って、そこに保存しましょう。次に、「feynmf.ins」というファイルをTeXでコンパイルします。コマンドプロンプト上で、

c:\"insファイルをDLしたフォルダ">ptex feynmf.ins

のように実行します。出来るファイルは
「feynmf.log」「feynmf.aux」「feynmf.mf」「feynmf.sty」「feynmf.drv」「feynmp.mp」「feynmp.sty」「feynmp.drv」「fmfman.drv」「fmfman.drv」
です。

ここで、「feynmf.mf」というファイルはmetafontのソースファイルなので

c:\usr\local\share\texmf\fonts\source\feynmf  (ディレクトリ構成は私の設定です)

というディレクトリを作って、そこにコピーしておきましょう。なお、mktexlsr.exeを実行することを忘れずに。

では、feynmfを実際に使ってみることにしましょう。ここでは、LaTeX2eの形式で説明していくことにします。まず、「sample.tex」というファイルを作り、テキストエディタで次のように編集しましょう。

\documentclass{article}
\usepackage{feynmf}
\unitlength=1mm
\begin{document}

\begin{figure}
\begin{fmffile}{feyngraph}
\begin{fmfgraph*}(40,30)

%%%%% 左側に2本のlineと右側に2本のlineを用意し、それぞれにindexを指定する %%%%%
\fmfleft{ei,ef}
\fmfright{hi,hf}

%%%%% lineにlabel付ける %%%%%
\fmflabel{$e^-(p')$}{ef}
\fmflabel{$e^-(p)$}{ei}
\fmflabel{h$(P)$}{hi}
\fmflabel{h$(P')$}{hf}

%%%%% vertex(ここでは、geeとghhのこと)を指定してlineを描く %%%%%
\fmf{fermion}{ei,gee,ef}
\fmf{photon,label=$\gamma$}{gee,ghh}
\fmf{heavy}{hi,ghh,hf}

%%%%% vertexを点で描く %%%%%
\fmfdot{gee,ghh}

\end{fmfgraph*}
\end{fmffile}
\end{figure}

\end{document}

というような形式で書くことになります。ここで、斜体の部分は自由に変えてもらって構いません。具体的には、{feyngraph}の部分は、生成されるMETAFONTファイルの名前になる部分で、この部分を変更して、hogehogeにしたとすると、hogehoge.mfというMETAFONTファイルを生成します。また、(40,30)の部分は、図の大きさをピクセル数で指定するパラメータです。ここで、ピクセル数以外の単位は使えないことに注意する必要があります。

では、この「sample.tex」をコンパイルして、ファインマングラフを表示させてみましょう。コンパイルするには、

c:\"sample.texがあるフォルダ">platex sample.tex
c:\"sample.texがあるフォルダ">mf "\mode=localfont; \input feyngraph"
c:\"sample.texがあるフォルダ">platex sample.tex

の順にコマンドを実行します。出力されるMETAFONTファイル名を変えている場合は、「feyngraph」の部分をそのファイル名に置き換えてください。コマンドを実行すると、「sample.dvi」というファイルが作られます。これを、dvioutという出力ソフトで出力します。

c:\"sample.texがあるフォルダ">dviout sample.dvi

このコマンドを実行する、または、dvioutから開こうとすると、エラーが出るはずです。これは、上の「sample.tex」ファイルからファインマングラフを描くために必要なtfmファイルや、pkフォントなどが、dvioutが指定するフォルダに見つからないことから生じるエラーです。

このエラーを解決するには、dvioutの「Option」->「Setup Parameter」から、「Font」タブをクリックし、「TEXPK」の欄に

;.\^s.^dpk

というパラメーターを追加しておくと、エラーは発生しなくなります(山川さん、不祥の器さんに感謝)。 そうすると、



のようにグラフが表示されると思います。(ちなみに、Linuxなどのdviビューアーであるxdviだと、設定をいじることなくちゃんと表示してくれます)。

一方で、パッケージとして、feynmfではなく、feynmpを使うという方法もあります。こちらだと、dvioutの設定をいじる必要はありません。このパッケージを使うためには、\usepackage{feynmf}の部分を

\usepackage{feynmp}

と書き直せばよいです。dviファイルは、

c:\"sample.texがあるフォルダ">platex sample.tex
c:\"sample.texがあるフォルダ">mpost feyngraph.mp
c:\"sample.texがあるフォルダ">platex sample.tex

と実行すると、feynmfのときと同様に表示されます、もちろん、mpostを実行する際に指定するファイル名は、例えば、texファイルの中で、{feyngraph}の部分をhogehogeにしたとすると、hogehoge.mpというファイルができますので、そのファイル名に変更する必要があります。


さらに、二つほど、例を挙げておきたいと思います。これらの例を比較したりしても、Feynmfの文法の意味が理解できるかと思います。

例.2 Wボゾンを介したdクォークのベータ崩壊のファインマン・ダイアグラム。

\documentclass{article}
\usepackage{feynmf}
\unitlength=1mm
\begin{document}
\begin{figure}
\begin{fmffile}{feyngraph2}
\begin{fmfgraph*}(40,30)

%%%%% 左側に1本のline、右側に3本のlineを用意して、それらにindexを指定する %%%%%
\fmfleft{di}
\fmfright{nuo,eo,uo}

%%%%% lineにlabelを付ける %%%%%
\fmflabel{$d(p)$}{di}
\fmflabel{$e^-(k)$}{eo}
\fmflabel{$\nu_e(k')$}{nuo}
\fmflabel{$u(p')$}{uo}

%%%%% vertex(ここでは、duwとwne)を指定してlineを描く %%%%%
\fmf{fermion}{di,duw,uo}
\fmf{photon,label=$W(q)$}{duw,wne}
\fmf{fermion}{wne,eo}
\fmf{fermion}{wne,nuo}

\end{fmfgraph*}
\end{fmffile}
\end{figure}

\end{document}





例.3 中性子のベータ崩壊の反応を、4体相互作用として、vertexを斜線付きの丸で書いたファインマン・ダイアグラム。

\documentclass{article}
\usepackage{feynmf}
\unitlength=1mm
\begin{document}
\begin{figure}
\begin{fmffile}{feyngraph3}
\begin{fmfgraph*}(40,30)

%%%%% 左側に5本のline、右側に3本のlineを用意して、それらにindexを指定する %%%%%
\fmfleft{emp1,emp2,emp3,ni,emp4}
\fmfright{nuo,eo,po}

%%%%% lineにlabelを付ける %%%%%
\fmflabel{$n(p)$}{ni}
\fmflabel{$e^-(k)$}{eo}
\fmflabel{$\nu_e(k')$}{nuo}
\fmflabel{$p(p')$}{po}

%%%%% vertex(ここでは、npen)を指定してlineを描く %%%%%
\fmf{fermion}{ni,npen,po}
\fmf{fermion}{npen,eo}
\fmf{fermion}{npen,nuo}

%%%%% vertexを丸で描く %%%%%
\fmfblob{.15w}{npen}

\end{fmfgraph*}
\end{fmffile}
\end{figure}

\end{document}


この例では、中性子のlineを上斜めから表示させたいがために、

\fmfleft{emp1,emp2,emp3,ni,emp4}

の部分でもって、下から3つの表示させないダミーの点を用意し、さらに、高さの調整(もう少し下にずらしたかった)のために、上にもダミーを1つ入れています。この部分は、全くきれいだと思えないし、ほかにも良い方法があるのかも知 れませんが、試行錯誤して、小細工をすれば、自分の望む形にできるという例だと思っていただければと思います。


以下、書式の解説などの、詳しい話は、まだ工事中です。その代わりに、英語によるマニュアルを置いておきます。いろいろと試行錯誤して、描きたいファインマン・ダイアグラムを描けるよう、頑張ってください。