Vous êtes invité à consulter d'abord la section "Écrire des formules chimiques".
Nous présentons quelques solutions ici. La plus ancienne est ChemTeX; la plus performante est PPCHTeX; la plus récente qui combine souplesse, facilité d'utilisation et puissance est ChemFig.
Avec codice_1.
Pour utiliser cette extension, il faut commencer par placer dans le préambule le code suivant :
On décrit le dessin selon une syntaxe simple, souple et intuitive. Le dessin est fait avec l'extension tikz qui se charge automatiquement. ChemFig fonctionne donc en mode dvi ou pdf.
La commande principale permettant de dessiner les molécules est
\chemfig{codice_2 ==
L'extension PPCHTeX extension permet également de dessiner des molécules développées en deux dimensions, et de représenter les orientations des liaisons (liaisons tétraédriques du carbone, projection de Newman, voir aussi "Représentation des molécules").
La forme générale est :
 \startchemical
 \chemical["liaisons"]["groupements"]
 \stopchemical
La liste "liaisons" commence par la description du groupement au point de création, par exemple codice_5 pour des liaisons en étoile autour d'un groupement, et codice_6 pour un cycle hexagonal. Suivent ensuite les liaisons à tracer.
On peut ajouter des options :
 \startchemical["options"]
 \chemical["liaisons"]["groupements"]
 \stopchemical
ou encore
 \setupchemical["option"]
 \startchemical
 \chemical["liaisons"]["groupements"]
 \stopchemical
Les options possibles sont :
Structure codice_5.
Dans le cas de codice_5, il s'agit des liaisons partant du groupement central ; on peut en mettre 8, la n°1 étant à droite, la numérotation se faisant dans le sens anti-trigonométrique.
 6 7 8
 5-0-1
 4 3 2
On utilise la lettre codice_17 pour une liaison simple, codice_18 pour une double et codice_19 pour une triple. Par exemple
 ONE,SB1,SB3,SB5,SB7
va placer quatre liaisons simples en croix +. On pourrait également écrire
 ONE,SB1357
Suit la liste des "positions" des groupements ou atomes, introduite par codice_20, la position 0 étant le centre.
Puis, le second crochet contient la liste des groupements en eux-mêmes, dans le même ordre, écrits avec la syntaxe chimique classique.
Par exemple, pour la formule développée du méthane :
 \startchemical
 \chemical[ONE,SB1357,Z01357][C,H,H,H,H]
 \stopchemical
 (7)
 H
 (5) H-C-H (1)
 H
 (3)
On peut aussi faire des liaisons en pointillé avec codice_24 (D comme "dotted"), et des liaisons en trait épais avec codice_25 "(bold bond)". Par exemple, pour la projection de Newmann du méthane :
 \startchemical
 \chemical[ONE,SD1,SB4,BB2,SB7,Z01247][C,H,H,H,H]
 \stopchemical
 (7)
 H
 C···H (1)
 H H
 (4) (2)
Structure codice_6.
Si l'on utilise codice_6, cela crée un hexagone. Les positions et les liaisons sont numérotées dans le sens horaire, la position 1 est en haut à droite, la liaison 1 est la liaison verticale à droite.
 6
 (L5) / \ (L6)
 5 1
 (L4) | | (L1)
 4 2
 (L3) \ / (L2)
 3
On a deux notations :
La lettre codice_33 désigne la liaison délocalisée "(circle)". On met le ou les numéros des liaisons concernés après la nature de la liaison, et si l'on n'utilise pas de numéro, cela désigne toutes les liaisons. Par exemple, pour le benzène en notation simplifiée
 \startchemical
 \chemical[SIX,B,C]
 \stopchemical
le codice_31 tout seul indique que toutes les liaisons internes sont simples. Pour la forme de Kékulé :
 \startchemical
 \chemical[SIX,B,EB246]
 \stopchemical
les liaisons 1, 3 et 5 sont simples, des 2, 4 et 6 sont doubles. On aurait aussi pû mettre codice_35.
Pour mettre des atomes dans l'hexagone, on utilise codice_20 ; il faut alors utiliser codice_17 et codice_18 (et non pas codice_31 et codice_32) :
 \startchemical
 \chemical[SIX,SB,C,Z][C,C,C,C,C,C]
 \stopchemical
 \startchemical
 \chemical[SIX,SB135,DB246,Z][C,C,C,C,C,C]
 \stopchemical
codice_41 désigne le centre, par exemple si l'on veut mettre une charge partielle positive codice_42 ou codice_43.
Pour mettre des liaisons partant des atomes du cycle et allant vers des groupements extérieurs, on utilise codice_44 "(radical)" pour une liaison simple et codice_45 "(extra radical)" pour une liaison double ; pour la projection de Newmann, on peut utiliser codice_46 pour une liaison en pointillés "(radical dashed)" et codice_47 pour une liaison en trait gras "(radical bold)". Là encore, on met le ou les numéros des sites concernés après, et si l'on n'utilise pas de numéro, cela désigne toutes les liaisons. Si l'on a des atomes placés dans l'hexagone, il faut utiliser codice_48 "(single radical)" ou codice_49 "(doube radical)" pour que le trait ne se superpose pas au symbole.
Si l'on veut placer des groupements au bout des liaisons extérieures, on utilise codice_50. Le ou les groupements sont indiqués dans le crochet après, dans l'ordre des codice_50.
Par exemple, pour la structure explicite du benzène :
 \startchemical
 \chemical[SIX,SB,C,Z,SR,RZ][C,C,C,C,C,C,H,H,H,H,H,H]
 \stopchemical
pour la forme simplifiée du phénol
 \startchemical
 \chemical[SIX,B,R6,RZ6][OH]
 \stopchemical
L'option codice_52 permet de tourner d'un sixième de tour.
 (4)
 4___5
 (3) / \ (5)
 3 6
 (2) \ ___ / (6)
 2 1
 (1)
Cette forme ne peut pas être utilisée pour les cycles aromatiques (la liaison codice_33 ne fonctionne pas), mais pour le cyclohexane.
Alors, codice_54 et codice_55 désignent des liaisons respectivement vers le haut et vers le bas, codice_56 et codice_57 désignent des groupements respectivement vers le haut et vers le bas. On peut séparer les parties de la molécules en plusieurs commandes codice_58 pour simplifier, par exemple
 \startchemical
 \chemical[SIX,FRONT,B] % structure de base
 \chemical[SIX,FRONT,+R,+RZ]["liste de groupements"] % groupements en haut
 \chemical[SIX,FRONT,-R,-RZ]["liste de groupements"] % groupements en bas
 \stopchemical
On peut utiliser des liaisons raccourcies vers la gauche, codice_59, ou vers la droite, codice_60. En raccourcissant une liaison vers la gauche et une autre vers la droite, cela laisse la place de mettre un atome dans l'hexagone, par exemple
 \startchemical
 \chemical[SIX,FRONT,B1236,+SB4,-SB5,Z5][O]
 \stopchemical
laisse de la place en position 5 pour placer un atome (ici d'oxygène).
 __O
 \___/
Autres structures.
Les autres structures sont :
Mise en forme des groupements.
On peut faire varier l'alignement du texte des groupements, par exemple pour éviter la collision :
On peut rajouter du texte aux groupements, avec la syntaxe
On peut indiquer la charge électrique avec
 \-{"nombre"}{"groupement"} % charge négative
 \+{"nombre"}{"groupement"} % charge positive
par exemple
 \startchemical
 \chemical[ONE,SB1257,Z01357][1C,H,H,H,H]
 \stopchemical
ajoute un « 1 » au dessus du carbone.
Chaîne de structures.
On peut enchaîner les structures en créant une structure dans une autre. La sous-structure est définie dans le premier crochet, avec les position des atomes ; elle commence par codice_72 "(picture begin)" et se termine par codice_73 "(picture end)". Par exemple, pour représenter une molécule de dioxygène :
 \startchemical
 \chemical[ONE,DB1,Z0,][O,]
 \stopchemical
 O=
Notez que l'on aurait pu simplement faire codice_74 ou bien codice_75 (sans codice_76 pour cette dernière solution), c'est juste un exemple simplifié. Cependant, cette solution est utile si l'on veut placer les doublets non-liants (voir ci-après).
Par exemple, pour le phénol :
 \startchemical
 \chemical[SIX,B,C,R6,][]
 \stopchemical