如何让 \lewis 或 \Lewis(在 chemfig 中)具有自定义角度而不仅仅是 0-7?

如何让 \lewis 或 \Lewis(在 chemfig 中)具有自定义角度而不仅仅是 0-7?

我正在绘制一个分子(对茴香醛),其中一个键呈 60 度角,末端的原子位于 内\Lewis{}。我希望末端原子上的两个电子组稍微逆时针旋转,但目前我唯一的选择是将它们置于 45 度角。这是我使用的代码(软件包数量如此之多是因为我正在尝试其他东西,现在我不知道哪些是重要的......):

\documentclass[twoside, titlepage]{article}
\usepackage[fleqn]{amsmath}
\usepackage{fancyhdr}
\usepackage{fixltx2e}
\usepackage{fullpage}
\usepackage{fancybox}
\usepackage{hyperref}
\usepackage{mathtools}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{float}
\usepackage[version=4]{mhchem} 
\usepackage{chemfig}
\usepackage{gensymb}
\usepackage{array}
\begin{document}

\begin{center}

\chemfig{\Lewis{4:6:,O}(-[3]C(<[1]H)(<:[3]H)(-[5]H))-C**6(-C(-H)-C(-H)-C(-(=[:60]\Lewis{0:2:,O})-[:-60]H)-C(-H)-C(-H)-)}

\end{center}

\end{document}

下面是输出(红色圆圈表示我所说的路易斯结构,它不是由代码完成的): 对茴香醛

基本上,我的问题是我无法将除 0、1、2、3、4、5、6 和 7 之外的任何其他角度放入\Lewis{}

如果我做错了什么或者表达得有点模糊,请见谅,这是我第一次发帖,所以也欢迎对发帖提出建议!:-)

谢谢!

答案1

Chemfig 文档中有一个例子,是法语的,关于制作一个自定义lewis宏来接受任意角度(以度为单位)。我正在重现它不负责任的翻译到英语。(我的母语是巴西葡萄牙语,所以我既不懂英语也不懂法语)。这个例子出现在第 45 页(第 46 页,因为有封面):

\example*{Pairs at arbitrary angles}|\makeatletter
\newcommand\mylewis[3][2ex]{% #1=distance, #2=atom #3=list of angles
\tikzpicture[baseline,anchor=base]%
    \node[inner sep=0pt,outer sep=1pt,circle,overlay](atom@@)at(0,0){\phantom{#2}};%
    \node[inner sep=0pt,outer sep=0pt]at(0,0){#2};%
    \def\list@angle{#3,}%
    \loop
        \expandafter\grab@angle\list@angle\@nil
        \pgfextractx\CF@dim{\pgfpointanchor{atom@@}\current@angle}\edef\CF@dimax{\the\CF@dim}%
        \pgfextracty\CF@dim{\pgfpointanchor{atom@@}\current@angle}\edef\CF@dimay{\the\CF@dim}%
        \pgfmathparse{#1*sin(\current@angle)/2}\let\offset@xx\pgfmathresult
        \pgfmathparse{#1*cos(\current@angle)/2}\let\offset@yy\pgfmathresult
        \draw[line width=.4pt,overlay]
        (\CF@dimax-\offset@xx,\CF@dimay+\offset@yy)--(\CF@dimax+\offset@xx,\CF@dimay-\offset@yy);%
        \unless\ifx\@empty\list@angle
    \repeat
\endtikzpicture
}
\def\grab@angle#1,#2\@nil{\def\current@angle{#1}\def\list@angle{#2}}
\makeatother

一旦定义,这个宏就可以像这样使用:

\mylewis{Cl}{15}\qquad \mylewis[3ex]{Cl}{-60}\qquad \mylewis[1.5ex]{Cl}{60,120,240,300}

回应要求用点代替线的评论

尝试同时提供mylewismyLewis

\makeatletter
\newcommand\mylewis[3][2ex]{% #1=distance, #2=atom #3=list of angles
\tikzpicture[baseline,anchor=base]%
\node[inner sep=0pt,outer sep=1pt,circle,overlay](atom@@)at(0,0){\phantom{#2}};%
\node[inner sep=0pt,outer sep=0pt]at(0,0){#2};%
\def\list@angle{#3,}%
\loop
    \expandafter\grab@angle\list@angle\@nil
    \pgfextractx\CF@dim{\pgfpointanchor{atom@@}\current@angle}\edef\CF@dimax{\the\CF@dim}%
    \pgfextracty\CF@dim{\pgfpointanchor{atom@@}\current@angle}\edef\CF@dimay{\the\CF@dim}%
    \pgfmathparse{#1*sin(\current@angle)/2}\let\offset@xx\pgfmathresult
    \pgfmathparse{#1*cos(\current@angle)/2}\let\offset@yy\pgfmathresult
    \draw[line width=.4pt,overlay]
    (\CF@dimax-\offset@xx,\CF@dimay+\offset@yy)--(\CF@dimax+\offset@xx,\CF@dimay-\offset@yy);%
    \unless\ifx\@empty\list@angle
\repeat
\endtikzpicture
}
\newcommand\myLewis[3][2ex]{% #1=distance, #2=atom #3=list of angles
\tikzpicture[baseline,anchor=base]%
\node[inner sep=0pt,outer sep=1pt,circle,overlay](atom@@)at(0,0){\phantom{#2}};%
\node[inner sep=0pt,outer sep=0pt]at(0,0){#2};%
\def\list@angle{#3,}%
\loop
    \expandafter\grab@angle\list@angle\@nil
    \pgfextractx\CF@dim{\pgfpointanchor{atom@@}\current@angle}\edef\CF@dimax{\the\CF@dim}%
    \pgfextracty\CF@dim{\pgfpointanchor{atom@@}\current@angle}\edef\CF@dimay{\the\CF@dim}%
    \pgfmathparse{#1*sin(\current@angle)/2}\let\offset@xx\pgfmathresult
    \pgfmathparse{#1*cos(\current@angle)/2}\let\offset@yy\pgfmathresult
    \draw[fill,black]
    (\CF@dimax-\offset@xx,\CF@dimay+\offset@yy)circle(0.15ex)%
    (\CF@dimax+\offset@xx,\CF@dimay-\offset@yy)circle(0.15ex);%
    \unless\ifx\@empty\list@angle
\repeat
\endtikzpicture
}
\def\grab@angle#1,#2\@nil{\def\current@angle{#1}\def\list@angle{#2}}
\makeatother

这样,您可以mylewis像以前一样使用,但现在您还拥有了myLewis您真正需要的东西。

\mylewis{Cl}{15}\qquad \mylewis[3ex]{Cl}{-60}\qquad \mylewis[1.5ex]{Cl}{60,120,240,300}

\myLewis{Cl}{15}\qquad \myLewis[3ex]{Cl}{-60}\qquad \myLewis[1.5ex]{Cl}{60,120,240,300}

\myLewis[.8ex]{Cl}{15}\qquad \myLewis[.8ex]{Cl}{-60}\qquad \myLewis[.8ex]{Cl}{60,120,240,300}

请注意,我没有深入探讨化学无花果原始实现,所以我只是根据提供的示例Lewis进行了修改。它们的区别只是将线的端点变成了小圆的中心。myLewismylewis

相关内容