我希望使用左右“鱼叉”来显示动力学方案中的可逆反应。我可以得到部分结果,但我如何才能垂直移动水平箭头,使它们分开(形成鱼叉)而不是相互重叠?
或者有没有更好的方法来做到这一点?
使用 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}