Опубликован: 07.02.2007 | Доступ: свободный | Студентов: 4012 / 1340 | Оценка: 4.56 / 3.95 | Длительность: 23:09:00
Специальности: Художник
Дополнительный материал 5:

Приложение Д. Пакет Xy-pic

Как мы отмечали вранее, возможностей пакета amscd для печати "коммутативных диаграмм" хватает не всегда: бывают нужны стрелки наклонные, изогнутые и т.д. Для печати таких диаграмм можно воспользоваться стилевым пакетом Xy-pic.

Этот пакет — большой и сложный, и в настоящем приложении мы рассмотрим только те его возможности, что относятся непосредственно к коммутативным диаграммам (обо всем прочем можно почитать в оригинальной документации, распространяющейся в электронном виде вместе с пакетом).

Пример с комментариями

Чтобы можно было пользоваться пакетом Xy-pic для набора коммутативных диаграмм, надо подключить стилевой пакет xy с опциями matrix, arrow и curve. Иными словами, надо написать в преамбуле

\usepackage[matrix,arrow,curve]{xy}

Объяснить, как набирать с помощью Xy-pic'а коммутативные диаграммы, удобно на примере.

Рассмотрим следующую диаграмму:

$$
  \xymatrix{
  && M'\ar@{o->}[dl]^e \ar@/_1pc/@{-->}[ddll]_u\\
  & K\ar[rr]^f \ar[dr]^h && L \ar[ul]_a \ar[dl]_g\\
  L'\ar@{o->}[ur]_d \ar@/_1pc/@{-->}[rrrr]_v &&
      M\ar[rr]^p \ar[ll]_c && K'\ar@{o->}[ul]_b
  }
$$

Ей соответствовал такой исходный текст:

$$
  \xymatrix{
  && M'\ar@{o->}[dl]^e \ar@/_1pc/@{-->}[ddll]_u\\
  & K\ar[rr]^f \ar[dr]^h && L \ar[ul]_a \ar[dl]_g\\
  L'\ar@{o->}[ur]_d \ar@/_1pc/@{-->}[rrrr]_v &&
      M\ar[rr]^p \ar[ll]_c && K'\ar@{o->}[ul]_b
  }
$$

Разберем его шаг за шагом.

Вся диаграмма записывается в аргументе команды \xymatrix.

Далее, диаграмма состоит из формул, соединенных стрелками. Прежде чем набирать исходный текст для диаграммы, надо мысленно расположить эти формулы в вершинах прямоугольной решетки. В нашем случае это решетка 5\times3: M' стоит в третьей позиции верхней строки, K и L — во второй и четвертой позициях средней строки, L', M и K' — в первой, третьей и пятой позициях нижней строки. Строки разделяются командами \\, элементы строки — символами &. Если в каких-то узлах решетки ни одной формулы нет, надо оставить пустое место; символы & в необходимом количестве присутствовать обязаны.

После каждой из формул (и до следующего & или \\) следуют обозначения для всех стрелок, выходящих из этой формулы. Рассмотрим эти обозначения повнимательнее.

Каждое обозначение для стрелки состоит из пяти элементов (не все эти элементы обязательны).

Первый (обязательный) элемент обозначения для стрелки — команда \ar.

Второй элемент — обозначение для изгиба стрелки (если стрелка прямая, его можно опустить). Оно имеет вид @/.../, где на месте точек записывается указание о том, как именно эту стрелку надо изогнуть. Это указание состоит из символа ^ или _, за которым следует длина в TeX'овских единицах, указывающая степень изогнутости (в нашем примере у всех изогнутых стрелок эта длина равна 1pc). Длину можно и не указывать, написав просто @/^/ или @/_/, — тогда стрелке буден придан некоторый изгиб "по умолчанию". В любом случае символ ^ или _ указывает, в какую сторону стрелка изгибается: если _, то вправо, если ^ то влево (если смотреть от начала стрелки к ее концу).

Третий элемент — указание на начертание стрелки (если стрелка " обычная", его можно опустить). Оно имеет вид @{...}, где на месте точек ставится условное обозначение, более или менее имитирующее требуемую форму. В нашем примере присутствуют пунктирные стрелки, для которых это обозначение имеет вид @{-->}, и стрелки с кружочком в начале, обозначаемые как @{o->}.

Четвертый (обязательный) элемент обозначения для стрелки указывает ее направление. Каждая стрелка рассматривается как идущая из одного узла решетки в другой. Для задания направления (или, если угодно, точки назначения) стрелки необходимо поместить в квадратные скобки комбинацию из букв u (вверх), d (вниз), r (вправо) и l (влево). Например, [ddll] означает, что пункт назначения стрелки находится на нашей решетке на два шага вниз и на два шага влево от той формулы, из которой стрелка выходит.

Пятый и последний элемент (необязательный) определяет надпись при стрелке. Он состоит из символа ^ или _ и текста надписи (если в надписи больше одного символа, ее надо, как водится, взять в фигурные скобки). Знак ^ указывает, что надпись должна быть слева от стрелки (если смотреть от начала к концу), знак _ — что справа. При одной стрелке могут быть надписи с обеих сторон.

Некоторые общие правила

Синтаксис Xy-pic'а весьма сложен, и мы не будем пытаться изложить его полностью (автор должен признаться, что в полном объеме он его и не знает). Вместо этого приведем несколько приемов, наиболее, на наш взгляд, полезных на практике.

Управление расположением надписей

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

$\xymatrix{
A\times B\times C\ar@{.>}[dr]^-{f_1}\\
&D
}$
$\xymatrix{
A\times B\times C\ar@{.>}[dr]^-{f_1}\\
&D
}$

Заодно мы продемонстрировали еще одно возможное начертание стрелки.

Можно также в явном виде указать, в каком месте между центрами формул, соединяемых стрелками, надо сделать надпись. Для этого надо между ^ или _ и надписью поставить в круглых скобках десятичную дробь из интервала (0;1) (скажем, (0.25) означает, что надпись должна быть на четверти пути из начала в конец):

\xymatrix@1{
A\ar[rr]^(.25){f}&&B
}
$\xymatrix@1{
A\ar[rr]^(.25){f}&&B
}$

Заодно мы применили констукцию, рекомендуемую авторами пакета для ситуаций, когда вся "диаграмма" укладывается в одну строчку: поместили @1 между \xymatrix и открывающей фигурной скобкой; утверждается, что в этом случае диаграмма будет выглядеть более удачно.

Наконец, можно сделать так, чтобы надпись была не сбоку от стрелки, а разрывала стрелку; для этого надо вместо ^ или _ написать ^|^, как в следующем примере:

\xymatrix{
A\ar@/^/[rd]|{f}\\
&B
}
$\xymatrix{
A\ar@/^/[rd]|{f}\\
&B
}$
Нина Казачек
Нина Казачек
Василий Майоров
Василий Майоров