使用 tikz 在 beamer 中缩放 chemfig 分子

使用 tikz 在 beamer 中缩放 chemfig 分子

我想在投影仪幻灯片上显示三种不同的分子。幻灯片包含一个 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

您只需玩一\scaleboxminimum height, 就可以将这三个数字放进去。minimum widthnode 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}

相关内容