重新定义的解决方案\printatom

重新定义的解决方案\printatom

我教化学,想演示我用来chemfig绘制分子的化学结构的绘制和命名,我可以做得很好。但是,例如在 4-乙基-3,3-二甲基己烷分子中,分子中有许多成分,我想一点一点地揭示它们,以说明这种分子的命名/绘制。

我们有一个己烷根——画出这个

在碳 4 上添加乙基 - 突出显示此添加

在碳 3 上添加两个甲基 - 突出显示这些添加

下面是将分子一点一点构建为单独图形的代码,但我希望能够揭示一个分子并在添加时突出显示各个部分。

\onslide<n->我曾尝试在我想发现的部分中使用,但结果却一团糟。如果有人有任何想法,我将不胜感激……

下面很好,但我更喜欢一点一点地添加到母分子中……

\documentclass[t]{beamer}
\usepackage{chemfig}
\begin{document}

\begin{frame}{}
4-ethyl-3,3-dimethylhexane
\chemfig[][scale=0.5]{CH_3%6 these numbers are the carbon positions in the chain for ease of reading
-[::30]%5
-[::-60]%4
(-[::-60]-[::60]CH_3)%ethyl
-[::60]%3
(-[::30]CH_3)
(-[::90]CH_3)%methyl
-[::-60]%2
-[::60]CH_3%1
}
\begin{itemize}
\item root is hexane; hex=6; 6 carbon alkane
\onslide<2->{
\chemfig[][scale=0.5]{CH_3%6 these numbers are the carbon positions in the chain for ease of reading
-[::30]%5
-[::-60]%4
%(-[::-60]-[::60]CH_3)%ethyl
-[::60]%3
%(-[::30]CH_3)%methyl
%(-[::90]CH_3)%methyl
-[::-60]%2
-[::60]CH_3%1
}
}
\onslide<3->{\item 4-ethyl: ethyl substituent = 2 carbon alkyl group; on carbon 4}
\onslide<4->{
\chemfig[][scale=0.5]{CH_3%6 these numbers are the carbon positions in the chain for ease of reading
-[::30]%5
-[::-60]%4
(-[::-60]-[::60]CH_3)%ethyl}
-[::60]%3
%(-[::30]CH_3)%methyl
%(-[::90]CH_3)%methyl
-[::-60]%2
-[::60]CH_3%1
}
}
\onslide<5->{\item 3,3-dimethyl: di= 2, methyl substituents = 1 carbon alkyl group; on carbons 3 and 3}

\onslide<6->{\chemfig[][scale=0.5]{CH_3%6 these numbers are the carbon positions in the chain for ease of reading
-[::30]%5
-[::-60]%4
(-[::-60]-[::60]CH_3)%ethyl
-[::60]%3
(-[::30]CH_3)%methyl
(-[::90]CH_3)%methyl
-[::-60]%2
-[::60]CH_3%1
 }
}
\end{itemize}
\end{frame}
\end{document}

答案1

我们可以将想要隐藏的键的不透明度设置为零,然后使用 使它们再次可见\pgfkeysalso

遗憾的是,我还没有找到一种简单的方法将 TikZ 选项传递给节点(像C和 这样的原子H_3),否则它会像 一样工作visible on=<slides>

我提出两种解决方案:

  1. 重新定义\printatom并检查一组整数是否与当前节点号相符。

    要查看必须使用的数字,如果它不应该是全局的,则\qrrDebugNodes需要将其括在内{ },或者在分析结束时重置\chemfig

    \qrrDebugNodes[false]
    

    这些键仍然可以放置在不同的原子上(无论语法如何)。

  2. \unc构建于其上的简单宏\uncover在指定幻灯片上隐藏其参数。其缺点是CH_3被视为一个原子而不是两个原子(CH_3),这使得键的位置失效,即使我们使用多个\unc(每个原子一个)。

重新定义的解决方案\printatom

代码

\documentclass[t]{beamer}
\usepackage{chemfig,mathtools}
\tikzset{
    invisible/.style={opacity=0,text opacity=0},
    visible on/.style={alt=#1{}{invisible}},
    alt/.code args={<#1>#2#3}{%
      \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} 
    },
}
\makeatletter
\newcounter{qrr@nodes}
\newif\if@qrr@debug
\newcommand*{\setNodes}[1]{%
    \def\qrr@nodes{#1}%
    \setcounter{qrr@nodes}{0}% if \setNodes is used inside a frame the reset happens too!
}
\newcommand*{\qrrDebugNodes}[1][true]{
    \csname @qrr@debug#1\endcsname
}
\renewcommand*{\printatom}[1]{%
    \def\qrr@cmd{}%
    \def\qrr@slides@{}%
    \foreach \qrr@number/\qrr@slides in \qrr@nodes {%
        \foreach \qrr@number@ in \qrr@number {%
            \ifnum\value{qrr@nodes}=\qrr@number@\relax
                \global\let\qrr@cmd\uncover
                \xdef\qrr@slides@{<\qrr@slides>}%
                \breakforeach
            \fi
        }%
    }%
    \ensuremath{%
        \expandafter\qrr@cmd\qrr@slides@{\mathrm{#1}}%
        \if@qrr@debug
            \smash{\mathllap{\mathop{}\limits_{\textnormal{\tiny (\the\value{qrr@nodes})}}}}%
        \fi
    }%
    \stepcounter{qrr@nodes}%
}
\makeatother
\begin{document}
\begin{frame}
\setNodes{{5,6}/2-,{8,9}/3-,{10,11}/4-}
%\qrrDebugNodes
\chemfig[][scale=1.5]{CH_3%6 these numbers are the carbon positions in the chain for ease of reading
-[::30]%5
-[::-60]%4
(-[::-60,,,,visible on=<2->]-[::60,,,,visible on=<2->]CH_3)%ethyl
-[::60]%3
(-[::30,,,,visible on=<3->]CH_3)%methyl
(-[::90,,,,visible on=<4->]CH_3)%methyl
-[::-60]%2
-[::60]CH_3%1
}
\end{frame}
\end{document}

输出

在此处输入图片描述

带有调试设置的输出

在此处输入图片描述

解决方案\unc

以下解决方案\unc使chemfig被视为一个原子,并且即使使用两个 ,CH_3也无法将其拆分成C和以正确放置键。H_3\unc

CH_3与正常输出相比,上面的位置放错了。

代码

\documentclass[t]{beamer}
\usepackage{chemfig}
\tikzset{
    invisible/.style={opacity=0,text opacity=0},
    visible on/.style={alt=#1{}{invisible}},
    alt/.code args={<#1>#2#3}{%
      \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} 
    },
}
\newcommand*{\unc}[2]{%
    \uncover<#1>{#2}
}
\begin{document}
\begin{frame}
\chemfig[][scale=1.5]{CH_3%6 these numbers are the carbon positions in the chain for ease of reading
-[::30]%5
-[::-60]%4
(-[::-60,,,,visible on=<2->]-[::60,,,,visible on=<2->]\unc{2-}{CH_3})%ethyl
-[::60]%3
(-[::30,,,,visible on=<3->]\unc{3-}{CH_3})%methyl
(-[::90,,,,visible on=<4->]{\unc{4-}{C}}{\unc{4-}{H_3}})%methyl
-[::-60]%2
-[::60]CH_3%1
}
\end{frame}
\end{document}

输出

在此处输入图片描述

答案2

你可以用白色稍微作弊一下 :-)

例如尝试一下:

\parbox[c][.5\textheight][c]{\columnwidth}{%
    \centering\mbox{}%
    \def\test{white}%
    \only<2>{\def\test{red}}%
    \only<3->{\def\test{black}}%
    \chemfig[][scale=0.5]{CH_3%6 
    -[::30]%5
    -[::-60]%4
    (-[::-60,,,,\test]-[::60,,,,\test]\textcolor{\test}{CH_3})%ethyl
    -[::60]%3
    (-[::90]CH_3)%methyl
    -[::-60]%2
    -[::60]CH_3%1
    }
}

上述代码将在第 2 张幻灯片中以红色显示一个分支,然后以黑色显示。

相关内容