W chemii okrąg Frost to szybka metoda oszacowania względnych poziomów energii orbitali molekularnych pi w związku cyklicznym i następnie w oparciu o rozmieszczenie elektronów oceń jego aromatyczność. Szukam sposobu na utworzenie ich w LaTeX, najlepiej przy użyciu funkcji takich pakietów, jak chemfig i tikzorbital, ale będę się zgadzać tylko dla rozwiązania tikz.

Krąg Frost jest tworzony przez wpisanie wielokąta dla związku cyklicznego (na przykład sześciokąt foremny dla benzenu) wewnątrz okręgu z jeden wierzchołek wielokąta skierowany w dół. W każdym miejscu, w którym wierzchołek wielokąta styka się z okręgiem, jest to orbital molekularny, który może zawierać do dwóch elektronów (reprezentowanych przez strzałki haczyka). Orbitale poniżej poziomej linii przecinającej koło to orbitale wiążące. Powyższe orbitale to orbitale antysprzężące. Wszystkie orbitale leżące na linii są orbitaliami niepowiązanymi. Elektrony są umieszczane na orbitali według pewnych zasad.

  • Zasada aufbau: Orbitale są wypełnione w kolejności rosnącej energii.
  • Zasada wykluczenia Pauliego: każdy orbital może pomieścić tylko dwa elektrony, a spiny ir (kierunki strzałek) muszą być przeciwne.
  • Zasada Hunda: jeśli dwa orbitale mają tę samą energię, jeden elektron wpada w każdy, zanim któryś z nich dostanie drugi elektron.

Oto dłuższy opis metody i jej zastosowania.

Moim idealnym rozwiązaniem jest nowe polecenie, które pobiera rozmiar pierścienia i liczbę elektronów jako dane wejściowe i buduje kręgi Frosta, jak na poniższych przykładach:

  • Rysowanie koła
  • Wpisanie regularnego wielokąta z liczbą boków równą rozmiarowi pierścienia (góra do 10)
  • Rysowanie poziomych odcinków linii na wierzchołkach wielokąta dla orbitali molekularnych
  • Rysowanie pionowej osi energii
  • Rysowanie przerywanej linii dla wiązania / podział antybakteryjny
  • Wypełnianie liczby elektronów zgodnie z powyższymi zasadami

Oto kilka przykładów: benzen (rozmiar pierścienia = 6, elektrony = 6)

Krąg mrozu dla benzenu

kation cyklopentadienylowy (rozmiar pierścienia = 5, elektrony = 4)

krąg mrozu z 5 atomami i 4 elektronami

cyklooktatetraen (rozmiar pierścienia = 8, elektrony = 8)

tutaj wprowadź opis obrazu

Komentarze

  • Przepraszam bardzo za ten komentarz. Ale czy widziałeś te obrazy?
  • @Sebastiano – zrobiłem te obrazy w programie do rysowania chemii, ale każdy trwał około 10 minut. Ponieważ zawierają mieszaninę struktury chemicznej i elementów niestrukturalnych, nie mogę ich eksportować jako grafiki wektorowej. Gdybym mógł to zrobić, po prostu zaimportowałbym je w ten sposób do mojego lateksowego dokumentu. Pracuję nad dokumentem, w którym mogę chcieć narysować ich dziesiątki.
  • Obrazy są ostre i wyraźne nawet bez formatu svg, możesz po prostu przechowywać obrazy png w wystarczająco dużej skali, aby gdy były pomniejszone po dołączeniu do pliku PDF stają się jeszcze gładsze.
  • @AboAmmar – rozumiem, ale poświęcenie czasu na zrobienie jednego z nich jest duże w przypadku bardzo powtarzalnej pracy. Chciałbym mieć makro, które je automatyzuje, ponieważ planuję zrobić ich dziesiątki.
  • @BenNorris Możesz rysować swoje obrazy za pomocą edytora Mathcha. mathcha.io/editor

Odpowiedź

Oto w pełni zautomatyzowane rozwiązanie. Wywołania dla Twoich trzech przykładów to

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

Istnieje opcjonalny argument określający rozmiar promienia. Wartość domyślna to 1 cm. Tak więc frost[2cm]{6}{6} miałoby promień 2 cm.

wprowadź opis obrazu tutaj

Uwaga: Działa to (w tej chwili) tylko wtedy, gdy jest parzysta liczba elektronów.

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

Komentarze

  • Również bardzo dobra odpowiedź.
  • Świetnie! To działa pięknie.

Odpowiedź

Szczerze mówiąc, wymagało to trochę wysiłku, ale twoja figura była intrygująca i pozwoliło mi to nauczyć się nowych rzeczy 1 , więc wszystko jest w porządku.

Zasadniczo utworzyłem \newcommand, imię \Frostcircle, który ma 2 argumenty, opcje i elektrony.

Obecnie [options] to:

  • radius = promień okręgu, pamiętaj, że w tej chwili otaczająca grafika nie dostosowuje się, jeśli zrobisz ją zbyt duża. Mogę nad tym popracować w przyszłości. W tej chwili potrzeba tylko liczby (w cm), użycie długości powoduje jej przerwanie, nie jestem jeszcze pewien dlaczego. Sugestie są mile widziane.
  • ring size = odnosi się do liczby boków wielokąta. Przetestowano liczbę boków od 5 do 10. Jak można się spodziewać, jako argument przyjmuje liczbę
  • frost label = jest to etykieta na górze, domyślnie jest pusta. Upewnij się, że tekst został otoczony nawiasami klamrowymi, np. frost label={My label here}

Innym argumentem są elektrony, najłatwiejszy sposób, jaki udało mi się znaleźć, to ustawić je w kierunku przeciwnym do ruchu wskazówek zegara, zaczynając od góry, jak na tym rysunku:

jak działa polecenie

Przyjmuje wartości 0, 1 i 2: w kolejności, bez elektronu, jeden elektron, dwa elektrony. Możesz podać go jako listę, więc podanie {0,0,2,2,2,0} utworzy benzene krąg mrozu. Może się to wydawać sprzeczne z intuicją, ale w rzeczywistości jest proste, gdy spróbujesz.

Jeśli liczba elementów na liście, którą podasz, jest mniejsza niż rozmiar pierścienia, pojawi się błąd, a kod nie kompilować. Jeśli nie chcesz żadnego elektronu, po prostu wpisz 0, aby rozwiązać ten problem.

Uwagi

Kierunek ” strzałka „, ponieważ elektron jest odwrócony po drugiej stronie, nie jestem pewien, czy jest to ważne dla twoich wykresów. Mogę się temu przyjrzeć innym dzień, jeśli jest to ważne. FIXED

Dodałem również te same pakiety co w odpowiedzi Sebastiano , aby uzyskać czcionkę matematyczną, ale nie są one potrzebne do działania polecenia.

Wyjście

przykłady kręgu mrozu

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

Com ments

  • Dziękuję bardzo za zacytowanie mojego imienia :-); dla mojej skromnej opinii nie było to ważne. Twoje różne kody są idealne !!!! +1
  • To świetnie! Generalnie w stanie podstawowym niesparowane elektrony (strzałki) miałyby ten sam spin (ten sam kierunek), więc rozwiązanie SandyG ' lepiej odpowiada moim potrzebom.
  • @BenNorris interesujące. ' Zajmę się tym później. Nie powinno to być ' trudne do osiągnięcia.
  • @BenNorris Chciałem tylko powiedzieć, że ustaliłem kierunek. To było raczej łatwe, nie wiem, dlaczego ' nie pomyślałem o tym wcześniej.

Odpowiedź

Pierwszy przykład z Mathcha wykonałem. Moim skromnym zdaniem wydaje się bardzo podobny … ale istnieje maksyma łacińska: ” de gustibus non dispandum 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} 

tutaj wprowadź opis obrazu

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *