使用 tikz-cd 绘制复杂反应网络

使用 tikz-cd 绘制复杂反应网络

我正在尝试使用绘制以下示意图(使用 ChemDraw 生成)tikzcd

Chemdraw 绘图

这是我目前所拥有的。

使用 tikzcd 的示意图

我不明白箭头上方和下方的标签定位在tikzcd环境中如何起作用。到目前为止,我的 MWE 如下。

\documentclass[9pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{cd,positioning}%cd is for commutative diagrams
\usepackage{color}
\usepackage[version=4]{mhchem}
\renewcommand*{\familydefault}{\sfdefault}
\usepackage{sfmath}
\begin{document}
\begin{tikzcd}[column sep=large]
    & \ce{CH3+ + H2O}  & &\\
    \ce{CH3-OH} \ar[ur,"\ce{\color{gray}dehydration}" sloped, pos=1, "\ce{H+}"',sloped,pos=0.5] \ar[dr,"\ce{\color{gray}transfer\\[-0.5em]\color{gray}dehydrogenation}"' sloped, align=center,pos=1,"\ce{R+}",sloped,pos=0.5] & &\ce{R+} \equiv \ce{alkoxide} \\
    & \ce{CH2OH+ + paraffins}  & &
\end{tikzcd}
\end{document}

我不知道如何对齐第一行和第三行元素,以使 CH3+ 和 CH2OH+ 的“C”对齐。此外,将标签放置在urdr箭头下方似乎也行得通,因为我可以一次将一个标签放置在箭头的中间,但将标签放在下方似乎会将上面的标签移向箭头的起点。

如果有其他软件包可以帮助我更轻松地创建此图表,我愿意接受建议。

答案1

如果您假设 tikzcd 将报价字段从左到右放置,无论它们是在线上方还是下方,那么要重叠它们,您必须使用类似\llap或 的东西\rlap,仅居中。请注意,possloped参数都在同一个 中\ar[...],所以我怀疑尝试使用多个定义是否可行。

\documentclass[9pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{cd,positioning}%cd is for commutative diagrams
\usepackage{color}
\usepackage[version=4]{mhchem}
\renewcommand*{\familydefault}{\sfdefault}
\usepackage{sfmath}

\newcommand{\clap}[1]% #1 = multiline text to be centered in zero width field
{\bgroup
  \sbox0{\begin{tabular}{@{}c@{}}#1\end{tabular}}%
  \hspace{-0.5\wd0}\usebox0\hspace{-0.5\wd0}%
\egroup}

\begin{document}

\begin{tikzcd}[column sep=large]
    & \ce{CH3+ + H2O}  & &\\
      \ce{CH3-OH} \ar[ur,sloped,pos=0.4,"\clap{\ce{\color{gray}dehydration}}",
      "\clap{\ce{H+}}"']
     \ar[dr,sloped, align=center,pos=0.4,"\clap{\ce{\color{gray}transfer}\\[-0.5em]\ce{\color{gray}dehydrogenation}}"',
      "\clap{\ce{R+}}"]
    & &\ce{R+} \equiv \ce{alkoxide} \\
    & \ce{CH2OH+ + paraffins}  & &
\end{tikzcd}
\end{document}

演示


此解决方案改用 tikz 矩阵。您必须单独绘制线条,并明确为它们保留空间(因此使用\phantom)。我使用了数学节点,因为除了 之外的所有内容都\equiv在 内\ce{...}

\documentclass[9pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{matrix,positioning}%cd is for commutative diagrams
\usepackage{color}
\usepackage[version=4]{mhchem}
\renewcommand*{\familydefault}{\sfdefault}
\usepackage{sfmath}

\begin{document}
\begin{tikzpicture}
  \matrix (m) [matrix of math nodes, row sep=1ex]{
    & & \ce{CH3+ + H2O}  &\\
    \ce{CH3-OH} & \phantom{\footnotesize\ce{dehydrogenation}} & & \ce{R+} \equiv \ce{alkoxide} \\
    & & \ce{CH2OH+ + paraffins}  & \\
  };
  \draw[->] (m-2-1) -- (m-1-3.west)
    node[above,pos=0.5,sloped,font=\footnotesize,text=gray] {\ce{dehydration}}
    node[below,pos=0.5,sloped,font=\footnotesize] {\ce{H+}};
  \draw[->] (m-2-1) -- (m-3-3.west)
    node[above,pos=0.5,sloped,font=\footnotesize] {\ce{R+}}
    node[below,pos=0.5,sloped,font=\footnotesize,text=gray,align=center] {\ce{transfer}\\[-0.5em]\ce{dehydrogenation}};
\end{tikzpicture}
\end{document}

第二个演示

相关内容