Как установить расстояние между узлами в TikZ

Как установить расстояние между узлами в TikZ

Я пытаюсь нарисовать веб-график для статьи, используя TikZ для рисования отдельных страниц в виде узлов. Однако, когда я набираю текст, график оказывается в одном маленьком углу строки, а узлы расположены слишком близко друг к другу. node distanceне работает, а minimum sizeпросто расширяет узлы так, что они перекрывают друг друга. Как мне установить минимальное расстояние между узлами? Спасибо.

Незаконченный (пока без линий) график выглядит так:

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

В идеале она должна быть равна ширине страницы, а узлы должны быть расположены дальше друг от друга.

Мой код выглядит так:

 \documentclass[12pt, oneside]{amsart}      
\usepackage{geometry}                       
\geometry{a4paper}

\usepackage{tikz}

\begin{document}

\tikzstyle{node}=[circle, draw=black!100, thick]
\tikzstyle{dangling node}=[circle, draw=black!100, fill=black!30, thick]
\begin{tikzpicture}[minimum size=5mm][node distance=5.3cm,>=stealth?,bend angle=45,auto]
  \node[node](page 1){1};
  \node[node](page 2)[right of=page 1]{2};
  \node[node](page 3)[below of=page 1]{3};
  \node[node](page 4)[below of=page 2]{4};
  \node[dangling node](page 5)[below of=page 3, xshift=5mm]{5};
\end{tikzpicture}

\end{document}

решение1

Окружающая tikzpictureсреда принимает толькоодиннеобязательный аргумент. То есть, если LaTeX видит [после \begin{tikzpicture}, он захватывает все до первого, ]что видит, и это параметры для среды. Когда у вас есть \begin{tikzpicture}[..][..], вторая пара скобок на самом деле просто читается как обычный текст, я думаю, и TiKZ обычно пытается подавить все, что не является pgfкомандой /TikZ, поэтому это в основном игнорируется.

Итак, подводя итог, все варианты для a tikzpictureдолжны быть помещены в одну пару скобок.

Если вы измените свой код соответствующим образом (и удалите ненужное ?после stealth), вы обнаружите, что ваша node distanceнастройка работает так, как и ожидалось.

Тем не менее, вы можете последовать совету TeXnicians использовать positioningбиблиотеку и сказать eg right=ofвместо right of=. Некоторые обсуждения по этому поводу можно найти вРазница между «right of=» и «right=of» в PGF/TikZ. Еще одна причина использования positioningбиблиотеки заключается в том, что вы можете задать горизонтальные и вертикальные расстояния узлов отдельно, написав node distance=Ycm and Xcm, пример показан в коде ниже. Как упоминает gernot в комментарии, в этом случае, вероятно, также захочется добавить on gridк стилю узла. on gridозначает, что расстояния рассчитываются от центральной точки узлов.

Последнее замечание: вы можете поместить один стиль внутрь другого, так что если dangling nodeимеет тот же стиль, что и node, с добавлением fill, то вы можете сказать dangling node/.style={node,fill=black!30}. Это уменьшает дублирование кода и упрощает его изменение.

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

\documentclass[12pt, oneside]{amsart}
\usepackage{geometry}                       
\geometry{a4paper}

\usepackage{tikz}
\usetikzlibrary{positioning}
\tikzset{
  node/.style={circle, draw=black!100, thick, on grid}, % on grid added
  dangling node/.style={node, fill=black!30}
}
\begin{document}
\begin{center}
\begin{tikzpicture}[
  minimum size=5mm,
  node distance=4cm and 7cm,
  >=stealth,
  bend angle=45,
  auto
]
  % grid to easier see that the node centers line up  
  \draw [help lines] (-1,-9) grid (9,1);

  \node[node](page 1){1};
  \node[node](page 2)[right=of page 1]{22};
  \node[node](page 3)[below=of page 1]{3333};
  \node[node](page 4)[below=of page 2]{4555555};
  \node[dangling node](page 5)[below=of page 3, xshift=5mm]{5};
\end{tikzpicture}
\end{center}
\end{document}

Связанный контент