如何水平移動易碎的 tcolorbox?

如何水平移動易碎的 tcolorbox?

我想tcolorbox在頁面中顯示具有相同水平位置的易碎 es,即使它們位於清單項目中。我可以處理不易碎的盒子,但不能處理易碎的盒子,如下 MCE 所示。

因此問題是:如何水平移動易碎的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}

在此輸入影像描述

答案1

在清單環境中,總左邊距儲存在 維度 中\@totalleftmargin。因此您可以使用enlarge left by=-5.5mm-\@totalleftmargin來替換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}

備註:before=...僅適用於斷盒序列中的第一個盒,請參閱tcolorbox、 秒的文件。 18.1技術概述(庫breakable

相關內容