我可以在不使用 wrapfig 包的情况下让 tcolorbox 表现得像 wrapfig 吗?

我可以在不使用 wrapfig 包的情况下让 tcolorbox 表现得像 wrapfig 吗?

我想让文本出现在 tcolorbox 的右侧(例如),而不仅仅是我的 tcolorbox 右侧的空白。

此代码说明了右侧全是白色的 tcolorbox:

\documentclass{book}
\usepackage[most]{tcolorbox}
\usepackage{lipsum}

\begin{document}

\chapter{First}
\section{Furst}
\subsection{Ok}

%Defining a newtcolorbox to be a standard box for all examples in the text:
\newtcolorbox[auto counter,number within=section]{phbox}[1][]{skin=bicolor,title=Figure~\thetcbcounter,#1,size=title,colback=white,colbacklower=black!10!white}


Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.
\begin{phbox}[label={fig:label},halign=center,width=\linewidth/2]
\tcbincludepdf[scale=1,size=tight,opacityframe=0]{example-image.pdf}
\tcblower
Here is a bunch of text to explain a figure.
\end{phbox}
Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere 


\end{document}

我尝试在 tcolorbox 选项中使用nobeforeafter和,但这并没有产生预期的效果。我最好的猜测是使用和 的解决方案,我尝试在手册中寻找线索,但一无所获。after=,beforeafter

我必须使用wrapfig包来实现这一点吗?我更喜欢使用 来实现这一点tcolorbox

谢谢!

编辑:澄清一下:在使用新包之前,我想确保没有明显的简单方法可以使用tcolorbox。我要求的事情似乎应该很容易做到,也许对于手册来说太明显了。

我的文档中已经使用了很多 tcolorbox,如果我可以直接使用after=\somecommandtcolorbox 选项,那么将内容放入 wrapfigure 中会耗费很多工作。

wrapfig而且(对我而言)结合和tcolorbox是否不会出现问题并不明显。

答案1

我知道你问的是非wrapfig答案,但不清楚为什么。它们可以一起工作。我认为更重要的是,它tcolorbox不太关心“颜色框”之外的东西的外观或行为,而wrapfig只关心将东西包裹在其他东西周围……

\documentclass{book}
\usepackage[most]{tcolorbox}
\usepackage{lipsum, wrapfig}
% change "top" vertical spacing in wrapfig
\setlength{\intextsep}{0pt}
\begin{document}

\chapter{First}
\section{Furst}
\subsection{Ok}

%Defining a newtcolorbox to be a standard box for all examples in the text:
\newtcolorbox[auto counter,number
within=section]{phbox}[1][]{skin=bicolor,
  title=Figure~\thetcbcounter,#1,
  size=title,colback=white,colbacklower=black!10!white}


Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.
\begin{wrapfigure}[14]{r}[0pt]{5cm}
\begin{phbox}[label={fig:label},width=\linewidth]
\tcbincludepdf[scale=1,size=tight,opacityframe=0]{example-image.pdf}
\tcblower
Here is a bunch of text to explain a figure.
\end{phbox}
\end{wrapfigure}
Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere

\end{document}

wrapfig+tcolorbox

答案2

这是一个不使用wrapfig包的解决方案。这个想法是定义一个\newcommand{\MyWrapFigure}带有两个参数的宏;第一个是图形,第二个是换行文本。宏计算图形的尺寸并相应地水平和垂直缩进文本。

但是,在将此类宏与 一起使用时应谨慎,例如\hangindent。它并不适用于所有情况。\hangindent在 LaTeX 中乱用 是危险的:列出环境使用会\parshape覆盖它。您可以改用\leftskip

这里使用的宏绝不是完整的,还可以进行很多改进,但这至少是摆脱的第一步wrapfig。我希望它能有所帮助。

\documentclass{book}
\usepackage[most]{tcolorbox}
\usepackage{lipsum,calc}

\newcommand{\MyWrapFigure}[2]{%
\newlength\picwidth
\newlength\picheight
\settowidth\picwidth{#1}
\settoheight\picheight{#1}
\newcount\countA
\countA=\picheight
\divide\countA by \baselineskip
\advance\countA by 2%
\newlength\heightT
\settoheight\heightT{\mbox{T}}%

% set the picture box
\noindent\raisebox{-\picheight+\heightT-\baselineskip}[0pt][0pt]{#1}%

\setlength{\hangindent}{\picwidth+1em}
\hangafter-\countA
\let\OrigPar=\par% save the original \par command
\edef\par{\hfil\break\indent}
% now place the text
\noindent
#2%
\relax\let\par=\OrigPar\par
}

\begin{document}

\chapter{First}
\section{Furst}
\subsection{Ok}

%Defining a newtcolorbox to be a standard box for all examples in the text:
\newtcolorbox[auto counter,number within=section]{phbox}[1][]{skin=bicolor,title=Figure~\thetcbcounter,#1,size=title,colback=white,colbacklower=black!10!white}

Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.
\MyWrapFigure{%
\begin{phbox}[label={fig:label},halign=center,width=\linewidth/2]
\tcbincludepdf[scale=1,size=tight,opacityframe=0]{example-image.pdf}
\tcblower
Here is a bunch of text to explain a figure.
\end{phbox}
}
{%
Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur? At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere 
}

\end{document}

在此处输入图片描述

相关内容