我正在准备一些讲义,在创建像图中这样的环形箭头时遇到了一些困难。
我想要做的是在 TikZ 中定义的箭头周围创建一个椭圆形(类似于代码示例中的形状)。
\draw[->] (0,0) -- (1,1);
以下是该图片的完整代码:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usepackage{mhchem}
\usepackage{textgreek}
\usetikzlibrary{decorations,decorations.pathreplacing,decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}
\draw (-0.5,-1) node{+}
(-0.5,5) node{-}
(-0.5,5.5) node{Redoxpotential}
(2,-3.7) node{Fotosystem II}
(6,-2) node{Fotosystem I};
\path (0.7,-0.7) node(1) {ljus}
(2,-2) node[rectangle,draw](2) {P680}
(2,3) node(3) {\ce{e-}}
(3,2) node(4) {\ce{QH2}}
(4,1) node(5) {Cyt b$_6$f}
(3,0) node(6) {\ce{H+} lumen}
(5,0) node(7) {Plastocyanin}
(6,-1) node[rectangle,draw](8) {P700}
(7.2,0.2) node(9) {ljus}
(6,4) node(10) {\ce{e-}}
(7.5,2.5) node(11) {\ce{e-}-redoxin (Fd)};
\draw[decorate, decoration={snake},draw=red,->] (1) -- (2);
\draw[->] (1.5,-2.74) to[out=60,in=180] (2,-2.24) to[out=0,in=120] (2.5,-2.74);
\draw (1.3,-2.94) node[]{\ce{2H2O}} (2.98,-2.907)node[]{\ce{O2 + 4H+}};
\draw[->] (2) -- (3);
\draw[->] (3) -- node[midway,right]{\ce{e-}-transportkedja} (4);
\draw[->] (4) -- (5);
\draw[->] (5) -- (6);
\draw[->] (5) -- (7);
\draw[->] (7) -- (8);
\draw[decorate, decoration={snake},draw=red,->] (9) -- (8);
\draw[->] (8) -- (10);
\draw[->] (10) -- node[midway,right]{\ce{e-}-transportkedja} (11);
\draw[->] (11) -- (8.5,1.5);
\draw[->] (8.15,0.95) node[below]{NADP} to[out=75,in=215] (8.5,1.5) to[out=35,in=190] (9.1,1.7) node[right]{NADPH};
\draw (7.6,0) node[right]{\ce{2Fd + NADP -> 2Fd + NADPH}};
\draw[dotted,->] (11) -- (5);
\end{tikzpicture}
\end{document}
答案1
您可以通过以下方式实现此绘图排队椭圆形状的计算。
也就是说,你需要计算:
- 椭圆形的半径
- 它所处的角度。
- 椭圆形的中心
所有这些都可以使用calc
TikZ 库来完成。
以下是一个例子:
\begin{tikzpicture}
\coordinate (a) at (0,0); % Save the end-coordinates of the arrow
\coordinate (b) at (4,7);
\draw[->] (a) -- (b);
% Calculate the vector from a to b:
\draw let \p1 = ($(b)-(a)$),
% radius of the elliptic shape, along the arrow:
\n1 = {veclen(\x1,\y1)/2},
% angle of rotation:
\n2 = {atan(\y1/\x1)}
% START DRAWING
in ($(a)!.5!(b)$) circle[x radius=\n1,
y radius=20pt,
rotate=\n2];
\end{tikzpicture}
请注意,\n1 = ...
您还可以添加值,以便获得箭头周围椭圆形的范围。
还要注意,通过重复使用坐标,您几乎可以在这个环境中做任何您想做的事情。