tcolorbox - 定义一个可以为空的标题宏

tcolorbox - 定义一个可以为空的标题宏

我无法使用为框架提供可能为空的标题的宏tcolorbox

在此处输入图片描述

这是使用的代码。

\documentclass{article}
\RequirePackage{tcolorbox}

\begin{document}

\def\thistitle{One title}
\begin{tcolorbox}[title = \thistitle]
    Bla, bla, bla....
\end{tcolorbox}

\def\thistitle{}
\begin{tcolorbox}[title = \thistitle]
    Bla, bla, bla....
\end{tcolorbox}

\begin{tcolorbox}[title = {}]
    Bla, bla, bla....
\end{tcolorbox}
        
\end{document}

答案1

pgfkeys您应该阅读TikZ & PGF 手册.expand once以及.expanded可以解决这里的问题,因为您想要获得与title={}扩展为\thistitle空时相同的结果(.expand once在我看来,这比这里更好.expanded,因为它不会扩展超过必要的范围)。

\documentclass{article}
\usepackage{tcolorbox}

\begin{document}

\newcommand{\thistitle}{One title}
\begin{tcolorbox}[title/.expand once = \thistitle]
    Bla, bla, bla....
\end{tcolorbox}

\renewcommand{\thistitle}{}
\begin{tcolorbox}[title/.expand once = \thistitle]
    Bla, bla, bla....
\end{tcolorbox}

\begin{tcolorbox}[title = {}]
    Bla, bla, bla....
\end{tcolorbox}

\end{document}

在此处输入图片描述

这是使用etoolbox自定义mytitle键的另一种方法。它与之前的技术不同,因为它\thistitle绝不会提供任何扩展title。该title键要么用 调用\thistitle,要么根本不调用。

\documentclass{article}
\usepackage{tcolorbox}
\usepackage{etoolbox}

\tcbset{mytitle/.code={%
  \expandafter\ifstrempty\expandafter{\thistitle}
    {}
    {\pgfkeysalso{title=\thistitle}}%
}}

\begin{document}

\newcommand{\thistitle}{One title}
\begin{tcolorbox}[mytitle = \thistitle]
    Bla, bla, bla....
\end{tcolorbox}

\renewcommand{\thistitle}{}
\begin{tcolorbox}[mytitle = \thistitle]
    Bla, bla, bla....
\end{tcolorbox}

\begin{tcolorbox}[mytitle = {}]
    Bla, bla, bla....
\end{tcolorbox}

\end{document}

与上面相同的输出。

相关内容