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

Возможности, добавленные в версию 1.0

Описание возможностей, доступных в новых версиях CharChem

Версия 1.0 - Первая версия CharChem

CharChem - новая система, которая разработана для замены устаревшей easyChem. Естественно, в CharChem поддерживаются все функции прежней системы. Но добавились и новые возможности.

Скобки

Система easyChem позволяла использовать скобки для очень простых случаев. Например, таких:

K3[Fe(CN)6]

Описывать химические связи внутри скобок было невозможно. Но с версии 1.0 такая возможность появилась. Вот несколько примеров:

$ver(1.0)H3C(C=O)CH3
Cl/[\\<|Cl>]10/\Cl
$ver(1.0)--[O-/=\<`//`-`\\>-C<`|CH3><|CH3>-/=\<`//`-`\\>-O-C<`||O>]'n'--
$ver(1.0)$slope(45)HO`|@:Q()/<`|CH2OH>-O\<`/w<|OH>_(A180,w2)<_(y-.8)OH>`\ww>@()_(A60)O_(A-60)(@Q()_(A60)O<_(y1.4,N0){}>)'300-600'_(A-60)@Q()|OH
$ver(1.0)[H|N^+<`/H><_(A75,w+)H><\dH>]3^+_(x3.5,N0)[P<`||O><`/O`^-><_(A75,w+)O^-><_(A20,d+)O^->]^3-

Радикалы

Изначально существовала возможность описывать абстрактные молекулы, например {R}-OH: {R}-OH.
Этот же механизм использовался для описания радикалов. Например, {Me}2C=CH-{Ph} :

{Me}2C=CH-{Ph} <-> H3C\C<`/H3C>=CH-/=\`//`-`\\

Но для таких формул неправильно вычислялись такие свойства, как молекулярная масса или брутто-формула. Теперь эта проблема решена. Существует список радикалов, которые автоматически разпознаются из описаний абстрактных узлов.

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

Рассмотрим несколько описаний, где используется горизонтальная химическая связь, которая определяется знаком минус:

\-/
\-/
\O-/
\O-/
\O-O/
\O-O/
_(A60)O_q6O_q6
_(A60)O_q6O_q6
\O--O/
\O--O/

Третья формула отличается от остальных тем, что горизонтальная связь является мягкой, как и в случае CH3-CH2-OH. Но в данном случае нужна обычная связь. Раньше вместо кратких описаний пришлось бы использовать более сложные конструкции, как в четвёртом столбце. Но теперь двойной минус позволяет указать, что связь не должна быть мягкой.

Другой проблемой кратких связей было использование суффиксов. Рассмотрим ряд конструкций. Сверху приводится описание, которое требовалось в версиях ниже 1.0. В нижнем ряду - новый вариант.

/w_(A30,w-) \d_(A-30,d-) $L(1.5)|vN_(A0,C+)H_(A-90,C-) -_p_(P,w+)_(P,w-)_p
/w\ww \d/dd $L(1.5)|vN--vvvH`|vv -_p_pw_pww_p
/w\ww \d/dd $L(1.5)|vN--vvvH`|vv -_p_pw_pww_p

Другими словами, если \w соответствует конструкции _(A30,w+), то двукратное употребление w позволяет изменить направление: \ww соответствует _(A30,w-).
Для координационной связи возможно тройное употребление суффикса v, что даёт стрелки на обоих концах связи. То есть -vvv соответствует _(A0,C+).

Кроме того в версии 1.0, суффиксы стали доступны для полиномиальных связей _p и _q.

Распределённые связи Delocalized bonds

До версии 1.0 можно было изобразить распределённую связь лишь при помощи конструкции _o. Это всегда окружность. Например:

/\</>|`/`\`|_o

Теперь стала доступна новая конструкция _s(). Она позволяет изобразить распределённую связь не только в виде круга. Кроме того, возможно использовать переывистую линию при помощи параметра S:

_(x2)\<->`/_(x-2)`\/_s() /\</>|`/`\`|_s(S:) -\<->`/`-_s(S:) $slope(45)-\|`/`-`\`|/_s(#1;2;5;6;1)
_(x2)\<->`/_(x-2)`\/_s() /\</>|`/`\`|_s(S:) -\<->`/`-_s(S:) $slope(45)-\|`/`-`\`|/_s(#1;2;5;6;1)

Сложные стили связей

Для отображения ароматических связей можно использовать универсальное описание с параметром S|: (Style), где указан стиль двух линий. Одна сплошная, другая - прерывистая. _(A90,S|:)_(A30,S|:)_(A-30,S|:)_(A-90,S|:)

_(A90,S|:)_(A30,S|:)_(A-30,S|:)_(A-90,S|:)

Параметр S|: визуально напоминает две параллельных линии, проведённых сверху вниз.

Вот ещё несколько примеров:
_(y1.5,S:|:) _(y1.5,S||:) _(y1.5,SI|) _(y1.5,SI|:)
_(y1.5,S:|:) _(y1.5,S||:) _(y1.5,SI|) _(y1.5,SI|:)

Здесь заглавная латинская буква I означает жирную линию.

Изогнутые связи

В версии 1.0 можно использовать связи, изображаемые кривыми линиями. Для этого используются промежуточные точки. Изогнутая связь рисуется при помощи кубической кривой Безье. Поэтому для неё нужны две промежуточные точки. Для их описания используется конструкция _m(). В скобках можно использовать параметры для позиционирования точки: x, y, A, a, P. Например, описание H2C`|H2C`|H2C_m(x2)_m(y2)_(x-2)

H2C`|H2C`|H2C_m(x2)_m(y2)_(x-2) H2C`|H2C`|H2C_m(x2)_m(y2)_(x-2)_(x2,H){b}_(y-2,H){a}_(x-2,H) H2C`|H2C`|H2C_(x2,H,C){o}_(y2,H,C){o}_(x-2,H,C)
На первой картинке результат, полученный из описания.
На второй картинке показаны промежуточные точки a и b соответственно.
На третьей - схематические линии, показывающие порядок следования промежуточных точек.

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

Посмотрим на типичную формулу бензола, полученную из описания /\\|`//`\`|| :

/\\|`//`\`||

Мы видим, что у двойных связей внутренняя линия короче, чем внешняя. Это сделано для улучшения внешнего вида формулы. Причём, система автоматически определила, что в данном случае нужно применить выравнивание вправо (относительно направления связи).

Этим процессом можно управлять при помощи функции $dblAlign или при помощи параметров универсальных описаний связей.

$dblAlign(R)/\\|`//`\`|| $dblAlign(M)/\\|`//`\`|| $dblAlign(L)/\\|`//`\`|| /_(A30,N2r)|_(A150,N2m)`\_(A-90,N2L)
$dblAlign(R)/\\|`//`\`|| $dblAlign(M)/\\|`//`\`|| $dblAlign(L)/\\|`//`\`|| /_(A30,N2r)|_(A150,N2m)`\_(A-90,N2L)
Первая формула совпадант с автоматическим вариантом, т.к. в ней указано выравнивание вправо при помощи $dblAlign(R).
Вторая формула имеет выравнивание по центру. Так выглядели формулы в easyChem.
Для третьей формулы указано выравнивание влево.
А в четвёртой формуле мы видим все три вида выравнивания. Это достигается уже не функциями $dblAlign, а универсальными описаниями с параметрами N2r, N2m и N2L соответственно.

А далее можно видеть использование суффиксов r, m и L в параметре S (style).

_(A30,S:|r)_(A90,S:|r)_(A30,S:|r) _(A30,S:|m)_(A90,S:|m)_(A30,S:|m) _(A30,S:|L)_(A90,S:|L)_(A30,S:|L)
_(A30,S:|r)_(A90,S:|r)_(A30,S:|r) _(A30,S:|m)_(A90,S:|m)_(A30,S:|m) _(A30,S:|L)_(A90,S:|L)_(A30,S:|L)

Изотопы

В easyChem была введена функция $M, позволяющая указать атомную массу для изотопов.
Например, $M(14)C$M(14)C или $M(235)U$M(235)U

Теперь добавилась функция $nM, которая выводит ещё и атомный номер.
$nM(14)C$nM(14)C или $nM(235)U$nM(235)U
Причём, указывать атомный номер не нужно, т.к. системе он и так известен для каждого элемента.

Заряды

Появилась возможность вывести окружность вокруг заряда простым добавлением маленькой буквы o:

H3C\<|wNH3`^+o>/`|O|\O^-o

H3C\<|wNH3`^+o>/`|O|\O^-o

Гидраты, сольваты и аддукты

В ранних версиях знак * должен был отделяться пробелом от описания молекулы. Такое ограничение не позволяло описать гидраты в виде одного реагента, что иногда создавало некоторые проблемы.
Теперь знак * можно использовать без пробелов:

CuSO4*5H2O LiCl*4CH3OH K2O*Al2O3*'x'SiO2*'у'H2O
CuSO4*5H2O LiCl*4CH3OH K2O*Al2O3*'x'SiO2*'у'H2O