壊れやすい tcolorbox を水平方向にシフトするにはどうすればいいですか?

壊れやすい tcolorbox を水平方向にシフトするにはどうすればいいですか?

リストの項目内にある場合でも、ページ内ですべて同じ水平位置でブレーク可能な es を表示したいと思いますtcolorbox。次の 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=...壊れたボックスシーケンスの最初のボックスにのみ適用されます。のドキュメント、tcolorbox18.1節を参照してください。技術概要(ライブラリbreakable

関連情報