ЧЕБЫШЕВСКИЙ СБОРНИК
Том 14 Выпуск 4 (2013)
ВЫВОД ДИАГРАММ И ПАКЕТ XY
А. Р. Есаян, Н. М. Добровольский (г. Тула)
Аннотация
В работе рассматриваются способы вывода диаграмм с помощью пакета xy. Излагаются следующие вопросы: Матричный шаблон диаграммы; Рисование стрелок; Создание надписей; Типы стрелок; Изогнутые стрелки; Смещение надписей на стрелках; Рамки для узлов и надписей; Параллельные сдвиги стрелок; Тексты в диаграммах; Масштабирование и вращение диаграмм; Пересечение стрелок. Рассмотрение всех вопросов сопровождается подробными описаниями и кодами команд для пакета xy. Материал статьи может использоваться авторами научных публикаций, требующих оформления сложных диаграмм.
Ключевые слова: диаграмма, пакет xy, ЖТ^Х.
DIAGRAM OUTPUT AND XY PACKAGE
A. R. Esayan, N. M. Dobrovol’skii (Tula)
Abstract
In this paper diagram output with xy package is considered. The following topics are covered: Matrix diagram template; Arrows drawing; Labels creation; Arrows types; Bent arrows; Shift of arrow labels; Frames for nodes and labels; Parallel arrow shifts; Text in diagrams; Scaling and rotating of diagrams; Arrows intersections. Consideration of all issues is accompanied by detailed descriptions and example commands for xy package. Material of the article may be used by authors of scientific publications requiring complex diagrams.
Keywords: diagram, xy package, ЖТ^Х.
Пакет расширения xy (xypic, XY-pic) [1-3] создан для рисования в LTEX всевозможных диаграмм и схем. Он разработан Н. Р Кристофером и Р. Муром. Здесь мы кратко опишем возможности этого пакета, иллюстрируя изложение примерами. Поскольку диаграммы состоят из узлов, стрелок между ними и надписей к стрелкам, то, прежде всего, нам предстоит познакомиться с такими вопросами: матричный шаблон диаграммы, средства для рисования узлов диаграммы, средства для рисования стрелок между узлами диаграммы, средства для вывода надписей к стрелкам. Сразу же отметим, что узлами диаграммы и надписями
к стрелкам могут быть любые выражения. Будем считать, что пакет xy открыт, то есть в преамбуле документа выполнена команда \usepackageEallMxy}.
Матричный шаблон диаграммы. Рассмотрим понятие матричного шаблона диаграммы на примере. Будем считать, что имеется матрица М и некоторые элементы М — это узлы нашей диаграммы, а остальные элементы М не определены. Например, диаграмму
□ А B С □
D □ □ □ E
□ F G H □
где для наглядности квадратиками обозначены отсутствующие, то есть неопределенные элементы. Матрица M естественным образом отражает структуру диаграммы - на ней легко представить себе недостающие ребра (стрелки). Подобные матрицы мы будем называть шаблонами диаграмм. Расстояние между строками и столбцами матрицы можно задавать необязательными опциями "@R =длина" и "@С =длина" (без кавычек). Записываются они между словом xymatrix и первой скобкой "{". Если присутствуют обе опции, то они разделяются пробелами или пустым символом.
Вывод матричных шаблонов можно проводить командами \xymatrix{:} с одним аргументом. В аргументе указываются элементы матрицы, которые отделяются друг от друга символами &. На месте отсутствующих элементов ничего не пишется. Строчки матрицы разделяются командами \\. Скажем, для нашего примера код матричного шаблона, не выводящего квадратики, будет таким:
$$\xymatrix{ &A&B&C& \\
D & & & & E \\ (3)
& F & G & H &} ()
$$.
Рисование стрелок. Покажем далее, как полученный промежуточный код (3) превратить в реальный код для вывода диаграммы (1), то есть, как задать на узлах данные для рисования стрелок. Для этого достаточно использовать лишь команды \ar[:] (ar - arrow (стрелка)), размещаемые в (3) справа от узлов. Аргументы \ar - это последовательности без разделителей из одного или более
символов, взятых из множества u, d, l, r (u - up (вверх), d - down (вниз), l - left (влево), r - right (вправо)). Например, если после узла A находится команда \ar[rdd], то это предписывает рисовать стрелку из A в узел, находящийся от A на одну позицию вправо и на две позиции вниз. По матрице (2) эти действия соответствуют переходу на один столбец вправо и затем на две строки вниз. Таким образом, \ar[rdd] форсирует рисование стрелки из узла A в узел G. Чтобы из A рисовалось две стрелки, так, как это указано в (1), после A в (3) следует разместить две команды \ar: A \ar[rdd] \ar[r]. Из сказанного ясно, что диаграмма (1) выводится по такому коду:
$$\xymatrix{
& A \ar[r] \ar[ddr] & B \ar[r] & C \ar[dr] & \\ (^
D \ar[ur] \ar[dr] &&&& E \\
& F \ar[r] & G \ar[r] \ar[ruu] & H \ar[uu] \ar[ur] &}$$
Создание надписей. Пусть теперь требуется вывести диаграмму (1), около стрелок которой расположены надписи - произвольные выражения. Скажем, диаграмма должна быть такой:
Покажем, как организуются надписи у стрелок, выходящих, например, из узла А. Достаточно код при А - \аг[г] \arEddr] - превратить в код \аг[г]_а \ar[ddr]~{b+77}. Иными словами, имеющиеся команды рисования стрелок требуется расширить указанием соответствующих надписей. При этом, если смотреть с конца стрелки, то для размещения надписи слева от нее требуется дополнение вида "_надпись а справа - "^надпись". К этому следует добавить, что для размещения надписи прямо на стрелке требуется дополнение к команде вида "|надпись" (см. табл. 1).
Таблица І
Опции для создания надписей к стрелкам
Опция Действие
_а 'а _а^в 1а размещение надписи а слева от стрелки размещение надписи а справа от стрелки размещение надписей а и в слева и справа от стрелки размещение надписи а на стрелке
Учитывая сказанное, вывод диаграммы (5) можно осуществить по коду:
$$\хуша^1х{
& А \аг[г]_а \аг[ё<±г]~{Ь+77} & В \аг[г]~с
& С \аг[ёг]~ё_т & \\ („)
Б \аг[иг]_{е+в~2} \ar[dr]~f &&&& Е \\ ()
& Е \ar[r]_g & С \arMlh \аг[гии]л1 & Н \ar[uu]_j \ar[ur]_k &}$$
Типы стрелок. В команде вывода стрелки \а^:] сразу за именем опцией @{тип} можно указать тип выводимой стрелки. Например, если записать ^г^^Мг] , то соответствующая стрелка будет иметь вид "^". Ниже в табл. 2 приведены некоторые возможные типы стрелок и их @-опции. Иногда приходится проводить невидимые стрелки (\ат@{}[:]), чтобы вывести только надпись. Почему мы говорим о стрелках, а не о ребрах, хотя концы отрезков, соединяющих пары узлов диаграммы визуально не всегда обозначены? Дело в том, что во всех ситуациях у таких отрезков есть и начальный, и конечный узел. Поэтому для них "стрелка" более подходящий термин, чем "ребро". Отметим, что типы выводимых стрелок не ограничиваются перечнем табл. 2. Можно смело экспериментировать с различными символами (-, =, • • •) и
получать новые стрелки.
Таблица 2
Типы стрелок в диаграммах
Стрелки и их опции для вывода
• • @{-} • • • ^— —• @{<->}
* • @{=} • > • @{=>} • <= =^> • @{<=>}
• • @{~} @{~>} • -<— • @{<~>}
• • @{.} • >- • @{.>} • @{<.>}
• • @{--} • V • @{-->} • V - - V • @{<-->}
• = = = • @{==} • = = ^ • @{==>} • ^ V • @{<==>}
• • @2{~} • • @2{~>} • • @2{<~>}
• • @3{-} • V • @3{->} • V— —V • @3{<->}
• , • @ {->} • ^ • @~{->} • -*■— • @{~<-_>}
• • @{} • • @{~(->}} •с— • @{_(->}
Изменим код (6) так, чтобы входящие в А и выходящие из А стрелки стали волнистыми и с прежним направлением, стрелка СЕ стала двойной и двунаправленной, а стрелка НЕ — штриховой и с тем же направлением. Код станет таким:
$$\хуша^1х{
& А \аг@{~>}[г]_а \аг@{~>}[ё<Зг]~{Ь+77}
& В \аг[г]~с & С \аг@{<=>}[ёг]~ё_т & \\ Б \аг@{~>}[иг]_{е+в~2} ^г^г]^ &&&& Е \\
& Е \ar[r]_g & С \arMlh \аг[гии]л1 &
Н \ar[uu]_j \ar@{-->}[ur]_k &}$$
Вывод по этому коду, как мы и планировали, будет следующим:
Е
Изогнутые стрелки. Стрелки в диаграммах можно делать изогнутыми, то есть превращать их в кривые линии. Для этих целей перед @-опцией, задающей тип стрелки, или после этой опции требуется вставить еще одну @-опцию, определяющую изгиб стрелки. В простейшем случае это делается средствами, представленными в табл. 3.
Таблица 3
@-спции для изгибов стрелок
Опция Действие
@/_/ изгиб влево, если смотреть со стороны конца стрелки
@/_в / изгиб влево на [3 единиц. Обычно [3 измеряется в пиках - рс (1рс = 12р). Изгиб @/ / приблизительно равен @/_0.5рс/
@/7 изгиб вправо, если смотреть со стороны конца стрелки
@Г0 / изгиб вправо на [3 единиц. Изгиб @/^/ приблизительно равен @/^0.5рс/
@(/1/2) изгиб по направлениям /1 и d2. Значения для d1 и d2 могут быть: и, иг, г,/г, й/1,1,и1 (см. рисунок) и и! | ЦТ 1 ■+ £ ^ *-Г 61 \ с1г Л
Вернемся к диаграмме (8) и изменим ее код (7) так, чтобы стрелки АВ и ОС оказались изогнутыми вправо, а стрелка ВС — изогнутой влево.
Кроме того, около узла В организуем петлю, то есть создадим стрелку из В в В. Для этого "поправим" код (7) так:
$$\хуша^1х{
& А \ar@{~>}@/~2pc/[r]_a \ar@{~>}[ddr]~{b+77} &
В ^гЗ/.О^рс/Ы^с \ar0Cld, ^)[]
& С & \\ (9)
Б \ar@{~>}[ur]_{e+e~2} \arM~f &&&& Е\\
& Е \ar[r]_g & С \arHlh \ar@/~5pt/[ruu]~i &
Н ^г^^^ \ar@{-->}[ur]_k &}$$
Обратите внимание на то, как выведена петля у узла В. Сделано это по команде ^г^М,^)^, в которой есть изгиб стрелки, но нет смещения от В. Вывод по этому коду таков:
Е
10)
Смещение надписей на стрелках. Надписи на стрелках, как мы видели, задаются опциями Ба, где 5 - управляющий символ, а - надпись (5 £ {_,|}). По умолчанию надпись размещается у стрелки в середине между центрами соответствующих узлов. Для смещения надписи вдоль стрелки в ту или иную сторону опцию надписи следует расширить. А именно между управляющим символом 5 и надписью а следует вставить дополнительный управляющий символ. Он может быть таким:
• < (5 < а) — надпись а смещается к началу стрелки;
• > (5 > а) — надпись а смещается к концу стрелки;
• <(1) или >(Ь) (5 < (Ь)а) — надпись а устанавливаетсг в позицию Ь ■ 1еп от
начала стрелки, где 0 ^ ^ 1,1еп - длина строки;
• << ■■■ < (5 << ■■■ < а) — каждый знак <, начиная со второго знака и далее, немного сдвигает надпись а от начала по направлению к концу стрелки. Величина сдвига равна \jot и обычно это 3р^
• >> ■■■ > (5 >> ■■■ > а) — каждый знак >, начиная со второго знака и далее, немного сдвигает надпись а от конца по направлению к началу стрелки. Величина сдвига равна ^о^
Поправим код (9) диаграммы (10) так, чтобы на стрелке ОС1 надпись разместилась недалеко от узла С, а на стрелке НС — недалеко от узла Н. Для этого из (9) надо создать код:
$$\xymatrix{
& А \ar@{~>}@/~2pc/[r]_a \ar@{~>}[ddr]~{b+77} &
В ^гЗ/.О^рс/Ы^с \ar0dd, ^)[]
& С & \\ (11)
Б \ar@{~>}[ur]_{e+e~2} \artdrj~f &&&& Е\\ &
Е \arM_g & С \arHlh \ar@/~5pt/[ruu]~<(0.7)i &
Н ^^^^<(0.2^ ^^{--^[ш^к &}$$
Вывод по коду (11) таков:
Е
:12)
Рамки для узлов и надписей. Узлы и надписи на стрелках в диаграммах можно заключать в разнообразные рамки, используя модификаторы табл. 4. Каждый знак " + "в модификаторе увеличивает стороны рамки или диаметр окружности на 6 пунктов. У величин 5 и в должны быть указаны единицы измерения.
Признаком начала модификатора является символ "*". Наиболее часто модификаторы используются в одной из четырех форм:
*+[Е...]...{объект}, *+<5 >[Е...]...{объект},
*+[о][Е...]...{объект}, *+<5 >[о][Е...]...{объект}.
Как видим, перед объектом (узел или надпись на стрелке) помещается до-
полнительный код, а сам объект заключается в фигурные скобки.
Таблица 4
Рамки для узлов и надписей к стрелкам
Модификатор
Действие
[Р-]
[Р=]
[Р.]
[Р--]
[Р-,]
[Р-<в>]
[о][Р...]
+
+<8>
-<8>
вывести прямоугольную рамку со сплошной одинарной границей
вывести прямоугольную рамку со сплошной двойной границей
вывести прямоугольную рамку с точечной границей вывести прямоугольную рамку со штриховой границей
вывести прямоугольную рамку с тенью вывести прямоугольную рамку с закруглениями величиной в
вывести рамку в виде окружности
немного увеличить рамку (символов + может быть
несколько)
увеличить рамку на величину 8
увеличить рамку до минимального охвата объекта неменого уменьшить рамку (символов — может быть несколько)
уменьшить рамку на величину 8
уменьшить рамку до минимального охвата объекта
Преобразуем диаграмму (12) следующим образом:
• поместим узел А в круг с одинарной границей и увеличим диаметр круга на 18 пунктов;
• поместим узел С в круг с одинарной границей и увеличим диаметр круга на 6 пунктов;
• поместим узел О в круг с двойной границей и увеличим диаметр круга на 12 пунктов;
• поместим узел Е в прямоугольник с тенью и одинарной границей. Увеличим сторону квадрата на 12 пунктов;
• поместим узел О в прямоугольник с одинарной границей и увеличим стороны прямоугольника на 6 пунктов;
• поместим узлы Г и Н в прямоугольники с закругленными вершинами и с одинарной границей. Увеличим стороны прямоугольников на 6 пунктов;
• с надписями на стрелках никаких действий производить не будем, а лишь отметим, что обрамление надписи автоматисески приводит к увеличению размера ее шрифта.
Для реализации указанных действий вместо кода (11) надо будет использовать код (13). По этому коду и выводится требуемая диаграмма (14).
$$\xymatrix{
& *+<18р^[о][Е-]{А} \ar@{~>}@/~2pc/[r]_a \агв{~>Шаг]~{Ь+77} &
В ^гЗ/.О^рс/Ы-с \ar0dd, rd)[] &
*+[о][Е-]{С} ^^{^Шг^^ & \\
*++[о][Е=]{Б} \ar@{~>}[ur]_{e+e-2} \arM~f &&&& *++[Е-,]{Е}\\ &
*+[Е-:<4pt>]{Е} \ar[r]_g &
*+[Е-]{С} \ar[r]/h \ar@/-5pt/[ruu]-<(0.7)i & *+[Е-:<4pt>]{H} \ar[uu]_<(0.2)j ^^{-^Ш^к &}$$
Параллельные сдвиги стрелок. Если на диаграмме (14) кроме стрелки О А мы проведем также и стрелку АО, то хорошего будем мало - стрелки "сольются то есть пройдут по одной осевой линии. По этим же соображениям нормально не удается провести из одного узла в другой узел несколько стрелок. Одним из решений данной проблемы являются изгибы стрелок. Но есть и другое решение. Стрелки надо уметь слегка смещать параллельно основному направлению в ту или другую сторону. И средства для этого есть. В команду вывода стрелки следует добавить опцию @<5>, где 5 - величина смещения вправо (5 > 0) или влево (5 < 0), если смотреть с конца стрелки. Величина 5 должна быть указана вместе с единицей измерения.
Проделаем с диаграммой (14) следующие изменения. Сместим стрелку ОА влево на 2 пункта. Проведем стрелку АО, смещенную вправо на 2 пункта. Сместим стрелку ОГ вправо на 2 пункта. Проведем еще одну стрелку ОГ, смещенную влево на 2 пункта. Сделать это можно следующей модификацией кода
(13):
$$\xymatrix{
& *+<18р^[о][Е-]{А} ^вС^в/^рс/М.а \агв{~>Шаг]-{Ъ+77}
\ar@<-2pt>[dl]_{v} &
В ^гФ/^^рс/Ы-с \аг@(Ы,^)[] &
*+[о][Е-]{С} & \\
*++[о][Е=]{Б} \ar@<-2pt>@{~>}[ur]_{e+e-2} (15)
\аг@<2р^^^^
^г^^р^^г^щ- &&&&
*++[Е-,]{Е}\\ &
*+[Е-:<4р^]{Е} \ar[r]_g &
*+[Е-]{С} \ar[r]|h \ar@/-5pt/[ruu]-<(0.7)i &
*+[Е-:<4р^]{Н} \ar[uu]_<(0.2)j ^^{-^Ш^к &}$$
:1б)
стьк^-чн)
Тексты в диаграммах. Как мы уже отмечали, в диаграммах роль узлов и надписей к ним могут служить любые выражения, в том числе и тексты. Для вставки текста можно использовать команды \text{...} или \txt{...}. Во втором случае можно формировать многострочные тексты по следующей схеме \txt{...\\...}. Изменим код (15) так, чтобы на диаграмме (16) у узла Н сохранился тип рамки, но текст стал словом "че-реш-ня"с двумя переносами на следующую строку. Далее, надпись к на стрелке НЕ должна превратиться в слово "амбар а надпись й на стрелке СЕ должна стать комбинацией из формулы
ГО
и текста вида: " ^ р- - это ряд!". Далее, немного сместим надпись Н на стрелке к=1
ОН поближе к О. Все это реализуется по такому коду:
\newcommand{\dddd}
{{\sum\limits_{k=1}-\infty \frac{1}{k-3}}\text{ - это ряд!}} $$\xymatrix{
& *+<18р^[о][Е-]{А} \аг@{~>}@/-2рс/Ы_а \ar@{~>}[ddr]-{b+77} \ar@<-2pt>[dl]_{v} &
В \аг@/_0.5рс/Ы-с ^г^Ы,^)^ &
*+[о][Е-]{С} \ar@{<=>}[dr]-{\dddd}_m & \\
*++[о][Е=]{Б} \ar@<-2pt>@{~>}[ur]_{e+e-2}
^гФ^р^^г]^ ^г^^р^^г^щ- &&&&
*++[Е-,]{Е}\\ &
*+[Е-:<4р^]{Е} \ar[r]_g &
*+[Е-]{С} \ar[r]| >(0.6)h \ar@/-5pt/[ruu]-<(0.7)i & *+[F-:<4pt>]{\txt{че-\\реш-\\ня}}
\ar[uu]_<(0.2)j \ar@{-->}[ur]_{\txt{амбар}} &}$$
(17)
Пояснения, по-видимому, требует лишь формирование комбинации из текста и формулы. Дело в том, что вместо надписи й мы подставили в \xymatrix команду \dddd, а определили ее отдельно в \newcommand. Сделано это лишь с одной целью - избежать громоздкой записи в \xymatrix{:}.
Вывод по коду (17) таков:
И еще один важный момент. Из \xymatrix{:} можно формировать фрагменты документа (тексты, формулы, тексты с формулами) с размещением их где угодно внутри или вне матрицы. Кроме того, от новых объектов можно проводить стрелки с надписями до любых узлов матрицы, в том числе и до неопределенных узлов. Опишем, как это делается, и, прежде всего, об используемых для этого средствах. С нашей задачей справляются две команды \save и \restore, которые обычно используются в таком контексте: {W}\save[] ± <
а, в >*\txt<width>{вставка} стрелки \restore, где:
• Ш - конкретный узел диаграммы;
• ± < а, в > - смещение во "внешнюю"точку на а единиц по горизонтали и на в единиц по вертикали относительно W с учетом знака перед угловыми скобками. Заметим, что знак плюс или минус перед < а, в > стоять должен, а у величин а и в необходимо указывать единицы измерения;
• width - ширина вставляемого бокса для текста в тех или иных единицах измерения. В тексте могут быть формулы;
• если из вставленного фрагмента рисуются стрелки в узлы матрицы, то можно придерживаться такого соглашения. Координаты W принимаются за [0, 0]. А остальные узлы матрицы пересчитываются относительно W. Скажем [2, -1] - это узел, к которому мы перемещаемся из W по [ddl], а [-2, 1] - по [uur]. Таким образом, все узлы матрицы, в том числе и неопределенные, получают целочисленные координаты. Их и надо использовать при создании стрелок.
Пусть, например, из диаграммы (18) требуется получить диаграмму:
Прыжок от узла В в сторону от матрицы для создания данного текста и рисование стрелки из внешней точки в В.
Для этого в код (17) вместо узла В следует вставить фрагмент:
{B}\save[]+<7.5cm,-1.5cm>*\txt<8pc>{
Прыжок от узла В в сторону от матрицы для создания данного текста и рисование из внешней точки стрелки в В.} \ar@/_4pc/[0,0]_<(0.47){\txt{возврат}} \restore
Масштабирование и вращение диаграмм. Масштабирование и вращение диаграмм реализуется модификаторами, приведенными в табл. 5. Располагать их следует сразу за словом хушаШх перед открывающей фигурной скобкой (\xymatrix:{). Масштабирование диаграмм происходит за счет изменения расстояния между строками и столбцами их матриц. Вращение диаграмм воз-
возврат
можно на k ■ 450 (k = 1, 2,8).
Таблица Б
Масштабирование и вращение диаграмм
Модификатор Действие
© = а задает расстояние между строками и столбцами матрицы в а единиц. Знак = можно заменить на +, +=, -= соответственно с действиями: увеличить; увеличить не больше, чем; уменьшить; уменьшить, по крайней мере.
©R = а задает расстояние между строками матрицы (см. @ = а)
©C = а задает расстояние между столбцами матрицы
©M = а задает поле пробелов для узлов в а единиц
©W = а задает поле пробелов по ширине узлов в а единиц
©H = а задает поле пробелов по высоте узлов в а единиц
©L = а задает поле пробелов для надписей на стрелках
©І задает все поля пробелов между узлами равными
©1G действует как @ !, но игнорирует размеры узлов
©1R задает равные расстояния между строками
©Ю задает равные расстояния между столбцами
©dir устанавливает поворот диаграммы против часовой стрелки на угол k ■ 450 (k = 1, 2,:, 8). Значения dir в модификаторе равно надписям у концов стрелок на рисунке справа при таком соответствии: ur — (k =1), u — (k = 2),...,d — (k = 7),r — (k = 8) ¥
Рассмотрим пример. Если вместо "\xymatrix{:" в коде (17) написать "\xymatrix@=0.4cm{:", то получим диаграмму, являющуюся масштабированием диаграммы (18):
Еще один пример.
Если вместо "\xymatrix{:" в коде (17) написать "\xymatrix@l@=0.3cm{:",
то получим диаграмму, являющуюся поворотом диаграммы (18) на 180° против
часовой стрелки:
Пересечение стрелок. Если в диаграмме две стрелки пересекаются, то хотелось бы явно указать на одной из них место разрыва. Здесь возможны такие случаи:
a) обе стрелки прямые, разрыв указывается на одной из них;
b) одна стрелка прямая, вторая изогнутая, а разрыв указывается на изогнутой стрелке;
c) одна стрелка прямая, вторая изогнутая, а разрыв указывается на прямой стрелке;
ё) обе стрелки изогнутые, разрыв указывается на одной из них.
Будем разбирать эти случаи на следующей диаграмме:
В-^ С
Е
а) Прямые стрелки АО и ЕС. Разрыв можно обозначить или на стрелке АО, или на стрелке ЕС, или на обеих стрелках. Чтобы сделать это, скажем, на стрелке АО, ее следует задавать не стандартным способом \arCddrl~b, а в виде
\arCddrl~b |!{[^];[гг]\Ьо1е.
Опишем, как сформировано дополнение |!{[dd];[rr]\ho1e и что оно означает. Прежде всего, на {[dd];[rr]} можно смотреть как на обозначение стрелки ЕС - относительно узла А указано ее начало [dd] и ее конец [гг] . Далее,
!{М;[гг]} - это позиция пересечения стрелок АО и ЕС. Символ " |" означает, что далее идет надпись на стрелке АО. Но вместо выражения, определяющего эту надпись, стоит команда \ho1e (отверстие, дырка), которая и формирует на АО прорезь. Таким образом, по коду:
$$\хута^1х{
& А \аг[г]~а \ar[ddr]~{b} |!{[dd];[rr]}\ho1e &
В \аг[г]~с & С \artdrj~d_m & \\
Б ^гЕи^^е} \artdrj~f ^гФ^З.Брс/^ггг] &&&& Е \\
& Е \ar[r]_g \ar[rruu]
& С \arMlh \ar@/_1.5pc/[ruu]_w & Н ^г^г^к &}$$
выводится диаграмма:
А^^- ВС / \ /К
е / Л\ — ^ /
Б \ь /\ Е
Е —^ С—н^ Н
Если бы мы желали сделать прорезь не на АС, а на ЕС, то код формирования ЕС следовало бы расширить дополнением |!{[ии];[г]}\Ьо1е.
Ь) Изогнутая стрелка БН и прямая стрелка ЕС. Разрыв требуется обозначить на БН. В данном случае следует поступить так же, как и в случае а. А именно, при построении БН добавить код |!{[<Зг];[иггг]}\Ьо1е. В результате будет выведена диаграмма:
А —В-^ С
Е
с) Изогнутая стрелка БН и прямая стрелка АС. Разрыв требуется обозначить на АС. Предыдущим способом поставленную задачу не решить. В данном случае позицию разрыва АС необходимо указывать в виде |<(0\Ьо1е, а параметр Ї подбирать "на глаз"(0 ^ Ї ^ 1). Далее, если на этой же стрелке есть и другие разрывы, то их следует определять в порядке от начала стрелки к концу стрелки. Например, в нашем случае это можно сделать одним из следующих способов:
\аг[ёёг]~{Ь> |<(0.133)\Ьо1е |!{[ёё];[гг]}\Ьо1е, \аг[ё<Зг]~{Ь} |<(0.133)\Ьо1е |<(0.64)\Ьо1е.
Таким образом, по коду:
$$\хуша^1х{
& А \аг[г]~а
\аг[ёёг]л{Ъ} |<(0.133)\Ьо1е |!{[ёё];[гг]}\Ьо1е & В \аг[г]~с & С \аг[ёг]лё_ш &\\
Б \аг[иг]л{е} \аг^^^
\аг@/л3.5рс/[ёггг] |!{^г];[иггг]}\Ьо1е&&&&Е\\
& Е \ar[r]_g \аг[ггии]
& С \агЫ|Ь ^^/^^рсА^и^м-& Н \ar[ur]_k &}$$ выводится диаграмма:
ё) Изогнутые стрелки БИ и ОС. Разрыв требуется обозначить на СС. Здесь, как и в предыдущем случае, позицию разрыва следует указывать в виде |<^)\Ьо1е, а параметр Ь подбирать "на глаз" (0 ^ ^ 1). В нашем случае, ес-
ли в последний код перед символами &&&& вставить дополнение |(0.88)\Ьо1е, то получим диаграмму:
Дополнения. В заключительном пункте мы рассмотрим еще несколько возможностей, предоставляемых средствами пакета ху, которые могут улучшить вид выводимых диаграмм.
A. Цветные стрелки. Для раскрашивания конкретной стрелки в ее код следует добавить @-опцию цвета в виде @{цвет}. Например, .[-2шш]
B. Стрелки, проскакивающие вершины. Стрелка "проскакивает" вершину X матрицы, если, в соответствии с кодом, проходит через нее, но не завершается в ней. Для указания того, что вершина X не конечная для данной стрелки, в
А-^ В-^ С
д
А-^ В С
д
ее определении перед смещением (^г|, [игг], и т. п.) необходимо поставить знак " ’ " (прямой штрих). Например, по коду
$$\xymatrix@1{
{0} \аг @{|->} 5[ёг]Ла ’[гг]~Ъ 5[ёггг]~с 5[аагг]^а [аа] \аг @[гва][аа] &
{\circ} & {2} & {\circ} \\
{6} & {1} & {\circ} & {3} \\
{В} & {5} & {4} & {\circ} }$$ выводится диаграмма:
В-----5----4 о
Здесь всего две стрелки, идущие из узла О в узел В. Что касается красной стрелки ОВ, то она обычная. Узел 6 в ее определении не участвует. Вторая стрелка ОВ проскакивает узлы 1, 2, 3 и 4. Узел 5 в определении данной стрелки не фигурирует. Надписи на таких стрелках можно ставить на каждом звене. Узлы матрицы, представленные маленькими кружками, выводятся командой \circ. [-2шш]
С. Экзотические изгибания стрелок. Стрелки можно комбинировать из четвертинок окружностей разного радиуса и отрезков прямых линий. Например, по коду:
$$\xymatrix@1{
\xymatrix{
А ^г £п[г][г] & В \ат £иг[г][г] &
С ^г ^гЫЫ & Б ^г 'аЫЫ & е \аг 'а[1] 'а[1] £а/30рШ]_а £1[1]~ъ
[1111]~е}
выводится диаграмма:
Мы не будем разбирать код примера, а лишь отметим, что последовательности £dir[:] или £dir/a[:] (dir - направление, а - количество единиц измерения, " £ " - символ наклонного штриха) и определяют позиции частей окружностей и их радиусы. Отметим, что на подобных экзотических стрелках можно выводить надписи на каждом ее звене. Например, на стрелке FA из пяти звеньев выведено 3 надписи - буквы a, b и e. [-2mm]
D. Нумерация диаграмм. Для автоматической нумерации диаграмм, как и любых других математических объектов, следует применять окружения align, equation, gather, eqnarray и т. д. При расстановке номеров пользователем, можно применять команду \tag, например, в такой схеме:
\begin{equation}\tag{77}
\vcenter{
\xymatrix{:}
}
\end{equation}
[-2mm]
E. Макросы и диаграммы. При работе с диаграммами можно применять пользовательские макросы. Ограничимся рассмотрением одного примера с макросом, имеющим пять обязательных аргументов. Первый из них задает расстояние между вершинами матрицы, а остальные - имена четырех узлов диаграммы. По коду
\newcommand{\squa}[5]{
\vcenter{
\xymatrix@=#1{#2 \ar[r] \ar[d] & #3 \ar[d]\\
#4 \ar[r] & #5}}}
$$ \squa{0.7cm}{A}{B}{C}{D}\quad
\squa{1.1cm}{A5}{B5}{C’}{D5}\quad
\squa{1.5cm}{A55}{B55}{C55}{D55}$$
получаем:
СПИСОК ЦИТИРОВАННОЙ ЛИТЕРАТУРЫ
1. Rose K. H. XY-pic User’s Guide. Version 3.7, Feb. 16, 1999. Available as part of the xypic LATEX package.
2. Rose K. H., Moore, R. XY-pic Reference Manual.
URL: http://texdoc.net/texmf-dist/doc/generic/xypic/xyrefer.pdf
3. Filipp Ouvaton: XY-pic: Enkonduko pri Xymatrix.
URL: http://filip.ouvaton.org/xypic/xymatrix/index.html
Тульский государственный педагогический университет им. Л. Н. Толстого Поступило 28.11.2013