Extraña sangría de tcblisting dentro de itemize

Extraña sangría de tcblisting dentro de itemize
\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}

Produce un comportamiento extraño:

ingrese la descripción de la imagen aquí

¿Es posible superar esto o debería hacer lo que estoy haciendo ahora, que es poner mis cajas fuera del itemize?

[EDITAR1] Cabe señalar que la eliminación listing onlyhace que la compilación falle y no entiendo por qué

[EDITAR2] En realidad, el listing onlyproblema solo aparece cuando hboxestá configurado.

Respuesta1

Como explicó @muzimuzhi Z ya, a hboxno puede tener una parte inferior. Por lo tanto, listing onlyes necesario aquí.

El problema del cambio se debe a \@totalleftmarginque aumenta dentro de un itemizeentorno. en unnormaltcolorbox, el contenido se coloca dentro de un minipagedonde \@totalleftmarginse establece en cero. Para un hboxtipo tcolorbox, actualmente no existe tal configuración. Se comporta como \fbox.

Pero creo que sería útil agregar algunas minipagecaracterísticas al hboxtipo para resolver este tipo de problemas de manera general. El siguiente parche agrega \@parboxrestorede minipagea hbox:

\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%
}

El ejemplo completo es

\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}

Si no surge nada crítico, tengo la intención de agregar este parche a la próxima versión de tcolorbox.

información relacionada