Система описания химических формул для WEB.
Внимание! Сайт в процессе переименования.
Старое название easyChem оказалось слишком распространённым. Новое название: CharChem.
Сайт уже доступен через новый домен charchem.org, который вскоре станет основным. Впрочем, старый домен easychem.org тоже будет доступен.

Структурные формулы

Правила описания структурных формул в системе easyChem.
Вы можете воспользоваться Справочником для поиска готовых структурных формул по названиям, молекулярным формулам (брутто-формулам) или по категориям химических веществ.
Если Вы только начинаете изучать химию, тогда Вам может оказаться полезной научно-популярная статья о химических формулах.

К сожалению, описание структурных формул не может быть простым. Но система easyChem позволяет значительно упростить эту задачу. Для этого используется принцип максимального приближения процесса написания кода формулы к процессу рисования этой формулы карандашом на бумаге.

Цепочки, узлы и связи

Рассмотрим формулу этилового спирта: CH3-CH2-OH Это простая цепочка, состоящая из трех узлов и двух связей. Как видно, узел описывается точно так же, как линейная формула. А связь изображается знаком минус. В целом, описание формулы практически не отличается от финального представления. В этом состоит принцип визуального соответствия.

Краткое описание связи в пространстве

Теперь изобразим ту же формулу, но вертикально. CH3|CH2|OH Здесь в строчку записаны те же действия, которые пришлось выполнить при рисовании формулы: три узла и два символа |, обозначающие проведенную сверху вниз черточку.
Какие же есть ещё способы обозначения связей? Есть символы, обозначающие наклонные связи / и \: H/O\H Двойные связи обозначаются так: H2C=CH2 <-> CH2||CH2 <-> H2C\\CH2 <-> H2C//CH2 Тройные связи - аналогично: HC%CH <-> CH|||CH <-> HC\\\CH <-> HC///CH Тройная горизонтальная связь описывается символом %, либо ≡ (U+2261).
А как изобразить связи, которые рисуются справа налево или снизу вверх? Для этого перед обозначением связи ставится обратный апостроф:
H`-C`%N + Na`|O`|H = Na`\C`\\\N + H`/O`\H Чтобы не путаться в обозначениях \ `\ / `/, нужно мысленно проверить, рисуется ли связь слева направо. Если да, то апостроф не ставится. Апостроф означает обратное направление - справа налево.
Все приведенные здесь описания связей называются краткими. Термин краткое описание связи будет часто встречаться далее по тексту.

Автоматические узлы и замыкание цепочек

Так же, как при изображении скелетных структурных формул опускаются атомы водорода, а углерод заменяется углами связей, можно поступить и при описании easyChemic. Например, чтобы нарисовать молекулу бензола в виде шестиугольника, записываем подряд символы, соответствующие линиям: \||`/`\\`|// Здесь узлы тоже есть, хотя их и не видно. Они называются автоматическими. Зато при вычислении молекулярной массы и брутто-формулы все невидимые атомы учитываются.
Вторая особенность этой формулы состоит в том, что в конце цепочки мы пришли в её начало. При этом последний узел связывается с первым той связью, которая обозначена //.

Описание нескольких цепочек и ссылки на узлы

Как правило, структурные формулы невозможно описать в виде одной цепочки. Допустим, нужно изобразить формулу метана в виде четырех атомов водорода, связанных с атомом углерода. Для этого можно использовать две цепочки - вертикальную и горизонтальную, которые пересекаются на атоме углерода. Записывается это так: H-C-H; H|#C|H Для обозначения конца одной цепочки и начала другой используется точка с запятой. После неё можно ставить символы пробела или конца строки с целью улучшения читабельности.
Другая важная особенность - ссылка на атом углерода при помощи конструкции #C. Это означает, что не нужно создавать новый узел, а нужно использовать уже существующий.

Нумерация узлов

Но если мы захотим изобразить развернутую формулу этилового спирта, потребуется три цепочки и два пересечения. В этом случае используем ссылку по номеру узла. Узлы нумеруются с 1 в порядке их появления в описании. Автоматические узлы не являются исключением и нумеруются точно так же, как и явно описанные.
Итак, этанол: H-C-C-OH; H|#2|H; H|#3|H Здесь первый узел - атом водорода, а ссылки идут на второй и третий узлы. Это атомы углерода. Кстати, четвертый узел - это OH, т.к между атомами не указана связь. Пятый узел - первый атом водорода во второй цепочке. Шестой узел - последний атом водорода во второй цепочке. Потому что узел #2 уже имеет номер 2 и по второму разу не нумеруется.
Вот ещё пара способов описания той же молекулы:
H|C|H; H|C|H; H-#C-#5-OH <-> H-C|H; H|#C-C|H; H|#-3-OH В последнем варианте мы видим отрицательный номер #-3. Это может быть удобно, когда проще считать узлы не от начала, а от конца. Номеру -1 соответствует атом водорода, который объявлен непосредственно перед #-3. Номер -2 - последний атом водорода во второй цепочке.

Метки узлов

Существует ещё один способ ссылки на узел. Для этого узлу нужно назначить метку:
H|C:cntr|H; H-#cntr-H Метка назначается при помощи двоеточия после описания узла и состоит из букв и цифр.

Ветвления

Существует и второй способ описания нелинейных структур - ветвление. Например, уксусная кислота: H3C-C<//O>\OH Символ < ставится сразу после описания узла. После символа > мы как бы возвращаем карандаш к тому узлу, который был до открытия ветки.
Внутри веток можно открывать вложенные ветки. Например:: H\N</N<`|H>\H>|H К сожалению, символы < и > являются служебными в html. И если, к примеру, в html-файле записать </I>, то браузер посчитает это окончанием тега <I>, хотя мы его не объявляли. Но ветку с атомом йода в формуле мы не увидим. Для предотвращения конфликтов можно заменить < и > на (* и *). Запись (*/I*) будет воспринята правильно. Причем, замена равнозначна настолько, что можно использовать даже сочетания. Например (*/I>

Правильные многоугольники

Возможно Вы уже заметили, что краткие описания связей (которые записываются в виде символов -\|/) предназначены для описания правильных шестиугольников типа бензола. А если нам потребуется изобразить фуран (пятиугольник) или Оксациклогептатриен (семиугольник), то такие связи нам не помогут. Простейшим примером может служить Этиленоксид - треугольник: `=_p3O_p3 Здесь сначала рисуется горизонтальная двойная связь, а затем от неё начинает строиться правильный треугольник. Две оставшиеся связи строятся конструкциями _p3. Это означает одинарную связь для полигона с 3 вершинами с поворотом по часовой стрелке относительно предыдущей связи. Пример посерьёзнее - семиугольный Оксациклогептатриен с тремя двойными связями (которые обозначаются pp):
`=_p7_pp7_p7O_p7_pp7_p7 <-> =_q7_qq7_q7O_q7_qq7_q7 Тут два варианта. Один с поворотом по часовой стрелке. Второй - против часовой. Для этого предназначена похожая конструкция, но с буквой q.
А для пятиугольников цифру можно не писать. Поэтому фуран записывается проще: -_pp_pO_p_pp К сожалению, такая запись уже не так проста, как при помощи кратких описаний. Но сложность возрастает по мере добавления новых возможностей.
Ещё пример. Изобразим формулу аденина. Нужно совместить шестиугольник с пятиугольником. Вот два варианта:
||_pHN_p_ppN_p/<`|NH2>\\N|`//N`\ <-> /<`|NH2>\\N|`//N`\`||_qN_qq_qHN_q

Повторные связи

Рассмотрим такой вариант построения формулы этилена: H\C|C`/H; H`/#C|\H Здесь две цепочки имеют два общих атома углерода. Во второй цепочке первый атом углерода объявлен через указатель. Это необходимо, т.к. иначе цепочки не соединятся. Но следующий атом объединяется за счёт геометрического совпадения. Одиночная связь, проведенная дважды по одному месту превращается в двойную.
Это правило действует и для циклов. Например, изобразим орто-крезол одной прямой цепочкой.
OH|\|`//`\`||/\/CH3

Фиктивные связи

Существует возможность описывать фиктивные связи. Для этого после описания связи добавляется 0. Это как бы означает, что кратность связи равна нулю. Воображаемый карандаш отрывается от бумаги. Но перемещение сохраняется.
Изобразим формулу пирена при помощи одной цепочки без ветвлений. Этап 1. Только одинарные связи:
|`/`\`|`\`/|\/`|/`|/\|`/`\`|`\`/| В тех местах, где появились двойные связи, карандаш прошел дважды. В одном месте это то, что нужно. Но в другом уберем лишнюю связь, добавив 0. Ну и дополним двойные связи, где это нужно. Получаем финальный вариант:
|`//`\`|0`\\`/||\//`|/`|/\\|`//`\`|`\`//| Также этим способом можно изображать формулы веществ, имеющих ионную связь.
Например, карбонат калия: K^+\0O`^-/`|O|\O^-/0K^+

Универсальная связь

Мы уже познакомились с кратким описанием связи и полигональными связями. Но существуют ситуации, когда их возможностей недостаточно.Для полного контроля над формированием структурной формулы можно воспользоваться универсальным описанием связи. Оно в общем виде записывается так: _(параметры). Параметры записываются через запятую внутри скобок. Каждый параметр начинается с символа, определяющего его назначение. Есть довольно много параметров, но при описании конкретной связи используются только те, которые нужны.
Полный перечень параметров есть в документации. Здесь рассмотрим только наиболее характерные.
Начнем с параметров, позволяющих указывать смещение следующего узла относительно предыдущего.

Декартовы координаты

Самый простой способ указать положение одного узла относительно другого - использование координат x и y.
Если указать только x или только y, то значение другой координаты считается равной 0.H3C_(x2)OH Это метиловый спирт с длиной связи в 2 раза длиннее обычной. Используется параметр x, имеющий значение 2.
Усложним задачу. Используем перемещения в двух измерениях для изображения молекулы β-дезоксирибозы:
_(x-1,y1)_(x-1)<|OH>_(x-1,y-1)<`|HOCH2>_(x1.5,y-0.5)O_(x1.5,y0.5)`|OH Координатная система обычная для машинной графики. Ось X слева направо, ось Y сверху вниз. Точно так же, как и все остальные направления в easyChem.
Однако, здесь не хватает традиционного утолщения связей, которое обычно используется при изображении формул сахаров. Но это легко исправить. Добавим параметры, указывающие на расширение и сужение линий: W+ и W-.
_(x-1,y1,W+)_(x-1)<|OH>_(x-1,y-1,W-)<`|HOCH2>_(x1.5,y-0.5)O_(x1.5,y0.5)`|OH

Угловые координаты

Другим способом указания относительного положения является использования угла поворота и длины линии. Используются параметры:
  • A - абсолютный угол поворота в градусах относительно оси слева направо по часовой стрелке. A90 - вниз, A-90 - вверх, A180 - назад. Если параметр не указан, значение считается равным 0.
  • L - длина линии. L2 - линия в 2 раза длиннее обычной. Если не указывать, будет равно стандартной длине (обычно 1, но может быть переопределено функцей $L)
Пример: H_(A45)C<_(A135)H>_(L1.2,N2)C<_(A-45)H>_(A45)H Здесь мы видим ещё один новый параметр N. Он задаёт кратность связи. Для тройной связи можно указать N3. А для фиктивной связи - N0.

Хиральность

Для отображения хиральности можно использовать универсальные связи с параметрами:
  • w+ для приближения (от wide) или w-, если нужно отобразить утолщения против движения связи
  • d+ для отдаления (deep, dash) или d-, если в обратном направлении.
В качестве примера рассмотрим Бромхлорфторметан:
Cl|C<_(A160,d+)H><_(A100,w+)F>_(A20)Br = Cl|C<_(A160,d+)Br><_(A80,w+)H>_(A20)F != Cl|C<_(A160,d+)Br><_(A80,w+)F>_(A20)H
Но есть способ проще - использование кратких обозначений с суффиксом w или d. Например, изобразим формулу β-D-Арабинопиранозы : \/O`|</dOH>`\<`|dOH>`/<`\wHO>|`/wHO

Делокализованные π-связи (кружок внутри полигона)

Если нужно отобразить делокализованные π-связи в виде кольца, применяется конструкция _o. Она ставится сразу после замыкания циклической цепочки и игнорирует ветки.
Рассмотрим в качестве примера фенол, где группа OH намеренно вынесена в ветку в демонстрационных целях.
\</OH>|`/`\`|/_o Нафталин: /\|`/`\`|_o`\`/|\/_o

Абстрактные элементы

Иногда нужно изобразить не всю формулу, а только часть. Это полезно для полимеров. Или требуется выразить какую-то общую часть для группы веществ с похожими свойствами. Для этих случаев предназначены абстрактные элементы, представляющие собой текст, взятый в фигурные скобки.
Карбоновая кислота: {R}-C<\OH>//O Полиэтилен: {...}-CH2-CH2-CH2-CH2-{...} Если нужно изобразить радикал, то не следует оставлять связь без узла на конце. В этом случае будет сформирован автоматический узел. Вместо этого используйте пустой абстрактный элемент.
Сульфоксил: H-O-S-{}; O||#S||O

Функции, улучшающие внешний вид

Для модификации внешнего вида формул есть довольно большое количество функций. Все они имеют похожий синтаксис: $name(parameters). Если параметров нет, то скобки всё равно используются $name(). Рассмотрим некоторые из них.

Указание угла наклона связей

Особенность кратких описаний связей при помощи символов \ и / состоит в том, что их угол наклона выбирается автоматически: либо 30°, либо 60°, в зависимости от соседних связей. Но бывают случаи, когда требуется иное поведение. Функция $slope(угол) задаёт угол наклона явным образом для всех следующих связей. Можно использовать $slope(), чтобы вернуть исходное поведение.
H$slope(45)\C<`/H>=C$slope(70)<\H>/H

Коэффициент длины связи

Функция $L(число) позволяет менять длину всех следующих связей с кратким описанием и универсальных связей, где используется параметр A и не указан L.
H$L(0.8)\C</H>$L()||C$L(1.4)<`/Cl>\Cl

Цвет

Есть довольно много функций, позволяющих выделять цветом различные участки формулы. Самая простая $color(цвет). Цвет задаётся названиями red, green, blue... или числовым описанием #F00, #0F0, #00F... Точно так же, как это принято в CSS и HTML. Вызов $color() возвращает исходный цвет.
$color(blue)H3N-$color()CH<|CH3>$color(red)-COOH

Водородные связи

Если после краткого обозначения связи поставить символ h, то получится водородная связь. Например, димер муравьиной кислоты:
O`//HC\O-H-hO//CH`\O`-H`-h#1 Возможно, для лучшего отображения стоит увеличить длину водородной связи. Для этого можно воспользоваться универсальным описанием связи с параметром H: _(H). Изобразим водородные связи между молекулами аденина и тимина в составе ДНК:
H\<-H>`/\\N`/`=N`\/_qN_qq_qN<`/{R}>_q_q-; #3_(x2,H)O\\-</>\\`/N<\{R}>`-<`//O>`\N</>`-H_(H)#5 Здесь первая цепочка - аденин. Верхняя водородная связь _(x2,H) имеет двойную длину. Вторая _(H). Длина не указывается, т.к. положение узлов уже определено.

Координационные связи со стрелкой

Для отображения связи со стрелкой на конце может использоваться краткое описание с буквой v.
H3N-vPt`|Cl; NH3`-v#Pt|Cl В этом примере пришлось использовать две цепочки, т.к. для краткого описания изменить направление стрелки нельзя. То есть, стрелка может быть только на конце связи, а не в начале. Универсальное описание не имеет таких ограничений. Параметр С указывает, что это связь координационная _(С). Если стрелку нужно направить от конца к началу линии, используем _(C-). А запись _(C+) сделает стрелки с обоих концов линии.
Cl$L(1.4)|Ni|Cl; H3N\v#Ni_(A30,C-)NH3; H3N/v#Ni_(A-30,C-)NH3

Чёрточки и точки вокруг элементов

Существует возможность изобразить чёрточки и точки вокруг элементов. Для этого используются функции $dashes() и $dots(). Функции применяются первому следующему элементу. Цвет соответстует установленному через itemColor.
Для обозначения чёрточек используется принцип визуального соответствия. Косые черточки указываются символами / и \, вертикальные |. Точка символизирует сам элемент. Линия сверху обозначается знаком минус (-), снизу подчерк (_). Для них не имеет значения, стоят ли они слева или справа от точки. Более того, они заменяют точку. Поэтому ориентированные символы нужно ставить соответственно до или после - _.
Сочетание (/\./\) можно тоже записать без точки (/\/\). Или даже ещё короче - (<>).
$dashes(|)N%$dashes(.|)N <-> $dashes(-)N|||$dashes(_)N *
$dashes(|-_)Br-$dashes(-_|)Br <-> $dashes(|-|)Br|$dashes(|_|)Br *
$dashes(<)O=C=$dashes(>)O <-> $dashes(/.\)O||C||$dashes(\./)O

Использование фиктивных связей для комментариев

Иногда внутри формулы желательно разместить какие-то пояснения. Для этого можно использовать фиктивные связи и узлы, представляющие собой комментарии.
Если в качестве фиктивной связи использовать конструкцию типа /0 или (A45,N0), то линия будет отсутствовать. Но есть способ явно указать внешний вид линии: параметр S. S| означает сплошную линию, S: - прерывистую.
Теперь кратко рассмотрим комментарии. Они заключаются в двойные кавычки. Но в тексте комментария можно использовать обращение к словарю easyChem. Для этого используется ключ, взятый в обратные апострофы. Ключом может быть обозначение химического элемента, а в результате получится его название на текущем языке страницы.
В качестве примера изобразим бромоводород и подпишем водород синим, а бром - сиреневым цветом, используя прерывистую линию для связи комментария с соответствующим атомом:
H-Br; $color(blue)#H_(x-1,y-1,S:)"`H`"; $color(magenta)#Br_(x1,y-1,S:)"`Br`"

Конец статьи. Автор: PeterWin. Дата последнего обновления: 2013-11-30