从另一个 tcolorbox 内部创建边缘 tcolorbox

从另一个 tcolorbox 内部创建边缘 tcolorbox

我已经创建了一个tcbtheorem像这样的新内容:

\usepackage[breakable, theorems, skins]{tcolorbox}
\tcbset{enhanced}

\newtcbtheorem
    [number within = chapter]
    {myexample}
    {examples}
    {   breakable,
        colback=green!5,
        colframe=green!35!black,
        fonttitle=\bfseries,
        shadow={1mm}{-1mm}{0mm}{black!50!white}
    }
    {ex}


\newcommand{\cmmNormalExample}[3]{
    \begin{myexample}{#1}{#2}
        {#3}
    \end{myexample}
}

\newcommand{\cmmMarginalExample}[3]{
   \marginpar{
       \cmmNormalExample{#1}{#2}{#3}
   }
}

使用第二个命令 (\cmmMarginalExample) 尝试在边距中创建一个框。上述命令的独立使用是可以的,但是,当我从第一个命令内部使用此命令时,例如:

\cmmNormalExample{Title A}{exlabelA}{
   blah, blah, ...

   \cmmMarginalExample{Title B}{exlabelB}{
     this must (i.e. "I want to") be in the margin
   }

   blah, blah, ...
}

我收到错误:"! Latex Error: Not in outer par mode."

有什么建议可以避免这个问题吗?

提前致谢。

康斯坦丁诺斯·帕夫洛。

答案1

这种方法有两个关键点。一是放弃,而是使用和 重置\marginpar的组合。二是添加选项,以便将框放置在“原始”位置,而不是在前/后附加无关命令。\leftskip\linewidthnobeforeaftertcolorbox

\documentclass{article}
\usepackage[breakable, theorems, skins]{tcolorbox}
\tcbset{enhanced}
\usepackage{calc}

\newtcbtheorem
    [number within = chapter]
    {myexample}
    {examples}
    {   breakable,nobeforeafter,
        colback=green!5,
        colframe=green!35!black,
        fonttitle=\bfseries,
        shadow={1mm}{-1mm}{0mm}{black!50!white}
    }
    {ex}


\newcommand{\cmmNormalExample}[3]{
    \begin{myexample}{#1}{#2}
        {#3}
    \end{myexample}
}

\newsavebox{\mymargbox}
\newcommand{\cmmMarginalExample}[3]{%
   \sbox{\mymargbox}{\vbox{%
       \linewidth=1.6in%
       \cmmNormalExample{#1}{#2}{#3}%
   }}
   \leftskip 2in%
   \usebox{\mymargbox}
   \leftskip -2in%
  \vspace*{-\ht\mymargbox}%
}
\begin{document}
\cmmNormalExample{Title A}{exlabelA}{
   blah, blah, ...

   \cmmMarginalExample{Title B}{exlabelB}{%
     this must (i.e. "I want to") be in the margin%
   }

   blah, blah, ...
}
\end{document}

在此处输入图片描述

在此处输入图片描述

相关内容