Я пытаюсь нарисовать веб-график для статьи, используя 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}