
Me gustaría mostrar tcolorbox
mensajes electrónicos rompibles con la misma posición horizontal en las páginas, incluso si están en elementos de listas. Podría arreglármelas con cajas irrompibles pero no con cajas rompibles, como lo muestran los siguientes MCE.
De ahí la pregunta: ¿cómo desplazar horizontalmente un frágil tcolorbox
?
\documentclass{article}
\usepackage{showframe}
\usepackage{calc}
\usepackage{lipsum}
\usepackage{tcolorbox}
\tcbuselibrary{breakable}
\newlength{\myshift}
\newtcolorbox{mybox}[1][]{
text width=\textwidth,
before={%
\setlength{\myshift}{\linewidth-\textwidth-5.5mm}%
\smallskip\par
\noindent\hspace*{\myshift}%
},
#1
}
\newcommand{\test}[1][]{%
Foo\par
\begin{mybox}[#1]
\lipsum[1]
\end{mybox}
}
\begin{document}
\section{Non-beakable}
\test
\begin{enumerate}
\item \test
\end{enumerate}
\newpage
\section{Beakable}
\test[breakable]
\begin{enumerate}
\item \test[breakable]
\end{enumerate}
\end{document}
Respuesta1
Dentro de los entornos de lista, el margen izquierdo total se almacena en dimensión \@totalleftmargin
. Por lo tanto, puedes usar enlarge left by=-5.5mm-\@totalleftmargin
para reemplazar before=...
.
\documentclass{article}
\usepackage{showframe}
\usepackage{calc}
\usepackage{lipsum}
\usepackage{tcolorbox}
\tcbuselibrary{breakable}
\makeatletter
\newtcolorbox{mybox}[1][]{
text width=\textwidth,
enlarge left by=-5.5mm-\@totalleftmargin,
#1
}
\makeatother
\newcommand{\test}[1][]{%
Foo\par
\begin{mybox}[#1]
\lipsum[1]
\end{mybox}
}
\begin{document}
\section{Non-beakable}
\test
\begin{enumerate}
\item \test
\end{enumerate}
\newpage
\section{Beakable}
\test[breakable]
\begin{enumerate}
\item \test[breakable]
\end{enumerate}
\end{document}
Observación: before=...
solo se aplica al primer cuadro en una secuencia de cuadros rotos, consulte la documentación de tcolorbox
, sec. 18.1Descripción técnica (de la biblioteca breakable
).