我正在尝试使用绘制以下示意图(使用 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”对齐。此外,将标签放置在ur
或dr
箭头下方似乎也行得通,因为我可以一次将一个标签放置在箭头的中间,但将标签放在下方似乎会将上面的标签移向箭头的起点。
如果有其他软件包可以帮助我更轻松地创建此图表,我愿意接受建议。
答案1
如果您假设 tikzcd 将报价字段从左到右放置,无论它们是在线上方还是下方,那么要重叠它们,您必须使用类似\llap
或 的东西\rlap
,仅居中。请注意,pos
和sloped
参数都在同一个 中\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}