Drawing Feynman Diagram in LaTex
两种LaTex费曼图绘制方案
有必要根据自己的摸索介绍一下LaTex关于费曼图的绘制方法。Tex排版环境上关于费曼图的绘制有着成熟的解决方案,比如古老的FeynMF/FeynMP或者Axodraw,尤其对于后者,还有可视化绘制工具JaxoDraw。但是二者因为复杂的交互和语法,存在各种痛点。另外,如果去检索类似的话题,初学者极容易陷入群魔乱舞的海洋,网上莫衷一是的方案缺少对比性。而本文是笔者亲身实践多方尝试凝练的结果,有了横向对比,综合得出TiKz-Feynhand模块是LaTex上表现最好的费曼图绘制方案。
本文旨在引入TiKz-Feynhand费曼图绘制,讲一讲在LaTex中费曼图绘制的内在逻辑,以方便有需要者更为便捷的选择,省去探索试错的学习成本。作为对比,这里介绍2016年更新的AxoDraw2绘制费曼图的方式(FeynMF/FeynMPF过于老旧,这里不做推荐)。
两种方式Bubble圈图的语法:
AxoDraw2
1 |
|
![](http://tva1.sinaimg.cn/large/006fyIojgy1h5r5gxnbywj30je0c8mxz.jpg)
Feynhand
1 |
|
![](http://tva1.sinaimg.cn/large/006fyIojgy1h5r5gxn8a6j30gj09fdfy.jpg)
很明显后者的语法更简洁,下面要介绍本文的重点即相应绘图的逻辑。
AxoDraw2简介
AxoDraw2绘制费曼图的逻辑非常容易理解,它的定义环境类似于PythonGUI画布的概念,\begin{axopicture}\end{axopicture}
定义的是一个绘制区域(画布),对应的绘制结构就是点和线,\Vertex
和\Line
,曲线的语法是\Arc
,都为大写字母开头。因为是引用画布的概念,我们一般在画布环境下定义网格\AxoGrid
,然后依据网格的位置进行作图。这里点和线指令只需要给定两点在网格上的坐标就能在画布上绘制对应的图,Arc的绘制同理,只不过条件上需要坐标和弧度的限制,具体格式可以参看手册。因为是画图制图的逻辑,所以AxoDraw2可以方便地使用可视化工具JaxoDraw。不过AxoDraw的痛点在于不能自适应的调节在数学环境中的位置(AxoDraw2 2016的手册给了一种自定义绘制单元的方法可以图像单元实现数学环境中的自适应对齐,但是步骤非常繁琐),虽然上手非常容易,但是对于复杂的费曼图绘制仍然是非常麻烦。
另外一点是,AxoDraw2要是想直接在PDFLaTex或者XeLaTex上实现图的渲染,还需要在调用axphelp这个脚本实现对.dvi到.ps文件的转换,因为AxoDraw就是基于对.dvi文件编译过程。这额外增加了编译的步骤。
TiKz-Feynhand简介
到目前为止,个人觉得TiKz-Feynhand是绘制费曼图的最佳解决方案。它的绘制指令基于TiKz绘制模块。而TiKz在LaTex上的绘图支持是十分完备的,也非常容易上手。实际上TiKz-Feynhand只是在TiKz-Feynman的基础上小小改进,后者由于受限于渲染引擎的使用,只能在LuaLaTex编译环境下才能实现,或者在其他编译环境中调用Lua的编译指令。所以TiKz-Feynman即便语法简单功能丰富,但使用场景不够友好,对于大多数期刊PDFLaTex的编译要求很难进行推广。Feynhand正是为了解决这一问题而诞生,虽然语法简洁程度上有所退让,但是依然非常容易入手,而且可以很方便地与Tex的数学环境相结合,个人以为真正解决了LaTex绘制费曼图的一些列问题。
Feynhand的语法环境可以直接在TiKz的绘制环境\begin{tikzpicture}\end{tikzpicture}
中使用,这种兼容性决定了TiKz绘制命令基本上都可以在Feynhand的绘制环境\begin{feynhand}\end{feynhand}
下实现。由于是定制的格式,Feymhand的绘制逻辑不依赖于画布,而是存粹的根据个人需要给定坐标。设置的坐标是相对位置,而非AxoDraw设置画布的绝对位置。如此我们可以在设定坐标原点的基础上根据正交坐标系任意确定费曼图绘制的区域。对于定制的费曼图顶点、费米线、玻色线等格式可以参看Feynhand手册。该项目是Max Dohse个人开发,目前基本上的费曼图都能实现,风格定制的选择目前还在开发中,但是现有的功能可以完全满足复杂费曼图的绘制。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!