I kemi er en frostcirkel en hurtig metode til at estimere de relative energiniveauer af pi-molekylære orbitaler i en cyklisk forbindelse og derefter baseret på elektronplacering bedømme dens aromatiske egenskaber. Jeg leder efter en måde at oprette disse på i LaTeX, fortrinsvis ved hjælp af funktionaliteten af pakker som chemfig og tikzorbital, men jeg vil afregne til en tikz eneste løsning.

En frostcirkel oprettes ved at indskrive polygonen for den cykliske forbindelse (for eksempel en almindelig sekskant for benzen) inde i en cirkel med ét toppunkt af polygonen orienteret nedad. Hvert sted, hvor et toppunkt af polygonen berører cirklen, er dette en molekylær orbital, der kan have op til to elektroner i sig (repræsenteret af fiskehagepile). Orbitalerne under den vandrette linje, der gennemskærer cirkel er bindende orbitaler. Ovenstående er antibondende orbitaler. Eventuelle orbitaler, der ligger på linjen, er ikke-bindende orbitaler. Elektroner placeres i orbitalerne efter nogle regler.

  • Aufbau-princippet: Orbitaler er fyldt for at øge energien.
  • Pauli-udelukkelsesprincippet: Hver bane kan kun rumme to elektroner og ir spins (pilretninger) skal være modsatte.
  • Hunds regel: Hvis to orbitaler har den samme energi, gør en elektron i hver, før den enten får sin anden elektron.

Her er en længere beskrivelse af metoden og dens anvendelse.

Min ideelle løsning er en ny kommando, der tager ringestørrelsen og antal elektroner som input og bygger Frostcirkler som følgende eksempler af:

  • Tegning af cirklen
  • Indskrivning af den almindelige polygon med antal sider svarende til ringstørrelse (op til 10)
  • Tegning af vandrette linjesegmenter ved polygonens hjørner for de molekylære orbitaler
  • Tegning af den lodrette energiakse
  • Tegning af den stiplede linje til binding / antibonding division
  • Udfylde antallet af elektroner efter ovenstående regler

Her er nogle eksempler: benzen (ringstørrelse = 6, elektroner = 6)

frostcirkel til benzen

cyclopentadienylkation (ringstørrelse = 5, elektroner = 4)

frostcirkel med 5 atomer og 4 elektroner

cyclooctatetraene (ringstørrelse = 8, elektroner = 8)

indtast billedebeskrivelse her

Kommentarer

  • Undskyld mig meget meget for denne kommentar. Men har du set disse billeder?
  • @ Sebastiano – Jeg lavede disse billeder i kemisk tegnesoftware, men hver tog cirka 10 minutter. Da de indeholder en blanding af kemisk struktur og ikke-strukturelle elementer, kan jeg ikke eksportere dem som vektorgrafik. Hvis jeg kunne gøre det, ville jeg bare importere dem til mit latex-dokument på den måde. Jeg arbejder på et dokument, hvor jeg måske vil tegne snesevis af disse.
  • Billederne er skarpe og klare selv uden svg-format, du kan bare gemme png-billeder i en stor skala, så når de er zoomet ud, når de er inkluderet i PDF-filen, bliver de endnu glattere.
  • @AboAmmar – Jeg forstår det, men tidsforpligtelsen til at lave en er stor til meget gentagne arbejde. Jeg vil gerne have en makro, der automatiserer den, da jeg planlægger at lave snesevis af disse.
  • @ BenNorris Du kunne tegne dine billeder ved hjælp af Mathcha editor. mathcha.io/editor

Svar

Her er en fuldautomatisk løsning. Opkaldene til dine tre eksempler er

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

Der er et valgfrit argument for radiusstørrelse. Standard er 1 cm. Så frost[2cm]{6}{6} ville have en radius på 2 cm.

indtast billedebeskrivelse her

Bemærk: Dette fungerer kun (i øjeblikket), hvis der er et lige 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

  • Meget godt også dit svar.
  • Fremragende! Dette fungerer smukt.

Svar

Helt ærligt, det har krævet en vis indsats, men din figur var spændende og det tillod mig at lære nye ting 1 så det er alt sammen godt.

Grundlæggende har jeg oprettet et \newcommand, navn \Frostcircle, som har 2 argumenter, valgmuligheder og elektronerne.

I øjeblikket er [options]:

  • radius = cirkelens radius, vær opmærksom på, at det omgivende grafik i øjeblikket ikke justeres, hvis du gør det for stort. Jeg kan arbejde på det i fremtiden. Det tager kun et tal (i cm) i øjeblikket, ved hjælp af længder bryder det, jeg er ikke sikker på hvorfor endnu. Forslag er velkomne.
  • ring size = dette refererer til antallet af sider på polygonen. Antal sider fra 5 til 10 er blevet testet. Som du måske forventer, tager det et tal som argument
  • frost label = dette er etiketten øverst, standard er tom. Sørg for at omgive teksten med krøllede seler, f.eks. frost label={My label here}

Det andet argument er elektronerne, den nemmeste måde jeg kunne finde er at indstille dem mod uret, startende fra toppen, som i denne figur:

hvordan kommandoen fungerer

Det tager værdier 0, 1 og 2: i orden, ingen elektron, en elektron, to elektroner. Du kan angive det som en liste, så at give {0,0,2,2,2,0} ville give din benzene frostcirkel. Det lyder måske kontraintuitivt, men det er faktisk simpelt, når du først har prøvet det.

Hvis antallet af elementer på listen, du angiver, er mindre end ringstørrelsen, får du en fejl, og koden vil ikke kompilere. Hvis du ikke vil have noget elektron, skal du bare skrive 0 for at løse dette.

Noter

Retningen af ” pil ” for elektronen er inverteret på den anden side, ikke sikker på om dette er vigtigt for dine grafer. Jeg kan se på det en anden dag, hvis det er vigtigt. FAST

Også tilføjede jeg de samme pakker som i Sebastianos svar for at få matematisk skrifttype, men de er ikke nødvendige for at kommandoen skal fungere.

Output

eksempler på frostcirkler

Kode

\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

  • Mange tak for citatet af mit navn :-); for min ydmyge mening var det ikke vigtigt. Dine forskellige koder er perfekte !!!! +1
  • Dette er fantastisk! Generelt i jordtilstand ville ikke-parrede elektroner (pile) have samme drejning (samme retning), så SandyG ‘ s løsning matcher mine behov lidt bedre.
  • @BenNorris interessant. Jeg ‘ Jeg vil se nærmere på det senere. Det skulle ikke være ‘. Det kan være svært at opnå.
  • @ BenNorris Jeg ville bare fortælle dig, jeg fik fast retningen. Det var ret let, ikke sikker på, hvorfor jeg ikke ‘ ikke tænkte på det før.

Svar

Jeg har gjort med Mathcha det første eksempel. For min ydmyge mening virker det meget ens … men der er 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} 

indtast billedbeskrivelse her

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *