tcolorbox 覆盖和所需空间

tcolorbox 覆盖和所需空间

我将从 转为mdframed使用tcolorbox,并且我正在几乎我想要去的地方。

使用mdframed,我可以使用singleextrafirstextra参数将节点添加到我的框架中,这会改变整个框架的高度(即,如果我的新节点伸出框架上方,则整个框架的高度会增加;如果我的新节点伸出框架下方,则整个框架的高度也会增加)。这让我的生活变得轻松。

使用tcolorbox,我可以使用overlay参数将节点添加到框架,但大小不会自动调整。如果你包含\tcbuselibrary{hooks,skins}(不确定哪个具体是这样做的)一个enlarge top by参数,它将添加所需的空间,以便突出在框架上方的节点不会与先前的内容重叠。

下面的 MWE 显示了覆盖和的使用enlarge top by

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{skins,hooks}
\usepackage{lipsum}

\tcbset{
  frogbox/.style={
    enhanced,
    colback=green!10,
    colframe=green!65!black,
    enlarge top by=5.5mm,
    overlay={
      \foreach \x in {2cm,3.5cm} {
        \begin{scope}[shift={([xshift=\x]frame.north west)}]
        \path[draw=green!65!black,fill=green!10,line width=1mm] (0,0) arc (0:180:5mm);
        \path[fill=black] (-0.2,0) arc (0:180:1mm);
        \end{scope}
      }
    }
  }
}

\tcbset{
  app/.style={
    overlay app={%
      \draw(frame.north)--(frame.south);
    }
  }
}

\begin{document}

\lipsum[1]
\begin{tcolorbox}[frogbox,title=My title]
This is a \textbf{tcolorbox}.
\end{tcolorbox}

\lipsum[2]
\begin{tcolorbox}[frogbox,app,title=My title]
This is a \textbf{tcolorbox}.\par
Here, we apply a second overlay.
\end{tcolorbox}
\end{document}

由于enlarge top by,眼睛不会与 frogbox 上方的文本重叠。删除enlarge top by,眼睛就会与 frogbox 上方的文本重叠。

话虽如此,有没有其他方法overlay可以解决框架+节点可能增加的大小问题?有没有比检查可能添加的每个节点(它不是每个此类框架的静态列表,而是有关元信息的标记)更简单的方法来管理这个问题,以查看是否需要增加分配给框架的空间?

我可以简单地假设新节点将存在并为它们分配空间,并且无论是否存在额外的节点(我当前的策略),看到框架在页面顶部对齐确实很不错,但我想探索一种更复杂的呈现方式,其中额外的空间是否存在取决于节点是否存在。有什么简单的方法可以做到这一点?

答案1

我尝试了一下如何实现返回边界框跟踪tikz。解决方案很简单。如果你添加

\tikzset{overlay=false}

到您的覆盖代码,跟踪将重新建立。

笔记:tcolorboxTeX Live 2013 附带的/无效。TikZ更新至 TeX Live 2106 修复。保持最新状态!--kjd

在此处输入图片描述

完整代码如下:

\documentclass{article}
\usepackage{tcolorbox}
\tcbuselibrary{skins,hooks}
\usepackage{lipsum}

\tcbset{
  frogbox/.style={
    enhanced,
    colback=green!10,
    colframe=green!65!black,
    enlarge top by=5.5mm,
    overlay={
      \tikzset{overlay=false}%< -----------------------
      \foreach \x in {2cm,3.5cm} {
        \begin{scope}[shift={([xshift=\x]frame.north west)}]
        \path[draw=green!65!black,fill=green!10,line width=1mm] (0,0) arc (0:180:5mm);
        \path[fill=black] (-0.2,0) arc (0:180:1mm);
        \end{scope}
      }
    }
  }
}

\tcbset{
  app/.style={
    overlay app={%
      \draw([yshift=2cm]frame.north)--(frame.south);
    }
  }
}

\begin{document}

\lipsum[1]
\begin{tcolorbox}[frogbox,title=My title]
This is a \textbf{tcolorbox}.
\end{tcolorbox}

\lipsum[2]
\begin{tcolorbox}[frogbox,app,title=My title]
This is a \textbf{tcolorbox}.\par
Here, we apply a second overlay.
\end{tcolorbox}
\end{document}

请注意,我不认为这会对易碎的盒子有任何帮助。计算出的尺寸与实际尺寸不完全相同,并且破碎看起来不正确。

对于牢不可破的盒子,这应该可行,但会干扰边界框设置等enlarge top by

相关内容