Tikz руководство на русском

Время на прочтение
7 мин

Количество просмотров 51K

Доброго времени суток. Давно собирался рассказать о возможностях векторной графики в LaTeX, предоставляемых низкоуровневым макропакетом PGF и его расширением TikZ, а выход предыдущей статьи о пакете Xy-pic для создания диаграмм и графов и появление свободного времени сделали возможным начать работу :-).

Мне в своё время понадобилось найти и изучить какое-то гибкое средство для создания качественных векторных изображений, потому что уже достали криво масштабированные, вставленные с ужасным расширением картинки растровых форматов, портящие всё впечатление от документа, да и увеличивающие его размер в два раза из-за одной большой картинки с прямоугольником и несколькими подписями к нему. Имеющиеся возможности встроенного окружения picture весьма скудны; пакет PStricks ориентирован на язык PostScript (не работает с pdflatex, который мне необходим), хотя и может кое-что, чего не может PGF; система MetaPost, пожалуй, является наиболее мощной из всех в этой области, но функционирует с использованием отдельного интерпретатора со всеми вытекающими из этого последствиями. Таким образом, выбор пал на PGF/TikZ.

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

Очень приятно, когда для какого-то инструмента есть исчерпывающий список примеров, что он может делать и как этого достичь. Для обсуждаемого пакета этот список можно посмотреть, набрав в поисковике «pgf examples» и перейдя по первой же ссылке. Здесь все примеры одним списком: www.texample.net/tikz/examples/all. Нет смысла пытаться описать всё, на что способен пакет. Пожалуй, остановлюсь на основных концепциях.

В статье рассматривается использование pgf/tikz вместе с макропакетом LaTeX, как самым распространённым, однако pgf/tikz также работает и с другими. Текст статьи базируется преимущественно на руководстве TikZ & PGF. Manual for Version 2.00 (560 с.). Некоторые примеры взяты из него. Также в книге есть небольшая, но полезная глава Guidelines on Graphics (с. 65), посвящённая общим принципам работы над документами с векторной графикой, включая примеры того, как надо и как не надо делать; к ней стоит обратиться независимо от того, будете ли вы в дальнейшем использовать pgf/tikz или что-то другое.

Установка

В GNU/Linux надо поставить пакет pgf (и зависимый xcolor версии >= 2.00). Если такого нет, достаточно разархивировать исходники (локально или глобально) и сделать texhash (подробности см. в руководстве). В Windows pgf/tikz входит в состав дистрибутива MiKTeX, так что ничего дополнительного устанавливать не требуется.

Трансляция

Для получения pdf используем

pdflatex file.tex

Для получения ps используем две команды:

latex file.tex
dvips file.dvi

Также интересна возможность конвертации в HTML и SVG.

Использование

Для использования базовых возможностей пакета надо подключить его в преамбуле командой

usepackage{tikz}

Для вставки команд pgf/tikz используется либо команда tikz с одним аргументом (обычно для вставки рисунка в пределах строки), либо окружение begin[options]{tikzpicture}...end{tikzpicture}. Если в аргументе к tikz надо указать несколько команд рисования, они окружаются фигурными скобками (tikz[options]{...}). Каждая команда оканчивается точкой с запятой.

documentclass{memoir}<br>
pagestyle{empty}<br>
usepackage{tikz}<br>
<br>
begin{document}<br>
tikz{draw (-1,-1) -- (1,1); path[fill=green!80!blue,draw=red] (0,0) circle (7mm);}<br>
end{document}

Очень удобно, что не надо указывать размер холста. Программа сама вычислит его за вас.

Точки

Точки задаются абсолютно или относительно. Примеры декартовых и полярных координат:

  • (2,0) — точка с заданными координатами в текущих единицах измерения (по умолчанию — 1 см);
  • (2cm,-3pt) — 2 см в направлении Ox, –3 пункта в направлении Oy;
  • (30:5cm) — точка на расстоянии 5 см от текущего положения в направлении 30 градусов;
  • +(2,0) — точка, отстоящая от текущего положения на 2 единицы вправо (текущее положение не меняется);
  • ++(2,0) — точка, отстоящая от текущего положения на 2 единицы вправо, которая становится новым текущим положением.

tikz draw (0,0) --  +(1,0) --  +(0,1) --  +(1,1);<br>
tikz draw (0,0) -- ++(1,0) -- ++(0,1) -- ++(1,1);<br>
tikz draw (1,0) -- (0,0) -- (30:1);

Также могут использоваться барицентрические координаты, система координат узлов (см. ниже), тангенциальная система.

Система координат пересечений позволяет оперировать с координатами пересечения (однако, пока только для комбинаций прямых и окружностей). Для этого задаётся первый и второй объекты (или линии их координатами) и номер пересечения (когда их несколько).

begin{tikzpicture}<br>
  draw[help lines] (0,0) grid (3,2);<br>
  draw (0,0) coordinate (A) -- (3,2) coordinate (B)<br>
        (1,2) -- (3,0);<br>
  fill[red] (intersection of A--B and 1,2--3,0) circle (2pt);<br>
end{tikzpicture}

Можно задавать координаты с использованием относительных или абсолютных модификаторов длины или проекций. Это делается следующими способами:

  • coordinate!number!angle:second_coordinate
  • coordinate!dimension!angle:second_coordinate
  • coordinate!projection_coordinate!angle:second_coordinate

Например,

  • (1,2)!.25!(3,4) означает координату, которая находится на расстоянии одной четверти пути из (1,2) в (3,4)
  • (1,2)!1cm!(3,4) означает координату, которая находится на расстоянии 1 см от точки (1,2) на прямой (1,2)—(3,4)
  • (1,2)!(0,5)!(3,4) означает координату, которая является проекцией точки (0,5) на прямую (1,2)—(3,4)

Траектории

Траектория — это последовательность прямых и кривых линий. Они создаются командой path. Если она вызывается без аргументов, то ничего нарисовано не будет, что не очень интересно. Аргументами могут быть draw, fill, shade, clip или любая их комбинация. Вместо path[draw], path[fill], path[shade,draw],… можно использовать сокращения draw, fill, shadedraw.

Основная команда для создания прямых — это (a) -- (b), где (a) и (b) — некоторые точки.

Кубическая кривая Безье задаётся командой (a) .. controls (x) and (y) .. (b), где (a) и (b) — некоторые точки, (x) и (y) — опорные точки, влияющие на форму кривой. Если часть and (y) пропустить, считается, что (y) = (x).

Графические параметры

Они указываются в квадратных скобках (как необязательные аргументы в LaTeX) в виде наборов ключ-значение: key=value. Например, tikz draw[line width=2pt,color=red] (1,0) -- (0,0) -- (1,0) -- cycle;. Иногда часть key= можно опускать, если ключ для данного значения трактуется однозначно.

Узлы

Текст и подписи добавляются к рисунку в виде узлов (nodes). Они привязываются к текущему положению на плоскости (в пространстве), либо явно привязываются к некоторой точке. В качестве параметров можно указать якорь привязки узла (где он будет относительно точки: справа, слева, справа сверху и т.п.), форму узла (круг, квадрат, эллипс, …), способ его отображения (нарисовать, залить) и другие.

tikz draw (1,1) node {text} -- (2,2);

begin{tikzpicture}[line width=2pt]<br>
  draw (0,0) node [below left]  {$A$} -- <br>
        (1,0) node [below right] {$B$} -- <br>
        (1,1) node [above right] {$C$} -- <br>
        (0,1) node [above left]  {$D$} -- <br>
        cycle;<br>
end{tikzpicture}

Области видимости

С помощью окружения scope можно создавать области видимости со своими параметрами; остальные наследуются из содержащей данную. Фактически, окружение tikzpicture ведёт себя аналогично scope. С определёнными ограничениями области видимости можно также применять при рисовании траектории.

tikz draw (0,0) -- (1,1)<br>
            {[rounded corners] -- (2,0) -- (3,1)} -- <br>
            (3,0) -- (2,1);

Стили

Стили указываются при перечислении графических параметров. Есть набор уже определённых, которые можно переопределять. Можно определять свои.

begin{tikzpicture}[scale=0.7]<br>
  draw             (0,0) grid +(2,2);<br>
  draw[help lines] (3,0) grid +(2,2);<br>
end{tikzpicture}

Вычисления

При подключении библиотеки calc командой в преамбуле

usetikzlibrary{calc}

можно использовать некоторые математические вычисления для определения координат, например,

begin{tikzpicture}[scale=0.5]<br>
  draw[help lines] (0,0) grid (4,3);<br>
  fill [red]   ($2*(1,1)$)              circle (2pt);<br>
  fill [green] (${1+1}*(1,.5)$)         circle (2pt);<br>
  fill [blue]  ($cos(0)*sin(90)*(1,1)$) circle (2pt);<br>
  fill [black] (${3*(4-3)}*(1,0.5)$)    circle (2pt);<br>
end{tikzpicture}

Заключение

Возможности пакета можно перечислять ещё очень долго (например, я ничего не упоминал про графы, деревья и цепи), но такому перечислению не место в одной статье, тем более, что существует вышеупомянутый сайт и прекрасное руководство с исчерпывающими примерами использования каждой вкусности пакета pgf/tikz. Использовать его или нет — решать вам. Я с ним работаю меньше шести месяцев (да и узнал о нём не намного раньше), но уже активно использую и не жалею; во многих случаях он сильно экономил время и силы. Если у народа возникнет интерес, рассказ может быть продолжен ;-)

PS.
Изображения делались так:

$ latex qq.tex && dvips -K -o qq.ps qq.dvi && convert -antialias -seed 0 -density 200 -trim qq.ps qq.png

Подсветка делалась экспортом из gvim (тема emacs).

Все знают что 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:$Arightarrow$] (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)$);

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

  • http://www.texample.net/ Примеры схем, чертежей и диаграмм с исходниками.
  • http://www.fauskes.net/nb/introduction-to-sketch/ Построение проекций трёхмерных объектов на плоскость с помощью Sketch 3D и LaTeX
  • http://www.cord.edu/faculty/ahendric/tex/TikZcheatsheet.pdf Краткая напоминалка почти всех основных вещей.
  • http://habrahabr.ru/blogs/latex/81751/ Делаем диаграммы

Украшение библиотеки

Доступна usetikzlibrary{украшений.<имя декорирования библиотека>}
Описание
Как говорит название, эти библиотеки украшают путь. Иногда путь даже заменяется другой путь.
Каждое украшение библиотеки указано ниже. Использовать <и>сочетание клавиш Ctrl</роз> + <и>Ф</КБД и GT; (Windows), чтобы попасть в библиотеку нужно.

Путь морфинга украшения

Доступна usetikzlibrary{украшений.pathmorphing}
Описание [с ТиКЗ руководство]
Путь морфинга украшения на «превращается» или «кривыми» В К-быть-оформлен пути. Это означает, что прямая линия может быть после изгиба и ударов.
Пример

Введите описание изображения здесь

Замена путь украшения

Доступна usetikzlibrary{украшений.pathreplacing}
Описание [с ТиКЗ руководство]
В этой библиотеке определены украшения, которые заменить будет оформлен пути на другой путь. В отличие от морфинга украшения, заменены путь может быть совершенно разной, например, прямая линия может быть заменена на множество кружков.
Пример

  • Большинство украшений
    латекс documentclass[tikz,маржа=1]{автономный} usetikzlibrary{украшений.pathreplacing} дефу{0} и captionоформлены[1]{ tikzset{украшения=#1} рисовать[тонкий,красный] (0,Y) в[сгиба левой] (1,г); рисовать[украшения,очень толстая] (0,Y) в[сгиба левой] (1,г) узел[справа,шрифт=ttfamily] {#1}; пустьauxyг pgfmathsetmacroг{auxy+1} } начать{документ} всегда begin{tikzpicture}[г=-1см,х=3см] оформленный{границы} % Мы не сможем использовать нашу команду здесь :( tikzset{украшения=скобка} рисовать[тонкий,красный] (0,г) -- (1,г); рисовать[украсить,очень толстая] (0,г) -- (1,г) узел[правая,шрифта=ttfamily] {скобки}; пустьauxyг pgfmathsetmacroг{auxy+3} % % оформленный{расширяющейся волны} пустьauxyг pgfmathsetmacroг{auxy+1.5} оформленный{клещи} оформленный{волны} конец{tikzpicture} конец{документ}
    Введите описание изображения здесь
  • Специальные декорации: показать путь строительства.
    «латекс
    % Источник: TikZ — ТФР ручной версии 3.1.3, 9 мая 2019, стр. 636
    documentclass[tikz,маржа=1]{автономный}
    usetikzlibrary{украшений.pathreplacing}
    начать{документ}
    всегда begin{tikzpicture}[

    =стелс,
    каждый узел/.стиль={полпути, наклонный, шрифт=крошечных},
    украшения={
    показать путь строительства,
    метод MoveTo код={
    заполнить [красный] (tikzinputsegmentfirst) круг (2 пунктов)
    узел [заполнить=нет, ниже] {ПЕРЕЙТИ};},
    строки, чтобы код={
    рисовать [синий,->] (tikzinputsegmentfirst) — (tikzinputsegmentlast)
    узел [выше] {концы lineto};},
    curveto код={
    рисовать [зеленый!75!черный,->] (tikzinputsegmentfirst) .. контролирует
    (tikzinputsegmentsupporta) и (tikzinputsegmentsupportb)
    ..(tikzinputsegmentlast) узла [выше] {curveto};},
    closepath код={
    рисовать [оранжевый,->] (tikzinputsegmentfirst) — (tikzinputsegmentlast)
    узел [выше] {closepath};}
    }]

рисовать [линии] сетки (3,2);
путь [украшения] (0,0) — (3,1) и Arc (0:180:1.5 и 1) — цикл;
конец{tikzpicture}
конец{документ}
«
Введите описание изображения здесь

Произвольной маркировки

Доступна usetikzlibrary{украшений.маркировка}
Описание [с ТиКЗ руководство]
Маркировка может быть мысль о том, что «картинку» или точнее «и какая-то сфера содержание», что находится на «дальше» Путь в определенном положении
Пример

Введите описание изображения здесь

Отпечатки ног маркировки

Доступна usetikzlibrary{украшений.след}
Описание [с ТиКЗ руководство]
Украшения из этой библиотеки можно использовать, чтобы украсить путь с маленькие следы, как будто кто-то на «шел» и по пути.
Пример

Введите описание изображения здесь

Форма фоновой маркировки

Доступна usetikzlibrary{украшений.форм}
Описание [с ТиКЗ руководство]
Н/Д
Пример

Введите описание изображения здесь

Текст украшения

Доступна usetikzlibrary{украшений.текст}
Описание [с ТиКЗ руководство]
Украшения в этой библиотеке украшает путь на какой-либо текст. Это может использоваться, чтобы рисовать текст, который следует за кривой.
Пример

Введите описание изображения здесь

Фрактальные украшения

Доступна usetikzlibrary{украшений.фракталы}
Описание [с ТиКЗ руководство]
Украшения из этой библиотеки можно использовать для создания фрактальных линий.
Пример

Введите описание изображения здесь

LaTeX использует tikz для рисования блок-схемы

1. Введение

Начать работу с Tikz очень сложно. В пакете более 1000 страниц. Если вы читаете примечания к руководству, сложно начать работу без написания. Легко закружиться голова, когда вы смотрите на кучу кода.Просмотр документа — самый простой и эффективный. Недавно я проводил прямую трансляцию для учителя на станции B. Вы можете изучить основы во время просмотра и набора текста, а затем вы можете сами начать метод проб и ошибок.

2. О пакетах, необходимых для построения простой блок-схемы.

usepackage{tikz}
usetikzlibrary{positioning}
usetikzlibrary{shapes.geometric}
usetikzlibrary{arrows,arrows.meta}

Это пакет, который я недавно научился рисовать блок-схему.

  1. Тикз обязательно нужен.
  2. Позиционирование — это в основном пакет, который необходимо загрузить при управлении узлами.
  3. shape.geometric в основном нужен для определения внешней рамки узла, который поддерживает различные формы, такие как ромб
  4. arrows.meta позволяет использовать стрелку, когда -Stealth, -stealth разные стрелки по-прежнему требуют внимания.

3. Узлы, дополнительные параметры, система координат …

Система координат: часто используемый холст, полярные координаты (плюс: мне нужно рисовать и понимать больше, потому что я только начал узнавать больше, так что просто запомните)

documentclass[UTF8]{ctexart}
usepackage{tikz}
usepackage{amsmath}
usepackage{xcolor}
usetikzlibrary{positioning}
usetikzlibrary{shapes.geometric}
usetikzlibrary{arrows,arrows.meta}

begin{document}
  begin{tikzpicutre}
    draw [help lines] (0,0) grid (2,2);
    draw  (1,1) circle(0.5);  
    node (point) [text = red] at (1.1,1.1) {o};
    draw [thick,blue] (0,0) -- (30:1cm);
  end{tikzpicutre}
end{document}

Просто нарисуйте сетку, как здесь, круг, узел, линию

1. draw [help lines] (0,0) grid (2,2); где [] — необязательные параметры, вы можете добавить множество параметров, draw — отрисовка , Нарисуйте сетку от точки (0,0) до точки (2,2), а сами вспомогательные линии представляют собой форму линии, определенную для вас tikz, которая относительно легкая
2. draw (1,1) circle (0.5); — это нарисовать круг в точке (1,1). Прочитав эти два предложения, вы, вероятно, знаете прямоугольную систему координат.
3. draw [толстый, синий] (0,0) — (30: 1 см); Это (30: 1) выражение полярных координат, 30 градусов, 1 см, — Это означает, что линия нарисована. Толстая — это более тонкий тип линии. Есть много параметров, которые вы можете установить. Подробности см. В документации.
4. node (point) [text = red] at (1.1,1.1) {o}; этот узел является узлом. Следует отметить, что этот узел на самом деле является прямоугольником. Например, мой центр установлен на 1,1, но на самом деле это прямоугольник в точках (1,1, 1,1). Этот момент очень важен для рисования блок-схемы.Если вам нужно использовать стрелки для подключения позже, вы можете использовать для подключения юго-восток, северо-запад от узла доступа.

begin{tikzpicture}
    node (jiedian) [blue,text =  red,draw] at (0,0) {o};  
    node (jiedian1) [blue,text =  red,draw,above = of jiedian]  {$o_1$};
    draw [-Stealth,red] (jiedian.center) -- (jiedian1.south);
end{tikzpicture}


Здесь, поскольку я искусственно использовал выше = of, когда рисовал, я автоматически переместил центр узла. Если вы нарисуете стрелку, вы можете использовать структуру для доступа к положению узла. .
node (jiedian) [blue, text = red, draw] в точке (0,0) {o}; из-за добавления здесь параметра рисования мы можем его видеть, но на самом деле это один Узлы прямоугольника.
Обязательно следите за каждым предложением➕; !!!
Обязательно следите за каждым предложением➕; !!!
Обязательно следите за каждым предложением➕; !!!
Важная вещь повторяется трижды.
Обладая этими знаниями, просто нарисуйте блок-схему.

4. Нарисуйте свою собственную блок-схему.

documentclass[UTF8]{ctexart}
usepackage{tikz}
usepackage{amsmath}
usepackage{xcolor}
usetikzlibrary{positioning}
usetikzlibrary{shapes.geometric}
usetikzlibrary{arrows,arrows.meta}

begin{document}
    tikzstyle{arrow}=[-Stealth]
    tikzstyle{lingxing} =  [fill = yellow!30,diamond,draw,shape aspect = 2,inner sep = 0.4pt,thick,line width = 0.5pt]
    tikzstyle{pxsbx}=[trapezium, trapezium left angle=75, trapezium right angle=105, minimum width=3em, text centered, draw = black, fill=white,line width=0.5pt]
    tikzstyle{juxing} = [rounded corners,inner sep = 1.5pt,draw,rectangle,line width = 0.5pt,fill = white,minimum width = 3em]

    begin{tikzpicture} [node distance = 1]
        begin{scope}
        node (zhunbei)[lingxing] at (5,5) {подготовка данных};
        node (caijian) [juxing,below = of zhunbei] {Предварительная обработка данных}; 
        node (chongtouying) [juxing,below  =of caijian]  {Необработанный NDVI};
        node (b1) [juxing,below  =of chongtouying]  {Истинный NDVI}; 
        node (b2) [juxing,below  = of b1] {Изображение после удаления воды};
        node (soil) [juxing,fill = brown!20 ] at (7,-2.5) {NDVI soil};
        node (veg)  [juxing,fill = green!70] at (3,-2.5) {NDVI vegt};
        
        node (trueveg) [juxing,fill = green!20] at (5,-3.5) {VFC};
        end{scope}
        draw[arrow] (zhunbei.south)  --  (caijian.north);
         draw[arrow] (caijian.south) -- node[left]{Перепроецирование} node [right][right]{Обрезать} (chongtouying.north);
        draw[arrow] (chongtouying.south) -- node [right] {$b1*0.0001$} (b1.north);
        draw[arrow] (b1.south) -- node[right]{MOD44W} (b2.north);
        draw [arrow] (b2.south) --   (soil.north);
        draw [arrow] (b2.south) --   (veg.north);
        draw [arrow] (soil.south) -- (trueveg.north);
        draw [arrow] (veg.south) -- (trueveg.north);
    end{tikzpicture}


, где tikzstyle используется при определении стиля узла, что может избавить вас от необходимости повторного добавления дополнительных параметров.

tikzstyle{lingxing} = [fill = yellow!30,diamond,draw,shape aspect = 2,inner sep = 0.4pt,thick,line width = 0.5pt]
где заливка — заливка, ромб — ромб, внутреннее расстояние — расстояние между текстом и внутренним блоком.
нарисован так. .

конец

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

Оригинал: Scientific Graphics Visualisation: An Introduction to PGF/TikZ

Автор: Deepu Benson

Дата публикации: 28 июня 2018 года

Перевод: А. Кривошей

Дата перевода: октябрь 2019 г.

Это вторая статья в серии из трех частей о визуализации научных данных. Она охватывает программное обеспечение PGF/TikZ, которое является бесплатным и имеет открытый исходный код. Она также затрагивает форматы графических файлов LaTeX и PSTricks.

В первой части этой серии мы обсуждали Matplotlib, графическую библиотеку для Python. В этой статье мы обсудим PGF/TikZ, пару языков, используемых для создания векторной графики. Возможно, пришло время подробно обсудить различия между векторной и растровой графикой.

Растровые графические изображения состоят из пикселей, которые являются наименьшим элементом в устройстве отображения. Если вы будете увеличивать растровое изображение, то в какой-то момент вы начнете видеть множество мелких точек. Качество изображения при дальнейшем увеличении масштаба снижается. Распространенные форматы растровых изображений включают JPEG, TIFF, GIF, BMP, PNG и т. д. Векторные изображения, с другой стороны, рисуются с помощью линий и фигур. Векторное графическое изображение всегда будет выглядеть одинаково, даже при увеличении до очень больших размеров. Популярные форматы векторной графики включают AI (Adobe Illustrator), EPS (Encapsulated PostScript), SVG (масштабируемая векторная графика) и т. д. Из-за высокого качества изображений для технических диаграмм всегда лучше использовать векторную графику.

Краткое введение в LaTeX

Хотя PGF/TikZ можно использовать с ConTeXt и оригинальным TeX, он наиболее широко используется с LaTeX. Поэтому, краткое введение в LaTeX абсолютно необходимо, прежде чем перейти к PGF/TikZ. Из-за этой тесной связи между ними PGF/TikZ можно рассматривать как пакет LaTeX для программирования графики. LaTeX — очень популярная кроссплатформенная система подготовки документов. Это бесплатное программное обеспечение с открытым исходным кодом, лицензированное в рамках общественной лицензии проекта LaTeX (LPPL). LaTeX был разработан Лесли Лампортом. Он основан на TeX, системе набора текста, разработанной Дональдом Кнутом.

Очень часто люди рассматривают LaTeX и TeX как одно и то же, но это не так. Принципиальное различие между ними можно понять с помощью следующего примера. Рассматривайте TeX как язык программирования без встроенных функций, а LaTeX как расширение к этому языку, содержащее множество встроенных функций. В целом можно сказать, что TeX гораздо сложнее в освоении и использовании по сравнению с LaTeX. Дистрибутив TeX, такой как TeX Live, часто используется в среде Linux для получения доступа к LaTeX. При подготовке документов с помощью LaTeX вместо форматирования текста используются команды для получения специальных эффектов, таких как полужирный шрифт, курсив и т. д. Например, в текстовых процессорах, таких как LibreOffice Writer или Microsoft Word, текст будет выделен жирным шрифтом или курсивом; тогда как в файле LaTeX вы увидите только такие команды, как textbf или textit, для обеспечения того же эффекта. После обработки этого файла LaTeX, вы получите выходной документ, который покажет форматированный текст.

Два прямоугольника, нарисованные с помощью PGF/TikZ

Рисунок 1: Два прямоугольника, нарисованные с помощью PGF/TikZ

Три цветных треугольника, нарисованных с помощью PGF/TikZ

Рисунок 2: Три цветных треугольника, нарисованных с помощью PGF/TikZ

Обычно при исполнении из документов LaTeX создают файлы PDF (Portable Document Format) или DVI (device independent file format) в качестве выходных данных. Рассмотрим простой скрипт LaTeX «Hello.tex», показанный ниже, содержащий только абсолютно необходимые функции LaTeX. Этот сценарий LaTeX и все другие сценарии PGF/TikZ, обсуждаемые в этой статье, можно загрузить с opensourceforu.com/article_source_code/May18graphicsvisualisation.zip.

documentclass{article}
begin{document}
textbf{textit{Hello World}}
end{document}

Из самого имени Hello.tex ясно, что расширение файла LaTeX — tex. Мы используем этот файл LaTeX в качестве шаблона для выполнения всего кода PGF/TikZ, обсуждаемого в этой статье. Во-первых, давайте рассмотрим этот минимальный пример LaTeX, строка за строкой. Строка кода documentclass{article} определяет класс документа как статью. Другие классы документов, предоставляемые LaTeX, включают в себя письма, книги, отчеты и т. д. Я полагаю, что кроме класса beamer, который используется для создания презентаций с использованием LaTeX, назначение всех других классов документов, указанных здесь, ясно из их названий. Строки кода begin{document} и end{document} определяют область, в которой могут быть заданы фактические данные выходного документа. В этом случае у нас есть только одна строка кода в части содержимого документа LaTeX, textbf{ textit{Hello World}}. Эта строка указывает интерпретатору LaTeX печатать текст «Hello World» жирным шрифтом и курсивом.

Итак, теперь у нас есть готовый к запуску файл LaTeX, но как лучше всего его обработать? Существуют разные способы обработки файлов LaTeX. Например, вы можете использовать Overleaf, систему коллективного создания документов и публикации, которая может обрабатывать код LaTeX. Но в этой статье я буду применять два других метода обработки LaTeX.

Во-первых, давайте запустим из терминала интерпретатор LaTeX. Откройте терминал в каталоге, содержащем файл LaTeX Hello.tex и выполните команду latex Hello.tex. При ее выполнении LaTeX создаст документ Hello.dvi с текстом «Hello World», напечатанным жирным шрифтом и курсивом. По умолчанию формат вывода LaTeX — DVI. Если вам нужен выходной файл в формате PDF, выполните команду pdflatex Hello.tex, которая будет использовать расширение LaTeX с именем pdfLaTeX для создания выходного файла Hello.pdf с тем же содержимым, что и у файла Hello.dvi.

Второй способ — использовать редактор LaTeX, такой как Texmaker, популярный бесплатный кросс-платформенный редактор LaTeX с открытым исходным кодом и встроенным средством просмотра PDF и DVI. Откройте файл LaTeX Hello.tex в Texmaker и в меню вы найдете пункты Tools>LaTeX и Tools>PDFLaTeX для запуска LaTeX и его расширения pdfLaTeX. Используете ли вы LaTeX, pdfLaTeX или Texmaker, форматированный текст в выходном документе будет одинаковым. Несмотря на то, что Texmaker имеет встроенную опцию для просмотра выходных файлов PDF и DVI, убедитесь, что в вашей системе есть средство просмотра документов, такое как Okular, которое способно отображать файлы DVI и PDF. Есть много других LaTeX-редакторов, таких как TeXstudio, TeXworks, Kile и т. д. Использование Texmaker — это личный выбор, и я советую вам попробовать любой из других доступных LaTeX-редакторов, а затем выбрать тот, который вам нравится больше всего. Также помните, что иногда вам придется обрабатывать файл LaTeX несколько раз, чтобы получить правильные метки, библиографию, указатели и т. д.

Одной из проблем, которая часто смущает новых пользователей LaTeX, является большое количество создаваемых им вспомогательных файлов. Если вы посмотрите на каталог, содержащий файл Hello.tex, вы увидите файлы с именами Hello.aux и Hello.log, помимо выходных файлов Hello.pdf и Hello.dvi. И по мере того, как ваш документ LaTeX становится все более сложным, количество таких файлов также увеличивается. Я не собираюсь объяснять назначение всех этих вспомогательных файлов в этой статье, но вам не нужно беспокоиться, потому что из большого количества созданных файлов вам нужно беспокоиться только о файле LaTeX с расширением tex и файлами с расширениями pdf и dvi. Все остальные файлы можно восстановить, запустив интерпретатор LaTeX.

Четыре цветных концентрических круга, нарисованных с помощью PGF/TikZ

Рисунок 3: Четыре цветных концентрических круга, нарисованных с помощью PGF/TikZ

Введение в PGF/TikZ

Теперь, когда мы знакомы с тем, как работает LaTeX, давайте поговорим о PGF/TikZ, который был разработан Тиллем Тантау с использованием TeX. Как упоминалось ранее, это не один инструмент, а два отдельных языка в паре для создания высококачественной векторной графики. PGF — это язык низкого уровня, а TikZ — это набор макросов более высокого уровня, которые используют PGF. Отношения между PGF и TikZ отчасти похожи на отношения между TeX и LaTeX, первый из которых указывает основной синтаксис, а второй предоставляет макросы для простоты использования.

TikZ был впервые представлен с версией PGF 0.95. Последняя версия PGF/TikZ — 3.0.1, выпущенная в августе 2015 года. PGF — это аббревиатура от «portable graphics format». TikZ — это рекурсивная аббревиатура для «TikZ ist kein Zeichenprogramm», в переводе с немецкого «TikZ — это не программа для рисования», утверждающая тот факт, что это языки программирования, способные использовать мощные функции. В отличие от другого популярного инструмента визуализации графики, называемого PSTricks, в котором используется синтаксис, напоминающий PostScript, PGF и TikZ описывают изображения, которые должны быть нарисованы, используя синтаксис, похожий на MetaPost, язык, который используется для создания векторных диаграмм.

Эта чрезмерная зависимость PSTricks от PostScript одновременно является и преимуществом и недостатком. Среди недостатков PSTricks ограниченные форматы вывода, которые он предлагает (PSTricks может производить вывод только в PostScript, а не в PDF) и несовместимость с некоторыми связанными инструментами LaTeX, такими как pdfTeX. Но PGF/TikZ способен производить вывод как в формате PostScript, так и в формате PDF, и обладает высоким уровнем совместимости со всеми инструментами, связанными с LaTeX, что делает знания о PGF/TikZ очень важными.

Простой пример PGF/TikZ

PGF/TikZ создает векторную графику из геометрического описания изображения, которое рисуется с помощью собственного набора инструкций. Прежде чем продолжить изучение кода, давайте обсудим два важных аспекта PGF/TikZ, а именно точки и пути. Точки относятся к конкретному месту на двумерной плоскости. Точки могут быть указаны в декартовых координатах, полярных координатах, как именованные и относительные точки в PGF/TikZ. Чтобы сделать наше обсуждение относительно простым и менее математическим, мы расмотрим только точки, которые описываются в декартовых координатах. Например, декартовы координаты (p, q) относятся к точке, расположенной в p единицах в направлении оси x и в q единицах в направлении оси y. Для простоты понимания начало координат, обозначенное (0,0), можно рассматривать как расположенное в нижнем левом углу плоскости при отображении на экране.

Другим важным аспектом PGF/TikZ является то, как в двумерной плоскости отслеживается путь. Этот аспект трассировки путей в PGF/TikZ объясняется с помощью следующих примеров скриптов. Давайте начнем с простого примера, включающего код PGF/TikZ, чтобы понять, как указываются пути. Рассмотрим скрипт LaTeX pgf1.tex, показанный ниже, который рисует два прямоугольника. Как указывалось ранее, код PGF/TikZ включен в минимальный шаблон LaTeX, упомянутый ранее.

documentclass{article}
usepackage{tikz}
begin{document}
begin{tikzpicture}
draw (1,1)--(2,1)--(2,3)--(1,3)--cycle;
draw (4,4)rectangle(5,6);
end{tikzpicture}
end{document}

Теперь давайте разберем код в файле pgf1.tex построчно, чтобы лучше его понять. Я объясню только строки кода, недавно добавленные в этот скрипт. Строка кода usepackage {tikz} гарантирует, что LaTeX может использовать все функциональные возможности пакета TikZ. Строки кода begin{tikzpicture} и end{tikzpicture} обозначают интервал, в которой можно вводить код PGF/TikZ для рисования изображений. Строка кода draw (1,1)—(2,1)—(2,3)—(1,3)—cycle; рисует четыре линии в двухмерной плоскости с помощью команды draw. Первая линия проводится из точки (1,1) в точку (2,1), вторая линия — из точки (2,1) в точку (2,3), третья линия — из точки (2, 3) до точки (1,3), и четвертая линия проводится из точки (1,3) в точку (1,1). Часть кода, которая отвечает за отрисовку четвертой строки: (1,3)—cycle; она завершит прямоугольник, рисуя линию из точки (1,3) до первой точки, используемой в этой команде рисования, которая является точкой (1,1).

Строка кода draw (4,4)rectangle(5,6); рисует прямоугольник, задавая расположение нижней левой и верхней правой вершин прямоугольника. В этом случае точки (4,4) и (5,6), соответственно, представляют эти две вершины. Обратите внимание, что команды PGF/TikZ заканчиваются точкой с запятой (;), в противном случае возникнет ошибка. Теперь давайте запустим этот скрипт для просмотра нарисованного изображения. Этот скрипт LaTeX может быть выполнен также, как любой другой обычный документ LaTeX — используйте команду pdflatex или latex в терминале, либо используйте Texmaker. Я использовал команду pdflatex pgf1.tex в терминале для создания выходного файла pgf1.pdf. На рисунке 1 показано изображение в документе pgf1.pdf.

Цветные изображения с помощью PGF/TikZ

Рисовать цветные картинки с помощью PGF/TikZ очень просто. Рассмотрим скрипт pgf2.tex, приведенный ниже. В этом скрипте три треугольника нарисованы красным, зеленым и синим цветом.

documentclass{article}
usepackage{tikz}
begin{document}
begin{tikzpicture}
draw[fill=red] (0,1)--(2,1)--(1,3)--cycle;
draw[fill=green] (3,1)--(5,1)--(4,3)--cycle;
draw[fill=blue] (6,1)--(8,1)--(7,3)--cycle;
end{tikzpicture}
end{document}

Единственная строка кода, которая нуждается в объяснении, это draw[fill=red] (0,1)–(2,1)–(1,3)–cycle;. Эта строка рисует треугольник, рисуя три линии. Первая линия проводится из точки (0,1) в точку (2,1), вторая линия — из точки (2,1) в точку (1,3), а третья линия — из точки (1,3) в точку (0,1), образуя треугольник. Цвет, которым будет закрашен треугольник, задается в качестве опции для команды рисования. Возможность закрасить треугольник красным цветом задается кодом [fill = red]. Оставшиеся две линии в окружении tikzpicture в LaTeX рисуют еще два треугольника и заполняют их зеленым и синим цветом. При выполнении команды pdflatex pgf2.tex будет создан выходной файл с именем pgf2.pdf. На рисунке 2 показано изображение в документе pgf2.pdf.

Есть и другие опции, доступные с командой draw. Например, есть варианты изменить цвет линии с черного по умолчанию, изменить толщину рисуемой линии и т. д. Замените три строки кода в среде tikzpicture скрипта pgf2.tex на строки:

draw[yellow, very thick, fill=red] (0,1)–(2,1)–(1,3)–cycle;
draw[yellow, very thick, fill=green] (3,1)–(5,1)–(4,3)–cycle; 
draw[yellow, very thick, fill=blue] (6,1)–(8,1)–(7,3)–cycle;

чтобы получить pgf3.tex. При выполнении команды pdflatex pgf3.tex этот скрипт создаст выходной документ с именем pgf3.pdf, в котором будут треугольника, нарисованных толстыми желтыми линиями и закрашенных красным, зеленым и синим цветом. Скрипт pgf3.tex также доступен для скачивания.

Вывод pgf6.tex

Рисунок 4: Вывод pgf6.tex

Рисование окружностей с помощью PGF/TikZ

Теперь давайте посмотрим, как рисовать круги, используя PGF/TikZ. Рассмотрим скрипт pgf4.tex, показанный ниже.

documentclass{article}
usepackage{tikz}
begin{document}
begin{tikzpicture}
draw[fill=red] (0,0) circle (4cm);
draw[fill=green] (0,0) circle (3cm);
draw[fill=blue] (0,0) circle (2cm);
draw[fill=orange] (0,0) circle (1cm);
end{tikzpicture}
end{document}

Единственная строка кода, которая требует объяснения, это draw[fill=red] (0,0) circle (4cm);. Эта строка рисует красный круг радиусом 4 см с центром в точке (0, 0) и заполняет этот круг красным цветом. Оставшиеся три строки в окружении tikzpicture в LaTeX рисуют еще три окружности с радиусом на 1 см меньше предыдущего и с центром в той же точке, так что в выходном файле мы нарисовали четыре концентрических окружности. При выполнении команды pdflatex pgf4.tex в терминале четыре концентрических круга отображаются красным, зеленым, синим и оранжевым цветами. На рисунке 3 показан вывод скрипта pgf4.tex.

Помните, что компоненты изображения с несколькими слоями отрисовываются в том порядке, в котором идут строки кода, соответствующие определенному компоненту. В предыдущем примере (pgf4.tex) сначала рисуется красный круг с радиусом 4 см, затем зеленый круг с радиусом 3 см, затем синий круг с радиусом 2 см и, наконец, оранжевый круг с радиусом 1 см. Для лучшего понимания давайте изменим скрипт pgf4.tex таким образом, чтобы круги были нарисованы в обратном порядке — сначала был нарисован наименьший круг, и так далее, — чтобы получить pgf5.tex. Теперь, каким будет изображение, нарисованное в выходном документе pgf5.pdf, когда с помощью команды pdflatex pgf5.tex будет выполнен модифицированный файл LaTeX pgf5.tex (показанный ниже)?

documentclass{article}
usepackage{tikz}
begin{document}
begin{tikzpicture}
draw[fill=orange] (0,0) circle (1cm);
draw[fill=blue] (0,0) circle (2cm);
draw[fill=green] (0,0) circle (3cm);
draw[fill=red] (0,0) circle (4cm);
end{tikzpicture}
end{document}

Вы можете быть немного удивлены, увидев, что в выходном файле pgf5.pdf нарисован один красный круг с радиусом 4 см. Уверяю вас, мы не сделали ничего плохого. Так работает PGF/TikZ. Попытайтесь выяснить причину этого ненормального поведения. Если вы не можете найти ответ, я добавил его в качестве комментария в файл pgf5.tex, доступный для скачивания.

Циклы в PGF/TikZ

Пока что мы нарисовали два прямоугольника, три треугольника и четыре круга. Что произойдет, если нас попросят нарисовать сто треугольников или тысячу кругов? Для этого в PGF/TikZ есть циклы. PGF/TikZ имеет много эффективных структур для зацикливания и управления, которые помогают нам с относительной легкостью рисовать большое количество изображений. Рассмотрим пример скрипта pgf6.tex, показанный ниже, который использует цикл foreach, предоставляемый PGF/TikZ.

documentclass{article}
usepackage{tikz}
begin{document}
begin{tikzpicture}
foreach x in {1,2,...,9} {
foreach y in {1,2,3} {
draw[fill=red!xy!green] (x,y) circle (4mm);
}
}
end{tikzpicture}
end{document}

Строка кода foreach x in {1,2,…,9} { определяет внешний цикл, который повторяется девять раз. Строка кодаforeach y in {1,2,3} { определяет внутренний цикл, который повторяется три раза. Таким образом, строка кода draw[fill=red!x0!green] (x,y) circle (4mm); внутри цикла выполняется в общей сложности 27 раз и, следовательно, рисует 27 кругов, каждый из которых имеет радиус 4 мм. Центры этих кругов определяются фрагментом кода (x y). Следовательно, центры не являются фиксированными — это точки (1,1), (1,2), (1,3), (2,1), (2,2), (2,3),…, (9,1), (9,2) и (9,3), в общей сложности 27 точек в двумерной плоскости, создающихся при изменении значений переменных x и y внутри внешнего и внутреннего циклов.

Фрагмент кода [fill=red!xy!green] определяет цвет заливки кругов. Фрагмент кода red!40!green определяет круг, в котором 40% красного, а остальные 60% зеленого. Таким образом, в этом случае, поскольку значения переменных x и y изменяются внутри циклов, никакие два круга не будут иметь одинаковый цвет. Но, возможно, не удастся определить разницу в цвете между кругом с 11% красного и 89% зеленого и другим кругом с 12% красного и 88% зеленого. Вот почему некоторые из соседних кругов могут выглядеть одинаковыми по цвету. При выполнении команды pdflatex pgf6.tex файл LaTeX pgf6.tex создаст выходной файл pgf6.pdf с изображением, показанным на рисунке 4.

Давайте изменим только одну строку кода в файле pgf6.tex, чтобы получить pgf7.tex. Строка кода foreach y in {1,2,3} { в pgf6.tex заменяется строкой foreach y in {1,2,…,12} { в pgf7.tex. Выполнив файл pgf7.tex с помощью команды pdflatex pgf7.tex, вы получите выходной файл с именем pgf7.pdf с изображением, показанным на рисунке 5. Всего несколько символов добавляются в одну строку кода, и изображение резко меняется. Я полагаю, что этот пример ясно иллюстрирует преимущество использования инструментов графического программирования, таких как PGF/TikZ и PSTricks, а не обычного программного обеспечения для рисования изображений. Представьте себе, сколько времени потребуется, чтобы нарисовать техническую диаграмму, аналогичную той, которую мы обсуждали, с множеством компонентов изображения, размещенных в определенных местах, если бы мы использовали обычное программное обеспечение для рисования изображений.

Пришло время завершить нашу дискуссию. Теперь вы должны иметь возможность писать и выполнять сценарии LaTeX, встроенные в сценарии PGF / TikZ, для создания DVI-файла или файла PDF в качестве вывода, либо с помощью LaTeX или pdfLaTeX в терминале, либо с помощью популярного редактора LaTeX Texmaker. Мы пропустили несколько важных тем, таких как трехмерное рисование, рисование в классе документа beamer в LaTeX и т. д., но введение, данное в этой статье, безусловно, даст вам преимущество перед другими. На мой взгляд, PGF/TikZ — это мощное оружие в руках профессионалов, которым необходимо создавать технические диаграммы хорошего качества.

Вывод pgf7.tex

Зачем изучать PSTricks?

PSTricks — еще один мощный инструмент для визуализации научной графики, используемый вместе с LaTeX. Последний вопрос, на который я хочу ответить перед завершением этой статьи: «Зачем изучать PSTricks, если PGF/TikZ настолько хорош?». Ну, PGF/TikZ, безусловно, отличный инструмент, но PSTricks также может предложить что-то хорошее. Как упоминалось ранее, PSTricks ассоциируется с PostScript, очень мощным языком описания страниц. Мощь программирования, предлагаемая PostScript, делает абсолютно необходимым, чтобы я также представил PSTricks, чтобы потенциальные пользователи могли экспериментировать как с PGF/TikZ, так и с PSTricks, а затем принять обоснованное решение относительно выбора хорошего инструмента визуализации в LaTeX. Итак, в следующей и последней части этой серии, посвященной визуализации научной графики, мы обсудим PSTricks.

Другие статьи о математическом ПО в Linux:

  • Визуализация научных данных с помощью пакета matplotlib в Linux
  • Использование NumPy для научных расчетов в Linux
  • Математика в GNU / Linux
  • Альтернативы Matlab для Linux
  • Создание фракталов в PDL

Если вам понравилась статья, поделитесь ею с друзьями:


Понравилась статья? Поделить с друзьями:
  • Кофемашина bosch verobar 100 aromapro инструкция
  • Стиральная машина индезит iwsd 5085 инструкция
  • Фентанил пластырь инструкция по применению как клеить
  • Starline a61 инструкция по установке схема подключения
  • Workcentre 3345 инструкция на русском языке