%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setcounter{chapter}{4}
\newcommand{\graphicscompanion}{\emph{The \LaTeX{} Graphics Companion}~\cite{graphicscompanion}} 
\newcommand{\hobby}{\emph{Руководство пользователя MetaPost}~\cite{metapost}}
\newcommand{\hoenig}{\emph{\TeX{} Unbound}~\cite{unbound}}
\newcommand{\graphicsinlatex}{\emph{Графика в  \LaTeXe{}}~\cite{ursoswald}}

\chapter{Генерация математической графики}

\begin{intro}
Большинство людей пользуются \LaTeX\ для верстки текста. Но \LaTeX{} также
предлагает, хотя и ограниченную, возможность генерации графики по
текстовому описанию. Более того, существует множество расширений \LaTeX{},
обходящих эти ограничния. Эта глава расскажет о нескольких из них.
\end{intro}

\section{Обзор}

Окружение \ei{picture} позволяет программировать картинки прямо в
среде \LaTeX. Подробное описание приводится в \manual. С одной
стороны, при этом есть довольно серьезные ограничения, поскольку как
наклоны отрезков, так и радиусы дуг сильно ограничены в возможных
значениях. С другой стороны, в окружении \ei{picture} существуюет
команда \ci{qbezier}, где <<\texttt{q}>> означает
<<квадратичный>>. Множество часто используемых кривых, таких как
окружности, эллипсы или цепные линии, можно удовлетворительно
аппроксимировать квадратичными кривыми Безье, хотя для этого и
требуются некоторые математические усилия. Кроме того, когда блоки
команд \ci{qbezier} генерируются из языка программирования, скажем,
Java, окружение \ei{picture} становится довольно мощным.

Хотя программирование картинок прямо из \LaTeX{} серьезно ограничено и
часто довольно утомительно, оно все же бывает полезным. Полученные
таким образом документы получаются компактными, и нет необходимости
прилагать к документу графические файлы.

Пакеты наподобие \pai{epic} и \pai{eepic} (описанные, например, в
\companion) или \pai{pstricks} помогают снять ограничения
оригинального окружения \ei{picture} и сильно развивают графические
возможности \LaTeX{}.

Тогда как первые два пакета просто улучшают окружение \ei{picture},
пакет \pai{pstricks} имеет собственное окружение для рисования,
\ei{pspicture}. Возможности \pai{pstricks} проистекают их того, что он
широко использует функциональность \PSi{}. Кроме этого пакета,
существует и множество других, написанных для конкретных задач. Одним
из них является пакет \texorpdfstring{\Xy}{Xy}-pic, описанный в конце
этой главы. Множество таких пакетов детально описано в
\graphicscompanion{} (не путать с \companion).

Возможно, самым мощным графическим инструментом, связанным с \LaTeX{},
является \MP, программа-близнец написанной Donald E. Knuth программы
\texttt{METAFONT}. \MP{} использует очень мощный и математически
изощренный язык \texttt{METAFONT}. В отличие же от \texttt{METAFONT},
генерирующего растры, \MP{} генерирует файлы \EPSi{}, которые можно
импортировать в \LaTeX{}. Далее смотрите \hobby, или введение в
\cite{ursoswald}. 

Очень подробно работа с графикой (и шрифтами) в \LaTeX{} и \TeX{}
описана в \hoenig.

\section{Окружение \texttt{picture}}
\secby{Urs Oswald}{osurs@bluewin.ch}

\subsection{Основные команды}

Окружение \ei{picture} создается одной из двух команд:
\begin{lscommand}
\ci{begin}\verb|{picture}(|$x,y$\verb|)|\ldots\ci{end}\verb|{picture}|
\end{lscommand}
\noindent либо
\begin{lscommand}
\ci{begin}\verb|{picture}(|$x,y$\verb|)(|$x_0,y_0$\verb|)|\ldots\ci{end}\verb|{picture}|
\end{lscommand}

Числа $x,\,y,\,x_0,\,y_0$ измеряются в размерности \ci{unitlength},
которую можно менять в любой момент (но не внутри окружения
\ei{picture}) командами наподобие
\begin{lscommand}
\ci{setlength}\verb|{|\ci{unitlength}\verb|}{1.2cm}|
\end{lscommand}

Значение \ci{unitlength} по умолчанию составляет 1pt. Первая пара,
$(x,y)$, диктует резервирование для картинки прямоугольного
пространства внутри документа. Необязательная вторая пара,
$(x_0,y_0)$, присваивает произвольные координаты нижнему левому углу
зарезервированного прямоугольника.

Большинство команд рисования имеют одну из двух форм:
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\emph{объект}\verb|}|
\end{lscommand}
\noindent или
\begin{lscommand}
\ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{объект}\verb|}|\end{lscommand}

Кривые Безье являются исключением. Их рисуют командой
\begin{lscommand}
\ci{qbezier}\verb|(|$x_1,y_1$\verb|)(|$x_2,y_2$\verb|)(|$x_3,y_3$\verb|)|
\end{lscommand}

\subsection{Отрезки}

\begin{example}
\setlength{\unitlength}{5cm}
\begin{picture}(1,1)
  \put(0,0){\line(0,1){1}}
  \put(0,0){\line(1,0){1}}  
  \put(0,0){\line(1,1){1}}  
  \put(0,0){\line(1,2){.5}}
  \put(0,0){\line(1,3){.3333}}
  \put(0,0){\line(1,4){.25}}  
  \put(0,0){\line(1,5){.2}}
  \put(0,0){\line(1,6){.1667}}
  \put(0,0){\line(2,1){1}}
  \put(0,0){\line(2,3){.6667}}
  \put(0,0){\line(2,5){.4}}
  \put(0,0){\line(3,1){1}}  
  \put(0,0){\line(3,2){1}}
  \put(0,0){\line(3,4){.75}}
  \put(0,0){\line(3,5){.6}}
  \put(0,0){\line(4,1){1}}
  \put(0,0){\line(4,3){1}}  
  \put(0,0){\line(4,5){.8}}
  \put(0,0){\line(5,1){1}}
  \put(0,0){\line(5,2){1}}
  \put(0,0){\line(5,3){1}}
  \put(0,0){\line(5,4){1}}
  \put(0,0){\line(5,6){.8333}}
  \put(0,0){\line(6,1){1}}
  \put(0,0){\line(6,5){1}}
\end{picture}
\end{example}
Отрезки рисуются командой
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{line}\verb|(|$x_1,y_1$\verb|){|$length$\verb|}}|
\end{lscommand}
Команда \ci{line} имеет два аргумента:
\begin{enumerate}
 \item вектор направления,
 \item длина.
\end{enumerate}
Компоненты вектора ограничены в своем значении набором целых чисел
\[
 -6,\,-5\,\ldots,\,5,\,6,
\]
и они обязаны быть взаимно простыми (не иметь общего делителя, кроме
1). Иллюстрация показывает все 25 возможных значений наклона в первом
квадранте. Длина выражается в единицах \ci{unitlength}. Аргумент длины
задает вертикальную координату в случае вертикального отрезка и
горизонтальную~--- во всех остальных случаях.

\subsection{Векторы}

\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(60,40)
  \put(30,20){\vector(1,0){30}}
  \put(30,20){\vector(4,1){20}}
  \put(30,20){\vector(3,1){25}}
  \put(30,20){\vector(2,1){30}}
  \put(30,20){\vector(1,2){10}}
  \thicklines
  \put(30,20){\vector(-4,1){30}}
  \put(30,20){\vector(-1,4){5}}
  \thinlines
  \put(30,20){\vector(-1,-1){5}}
  \put(30,20){\vector(-1,-4){5}}
\end{picture}
\end{example}
Векторы рисуются командой
\begin{lscommand}
\ci{put}\verb|(|$x,y$\verb|){|\ci{vector}\verb|(|$x_1,y_1$\verb|){|$length$\verb|}}|
\end{lscommand}
Для векторов значения вектора направления еще более ограничены в
значениях, чем для отрезков, а именно~--- числами
\[
  -4,\,-3,\,\ldots,\,3,\,4.
\]
Компоненты также обязаны быть взаимно простыми (не иметь общего
делителя, кроме 1). Заметьте эффект команды \ci{thicklines} на двух
векторах, указывающих в верхний левый угол.

\subsection{Окружности}

\begin{example}
\setlength{\unitlength}{1mm}
\begin{picture}(60, 40)
  \put(20,30){\circle{1}}
  \put(20,30){\circle{2}}
  \put(20,30){\circle{4}}
  \put(20,30){\circle{8}}
  \put(20,30){\circle{16}}
  \put(20,30){\circle{32}}
  
  \put(40,30){\circle{1}}
  \put(40,30){\circle{2}}
  \put(40,30){\circle{3}}
  \put(40,30){\circle{4}}
  \put(40,30){\circle{5}}
  \put(40,30){\circle{6}}
  \put(40,30){\circle{7}}
  \put(40,30){\circle{8}}
  \put(40,30){\circle{9}}
  \put(40,30){\circle{10}}
  \put(40,30){\circle{11}}
  \put(40,30){\circle{12}}
  \put(40,30){\circle{13}}
  \put(40,30){\circle{14}}
  
  \put(15,10){\circle*{1}}
  \put(20,10){\circle*{2}}
  \put(25,10){\circle*{3}}
  \put(30,10){\circle*{4}}
  \put(35,10){\circle*{5}}
\end{picture}
\end{example}
Команда
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{circle}\verb|{|\emph{диаметр}\verb|}}|
\end{lscommand}
\noindent рисует окружность с центром в точке $(x,y)$ и диаметром (не
радиусом!) \emph{диаметр}. Окружение \ei{picture} позволяет рисовать
окружности диаметром не более примерно 14\,мм, и даже в этих пределах
допустимы не все диаметры. Команда \ci{circle*} рисует круг
(заполненную окружность).

Как и в случае отрезков, вы можете прибегать к помощи дополнительных
пакетов, таких, как \pai{eepic} или \pai{pstricks}.
Подробное описание этих пакетов приведено в \graphicscompanion.

Существует также и выход в рамках окружения \ei{picture}. Если вы не
боитесь выполнения необходимых вычислений (или возлагаете их на
программу), то можно изображать произвольные окружности и эллипсы при
помощи кривых Безье. Примеры и исходные тексты на Java приведены в
\graphicsinlatex.

\subsection{Текст и формулы}

\begin{example}
\setlength{\unitlength}{1cm}
\begin{picture}(6,5)
  \thicklines
  \put(1,0.5){\line(2,1){3}}
  \put(4,2){\line(-2,1){2}}
  \put(2,3){\line(-2,-5){1}}
  \put(0.7,0.3){$A$}
  \put(4.05,1.9){$B$}
  \put(1.7,2.95){$C$}
  \put(3.1,2.5){$a$}
  \put(1.3,1.7){$b$}
  \put(2.5,1.05){$c$}
  \put(0.3,4){$F=
    \sqrt{s(s-a)(s-b)(s-c)}$}  
  \put(3.5,0.4){$\displaystyle
    s:=\frac{a+b+c}{2}$}
\end{picture}
\end{example}
Как показывает этот пример, текст и формулы могут размещаться в
окружении \ei{picture} обычным способом~--- командой \ci{put}.

\subsection{Команды \ci{multiput} и \ci{linethickness}}

\begin{example}
\setlength{\unitlength}{2mm}
\begin{picture}(30,20)
  \linethickness{0.075mm}
  \multiput(0,0)(1,0){31}%
    {\line(0,1){20}}
  \multiput(0,0)(0,1){21}%
    {\line(1,0){30}}
  \linethickness{0.15mm}    
  \multiput(0,0)(5,0){7}%
    {\line(0,1){20}}
  \multiput(0,0)(0,5){5}%
    {\line(1,0){30}}
  \linethickness{0.3mm}    
  \multiput(5,0)(10,0){3}%
    {\line(0,1){20}}
  \multiput(0,5)(0,10){2}%
    {\line(1,0){30}}
\end{picture}
\end{example}
Команда
\begin{lscommand}
  \ci{multiput}\verb|(|$x,y$\verb|)(|$\Delta x,\Delta y$\verb|){|$n$\verb|}{|\emph{объект}\verb|}|
\end{lscommand}
\noindent имеет 4 аргумента: начальная точка, вектор перехода от
одного объекта к следующему, число объектов и собственно объект для
рисования. Команда \ci{linethickness} относится к горизонтальным и
вертикальным отрезкам, но никогда~--- к наклонным или
окружностям. Она, однако относится также и к квадратичным кривым
Безье! 

\subsection{Овалы. Команды \ci{thinlines} и \ci{thicklines}}

\begin{example}
\setlength{\unitlength}{1cm}
\begin{picture}(6,4)
  \linethickness{0.075mm}
  \multiput(0,0)(1,0){7}%
    {\line(0,1){4}}
  \multiput(0,0)(0,1){5}%
    {\line(1,0){6}}
  \thicklines
  \put(2,3){\oval(3,1.8)} 
  \thinlines
  \put(3,2){\oval(3,1.8)} 
  \thicklines
  \put(2,1){\oval(3,1.8)[tl]} 
  \put(4,1){\oval(3,1.8)[b]} 
  \put(4,3){\oval(3,1.8)[r]} 
  \put(3,1.5){\oval(1.8,0.4)}     
\end{picture}
\end{example}
Команда
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)}|
\end{lscommand}
\noindent или
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|){|\ci{oval}\verb|(|$w,h$\verb|)[|\emph{позиция}\verb|]}|
\end{lscommand}
\noindent выводит овал с центром в $(x,y)$, имеющий длину $w$ и высоту
$h$. Необязательный аргумент \emph{позиция} может принимать значения
\texttt{b}, \texttt{t}, \texttt{l} и \texttt{r} (вниз/вверх/влево/вправо)
и может сочетать эти значения, как на приведенном примере.

Толщина линий может управляться одной из двух команд:\\
\ci{linethickness}\verb|{|\emph{длина}\verb|}|
с одной стороны, и \ci{thinlines} и \ci{thicklines}~--- с другой. В то
время, как \ci{linethickness}\verb|{|\emph{длина}\verb|}| влияет
только на горизонтальные и вертикальные линии (и квадратичные кривые
Безье), \ci{thinlines} и \ci{thicklines} влияет на наклонные отрезки,
окружности и овалы.

\subsection{Повторное использование блоков картинки}

\begin{example}
\setlength{\unitlength}{0.5mm}
\begin{picture}(120,168)
\newsavebox{\foldera}% объявление
\savebox{\foldera}
  (40,32)[bl]{% определение 
  \multiput(0,0)(0,28){2}
    {\line(1,0){40}}
  \multiput(0,0)(40,0){2}
    {\line(0,1){28}}
  \put(1,28){\oval(2,2)[tl]}
  \put(1,29){\line(1,0){5}}
  \put(9,29){\oval(6,6)[tl]}
  \put(9,32){\line(1,0){8}}
  \put(17,29){\oval(6,6)[tr]}
  \put(20,29){\line(1,0){19}}
  \put(39,28){\oval(2,2)[tr]}  
}
\newsavebox{\folderb}% объявление
\savebox{\folderb}
  (40,32)[l]{%        определение 
  \put(0,14){\line(1,0){8}}
  \put(8,0){\usebox{\foldera}}
}
\put(34,26){\line(0,1){102}} 
\put(14,128){\usebox{\foldera}}
\multiput(34,86)(0,-37){3}
  {\usebox{\folderb}} 
\end{picture}
\end{example}
Блок рисунка может быть \emph{объявлен} командой
\begin{lscommand}
  \ci{newsavebox}\verb|{|\emph{название}\verb|}|
\end{lscommand}
\noindent а затем \emph{определен} командой
\begin{lscommand}
  \ci{savebox}\verb|{|\emph{название}\verb|}(|\emph{ширина,высота}\verb|)[|\emph{позиция}\verb|]{|\emph{содержание}\verb|}|
\end{lscommand}
\noindent и, наконец, сколько угодно раз \emph{нарисован} командой
\begin{lscommand}
  \ci{put}\verb|(|$x,y$\verb|)|\ci{usebox}\verb|{|\emph{название}\verb|}|
\end{lscommand}

Необязательный аргумент \emph{позиция} определяет точку привязки
блока. В приведенном примере он установлен в значение \texttt{bl}, что
помещает точку привязки в нижний левый угол блока. Другие варианты
значения~--- \texttt{t} (вверх) и \texttt{r} (вправо).

Аргумент \emph{название} фактически является командой \LaTeX{} (отсюда
и обратная косая черта перед ним в рассматриваемом примере). Блоки
могут быть вложенными: в этом примере внутри определения \ci{folderb}
используется \ci{foldera}.

Команду \ci{oval} пришлось применить потому что команда \ci{line} не
работает, если длина отрезка меньше примерно 3\,мм.

\subsection{Квадратичные кривые Безье}

\begin{example}
\setlength{\unitlength}{1cm}
\begin{picture}(6,4)
  \linethickness{0.075mm}
  \multiput(0,0)(1,0){7}
    {\line(0,1){4}}
  \multiput(0,0)(0,1){5}
    {\line(1,0){6}}
  \thicklines
  \put(0.5,0.5){\line(1,5){0.5}}    
  \put(1,3){\line(4,1){2}} 
  \qbezier(0.5,0.5)(1,3)(3,3.5)
  \thinlines   
  \put(2.5,2){\line(2,-1){3}}
  \put(5.5,0.5){\line(-1,5){0.5}}
  \linethickness{1mm}
  \qbezier(2.5,2)(5.5,0.5)(5,3)
  \thinlines
  \qbezier(4,2)(4,3)(3,3)
  \qbezier(3,3)(2,3)(2,2)
  \qbezier(2,2)(2,1)(3,1)
  \qbezier(3,1)(4,1)(4,2)
\end{picture}
\end{example}
Как показывает этот пример, разбиение окружности на четыре квадратичных
кривых Безье дает неудовлетворительный результат. Требуется как
минимум восемь. Иллюстрация снова показывает влияние команды
\ci{linethickness} на горизонтальные и вертикальные линии, а команд
\ci{thinlines} и \ci{thicklines}~--- на наклонные отрезки. Она также
показывает, что обе команды влияют на квадратичные кривые Безье, и
каждая следующая команда отменяет результаты предыдущих.

Пусть $P_1=(x_1,\,y_1),\,P_2=(x_2,\,y_2)$ задают конечные точки, а
$m_1,\,m_2$~--- соответствующие наклоны % касательные?
квадратичной кривой Безье. Тогда промежуточная управляющая точка
$S=(x,\,y)$ задается уравнением
\begin{equation} \label{zwischenpunkt}
  \left\{
    \begin{array}{rcl}
      x & = & \displaystyle \frac{m_2 x_2-m_1x_1-(y_2-y_1}{m_2-m_1}, \\
      y & = & y_i+m_i(x-x_i)\qquad (i=1,\,2).
    \end{array}
  \right.
\end{equation}
\noindent В \graphicsinlatex\ приведена Java-программа, генирующая
    необходимые команды  \ci{qbezier}.

\subsection{Цепная линия}

\begin{example}
\setlength{\unitlength}{1.3cm}
\begin{picture}(4.3,3.6)(-2.5,-0.25)
  \put(-2,0){\vector(1,0){4.4}}
  \put(2.45,-.05){$x$}
  \put(0,0){\vector(0,1){3.2}}
  \put(0,3.35){\makebox(0,0){$y$}}
  \qbezier(0.0,0.0)(1.2384,0.0)
    (2.0,2.7622) 
  \qbezier(0.0,0.0)(-1.2384,0.0)
    (-2.0,2.7622)
  \linethickness{.075mm}
  \multiput(-2,0)(1,0){5}
    {\line(0,1){3}}
  \multiput(-2,0)(0,1){4}
    {\line(1,0){4}}
  \linethickness{.2mm}
  \put( .3,.12763){\line(1,0){.4}}
  \put(.5,-.07237){\line(0,1){.4}}
  \put(-.7,.12763){\line(1,0){.4}}
  \put(-.5,-.07237){\line(0,1){.4}}
  \put(.8,.54308){\line(1,0){.4}}
  \put(1,.34308){\line(0,1){.4}}
  \put(-1.2,.54308){\line(1,0){.4}}
  \put(-1,.34308){\line(0,1){.4}}
  \put(1.3,1.35241){\line(1,0){.4}}
  \put(1.5,1.15241){\line(0,1){.4}}
  \put(-1.7,1.35241){\line(1,0){.4}}
  \put(-1.5,1.15241){\line(0,1){.4}}
  \put(-2.5,-0.25){\circle*{0.2}}
\end{picture}
\end{example}

На этой иллюстрации каждая симметричная половина цепной линии $y=\cosh
x -1$ аппроксимирована квадратичной кривой Безье. Правая половина
кривой заканчивается в точке \((2,\,2.7622)\), наклон в которой имеет
значение \(m=3.6269\). Вновь используя уравнение
(\ref{zwischenpunkt}), мы можем вычислить внутренние управляющие
точки. Ими оказались $(1.2384,\,0)$ и $(-1.2384,\,0)$. Крестики
отмечают точки \emph{настоящей} цепной линии. Ошибка едва заметна,
будучи меньше одного процента.

Этот пример показывает использование необязательного аргумента команды
\verb|\begin{picture}|. Картинка определена в удобных
<<математических>> координатах, тогда как команда
\begin{lscommand} 
  \ci{begin}\verb|{picture}(4.3,3.6)(-2.5,-0.25)|
\end{lscommand}
\noindent присваивает ее нижнему левому углу (отмеченному черным
кружком) координаты $(-2.5,-0.25)$. 

\subsection{Скорость в специальной теории относительности}

\begin{example}
\setlength{\unitlength}{1cm}
\begin{picture}(6,4)(-3,-2)
  \put(-2.5,0){\vector(1,0){5}}
  \put(2.7,-0.1){$\chi$}
  \put(0,-1.5){\vector(0,1){3}}
  \multiput(-2.5,1)(0.4,0){13}
    {\line(1,0){0.2}}
  \multiput(-2.5,-1)(0.4,0){13}
    {\line(1,0){0.2}}
  \put(0.2,1.4)
    {$\beta=v/c=\tanh\chi$}
  \qbezier(0,0)(0.8853,0.8853)
    (2,0.9640)
  \qbezier(0,0)(-0.8853,-0.8853)
    (-2,-0.9640)
  \put(-3,-2){\circle*{0.2}}
\end{picture}
\end{example}

Управляющие точки двух кривых Безье были вычислены по формулам
(\ref{zwischenpunkt}). Положительная ветка определяется
$P_1=(0,\,0),\,m_1=1$ и $P_2=(2,\,\tanh 2),\,m_2=1/\cosh^2
2$. Картинка вновь определяется в математически удобных координатах, а
нижний левый угол получает математические координаты $(-3,-2)$ (черный
кружок). 

\section{\texorpdfstring{\Xy}{Xy}-pic}
\secby{Alberto Manuel Brand\~ao Sim\~oes}{albie@alfarrabio.di.uminho.pt}
\pai{xy}~--- это специальный пакет для рисования диаграмм. Для его
использования просто добавьте к преамбуле документа следующую строчку:
\begin{lscommand}
\verb|\usepackage[|\emph{опции}\verb|]{xy}|
\end{lscommand}
\noindent где \emph{опции}~--- список загружаемых функций \Xy-pic. Эти
опции полезны, в первую очередь, для отладки пакета. Рекомендуется
использовать опцию \verb!all!, инструктируя \LaTeX{} загрузить все
команды \Xy{}. 

Диаграммы \Xy-pic рисуются в матричной канве, где каждый элемент
диаграммы помещается в определенную клетку матрицы:
\begin{example}
\begin{displaymath}
\xymatrix{A & B \\
          C & D }
\end{displaymath}
\end{example}
Команда \ci{xymatrix} должна использоваться в математическом
режиме. Здесь мы задали две строки и два столбца. Чтобы из этой
матрицы сделать диаграмму, добавим стрелки векторов командой \ci{ar}. 
\begin{example}
\begin{displaymath}
\xymatrix{ A \ar[r] & B \ar[d] \\
           D \ar[u] & C \ar[l] }
\end{displaymath}
\end{example}
Команда рисования вектора помещается в клетку, откуда исходит
вектор. Аргументом является направление, куда показывает вектор
(\texttt{u}p, \texttt{d}own, \texttt{r}ight и \texttt{l}eft).
\begin{example}
\begin{displaymath}
\xymatrix{
  A \ar[d] \ar[dr] \ar[r] & B \\
  D                       & C }
\end{displaymath}
\end{example}
Для рисования диагоналей укажите больше одного направления. Вы также
можете повторять знак направления для рисования б\'ольших векторов.
\begin{example}
\begin{displaymath}
\xymatrix{
  A \ar[d] \ar[dr] \ar[drr] & & \\
  B                      & C & D }
\end{displaymath}
\end{example}

Можно рисовать еще более интересные диаграммы, добавляя к векторам
метки. Для этого используются  обычные операторы нижних и верхних
индексов. 
\begin{example}
\begin{displaymath}
\xymatrix{
  A \ar[r]^f \ar[d]_g &
             B \ar[d]^{g'} \\
  D \ar[r]_{f'}       & C }
\end{displaymath}
\end{example}

Как показано выше, эти операторы используются как в математическом
режиме. Единственная разница заключается в том, что верхний индекс
означает <<над стрелкой вектора>>, а нижний~--- <<под стрелкой>>.
Есть еще третий оператор, вертикальная черта: \verb+|+. Он помещает
текст \emph{в} стрелку.
\begin{example}
\begin{displaymath}
\xymatrix{
  A \ar[r]|f \ar[d]|g &
             B \ar[d]|{g'} \\
  D \ar[r]|{f'}       & C }
\end{displaymath}
\end{example}

Чтобы нарисовать стрелку с пробелом в ней, пользуйтесь командой
\verb!\ar[...]|\hole!. В некоторых случаях важно различать несколько
видов стрелок. Этого можно добиться, помещая на них метки или меняя их
вид: 
\begin{example}
\shorthandoff{"}
\begin{displaymath}
\xymatrix{
 \bullet\ar@{->}[rr] && \bullet\\
 \bullet\ar@{.<}[rr] && \bullet\\
 \bullet\ar@{~)}[rr] && \bullet\\
 \bullet\ar@{=(}[rr] && \bullet\\
 \bullet\ar@{~/}[rr]  && \bullet\\
 \bullet\ar@{^{(}->}[rr]  && \bullet\\
 \bullet\ar@2{->}[rr]  && \bullet\\
 \bullet\ar@3{->}[rr]  && \bullet\\
 \bullet\ar@{=+}[rr]   && \bullet
}
\end{displaymath}
\shorthandon{"}
\end{example}

Отметьте разницу между следующими двумя диаграммами:
\begin{example}
\begin{displaymath}
\xymatrix{
 \bullet \ar[r] 
         \ar@{.>}[r] & 
 \bullet
}
\end{displaymath}
\end{example}

\begin{example}
\begin{displaymath}
\xymatrix{
 \bullet \ar@/^/[r] 
         \ar@/_/@{.>}[r] &
 \bullet
}
\end{displaymath}
\end{example}

Модификаторы между косыми чертами определяют, как будут рисоваться
кривые. \Xy-pic предлагает множество способов изменить способ
рисования кривых; подробности смотрите в документации на \Xy-pic.

% \begin{example}
% \begin{lscommand}
% \ci{dum}
% \end{lscommand}
% \end{example}

