我有很多分子需要画。
为了教学目的,我需要给某些原子或原子组着色。
由于主链的排列,我|
在组中的每个原子后使用一个符号,并与 结合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}