我正在绘制一个分子(对茴香醛),其中一个键呈 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}
回应要求用点代替线的评论
尝试同时提供mylewis
和myLewis
:
\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
进行了修改。它们的区别只是将线的端点变成了小圆的中心。myLewis
mylewis