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 alraedy 所解釋的,ahbox不能有下部。因此,listing only這裡需要。

偏移問題是由環境\@totalleftmargin內部增加所引起的itemize。在一個普通的tcolorbox,內容放在一個設定為零的minipage地方。\@totalleftmargin對於hboxtcolorbox類型,目前沒有這樣的設定。它的行為就像\fbox.

minipage但是,我認為向該類型添加一些功能hbox以一般方式解決此類問題會很有用。以下補丁添加了\@parboxrestoreminipagehbox

\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 版本。

相關內容