
Ich möchte zerbrechliche tcolorbox
E-Boxen mit derselben horizontalen Position auf den Seiten anzeigen, auch wenn sie sich in Listenelementen befinden. Bei nicht zerbrechlichen Boxen käme ich damit klar, bei zerbrechlichen jedoch nicht, wie die folgenden MCEs zeigen.
Daher die Frage: Wie verschiebt man etwas Zerbrechliches horizontal 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}
Antwort1
In Listenumgebungen wird der gesamte linke Rand in der Dimension gespeichert \@totalleftmargin
. Daher können Sie enlarge left by=-5.5mm-\@totalleftmargin
zum Ersetzen verwenden 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}
Bemerkung: before=...
wird nur auf die erste Box in einer unterbrochenen Box-Sequenz angewendet, siehe Dokumentation von tcolorbox
, Abschnitt 18.1Technischer Überblick (der Bibliothek breakable
).