我用 forest 包绘制了一棵简单的树。当将其放入 wrapfigure 环境中时,它会超出边缘。
我有一个 MWE 和相应的结果,其中您可以看到树的一部分超出了文本宽度区域。如何修复这个问题?
\documentclass{article}
\usepackage{forest}
\usepackage{wrapfig}
\usepackage{blindtext}
\begin{document}
\begin{wrapfigure}{r}{0.25\textwidth}
\centering
\begin{forest}
for tree={circle,draw,calign=center,edge=->,grow'=north}
[A [B [C] [D] ] [E [F] [G] [H] ] ]
\end{forest}
\caption{A tree}
\label{fig:simple_tree}
\end{wrapfigure}
\blindtext
\end{document}
答案1
答案取决于您最关心的问题:您的树在页面上占用的空间量或包生成的树的大小forest
:
在第一种情况下(您希望将树在页面上使用的空间限制为0.25\textwidth
),您可以使用graphicx
带有的包使树变小resizebox
:
\documentclass{article}
\usepackage{forest}
\usepackage{wrapfig}
\usepackage{blindtext}
\usepackage{graphicx}
\begin{document}
\begin{wrapfigure}{r}{0.25\textwidth}
\centering
\resizebox{\linewidth}{!}{\begin{forest}
for tree={circle,draw,calign=center,edge=->,grow'=north}
[A [B [C] [D] ] [E [F] [G] [H] ] ]
\end{forest}}
\caption{A tree}
\label{fig:simple_tree}
\end{wrapfigure}
\blindtext
\end{document}
输出如下:
在第二种情况下(您希望树保持其默认大小),您可以在页面上为树提供更多空间,从而防止树离开边缘:
\begin{wrapfigure}{r}{0.4\textwidth}\centering
Herbert 在他的回答中描述了如何做到这一点,并说明了如何做到这一点,而无需反复尝试。Donald Arseneau 在他的回答中描述了另一个非常方便的解决方案:只要图形和标题不是“特殊的”(例如复杂的扩展),您就可以简单地将其用作0pt
宽度并让 warpfigure 进行测量:
\begin{wrapfigure}{r}{0pt}\centering
答案2
\begin{wrapfigure}{r}{0.4\textwidth}\centering
如果您不想通过反复试验来实现,请先在框中写入内容:
\documentclass{article}
\usepackage{forest}
\usepackage{wrapfig}
\usepackage{blindtext}
\usepackage{graphicx}
\newsavebox\ForestBox
\begin{document}
\savebox\ForestBox{%
\begin{forest}%
for tree={circle,draw,calign=center,edge=->,grow'=north}
[A [B [C] [D] ] [E [F] [G] [H] ] ]
\end{forest}}
\begin{wrapfigure}{r}{\dimexpr\wd\ForestBox+2em}
\centering
\usebox\ForestBox
\caption{A tree}\label{fig:simple_tree}
\end{wrapfigure}
\blindtext
\end{document}
答案3
对旧问题的迟来的回答,但如果宽度指定为零 (0pt),wrapfig 将自行进行测量。如果图形加标题不寻常,这可能会失败,但在这里可以正常工作。