我正在使用包词汇表来收集与我的博士论文松散相关的各种主题的术语、定义和解释。在一些条目中,我还想包含我目前使用 feynmp 创建的费曼图。
问题是,为了生成图表,我需要将代码放入
\begin{fmffile}{name}
\end{fmffile}
为了能够被 latex 编译,该环境必须位于
\begin{document}
\end{document}
环境。
但是,所有词汇表的条目都在序言中前这
\begin{document}
。
使用 fmfkeep 和 fmfreuse,我仍然可以在文档中生成费曼图,然后在词汇表的条目中引用它们。但这意味着我有一些额外的页面,其中包含所有费曼图 - 目前我需要这样做才能在条目中包含费曼图...
为了直接在条目位置写入图表,我必须在词汇表中的每个条目中创建并使用一个新的 *.mp 文件。由于有数十个条目和更多的图表,这将变得非常复杂,因为这意味着每次运行 latex 时,我都必须单独发布每个 *.mp 文件...
据我所知,feynmf 将图表保存为 eps 文件。有什么方法可以将图表转换为 eps,然后使用 \includegraphics 包含它们吗?在这种情况下,我可能会丢失所有标签,因为它们存储在不同的文件中。
还有其他可能性吗,以致我不需要这些带有费曼图的额外页面?
是否有其他与词汇表更兼容的软件包,我可以使用它们来生成费曼图?或者是否有其他与 feynmf 更兼容的生成词汇表的软件包?但我想有了 feynmf 和词汇表,我已经拥有了用于这些目的的两个最广泛使用的软件包?
提前感谢您的任何建议:)
好的,这是 MWE。我添加了一些文字,希望它不会打扰我,而是解释了我遇到的问题...
\documentclass{article}
\usepackage{feynmp}
\listfiles
\usepackage{datatool}
\usepackage{glossaries}
\makeglossaries
\longnewglossaryentry{minimal}{name={minimal}}{I would like to have a Feynman diagram here :) \\
I can either open fmffile here \\~\\
\begin{fmffile}{minimal01}
\begin{fmfgraph*}(125,100)
\fmfkeep{directphoton01}\fmfleftn{l}{2} \fmfrightn{r}{2}
\fmf{fermion,tension=1.5}{v1,l1}\fmf{fermion,tension=1.5}{l2,v2}\fmf{fermion,tension=2}{v2,v1}
\fmf{phantom,tension=1.5}{v1,r1}
\fmf{photon,tension=1.5}{r2,v2}\fmflabel{\(\bar{q}\)}{l1} \fmflabel{\(q\)}{l2} \fmflabel{\(\gamma\)}{r2} \fmflabel{\(g\)}{r1}
\fmfdotn{v}{2}
\fmffreeze \fmf{plain,tension=4}{v1,m1}\fmf{gluon,tension=0.5}{m1,m2}\fmf{plain,tension=4}{m2,r1}
\end{fmfgraph*}
\end{fmffile}
~\\~\\ and then close it here which means one fmffile for each entry... \\
Or I can use fmfreuse{directphoton02} which allows me to have all diagrams in one fmffile, but generates that additional diagram above header Glossary, which is part of the maintext, since glossary is put at the end of the document...\\~\\
\fmfreuse{directphoton02}
}
\begin{document}
\begin{fmffile}{minimal02}
\begin{fmfgraph*}(125,100)
\fmfkeep{directphoton02}\fmfleftn{l}{2} \fmfrightn{r}{2}
\fmf{fermion,tension=1.5}{v1,l1}\fmf{fermion,tension=1.5}{l2,v2}\fmf{fermion,tension=2}{v2,v1}
\fmf{phantom,tension=1.5}{v1,r1}
\fmf{photon,tension=1.5}{r2,v2}\fmflabel{\(\bar{q}\)}{l1} \fmflabel{\(q\)}{l2} \fmflabel{\(\gamma\)}{r2} \fmflabel{\(g\)}{r1}
\fmfdotn{v}{2}
\fmffreeze \fmf{plain,tension=4}{v1,m1}\fmf{gluon,tension=0.5}{m1,m2}\fmf{plain,tension=4}{m2,r1}
\end{fmfgraph*}
\end{fmffile}
\glsaddall%\makeglossary\makeglossary
\printglossaries
\end{document}
答案1
我不知道这是否是您想要的;preamblefmffile
环境具有与 相同的角色fmffile
,但不排版任何内容,并且应该在 之前;如果您不想用图表填充序言,\begin{document}
您可以有另一个文件,比如说preamblediagrams.tex
收集所有这些图表,并说\input{preamblediagrams}
在 之前。\begin{document}
我使用feynmp-auto
它,因为它让生活更轻松。如果你没有它,因为你的 TeX 发行版太旧了,那么请feynmp
手动使用和编译 Metapost 文件。
\documentclass{article}
\usepackage{feynmp-auto}
\usepackage{glossaries}
\usepackage{environ}
\makeglossaries
\NewEnviron{preamblefmffile}[1]{%
\begingroup\edef\x{\endgroup
\noexpand\AtBeginDocument{\setbox0=\vbox{
\noexpand\begin{fmffile}{#1}
\unexpanded\expandafter{\BODY}
\noexpand\end{fmffile}
}}}\x
}
\begin{preamblefmffile}{minimal01}
\begin{fmfgraph*}(125,100)
\fmfkeep{directphoton01}
\fmfleftn{l}{2} \fmfrightn{r}{2}
\fmf{fermion,tension=1.5}{v1,l1}
\fmf{fermion,tension=1.5}{l2,v2}\fmf{fermion,tension=2}{v2,v1}
\fmf{phantom,tension=1.5}{v1,r1}
\fmf{photon,tension=1.5}{r2,v2}
\fmflabel{\(\bar{q}\)}{l1}
\fmflabel{\(q\)}{l2}
\fmflabel{\(\gamma\)}{r2}
\fmflabel{\(g\)}{r1}
\fmfdotn{v}{2}
\fmffreeze
\fmf{plain,tension=4}{v1,m1}
\fmf{gluon,tension=0.5}{m1,m2}
\fmf{plain,tension=4}{m2,r1}
\end{fmfgraph*}
\end{preamblefmffile}
\longnewglossaryentry{minimal}{name={minimal}}{I would like to have a Feynman diagram here\\[3ex]
\fmfreuse{directphoton01}
}
\begin{document}
Some text
\glsaddall
\printglossaries
\end{document}
LaTeX 文件仅生成一页。