如何在 TikZ 中定位箭头对来制作“鱼叉”?

如何在 TikZ 中定位箭头对来制作“鱼叉”?

我希望使用左右“鱼叉”来显示动力学方案中的可逆反应。我可以得到部分结果,但我如何才能垂直移动水平箭头,使它们分开(形成鱼叉)而不是相互重叠?

或者有没有更好的方法来做到这一点?

使用 TikZ

\usepackage{tikz}
\usetikzlibrary{matrix,arrows}

然后

\begin{tikzpicture}
\matrix (m) [matrix of nodes, column sep=3em]
{A + R & AR & AR* \\};
\path[-left to, font=\scriptsize]
(m-1-1) edge node[above]{$k_{+1}$} (m-1-2);
\path[-left to,font=\scriptsize]
(m-1-2) edge node[below] {$k_{-1}$} (m-1-1);
\path[-left to,font=\scriptsize]
(m-1-2) edge node[above] {$\alpha$} (m-1-3);
\path[-left to,font=\scriptsize]
(m-1-3) edge node[below] {$\beta$} (m-1-2);
\end{tikzpicture}

更新:感谢所有回复建议的人 - 他们都建议使用 TikZ 以外的方法。这些方法在很多情况下都是合适的,但我选择 TikZ 的原因是希望生成比简单线性方程更复杂的方案(见下文)。另外,有几点,理想情况下,我希望鱼叉的长度固定,反应物不要采用数学模式(即罗马字体而不是斜体)。

我仍然没有直接解决 TikZ 中鱼叉生成问题的回应。

在此处输入图片描述

上面的图片是用以下代码生成的:

\begin{tikzpicture}


% define matrix
\matrix (m) [matrix of nodes, column sep=3em, row sep=2em]
{ & & & AR*\\
A + R & ARb & ARc \\
 & & & AD\\};

 % agonist binding
\path[-left to, font=\scriptsize]
(m-2-1) edge node[above]{$k_{+1}$} (m-2-2);
\path[-left to,font=\scriptsize]
(m-2-2) edge node[below] {$k_{-1}$} (m-2-1);

% cleft closure
\path[-left to,font=\scriptsize]
(m-2-2) edge node[above] {$\beta$} (m-2-3);
\path[-left to,font=\scriptsize]
(m-2-3) edge node[below] {$\alpha$} (m-2-2);

% channel opening
\path[-left to, font=\scriptsize]
(m-2-3) edge node[above, xshift=-6] {$\delta$} (m-1-4);
\path[-left to, font=\scriptsize]
(m-1-4) edge node[below, xshift=6] {$\gamma$} (m-2-3);

% desensitization
\path[-left to, font=\scriptsize]
(m-2-3) edge node[above, xshift=16] {1000 s$^{-1}$} (m-3-4);
\path[-left to, font=\scriptsize]
(m-3-4) edge node[below, xshift=-10] {10 s$^{-1}$} (m-2-3);

\end{tikzpicture}

答案1

我建议使用化学无花果包用于此类目的。它具有针对此类方案的内置命令,这些命令高度可定制。此外,它还提供了几种箭头类型,其中一种是用于平衡反应的鱼叉:

\documentclass{article}
\usepackage{chemfig,siunitx}
\setchemfig{compound sep=7em} % (not exactly) the length of the arrows
\begin{document}

\schemestart
  A \+ R
  \arrow{<=>[$k_{+1}$][$k_{-1}$]}
  ARb
  \arrow{<=>[$\alpha$][$\beta$]}
  ARc
  \arrow(ARc--){<=>[$\delta$][$\gamma$]}[35] AR$^*$
  \arrow(@ARc--){<=>[\SI{1000}{\per\second}][\SI{10}{\per\second}]}[-35] AD
\schemestop

\end{document}

在此处输入图片描述

答案2

在回答我最初的问题(上述)时,我发现使用该transform canvas命令提供了生成 r 的最简单方法ightleftharpoon。感谢 Caramdir 指出这一点上一个答案下面是一个简单的(有点无意义的例子)显示水平和有角度的鱼叉。

\resizebox{!}{!}{  % picture placed inside a resize box (change to values etc as per desired sizing)

\begin{tikzpicture}

    \node (A) at (0,0) {A + R};
    \node (B) at (1.7,0) {AR};
    \node (C) at (3,1) {AR*};
    \node (D) at (3,-1) {AD};

\begin{scope}[every node/.style={font= \scriptsize}]

\draw[transform canvas={yshift=0.3ex},-left to] (A) -- node[above]{$k_{+1}$}  (B);
\draw[transform canvas={yshift=-0.3ex},left to-] (A) -- node[below] {$k_{-1}$} (B); 

\draw[transform canvas={yshift=0.2ex, xshift=-0.05ex},-left to] (B) --  node[above, xshift=-5]{$\beta$} (C);
\draw[transform canvas={yshift=-0.32ex, xshift=0.2ex},left to-] (B) --  node[below, xshift=5]{$\alpha$} (C);

\draw[transform canvas={yshift=0.32ex, xshift=0.2ex},-left to] (B) --  node[above, xshift=15]{1000 s$^{-1}$}  (D);
\draw[transform canvas={yshift=-0.2ex, xshift=-0.05ex},left to-] (B) --  node[below, xshift=-10]{10 s$^{-1}$}  (D);

\end{scope}

\end{tikzpicture} 

}

得出的结果为:

在此处输入图片描述

答案3

\documentclass{minimal}
\usepackage{mathtools}

\begin{document}    
\[
 A + R \xrightleftharpoons[k_{-1}]{k_{+1}} AR \xrightleftharpoons[\alpha]{\beta} AR*
\]
\end{document}

在此处输入图片描述

答案4

在下面的例子中,计算箭头位置的代码已被分解成一个宏。节点可以放置在任意位置,箭头会相应地旋转,同时保持它们之间的距离不变。

\documentclass{minimal}

\usepackage{tikz,calc}       % note we use both package calc 
\usetikzlibrary{calc,arrows} % and tikzlibrary calc

\newdimen{\myx}
\newdimen{\myy}
\newlength{\myxoff}
\newlength{\myyoff}

\newcommand{\reversiblearrow}[3][1]{ 
    % Arguments: Optional arrow spacing, node name 1, node name 2

    % obtain raw difference vector
    \path ($(#3) - (#2)$);
    \pgfgetlastxy{\myx}{\myy};

    % obtain normalized difference vector
    \pgfpointnormalised{\pgfpoint{\myx}{\myy}};
    \pgfgetlastxy{\myx}{\myy};

    % assign real TeX lengths
    \setlength{\myxoff}{\myy}
    \setlength{\myyoff}{\myx}

    \draw[-left to,transform canvas={xshift=-#1\myxoff,yshift=#1\myyoff}]% 
         (#2) -- (#3);
    \draw[left to-,transform canvas={xshift=#1\myxoff,yshift=-#1\myyoff}]% 
         (#2) -- (#3);
}

\begin{document}

\begin{tikzpicture}

\node (A) at (0in,0.25in) {A};
\node (B) at (0.5in,0in) {B};
\node (C) at (0.5in,0.5in) {C};

\reversiblearrow{A}{C}
\reversiblearrow{B}{C}

% an arrow pair with wider distance
\reversiblearrow[2]{A}{B}
\end{tikzpicture}

\end{document}

在此处输入图片描述

相关内容