En química, un círculo de escarcha es un método rápido para estimar los niveles de energía relativa de los orbitales moleculares pi en un compuesto cíclico y luego, basándose en la ubicación de los electrones, juzgue su aromaticidad. Estoy buscando una manera de crearlos en LaTeX, preferiblemente usando la funcionalidad de paquetes como chemfig y tikzorbital, pero me conformaré para una tikz única solución.

Un círculo de escarcha se crea inscribiendo el polígono del compuesto cíclico (por ejemplo, un hexágono regular para benceno) dentro de un círculo con un vértice del polígono orientado hacia abajo. Cada ubicación donde un vértice del polígono toca el círculo, este es un orbital molecular que puede tener hasta dos electrones (representados por flechas de anzuelo). Los orbitales debajo de la línea horizontal que biseca el Los círculos son orbitales enlazantes. Los de arriba son orbitales antienlazantes. Todos los orbitales que se encuentran en la línea son orbitales no enlazantes. Los electrones se colocan en los orbitales según algunas reglas.

  • El principio de aufbau: los orbitales están llenos en orden de energía creciente.
  • El principio de exclusión de Pauli: Cada orbital puede contener solo dos electrones y el Los giros (direcciones de las flechas) deben ser opuestos.
  • Regla de Hund: si dos orbitales tienen la misma energía, un electrón lo hace en cada uno antes de que cualquiera de los dos obtenga su segundo electrón.

Aquí hay una descripción más larga del método y su aplicación.

Mi solución ideal es un nuevo comando que toma el tamaño del anillo y número de electrones como entrada y construye círculos de Frost como los siguientes ejemplos:

  • Dibujando el círculo
  • Inscribiendo el polígono regular con un número de lados igual al tamaño del anillo (arriba a 10)
  • Dibujar segmentos de línea horizontal en los vértices del polígono para los orbitales moleculares
  • Dibujar el eje de energía vertical
  • Dibujar la línea discontinua para el enlace / división antienlazante
  • Poblar el número de electrones según las reglas anteriores

Aquí hay algunos ejemplos: benceno (tamaño de anillo = 6, electrones = 6)

círculo de escarcha para benceno

catión ciclopentadienilo (tamaño del anillo = 5, electrones = 4)

círculo de escarcha con 5 átomos y 4 electrones

ciclooctatetraeno (tamaño del anillo = 8, electrones = 8)

ingrese la descripción de la imagen aquí

Comentarios

  • Disculpe mucho mucho por este comentario. Pero, ¿has visto estas imágenes?
  • @Sebastiano – Hice estas imágenes en un software de dibujo químico, pero cada una me llevó unos 10 minutos. Debido a que contienen una mezcla de estructura química y elementos no estructurales, no puedo exportarlos como gráficos vectoriales. Si pudiera hacer eso, simplemente los importaría a mi documento de látex de esa manera. Estoy trabajando en un documento donde quizás quiera dibujar docenas de estos.
  • Las imágenes son nítidas y claras incluso sin formato svg, puede almacenar imágenes png a una escala lo suficientemente grande para que cuando estén cuando se reducen cuando se incluyen en el PDF, se vuelven aún más suaves.
  • @AboAmmar – Lo entiendo, pero el compromiso de tiempo para hacer uno es grande para un trabajo muy repetitivo. Me gustaría tener una macro que lo automatice ya que planeo hacer docenas de estos.
  • @BenNorris Podrías dibujar tus imágenes usando el editor Mathcha. mathcha.io/editor

Responder

Aquí hay una solución totalmente automatizada. Las llamadas para sus tres ejemplos son

\frost{6}{6} \frost{5}{4} \frost{8}{8} 

Hay un argumento opcional para el tamaño del radio. El valor predeterminado es 1 cm. Entonces frost[2cm]{6}{6} tendría un radio de 2 cm.

ingrese la descripción de la imagen aquí

Nota: Esto solo funciona (por el momento) si hay un número par de electrones.

\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} 

Comentarios

  • Muy buena también tu respuesta.
  • ¡Excelente! Esto funciona de maravilla.

Respuesta

Honestamente, tomó un poco de esfuerzo, pero su figura era intrigante y me permitió aprender cosas nuevas 1 , así que todo está bien.

Básicamente, he creado un \newcommand, nombre \Frostcircle, que tiene 2 argumentos, opciones y los electrones.

Actualmente, los [options] son:

  • radius = el radio del círculo, tenga en cuenta que en este momento los gráficos circundantes no se ajustan si lo hace demasiado grande. Podría trabajar en ello en el futuro. Solo se necesita un número (en cm) en este momento, usar longitudes lo rompe, no estoy seguro de por qué todavía. Las sugerencias son bienvenidas.
  • ring size = esto se refiere al número de lados del polígono. Se ha probado un número de lados de 5 a 10. Como era de esperar, toma un número como argumento
  • frost label = esta es la etiqueta en la parte superior, la predeterminada está vacía. Asegúrese de rodear el texto con llaves, p. Ej. frost label={My label here}

El otro argumento son los electrones, la forma más fácil que pude encontrar es configurarlos en sentido antihorario, comenzando desde arriba, como en esta figura:

cómo funciona el comando

Toma valores 0, 1 y 2: en orden, sin electrón, un electrón, dos electrones. Puede proporcionarlo como una lista, de modo que al proporcionar {0,0,2,2,2,0} su benzene círculo de escarcha. Puede parecer contradictorio, pero en realidad es simple una vez que lo intentas.

Si la cantidad de elementos en la lista que proporcionas es menor que el tamaño del anillo, obtendrás un error y el código no compilar. Si no desea ningún electrón, simplemente escriba 0 para resolver esto.

Notas

La dirección de la » arrow » porque el electrón está invertido en el otro lado, no estoy seguro de si esto es importante para sus gráficos. Puedo verlo en otro día si es importante. FIJO

También agregué los mismos paquetes que en respuesta de Sebastiano para obtener la fuente matemática, pero no son necesarias para que el comando funcione.

Salida

ejemplos de círculos de escarcha

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: El pgfkeys.

Com ments

  • Muchas gracias por citar mi nombre :-); para mi humilde opinión no era importante. Tus diferentes códigos son perfectos !!!! +1
  • ¡Esto es genial! Generalmente, en el estado fundamental, los electrones no apareados (flechas) tendrían el mismo giro (la misma dirección), por lo que la solución de SandyG ‘ se adapta un poco mejor a mis necesidades.
  • @BenNorris interesante. ‘ lo veré más tarde. No debería ‘ ser difícil de lograr.
  • @BenNorris Solo quería avisarle que arreglé la dirección. Fue bastante fácil, no estoy seguro de por qué no ‘ no pensé en ello antes.

Respuesta

He terminado con Mathcha el primer ejemplo. Para mi humilde opinión parece muy similar … pero hay un maxime 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} 

ingrese la descripción de la imagen aquí

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *