diff options
Diffstat (limited to 'macros/latex/contrib/streetex/stree_ru.lat')
-rw-r--r-- | macros/latex/contrib/streetex/stree_ru.lat | 1141 |
1 files changed, 1141 insertions, 0 deletions
diff --git a/macros/latex/contrib/streetex/stree_ru.lat b/macros/latex/contrib/streetex/stree_ru.lat new file mode 100644 index 0000000000..18877a412f --- /dev/null +++ b/macros/latex/contrib/streetex/stree_ru.lat @@ -0,0 +1,1141 @@ +\documentstyle[12pt,stree,sprivate,russian,chemstr,carom]{article} +\begin{document} + +\def\<#1>{$\langle$#1$\rangle$} +%\def\UPSILON{\char'7} +%\def\XyM{X\kern-.30em\smash{\raise.50ex\hbox{\UPSILON}}\kern-.30em{M}} +%\def\XyMTeX{\XyM\kern-.1em\TeX} +\def\ChemTeX{Chem\kern-0.1em\TeX} +\def\verb{\sverb} + +\def\topfraction{.9} +\def\bottomfraction{.9} +\def\textfraction{.1} + +\def\0{\tt\symbol{92}} +\def\1{\tt\symbol{123}} +\def\2{\tt\symbol{125}} +\def\4{\tt\symbol{36}} +\def\5{\tt\symbol{95}} + +\author{Строков Игорь Иванович} +\title{Еще один макропакет для набора структурных формул в системе \LaTeX} +\maketitle + +\section{Введение} + +Если вы хотите готовить научные статьи или книги типографского качества, то +выбор инструментов обычно невелик: это либо Word, либо \TeX\ --- язык и +система набора документов, созданные на рубеже 70--80-х годов Д. Кнутом [1]. +Если говорить кратко, то главное достоинство \TeX а --- скурпулезный учет +всех мелочей, которые влияют на внешний вид документа и, как следствие, --- +безупречное качество набора, практически недостижимое другими средствами +(особенно если в тексте есть символы математики). С другой стороны, в \TeX е +не очень удобно работать с графикой, хотя в него можно +импортировать растровые изображения (обычно формата {\tt PCX}), при чем +теряется независимость от печатающего устройства, или +документы на языке PostScript. Последнее решение позволяет +получать практически любые визуальные эффекты, однако в среде DOS/Windows до +последнего времени было трудно найти программы, которые бы корректно понимали +PostScript. В то же время \TeX\ сам является своеобразным языком +программирования, который позволяет с помощью псевдографических шрифтов +получать простые векторные диаграммы и рисунки. Наиболее известный вариант +\TeX а, \LaTeX\ [2], практически установил стандарт на применение +псевдографики. В большинстве случаев структурные формулы, встречающиеся в +химических статьях, можно полностью набирать средствами \LaTeX а. Однако +делать это непосредственно с помощью примитивных команд рисования линий и +кругов, конечно, слишком неудобно. Специально для набора химических формул +разными авторами созданы более и менее сложные пакеты макрокоманд. Макрос +Рамека [3] достаточно прост и удобен, но формулы в нем получаются не такие, к +каким привыкли химики-органики. Этого недостатка лишены более сложные +макропакеты \ChemTeX\ Хааса--о'Кейна [4] и \XyMTeX\ Фуджиты [5]. Оба +последних пакета устроены примерно одинаково: каждому характерному элементу +рисунка (обычно такой элемент относится к связной системе циклов) в них +отвечает отдельная макрокоманда, параметры которой позволяют менять вид +заместителей и связей этого элемента. + +Возмем для примера более развитый и упорядоченный +макрос Фуджиты. Например, 5,5-диметилциклогексен-2-он-1 +$$\begin{picture}(800,0)\put(-100,-200){\cyclohexanev[b]{1D==O;5Sb==;5Sa==}} +\end{picture}\quad\stree[b]{3[7]020\O4>6810}$$ +в нем получается по команде +\verb"\cyclohexanev[b]{1D==O;5Sb==;5Sa==}" (для сравнения справа нарисована +та же структура, введенная с помощью нового пакета). В этом, как и в других +случаях, мнемоника команды коррелирует с названием соединения, что может +позволить опытному пользователю по виду команды представить себе, какая в ней +зашифрована структура. С другой стороны, описание формул на уровне крупных +структурных фрагментов влечет за собой ряд недостатков. Прежде всего, таких +фрагментов, которые обычно рассматриваются как целое, в органической химии +очень много, и охватить их полностью практически невозможно. Эта задача не +решается и в пакетах \ChemTeX\ и \XyMTeX, при том, что полное описание +каждого представляет собой довольно солидную книгу. Кроме того, в случаях, +когда большая формула состоит из нескольких фрагментов, их объединение на +одном рисунке может превратиться в утомительную задачу по вычислению +координат стыкуемых узлов. + +В связи с этим оправданным кажется описание формул на более простом +уровне --- с помощью отдельных связей, подобно тому, как это сделано у Рамека +[3]. Разнообразие связей по сравнению с характерными фрагментами структур +значительно меньше, поэтому набор формул в терминах связей должен быть более +универсальным и простым в освоении. Из общих соображений можно предположить, +что сравнительно примитивный уровень описания чреват потерей скорости и +удобства набора, однако субъективный опыт автора говорит о том, что этого не +происходит. Чтобы поддержать это утверждение, рассмотрим, как именно вводятся +структурные формулы в предлагаемом вашему вниманию макропакете \treeTeX. + +По традиции программистов на \TeX е, новый пакет получил название, включающее +общий логотип \TeX. Первая часть названия, ``tree'', отражает способ описания +структурных формул в виде дерева связей. Весь \treeTeX\ реализован в виде +одного небольшого файла {\tt stree.sty}. Как обычно, имя файла без +расширения включается в аргумент команды \verb"\documentstyle". Например, +первая строка в этом документе выглядит так: +\begin{verbatim} +\documentstyle[12pt,stree,russian]{article} +\end{verbatim} + +\section{Основные правила} + +Для набора структурных формул в \treeTeX е используется единственная команда +\verb"\stree{}". Описание формулы содержится в фигурных скобках и получается +так: начав с какой-либо вершины (не важно, с какой), следут обойти всю +структуру, двигаясь по связям и описывая как сами проходимые связи, так и +метки вершин, если они встретятся по пути. Например, формула +1-гидрокси-4-метилпиридина$$\stree{{HO}20?242\Me?68N?10}$$ +вводится как \verb"\stree{{HO} 2 0 >2 4 [2{CH$_3$}] >6 8N +>10}". Начиная в данном примере обход с вершины HO, мы должны поставить в +код ее метку: \verb"{HO}". Метка обязательно заключается в фигурные скобки, +если в ней более одного символа. Следующий символ {\tt 2} означает: +<<провести связь в направлении на 2 часа>> (по циферблату часов). При обходе +формулы всегда есть текущая точка (вершина). Указывая направление связи, мы +перемещаемся из текущей точки в данном направлении (на расстояние, равное +длине связи) и попадаем в другую вершину. Таким образом, после символа {\tt +2} текущей становится вершина кольца (номер 1 по нумерации ИЮПАК). Символ +{\tt 0} описывает следующую связь в направлении на 0 часов (вертикально +вверх). Далее (если продолжать обход кольца по часовой стрелке) следует +двойная связь на два часа. Если связь отличается от простой, то {\sl перед\/} +ее направлением ставится один или несколько символов (так называемых {\em +префиксов\/}), отражающих особенности связи. Двойную связь можно изображать +по разному. В нашем случае желательно, чтобы второй штрих связи был внутри +цикла, {\sl справа\/} от основного. Для достижения этого эффекта перед +двойкой ставится префикс {\tt >} (правая угловая скобка). + +Следующая простая связь на четыре часа приводит к замещенной вершине кольца. +Давайте вначале опишем заместитель, а потом продолжим обход кольца. +Конструкция \verb"[2{CH$_3$}]" содержит описание заместителя и +интерпретируется так: открывающая скобка {\tt [} запоминает текущую +вершину; связь на два часа (символ {\tt 2}) приводит к вершине CH$_3$ +(\verb"{CH$_3$}" --- это описание метки), после чего скобка {\tt ]} +закрывается и возвращает нас к вершине кольца, от которой отходит +заместитель. Последовательность символов \verb"{CH$_3$}" довольно неудобно +набирать на клавиатуре. В то же время метильная группа (CH$_3$) встречается +часто, поэтому для нее был предусмотрен более простой метод ввода с +помощью команды \verb"\Me" так, что конструкция \verb"2\Me" эквивалентна +\verb"[2{CH$_3$}]" (вместо цифры {\tt 2} здесь может стоять любое число, +отвечающее направлению связи). + +После того, как заместитель задан, можно продолжить обход кольца. Остались +три связи: на 6, 8 и 10 часов. Связи на 6 и 10 часов двойные и нарисованы +внутри цикла, что указывается с помощью префикса {\tt +>}. Связь на 8 часов приводит к вершине с меткой N, поэтому символ {\tt N} +стоит сразу за символом {\tt 8}. В данном случае фигурные +скобки вокруг {\tt N} ставить не обязательно, поскольку эта метка состоит из +одного символа. В этом примере для наглядности +группы символов, относящиеся к разным связям, мы разделили пробелами. +Вообще говоря, ставить их не обязательно (команда +\verb"\stree{{HO}20>242\Me>68N>10}" тоже является правильной), но вы +можете использовать пробелы, чтобы визуально структурировать содержимое +команды \verb"\stree". При расстановке пробелов действует только один +запрет: их {\sl нельзя\/} ставить между направлением и меткой или +направлением и командой. Например, в приведенном выше примере написать +\verb"8 N" (а также \verb"2 {CH$_3$}" или \verb"2 \Me") было бы ошибкой. Есть +также один случай, когда пробел нужен {\sl обязательно:\/} между цифрой {\tt +1}, если она обозначает направление на один час, и следующей за ней другой +цифрой.\footnote{Строго говоря, если следующая цифра --- не {\tt 0} или {\tt +1}, то пробел и в этом случае необязателен.} + +\section{Формальное описание} + +Теперь попробуем суммировать и изложить более строго основные правила, +рассмотренные на данном примере. Аргумент команды \verb"\stree" состоит из +описаний отдельных связей. Чтобы описать связь, достаточно задать ее +направление --- чаще всего это число часов от 0 до 11 на 12-часовом +циферблате. {\sl Перед\/} направлением можно поместить один или несколько +префиксов, которые модифицируют длину, кратность, внешний вид или само +направление связи. {\sl После\/} направления может ставится метка вершины, к +которой приводит связь, или команда (имеется в виду команда в терминах \TeX а +--- то, что начинается с сигнального символа~\verb"\"). +Команда --- это средство более краткого описания некоторых часто +встречающихся структурных фрагментов. Метка или команда здесь +рассматриваются как атрибут связи, и, поскольку они ставятся после +направления, их называют также {\em суффиксами.\/} Суффикс, в отличие от +префиксов, может быть только один, и, кроме того, перед суффиксом {\sl +никогда\/} не ставится пробел. Описание связи в форме \<возможные +префиксы>\<направление>\<возможный суффикс>\ отвечает тому, как если бы вы +объясняли обход структуры словами: <<{\sl такая-то\/} связь на {\sl +столько-то\/} часов приводит к {\sl такой-то\/} метке>> --- только вместо +слов {\sl такой-то\/} и {\sl столько-то\/} ставятся условные символы. + +\def\is{$\longrightarrow$ } +\def\ili{\vrule{} } + +Может возникнуть вопрос --- как отличить, например, суффикс текущей связи от +направления или префикса следующей? Для визуального различения, как уже +отмечалось, после описания каждой +связи можно вставлять пробел (если вас не очень заботит избыточный объем +текста). Машина, однако, не обращает внимания на пробелы, а +действует в соответствии с правилами, которые далее приводятся +в записи Бэкуса--Нора (стрелка \is\ обозначает <<определяется как>>, а +вертикальная черта \ili\ значит <<или>>). Начнем с определения аргумента +команды \verb"\stree" (который здесь обозначен как \<структура>): + +\begin{description}%\flushleft +\item[] +\<структура> \is \<пусто> \ili \<связь>\<структура> \ili\protect\\ + \<структура>{\tt[}\<структура>{\tt]}\<структура> +\end{description} +% +Это просто формальный способ сказать, что аргумент состоит из описаний +отдельных связей и может содержать парные квадратные скобки, +возможно вложенные. Далее +определяется, какой вид имеет описание связи. + +\begin{description}\frenchspacing%\flushleft + +\item[] +\<связь> \is \<возможные префиксы>\<направление>\<возможный суффикс> +\<возможные пробелы> + +\item[] +\<возможные префиксы> \is +\<префикс> \<возможные префиксы> \ili \<пусто> + +\item[] +\<префикс> \is {\tt / \ili , \ili = \ili > +\ili < \ili ? \ili \_ \ili ' \ili ` \ili " \ili . \ili : \ili * \ili +\verb"^"} + +\item[] +\<возможный суффикс> \is \<команда> \ili \<метка> \ili \<пусто> + +\item[] +\<метка> \is {\1}\<любая последовательность символов>{\2} \ili +\<любой символ, если это не префикс> + +\item[] +\<направление> \is +\<направление в часах> \ili \<направление в смещениях> + +\item[] +\<направление в часах> \is {\tt 0 \ili +1\<{\rm возможный пробел после единицы}> \ili 2 \ili +3 \ili 4 \ili 5 \ili 6 \ili 7 +\ili 8 \ili 9 \ili 10 \ili 11 \ili 12} + +\item[] +\<{\rm возможный пробел после единицы}> \is \<пробел>, если +следующий символ в описании --- {\tt 0} или {\tt 1}, иначе --- \<пусто> + +\item[] +\<направление в смещениях> \is \<плюс или +минус> \<натуральное число> \<плюс или минус> \<натуральное число> + +\item[] +\<плюс или минус> \is {\tt +} \ili {\tt -} + +\end{description} + +В этих правилах любой синтаксический элемент (конструкция в угловых скобках +\< >) раскрывается в конечном итоге либо в конкретные символы, либо в +элементы, которые не требуют, как кажется, дальнейшего объяснения (например +\<любая последовательность символов>, \<пусто>, \<натуральное число>). +Приведенные правила, однако, ничего не говорят о том, что значит тот или иной +префикс или какой смысл имеет, например, конструкция \<направление в +смещениях>. Семантика отдельных элементов команды \verb"\stree" +систематически рассматривается в трех следующих разделах. + +\section{Префиксы} + +\begin{table}[tbh]\centering +{\bf Таблица 1.} Префиксы.\par +\medskip +\begin{tabular}{c|c|c|c} +префикс&название особенности&пример&категория\\ \hline\hline +\tt /&косая&\stree{/2}&\\ \cline{1-3} +\tt //&очень косая&\stree{//2}&префиксы\\ \cline{1-3} +\tt ,&под 45$^\circ$&\stree{,2}&направлений\\ \cline{1-3} +{\tt+} и {\tt-}&задают направление в смещениях&&\\ +\hline\hline +\tt =&центрированная двойная&\stree{=3}\\ \cline{1-3} +\tt >&двойная справа&\stree{>3}&\\ \cline{1-3} +\tt <&двойная слева&\stree{<3}&кратности\\ \cline{1-3} +\tt ==&тройная &\stree{==3}&связей\\ \cline{1-3} +\tt ">&делокализованная справа&\stree{">3}&\\ \cline{1-3} +\tt "<&делокализованная слева&\stree{"<3}&\\ +\hline\hline +\tt \_&длинная ($5/3$ от обычной)&\stree{_3}&длины\\ \cline{1-3} +\tt '&короткая ($1/3$ от обычной)&\stree{'3}&связей\\ +\hline\hline +\verb"~"&невидимая &\\ \cline{1-3} +\verb"~~"&и связь, и метка невидимы&\\ \cline{1-3} +\tt :&пунктирная&\stree{:3}&визуальные\\ \cline{1-3} +\tt *&жирная&\stree{*3}&эффекты\\ \cline{1-3} +\verb"^"&стрелка&\stree{^3}\\ \cline{1-3} +\verb"^*"&клиновидная&\stree{^*3}\\ +\hline\hline +\tt .&очень короткая невидимая&\stree{C.2*}&для меток +\end{tabular} +\end{table} + +Выше мы уже познакомились с одним префиксом {\tt >}, который испоьзовался для +задания двойных связей. +Полный список префиксов приводится в табл. 1. +Префиксы делятся на четыре категории по влиянию на направление, +кратность, длину или внешний вид связи. Префиксы разных категорий можно +комбинировать друг с другом: например, в результате +\verb"\stree{_=:/4}" получится длинная двойная пунктирная косая связь на 4 +часа: \stree{_=:/4}\ Рассмотрим далее более полезные случаи использования +префиксов и их сочетаний. + +Префикс {\tt .} (точка) --- особенный. Он +влияет и на длину, и на внешний вид связи и используется для того, чтобы +ставить номера или другие метки при вершинах. Например, чтобы +ввести этиленгликоль с нумерацией вершин (\stree[b]{{HO}.01 2.02 4.03 +2{OH}.04}), нужно сказать: \verb"\stree{{HO} .01 2 .02 4 .03 2{OH} .04}" +(все пробелы здесь необязательны). Конструкция {\tt .01} (и аналогичные ей +{\tt .02}, {\tt .03}, {\tt .04}) в полном соответствии с формой \<возможные +префиксы>\<направление>\<возможный суффикс> буквально означает следующее: +провести {\sl короткую невидимую\/} связь {\sl на ноль часов\/} и поставить +метку <<1>>. Однако здесь есть две особенности. Если префикс связи --- +точка, то, во-первых, после такой связи текущая вершина не меняется (как если +бы описание связи было взято в квадратные скобки), и, во-вторых, после +направления {\sl обязательно\/} должна следовать метка. Более того, {\sl +любой\/} символ (или группа символов, заключенная в фигурные скобки) после +направления с префиксом {\tt .} воспринимается как метка. Поэтому в этом +случае мы можем просто поставить после направления на 0 часов +цифру 1, не опасаясь, что она может быть спутана с направлением на 1 час. +Обратите внимание, что номера вершин набраны в меньшем размере, чем +метки вершин и весь остальной текст. Размер и шрифт можно менять с помощью +соответствующих команд, например \verb"\stree{{HO} .0{\tiny1} 2 .02 4 +.0{\large3} 2{OH} .0{\LARGE4}}" дает такой результат: \stree{{HO} .0{\tiny1} +2 .02 4 .0{\large3} 2{OH} .0{\LARGE4}}. Чаще, однако, бывает нужно, чтобы все +номера вершин (или другие метки при вершинах) были в одном стиле. Этот +стиль задается командой \verb"\znakf". Исходно эта команда определена так: +\verb"\def\znakf#1{\small #1}" --- то есть печатать метки размером +\verb"\small". Определение \verb"\znakf" можно изменить (прямо в +своем тексте), чтобы получить жедаемый вид меток по умолчанию: например, после +\verb"\def\znakf#1{#1}" метки станут получаться обычного размера, а после +\verb"\def\znakf#1{$#1$}" --- набираться в математической моде. + +\rpic{\stree{:1:3:5^*7**9*^11}} +Прокомментируем также назначение других префиксов (исключая префиксы +направлений, которые рассматриваются в следующем разделе). Пунктирные, +очень жирные и клиновидные связи, очевидно, нужны для набора +стереоформул. Например, приведенная в этом абзаце формула была введена как +\verb"\stree{:1 :3 :5 *^7 **9 *^11}" (обход велся по часовой стрелке начиная +с самой левой вершины). +Этот пример не имеет практической ценности и только иллюстрирует +особенности использования \verb"^" и {\tt *}. Так, в первом случае +сочетание \verb"^*" обозначает связь {\sl расширяющуюся\/} (\stree{*^3}), +поскольку предыдущая связь была узкой, а во втором --- {\sl сужающуюся\/} +(\stree{**17*^3}), так как перед ней шла жирная связь. Хорошо, когда машина +пытается проявить сообразительность, но иногда необходимо указать явно, в +какую сторону должна расширяться клиновидная связь. +Простой способ добиться желаемого --- задать псевдо-связь нулевой длины и +подходящей толщины, тогда следующая клиновидная связь получится нужного вида. +Например сужающаяся одиночная связь (\stree{**17*^3}) была сейчас введена как +\verb"\stree{**17 *^3}". Для подобных случаев нужно запомнить, что связи +нулевой длины отвечает псевдо-направление на 17 часов. Отметим заодно, что +связь перед плоскостью вводится как {\sl очень\/} жирная (два префикса +{\tt *}). Один префикс {\tt *} отвечает просто жирным связям, которые +примерно в два раза \'уже очень жирных и вдвое толще обычных (опустим вопрос, +для чего они могут пригодиться). + +Префикс {\tt '} (апостроф) позволяет вводить короткие связи, которые обычно +обозначают свободные валентности во фрагментах. Например, формула +\stree{'8'0 4'6 2N '0'4}\ была набрана как +\verb"\stree{'8'0 4'6 2N '0'4}". После короткой связи, как и после +короткой невидимой, текущая вершина не меняется. + +Просто невидимости можно добиться с помощью префикса \verb"~" (тильда). +Невидимые связи удобно использовать для того, чтобы получить формулу, +отдельные части которой не связаны между собой. Например, схему +реакции $$\stree{{H$_2$C} =3{CH$_2$} ~6{CH$_2$} =9{H$_2$C}} +\quad\longrightarrow\quad \stree{3690}$$ можно задать как +\begin{verbatim} +\stree{{H$_2$C} =3{CH$_2$} ~6{CH$_2$} =9{H$_2$C}} +\quad\longrightarrow\quad \stree{3690} +\end{verbatim} +Невидимость также +полезна, если требуется выровнять несколько формул разного размера. Пусть +нужно напечатать рядом три формулы: $$ \stree{O =2 [~0] 4 [~6] 2 +4{Cl}}\quad\stree{4 6\O 2 ~~0\O 4{Cl}}\quad\stree{4 ~~6\O 2 0\O 4{Cl}}$$ +Если просто перечислить их: \verb"\stree{O =2 4 2 +4{Cl}} \quad \stree{4 6\O 2 4{Cl}} \quad \stree{4 2 0\O 4{Cl}}", то +главная цепь в этих формулах окажется на разных уровнях: $$ +\stree{O=2424{Cl}}\quad\stree{46\O24{Cl}}\quad\stree{420\O4{Cl}} \quad,$$ что +не очень красиво. Выход состоит в том, чтобы везде поставить +невидимые заместители, расположенные в противоположном направлении от +видимых: \verb"\stree{O =2 [~0] 4 [~6] 2 4{Cl}} \quad \stree{4 6\O 2 ~~0\O +4{Cl}} \quad \stree{4 ~~6\O 2 0\O 4{Cl}}". И те, и другие имеют одинаковый +размер, поэтому формулы окажутся выровненными относительно главной цепи. +Здесь следует кое-что объяснить. Во-первых, появилась новая команда +\verb"\O", которая рисует карбонильную группу (первую структуру тоже можно +было задать с ее помощью: \verb"\stree{8\O 4 2 4{Cl}}"). Во вторых, в +конструкциях \verb"~~0\O" и \verb"~~6\O" стоят сразу две тильды: это делает +невидимой не только связь, но и метку на ее конце (нетрудно догадаться, что с +одной тильдой получился бы повисший в воздухе символ <<O>>)\@. Наконец, хотя +в первой формуле нет заместителей, смотрящих вверх или вниз, она тоже не +центрирована относительно главной цепи --- мешают метки вершин, поэтому и +здесь пришлось поставить две невидимые связи для того, чтобы скрыть объем +меток. + +Таким образом, совместное использование префиксов позволяет получить много +дополнительных полезных эффектов, обходясь сравнительно +небольшим набором знаков. Ни один из них не является +буквой или цифрой, что позволяет легко отличать префиксы +от меток и направлений. Только знаки {\tt +} и {\tt -} выпадают из этой +картины: они используются, чтобы задавать \<направление в смещениях>, +смысл и назначение которого обсуждается в следующем разделе. + +\clearpage + +\subsection{Направления} + +\begin{figure}\centering +\def\znakf#1{\tt #1} +\begin{tabular}{cccc} +\stree{[0.00][1.1 1][2.22][3.33][4.44][5.55][6.66][7.77][8.88][9.99]% +[10.10{10}][11.11{1\rlap1}]}& +\stree{[,2.,2{,2}][,5.,5{,5}][,8.,8{,8}][,11.,11{,11}]}& +\stree{[:1][:2][:4][:5][:7][:8][:10][:11]% +[/1./1{/1}][/2./2{/2}][/4./4{/4}][/5./5{/5}][/7./7{/7}][/8./8{/8}]% +[/10./10{/10}][/11./11{/11}]}& +\stree{[:1][:2][:4][:5][:7][:8][:10][:11]% +[//1.//1{//1}][//2.//2{//2}][//4.//4{//4}][//5.//5{//5}][//7.//7{//7}]% +[//8.//8{//8}][//10.//10{//10}][//11.//11{//11}]}\\ +прямые&получасовые&косые&очень косые +\end{tabular}\par\medskip +{\bf Рисунок 1.} Направления связей (для сравнения рядом с косыми и +очень косыми пунктиром показаны соответствующие прямые направления). +\end{figure} + +\rpic{\stree{0,23,56,89,11}} +Давайте систематически рассмотрим в этом разделе все разные способы задания +направлений. Кроме двенадцати {\em прямых\/} направлений, отвечающих целому +числу часов на циферблате, есть еще множество других, которые задаются как +число часов с префиксами {\tt /} или {\tt ,} (см.\ рис.\ 1). +Четыре направления под углом 45$^\circ$ к горизонту (на пол-второго, +пол-пятого, пол-восьмого и пол-одинадцатого) задаются с помощью префикса {\tt +,} (запятая) перед числом {\tt 2}, {\tt 5}, {\tt 8} или {\tt 11} (считайте, +что запятая здесь отвечает приставке {\sl пол-\/}). Такие направления +(называемые {\em получасовыми\/}) можно использовать при задании +восьмичленных циклов. Например, цикл в этом абзаце был введен как +\verb"\stree{0 ,2 3 ,5 6 ,8 9 ,11}" в результате обхода по часовой стрелке, +начиная с самой левой нижней вершины. + +Другие +восемь направлений можно получить с помощью префикса {\tt /} (косая черта) +перед одним из чисел {\tt 1}, {\tt 2}, {\tt 4}, {\tt 5}, {\tt 7}, {\tt 8}, +{\tt 10} или {\tt 11} (см.\ рис.\ 1). Такие направления (назовем их {\em +косыми\/}) используются, например, для ввода пятичленных циклов. Пятиугольник +в химических формулах обычно рисуют так, что одна из его сторон получается +строго вертикальной или горизонтальной. Если две связи, смежные такой +стороне, сделать косыми, то пятиугольник получится довольно близким к +правильному: $$ +\begin{tabular}{cl|cl} +\multicolumn{2}{c}{<<вертикальные>> формы}& +\multicolumn{2}{c}{<<горизонтальные>> формы}\\&&&\\ +\stree{/1 3/5810}&\verb"\stree{/1 3/5810}"& +\stree{0/257/10}&\verb"\stree{0/257/10}"\\&&&\\ +\stree{24/79/11}&\verb"\stree{24/79/11}"& +\stree{1/46/811}&\verb"\stree{1/46/811}" +\end{tabular}$$ +% +Пятичленное кольцо в формулах иногда изображают и так: +{\bondlen=3.5mm\stree{0_36810}} (похоже на правильный +шестиугольник с одним обрезанным углом). +Здесь нет косых направлений, но одна связь (на месте обрезанного угла) +примерно на $2/3$ длиннее других. Длинная связь получается с помощью +префикса \verb"_" (подчерк), а вся формула вводится следующим образом: +\verb"{\bondlen=3.5mm \stree{0 _3 6 8 10}}" (здесь присваивание +\verb"\bondlen=3.5mm" позволяет получить формулу, размер которой примерно в +два раза меньше обычного, специально для вставки в текст, а фигурные скобки +локализуют эффект уменьшения). + +Рассмотрим теперь циклы из семи вершин. Для того, чтобы их рисунки получились +сравнительно приличными, ранее рассмотренных направлений недостаточно: +понадобятся восемь других, которые еще более, чем косые, отклоняются от +соответствующих прямых направлений в сторону осей координат. Такие +направления называются {\em очень косыми\/} и вводятся с помощью двух +префиксов {\tt /} (см.\ рис.\ 1). С использованием очень косых +связей получаются такие семичленные циклы: +\begin{center}\tabcolsep=0.2em +\begin{tabular}{clcl} +\stree{//1 24//57911}&\verb"\stree{//1 24//57911}"\ & +\stree{1//2468//1011}&\verb"\stree{1//2468//1011}"\\\\ +\stree{1 35//7810//11}&\verb"\stree{1 35//7810//11}"\ & +\stree{02//457//810}&\verb"\stree{02//457//810}" +\end{tabular} +\end{center} + +Таким образом, с помощью чисел 0--11 и префиксов {\tt ,} и {\tt /} можно +задавать $12 + 4 + 8 + 8 = 32$ разных направления. В большинстве случаев +(если учесть еще длинные связи) для описания формул этого достаточно, однако +иногда может понадобиться другой, более общий способ. Согласно +ему, направление задается не одним числом (как угол в часах), а двумя: +смещением связи по вертикали и по горизонтали. Смещение измеряется в +так называемых {\em квадратах,\/} где квадрат --- это условная единица, +равная $1/6$ длины обычной связи.\footnote{Строго говоря, если она +вертикальна или горизонтальна. Все другие связи чуть длиннее или чуть +короче.} Каждое смещение задается как целое число с {\sl обязательным\/} +знаком {\tt +} или {\tt -} (знак говорит о том, что следующее за ним число +--- это смещение, а не направление в часах). Все направления, выражаемые в +часах, можно задать с помощью смещений (см.\ табл. 2). Обратное же не верно: +например, при наборе следующей формулы $$ \stree{202/4-5-6-6-1-2+2 +02[+1+5[=01042]+1-7]/428+2-2} $$ без смещений обойтись нельзя: формула +вводится как +\begin{verbatim} +\stree{202/4-5-6-6-1-2+2 02[+1+5[=01042]+1-7]/428+2-2} +\end{verbatim} + +\begin{table} +{\bf Таблица 2.} Соответствие смещений направлениям в часах.\par\medskip +\leavevmode +\vtop{\nointerlineskip\halign{\tt\hfil# \strut&#\vrule&\ \tt#\cr +\multispan3 \hfil прямые\hfil\cr +0&&-0+6\cr +1&&+3+5\cr +2&&+5+3\cr +3&&+6-0\cr +4&&+5-3\cr +5&&+3-5\cr +6&&-0-6\cr +7&&-3-5\cr +8&&-5-3\cr +9&&-6-0\cr +10&&-5+3\cr +11&&-3+5\cr +}}\quad +\vtop{\nointerlineskip\halign{\tt\hfil# \strut&#\vrule&\ \tt#\cr +\multispan3 полуторные\hidewidth\cr +,2&&+4+4\cr +,5&&+4-4\cr +,8&&-4-4\cr +,11&&-4+4\cr +}}\quad +\vtop{\nointerlineskip\halign{\tt\hfil# \strut&#\vrule&\ \tt#\cr +\multispan3 \hfil косые\hfil\cr +/1&&+2+6\cr +/2&&+6+2\cr +/4&&+6-2\cr +/5&&+2-6\cr +/7&&-2-6\cr +/8&&-6-2\cr +/10&&-6+2\cr +/11&&-2+5\cr +}}\quad +\vtop{\nointerlineskip\halign{\tt\hfil//# \strut&#\vrule&\ \tt#\cr +\multispan3 очень косые\hidewidth\cr +1&&+1+6\cr +2&&+6+1\cr +4&&+6-1\cr +5&&+1-6\cr +7&&-1-6\cr +8&&-6-1\cr +10&&-6+1\cr +11&&-1+6\cr +}} +\end{table} + +Рассмотрим подробнее процесс набора для этого случая. Прежде всего, всегда +полезно иметь перед глазами рисунок набираемой формулы. Если она к тому же +содержит связи необычной длины и/или направления, то лучше, если рисунок +будет на бумаге в клетку, в масштабе 6 клеток на связь обычной длины. При +проведении связей желательно, чтобы соотношение короткой и длинной проекций +связи на оси координат составляло или $3/5$, что отвечает {\sl прямым\/} +связям, или $2/6$ (косым), или $1/6$ (очень косым). Во-первых, такие связи +можно задавать более кратким образом (как число часов), а во-вторых (что +важнее) --- рисунок формулы, скорее всего, при этом получится строже (эти +рассуждения больше относятся к случаю, когда общепринятого +изображения формулы не существует, и можно рассмотреть разные варианты). +Если же имеется красивый рисунок на клетчатой бумаге, то описать его в +команде \verb"\stree" (при известном навыке) не составит труда. Давайте +начнем с нижней метильной группы и примыкающего к ней пятичленного цикла +(последний, как обычно, обходится по часовой стрелке). Первые три связи на +этом пути (на 2, 0 и опять 2 часа) являются прямыми, следующая, на 4 часа --- +косая. Двум следующим связям, заканчивающим цикл, отвечает +последовательность {\tt -5-6-6-1} (если есть сомнения в том, как описать +связь --- в часах или в смещениях, то можно справиться с табл.\ 2 или, +что проще, запомнить соотношение проекций для направлений в часах). +После пятичленного цикла опишем снаружи от него +неправильный шестичленный цикл. Здесь последовательность {\tt -2+2 02} +доводит до мостика, который соединяет два цикла, а описание этого мостика +содержится в квадратных скобках. Оставшиеся символы {\tt /428+2-2} +описывают конец пути до пятичленного цикла. Два символа {\tt 28} здесь +служат для ввода метильной группы, которую можно было задать и более +привычным способом, как {\tt [2]}. + +В данном примере, опять-таки для +иллюстрации, были опущены все необязательные пробелы. {\sl Необходимый\/} +пробел понадобился только в одном месте: {\tt -2+2 02[}, так как +без него получилось бы {\tt -2+202[} --- две клетки вниз и 202 +вправо --- очень длинная связь! Почти все направления в часах (кроме 10 и 11) +--- однозначные числа, поэтому пробел нужен только там, где можно спутать +пару чисел 1 и 0 или 1 и 1 с 10 и 11 соответственно. В отличие от +часов, смещения не ограничены по величине, поэтому каждое число, которое +начинается с {\tt -} или {\tt +}, должно заканчиваться справа какой-нибудь +не-цифрой, например, пробелом. Но есть еще одно, более важное, отличие +направления в смещениях --- его нельзя использовать перед командами, которые +рисуют более одной связи. Последнее ограничение может показаться +таинственным, пока вы не узнаете о внутреннем устройстве команд. + +\section{Метки вершин}\label{Labels} + +Однако перед тем, как перейти к командам, следует остановиться на суффиксах +более простого вида --- на метках вершин, и отметить все особенности их +использования. Повторим вначале наиболее важные правила. +Если вершина, к которой приводит связь, имеет метку, то эта метка +записывается {\sl сразу\/} после направления связи. Пробел между направлением +и меткой (или командой) недопустим (заметим, что это правило не может войти в +противоречие с правилами об обязательных пробелах между числом и следующей +цифрой: ведь ни метка, ни команда никогда не начинаются с цифры). Если метка +состоит более чем из одного символа, то она заключается в фигурные скобки. +Скобки также обязательны, если метка является цифрой или одним из символов, +используемых в качестве префикса.\footnote{Строго говоря, сюда следует отнести +еще один случай: если метка закодирована с помощью команды. Например, вам +может надоесть часто набирать какую-нибудь длинную метку, и вы напишете +простую макрокоманду, скажем \0def\0бз\1C\4\56\4H\4\55\4\2\rm, чтобы вместо +\tt C\4\56\4H\4\55\4\rm\ можно было везде писать \0бз\rm. При использовании +внутри \0stree\rm\ команду \0бз\rm\ придется брать в +фигурные скобки, чтобы она обрабатывалась как обычная метка, а не как +команда.} Очень часто метки вершин +состоят из одной буквы, например, C, N, O, H --- и в этом случае скобки не +нужны, хотя, если их поставить, ошибки не будет. + +Когда ставится метка, то связи, которые ведут к ней и от нее, становятся +короче, чтобы не произошло наложения связи на метку. Основная работа по +рисованию формул как раз и заключается в том, чтобы правильно вычислять +размеры меток и в соответствии с ними адаптировать координаты отрезков, +изображающих связи. К сожалению, в \TeX е нет чего-нибудь, похожего на +массивы, и запомнить можно размеры только одной метки, относящейся к текущей +вершине. Поэтому, когда при обходе формулы вершина попадается еще раз, то ее +метку следует задавать снова. Если, например, обход формулы +$$\stree{{HO}3N3\6}$$ ведется от вершины OH к N и далее по часовой стрелке с +возвратом к N, то метка азота должна появиться в описании дважды: +\verb"\stree{{HO}3N 1 3 5 7 9 11N}". Если не поставить последний {\tt N}, то +связь на 11 часов наложится на первую метку азота, ибо тот факт, что в этом +месте стоит метка, давно забыт. Впрочем, с помощью квадратных скобок почти +любую формулу можно обойти так, чтобы метки вершин встретились только +однократно. В нашем случае, например, подействует такая конструкция: +\verb"\stree{{HO}3N [5] 1 3 5 7 9}". То, что заключено в квадратных скобках, +как бы проходит незамеченным: после закрывающей скобки вспоминается вершина +с меткой N и размеры этой метки, так что следующая связь на 1 час рисуется +правильно. + +Внимательный читатель может заметить, что многие формулы в +наших примерах (например, предыдущая) начинаются прямо с описания метки, а не +с направления связи, что противоречит формальному синтаксису команды +\verb"\stree". Здесь срабатывает маленький трюк: перед аргументом +этой команды до начала его обработки ставится число {\tt 17} --- то есть +направление фиктивной связи нулевой длины. Если первым в \verb"\stree" +стоит направление или префикс, то {\tt 17} не произведет никакого +действия, а если метка, то {\tt 17}\<метка> нарисует эту метку в текущей +точке. + +Отметим еще один случай нарушения формального синтаксиса на примере +выравнивания длинных меток. Метки, в которых более одного символа, можно по +разному располагать относительно геометрического центра вершины. По умолчанию +действует такое правило: если связь имеет наклон {\sl влево\/} (смещение +связи по горизонтали меньше нуля), то с центром вершины совмещается центр +самого правого символа метки, иначе (если связь вертикальна или имеет +наклон вправо) --- самого левого. Это дает правильный результат в большинстве +случаев, но все же не всегда. + +{\samepage +\rpic[$\!$пиррол]{\stree{~'8/>13/>58`{NH}10}} +Например, в гетероцикле пиррола, если обходить +его от самой левой вершины по часовой стрелке, метка NH по умолчанию окажется +выровненной по H, а не по N, как должно быть. Изменить вид выравнивания +метки на противоположный можно префиксом {\tt `} (обратный апостроф): +\verb"\stree{/>1 3/>5 8`{NH} 10}". Здесь есть нарушение правил: префикс {\tt +`} стоит не перед направлением, а {\sl после\/} него (перед меткой). В этом +случае нарушение оправдано, поскольку префикс {\tt `}, в отличие от +остальных, влияет не на связь, а на метку, и значит его логичнее ставить +перед меткой. Конструкция \verb"`8{NH}", конечно, тоже правильна, но менее +очевидна, чем \verb"8`{NH}". Кроме того, особый статус префикса {\tt `} +позволяет применять его, если описание структуры начинается с метки (в этом +случае по умолчанию метка выравнивается по правому символу). +Заметим, что право стоять +после направления связи распространяется только на префикс {\tt `} --- любой +же другой в этом положении будет считаться началом описания следующей связи. + +\rpic{\stree{/>13/>58``{NH}10}} +Но вернемся к формуле пиррола. Возможно, вам покажется, что центрированная +метка NH (как в этом абзаце) выглядит лучше. Такой эффект +достигается за счет {\sl двух\/} префиксов {\tt `}: \ldots\ +\verb"8``{NH}"\ \ldots\ (в этом случае метка рассматривается как единое +целое, и ее центр совмещается с центром вершины). На самом деле можно +получить и более тонкие эффекты, если воспользоваться \TeX овскими боксами, +кернами и клеем (дальнейшие объяснения в этом разделе расчитаны на то, что вы +знакомы с этими понятиями). + +\rpic{\stree{/>1 3/>5 8``{\vtop{\baselineskip=0pt \hbox{N}\hbox{H}}}10}} +На самом деле обе ранее приведенные формулы +пиррола не очень хороши. Метка NH слишком широкая, и, вероятно, ее лучше +расписать по вертикали, как здесь. Чтобы поставить N на H потребовалась +следующая довольно длинная конструкция: +\0stree\1/>1 3/>5 +8``\1\0vtop\1\0baselineskip=0pt \0hbox\1N\2\0hbox\1H\2\2\2 +10\2\rm.\par} + +Сделаем необходимые объяснения. Два апострофа перед меткой +нужны для того, чтобы предотвратить центрирование по первому или последнему +символу --- в данном случае ничего хорошего из этого бы не +вышло.\footnote{Процесс выделения первого или последнего символа ({\sl +токена\/}, если быть точным) несколько грубоват, поэтому если вы сами строите +метку из боксов, то его лучше отключать. Вообще говоря, предусмотрено и +<<автоматическое>> отключение, если в метке находится примитив \TeX а +\0hbox\rm, или любая макрокоманда, при раскрытии которой получается +\0hbox\rm\ (например, \0rlap\rm\ или \0llap\rm). Предполагается, что если вы +ставите внутри метки \0hbox\rm\ или то, что в него раскрывается, то, значит, +вы сами хотите управлять размещением метки. Этот метод угадывания мыслей +небезупречен: так, \0hbox\rm\ обнаруживается только в том случае, если он +находится на самом внешнем уровне вложенности. В нашем примере \0hbox\rm\ +спрятан внутри \0vtop\rm, поэтому остается два варианта избежать выделения +крайнего токена: задать перед \0vtop\rm\ пустой \0hbox\rm\ или, +что проще, поставить два апострофа.} +Примитив \TeX а \verb"\vtop" делает вертикальный бокс, выровненный по самому +верхнему из составляющих его боксов, в нашем случае --- по \verb"\hbox{N}" +(то есть базовые линии \verb"\hbox{N}" и всего \verb"\vtop" совпадут). Иными +словами, высота метки, заключенной в бокс \verb"\vtop", совпадет с высотой +\verb"\hbox{N}", а глубину метки составят глубина \verb"\hbox{N}" плюс +глубина и высота \verb"\hbox{H}". При расположении метки ее глубина +игнорируется, поэтому центр вершины как раз совпадет с центром символа N\@. +Присваивание \verb"\baselineskip=0pt" здесь нужно для того, чтобы +расстояние между N и H не получилось, как между строками в обычном тексте. +Интересно, что практически тот же результат можно получить с помощью +невидимой связи длиной три квадрата (\verb"\stree{/>1 3/>5 8N [~-0-3H] 10}"), +но с одним различием: при смене шрифта расстояние между N и H +может измениться. + +Вот теперь про метки сказано действительно все! + +\section{Команды} + +\begin{table}\centering +{\bf Таблица 3.} Значения имеющихся команд.\par\bigskip +\begin{tabular}{rl|rl|rl} +\verb"\ph"&\stree{3\ph'9}&\verb"\tbu"&\stree{3\tbu}&{\tabcolsep=0pt +\begin{tabular}{r}\verb"\O"\\\verb"\CO"\end{tabular}}&\stree{3\O'11'7}\\ +&&&&\\ \hline &&&&\\ +\verb"\pho"&\stree{3\pho'9}&\verb"\tbx"&\stree{3\tbx}&\verb"\OH"&\stree{3\OH}\\ +&&&&\\ \hline &&&&\\ {\tabcolsep=0pt +\begin{tabular}{r}\verb"\six"\\\verb"\6"\end{tabular}}&\stree{3\6'9}& +\verb"\ip"&\stree{3\ip}&\verb"\COOH"&\stree{3\COOH}\\ +&&&&\\ \hline &&&&\\ +&&\verb"\Me"&\stree{3\Me}& +\end{tabular} +\end{table} + +Вместо метки в качестве суффикса может стоять команда. Напомним, что командой +в \TeX е считается последовательность из сигнального символа \verb"\" и либо +одной не-буквы, либо нескольких букв, после которых должна идти не-буква +(например, команда \LaTeX а \verb"\\" относится к первому случаю, а +\verb"\section" --- ко второму). В макросе \treeTeX\ особые команды могут +использоваться {\sl внутри\/} общей команды \verb"\stree" для того, чтобы +упростить ввод некоторых фрагментов (см.\ табл.\ 3). Все фрагменты в +этой таблице, кроме трех циклических из первой колонки, являются +одновалентными заместителями, поэтому соответствующие команды устроены так, +что после них текущая вершина не меняется. Вообще-то, последнее верно и для +циклических фрагментов, хотя их и нельзя считать одновалентными. Не совсем +очевидно, например, что для получения цикла +<<на ножке>> нужно вначале задать связь, а потом и команду в том же +направлении (так, бифенил {\bondlen=3.5mm\stree{9\ph 33\ph}} +вводится как \verb"\stree{9\ph 33\ph}"). С другой стороны, такая трактовка +циклов дает некоторые удобства, ибо позволяет легко вводить структуры с +конденсированными циклами и циклы с одним гетероатомом: +$$ +\begin{tabular}{cc} +\stree{10\6 2\6}&\stree{N3\6 9\Me}\\ +\verb"\stree{10\6 2\6}"&\verb"\stree{N3\6 9\Me}" +\end{tabular} +$$ + +Фрагмент, отвечающий команде, рисуется в направлении, которое +стоит перед ней (все рисунки в таблице 3 получены для направления +на 3 часа). Иногда от направления зависит и вид метки (например, если +сказать \verb"\stree{9\OH}", то получится \stree{9\OH}, а если +\verb"\stree{3\OH}" --- то \stree{3\OH}) или даже взаимная ориентация меток, +как в случае с командой \verb"\COOH", при использовании которой кислород +карбонильной группы всегда оказывается сверху (пример --- кислота +$$\stree{10\COOH 2\COOH},$$ которая вводится как \verb"\stree{10\COOH +2\COOH}"). + +Определение команды +\verb"\COOH" полезно рассмотреть полностью, +если вы хотите узнать, что происходит внутри \treeTeX а: +\begin{verbatim} +\def\COOH#1{{% аргумент #1 = направление (в часах) + \ang=#1 % запомнить направление + \b\ang[C] % провести связь с меткой C на конце + \ifnum\ang>6 % если больше шести часов (наклон влево), то + \rot2 % поворот на два часа вправо по часовой стрелке, + {\bt2\b\ang[O]} % вначале рисуем карбонильную группу =O, + \rot8 % поворот на 8 часов вправо (= 4 влево), + \OH\ang % и рисуем группу OH + \else % а иначе делаем наоборот: + \rot2 % поворот на два часа вправо, + \OH\ang % вначале группа OH, + \rot8 % затем поворот, + {\bt2\b\ang[O]} % и потом =O + \fi}} +\def\OH#1{{\ifnum#1>6\b{#1}[HO]\else\b{#1}[OH]\fi}} +\end{verbatim} +% +Три макрокоманды, использованные в данном примере, необходимо объяснить. +Самая главная из них --- \verb"\b", которая собственно и рисует связи и имеет +два параметра: первый, направление связи --- обязательный, а второй --- метка +вершины, заключаемая в квадратные скобки --- может отсутствовать. +В качестве первого параметра обычно выступает +целая переменная \verb"\ang", означающая текущее направление связи. +Использование переменной, а не абсолютных значений для этой цели +позволяет сделать описание фрагмента зависящим от исходного направления, +которое передается с первым аргументом команды. После присваивания +\verb"\ang=#1" эта переменная далее только увеличивается или уменьшается, что +соответствует вращению текущего направления на целое число часов. Эти +операции обычно выполняются не явно, а с помощью +команды \verb"\rot", которая гарантирует, что результирующее значение +\verb"\ang" останется в пределах 11-ти. То, что связи фрагмента проводятся +не в абсолютных, а относительных направлениях, объясняет, почему перед +командой нельзя задавать направление в смещениях: его не так просто повернуть +на целое число часов. Строго говоря, это ограничение не относится к +фрагментам с одной связью (в этом случае единственная связь рисуется в +исходном направлении, без всяких поворотов). + +%Например, можно получить такой +%интересный результат: $\stree{-0-3\OH 3 -0+3\OH 3 -0-3\OH +9-0\Me}$, если +%сказать \verb"\stree{-0-3\OH 3 -0+3\OH 3 -0-3\OH +9-0\Me}". + +В определении \verb"\COOH" осталась необъясненной еще +команда \verb"\bt2", которая используется для рисования группы +\stree[b]{=3O}\ и означает, что следующая связь должна быть двойной +центрированной (это соответствует действию префикса {\tt =}). На самом деле +можно влиять и на другие атрибуты связи (видимость, толщина, и т.\ д.) с +помощью нескольких управляющих переменных. Сами эти переменные и смысл их +значений здесь не приводятся: это слишком специальные сведения, и при +необходимости их можно узнать, обратившись к файлу-источнику {\tt stree.sty}. + +Приведенные здесь определения команд \verb"\COOH" и \verb"\OH" заключены в +дополнительные фигурные скобки, что обеспечивает вспоминание текущей вершины +после того, как команда отработает. Отметим также, что внутри \verb"\COOH" +используется более простая команда \verb"\OH". Логика последней достаточно +проста и заключается только в выборе метки OH или HO в зависимости от +направления связи. + +Набор команд для рисования фрагментов может показаться бедным и +непредставительным. Действительно, это верно, но кажется, что этот список и +не стоит расширять. Описание структур на уровне отдельных связей и так +является достаточно лаконичным, чтобы применение макрокоманд могло дать +заметные преимущества в краткости или простоте. Польза от макрокоманд +остается максимальной, пока их немного, все они простые и часто +используются. В этом случае команды легко удержать +в голове и применять, почти не задумываясь. + +Сказанное выше не значит, однако, что +создание новых команд (кроме уже имеющихся) для \verb"\stree" совсем лишено +смысла. Следующий пример поясняет, о чем может идти речь. Пусть требуется +нарисовать некий граф, вершины которого отмечены жирными +точками:$$\def\*#1{\b{#1}[$\bullet$]} +\stree{\*5\*[7\*]3\*1\*3\*5\*7\*9\*11\*}$$ Точке отвечает математический +символ \verb"$\bullet$", и вы можете, конечно, честно +начать набирать все это как +\verb"{$\bullet$} 5{$\bullet$} [7{$\bullet$}" \ldots, однако проще +сначала определить команду \verb"\*" для рисования жирной точки в данном +направлении таким образом, +\begin{verbatim} +\def\*#1{\b{#1}[$\bullet$]} +\end{verbatim} +чтобы потом всю структуру набрать короче: +\begin{verbatim} +\stree{\*5\*[7\*]3\*1 \*3\*5\*7\*9\*11\*}. +\end{verbatim} + +На самом деле команды-суффиксы могут иметь не один параметр +(направление), а два: если сразу после команды стоит открывающая +фигурная скобка, то все, что находится до закрывающей скобки, рассматривается +как второй параметр. Покажем одно довольно неожиданное и далекое от химии +использование этого факта. Если следующим образом +% +\begin{verbatim} +\def\(#1,#2){\sx#1\sy#2\ab30[]} % связь со смещением (#1,#2) +\def\dB#1[#2]{\(15,0)\(0,-6)\(-3,-3)\(-27,0)\(0,6)\(3,3) + \(12,0)\bmode-1 \dmode2 \sy-5 \ab30[#2]\bmode-1 \(0,-4)} +\end{verbatim} +% +определить команду \verb"\dB" для рисования +прямоугольника с двумя срезанными углами и с надписью внутри, то потом можно +будет легко вводить блок-схемы типа +$$ +\def\(#1,#2){\sx#1\sy#2\ab30[]} +\def\dB#1[#2]{\(15,0)\(0,-6)\(-3,-3)\(-27,0)\(0,6)\(3,3)\(12,0) + \bmode-1 \dmode2 \sy-5 \ab30[#2]\bmode-1 \(0,-4)} +\stree{::-0-3 0\dB{база данных} ::-0-3 [-20-0::-0-3 0\dB{структуры}-0-3] + +20-0::-0-3 0\dB{спектры}-0-3} +$$ +набирая их как химические формулы: +\begin{verbatim} +\stree{::-0-3 0\dB{база данных} + ::-0-3 [-20-0::-0-3 0\dB{структуры}-0-3] + +20-0::-0-3 0\dB{спектры}-0-3} +\end{verbatim} + +Сделаем необходимые комментарии: переменные \verb"\sx" и \verb"\sy" содержат +смещения, которые используются при проведении связи, если ее +направление равно условному значению 30 часов. Присвоение \verb"\bmode-1" +позволяет получить невидимую связь, а в результате \verb"\dmode2" метка +вершины получается центрированной. + +Упоминанием такого необычного приклада команды \verb"\stree" мы закончили +рассмотрение всех трех компонент (\<префикс>, \<направление>, \<суффикс>) в +описании отдельных связей. Далее осталось совсем немного: отметить +особенности \verb"\stree" в целом: способы выравнивания и использования в +других конструкциях \LaTeX а. + +\section{Выравнивание} + +Команда \verb"\stree" (с помощью окружения \LaTeX а \verb"picture") +производит \verb"\hbox", высота которого немного (на {\tt 1ex}) больше +глубины. Чаще всего это срабатывает правильно, особенно если несколько +структур являются частью выделенной математической формулы, как в +следующем примере $$ \stree{9\6 3\OH}+\stree{9\OH 1\O +5\Me}\longrightarrow\ \stree{9\6 3O 3 1\O 5\Me}+\stree{{H$_2$O}}\ ,$$ +который вводится как +\begin{verbatim} +$$ +\stree{9\63\OH}+\stree{9\OH1\O5\Me}\longrightarrow +\stree{9\63O31\O5\Me}+\stree{{H$_2$O}} +$$ +\end{verbatim} +Все формулы в этом примере +оказались вертикально выровнены по своим центрам. На самом деле способ +выравнивания можно задать явно, если ввести одну из букв {\tt t}, {\tt b}, +{\tt c} или {\tt u} в квадратных скобках сразу после команды \verb"\stree" (и +перед ее обязательным аргументом). В соответствии с соглашениями \LaTeX а, +{\tt [t]} означает выравнивание по верхушке, {\tt [b]} --- по дну, а {\tt +[c]} --- по центру бокса. По умолчанию действует выравнивание по центру +(поэтому {\tt [c]} задавать не обязательно). Другие способы (по верхушке и +дну) обычно пригождаются при составлении таблиц. Параметр {\tt [u]} означает +отсутствие выравнивания: команда \verb"\stree[u]{"\<описание>\verb"}" дает +бокс нулевых размеров, точка привязки которого сопрадает с исходной вершиной +в описании структуры. Это полезно для случая, когда \verb"\stree" сама +является частью другого рисунка, отдельные элементы которого должны быть +привязаны к координатам вершин структуры. Если известны координаты хотя бы +одной вершины, то их можно легко вычислить и для всех остальных, учитывая то, +что вершины расположены в узлах сетки с шагом 1 квадрат ($1/6$ расстояния +\verb"\bondlen"). Параметр {\tt [u]} гарантирует знание места начальной +вершины, а другие параметры --- не всегда, так как при +выравнивании бокс, который дает \verb"\stree", включает в себя целиком метки +вершин и вообще все символы, имеющиеся в формуле. Использование {\tt [u]}, +однако, не всегда удобно, поскольку появляется необходимость самому следить +за размерами формулы. + +Существует способ, избавленный от этого недостатка. Вместо одной команды +\verb"\stree" с описанием внутри можно написать \verb"\begstr +\tree{" \<описание> \verb"} \endstr", а перед \verb"\endstr" (или после +\verb"\begstr") вставить любые команды \LaTeX а с учетом того, что координата +(0,0) отвечает начальной вершине, а единица измерения \verb"\unitlength" +совпадает с длиной связи \verb"\bondlen" (иными словами, равна 6 квадратов). +В следующем примере такой способ использован для того, чтобы выделить +пунктирным прямоугольником фрагмент структуры: $$ \begstr +\tree{9\OH1//2[~/7{$R_1$}]4[0~2][6]/2539>760/108[-4-5/118~9{$F_1$}]//1011} +\put(-2,-2){\dashbox{0.2}(4.8,3.8){}} +\endstr +$$ +Это изображение вводится следующим образом: +\begin{verbatim} +\begstr +\tree{9\OH1//2[~/7{$R_1$}]4[0~2][6]/2539>760/108 + [-4-5/118~9{$F_1$}]//1011} +\put(-2,-2){\dashbox{0.2}(4.8,3.8){}} +\endstr +\end{verbatim} + +\section{Другие возможности} + +Поскольку настоящее изложение связано с химией, отметим возможность ввода в +\treeTeX е масс-спектров и спектров \CNMR. Например, спектр +$$ +\massp{220-18!187-33!135-26!133-25,121-100!14,2,107-38!43-35,41-41!} +$$ +получается в результате +\begin{verbatim} +\massp{220-18!187-33!135-26!133-25,121-100!14,2, + 107-38!43-35,41-41!} +\end{verbatim} +Это просто последовательность чисел, разделенных знаками препинания. +Если после числа стоит тире, то оно воспринимается как массовое число +($m/z$) пика, иначе --- как его интенсивность (в процентах к максимальному +пику). Восклицательный знак отличается от запятой тем, что в первом случае +над пиком на рисунке будет написано значение его $m/z$. Если после +одного масового числа стоит несколько чисел, означающих интенсивности (в +нашем примере --- {\tt 121-100!14,2,}), то имеется в виду последовательность +пиков с возрастающими $m/z$. Это позволяет +экономить место, не вводя массовое число, если оно на единицу больше +предыдущего. Если последний знак во вводе --- запятая, то ее ставить не +обязательно. + +Вид рисунка масс-спектра управляется четырьмя параметрами: +\begin{itemize} +\item +\verb"\mzlen" --- расстояние между соседними линиями, $m/z$ которых +отличается на 1 (по умолчанию \verb"\mzlen=0.6pt"), +\item +\verb"\imax" --- высота максимального пика в единицах \verb"\mzlen" +(по умолчанию \verb"\imax=50"), +\item +\verb"\numfnt" --- шрифт, которым набираются все цифры на рисунке +(по умолчанию \verb"\def\numfnt{\small}"), +\item +\verb"\msdir" --- направление, в котором рисовать пики спектра. +\end{itemize} +% +Послендий параметр используется редко. По умолчанию \verb"\msdir=1", +что означает обычное направление --- вверх; при любом другом значении пики +будут направлены вниз. Иногда для визуального сравнения двух масс-спектров их +удобно расположить зеркально относительно общей шкалы: +$$ +\begms +\mass{39-11,0,21,51-5,7,15,64-5,35,7,77-10,5,91-4,74!27,104-6, +119-26,132-42,4,159-26,81!8,176-15,187-93!12,204-4,232-100!14} +\put(-1,0){\line(1,0){250}}\msdir=-1 +\mass{39-16,51-7,6,15,65-11,8,77-5,92-73!24,104-9,119-15, +132-21!159-26,100!14,176-16,187-83!14,204-3,232-70!}\vpos=1 +\endms +$$ +Этот реальный пример сравнения экспериментального (сверху) и предсказанного +спектров был введен следующим образом: +% +\begin{verbatim} +\begms +\mass{39-11,0,21,51-5,7,15,64-5,35,7,77-10,5,91-4,74!27,104-6, +119-26,132-42,4,159-26,81!8,176-15,187-93!12,204-4,232-100!14} +\put(-1,0){\line(1,0){250}}\msdir=-1 +\mass{39-16,51-7,6,15,65-11,8,77-5,92-73!24,104-9,119-15, +132-21!159-26,100!14,176-16,187-83!14,204-3,232-70!}\vpos=1 +\endms +\end{verbatim} +% +По аналогии с командой \verb"\stree", вместо +\verb"\massp{" \<аргумент> \verb"}" можно писать +\verb"\begms \mass{" \<аргумент> \verb"} \scale1{} \endms", а между +\verb"\begms" и \verb"\endms" вставлять любые команды \LaTeX овского +окружения {\tt picture}. В нашем примере вместо \verb"\scale1{}", которая +рисует обычную шкалу с рисками и числами, мы провели просто горизонтальную +линию (ее длина --- округленное в большую сторону значение наибольшего +массового числа в спектре), а затем нарисовали еще один масс-спектр, который +получился вверх ногами, потому что перед ним стояло \verb"\msdir=-1". Наконец, +последнее присваивание \verb"\vpos=1" означает, что весь рисунок должен +выравниваться по низу (то есть глубина бокса равна нулю). Конечно, при +использовании самой команды \verb"\massp" выравниванием можно управлять +обычным способом с помощью необязательного параметра в квадратных скобках +({\tt b}, {\tt c} или {\tt t}, по умолчанию {\tt c}), но на +на немного более низком уровне, на который пришлось спуститься в последнем +примере, действует переменная \verb"\vpos" (это же относится и к разложению +\verb"\stree" на \verb"\begstr", \verb"\tree" и \verb"\endstr"). Она может +принимать три значения: 0 --- выравнивание по центру (соответствует параметру +{\tt [c]}), 1 --- по дну ({\tt [b]}), 2 --- по верхушке ({\tt [t]}) и 3 --- +без выравнивания (действует только для структурных формул и отвечает +параметру {\tt [u]}). + +В \treeTeX е можно также вводить очень упрощенные схематические рисунки +спектров \CNMR\ наподобие следующего (высота пиков здесь отражет +мультиплетности сигналов): +$$ +\cnmrs{2000}{1912s1645s354d1041s{\llap{$^b\searrow$}}% +901s138q1576s1703s575q912d1047d{$*$}566q1696s1956s571q953s395t} +$$ +Приведем соответствующий исходный текст: +% +\begin{verbatim} +\cnmrs{2000}{1912s1645s354d1041s{\llap{$^b\searrow$}}% +901s138q1576s1703s575q912d1047d{$*$}% +566q1696s1956s571q953s395t} +\end{verbatim} +% +Команда \verb"\cnmrs" имеет два обязательных параметра: первый --- длина +шкалы (в десятых от м.\ д.),\ а второй --- описание спектра, в котором для +каждого сигнала задается значение химического сдвига, умноженное на 10 +(должно быть целое число) и мультиплетность (одна из букв {\tt s} --- +синглет, {\tt d} --- дублет, {\tt t} --- триплет и {\tt q} --- квартет). +После знака мультиплетности в фигурных скобках можно поставить метку пика (в +нашем случае конструкция \verb"\llap{$^b\searrow$}" понадобилась для того, +чтобы метка пришлась слева от синглета 104.1 м.\ д.\ и не наложилась на +соседний дублет, помеченный звездочкой). + +Способы ввода рассмотренных двух видов спектров немного похожи (по +сути дела, и здесь, и там --- последовательность чисел с разделителями), +однако есть и отличия. Так, длинную команду \verb"\massp" можно в любом месте +разбить на строки, а внутри \verb"\cnmrs" конец строки нежелателен, и его +(как в приведенном случае) надо маскировать +знаком комментария (символом \verb"%"). +Кроме того, в \verb"\cnmrs" длина шкалы (и, значит, всего рисунка) всегда +задается явно, но этого нельзя сделать при вводе масс-спектра. Его размер +вычисляется по наибольшему массовому числу спектра. Если необходимо получить +несколько рисунков масс-спектров одинакового размера, можно обмануть машину, +указав при вводе пик нулевой интенсивности с нужным значением $m/z$. +Например, закончив ввод масс-спектра выражением \verb"250-0}", вы +получите шкалу длиной 250 $m/z$ (если, конечно, в спектре не было пика с +б\'ольшим массовым числом). + +\section{Обсуждение результатов} + +Один из вопросов, который может возникнуть при знакомстве с настоящей +работой, формулируется примерно так: зачем изучать какой-то <<птичий язык>> +для ввода структурных формул, когда есть много удобных программ для +наглядного редактирования, почти не требующих освоения? По сути дела, это +старый спор о преимуществах и недостатках командного интерфейса по сравнению +с графическим. Опытные программисты хорошо знают, что с помощью языка команд +всегда можно работать быстрее и эффективнее. +На самом деле, однако, противоречия между двумя способами работы не +существует, и в идеале хорошо всегда иметь обе возможности (замечательный +пример их удачного совмещения --- оболочка Norton Commander). При подготовке +научных публикаций обычно приходится иметь дело в основном со словами +и символами. Структурные же формулы в химических статьях, подобно +математическим формулам, чаще тоже удобнее рассматривать просто как элемент +текста. Если вводить их всегда с помощью химического редактора, то придется +часто переключаться из одной программы в другую. Даже если предположить, что +это происходит быстро и непринужденно (в реальности редко достижимый идеал), +то изменение интерфейса с тектового на графический и обратно все равно +потребует определенной психологической адаптации. В этом случае возможность +ввести формулу прямо в тексте, не берясь за мышь и не превращаясь временно в +чертежника, может сэкономить вам немало времени и нервной энергии. + +\begin{thebibliography} +\frenchspacing + +\item +Knuth, D. The \TeX book. Addison-Wesley, Reading (1984). Русский перевод: +Дональд Е. Кнут. Все про \TeX. + +\item +Lamport, L. \LaTeX: A Document Preparation System. +Addison-Wesley, Reading (1984). По \LaTeX у вышло много книжек на русском +языке. Вот часть из них: + +\item +Ramek, M. In book: Clark, M. (ed.) \TeX: Applications, Uses, Methods. +Ellis Horwood, London (1990), 277-- + +\item +Haas, R. T.; O'Kane, K. C. +Typesetting Chemical Equations Using \LaTeX. +Comput. Chem., 11 (1987), + +\item +Fujita, S. +Typesetting Structural Formulas with the Text Formatter \TeX/LaTeX. +Comput. Chem., 11 (1993), + +\end{thebibliography} + +\end{document}
\ No newline at end of file |