如何制作复杂的化学图

如何制作复杂的化学图

我尽了一切努力来重现这张照片,但却陷入了困境。

在此处输入图片描述

我最好的结果还远远不够完美。

\documentclass[border=1cm]{standalone}

\usepackage{chemfig}
\usepackage[utf8]{inputenc} %for font
\usepackage[T1,T2A]{fontenc}
\usepackage[english,ukrainian]{babel} % for language

\setchemfig{scheme debug=true}

\begin{document}
\schemestart
\chemname{\chemfig{R-NH_2}}{Первиний амін}\arrow{0}[-90]
\chemname{\chemfig{R-NH-R'}}{Вториний амін}\arrow{0}[-90]
\chemname{\chemfig{R-ONO}}{Алкіл нітрит} \+ \chemname{\chemfig{R-NO_2}}{Нітроалкан}\arrow{0}[-90]
\chemname{\chemfig{R-CN}}{Нітрил} \+ \chemname{\chemfig{R-NC}}{Ізонітрил}\arrow{0}[-90]
\chemname{\chemfig{R-N(-[6]R'')-R'}}{Третиний амін}\arrow{0}[45,3]
\chemfig{@{a1}CHY}
\chemmove{
\draw[shorten >=10p] (a1.west) -- ++(-1,0) |- (c1.east);
\draw[shorten >=10p] (a1.west) -- ++(-1,0) |- (c2.east);
\draw[shorten >=10p] (a1.west) -- ++(-1,0) |- (c3.east);
\draw[shorten >=10p] (a1.west) -- ++(-1,0) |- (c4.east);
\draw[shorten >=10p] (a1.west) -- ++(-1,0) |- (c5.east);}
\schemestop
\end{document}

在此处输入图片描述

我认为使用 tikz 可能更好,因为 chemfig 没有内置功能来实现我需要的一切。但是,如果仅使用 chemfig 资源就可以做到这一点,那么请写下来。

答案1

一种不使用浮动物体的解决方案,由 ChemFig 手册 1.6 版中的最后一个示例制作。

我建立了两个子方案,然后定位了中心分子。

左边的子模式是 OK,右边的子模式已经完成。

我使用“mhchem”来表示小分子和离子,因为我认为它更适合这项任务

\documentclass[border=1cm]{standalone}
\usepackage[utf8]{inputenc} %for font
\usepackage[T1,T2A]{fontenc}
\usepackage[english,ukrainian]{babel} % for language
\usepackage{chemfig}
\usepackage[version=4]{mhchem}
%\setchemfig{scheme debug=true}

\begin{document}

\schemestart
\subscheme{
    \chemname{\chemfig{R-NH_2}}{Первиний амін}
    \arrow(a--b){->}[-90,1,,,draw=none]
    \chemname{\chemfig{R-NH-R'}}{Вториний амін}
    \arrow(b--c){->}[-90,1,,,draw=none]
    \chemname{\chemfig{R-ONO}}{Алкіл нітрит} \+ \chemname{\chemfig{R-NO_2}}{Нітроалкан}
    \arrow(c--d){->}[-90,1,,,draw=none]
    \chemname{\chemfig{R-CN}}{Нітрил} \+ \chemname{\chemfig{R-NC}}{Ізонітрил}
    \arrow(d--e){->}[-90,1,,,draw=none]
    \chemname{\chemfig{R-N(-[6]R'')-R'}}{Третиний амін}
}
\arrow(f--c){->}[0,2,,,draw=none]
\chemfig{CHY}
\arrow(f--){->}[0,2,,,draw=none]
\subscheme{
    \chemname*{\chemfig{R-NH_2}}{Первиний амін}
    \arrow(g--h){->}[-90,,,,draw=none]
    \chemname*{\chemfig{R-NH-R'}}{Вториний амін}
    \arrow(h--i){->}[-90,,,,draw=none]
    \chemname*{\chemfig{R-NH_2}}{Первиний амін}
}
\schemestop
\chemmove{
    \draw[thick,shorten >=10pt] (f.west) -- ++(-1,0) |- node[above]{\hspace{-2cm}\ce{+ NH3}}(a.east);
    \draw[thick,shorten >=10pt] (f.west) -- ++(-1,0) |- node[above]{\hspace{-2cm}\ce{+ R^{'}NH2}}(b.east);
    \draw[thick,shorten >=10pt] (f.west) -- ++(-1,0) |- node[above]{\hspace{-2cm}\ce{R^{'}_2NH}}(c.east);
    \draw[thick,shorten >=10pt] (f.west) -- ++(-1,0) |- node[above] {\hspace{-2cm}\ce{NO^{-}_2}} node[below] {\hspace{-2cm}\ce{(AgNO2)}} (d.east);
    \draw[thick,shorten >=10pt] (f.west) -- ++(-1,0) |- node[above] {\hspace{-2cm}\ce{CN^{-}}} node[below] {\hspace{-2cm}\ce{(KCN)}}(e.east);
    %
    \draw[thick,shorten >=20pt] (f.east) -- ++(1,0) |- (g.west);
    \draw[thick,shorten >=10pt] (f.east) -- ++(1,0) |- (h.west);
    \draw[thick,shorten >=20pt] (f.east) -- ++(1,0) |- (i.west);
    }
\end{document}

在此处输入图片描述

答案2

表格解决方案

\documentclass[border=1cm]{standalone}
\usepackage{amsmath}
\usepackage{fontspec}
\usepackage{unicode-math}
\usepackage{newcomputermodern}
\usepackage{chemfig}
\setchemfig{atom sep=2em}
\usetikzlibrary{arrows.meta,calc}
\usepackage[english,ukrainian]{babel}
\begin{document}
\begin{tabular}{rcl}
    \schemestart
    \chemname{\chemfig{R-NH_2}}{Первиний амін}
    \arrow(aa1.mid east--){0[+ \chemfig{NH_3}]}[,1.2]
    \schemestop
    & \rule{5em}{0pt} &
    \schemestart
    \vphantom{\chemfig{H_2}}\arrow(--aa2.mid west){->[+ \vphantom{\chemfig{NH_3}}OH][(NaOH)]}[,1.2]
    \chemname{\chemfig{R-OH}}{Cпиpт}
    \schemestop
    \\[6ex]
    \chemnameinit{}%
    \schemestart
    \chemname{\chemfig{R-NH-R'}}{Вториний амін}
    \arrow(bb1.mid east--){0[+ \chemfig{RNH_2}]}[,1.3]
    \schemestop
    &&
    \schemestart
    \vphantom{\chemfig{H_2}}\arrow(--bb2.mid west){->[+ \chemfig{R'-O^{-}}][(\chemfig{R-ONa})]}[,1.8]
    \chemname{\chemfig{R-OR'}}{Eтep}
    \schemestop
    \\[6ex]
    \schemestart
    \chemname{\chemfig{R-N(-[6]R|')-R'}}{Третиний амін}
    \arrow(cc1.mid east--){0[+ \chemfig{R'_2NH}]}[,1.3]
    \schemestop
    &&
    \chemnameinit{}%
    \schemestart
    \vphantom{\chemfig{H_2}}\arrow(--cc2.mid west){->[+ \chemfig{R'COO^{-}}][(\chemfig{R'COONa})]}[,1.8]
    \chemname{\chemfig{R-O-C(=[2]O)-R'}}{Ecтep}
    \schemestop
    \\[10ex]
    \chemnameinit{}
    \schemestart
    \chemname{\chemfig{R-ONO}}{Алкіл нітрит}
    \+
    \chemname{\chemfig{R-NO_2}}{Нітроалкан}
    \arrow(dd1.mid east--){0[+ \chemfig{NO_2^{-}}][(\chemfig{AgNO_2})]}[,1.3]
    \schemestop
    &&
    \chemnameinit{}%
    \schemestart
    \vphantom{\chemfig{H_2}}\arrow(--dd2.mid west){->[+ \chemfig{R'-Na}]}[,1.8]
    \chemname{\chemfig{R-R'}}{Aлкан}
    \schemestop
    \\[6ex]
    \schemestart
    \chemname{\chemfig{R-CN}}{Нітрил}
    \+
    \chemname{\chemfig{R-NC}}{Ізонітрил}
    \arrow(ee1.mid east--){0[+ \chemfig{CN^{-}}][(KCN)]}[,1.3]
    \schemestop
    &&
    \schemestart
    \vphantom{\chemfig{H_2}}\arrow(--ee2.mid west){->[+ \chemfig{R'-C~\charge{0=\:,20:3pt={\scriptsize $-$}}{C}}][(\chemfig{R'-C~C-Na})]}[,2.2]
    \chemname{\chemfig{R-C~C-R'}}{Aлкін}
    \schemestop
\end{tabular}
\chemmove{%
    \draw[CF-CF,shorten <=1em,shorten >=1em]
        (aa1.mid east) -- ++(2,0) coordinate (za1) |- (ee1.mid east);
    \draw[CF-,shorten <=1em]
        (bb1.mid east) -- (bb1.mid east -| za1);
    \draw[CF-,shorten <=1em]
        (cc1.mid east) -- (cc1.mid east -| za1);
    \draw[CF-,shorten <=1em]
        (dd1.mid east) -- (dd1.mid east -| za1);
    \path (za1 |- ee1.mid east) coordinate (ze1);
    \draw[CF-CF,shorten <=1em,shorten >=1em]
        (aa2.mid west) -- ++(-2,0) coordinate (za2) |- (ee2.mid west);
    \draw[CF-,shorten <=1em]
        (bb2.mid west) -- (bb2.mid west -| za2);
    \draw[CF-,shorten <=1em]
        (cc2.mid west) -- (cc2.mid west -| za2);
    \draw[CF-,shorten <=1em]
        (dd2.mid west) -- (dd2.mid west -| za2);
    \path (za2 |- ee2.mid west) coordinate (ze2);
    \draw[latex-latex] ($(za1)!0.5!(ze1)$) -- ($(za2)!0.5!(ze2)$)
        node[fill=white,midway,-] {\chemfig{R-H|al}};
}
\end{document}

在此处输入图片描述

答案3

这是实现此目的的方法。基本思路:

  • 用于通过放置s 和ing 线Tikz来创建结构\node\draw
  • {text}将 chemfig语句放在\node

这应该可以帮助你入门。

一些一般性评论:

  • 界限可以画得更复杂
  • 不过,我使用绝对坐标(希望这对新手来说更容易理解)
  • 我放弃了大多数软件包,因为我无法编译其他软件包
  • 请原谅我将乌克兰语中的一些术语粗略地翻译成了英文(我想你会明白的)

关于代码

您可能希望使用\usetikzlibrary{arrows.meta}更美观的笔尖来替换标准笔尖(有关更多详细信息,请参阅手册)。另请参阅样式部分[ ... >={Stealth},% replacing standard tip ...]

s\node代表将写入某些化学公式的位置。

s\coordinate只是简化了一些线条的绘制。(这部分可以做得更复杂。)

Lines只是从 绘制(remembered node name)到 下一个,例如\draw[->] (mid) -- (2.5,0);

对于pervAmspirt它是相同的,只是在和之间使用更多的点,我node在相同的路径上node[above] {+\chemfig{NH_3}}放置更多的公式;这个将一些文本放置above在线上,而精神部分则执行此操作below

当然,您可以微调更多 Tikz 属性,请参阅 pgfmanual。

结果

\documentclass[border=1cm]{standalone}
\usepackage{chemfig}
\usetikzlibrary{arrows.meta}

\begin{document}

\begin{tikzpicture}[%       defining styles as needed
        >={Stealth},%       replacing standard tip by a nicer one everywhere
        inner sep=3mm,%     make some more room around nodes texts
    ]
    % ~~~ building the diagrams structure via nodes ~~~~~~~~~~~~~
    %     see ch. 10 for details (using with Tikz)
    \node (mid) at (0,0) {R-Ha};% to be replaced
    
    \node (pervAm) at (-6, 6) {\chemname{\chemfig{R-NH_2}}{PervAmin}};
    \node (nitril) at (-6,-6) {\chemname{\chemfig{R-CN}}{Nitril}};
    \node (spirt)  at ( 6, 6) {\chemname{\chemfig{R-ON}}{Spirt}};
    \node (tretAm) at ( 6,-6) {\chemname{\chemfig{R-N(-[6]R'')-R'}}{TretAmin}};
    
    % ~~~ a few reference points ~~~~~~~~~~~~~~~
    \coordinate (pa) at (-2.5, 6);  
    \coordinate (ni) at (-2.5,-6);  
    \coordinate (sp) at ( 2.5, 6);  
    \coordinate (ta) at ( 2.5,-6);  
    
    % ~~~ some lines, with labels ~~~~~~~~~~~~~ 
    \draw[<->] (pervAm.east) -- node[above] {+\chemfig{NH_3}} (pa)
                             --  (ni) -- (nitril.east);
    \draw[<->] (spirt)       -- node[below] {(\chemfig{NaOH})} (sp) 
                             --(ta) -- (tretAm);
    \draw[<-] (-2.5,0) -- (mid);
    \draw[->] (mid) -- (2.5,0);
    
    
\end{tikzpicture}
\end{document}

相关内容