tikz.dev / chemfig Manual

chemfig

Change history

Change history

Changes (most recent first) made in chemfig since the first version. This section has not been translated into English.

Version 1.82 (19/09/2026)
  • 2 erreurs dans le manuel signalées par Takashi P. Kato(H)

  • bug : avec \chemfig{*6((-A)(-B)--(-C)(-D)----)}, les liaisons vers A et B ne se superposent pas comme le font celles vers C et D (signalement de Stipe Mustać)

Version 1.81 (01/09/2026)
  • la macro \?, let-égale à \relax par babel french sous pdflatex terminait prématurément la macro \CF_setcatcodes_a

Version 1.8 (30/08/2026)
  • la clé booléenne save permet d’exporter dans un fichier les instructions tikz ayant permis de tracer une molécule. La clé savet name donne la possibilité de choisir le nom donné au fichier

  • la clé arrow coeff prise en compte dans l’environnement hreac

  • les clés arrow head et arrow style sont prises en compte dans l’environnement hreac (signalement de Moshe Lando)

  • tout type de flèche défini par \definarrow est admis dans l’environnement hreac

  • comportement incohérent du <style> lorsque une flèche de type «@<nom>[<style>]--» est tracée dans l’environnement \schemestart (signalement de Moshe Lando)

Version 1.71 (30/10/2025)
  • bugfix : trop de mauvais raccords de liaisons avec la nouvelle macro \CF_ifzerodim. Retour à la précédente définition (la macro \CF_ifzerodim n’est utilisée que si use atom strut = ⟨true⟩).

    Les codes donnent à nouveau les bons raccords de liaisons :

    1. \chemfig{?-A-[:90]B?}

    2. \chemfig{A-@{a}-B}

    3. \chemfig{[:30]-\charge{90=a}{}-[:-30]}

    On obtient bien 3,6 avec le code suivant :

    Compiled output
  • bugfix : prise en compte de l’argument optionnel de \chemfig dans l’environnement hreac.

    Le code \hreac\chemfig[angle increment=+30]{A-[1]B} > C\endhreac ne plante plus à cause du + dans l’argument optionnel

  • bugfix : prise en compte de l’argument optionnel de \chemname dans l’environnement hreac.

  • bugfix : dans l’environnement hreac, l’argument de \^{<dimension>} n’est plus évaluée à 0pt si exprimé en ex ou em.

  • ajout : par souci de cohérence, dans l’environnement hreac, la macro \name[<dim>]{<nom>} a un argument optionnel pour spécifier l’espacement du <nom> avec le <composé>

  • mise en place de warnings si utilisation d’un ou deux arguments optionnels de \schemestart. Création de la clé init anchor pour accéder au réglage possible avec le deuxième argument optionnel.

  • mise en cohérence : la clé name sep vaut désormais 1.5ex par défaut et s’applique à \chemname si son argument optionnel est vide

Version 1.7 (26/10/2025)
  • réaction horizontales avec l’environnement

    \hreac...\endhreac

    qui offre une syntaxe plus simple que \schemestart...\schemestop

  • par défaut désormais, l’argument de \printatom est développé et dépourvu de strut 1.

    Afin d’assurer la compatibilité, le nouveau booléen use atom strut peut être mis à ⟨true⟩ afin de retrouver le comportement précédent

  • lorsque la clé use atom strut = ⟨false⟩, chaque atome n’est composé typographiquement qu’une seule fois alors que c’était parfois 5 fois ou plus auparavant puisque \vphantom compose son argument dans une boite de .

    La macro \CF_ifzerodim a été rapidement corrigée pour que ce soit le cas. Il reste encore des investigations à faire pour que le code soit plus propre...

    Il se peut que ce changement provoque des petits bugs d’affichage dans le dessin de certaines molécules. Merci de me les signaler.

  • suppression de l’historique des changements dans chemfig.tex pour le mettre ici dans le manuel.

Version 1.66 (28/12/2023)
  • les liaisons de Cram pleines sont jointes entre elles ou aux liaisons simples lorsque bond join = ⟨true⟩

Version 1.6e (30/06/2023)
  • nouvelle clé baseline pour régler finement l’alignement vertical d’une molécule

Version 1.6d (18/02/2023)
  • les ancres ’b’ et ’d’ n’étaient pas prises en compte pour le tracé de flèches directes de type (@a.b-@c.d) dans les schémas réactionnels

  • correction d’un bug : \CF_currentfromatom n’était pas initialisé au début d’un cycle et donc le code suivant plantait \chemfig{AB-[,,2]*3(---)}

Version 1.6c (27/09/2022)
  • nouvelles clés gchemname, schemestart code et schemestop code (suggestion de Balazs Debreceni)

Version 1.6b (01/08/2021)
  • encodage UTF-8

  • la macro \# n’était pas définie pour remplacer #(...) lorsque \chemfig se trouve dans l’argument d’une macro.

Version 1.6a (28/02/2021)
  • le fichier lewis.tex a été renommé chemfig-lewis.tex

Version 1.6 (26/02/2021)
  • les macros des formules de Lewis sont retirées et placées dans le fichier séparé "lewis.tex" que l’utilisateur peut charger s’il le souhaite

  • ajout d’une clé debug pour le trousseau [chemfig]

  • à l’intérieur d’un schéma, le token ’#’ est permis dans l’argument de \chemfig

Version 1.56 (13/07/2020)
  • le centre des cycles est désormais accessible via un nœud spécifique pour chacun d’eux.

Version 1.55 (15/06/2020)
  • chemfig est incompatible avec con t, vu que ce moteur redéfinit des primitives telles que \expanded, \unexpanded et peut être d’autres.

Version 1.54 (21/05/2020)
  • chemfig ne peut plus fonctionner sans \expanded

  • bug : un signe "=" laissé par erreur dans le flux

Version 1.53 (27/04/2020)
  • mise à jour en fonction des nouvelles fonctionnalités de l’extension simplekv

  • bug : \CF_ifzerodim interrompt maintenant le tracé dans la \hbox

Version 1.52 (14/04/2020)
  • bug : définition corrigée de \CFthesubmol dans \CF_defsubmolc pour qu’elle se développe en 1 coup seulement

Version 1.51 (06/04/2020)
  • bug corrigé dans \chargerect_a et \chargeline_a

Version 1.5 (05/03/2020)
  • nouvelles macros \charge et \Charge. Les macros \lewis et \Lewis sont obsolètes et amenées à disparaitre à moyen terme (au moins 9 mois), soit fin 2020

  • prise en compte de la dimension d’un groupe d’atome pour tracer des liaisons jointives

  • bug corrigé dans \CF_searchnode

  • ajout d’une section dans le manuel (placement des atomes)

Version 1.41 (21/05/2019)
  • utilisation de la nouvelle primitive \expanded

  • nouvelle clé h align (⟨true⟩ par défaut) pour les délimiteurs de \polymerdelim. Lorsque à ⟨false⟩, les délimiteurs ne sont plus alignés horizontalement mais positionnés aux noeuds demandés

  • nouvelle clé auto rotate qui n’a de sens que si h align = ⟨false⟩ : les délimiteurs sont automatiquement inclinés

  • nouvelle clé rotate qui n’a de sens que si halign = ⟨false⟩ ET auto rotate = ⟨false⟩ : l’inclinaison des délimiteurs peut êtreà false choisie

Version 1.4 (18/04/2019)
  • corrections de nombreux bugs

  • caractère privé "_" et non plus "@" d’où des modifications à prévoir notamment dans la doc avec les codes spécifiques aux flèches, ça risque de couiner sur tex.stackexchange.com

  • anciennes macros abandonnées et désormais indéfinies : \setcrambond, \setatomsep, \setbondoffset, \setdoublesep, \setangleincrement, \enablefixedbondlength, \disablefixedbondlength, \setnodestyle, \setbondstyle, \setlewis, \setlewisdist, \setstacksep, \setarrowdefault, \setcompoundstyle, \setandsign, \setarrowoffset, \setcompoundsep, \setarrowlabelsep, \enablebondjoin, \disablebondjoin et \schemedebug

  • l’ancienne syntaxe \chemfig[][]{} est abandonnée et n’est plus acceptée, désormais c’est

    \chemfig[<clés>=<valeurs>]{<code molécule>}

  • l’ancienne syntaxe \lewis[<coeff>] ou \Lewis[<coeff>] n’est plus acceptée au profit de \lewis[<clés>=<valeurs>]

Version 1.34 (23/02/2019)
  • bug dans la flèche "<->" corrigé

Version 1.33 (31/10/2018)
  • les macros définies par \definesubmol peuvent désormais avoir un ou plusieurs arguments

  • macro \polymerdelim documentée

Version 1.32 (23/08/2018)
  • définition de \printatom, \CF_begintikzpicture et \CF_endtikzpicture dans le fichier t-chemfig.tex

Version 1.31 (05/04/2018)
  • correction d’un espace indésirable dans \CF_ifnextchar

Version 1.3 (08/03/2018)
  • tous les paramètres sont désormais passés via \setchemfig qui fait appel à "simplekv". Par conséquent, toutes les macros qui réglaient des paramètres deviennent obsolètes, à savoir : \setcrambond, \setatomsep, \setbondoffset, \setdoublesep, \setangleincrement, \enablefixedbondlength, \disablefixedbondlength, \setnodestyle, \setbondstyle, \setlewis, \setlewisdist, \setstacksep, \setarrowdefault, \setcompoundstyle, \setandsign, \setarrowoffset, \setcompoundsep, \setarrowlabelsep, \enablebondjoin, \disablebondjoin et \schemedebug Ces macros seront supprimées dans une future version.

  • la version étoilée \chemfig* et les deux arguments optionnels de la macro \chemfig[][] sont également optionnels et seront supprimés dans une future version afin d’accéder à la syntaxe \chemfig[clés=valeurs]{code}

  • 6 nouveaux paramètres : lewis radius, arrow double sep, arrow double coeff, arrow double harpoon, cycle radius coeff, arrow head.

  • correction d’un bug dans \CF_parsemergeopt qui dans certains cas, envoyait vers l’affichage des caractères

  • petit toilettage du code

  • macro \polymerdelim (non documentée) expérimentale et encore en phase de tests

  • suppression d’un registre d’écriture de fichier

Version 1.2e (20/05/2017)
  • la macro contenant la définition d’une flèche est désormais "\CF_arrow(<nom>)", ainsi la macro \0 n’est plus définie par \definearrow

  • remerciements rajoutés après une suppression indue, pour ne froisser aucune susceptibilité

Version 1.2d (01/12/2015)
  • correction d’un bug dans la flèche "-U"

  • la version étoilée de \setcrambond dessine les liaisons de Cram en pointillés sous forme de trait large et non pas sous forme de triangle.

Version 1.2c (20/11/2015)
  • Correction d’un bug dans \CF_setbondangle : l’angle renvoyé pouvait être négatif

  • Correction d’un bug dans \CF_directarrow : la macro \CF_ifempty n’est pas correctement développée dans l’argument de \pgfpointanchor

Version 1.2b (15/11/2015)
  • bug dans \CF_searchsubmol qui laissait "*" dans le flux de lecture de TeX. Un message d’erreur est également ajouté en cas de "!" en fin de traitement.

  • correction d’un bug dans \CF_setbondangle où l’angle [<:a>] n’était pas évalué par \pgfmathsetmacro.

Version 1.2a (21/10/2015)
  • erreur de copier-coller dans le code: une adresse url était malencontreusement présente en plein milieu d’une ligne de code

Version 1.2 (08/10/2015)
  • correction d’un bug dans le tracé des liaisons de Cram.

  • création de \setangleincrement.

  • chargement de "arrows.meta" et définition de la flèche "CF" basée sur "Stealth" et définie avec \pgfdeclarearrow. Les anciennes flèches "CF_full" et "CF_half" sont abandonnées puisque définies avec \pgfarrowsdeclare.

  • flèche "-U>" corrigée : le placement des labels est maintenant correct dans tous les cas. Ainsi :

    -U>[<a>][<b>][<d>][<r>][<a>]

    place le label <a> près du début de la flèche, quels que soient les signes du rayon <r> et de l’angle <a>.

  • \chemrel, \setchemrel et \chemsign sont supprimées.

  • compatibilité, avec les limitations d’usage, avec la librairie "externalize" : le \begin{tikzpicture} voit désormais le \end{tikzpicture} correspondant dans la macro \CF_chemfigb.

Version 1.1a (23/02/2015)
  • correction d’un bug dans \CF_grabbondoffset. Si \chemfig est dans l’argument d’une macro, les "#" sont doublés par l’action de \scantokens de la macro \CF_chemfigb et il faut un argument délimité avant "(" pour absorber tous les "#".

Version 1.1 (13/02/2015)
  • correction d’un bug dans \CF_searchsubmol : la macro \CF_molecule est dépouillé de son éventuel espace en première position.

  • correction d’un bug dans \CF_arrowf : le nom du prochain nœud courant "end@arrow@i" était erroné dans le cas où une flèche contenait un sous schéma. Ce nom doit dépendre de \CF_schemenest.

  • la jonction entre deux liaisons consécutives dans l’axe peut être activé avec \enablebondjoin et désactivé avec \disablebondjoin (préférable, état par défaut).

  • \chemfig suivi d’une "*" demande à ce que les liaisons aient une longueur invariable : la distance inter-atome devient donc variable. Cette fonctionnalité est désactivé dans les cycles afin que les polygones soient réguliers. \enablefixedbondlength permet cette fonctionnalité pour toutes les macros \chemfig (même non étoilée) tandis que \disablefixedbondlength le désactive.

Version 1.0h (28/11/2013)
  • \chemname admet maintenant une version étoilé qui ne tient pas compte des profondeurs précédentes.

  • \CF_dpmax est géré globalement.

  • correction d’un bug dans "-U>" : le style de la flèche n’était pris en compte pour l’arc.

  • correction d’un bug dans \CF_directarrow : l’angle de la flèche n’était pas calculé

Version 1.0g (16/11/2012)
  • correction d’un bug dans \CF_directarrow pour faire prendre en compte le style des flèche par défaut

  • correction d’un bug dans \CF_lewisc : la boite doit être composée en dehors de l’environnement tikzpicture pour éviter nullfont si jamais \printatom ne passe pas en mode math.

  • correction d’un bug dans \CF_chemfigc : si une longueur par défaut est modifiée par [,<l>] au début d’une molécule et si des cycles étaient emboités, cette longueur n’était pas appliquée aux sous-cycles.

  • ré-écriture des macros \chemabove et \chembemow pour prendre en compte le bug (désormais corrigé) dans luatex.

  • nouvelle macro \setstacksep qui définit l’espacement par défaut dans les macros \chemabove et \chembelow.

Version 1.0f (24/02/2012)
  • correction d’un bug avec \definesubmol, les catcodes n’étaient pas correctement gérés.

Version 1.0e (13/01/2012)
  • la gestion des espaces dans les groupes d’atomes est désormais plus rigoureuse. Plusieurs bugs ont été corrigés

Version 1.0d (19/12/2011)
  • les cercles des cycles étaient tracés au mauvais moment. La longueur de la liaison qui les précédait influait sur le rayon du cercle :

    \chemfig{-[,0.5]**6(------)}

    donnait un bug à l’affichage.

Version 1.0c (30/11/2011)
  • la macro \+ n’est plus explicitement écrite

  • vérifie que eTeX est le moteur utilisé

Version 1.0b (29/11/2011)
  • la commande \merge est désormais protégée entre \schemestart et \schemestop contre des définitions par d’autres packages.

  • \box0 est utilisé au lieu du maladroit \unhbox0

Version 1.0a (18/09/2011)
  • les macros \Lewis et \lewis admettent un argument optionnel

  • la macro \setlewisdist règle la distance entre les 2 électrons

Version 1.0 (15/06/2011)
  • les schémas réactionnels sont désormais disponibles.

  • \Chemabove et \Chembelow modifient la boite englobante.

  • \Lewis modifie la boite englobante

  • les macros \chemleft, \chemright, \chemup et \chemdown affichent des délimiteurs extensibles à gauche, à droite, au dessus et au dessous d’un matériel.

Version 0.4b (24/04/2011)
  • l’argument de \chemfig est tokénisé avec \scantokens ce qui rend caduc tout souci de code de catégorie, à part #.

  • la commande \setbondstyle permet de définir le style des liaisons.

  • correction de l’affichage incorrect des doubles liaisons dans les cycles après les commandes \hflipnext et \vflipnext

  • correction d’un bug lorsqu’un alias commence une molécule

Version 0.4a (10/04/2011)
  • Correction d’un bug concernant l’argument optionnel en début de molécule.

Version 0.4 (07/03/2011)
  • chemfig est désormais écrit en plain-etex et donc utilisable par d’autres formats que LaTeX.

  • Un peu plus de rigueur avec les catcodes des caractères spéciaux, notamment lorsque la commande \chemfig se trouve dans l’argument de \chemmove, \chemabove, \chembelow, \chemrel. TODO : faut-il \scantoken l’argument de \chemfig pour être définitivement débarrassé de ces histoires de catcode ???

  • Correction d’un bug dans le calcul de l’angle des liaisons

Version 0.3a (08/01/2011)
  • Correction d’un bug dans l’argument optionnel de \definesubmol lorsque celui-ci comporte des crochets.

  • Mise à jour du manuel en anglais.

  • Ajout de \vflipnext et \hflipnext pour retourner horizontalement ou verticalement la prochaine molécule.

Version 0.3 (21/11/2010)
  • Amélioration de \definesubmol qui accepte les séquences de contrôle. On peut aussi choisir un alias dont la substitution est différente selon l’orientation de la liaison qui lui arrive dessus.

  • Le caractère "|" force la fin d’un atome. Si on écrit "D|ef" alors, chemfig verra deux atomes "D" et "ef".

  • Le caractère "#" est reconnu lorsqu’il suit un caractère de liaison. Il doit être suivi d’un argument entre parenthèses qui contient l’offset de début et de fin qui s’appliqueront à cette liaison.

  • La macro \chemfig admet un argument optionnel qui sera passé à l’environnement tikzpicture dans lequel elle est dessinée

  • Mise en place de la représentation des mécanismes réactionnels avec la syntaxe "@{<nom>}" devant un atome où "@{<nom>,<coeff>}" au tout début de l’argument d’une liaison. Cette syntaxe permet de placer un nœud (au sens de tikz) qui deviendra l’extrémité des flèches des mécanismes. Le tracé des flèches est faite par la macro \chemmove dont l’argument optionnel devient celui de l’environnement tikzpicture dans lequel sont faites les flèches.

  • Pour le mécanisme d’alignement vertical via le \vphantom, la commande \chemskipalign permet d’ignorer le groupe d’atomes dans lequel elle est écrite.

  • La commande \chemname permet d’afficher un nom sous une molécule. la commande \chemnameinit initialise la plus grande profondeur rencontrée.

  • La commande \lewis a été modifiée de telle sorte que les dessins des décorations soient proportionnels à la taille de la police.

Version 0.2 (31/08/2010)
  • Ajout de la documentation en anglais.

  • Correction de bugs.

  • \printatom est désormais une macro publique.

  • Les espaces sont permis dans les molécules. Ils seront ignorés par défaut puisque les atomes sont composés en mode math par \printatom.

  • Une paire de Lewis peut être représentée ":".

  • Dans les cycles, une correction de la longueur du trait déporté des liaisons doubles est fait de telle sorte que si l’on écrit \chemfig{*5(=====)}, on obtient deux polygones réguliers concentriques.

  • La séquence de contrôle \setnodestyle permet de spécifier le style des noeuds dessinés par tikz.

Version 0.1 (23/06/2010)
  • Première version publique sur le CTAN

1 dysfonctionnement aimablement signalé sur 2 sites par Joseph Wright avec son amusante habitude d’exprimer publiquement le mal qu’il pense de mes packages.