
Этот код
\documentclass[a4paper]{article}
\usepackage{tikz}
\usetikzlibrary{backgrounds}
\usepackage{forest}
\begin{document}
We are the knights who say "Ni!".
\begin{center}
\begin{tikzpicture}[framed]
\begin{forest}
[,for tree={grow'=east},shape=coordinate
[
[
[]
[]
]
[
[]
[]
]
]
[
[
[]
[]
]
[
[]
[]
]
]
]
\end{forest}
\end{tikzpicture}
\end{center}
\end{document}
дает мне
Очевидно, что дерево выходит за пределы картинки, из-за чего оно перекрывает текст выше. Это известная ошибка или промах с моей стороны, и есть ли исправление?
решение1
Я не думаю, что это вообще хорошая идея помещать forest
окружение внутрь a tikzpicture
, и я сильно подозреваю, что Плохие Вещи могут произойти неожиданно. В общем, вложение tikzpicture
s иногда работает в простых случаях, но известно, что оно проблематично. (То есть, если это работает, то работает. Если нет, вы можете сохранить обе части.) Помните, что a forest
— это a tikzpicture
, поэтому вы по сути говорите
\begin{tikzpicture}[framed]
...
\begin{tikzpicture}
...
В вашем примере это сработает, если вы baseline
соответствующим образом настроите изображение.
\begin{tikzpicture}[framed,baseline=(current bounding box.center)]
Я думаю, что было бы безопаснее, однако, нарисовать рамку как часть forest
. Я так понимаю, что вы хотите, в конечном счете, иметь что-то более причудливое, чем просто коробка. Если нет, есть более простые подходы. Но сложный фон можно легко добавить как часть forest
самой спецификации. Есть несколько способов сделать это.
\begin{forest}
[
..
]
\begin{scope}[on background layer]
<drawing commands>
\end{scope}
\end{forest}
Или команды рисования могут быть добавлены как часть спецификации дерева или в преамбулу дерева. Например,
\begin{forest}
[,for tree={grow'=east},shape=coordinate, tikz+={%
\begin{scope}[on background layer]
\node [fit=(current bounding box.north east) (current bounding box.south west), draw=blue!50!cyan, outer color=blue!50!cyan!25, inner color=blue!50!cyan!10, rounded corners, line width=1mm] {};
\end{scope}
}
[
...
\end{forest}
Полный код для примеров:
\documentclass[a4paper]{article}
\usepackage{forest}
\usetikzlibrary{backgrounds,fit}
\begin{document}
We are the knights who say "Ni!".
\begin{center}
\begin{tikzpicture}[framed,baseline=(current bounding box.center)]
\begin{forest}
[,for tree={grow'=east},shape=coordinate
[
[
[]
[]
]
[
[]
[]
]
]
[
[
[]
[]
]
[
[]
[]
]
]
]
\end{forest}
\end{tikzpicture}
\end{center}
We are the knights who say "Ni!".
\begin{center}
\begin{forest}
[,for tree={grow'=east},shape=coordinate, tikz+={%
\begin{scope}[on background layer]
\node [fit=(current bounding box.north east) (current bounding box.south west), draw=blue!50!cyan, outer color=blue!50!cyan!25, inner color=blue!50!cyan!10, rounded corners, line width=1mm] {};
\end{scope}
}
[
[
[]
[]
]
[
[]
[]
]
]
[
[
[]
[]
]
[
[]
[]
]
]
]
\end{forest}
\end{center}
\end{document}