Как нарисовать диаграмму в TikZ

Диаграмма, коммутативная диаграмма или график в TikZ, проверка в редакторе, пакеты вроде pgfplots и подпись к диаграмме как к иллюстрации.

TikZ — язык рисования LaTeX: геометрические построения, коммутативные диаграммы, графы, схемы, графики. На LibreTimes вы пишете исходник TikZ прямо в тексте, а настоящий LaTeX компилирует его в изображение при сохранении работы, так что диаграмма выглядит так же, как в печатной статье. Читатели получают изображение; в их браузере ничего не компилируется.

Диаграммы на этой странице скомпилированы так же, один раз, из исходника, показанного на вкладке Markdown каждого примера.

Написать диаграмму

  1. В редакторе выберите Код и поставьте курсор туда, где должна быть диаграмма.
  2. Напишите строку :::tikz, затем tikzpicture, затем строку :::.
Результат
TikZ diagramTikZ diagram
Markdown
:::tikz
\begin{tikzpicture}
  \draw[->] (-1.5,0) -- (1.5,0) node[right] {$x$};
  \draw[->] (0,-1.5) -- (0,1.5) node[above] {$y$};
  \draw (0,0) circle (1);
  \draw (0,0) -- (45:1) node[midway, above left] {$r$};
\end{tikzpicture}
:::

Тело блока — то, что вы поставили бы между \begin{document} и \end{document} в отдельном файле LaTeX, без этих двух строк и без \documentclass: документ вокруг рисунка добавляется за вас. Формулы в подписях узлов работают как обычно, {$x$}, а amsmath и amssymb загружены всегда.

Увидеть диаграмму

  1. Переключитесь в режим Визуально. Диаграмма компилируется и рисуется на месте исходника.
  2. Если её не удаётся скомпилировать, блок показывает TikZ failed to render с сообщением LaTeX и строкой вашего исходника, к которой оно относится. Исправьте эту строку в режиме Код и переключитесь обратно.

Неудачная диаграмма никогда не мешает сохранить или опубликовать текст вокруг неё. Пока она не скомпилирована, читатели видят на её месте Diagram not rendered., а не ваш исходник.

Подключить пакет или библиотеку

Распространённые библиотеки TikZ, например arrows.meta, calc, positioning и matrix, уже загружены. Коммутативной диаграмме не нужно ничего, кроме matrix:

Результат
TikZ diagramTikZ diagram
Markdown
:::tikz
\begin{tikzpicture}
  \matrix (m) [matrix of math nodes, row sep=3em, column sep=3em]
    { A & B \\ C & D \\ };
  \path[->] (m-1-1) edge node[above] {$f$} (m-1-2)
                    edge node[left]  {$g$} (m-2-1)
            (m-1-2) edge node[right] {$h$} (m-2-2)
            (m-2-1) edge node[below] {$k$} (m-2-2);
\end{tikzpicture}
:::

Для всего остального:

  1. Поставьте строки \usetikzlibrary{…} или \usepackage{…} в начало блока, перед \begin{tikzpicture}.
  2. Используйте пакет так же, как в LaTeX.

График с pgfplots:

Результат
TikZ diagramTikZ diagram
Markdown
:::tikz
\usepackage{pgfplots}
\begin{tikzpicture}
  \begin{axis}[axis lines=middle, xlabel=$x$, ylabel=$y$, domain=-2:2, samples=50]
    \addplot[thick] {x^3 - x};
  \end{axis}
\end{tikzpicture}
:::

Подключить можно любую библиотеку TikZ. Пакеты — фиксированный набор, установленный и проверенный, в том числе pgfplots, circuitikz, tkz-euclide, forest, chemfig и tikz-3dplot. Пакет не из этого набора не компилируется, и сообщение называет доступные. \input, \include и всё, что читает файл или запускает программу, запрещено, потому что диаграмма компилируется на общей машине.

Окружение tikzcd из пакета tikz-cd пока компилируется неправильно, потому что блок помещает каждый рисунок в собственный tikzpicture. Рисуйте коммутативные диаграммы матрицей, как выше. Прямоугольную диаграмму с прямыми стрелками можно записать и формулой: окружение KaTeX \begin{CD} работает в выключной формуле.

Подписать как иллюстрацию

  1. Поставьте над строкой :::tikz строку ::::figure{#fig-name} — с четырьмя двоеточиями, потому что у диаграммы внутри их три.
  2. После закрывающего ::: диаграммы напишите подпись.
  3. Закройте иллюстрацию строкой ::::.
Результат
TikZ diagramTikZ diagram

Квадрат коммутативен: .

Markdown
::::figure{#fig-square}
:::tikz
\begin{tikzpicture}
  \matrix (m) [matrix of math nodes, row sep=3em, column sep=3em]
    { A & B \\ C & D \\ };
  \path[->] (m-1-1) edge node[above] {$f$} (m-1-2)
                    edge node[left]  {$g$} (m-2-1)
            (m-1-2) edge node[right] {$h$} (m-2-2)
            (m-2-1) edge node[below] {$k$} (m-2-2);
\end{tikzpicture}
:::
 
Квадрат коммутативен: $h \circ f = k \circ g$.
::::

Сошлитесь на неё из текста: [диаграмма](#fig-square), как на любую иллюстрацию.

Диаграмма внутри утверждения

Диаграмма может стоять в доказательстве, примере или любом другом блоке. Внешнему блоку нужно больше двоеточий, чем диаграмме:

Результат

Доказательство. Отображения складываются в квадрат

TikZ diagramTikZ diagram

и утверждение следует, если обойти по нему элемент .

Markdown
::::proof
Отображения складываются в квадрат
 
:::tikz
\begin{tikzpicture}
  \matrix (m) [matrix of math nodes, row sep=3em, column sep=3em]
    { A & B \\ C & D \\ };
  \path[->] (m-1-1) edge node[above] {$f$} (m-1-2)
                    edge node[left]  {$g$} (m-2-1)
            (m-1-2) edge node[right] {$h$} (m-2-2)
            (m-2-1) edge node[below] {$k$} (m-2-2);
\end{tikzpicture}
:::
 
и утверждение следует, если обойти по нему элемент $A$.
::::

Результат

На опубликованной странице диаграмма — изображение в тексте, нарисованное цветом страницы: тёмные линии на светлой странице, светлые на тёмной, из одной и той же компиляции. Щелчок открывает её на весь экран с увеличением. В иллюстрации под ней стоит подпись, а ссылка на якорь иллюстрации переносит к ней.

Если что-то не так

  • Вместо диаграммы показано Diagram not rendered. Она ещё не скомпилирована или последняя компиляция не удалась. Откройте работу в редакторе и посмотрите на блок в режиме Визуально, чтобы увидеть ошибку.
  • Диаграмма крошечная или огромная. Изображение сохраняет размер, в котором его нарисовал TikZ. Рисуйте в сантиметрах в том размере, в каком её должны читать, или задайте scale= у tikzpicture.
  • Нужно показать исходник TikZ как текст, как это делают вкладки Markdown на этой странице. Поставьте его в блок кода с языком latex; блок кода никогда не компилируется.