我尽了一切努力来重现这张照片,但却陷入了困境。
我最好的结果还远远不够完美。
\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);
。
对于pervAm
和spirt
它是相同的,只是在和之间使用更多的点,我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}