我想将文本框在\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}
稍后您就可以照常创建图形了。