带有浮动内容的带框文本

带有浮动内容的带框文本

我想将文本框在\startfoo和之间\stopfoo,但其中有一个浮点数。

\documentclass{article}
\begin{document}

\startfoo

\begin{figure}[h]
some float with a \caption{...}
\end{figure}

\stopfoo
\end{document}

我想过使用 fancybox:

\documentclass{article}
\usepackage{fancybox}
\begin{document}

\begin{Sbox}
\begin{minipage}{\hsize}
\begin{figure}[h]
some float with a \caption{...}
\end{figure}
\end{minipage}
\end{Sbox}

\fbox{\TheSbox}
\end{document}

但是这会因为 里面的浮动而中断minipage,对吗?我该怎么办?标记是固定的,如果不费很大力气的话,我无法更改它。

答案1

float如果您不想更改内容代码,则需要重新定义环境。框架可以通过mdframed包添加(或者如果您不需要支持分页符,也可以通过我的adjustbox包添加\begin{adjustbox}{fbox} <content> \end{adjustbox}:)。

\documentclass{article}

%\usepackage{capt-of}% or caption
\usepackage{mdframed}

\let\origfigure\figure
\let\endorigfigure\endfigure

\makeatletter
\newenvironment{figurehere}[1][]{%
   \center
   \def\@captype{figure}%  see note below
}{%
   \endcenter%
}

\newcommand{\startfoo}{%
    \par\medskip
    \begin{mdframed}[linewidth=1pt]%
    \let\figure\figurehere
    \let\endfigure\endfigurehere
    \ignorespaces
}
\newcommand{\stopfoo}{%
    \unskip
    \end{mdframed}%
    \par\medskip
}
\makeatother

\begin{document}
text before text before text before text before

\startfoo

text at begin of framed box
text at begin of framed box
text at begin of framed box

\begin{figure}[h]
some float with a \caption{...}
\end{figure}

text at end of framed box
text at end of framed box
text at end of framed box

\stopfoo

text after text after text after text after text after

\end{document}

结果

请注意绝不最好使用{figure}[h](或[H], )。这违背了浮动概念。请始终使用类似with 的[h!]环境。center\captionof

在这种情况下,无法重新定义\caption\def\caption{\captionof{figure}},因为\captionof\def\@captype{#1}\caption会调用自身。相反,我直接设置\@captype为,这样就可以使用figure正常值。\caption

答案2

如果您想要做的只是在浮点数周围放置一个框架(但不放置其标题),那么您可以使用该float包并在序言中发出以下说明:

\usepackage{float}
\floatstyle{boxed}
\restylefloat{figure}

稍后您就可以照常创建图形了。

相关内容