我目前正在尝试使用该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
使用后面的代码,您只能获得“可见内容”。