Графика в LaTeX. Часть I

    Доброе время суток! Недавно заметил пояление на Хабре блога, посвящённого системе LaTeX. И решил поделиться теми небольшими знаниями, которые у меня есть.
    Не буду повторяться и описывать что такое LaTeX, зачем он нужен и как устанавливать пакеты. Об этом уже много написано, в том числе и в этом блоге, да вы и без меня всё это знаете. Здесь я решил описать как пользоваться графическими возможностями LaTeX'а, так как недавно готовил эту тему для университета. Материала довольно много, поэтому пришлось разбить на части. В этой части я расскажу:
    • что такое псевдорисунки,
    • как пользоваться пакетом XY-pic.

    Итак, по порядку.

    Псевдорисунки


    LaTeX, в отличии от TeX, позволяет использовать примитивные рисунки, состоящие из прямых, наклонных линий, стрелок и окружностей.
    Для псевдорисунков используем окружение {picture}:
    \begin{picture}(110,50)
    ...
    \end{picture}

    В скобках задаётся размер канвы — ширина, высота (напоминаю, что по умолчанию размеры измеряются в пунктах, поменять можно в преамбуле документа командой \unitlength).
    Чтобы поместить что-либо на канву, используем команду \put(x,y){<объект>}. (x,y) — координаты объекта (началом координат считается левый нижний угол канвы!) В фигурных скобках — тот объект, который нужно нанести. Возможные объекты:
    • Надпись. Любой текст, например, \put(10,15){Пример текста}
    • Линия. Пример: \line(1,-2){20}. Здесь 1/-2 — угловой коэффициент отрезка, 20 — длина проекции на ось абсцисс.
    • Стрелка. Стрелка задаётся командой \vector. Параметры те же, что и у линии.
    • Окружность. Команда: \circle{<радиус>}.
    • Круг. Команда: \circle*{<радиус>}.
    • Овал — прямоугольник с закруглёнными краями: \oval(<ширина>,<высота>).
    • Кривые Безье. Пример: \qbezier(22,2)(120,20)(20,77) — в скобках координаты опорных точек.

    Для повторяющихся объектов удобно пользоваться командой \multiput(x, y)(dx,dy){n}{<объект>}. Здесь (x, y) — координаты первого объекта, (dx,dy) — приращение координат, n — количество объектов. Небольшой примерчик:
    \begin{picture}(100,80)
    \multiput(10,70)(8,-6){8}%
    {\circle*{3}}
    \end{picture}

    Кстати, знак процента нужен для переноса строки — окружение picture не допускает пустых строк, т.е. либо весь код должен идти одной строкой, либо в конце каждой ставится процент.

    XY-pic


    XY-pic — это пакет для создания графов и диаграмм. Графы строятся в виде матрицы, где каждый элемент матрицы соответствует вершине графа. Рёбра графа строятся с помощью специальных команд.

    Подключение пакета XY-pic

    В преамбуле документа пишем
    \input xy
    \xyoption{all}

    либо
    \usepackage[all]{xy}.


    Построение графа

    Используем команду \xymatrix{ ... }. Внутри окружения описывается матрица. Элементы матрицы в строке разделены символом "&". Строки разделены "\\". Пример:
    \xymatrix{ U \ar@/_/[ddr]_y \ar@/^/[drr]^x
    \ar@{.>}[dr]|-{(x,y)} \\
    & X \times_Z Y \ar[d]^q \ar[r]_p
    & X \ar[d]_f \\
    & Y \ar[r]^g & Z }

    Из примера видно, что стрелки строятся командой \ar. У команды много модификаций:
    • В квадратных скобках можно задать направление стрелки — \ar[hop]. Варианты u, d, l, r, ur, ul, dl, dr, drr и так далее. Пример: \ar[ur]
    • Можно задать стиль стрелки — \ar@style[hop]. Некоторые варианты: @{=>}, @{.>}, @{:>}, @{~>}, @{-->}, @{-}, @{}. Прошу не путать со смайлами))
    • Над стрелками (или под ними) можно размещать текст или другие объекты. "^" — метка сверху, "_" — снизу, "|" — разорвёт стрелку. Пример: $\xymatrix@1{ X\ar[r]^a_b & Y & Z\ar[l]^A_B }$
    • Дуги: @/^/, @/_/, @/_1pc/ и т.п.

    Несколько примеров:
    $\xymatrix{ {\bullet} \ar@{-}[r] & {\bullet} \ar@{.}[d] \\
    {\bullet} \ar@{--}[u] & {\bullet} \ar@{->}[l] \ar@{=}[ul] }$

    $\xymatrix@1{ A \ar[r]^f \ar[dr]_{f;g} & B \ar[d]^g \ar[dr]^{g;h} \\
    & C \ar[r]_h & D }$

    $\xymatrix{
    A \ar[d]_f \ar[r]^f & B \ar[d]^g \ar[dl]|{iB} \\
    B \ar[r]_g & C }$

    $\xymatrix{ x \ar@(ul,dl)[]|{id} \ar@/^/[rr]|f && f(x)
    \ar@/^/[ll]|{f^{-1}} } $

    $\xymatrix{ 1 \ar[rr] ^-{1000000x}
    \ar[dr]_(.2){2000x}|!{[d];[rr]}\hole
    && 1000000 \\
    1000 \ar[r] _{2x} \ar[urr] _>>>>{x^2} & 2000 }$

    Полезные книжки:
    1. С. М. Львовский: «Работа в системе LaTeX»
    2. Tobias Oetiker, Hubert Partl, Irene Hyna and Elisabeth Schlegl: «Не очень краткое введение в LaTeX2e» Перевод: Б. Тоботрас
    3. Владимир Сюткин: «Русский язык в LaTeX2e»
    4. Kristoffer H. Rose: «XY-pic User’s Guide»
    5. М. Гуссенс, Ф. Миттельбах, А. Самарин: «Путеводитель по пакету LaTeX и его расширению LaTeX2e»
    6. И. Котельников, П. Чаботаев: «LaTeX2e по-русски»

    Это пока всё. Спасибо за внимание.
    Оригинал статьи тут: alex.kotomanov.com/2009/01/11/graph_in_latex
    P.S. В следующей части вы узнаете
    • как импортировать растровую и векторную графику,
    • как делать цветные документы
    • и, напоследок, немного о гипертексте в pdf.
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 31
    • +2
      Спасибо большое за статью.

      P.S. Перенесите пожалуйста тему в блог LaTeX
      • +1
        все это замечательно!
        в следующий раз напишите статью о вставке не псевдо-, а обычной графики?

        в частности, интересует вопрос, действительно ли необходимо всю графику сначала конвертировать в .ps-файлы, или можно каким-то образом работать с более привычными .jpg, .png итп?
        • 0
          Можно непосредственно. Наизусть не вспомню, но вот тут посмотрите people.uncw.edu/hermanr/latex/#Figures
        • 0
          уже печатаю продолжение… там будет всё подробно описано про импортирование JPG, PNG и даже PDF, если надо. Всё это делает команда \includegraphics. Ну я смотрю уже на вопрос ответили))
          • 0
            Интересует как корректнее вставлять растровые изображения большого разрешения. Цель на выходе — масштабируемый PDF.
            • 0
              Какого бы ни было разрешения изображение, на выходе PDF всегда будет масштабируемый. Вопрос наверно заключается в том, как большую фотку подогнать под размер листа. Очень просто. Два варианта:
              1. у команды \includegraphics есть параметр width. пример: \includegraphics[width=1in]{01.jpg}
              2. есть также параметр scale. например: \includegraphics[scale=0.5]{01.jpg}уменьшит картинку вдвое.
              • 0
                Я почему-то считал, что width/scale жестко ресайзят исходный растр. Сейчас проверил, всё в порядке.
        • 0
          раскрасьте, пожалуйста, исходники — с-трудом-читабельно
          • 0
            не могу понять как… разве Хабра позволяет менять стили текста?
            • 0
              попробуйте <font color="somecolor"></font>
              • 0
                да, видимо, только таким извращённым способом можно… я конечно понимаю создателей Хабры — если бы они позволили менять цвета текста через специальную WYSIWYG-панель, то все блоги бы пестрили как новогодняя ёлка. но можно же было подключить автоматическую подсветку кода, это не так уж сложно, столько скриптов написано… а так приходится использовать тег цитаты, хотя ему там не место — явное нарушение семантики. а тег фонт уже давно не используется в вёрстке…
                • 0
                  font color достаточно. kate умеет экспортировать раскрашенный исходник в виде html…
          • +3
            О, с псведографикой столько воспоминаний связано :)) когда только начинал, два дня однажды потратил на отрисовку двух простых графов, пока не погуглил и не нашел graphviz, с помошью которого сделал всё за 10 минут.
            • +1
              да, напоминает рисование в qbasic'е или на turbo pascal'e =)
              • +2
                Псевдографика в текстовой консоли в соответствующем режиме работы графической карты.
                А здесь всё-же графика рассматривается.
              • +4
                Графику в LaTeX по-моему намного удобнее рисовать с использованием TikZ/PGF (http://www.texample.net/tikz/examples/).
              • 0
                Вместо п. 5 в литературе лучше указать: М. Гуссенс, С. Ратц, Ф. Миттельбах. «Путеводитель по пакету LaTeX и его графическим расширениям».
                • +1
                  а примеры, как это будет выглядеть?
                  • 0
                    хотел скриншоты вставить, но хабра не позволяет картинки с компа заливать (только URL с инета). чуть позже залью на сервер и добавлю. =)
                  • 0
                    В следующей статье расскажите пожалуйста о том как отобразить, например, 3 изображения в ряд, а так-же как сделать, что бы текст «обтекал» изображения.
                    • +1
                      Вообще говоря, LaTeX использует блочную модель, но не совсем в том смысле, в котором принято употреблять этот термин в HTML-вёрстке. То есть любой объект, будь то картинка, надпись и даже буква, является боксом. Но при этом боксы распологаются в одну строку (это ответ на первый вопрос). Если бокс больше соседних по высоте, то строки раздвигаются. Если это не то, что вы хотите, поместите окружение {picture} между абзацами (абзацы разделяются пустой строкой или командой \par).
                      Также в LaTeX есть такие окружения как {center}, {flushright} и {flushleft}. Это аналог атрибута align у тега img в HTML. Своего рода «плавающая модель» (это ответ на второй вопрос).
                    • +2
                      Вот баловался как раз этой штукой лет шесть назад





                      В векторном виде конечно красивее, а на печати вообще прекрасный результат.
                      Сейчас, конечно, уже ничего такого повторить не смогу :(.
                      • НЛО прилетело и опубликовало эту надпись здесь
                        • +1
                          согласен. обещаю исправиться после нового года =)

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