Em química, um círculo Frost é um método rápido para estimar os níveis de energia relativos dos orbitais moleculares pi em um composto cíclico e em seguida, com base na colocação do elétron, julgar sua aromaticicidade. Estou procurando uma maneira de criá-los em LaTeX, de preferência usando a funcionalidade de pacotes como chemfig
e tikzorbital
, mas vou resolver para uma tikz
única solução.
Um círculo de gelo é criado inscrevendo o polígono para o composto cíclico (por exemplo, um hexágono regular para benzeno) dentro de um círculo com um vértice do polígono orientado para baixo. Cada local onde um vértice do polígono toca o círculo, este é um orbital molecular que pode ter até dois elétrons (representado por setas de anzol). Os orbitais abaixo da linha horizontal que divide o círculo são orbitais de ligação. Aqueles acima são orbitais anti-ligação. Todos os orbitais que estão na linha são orbitais não-ligantes. Os elétrons são colocados nos orbitais por algumas regras.
- O princípio aufbau: os orbitais são preenchidos em ordem crescente de energia.
- O princípio de exclusão de Pauli: cada orbital pode conter apenas dois elétrons e o seus spins (direções das setas) devem ser opostos.
- Regra de Hund: Se dois orbitais têm a mesma energia, um elétron entra em cada um antes de receber seu segundo elétron.
Aqui está uma descrição mais longa do método e sua aplicação.
Minha solução ideal é um novo comando que leva o tamanho do anel e número de elétrons como entrada e constrói círculos de gelo como os seguintes exemplos:
- Desenhando o círculo
- Inscrevendo o polígono regular com o número de lados igual ao tamanho do anel (para cima a 10)
- Desenho de segmentos de linha horizontal nos vértices do polígono para os orbitais moleculares
- Desenho do eixo de energia vertical
- Desenho de linha tracejada para a ligação / divisão anti-ligante
- Preenchendo o número de elétrons pelas regras acima
Aqui estão alguns exemplos: benzeno (tamanho do anel = 6, elétrons = 6)
cátion ciclopentadienil (tamanho do anel = 5, elétrons = 4)
ciclo-octatetraeno (tamanho do anel = 8, elétrons = 8)
Comentários
- Com licença muito por este comentário. Mas você viu essas imagens?
- @Sebastiano – Fiz essas imagens em um software de desenho de química, mas cada uma demorou cerca de 10 minutos. Como eles contêm uma mistura de estrutura química e elementos não estruturais, não posso exportá-los como gráficos vetoriais. Se eu pudesse fazer isso, eu apenas os importaria para meu documento de látex dessa maneira. Estou trabalhando em um documento no qual posso desenhar dezenas deles.
- As imagens são nítidas e claras mesmo sem o formato SVG, você pode simplesmente armazenar imagens png em uma escala grande o suficiente para que, quando estiverem diminuídas quando incluídas no PDF, elas ficam ainda mais suaves.
- @AboAmmar – Eu entendo isso, mas o compromisso de tempo para fazer uma é grande para trabalhos muito repetitivos. Gostaria de ter uma macro que o automatizasse, pois pretendo fazer dezenas delas.
- @BenNorris Você poderia desenhar suas imagens usando o editor Mathcha. mathcha.io/editor
Resposta
Aqui está uma solução totalmente automatizada. As chamadas para seus três exemplos são
\frost{6}{6} \frost{5}{4} \frost{8}{8}
Há um argumento opcional para o tamanho do raio. O padrão é 1 cm. Portanto, frost[2cm]{6}{6}
teria um raio de 2 cm.
Observação: isso só funciona (no momento) se houver um número par de elétrons.
\documentclass{article} \usepackage{tikz} \usepackage{ifthen} \usetikzlibrary{decorations.markings} \tikzset% Define decorations {updown/.style={postaction=decorate, decoration={markings, mark=at position .5 with {\draw[line join=round] (-2pt,-\arrlen)--++(0pt,2*\arrlen)--(-4pt,1pt); \draw[line join=round] (2pt,\arrlen)--++(0pt,-2*\arrlen)--(4pt,-1pt); }}},% 2 arrows uparr/.style={postaction=decorate, decoration={markings, mark=at position .5 with {\draw[line join=round] (0pt,-\arrlen)--++(0pt,2*\arrlen)--(-2pt,1pt); }}},% 1 arrow, right side dnarr/.style={postaction=decorate, decoration={markings, mark=at position .5 with {\draw[line join=round] (0pt,\arrlen)--++(0pt,-2*\arrlen)--(2pt,-1pt); }}}% 1 arrow left side (points down since lines will be drawn right to left) } \newcommand{\orblen}{.8}% length of horizontal segments as a percentage of main radius \newcommand{\arrlen}{.25cm}% half length of each arrow \newcommand{\frost}[3][1cm]% optional argument is circle radius, #2=edges, #3=electrons {\begin{tikzpicture}[line width=1pt] \draw(0,0)circle[radius=#1];% main circle \ifthenelse{#3 = 0}{\draw(-.5*#1*\orblen,-#1)--(.5*#1*\orblen,-#1);}% draw bottom line segment... {\draw[updown](-.5*#1*\orblen,-#1)--(.5*#1*\orblen,-#1);}% ...with arrows if >0 electrons \foreach \k [evaluate=\k as \r using .5*#2+1,% point right if k<r, point left if k>r, top if k=r evaluate=\k as \t using (\k-1)*360/#2-90,% angles of polygon vertices. k=1 is bottom. evaluate=\k as \n using -4*\k+6+#3,% who gets 2 electrons (right)? evaluate=\k as \m using -4*(#2+2-\k)+6+#3,% who gets 2 electrons (left)? evaluate=\k as \j using 2*#2] in {1,...,#2}% electrons for top if #3=2*#2 {\draw(\t:#1)--(\t+360/#2:#1); \ifthenelse{\k>1}% already did bottom line. {\ifthenelse{\lengthtest{\k pt < \r pt}}% right side {\ifthenelse{3 < \n}{\draw[updown](\t:#1)--+(#1*\orblen,0);}% 2 arrows {\ifthenelse{1 < \n}{\draw[uparr](\t:#1)--+(#1*\orblen,0);}% 1 arrow {\draw(\t:#1)--+(#1*\orblen,0);}}}% no arrows {\ifthenelse{\lengthtest{\k pt > \r pt}}% left side {\ifthenelse{3 < \m}{\draw[updown](\t:#1)--+(-#1*\orblen,0);}% 2arrows {\ifthenelse{1 < \m}{\draw[dnarr](\t:#1)--+(-#1*\orblen,0);}% 1 arrow {\draw(\t:#1)--+(-#1*\orblen,0);}}}%no arrows {\ifthenelse{#3 = \j}{\draw[updown](-.5*#1*\orblen,#1)--(.5*#1*\orblen,#1);}% 2 arrows on top {\draw(-.5*#1*\orblen,#1)--(.5*#1*\orblen,#1);}}} % no arrows on top }{} % do nothing if k=1 (bottom) } \draw[dotted](-2*#1,0)--(3*#1,0)node[below]{bonding\phantom{anti}}node[above]{antibonding}; \draw[-latex](-2.2*#1,-#1)--node[sloped,above,pos=.4]{Energy}(-2.2*#1,1.8*#1); \end{tikzpicture} } \begin{document} \frost{6}{6} \frost{5}{4} \frost{8}{8} \end{document}
Comentários
- Muito boa também sua resposta.
- Excelente! Isso funciona perfeitamente.
Resposta
Honestamente, foi preciso algum esforço, mas sua figura era intrigante e permitiu-me aprender coisas novas 1 então, está tudo bem.
Basicamente, criei um \newcommand
, nome \Frostcircle
, que tem 2 argumentos, opções e os elétrons.
Atualmente, os [options]
são:
-
radius
= o raio do círculo, observe que no momento os gráficos ao redor não se ajustam se você torná-lo muito grande. Posso trabalhar nisso no futuro. Leva apenas um número (emcm
) no momento, usando comprimentos quebre, eu não tenho certeza por que ainda. Sugestões são bem vindas. -
ring size
= refere-se ao número de lados do polígono. Número de lados de 5 a 10 foram testados. Como você pode esperar, leva um número como argumento -
frost label
= este é o rótulo no topo, o padrão é vazio. Certifique-se de colocar o texto entre colchetes, por exemplo,frost label={My label here}
O outro argumento são os elétrons, a maneira mais fácil que encontrei é defini-los no sentido anti-horário, começando do topo, como nesta figura:
Assume valores 0
, 1
e 2
: em ordem, sem elétron, um elétron, dois elétrons. Você pode fornecê-lo como uma lista, portanto, {0,0,2,2,2,0}
resultaria em seu benzene
círculo de gelo. Pode parecer contra-intuitivo, mas na verdade é simples quando você tenta.
Se o número de elementos na lista que você fornecer for menor que o tamanho do anel, você receberá um erro e o código não compilar. Se você não quiser nenhum elétron, basta digitar 0
para resolver isso.
Notas
A direção do ” arrow ” pois o elétron está invertido do outro lado, não tenho certeza se isso é importante para seus gráficos. Posso examiná-lo em outro dia se for importante. CORRIGIDO
Além disso, adicionei os mesmos pacotes que na resposta de Sebastiano para obter a fonte matemática, mas elas não são necessárias para o comando funcionar.
Saída
Código
\documentclass[margin=10pt]{article} \usepackage{tikz} \usepackage{newtxtext} \usepackage{amssymb} \usepackage{bm} \usetikzlibrary{arrows.meta,decorations.markings,shapes.geometric} \tikzset{% electron/.style={% postaction={decorate, decoration={% markings, mark=at position .5 with {% \ifnum#1=1\relax% \draw[-{Straight Barb[left,angle=60:2pt 3]}] (0,-6pt) --(0,6pt); \else \ifnum#1=2\relax% \draw[-{Straight Barb[left,angle=60:2pt 3]}] (-1pt,-6pt) -- (-1pt,6pt); \draw[{Straight Barb[left,angle=60:2pt 3]}-] (1pt,-6pt) -- (1pt,6pt); \else \fi\fi }} } }, mlbl/.style={anchor=south, align=center, midway, sloped}, } \pgfkeys{/tikz/.cd,% to set the path radius/.initial=.8, % initial value radius/.get=\circleradius, % to get the value from a macro radius/.store in=\circleradius, % to store the value into a macro ring size/.initial=5, ring size/.get=\numbersides, ring size/.store in=\numbersides, frost label/.initial=, frost label/.get=\frostlabel, frost label/.store in=\frostlabel, } \newcommand\Frostcircle[2][]{% \tikzset{radius=.8,ring size=5,frost label=,#1} \begin{tikzpicture}[line width=1pt] \draw[-{Stealth[scale=1.5]}] (0,0) -- (0,3cm) node[mlbl] {Energy} node[anchor=north west, xshift=2mm] {\frostlabel}; \draw[dotted, shorten >=-1cm] (.5,1) -- (4,1) node[anchor=south west] {antibonding} node[anchor=north west] {bonding}; \draw (2,1) circle (\circleradius); \node[% regular polygon, rotate=360/\numbersides/2, regular polygon sides=\numbersides, minimum size=\circleradius*2 cm, draw, outer sep=0pt ] at (2,1) (FrostCircle) {}; \def\electronarrow{{#2}} \foreach \polycorner [count=\findex starting from 0] in {1,...,\numbersides}{% \pgfmathtruncatemacro\maximumhalf{\numbersides/2+1} \pgfmathsetmacro\Findex{\electronarrow[\findex]} \ifnum\polycorner=1\relax% \draw[electron=\Findex] (FrostCircle.corner \polycorner)++(-.8,0) --++ (1.6,0); \else \ifnum\polycorner=\maximumhalf\relax% \draw[electron=\Findex] (FrostCircle.corner \polycorner)++(-.8,0) --++ (1.6,0); \else \ifnum\polycorner<\maximumhalf\relax% \draw[electron=\Findex] (FrostCircle.corner \polycorner)++ (-.8,0) -- (FrostCircle.corner \polycorner); \else \draw[electron=\Findex] (FrostCircle.corner \polycorner) --++ (.8,0); \fi\fi\fi }% \end{tikzpicture}% } \begin{document} \Frostcircle[% ring size=6, radius=1, frost label={benzene (ring size = 6, electrons = 6)} ]{0,0,2,2,2,0} \vspace{1cm} \Frostcircle[% ring size=5, radius=1, frost label={cyclopentadienyl cation (ring size = 5, electrons = 4)} ]{0,1,2,1,0} \vspace{1cm} \Frostcircle[% ring size=8, radius=1, frost label={cyclooctatetraene (ring size = 8, electrons = 8)} ]{0,0,1,2,2,2,1,0} \end{document}
1: O pgfkeys
.
Com mentos
- Muito obrigado pela citação do meu nome :-); para minha humilde opinião, não era importante. Seus diferentes códigos são perfeitos !!!! +1
- Isso é ótimo! Geralmente, no estado fundamental, elétrons desemparelhados (setas) teriam o mesmo spin (mesma direção), então a solução SandyG ‘ atende às minhas necessidades um pouco melhor.
- @BenNorris interessante. Eu ‘ darei uma olhada nisso mais tarde. Não deve ‘ ser difícil de conseguir.
- @BenNorris Eu só queria que você soubesse, eu corrigi a direção. Foi bastante fácil, não sei por que não ‘ pensei nisso antes.
Resposta
Fiz com Mathcha o primeiro exemplo. Para minha humilde opinião, parece muito semelhante … mas há um máximo latino: ” de gustibus non disputandum est “.
\documentclass[a4paper,12pt]{article} \usepackage{tikz} \usepackage{newtxtext} \usepackage{amssymb} \usepackage{bm} \begin{document} \tikzset{every picture/.style={line width=0.75pt}} %set default line width to 0.75pt \begin{tikzpicture}[x=0.75pt,y=0.75pt,yscale=-1,xscale=1] %uncomment if require: \path (0,300); %set diagram left start at 0, and has height of 300 %Shape: Regular Polygon [id:dp9024119328579219] \draw [line width=1.5] (203,184) -- (161.86,160.25) -- (161.86,112.75) -- (203,89) -- (244.14,112.75) -- (244.14,160.25) -- cycle ; %Shape: Circle [id:dp3742321630799761] \draw [line width=1.5] (155.5,136.5) .. controls (155.5,110.27) and (176.77,89) .. (203,89) .. controls (229.23,89) and (250.5,110.27) .. (250.5,136.5) .. controls (250.5,162.73) and (229.23,184) .. (203,184) .. controls (176.77,184) and (155.5,162.73) .. (155.5,136.5) -- cycle ; %Straight Lines [id:da6431705906977057] \draw [line width=1.5] (101,185) -- (101,31.71) ; \draw [shift={(101,27.71)}, rotate = 450] [fill={rgb, 255:red, 0; green, 0; blue, 0 } ][line width=0.08] [draw opacity=0] (13.4,-6.43) -- (0,0) -- (13.4,6.44) -- (8.9,0) -- cycle ; %Straight Lines [id:da03628267423150655] \draw [line width=1.5] (176.75,89) -- (229.25,89) ; %Straight Lines [id:da6999074691962319] \draw [line width=1.5] (244.14,112.75) -- (285.5,112.75) ; %Straight Lines [id:da6267867712352968] \draw [line width=1.5] (120.5,112.75) -- (161.86,112.75) ; %Straight Lines [id:da4603867099439829] \draw [line width=1.5] (244.14,160.25) -- (285.5,160.25) ; %Straight Lines [id:da018369347304083128] \draw [line width=1.5] (120.5,160.25) -- (161.86,160.25) ; %Straight Lines [id:da7545009709936943] \draw [line width=1.5] (176.75,184) -- (229.25,184) ; %Straight Lines [id:da42526907269791137] \draw [line width=1.5] [dash pattern={on 1.69pt off 2.76pt}] (120.5,136.5) -- (346.5,136.5) ; % Text Node \draw (126,149.4) node [anchor=north west][inner sep=0.75pt] [font=\large] {$\bm{\upharpoonleft }$}; % Text Node \draw (249,149.4) node [anchor=north west][inner sep=0.75pt] [font=\large] {$\bm{\upharpoonleft }$}; % Text Node \draw (195,173.4) node [anchor=north west][inner sep=0.75pt] [font=\large] {$\bm{\upharpoonleft }$}; % Text Node \draw (130,149.4) node [anchor=north west][inner sep=0.75pt] [font=\large] {$\bm{\downharpoonright }$}; % Text Node \draw (253,149.4) node [anchor=north west][inner sep=0.75pt] [font=\large] {$\bm{\downharpoonright }$}; % Text Node \draw (200,173.4) node [anchor=north west][inner sep=0.75pt] [font=\large] {$\bm{\downharpoonright }$}; % Text Node \draw (74,149) node [anchor=north west][inner sep=0.75pt] [font=\large,rotate=-270] [align=left] {Energy}; % Text Node \draw (288,103) node [anchor=north west][inner sep=0.75pt] [font=\large] [align=left] {Antibonding}; % Text Node \draw (288,150) node [anchor=north west][inner sep=0.75pt] [font=\large] [align=left] {Bonding}; % Text Node \draw (120,36) node [anchor=north west][inner sep=0.75pt] [align=left] {\large benzene (6 atoms, 6 electrons)}; \end{tikzpicture} \end{document}