是否有一种简单/优雅的方法来为 chemfig 中的原子组着色?

是否有一种简单/优雅的方法来为 chemfig 中的原子组着色?

我有很多分子需要画。

为了教学目的,我需要给某些原子或原子组着色。

在此处输入图片描述

由于主链的排列,我|在组中的每个原子后使用一个符号,并与 结合textcolor以改变它们的颜色,方法与由 unbonpetit 使用

但实际上这很繁琐,我希望有一种更容易/更简单/更简短的方式来做到这一点。

这是我的代码:

\documentclass{article}
\usepackage{chemfig}
\usetikzlibrary{decorations.pathreplacing}
\tikzset{brace/.style = { decorate, decoration={brace, amplitude=5pt} }}

\setchemfig{%
    atom sep=17pt, 
    bond offset=1pt
}

\newcommand{\blue}[1]{\textcolor{blue}{#1}}
\newcommand{\red}[1]{\textcolor{red}{#1}}

\begin{document}
    \schemestart
    \chemfig{%
        [:-90]CH_2OH
        -[@{bond1},,1,3]\blue{H}|\blue{O}|\blue{C}|\blue{H}
        -[,,3,2]\blue{H}|\blue{C}|\blue{O}|\blue{H}
        -[,,2,3]\blue{H}|\blue{O}|\blue{C}|\blue{H}
        -[,,3]C(=[::90]O)
        -[,,1,3]\blue{H}|\blue{O}|\blue{C}|\blue{H}
        -[@{bond2},,3,3]\red{H}|\red{O}|\red{C}|\red{H}
        -[,,3,3]\red{H}|\red{O}|\red{C}|\red{H}
        -[@{bond3},,3,1]CH_2OH
    }
    %   
    \schemestop
    \chemmove{
        \draw[-,brace]
        ([xshift=30pt, yshift=-1pt]bond1) -- 
        ([xshift=30pt, yshift= 1pt]bond2)
        node[midway, right=5pt]{\blue{\textsc{l}-\textit{gluco}-}};
        %
        \draw[-,brace]
        ([xshift=30pt, yshift=0]bond2) -- 
        ([xshift=30pt, yshift=0]bond3)
        node[midway, right=5pt]{\red{\textsc{l}-\textit{erythro}-}};
    }   
\end{document}

我将不胜感激任何帮助!

答案1

\documentclass{article}
\usepackage{chemfig}
\let\printatomsaved\printatom
\def\print#1{\gdef\printatom##1{\printatomsaved{\color{#1}##1}}}
\def\restoreprint{\global\let\printatom\printatomsaved}
\setchemfig{atom sep=17pt,bond offset=1pt}
\begin{document}
\chemfig{[:-90]
    CH_2OH\print{blue}
    -[@{bond1},,1,3]HOCH
    -[,,3,2]HCOH
    -[,,2,3]H\print{black}OCH
    -[,,3]C(=[::90]O\print{blue})
    -[,,1,3]H\print{red}OCH
    -[@{bond2},,3,3]HOCH
    -[,,3,3]H\print{black}OCH
    -[@{bond3},,3,1]CH_2OH\restoreprint
}
\end{document}

相关内容