使用 excludecomment 隐藏 newtcolorbox 在结束命令时出现错误

使用 excludecomment 隐藏 newtcolorbox 在结束命令时出现错误

我目前正在尝试使用该comment包有条件地隐藏一些自定义的tcolorbox,但我一直收到错误。我怀疑这是答案地址问题的根源,但我不明白如何将建议的修复应用到我自己的使用中newtcolorbox......

这是一个 MWE(当然,受到我当前代码的启发,但比我当前的代码简单得多):

\documentclass[a4paper, 11pt]{article}
\usepackage{comment}
\usepackage{tcolorbox}

\newtcolorbox{myTestTCB}[1][title={default title}]{
    #1
}

\excludecomment{myTestTCB}

\begin{document}

\begin{myTestTCB}[title=custom title]
    hidden content
\end{myTestTCB}

\end{document}

这给了我以下错误(这是一个摘录,但据我所知,这是日志中第一个有用的消息):

[...] Excluding 'myTestTCB' comment.
/.../mwe.tex:12: Undefined control sequence.
\endtcolorbox ->\tcb@insert@after@part 
                                       \end {tcb@savebox}\tcb@reset@color \t...
l.12 \end{myTestTCB}
                    
/.../mwe.tex:12: Too many }'s.
\endtcb@savebox ...efalse \color@endgroup \egroup 
                                                  \expandafter \@iiiparbox \...
l.12 \end{myTestTCB}
[...]

不使用时,此 MWE 工作正常excludecomment。我该如何修复此问题?

答案1

您可以在不使用包的情况下实现目标comment。只需重新定义myTestTCB环境,这样它什么也不做。为此,您需要使用\RenewDocumentEnvironment(来自xparse包,但如果您有最新的 LaTeX,则无需加载它,因为它仍在其内核中)而不是renewenvironment因为前者允许您在环境中捕获材料,所以我们可以忽略它以便不显示它。

\documentclass[a4paper, 11pt]{article}

\usepackage{tcolorbox}

\newtcolorbox{myTestTCB}[1][title={default title}]{
    #1
}

\RenewDocumentEnvironment{myTestTCB}{o +b}{}{}

\begin{document}

Text

\begin{myTestTCB}[title=custom title]
    hidden content
\end{myTestTCB}

\end{document}

如果您需要更高级的解决方案,您可以定义 2 个命令(\deactivatemyTestTCB\activatemyTestTCB)。例如:

\documentclass[a4paper, 11pt]{article}
\usepackage{comment}
\usepackage{tcolorbox}

\newtcolorbox{myTestTCB}[1][title={default title}]{
    #1
}

\newcommand{\deactivatemyTestTCB}{\RenewDocumentEnvironment{myTestTCB}{o +b}{}{}}

\newcommand{\activatemyTestTCB}{\renewtcolorbox{myTestTCB}[1][title={default title}]{##1}}

\begin{document}

Text

\deactivatemyTestTCB

\begin{myTestTCB}[title=custom title]
    hidden content
\end{myTestTCB}

\activatemyTestTCB

\begin{myTestTCB}[title=custom title]
    visible content
\end{myTestTCB}

\end{document}

请注意,您需要在的定义中使用##1而不是,因为参数是嵌入的。#1\activatemyTestTCB

使用后面的代码,您只能获得“可见内容”。

在此处输入图片描述

相关内容