我想在投影仪幻灯片上显示三种不同的分子。幻灯片包含一个 tikzpicture(用于与其他元素一起定位和揭示),三个节点各包含一个分子。
这些化合物的原子和键大小不同,但我希望它们以相同的方式缩放。如果我使用默认设置,它们会太大。但我无法想出一个解决方案来让它们看起来更小、更美观。
我试过:
- 使用 chemfig 参数缩放它们
scale
。字体变得非常小,几乎无法再检测到双键或立体化学。 - 使用
setatomsep
。如果我使用足够小的值,则只有最小分子的环系统可见。其他键完全消失,而在最大的分子中,一切都变得混乱。 setatomsep
和 一起使用scalebox
。这接近我想要的效果。最小的分子看起来不错,中间的分子也还行(我知道,考虑到立体化学,很难让它在那个比例下看起来真的很好)。但右边的最后一个分子看起来很奇怪:所有水平键(即所有角度为 0 的键)都太短了。
有没有更好的方法将 Chemfigs 放入 tikz 节点并适当缩放它们?
\documentclass{beamer}
\usepackage{chemfig}
\usepackage{tikz}
\newcommand{\ass}[1][]{\chemfig[][#1]{[:-30]O=([:30]-OH)-[:-90]*6(-=-=-([:30]-O-[:-30]([:-90]=O)-CH_3)=)}}
\newcommand{\lov}[1][]{\chemfig[][#1]{[:-30]H_3C-[:30]-(<:[:110]H)(<[:-90]H_3C)-[:30]([:90]=O)-O>:[:-90](<[:145]H)% left chain
*6(--(<:[:210]H_3C)(<[:250]H)-=(*6(-=-(<:[:-20]H)(<[:40]CH_3)-(% double ring system part 1
(<:[:30]H)<-[:30]-(<[:-30]H)*6(-O-(=O)--(<:[:-150]H)(<[:130]HO)--)% upper ring and linker
)-))-(<[:90]H)-)% double ring system part 2
}}
\newcommand{\nel}[1][]{\chemfig[][#1]{[:150]*6(=-[,1.5]=-=-)-[:0]S*6(--% left ring and linker
(<NH*6(-(=O)-*6(-=-=(-OH)-=)--))% lower ring and linker
-(--[:60]N*6(-(<([:-120]=O)-[:0]\chemabove{N}{H}-([:-150]-)([:30]-)-)--*6(-----)(<:[:0]H)-(<:[:180]H)--))<:HO)% upper ring system, linker and chain
}}
\tikzstyle{compound} = [draw, rounded corners, text centered, node distance=.3\textheight, text width=.2\textwidth, minimum height=.2\textheight]
\begin{document}
\begin{frame}{Default}
\begin{tikzpicture}
\node[compound] (cpd1) {\ass};
\node[compound, right of=cpd1] (cpd2) {\lov};
\node[compound, right of=cpd2] (cpd3) {\nel};
\end{tikzpicture}
\end{frame}
\begin{frame}{Scaling in Chemfig}
\begin{tikzpicture}
\node[compound] (cpd1) {\ass[scale=.25]};
\node[compound, right of=cpd1] (cpd2) {\lov[scale=.25]};
\node[compound, right of=cpd2] (cpd3) {\nel[scale=.25]};
\end{tikzpicture}
\end{frame}
\begin{frame}{Scaling using \textbackslash setatomsep}
\begin{tikzpicture}
\setatomsep{5pt}
\node[compound] (cpd1) {\tiny \ass};
\node[compound, right of=cpd1] (cpd2) {\tiny \lov};
\node[compound, right of=cpd2] (cpd3) {\tiny \nel};
\end{tikzpicture}
\end{frame}
\begin{frame}{Scaling using \textbackslash setatomsep and \textbackslash scalebox}
\begin{tikzpicture}
\setatomsep{15pt}
\node[compound] (cpd1) {\scalebox{.3}{\ass}};
\node[compound, right of=cpd1] (cpd2) {\scalebox{.3}{\lov}};
\node[compound, right of=cpd2] (cpd3) {\scalebox{.3}{\nel}};
\end{tikzpicture}
\end{frame}
\end{document}
答案1
您只需玩一\scalebox
玩minimum height
, 就可以将这三个数字放进去。minimum width
node distance
我们用来\centerline
将超出文本宽度的图形居中。
\documentclass{beamer}
\usepackage{chemfig}
\usepackage{tikz}
\newcommand{\ass}[1][]{\chemfig[][#1]{[:-30]O=([:30]-OH)-[:-90]*6(-=-=-([:30]-O-[:-30]([:-90]=O)-CH_3)=)}}
\newcommand{\lov}[1][]{\chemfig[][#1]{[:-30]H_3C-[:30]-(<:[:110]H)(<[:-90]H_3C)-[:30]([:90]=O)-O>:[:-90](<[:145]H)% left chain
*6(--(<:[:210]H_3C)(<[:250]H)-=(*6(-=-(<:[:-20]H)(<[:40]CH_3)-(% double ring system part 1
(<:[:30]H)<-[:30]-(<[:-30]H)*6(-O-(=O)--(<:[:-150]H)(<[:130]HO)--)% upper ring and linker
)-))-(<[:90]H)-)% double ring system part 2
}}
\newcommand{\nel}[1][]{\chemfig[][#1]{[:150]*6(=-[,1.5]=-=-)-[:0]S*6(--% left ring and linker
(<NH*6(-(=O)-*6(-=-=(-OH)-=)--))% lower ring and linker
-(--[:60]N*6(-(<([:-120]=O)-[:0]\chemabove{N}{H}-([:-150]-)([:30]-)-)--*6(-----)(<:[:0]H)-(<:[:180]H)--))<:HO)% upper ring system, linker and chain
}}
\tikzstyle{compound} = [draw, rounded corners, text centered, node distance=.38\textwidth, minimum height=.4\textheight, minimum width=0.35\textwidth ]
\begin{document}
\begin{frame}{Scaling using \textbackslash scalebox}
\centerline{%
\begin{tikzpicture}
\node[compound] (cpd1) {\scalebox{.3}{\ass}};
\node[compound, right of=cpd1] (cpd2) {\scalebox{.3}{\lov}};
\node[compound, right of=cpd2] (cpd3) {\scalebox{.3}{\nel}};
\end{tikzpicture}
}
\end{frame}
\end{document}
答案2
使用你的答案,salim bou,我发现了以下内容:
setatomsep
正如您所建议的,如果我使用,我实际上可以省略scalebox
。- 搞乱我的分子的原因是我用了
text width
而不是minimum width
。
第二点对我来说似乎很奇怪。在下面的代码中,第一张幻灯片看起来完全正常,而在第二张幻灯片中,框重叠(这可能是内部分离等的结果),并且分子键绘制不正确。
\documentclass{beamer}
\usepackage{chemfig}
\usepackage{tikz}
\let\Tiny\tiny
\newcommand{\ass}[1][]{\chemfig[][#1]{[:-30]O=([:30]-OH)-[:-90]*6(-=-=-([:30]-O-[:-30]([:-90]=O)-CH_3)=)}}
\newcommand{\lov}[1][]{\chemfig[][#1]{[:-30]H_3C-[:30]-(<:[:110]H)(<[:-90]H_3C)-[:30]([:90]=O)-O>:[:-90](<[:145]H)% left chain
*6(--(<:[:210]H_3C)(<[:250]H)-=(*6(-=-(<:[:-20]H)(<[:40]CH_3)-(% double ring system part 1
(<:[:30]H)<-[:30]-(<[:-30]H)*6(-O-(=O)--(<:[:-150]H)(<[:130]HO)--)% upper ring and linker
)-))-(<[:90]H)-)% double ring system part 2
}}
\newcommand{\nel}[1][]{\chemfig[][#1]{[:150]*6(=-[,1.5]=-=-)-[:0]S*6(--% left ring and linker
(<NH*6(-(=O)-*6(-=-=(-OH)-=)--))% lower ring and linker
-(--[:60]N*6(-(<([:-120]=O)-[:0]\chemabove{N}{H}-([:-150]-)([:30]-)-)--*6(-----)(<:[:0]H)-(<:[:180]H)--))<:HO)% upper ring system, linker and chain
}}
\begin{document}
\begin{frame}{Scaling using \textbackslash scalebox}
\tikzstyle{compound} = [draw, rounded corners, text centered, node distance=.3\textwidth, minimum height=.3\textwidth, minimum width=.3\textwidth ]
\begin{tikzpicture}
\node[compound] (cpd1) {\scalebox{.25}{\ass}};
\node[compound, right of=cpd1] (cpd2) {\scalebox{.25}{\lov}};
\node[compound, right of=cpd2] (cpd3) {\scalebox{.25}{\nel}};
\end{tikzpicture}
\end{frame}
\begin{frame}{Scaling using \textbackslash scalebox}
\tikzstyle{compound} = [draw, rounded corners, text centered, node distance=.3\textwidth, minimum height=.3\textwidth, text width=.3\textwidth ]
\begin{tikzpicture}
\node[compound] (cpd1) {\scalebox{.25}{\ass}};
\node[compound, right of=cpd1] (cpd2) {\scalebox{.25}{\lov}};
\node[compound, right of=cpd2] (cpd3) {\scalebox{.25}{\nel}};
\end{tikzpicture}
\end{frame}
\end{document}