tcolorbox 中心后出现奇怪的垂直间距

tcolorbox 中心后出现奇怪的垂直间距

这是问题,该问题已部分解决,并建议我开始一个新问题。

我已经用 tcolorbox 创建了一个框,它不应该浮动,并且我想附加一个应该“粘贴”的标题,即它应该与框位于同一页面上。

Zarko 在我之前的问题中提出的解决方案对框内的垂直间距产生了奇怪的影响,如下面的代码所示。

我在上一个问题中想出了一个小解决方法,但标题没有保留。有人对解决方法或修复有什么建议吗?

\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\usepackage[skip=1ex]{caption}

\usepackage{tcolorbox}
\tcbuselibrary{most}
\newtcolorbox{abox}[2][]{enhanced, fonttitle=\bfseries, 
                         attach boxed title to top center={yshift=-2mm}, 
                         title={#2},#1}

\usepackage[unicode=true,
            pdfusetitle,
            bookmarks=true,
            bookmarksnumbered=false,
            bookmarksopen=false,
            breaklinks=false,
            pdfborder={0 0 1},
            backref=false,
            colorlinks=false]{hyperref}

\begin{document}

\begin{center}

\begin{abox}{title}
{
{\begin{enumerate}
\item testttttt 
\end{enumerate}
testttttt
\begin{enumerate}\setcounter{enumi}{1} 
    \item testttttt
\end{enumerate}
testttttt
\begin{enumerate}\setcounter{enumi}{2} 
    \item testttttt
\end{enumerate}}
}
\end{abox}
\captionof{figure}{caption}

\end{center}

\end{document}

答案1

我不确定您示例中的某些项目,因此我更改了其中的一些内容,以便能够首先针对垂直间距不足的问题enumerate。此代码示例显示了 内部和外部的正确垂直间距tcolorbox

\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\usepackage[skip=1ex]{caption}

\usepackage[most]{tcolorbox}

\newtcolorbox{abox}[1][]{enhanced, fonttitle=\bfseries,
    nofloat,    % added to prevent tcolorbox becoming a float
    attach boxed title to top center={yshift=-2mm}, 
    title=#1}

\usepackage{enumitem} % added to use the resume option

\usepackage{lipsum} % just to insert some random text

\begin{document}
    
    \lipsum[1][1-2]
    
        \begin{abox}[title]
            top text
                \begin{enumerate}[leftmargin=*]
                        \item testttttt 
                \end{enumerate}
            
                    testttttt
            
                \begin{enumerate}[resume*]%\setcounter{enumi}{1} 
                    \item testttttt
                \end{enumerate}
                
                    testttttt
                
                \begin{enumerate}[resume*]%\setcounter{enumi}{2} 
                    \item testttttt
                \end{enumerate}
                    testttttt
        \end{abox}
        \captionof{figure}{caption}
    
    \medskip    
    \lipsum[2][1-2]
    
\end{document}

我做了以下更改:

  1. 添加了enumitem包,因此您可以resume*在后续enumerate事件中使用该选项,而无需重置计数器
  2. 将标题中的变量数量更改abox为仅一个。您不需要为框的内容定义变量
  3. 删除了该更改导致的所有多余的括号
  4. 将该选项添加nofloat到您的框定义中,因为您明确表示您不希望该框成为浮动对象
  5. 删除了center环境,因为不再需要防止浮动
  6. 由于标题位于框后面,但未附着于框,因此您需要添加一些垂直空间以增加标题与下一段之间的距离。您不能使用before / after skip balanced来自的选项tcolorbox(请参阅手册中的第 86-88 页)

这些变化的结果:

垂直间距正确

enumerate至于为什么嵌入到环境中时垂直间距首先会发生改变center,我不知道。

编辑以在评论中包含选项

\documentclass[english]{article}
%\usepackage[T1]{fontenc}
%\usepackage[latin9]{inputenc}
\usepackage{babel}
\usepackage[skip=1ex]{caption}

\usepackage[most]{tcolorbox}

\newtcolorbox{abox}[1][]{enhanced, fonttitle=\bfseries,
    nofloat,    % added to prevent tcolorbox becoming a float
    attach boxed title to top center={yshift=-2mm}, 
    title=#1}

\usepackage{enumitem} % added to use the resume option

\usepackage{lipsum} % just to insert some random text

\begin{document}
    
    \lipsum[1][1-2]
    
        \begin{abox}[title]
            caption inside a parbox
                \begin{enumerate}[leftmargin=*]
                        \item testttttt 
                \end{enumerate}
            
                    testttttt
            
                \begin{enumerate}[resume*]%\setcounter{enumi}{1} 
                    \item testttttt
                \end{enumerate}
                
                    testttttt
                
                \begin{enumerate}[resume*]%\setcounter{enumi}{2} 
                    \item testttttt
                \end{enumerate}
                    testttttt
        \end{abox}
        \noindent \parbox{\linewidth}{\captionof{figure}{caption}}
    
    \medskip    
    \lipsum[2][1-2]
    
    \noindent \begin{minipage}{\linewidth}
    
            \begin{abox}[title]
        boxed inside a minipage
        \begin{enumerate}[leftmargin=*]
            \item testttttt 
        \end{enumerate}
        
        testttttt
        
        \begin{enumerate}[resume*]%\setcounter{enumi}{1} 
            \item testttttt
        \end{enumerate}
        
        testttttt
        
        \begin{enumerate}[resume*]%\setcounter{enumi}{2} 
            \item testttttt
        \end{enumerate}
        testttttt
    \end{abox}
    \captionof{figure}{caption}
    \end{minipage}
    
    \medskip
    \lipsum[4][4-8]
    
\end{document}

此代码示例显示了使用后的正确缩进\captionof

minipage 中的 tcb

相关内容