![通过 `\tcolorboxenvironment` 取消对环境的修改](https://linux22.com/image/383257/%E9%80%9A%E8%BF%87%20%60%5Ctcolorboxenvironment%60%20%E5%8F%96%E6%B6%88%E5%AF%B9%E7%8E%AF%E5%A2%83%E7%9A%84%E4%BF%AE%E6%94%B9.png)
该命令\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}