I kemi är en Frostcirkel en snabb metod för att uppskatta de relativa energinivåerna för pi-molekylära orbitaler i en cyklisk förening och sedan baserat på elektronplacering bedöma dess aromatiskt. Jag letar efter ett sätt att skapa dessa i LaTeX, helst med funktionaliteten i paket som chemfig och tikzorbital, men jag kommer att lösa för en tikz enda lösning.

En Frostcirkel skapas genom att polygonen för den cykliska föreningen (till exempel en vanlig hexagon för bensen) inskrivs inuti en cirkel med ett toppunkt på polygonen orienterat nedåt. Varje plats där polygonens toppunkt berör cirkeln är detta en molekylär bana som kan ha upp till två elektroner (representerad av fiskekrokspilar). Orbitalerna under den horisontella linjen som halverar cirkeln är bindande orbitaler. Ovanstående är antibondande orbitaler. Alla orbitaler som ligger på linjen är icke-bindande orbitaler. Elektroner placeras i orbitalerna enligt vissa regler.

  • Aufbau-principen: Orbitaler fylls i ordning för att öka energin.
  • Pauli-uteslutningsprincipen: Varje orbital kan bara rymma två elektroner och ir snurrar (pilriktningar) måste vara motsatta.
  • Hund: s regel: Om två orbitaler har samma energi, gör en elektron i varje innan antingen får sin andra elektron.

Här är en längre beskrivning av metoden och dess tillämpning.

Min perfekta lösning är ett nytt kommando som tar ringstorlek och antal elektroner som ingång och bygger Frostcirklar som följande exempel av:

  • Rita cirkeln
  • Skriva in den vanliga polygonen med antalet sidor lika med ringstorleken (upp till 10)
  • Rita horisontella linjesegment vid polygonens hörn för molekylära orbitaler
  • Rita den vertikala energiaxeln
  • Rita den streckade linjen för bindningen / antibonding division
  • Populera antalet elektroner enligt ovanstående regler

Här är några exempel: bensen (ringstorlek = 6, elektroner = 6)

frostcirkel för bensen

cyklopentadienylkatjon (ringstorlek = 5, elektroner = 4)

frostcirkel med 5 atomer och 4 elektroner

cyclooctatetraene (ringstorlek = 8, elektroner = 8)

ange bildbeskrivning här

Kommentarer

  • Ursäkta mig mycket för den här kommentaren. Men har du sett dessa bilder?
  • @ Sebastiano – Jag gjorde dessa bilder i kemiteckningsprogram, men var och en tog cirka 10 minuter. Eftersom de innehåller en blandning av kemisk struktur och icke-strukturella element kan jag inte exportera dem som vektorgrafik. Om jag kunde göra det skulle jag bara importera dem till mitt latexdokument på det sättet. Jag arbetar med ett dokument där jag kanske vill rita dussintals av dessa.
  • Bilderna är skarpa och tydliga även utan svg-format, du kan bara lagra png-bilder i tillräckligt stor skala så att när de är zoomade ut när de ingår i PDF-filen blir de ännu mjukare.
  • @AboAmmar – Jag förstår det, men tidsåtagandet för att göra en är stor för mycket repetitivt arbete. Jag skulle vilja ha ett makro som automatiserar det eftersom jag planerar att göra dussintals av dessa.
  • @ BenNorris Du kan rita dina bilder med Mathcha-redigeraren. mathcha.io/editor

Svar

Här är en helautomatisk lösning. Samtalen för dina tre exempel är

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

Det finns ett valfritt argument för radiestorlek. Standard är 1 cm. Så frost[2cm]{6}{6} skulle ha en radie på 2 cm.

ange bildbeskrivning här

Obs: Detta fungerar bara (för tillfället) om det finns ett jämnt antal elektroner.

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

Kommentarer

  • Mycket bra också ditt svar.
  • Utmärkt! Detta fungerar vackert.

Svar

Ärligt talat, det tog en ansträngning, men din figur var spännande och det gjorde att jag kunde lära mig nya saker 1 så det är allt bra.

I grund och botten har jag skapat ett \newcommand, namn \Frostcircle, som har två argument, alternativ och elektroner.

För närvarande är [options]:

  • radius = cirkelns radie, observera att för tillfället justeras inte den omgivande grafiken om du gör den för stor. Jag kanske jobbar med den i framtiden. Det tar bara ett nummer (i cm) just nu, med hjälp av längder bryts det, jag är inte säker på varför än. Förslag är välkomna.
  • ring size = detta hänvisar till antalet sidor av polygonen. Antal sidor från 5 till 10 har testats. Som du förväntar dig tar det ett tal som argument
  • frost label = detta är etiketten högst upp, standard är tom. Se till att du omger texten med lockiga hängslen, t.ex. frost label={My label here}

Det andra argumentet är elektronerna, det enklaste sättet jag kunde hitta är att ställa in dem moturs, från början, som i den här figuren:

hur kommandot fungerar

Det krävs värden 0, 1 och 2: i ordning, ingen elektron, en elektron, två elektroner. Du kan tillhandahålla den som en lista så att {0,0,2,2,2,0} ger din benzene frostcirkel. Det kanske låter kontraintuitivt men det är faktiskt enkelt när du har provat det.

Om antalet element i listan du anger är mindre än ringstorleken får du ett fel och koden kommer att inte kompilera. Om du inte vill ha någon elektron, skriv bara 0 för att lösa detta.

Anteckningar

Riktningen för ” pil ” för elektronen är inverterad på andra sidan, inte säker på om detta är viktigt för dina grafer. Jag kan titta på det en annan dag om det är viktigt. FAST

Dessutom lade jag till samma paket som i Sebastiano ”svar för att få matematiska teckensnitt, men de behövs inte för att kommandot ska fungera.

Output

exempel på frostcirkel

Kod

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

Com ments

  • Tack så mycket för att jag heter mitt namn :-); för min ödmjuka åsikt var det inte viktigt. Dina olika koder är perfekta !!!! +1
  • Det här är fantastiskt! I allmänhet i markläget skulle oparade elektroner (pilar) ha samma snurr (samma riktning), så SandyG ’ lösning matchar mina behov lite bättre.
  • @BenNorris intressant. Jag ’ Jag tar en titt på det senare. Det borde ’ inte vara svårt att uppnå.
  • @ BenNorris Jag ville bara meddela dig, jag fixade riktningen. Det var ganska enkelt, inte säker på varför jag inte ’ tänkte på det tidigare.

Svar

Jag har gjort med Mathcha det första exemplet. För min ödmjuka åsikt verkar det väldigt lika … men det finns en latinsk maxime: ” 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} 

ange bildbeskrivning här

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *