Метки

, , , , , , ,

Все знают что \LaTeX — текстовый редактор. Но на самом деле, это ещё и графический векторный редактор 😉 Таким его делает пакет Pgf/TikZ, входящий в состав основных дистрибутивов латеха. С его помощью можно легко создавать как простые, так и очень сложные диаграммы и графики средствами теха, не прибегая к сторонним программам для рисования. Официальное руководство, которое можно скачать тут, занимает 560 страниц (и кажется, всё равно всех возможностей не осветили), поэтому далее излагаются некоторые базовые примеры, позволяющие сделать быстрый старт. В некоторых местах использовались коды из руководства, распространяемого по лицензии GNU GPL v1.2.

Example: Connecting text and graphics by Kjell Magne Fauske

Со временем эта заметка будет обязательно расширяться, сообщения об ошибках и дополнения приветствуются.

Команды черчения помещаются в окружение tikzpicture или используются в качестве аргумента команды \tikz:

\tikz{
	\draw (-1.5,0) -- (1.5,0);
	\draw (0,-1.5) -- (0,1.5);
}
или
\begin{tikzpicture}
	\draw (-1.5,0) -- (1.5,0);
	\draw (0,-1.5) -- (0,1.5);
\end{tikzpicture}
дадут одинаковый результат.


Обратите внимание, что каждая команда заканчивается точкой с запятой. В этом примере используется команда рисования \draw. По умолчанию TikZ интерпретирует все размеры в сантиметрах, а положение центра координат (0,0) является относительным. Далее то, что должно являться числом, обозначается так: _число_. У числа может быть указана размерность стандартным латеховским способом, например, 10cm.

Окружение tikzpicture имеет параметр scale, позволяющий увеличивать или уменьшать чертёж.

Линии

Для рисования линий служит команда \draw. Ломаную из нескольких сегментов можно нарисовать следующим образом:

\draw (0,0) -- (1,1.5) -- (-1,1.5) -- (0,-1.5);

В квадратных скобках после \draw можно указать толщину

  • ultra thin
  • very thin
  • thin
  • semithick
  • thick
  • very thick
  • ultra thick
  • или указать толщину напрямую: line width=_width_

тип

  • dotted
  • loosely dotted
  • densely dotted
  • dashed
  • loosely dashed
  • densely dashed
  • Или опция dash pattern

стрелку

  • Стрелка влево или вправо: <-, ->
  • Стрелки на обоих концах линии: <—>
  • Двойная стрелка влево или вправо: <<-, ->>
  • Двойные стрелки на обоих концах линии: <<->>

или цвет линии.

Заданные таким образом параметры применяются ко всем последующим фигурам, выводимым данной командой \draw пока они не будут заменены новыми параметрами в квадратных скобках. Например, так выводятся два эллипса с различной толщиной линии и поворотом:

\draw [thick, rotate=24] (0, 0) ellipse (2 and 1) [thin, rotate=50] (1, 1) ellipse (2.5 and 1.5);

Нарисованную кривую любой сложности можно автоматически замкнуть дописав в конце

\draw ... -- cycle;

Различные кривые

После имени команды \draw в круглых скобках указывается начальная точка рисуемой линии,центр фигуры (для круга, эллипса или дуги) или одну из точек прямоугольной области:

\draw (_coordX0_, _coordY0_)

Далее идёт модификатор, обозначающий тип кривой. Естественно, интерпретация чисел в круглых скобках после модификатора зависит от самого модификатора.

  • Линия:  — (_coordX_, _coordY_)
  • Сетка делается так: \draw[step=.5cm] (-1.4,-1.4) grid (1.4,1.4);. Здесь параметр step задаёт шаг сетки, а пары чисел до и после модификатора grid — область, покрываемую сеткой.
  • Круг: circle (_radius_)
  • Эллипс: ellipse (_axis1_ and _axis2_)
  • Дуга круга: arc (_startAngle_:_endAngle_:_radius_)
  • Дуга эллипса: arc (_startAngle_:_endAngle_:_axis1_ and _axis2_)
  • Прямоугольник: rectangle (_coordX1_, _coordY1_). Противоположные вершины прямоугольника будут лежать в точках с координатами (_coordX0_, _coordY0_) и  (_coordX1_, _coordY1_). Закруглить углы прямоугольника можно параметром [rounded corners=_radius_].

Модификаторы могут следовать один за другим внутри одной команды \draw:

\draw[thick, dashed, red] (0,0) -- (1,1.5) -- (-1,1.5) -- (0,-1.5)  (0, 0) ellipse (2 and 1);

При рисовании дуг необходимо учитывать, что центр круга или эллипса расчитывается автоматически, а координата перед arc указывает точку, в которой будет начато рисование дуги.

\draw[red,thick] (0,-1.5) -- (2.2,-1.5) arc (0:90:1);
\draw[green] (1.2,0) -- (2.2,0) arc (45:270:1);
\draw[blue,thick,dotted] (0,-1.5) -- (0,1) arc (90:-30:2);

Цвет в контурах и заливке и тексте

Нарисовать замкнутый контур с заливкой можно командой \fill:

\fill[red!40!blue] (0,0) -- (3mm,0mm) arc (45:90:1) -- (0,0);

Здесь, как и в любом другом случае указания цвета запись red!20!green означает смешение красного и синего цветов в пропорции 40:60. Необходимо напомнить ещё две команды. определить цвет заранее можно с помощью конструкции

\colorlet{yourColorName}{colorCode}

где yourColorName — название для цвета, определяемое пользователем, а colorCode — код цвета, заданный в том или ином виде. А изменить цвет текста можно с помощью

\textcolor{colorName}{text}

Похожая команда \filldraw рисует контур и заливает его заданным цветом:

\filldraw[fill=blue!20!white, draw=blue] (0,0) -- (3mm,0mm) arc (45:90:1) -- (0,0);

(на самом деле у меня не возникло никаких различий между приведённым случаем и использованием \draw с теми же параметрамии — на самом деле все эти команды являются оболочкой над \path и их синтаксис довольно гибок). Опцию fill (как и другие, указанные ниже) можно использовать и в других случаях, например в node для определения цвета фона текста.

Степень прозрачности регулируется параметром opacity, принимающим действительные значения в диапазоне от 0 до 1. Единица соответствует полной непрозрачности. Можно определить степень прозрачности фона и контура по отдельности параметрами fill opacity и draw opacity соответственно.

Преобразование изображения

Поворот

Повернуть фигуру можно указав параметр rotate и задав угол поворота в градусах, например

\draw[rotate=24] (0, 0) ellipse (3 and 2);

Обрезание

Вырезать кусок изображения можно командой \clip. Задание фигуры, по которой происходит обрезание, аналогичен синтаксису \draw, например:

\clip[rotate=24] (0, 0) ellipse (2 and 1);
\draw[thick, dashed, red] (0,0) -- (1,1.5) -- (-1,1.5) -- (0,-1.5);

Преобразование коснётся фигур, выведенных после команды \clip. Эта команда ничего не рисует. Если же надо вывести и рамку, то clip можно указать как опцию для \draw:

\draw[clip,rotate=24] (0, 0) ellipse (2 and 1);
\draw[thick, dashed, red] (0,0) -- (1,1.5) -- (-1,1.5) -- (0,-1.5);

Смещение

С помощью параметра [xshift=_shift_] можно сместить последующие координаты на величину _shift_ по оси иксов. То же самое и для yshift.

Координаты и вычисления

Точку определяет команда \coordinate.

\coordinate (pointName) at (_xPosition_, _yPosition_);

где pointName — название точки, а после at идёт указание её координат. Можно определить подпись и её положение:

\coordinate [label=left:$A\rightarrow$] (pointName) at (0,1);

Позиция текста относительно точки может указываться с помощью индентификаторов left, right, below или above. Если вместо них указать число, оно будет интерпретироваться как угол поворота относительно оси абсцисс, на который переместится подпись. Если в подписи необходимо использовать запятую, обычно интерпретируемую как разделитель координат, то следует поступить, например, так: \noexpand{$f(x,y)}. Далее определённую таким образом точку можно использовать вместо прямого указания координат:

\begin{tikzpicture}
\coordinate [label=135:$A$] (A) at (0,0);
\coordinate [label=above:$B$] (B) at (3,1);
\draw [->, red] (A) -- (B);
\end{tikzpicture}

С помощью пакета calc можно проводить операции над координатами точек. Сами операции заключаются между одинарными знаками доллара. Пример:

\usetikzlibrary{calc}
\coordinate [label=left:$A$] (A) at ($(0,0) + (1,3)$);

Полезные ссылки

Реклама