![Tikz 图片(弧形)无法定位](https://linux22.com/image/444039/Tikz%20%E5%9B%BE%E7%89%87%EF%BC%88%E5%BC%A7%E5%BD%A2%EF%BC%89%E6%97%A0%E6%B3%95%E5%AE%9A%E4%BD%8D.png)
我正在尝试将用 Tikz 完成的圆弧(代表电流)与费曼图(用 feynmp 完成)放在一起,但即使尝试更改 Tikz 图片的坐标它也不会改变。
我的代码如下:
\documentclass[margin=25 mm]{standalone}
\usepackage{amsmath,amssymb}
\usepackage{graphicx}
\usepackage{feynmp-auto}
\usepackage{tikz} % pras correntes
\usetikzlibrary{positioning}
\begin{document}
%%_________________________________________ feynman diagram
\newcommand{\marrow}[5]{%
\fmfcmd{style_def marrow#1
expr p = drawarrow subpath (1/4, 3/4) of p shifted 6 #2 withpen pencircle scaled 0.4;
label.#3(btex #4 etex, point 0.5 of p shifted 6 #2);
enddef;}
\fmf{marrow#1,tension=0}{#5}}
%%_________________________________________
\begin{fmffile}{dgs}
\begin{fmfgraph*}(150,100)
\fmfleft{i1,i2}
\fmfright{o1,o2}
\fmflabel{$e^-$}{i2}
\fmflabel{$e^-$}{o2}
\fmflabel{$\mu^-$}{i1}
\fmflabel{$\mu^-$}{o1}
\fmf{fermion}{i2,v2,o2}
\marrow{ea}{ up }{top}{$P_A$}{i2,v2}
\marrow{eb}{down}{bot}{$P_C$}{v2,o2}
\fmf{fermion}{i1,v1,o1}
\marrow{ma}{down}{bot}{$P_B$}{i1,v1}
\marrow{mb}{ up }{top}{$P_D$}{v1,o1}
\fmf{photon,label=$\gamma$}{v2,v1}
\end{fmfgraph*}
\end{fmffile}
%%_________________________________________end of feynman diagram
%%%_________________________________________ tikz pictures:
\begin{tikzpicture}
\draw[blue, ultra thick, ->] (0,0) arc[radius = 20mm, start angle= 150, end angle= 25];
\end{tikzpicture}
\begin{tikzpicture}
\draw[blue, ultra thick, ->] (0,0) arc[radius = 20mm, start angle= 210, end angle= 335];
\end{tikzpicture}
\end{document}
结果如下:
附言:为了使图表出现在 pdf 上,您必须使用 metapost 编译来编译 metapost 辅助文件。
我希望弧线位于图表的上方和下方。
答案1
内的坐标tikzpicture
与页面或文本块无关,仅与同一 内的其他坐标有关tikzpicture
。图表的边界框被裁剪为图表的内容,然后由 TeX 将其放置在页面上,就像将图像或字母放置在页面上一样。因此,\tikz\draw (0,0) -- (1,0);
看起来与 完全相同,\tikz\draw (10,10) -- (11,10);
因为两者都是tikzpicture
由长度为 1 的单个水平箭头组成的 。(\tikz
是环境的缩写tikzpicture
。)
因此,您会看到页面上有三个单独的框,一个接一个。一个框用于费曼图,一个框用于每个弧。由于课程的standalone
工作方式,它们彼此相邻。例如,如果这是在课程中,它们将彼此叠放在一起,因为每个单独的图表之间都有一个段落分隔符(一个空行)。如果您将选项添加到课程中,article
您可以获得相同的结果standalone
varwidth
因此,针对此特定情况的一个快速解决方法是将所有三个图放在一个中center environment
,首先是 TikZ 制作的顶部圆弧,然后是费曼图,然后是第二条圆弧。这是可行的,因为费曼图关于垂直方向对称。
不过,最好按照 John Kormylo 在评论中建议的那样做,因为这样您就可以将所有内容放在同一个位置tikzpicture
,并相对于其他图表元素定位弧线。或者可能使用tikz-feynman
包来绘制图表。
%\documentclass{article}
\documentclass[border=25mm, varwidth=true]{standalone} % <-- added varwidth=true
\usepackage{amsmath,amssymb}
\usepackage{feynmp-auto}
\usepackage{tikz} % pras correntes
\usetikzlibrary{positioning}
\newcommand{\marrow}[5]{%
\fmfcmd{style_def marrow#1
expr p = drawarrow subpath (1/4, 3/4) of p shifted 6 #2 withpen pencircle scaled 0.4;
label.#3(btex #4 etex, point 0.5 of p shifted 6 #2);
enddef;}
\fmf{marrow#1,tension=0}{#5}}
\begin{document}
\begin{center}
\begin{tikzpicture}
\draw[blue, ultra thick, ->] (0,0) arc[radius = 20mm, start angle= 150, end angle= 25];
\end{tikzpicture}
\begin{fmffile}{dgs}
\begin{fmfgraph*}(150,100)
\fmfleft{i1,i2}
\fmfright{o1,o2}
\fmflabel{$e^-$}{i2}
\fmflabel{$e^-$}{o2}
\fmflabel{$\mu^-$}{i1}
\fmflabel{$\mu^-$}{o1}
\fmf{fermion}{i2,v2,o2}
\marrow{ea}{ up }{top}{$P_A$}{i2,v2}
\marrow{eb}{down}{bot}{$P_C$}{v2,o2}
\fmf{fermion}{i1,v1,o1}
\marrow{ma}{down}{bot}{$P_B$}{i1,v1}
\marrow{mb}{ up }{top}{$P_D$}{v1,o1}
\fmf{photon,label=$\gamma$}{v2,v1}
\end{fmfgraph*}
\end{fmffile}
%%_________________________________________end of feynman diagram
%%%_________________________________________ tikz pictures:
\begin{tikzpicture}
\draw[blue, ultra thick, ->] (0,0) arc[radius = 20mm, start angle= 210, end angle= 335];
\end{tikzpicture}
\end{center}
\end{document}