A kémia területén a Frost kör gyors módszer a pi molekuláris pályák relatív energiaszintjének becslésére egy ciklikus vegyületben, és majd az elektronelhelyezés alapján ítélje meg aromás jellegét. Keresek egy módot ezek létrehozására a LaTeX-ben, lehetőleg olyan csomagok funkcionalitását használva, mint a chemfig és a tikzorbital, de rendezni fogom csak tikz megoldáshoz.

A Frost kör úgy jön létre, hogy a kör belsejébe beírja a ciklikus vegyület sokszöget (például szabályos hatszöget a benzolhoz) A sokszög egyik csúcsa lefelé irányul. Minden olyan hely, ahol a sokszög csúcsa érinti a kört, ez egy molekuláris pálya, amelyben legfeljebb két elektron lehet (amelyet horognyilak képviselnek). A vízszintes vonal alatti pályák, amelyek kettéosztják a kör kötőpályák. A fentiek antigondáns pályák. A vonalon fekvő bármely pálya nem kötő pálya. Az elektronokat néhány szabály beilleszti a pályákba.

  • Az aufbau-elv: A pályák kitöltöttek az energia növelésének sorrendjében.
  • A Pauli-kizárás elve: Minden pályára csak két elektron és az Az ir pörgetéseknek (nyílirányoknak) ellentétesnek kell lenniük.
  • Hund szabálya: Ha két pályának ugyanaz az energiája, akkor egy elektron mindegyikbe belemegy, mielőtt bármelyik második elektront kapná.

Itt található a módszer és alkalmazásának hosszabb leírása.

Ideális megoldásom egy új parancs, amely megkapja a gyűrű méretét és az elektronok száma bemenetként, és a következő példákhoz hasonlóan felépíti a Frost köröket:

  • A kör rajzolása
  • A szabályos sokszög beírása a gyűrű méretével megegyező oldalak számával (fel 10-ig)
  • Vízszintes vonalszakaszok rajzolása a poligon csúcsainál a molekuláris pályák számára
  • A függőleges energia tengely rajzolása
  • Szaggatott vonal rajzolása a kötéshez / antigondáló felosztás
  • Az elektronok számának feltöltése a fenti szabályok szerint

Íme néhány példa: benzol (gyűrűméret = 6, elektron = 6)

benzol fagyköre

ciklopentadienil-kation (gyűrűméret = 5, elektron = 4)

fagy kör 5 atomral és 4 elektronnal

ciklooktatetraén (gyűrűméret = 8, elektron = 8)

írja ide a kép leírását

Megjegyzések

  • Nagyon elnézést sokat erről a megjegyzésről. De láttad ezeket a képeket?
  • @Sebastiano – ezeket a képeket kémiai rajz szoftverben készítettem, de mindegyik kb. 10 percet vett igénybe. Mivel kémiai szerkezet és nem strukturális elemek keverékét tartalmazzák, nem exportálhatom őket vektorgrafikaként. Ha ezt megtehetném, akkor csak importálnám őket a latex dokumentumomba. Olyan dokumentumon dolgozom, amelybe tucatokat szeretnék rajzolni.
  • A képek svg formátum nélkül is élesek és tiszták, a png képeket csak elég nagy méretben tárolhatja, így amikor elkészülnek, kicsinyítve, ha a PDF-be kerülnek, még simábbá válnak.
  • @AboAmmar – Ezt megértem, de az idő elkötelezettsége nagy az ismétlődő munkához. Szeretnék egy olyan makrót, amely automatizálja, mivel több tucat ilyen elkészítését tervezem.
  • @BenNorris A Mathcha szerkesztő segítségével megrajzolhatja a képeit. mathcha.io/editor

Válasz

Itt van egy teljesen automatizált megoldás. Három példája a következő:

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

A sugármérethez opcionális argumentum tartozik. Alapértelmezés szerint 1 cm. Tehát frost[2cm]{6}{6} sugara 2 cm lenne.

írja be a kép leírását itt

Megjegyzés: Ez csak akkor működik (jelenleg), ha páros számú elektron van.

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

Megjegyzések

  • Nagyon jó a válaszod is.
  • Kiváló! Ez gyönyörűen működik.

Válasz

Őszintén szólva némi erőfeszítést igényelt, de az alakja érdekes volt és ez lehetővé tette számomra, hogy új dolgokat tanuljak 1 , így minden nagyon jó.

Alapvetően létrehoztam egy \newcommand nevet \Frostcircle, amelynek 2 argumentuma, opciója és elektronja van.

Jelenleg a [options] a következő:

  • radius = a kör sugara, kérjük, vegye figyelembe, hogy jelenleg a környező grafika nem áll be, ha túl nagyra teszi. Esetleg dolgozom rajta A jövőben csak egy számra van szükség (cm formátumban), a hosszúságok megszakításával még nem tudom, miért. Javaslatokat szívesen fogadunk.
  • ring size = ez a sokszög oldalainak számára utal. Az oldalak számát 5-től 10-ig teszteltük. Ahogy várható volt, egy számot vesz igénybe argumentumként
  • frost label = ez a címke a tetején, az alapértelmezés üres. Ügyeljen arra, hogy a szöveget göndör zárójelekkel vegye körül, pl. frost label={My label here}

A másik érv az elektron, a legegyszerűbb módja az, ha az óramutató járásával ellentétes irányba állítom őket, felülről indulva, mint ezen az ábrán:

a parancs működése

0, 1 és 2 értékek szükségesek: sorrendben, nincs elektron, egy elektron, két elektron. Megadhatja listaként, így az {0,0,2,2,2,0} megadása megadná a benzene fagykört. Lehet, hogy ellentmondásosan hangzik, de valójában egyszerű, ha megpróbálod.

Ha az általad megadott listában az elemek száma kisebb, mint a gyűrű mérete, hibaüzenetet kapsz, és a kód ne fordítsd. Ha nem akarsz elektront, akkor ennek megoldásához egyszerűen írd be a 0 parancsot.

Megjegyzések

A ” nyíl ” mert az elektron a másik oldalon megfordítva van, nem biztos benne, hogy ez fontos-e a grafikonjaid számára. Megnézhetem egy másikban nap, ha fontos. FIXED

Ugyanazt a csomagot adtam hozzá, mint Sebastiano válaszában a matematikai betűkészlet megszerzéséhez, de ezekre nincs szükség a parancs működéséhez.

Kimenet

fagykör példák

kód

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

Com ments

  • Nagyon köszönöm a nevem idézését :-); szerény véleményem szerint nem volt fontos. A különböző kódjaid tökéletesek !!!! +1
  • Ez nagyszerű! Általában alapállapotban a párosítatlan elektronoknak (nyilaknak) azonos a spinje (azonos irányú), így a SandyG ‘ s megoldás egy kicsit jobban megfelel az igényeimnek.
  • @BenNorris érdekes. ‘ később ezt megnézem. Nem szabad, hogy ‘ legyen nehéz elérni.
  • @BenNorris Csak tájékoztatni akartalak, rögzítettem az irányt. Elég könnyű volt, nem tudom, miért nem gondoltam rá hamarabb.

Válasz

Az első példát a Mathcha -val végeztem. Szerény véleményem szerint nagyon hasonlónak tűnik … de van egy latin 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} 

írja ide a kép leírását

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük