我一直在尝试重新格式化我正在构建的自定义类文件中的表格和图形环境。这个想法是将它们放在带有阴影背景的框中。我一直试图将包与或float
结合使用来实现这一点。无论我选择后者中的哪一个,我都会遇到一个问题,即浮动中的文本被排版到右边距。因此,我假设问题不在于 或 ,而在于某些东西(尽管行为略有不同;在边距中绘制一个框,但没有)。mdframed
tcolorbox
mdframed
tcolorbox
float
mdframed
tcolorbox
由于各种原因,该解决方案应向后兼容(我的类基于此构建)提供的标准table
和环境。我知道这允许与自定义图形环境进行一些集成,但我想格式化标准环境。figure
article.cls
tcolorbox
我并不承诺使用该float
软件包;如果有人知道更好的(且更易于使用的)东西,我会很高兴听到。
以下是使用以下方法的 MWE tcolorbox
:
\documentclass{article}
\usepackage{lipsum}
\usepackage{tcolorbox}
\usepackage{float}
\usepackage[]{geometry}
\makeatletter
% Create a new caption style.
\newcommand\floatc@sp[2]{\textsf{\textbf{#1} \hfill #2}}%
% Use tcolorbox to draw a box around the float.
\newcommand\fs@sp{
\def\@fs@cfont{\sf\bfseries}\let\@fs@capt\floatc@sp
\def\@fs@pre{\begin{tcolorbox}}%
\def\@fs@post{\end{tcolorbox}}%
\def\@fs@mid{\vspace{\abovecaptionskip}}
\let\@fs@iftopcapt\iffalse}
\makeatother
% Restyle the floats with the new style.
\floatstyle{sp}
\restylefloat{figure}
\restylefloat{table}
\begin{document}
\begin{tcolorbox}
This is a tcolorbox.
\lipsum[1]
\end{tcolorbox}
\begin{figure}
\caption{The text in this figure flows into right margin.}
\lipsum[1]
\end{figure}
\end{document}
输出如下:
非常感谢您的考虑。
答案1
像这样吗?
没有float
,但有environ
(不确定是否有必要):
\documentclass{article}
\usepackage{lipsum}
\usepackage{environ}
\usepackage{tcolorbox}
\usepackage{geometry}
\let\origfigure\figure
\let\endorigfigure\endfigure
\NewEnviron{myfigure}{%
\begin{origfigure}
\begin{tcolorbox}
\BODY
\end{tcolorbox}
\end{origfigure}%
}
\let\figure\myfigure
\let\endfigure\endmyfigure
\begin{document}
\begin{tcolorbox}
This is a tcolorbox.
\lipsum[1]
\end{tcolorbox}
\begin{figure}
\lipsum[1]
\caption{The text in this figure stays within the margins.}
\end{figure}
\begin{figure}
\lipsum[2]
\caption{Here's a caption which shouldn't flow anywhere, since the text in the figure doesn't do so.}
\end{figure}
\end{document}
答案2
tcolorbox
提供blend into
在已知环境(如figures
和)内包含某些特定框的选项tables
。这样就被视为标题,这些标题出现在相应的图形或表格列表中。如果您在它们的定义中包含titles
这些框,它们也可以是对象。floating
float
\documentclass{article}
\usepackage[most]{tcolorbox}
\usepackage{duckuments}
\newtcolorbox[blend into=figures]{myfigure}[2][]{
float, title=#2, halign=center, #1}
\begin{document}
\listoffigures
\begin{myfigure}{This is a nice duck}
\includegraphics{example-image-duck}
\end{myfigure}
\begin{figure}[htb]
\centering
\includegraphics{example-image-duck}
\caption{Another nice duck}
\end{figure}
\end{document}