使用 tcolorbox(或 mdframed)重新格式化标准浮点数(图形和表格)

使用 tcolorbox(或 mdframed)重新格式化标准浮点数(图形和表格)

我一直在尝试重新格式化我正在构建的自定义类文件中的表格和图形环境。这个想法是将它们放在带有阴影背景的框中。我一直试图将包与或float结合使用来实现这一点。无论我选择后者中的哪一个,我都会遇到一个问题,即浮动中的文本被排版到右边距。因此,我假设问题不在于 或 ,而在于某些东西(尽管行为略有不同;在边距中绘制一个框,但没有)。mdframedtcolorboxmdframedtcolorboxfloatmdframedtcolorbox

由于各种原因,该解决方案应向后兼容(我的类基于此构建)提供的标准table和环境。我知道这允许与自定义图形环境进行一些集成,但我想格式化标准环境。figurearticle.clstcolorbox

我并不承诺使用该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这些框,它们也可以是对象。floatingfloat

\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}

在此处输入图片描述

相关内容