
\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}
Produz um comportamento estranho:
É possível superar isso ou devo fazer o que estou fazendo agora, que é colocar minhas caixas fora da lista?
[EDIT1] Deve-se notar que a remoção listing only
faz com que a compilação falhe e não entendo o porquê
[EDIT2] Na verdade o listing only
problema só aparece quando hbox
está configurado.
Responder1
Como explicou @muzimuzhi Z alraedy, a hbox
não pode ter parte inferior. Portanto, listing only
é necessário aqui.
O problema de mudança é causado pelo \@totalleftmargin
aumento dentro de um itemize
ambiente. Em umnormaltcolorbox, o conteúdo é colocado dentro de um minipage
onde \@totalleftmargin
é definido como zero. Para um hbox
tipo tcolorbox, atualmente não existe tal configuração. Ele se comporta como \fbox
.
Mas acho que seria útil adicionar alguns minipage
recursos ao hbox
tipo para resolver tais problemas de uma forma geral. O patch a seguir adiciona \@parboxrestore
de minipage
para 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%
}
O exemplo completo é
\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}
Se nada crítico acontecer, pretendo adicionar este patch à próxima versão do tcolorbox.