En chimie, un cercle de givre est une méthode rapide pour estimer les niveaux dénergie relatifs des orbitales moléculaires pi dans un composé cyclique et puis basé sur le placement des électrons juger son aromaticicité. Je « cherche un moyen de les créer dans LaTeX, de préférence en utilisant les fonctionnalités de packages comme chemfig et tikzorbital, mais je vais régler pour une solution tikz uniquement.

Un cercle de givre est créé en inscrivant le polygone du composé cyclique (par exemple un hexagone régulier pour le benzène) à lintérieur dun cercle avec un sommet du polygone orienté vers le bas. Chaque emplacement où un sommet du polygone touche le cercle est une orbitale moléculaire qui peut contenir jusquà deux électrons (représentée par des flèches en hameçon). Les orbitales sous la ligne horizontale qui coupe le cercle sont des orbitales de liaison. Celles ci-dessus sont des orbitales anti-liantes. Toutes les orbitales sur cette ligne sont des orbitales non-liantes. Les électrons sont placés dans les orbitales selon certaines règles.

  • Le principe daufbau: les orbitales sont remplies par ordre dénergie croissante.
  • Le principe dexclusion de Pauli: chaque orbitale ne peut contenir que deux électrons et le ir spins (sens des flèches) doit être opposé.
  • Règle de Hund: si deux orbitales ont la même énergie, un électron entre dans chacune d’elles avant d’obtenir son deuxième électron.

Voici une description plus longue de la méthode et de son application.

Ma solution idéale est une nouvelle commande qui prend la taille de la bague et nombre délectrons comme entrée et construit des cercles de givre comme les exemples suivants en:

  • Dessin du cercle
  • Inscrire le polygone régulier avec un nombre de côtés égal à la taille de lanneau (en haut à 10)
  • Dessin de segments de ligne horizontaux aux sommets du polygone pour les orbitales moléculaires
  • Dessin de laxe vertical dénergie
  • Dessin de la ligne en pointillés pour la liaison / division anti-adhérente
  • Remplissage du nombre délectrons selon les règles ci-dessus

Voici quelques exemples: benzène (taille de lanneau = 6, électrons = 6)

cercle de givre pour le benzène

cation cyclopentadiényle (taille de lanneau = 5, électrons = 4)

cercle de givre avec 5 atomes et 4 électrons

cyclooctatétraène (taille de lanneau = 8, électrons = 8)

entrez la description de limage ici

Commentaires

  • Excusez-moi très beaucoup pour ce commentaire. Mais avez-vous vu ces images?
  • @Sebastiano – Jai fait ces images dans un logiciel de dessin de chimie, mais chacune a pris environ 10 minutes. Parce quils contiennent un mélange de structure chimique et déléments non structurels, je ne peux pas les exporter sous forme de graphiques vectoriels. Si je pouvais faire cela, je les importerais simplement dans mon document latex de cette façon. Je travaille sur un document dans lequel je pourrais vouloir en dessiner des dizaines.
  • Les images sont nettes et claires même sans format svg, vous pouvez simplement stocker des images png à une échelle suffisamment grande pour que lorsquelles soient zoom arrière lorsquils sont inclus dans le PDF, ils deviennent encore plus fluides.
  • @AboAmmar – Je comprends cela, mais le temps consacré à la création dun fichier est important pour un travail très répétitif. Jaimerais avoir une macro qui lautomatise puisque je prévois den faire des dizaines.
  • @BenNorris Vous pouvez dessiner vos images en utilisant léditeur Mathcha. mathcha.io/editor

Réponse

Voici une solution entièrement automatisée. Les appels pour vos trois exemples sont

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

Il existe un argument facultatif pour la taille du rayon. La valeur par défaut est 1 cm. Ainsi, frost[2cm]{6}{6} aurait un rayon de 2 cm.

entrez la description de limage ici

Remarque: Cela ne fonctionne (pour le moment) que sil y a un nombre pair délectrons.

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

Commentaires

  • Très bien aussi votre réponse.
  • Excellent! Cela fonctionne à merveille.

Réponse

Honnêtement, cela a demandé un certain effort, mais votre silhouette était intrigante et cela ma permis dapprendre de nouvelles choses 1 donc, tout va bien.

En gros, jai créé un nom \newcommand \Frostcircle, qui a 2 arguments, les options et les électrons.

Actuellement, les [options] sont:

  • radius = le rayon du cercle, veuillez noter que pour le moment, les graphiques environnants ne sajustent pas si vous le rendez trop grand. Je pourrais travailler dessus dans le futur. Il ne prend quun nombre (dans cm) pour le moment, en utilisant des longueurs le casse, je ne sais pas encore pourquoi. Les suggestions sont les bienvenues.
  • ring size = cela fait référence au nombre de côtés du polygone. Nombre de côtés de 5 à 10 ont été testés. Comme vous vous en doutez, il prend un nombre comme argument
  • frost label = cest létiquette en haut, la valeur par défaut est vide. Assurez-vous dentourer le texte daccolades, par exemple frost label={My label here}

Lautre argument sont les électrons, le moyen le plus simple que jai pu trouver est de les régler dans le sens antihoraire, en commençant par le haut, comme dans cette figure:

comment la commande fonctionne

Il prend les valeurs 0, 1 et 2: dans lordre, pas délectron, un électron, deux électrons. Vous pouvez le fournir sous forme de liste, donc donner {0,0,2,2,2,0} donnerait votre benzene cercle de givre. Cela peut sembler contre-intuitif, mais cest en fait simple une fois que vous avez essayé.

Si le nombre déléments dans la liste que vous fournissez est inférieur à la taille de la bague, vous obtiendrez une erreur et le code sera ne compilez pas. Si vous ne voulez pas délectron, tapez simplement 0 pour résoudre ce problème.

Remarques

La direction du  » arrow  » car lélectron est inversé de lautre côté, je ne sais pas si cest important pour vos graphiques. Je peux lexaminer dun autre jour si cest important. FIXED

Jai également ajouté les mêmes packages que dans la réponse de Sebastiano «  pour obtenir la police mathématique, mais elles ne sont pas nécessaires pour que la commande fonctionne.

Sortie

exemples de cercles de givre

Code

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

Com ments

  • Merci beaucoup pour la citation de mon nom :-); à mon humble avis, ce nétait pas important. Vos différents codes sont parfaits !!!! +1
  • Cest génial! Généralement à létat fondamental, les électrons non appariés (flèches) auraient le même spin (même direction), donc la solution de SandyG ‘ correspond un peu mieux à mes besoins.
  • @BenNorr est intéressant. Je ‘ j’y jetterai un œil plus tard. Cela ne devrait ‘ pas être difficile à réaliser.
  • @BenNorris Je voulais juste vous le faire savoir, jai fixé la direction. Cétait plutôt facile, je ne sais pas pourquoi je ny ai ‘ pas pensé plus tôt.

Réponse

Jai fait avec Mathcha le premier exemple. À mon humble avis, cela semble très similaire … mais il existe un 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} 

entrez la description de limage ici

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *