itemize 中 tcblisting 的奇怪缩进

itemize 中 tcblisting 的奇怪缩进
\documentclass{article}

\usepackage[listings]{tcolorbox}

\newtcblisting{mylisting}{
  listing only,
  size=fbox,
}

\newtcblisting{mylistingb}{
  listing only,
  size=fbox,
  hbox,
}

\begin{document}
\begin{itemize}
  \item
  \begin{mylisting}
blah
  \end{mylisting}

  \item
  \begin{mylistingb}
blah
  \end{mylistingb}
\end{itemize}
\end{document}

输出奇怪的行为:

在此处输入图片描述

是否有可能克服这个问题,或者我应该做我现在正在做的事情,即将我的盒子放在项目之外?

[EDIT1] 需要注意的是,删除listing only会导致编译失败,我不明白为什么

[EDIT2] 实际上,listing only只有在hbox设置时才会出现此问题。

答案1

正如@muzimuzhi Z 已经解释的那样,ahbox不能有下部。因此,listing only这里需要。

移位问题是由于环境\@totalleftmargin中的移位增加而引起的itemize。在普通的tcolorbox,内容放在设置为零的minipage位置。对于tcolorbox 类型,目前没有这样的设置。它的行为类似于。\@totalleftmarginhbox\fbox

minipage但是,我认为为该类型添加一些功能以通用方式解决此类问题会很有用hbox。以下补丁将从\@parboxrestore添加minipagehbox

\long\def\tcbox@inner@hbox#1{%
  \tcbset{breakable@false,sidebyside=false}%
  \tcb@set@@phantom%
  \sbox\tcb@upperbox{\tcb@embed@tcbox{%
    \csname tcb@parbox@use@\kvtcb@parbox\endcsname%
    \@parboxrestore%
    \color{tcbcolupper}\kvtcb@fontupper\kvtcb@halignupper\tcb@insert@before@upper#1\tcb@insert@after@upper}}%
  \tcbdimto\tcb@val@raisebase{\the\dimexpr\dp\tcb@upperbox+\kvtcb@bottom+\kvtcb@boxsep+\kvtcb@bottom@rule@stand+\kvtcb@bbbottom@stand\relax}%
  \tcbdimto\kvtcb@width{\wd\tcb@upperbox+\kvtcb@left@rule+\kvtcb@leftupper+\kvtcb@boxsep*2+\kvtcb@rightupper+\kvtcb@right@rule}%
  \tcb@hasLowerfalse%
  \tcb@set@@title%
  \tcb@set@@dimensions%
  \tcb@draw@color@box%
}

完整示例为

\documentclass{article}

\usepackage[listings]{tcolorbox}

% patch
\makeatletter
\long\def\tcbox@inner@hbox#1{%
  \tcbset{breakable@false,sidebyside=false}%
  \tcb@set@@phantom%
  \sbox\tcb@upperbox{\tcb@embed@tcbox{%
    \csname tcb@parbox@use@\kvtcb@parbox\endcsname%
    \@parboxrestore%
    \color{tcbcolupper}\kvtcb@fontupper\kvtcb@halignupper\tcb@insert@before@upper#1\tcb@insert@after@upper}}%
  \tcbdimto\tcb@val@raisebase{\the\dimexpr\dp\tcb@upperbox+\kvtcb@bottom+\kvtcb@boxsep+\kvtcb@bottom@rule@stand+\kvtcb@bbbottom@stand\relax}%
  \tcbdimto\kvtcb@width{\wd\tcb@upperbox+\kvtcb@left@rule+\kvtcb@leftupper+\kvtcb@boxsep*2+\kvtcb@rightupper+\kvtcb@right@rule}%
  \tcb@hasLowerfalse%
  \tcb@set@@title%
  \tcb@set@@dimensions%
  \tcb@draw@color@box%
}
\makeatother


\newtcblisting{mylisting}{
  listing only,
  size=fbox,
}

\newtcblisting{mylistingb}{
  listing only,
  size=fbox,
  hbox,
}

\begin{document}
\begin{itemize}
  \item
  \begin{mylisting}
blah
  \end{mylisting}

  \item
  \begin{mylistingb}
blah
  \end{mylistingb}
\end{itemize}
\end{document}

如果没有出现任何严重问题,我打算将此补丁添加到下一个 tcolorbox 版本中。

相关内容