指的是 tikzpicture 中节点内部的 chemfig 上的节点。宏定义

指的是 tikzpicture 中节点内部的 chemfig 上的节点。宏定义

考虑这个最小的例子:

\documentclass[12pt]{article}                                              

\usepackage{tikz}                                                          
\usepackage{chemfig}                                                       

\begin{document}                                                           

\begin{tikzpicture}                                                        

\path node(A){\chemfig{                                                    
 @{N1}N(-[::90,0.4,,,draw=none]H)-[::-30](<[::-60]CH_2-[::0]OH)-[::60](=[::60]O)-[::-60]-[,0.3,,,draw=none]
 @{N2}N(-[::-90,0.4,,,draw=none]H)-[::30](<:[::60]CH_2-[::0]OH)-[::-60](=[::-60]O)-[::60]-[,0.3,,,draw=none]
 @{N3}N(-[::90,0.4,,,draw=none]H)-[::-30](<[::-60]CH_2-[::0]OH)-[::60](=[::60]O)-[::-60]-[,0.3,,,draw=none]
}};                                                                        

\end{tikzpicture}                                                          

\begin{tikzpicture}[remember picture,overlay]                              
\draw[red,very thick](N1)--(N3);                                           
\end{tikzpicture}                                                          

\end{document}              

两个原子之间有一条红线的分子

有没有办法把所有内容放在一个 tikzpicture 中,避免编译两次?更重要的是:我如何定义允许执行此类操作的变量?:

\documentclass[12pt]{article}

\usepackage{tikz}
\usepackage{chemfig}

\def\sera#1{@{N#1}N(-[::90,0.4,,,draw=none]H)-[::-30](<[::-60]CH_2-[::0]OH)-[::60](=[::60]O)-[::-60]}
\def\serb#1{@{N#1}N(-[::-90,0.4,,,draw=none]H)-[::30](<:[::60]CH_2-[::0]OH)-[::-60](=[::-60]O)-[::60]}

\begin{document}

\begin{tikzpicture}

\path node(A){\chemfig{
 \sera{1}-[,0.3,,,draw=none]
 \serb{2}-[,0.3,,,draw=none]
 \sera{3}-[,0.3,,,draw=none]
}};

\end{tikzpicture}

\begin{tikzpicture}[remember picture,overlay]
\draw[red,very thick](N1)--(N3);
\end{tikzpicture}

\end{document}

使用 let 来处理错误

Package pgf Error: No shape named N1 is known

我发现错误来自变量的扩展......但我还不了解这是如何工作的,我很感激任何帮助。

注意:我想用 tikzpicture 处理不同的 chemfig,因此使用独立的 \chemfig 然后使用 \chemmove 的直接方法并不方便我的需求。

谢谢

答案1

至于你的第二个问题,你基本上没问题。只需按如下方式修改这些行(将它们视为子分子):

\path node(A){\chemfig{
 !{\sera{1}}-[,0.3,,,draw=none]
 !{\serb{2}}-[,0.3,,,draw=none]
 !{\sera{3}}-[,0.3,,,draw=none]
}};

使用 pdflatex 编译它应该可以完成工作。

相关内容