TikZ, PGFPlots и техническая графика
TikZ создаёт схемы, блок-схемы и геометрические рисунки; PGFPlots построен на TikZ и предназначен для координатных осей и графиков данных. Оба создают масштабируемую векторную графику, согласованную со шрифтами и обозначениями документа.
Настройка EasyLaTeX для русского текста: XeLaTeX с article, fontspec и babel. Для схем подключите tikz, для графиков — pgfplots. Сложные рисунки увеличивают время компиляции.
Когда рисовать кодом
| Потребность | Подходящий способ |
|---|---|
| Фотографии, сканы, снимки экрана | Вставка готового изображения |
| Блок-схемы, структуры, геометрия | TikZ |
| Функции, измерения, полосы ошибок | PGFPlots |
| Сложные иллюстрации или готовые специализированные файлы | Экспорт PDF из графического инструмента; перед вставкой преобразуйте SVG в PDF или подходящее растровое изображение |
Рисование кодом даёт воспроизводимость, контроль версий и согласованные шрифты. Если для рисунка лучше подходит специализированный инструмент, используйте его и импортируйте устойчивый выходной формат.
Минимальная схема TikZ
Подключите TikZ в преамбуле:
\usepackage{tikz}Нарисуйте оси и отрезок:
\begin{tikzpicture} \draw[->] (0,0) -- (4,0) node[right] {$x$}; \draw[->] (0,0) -- (0,3) node[above] {$y$}; \draw[blue,thick] (0,0) -- (3,2);\end{tikzpicture}В обычных декартовых координатах единицы по умолчанию равны 1 см. \draw создаёт пути, квадратные скобки задают стили, а node добавляет текст.
Узлы и стрелки
Определяйте стили и используйте их повторно:
\begin{tikzpicture}[ box/.style={draw, rounded corners, minimum width=2.5cm, minimum height=8mm}, arrow/.style={->, thick}] \node[box] (input) {Входные данные}; \node[box, right=1.5cm of input] (process) {Обработка}; \node[box, right=1.5cm of process] (output) {Результат}; \draw[arrow] (input) -- (process); \draw[arrow] (process) -- (output);\end{tikzpicture}Синтаксис right=... of ... требует библиотеки позиционирования:
\usetikzlibrary{positioning}Общие стили сохраняют единообразие схем. Сократите длинные подписи или задайте text width, не допуская наложения узлов.
Минимальный график PGFPlots
Подключите PGFPlots и задайте уровень совместимости:
\usepackage{pgfplots}\pgfplotsset{compat=1.18}Постройте график по координатам, заданным в коде:
\begin{tikzpicture} \begin{axis}[ xlabel={Время (с)}, ylabel={Скорость (м/с)}, grid=major ] \addplot coordinates {(0,0) (1,1) (2,4) (3,9)}; \end{axis}\end{tikzpicture}axis управляет осями, делениями, подписями и сеткой; \addplot задаёт ряд. Явно указывайте величины и единицы измерения, не различайте ряды только цветом.
Чтение данных из файла
Создайте в проекте data/velocity.csv:
time,velocity0,01,12,43,9Затем прочитайте именованные столбцы:
\addplot table [x=time, y=velocity, col sep=comma] {data/velocity.csv};Отделение данных от кода графика упрощает обновление и проверку. Имена столбцов должны совпадать с выбором в x= и y=.
Размещение графики в документе
Заключите рисунок в figure, чтобы получить подпись, метку и ссылку:
\begin{figure}[tbp] \centering % Здесь размещается tikzpicture или axis \caption{Изменение скорости со временем} \label{fig:velocity}\end{figure}В подписи объясняйте содержимое, источник данных и неопределённость, если она существенна. Код рисования не заменяет это пояснение.
Частые проблемы
Environment tikzpicture undefined
Подключите tikz; для позиционирования узлов также нужен \usetikzlibrary{positioning}.
Environment axis undefined
Подключите pgfplots, а не только TikZ. Окружение axis относится к PGFPlots.
Медленная компиляция
Уменьшите число ненужных точек выборки и слоёв, используйте подготовленные файлы данных. Для очень большого рисунка заведите отдельный графический проект, скомпилируйте и скачайте PDF, затем загрузите его как изображение в основной проект.
Полный пример
\documentclass[a4paper,12pt]{article}\usepackage{fontspec}\setmainfont{CMU Serif}\setsansfont{CMU Sans Serif}\setmonofont{CMU Typewriter Text}\usepackage[russian]{babel}\usepackage{pgfplots}\pgfplotsset{compat=1.18}\begin{document}\begin{figure}[tbp] \centering \begin{tikzpicture} \begin{axis}[ width=0.75\linewidth, xlabel={Время (с)}, ylabel={Скорость (м/с)}, grid=major ] \addplot[blue,thick,mark=*] coordinates { (0,0) (1,1) (2,4) (3,9) }; \end{axis} \end{tikzpicture} \caption{Изменение скорости со временем} \label{fig:velocity}\end{figure}\end{document}