通过 `\tcolorboxenvironment` 取消对环境的修改

通过 `\tcolorboxenvironment` 取消对环境的修改

该命令\tcolorboxenvironment可以修改环境以改变其显示方式并在其周围添加一些图形元素(背景颜色等)。

来自文档:

\newenvironment{myitemize}
{\begin{itemize}}
{\end{itemize}}

\tcolorboxenvironment{myitemize}{blanker, 
                                 before skip=6pt,
                                 after skip=6pt, 
                                 borderline west={3mm}{0pt}{red}}

我想知道是否有可能取消这种myitemize环境的改变。

我的目标是拥有一个可以自定义的环境,当某些“变量”设置为“True”时,否则保留其“原始”形式。目前,我希望能够根据某些“变量”的值将背景颜色添加到环境中。

答案1

的定义\tcolorboxenvironment

\newcommand{\tcolorboxenvironment}[2]{%
  \AddToHook{env/#1/before}{%
    \begin{tcolorbox}[savedelimiter={#1},#2,wrap@environment,%
      code={\def\tcb@end@tcolorboxenvironment{\end{tcolorbox}}}]%
  }%
  \AddToHook{env/#1/after}{%
    \tcb@end@tcolorboxenvironment%
  }%
}

\RemoveFromHook因此,在环境之前和之后应用应该可以解决问题。

\documentclass{article}
\usepackage[skins]{tcolorbox}

\newenvironment{myitemize}
{\begin{itemize}}
{\end{itemize}}

\tcolorboxenvironment{myitemize}{blanker, 
                                 before skip=6pt,
                                 after skip=6pt, 
                                 borderline west={3mm}{0pt}{red}}
\begin{document}

\begin{myitemize}
\item text
\item more text
\end{myitemize}

\RemoveFromHook{env/myitemize/before}
\RemoveFromHook{env/myitemize/after}

\begin{myitemize}
\item text
\item more text
\end{myitemize}
\end{document}

在此处输入图片描述

为了方便起见,您还可以定义一个删除钩子的命令:

\newcommand{\untcolorboxenvironment}[1]{
    \RemoveFromHook{env/#1/before}
    \RemoveFromHook{env/#1/after}
    }

然后将\RemoveFromHook上面文档中的 替换为\untcolorboxenvironment{myitemize}

答案2

非常简单的建议:使用外部变量并简单地包含对环境的检查(使用 etoolbox 等可能会更复杂):

\documentclass{article}
\usepackage[skins]{tcolorbox}

\newtcolorbox{myitemizeenv}{blanker, 
                                 before skip=6pt,
                                 after skip=6pt, 
                                 borderline west={3mm}{0pt}{red}}

\newif\ifstyleme
\newenvironment{myitemize}{%
    \ifstyleme\begin{myitemizeenv}\fi%
    \begin{itemize}
}{%
    \end{itemize}%
    \ifstyleme\end{myitemizeenv}\fi%
}

\begin{document} 

\begin{myitemize}
    \item Item
    \item Item 2
\end{myitemize}

\stylemetrue

\begin{myitemize}
    \item Item
    \item Item 2
\end{myitemize}

\stylemefalse

\begin{myitemize}
    \item Item
    \item Item 2
\end{myitemize}

\end{document}

相关内容