Я хочу уменьшить некоторые узлы моего дерева. Но они не становятся меньше. inner sep=0.01mm
приводит к тому же размеру узла, что и inner sep=1mm
. Как это возможно? Что я упускаю?
Мой код:
\documentclass[border=10pt]{standalone}
\usepackage{verbatim}
\usepackage{tikz}
\usepackage{forest}
\usepackage{graphicx}
\begin{document}
\begin{forest}
for tree={delay={where content={}{content={\phantom{00}}}{}},s sep+=5mm,l+=5mm}
[,circle,fill=black,inner sep=1mm
[,circle,fill=red,inner sep=0.5mm
[,circle,draw,black,inner sep=0.1mm]
[]
[,circle,draw,black,inner sep=0.1mm]
[]
]
[]
[,circle,fill=red,inner sep=0.5mm
[,circle,fill=red,inner sep=0.25mm
[,circle,draw,black,inner sep=0.1mm]
[,circle,draw,black,inner sep=0.1mm]
[,circle,draw,black,inner sep=0.1mm]
[,circle,draw,black,inner sep=0.001mm]%%% <------------- ??
]
[]
[]
[,circle,draw,black,inner sep=0.1mm]
]
[,circle,fill=red,inner sep=0.5mm]
]
\end{forest}
\end{document}
решение1
КакСалим Боу указал в комментарии, причина, по которой inner sep
кажется неэффективным, заключается в том, что содержимое самого узла довольно большое, относительно говоря. Поэтому разница между 0.1mm
и 0.001mm
не имеет большого значения, поскольку это только изменяет поле вокруг содержимого с крошечного на еще более крошечное.
Как предложил Салим Боу, один из подходов — удалить код, добавляющий содержимое к узлам дерева. В этом случае настройки inner sep
фактически будут определять размер всех узлов в дереве.
Однако, если вы хотите изменить размер только одного узла, вы можете предпочесть переопределить содержимое позже. Это изменит только содержимое этого узла, если установлено в качестве аргумента для этого узла. Обратите внимание, что большинство настроек inner sep
можно просто удалить в этом случае, практически не оказав визуального влияния на внешний вид.
Я бы также предложил использовать стили, чтобы избежать дублирования настроек. Как лучше это сделать, зависит от того, что вам нужно. Вот возможный пример, который также иллюстрирует два метода изменения размера, описанные выше.
\documentclass[border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
for tree={
s sep'+=5mm,
l'+=5mm,
},
my circle/.style={
circle, fill=#1,
},
red circle/.style={
my circle=red, inner sep=#1mm,
},
black circle/.style={
my circle=black, inner sep=#1mm,
},
black hole/.style={
circle, draw=black, inner sep=#1mm,
}
[, black circle=1
[, red circle=0.5
[, black hole=0.1]
[]
[, black hole=0.1]
[]
]
[]
[, red circle=0.5
[, red circle=0.25
[, black hole=0.1]
[, black hole=0.1]
[, black hole=0.1]
[, black hole=0.001]
]
[]
[]
[, black hole=0.1]
]
[, red circle=0.5]
]
\end{forest}
\begin{forest}
for tree={
delay={where content={}{content={\phantom{00}}}{}},
s sep'+=5mm,
l'+=5mm,
},
my circle/.style={
circle, fill=#1,
},
red circle/.style={
my circle=red, inner sep=#1mm,
},
black circle/.style={
my circle=black, inner sep=#1mm,
},
black hole/.style={
circle, draw=black, inner sep=#1mm,
}
[, black circle=1
[, red circle=0.5
[, black hole=0.1]
[]
[, black hole=0.1]
[]
]
[]
[, red circle=0.5
[, red circle=0.25
[, black hole=0.1]
[, black hole=0.1]
[, black hole=0.1]
[, black hole=0.001, before typesetting nodes={content=}]%%% <------------- ??
]
[]
[]
[, black hole=0.1]
]
[, red circle=0.5]
]
\end{forest}
\end{document}
Дерево слева показывает узлы с размерами, определяемыми их inner sep
s. Дерево справа показывает их с фантомом 00
в качестве содержимого, за исключением единственного крошечного узла, где это переопределено.