tcolorbox 中的 savelowerto 选项在包装器命令中失败

tcolorbox 中的 savelowerto 选项在包装器命令中失败

我正在用我最喜欢的一个包进行一些实验:tcolorbox,下面的代码是从一个更大的“项目”中剪切/减少的,缩减为一个命令

\newcommand{\splitmycontent}[2]{%
\begin{tcolorbox}[lowerbox=ignored,savelowerto={lowerboxcontent}]
  #1%
  \tcblower%
  #2%
\end{tcolorbox}%
}%

内容实际上在外面被分成splitmycontent了两部分,但我们假设这已经完成了(它有效),但用这种方法保存下部会失败。

使用直接方法,无需“包装器”,代码就可以工作。

我怀疑逐字内容出了问题,但目前我对这条消息一无所知

! Bad space factor (0). <recently
read> \@savsf

我拥有 TeXLive 2014 的最新更新,因此很可能不是软件包过时的问题。

这是一个非常小的 MWE,有问题的行被注释掉了:

\documentclass{article}

\usepackage{tcolorbox}%

\newcommand{\splitmybox}[2]{%
\begin{tcolorbox}[lowerbox=ignored,savelowerto={lowerboxcontent}]
  #1%
  \tcblower%
  #2%
\end{tcolorbox}%
}%


\begin{document}
% Fails
%\splitmybox{Gandalf the Grey}{rides to Saruman the White}%

% Direct usage
\begin{tcolorbox}[lowerbox=ignored,savelowerto={lowerboxcontent}]%
Gandalf the Grey%
\tcblower%
rides to Saruman the White%
\end{tcolorbox}%

% Loading the lower box content
\begin{tcolorbox}[colback=red]
\input{lowerboxcontent}
\end{tcolorbox}
\end{document}

答案1

\tcblower命令使 TeX 进入一种verbatim模式,因此分隔符必须是细绳 \end{tcolorbox}而不是代币\end{tcolorbox}

解决方案:使用\scantokens

\documentclass{article}

\usepackage{tcolorbox}%

\newcommand\splitmybox[2]{%
  \scantokens{\begin{tcolorbox}[lowerbox=ignored,savelowerto={lowerboxcontent}]
    #1%
    \tcblower
    #2%
  \end{tcolorbox}}%
}

\begin{document}

\splitmybox{Gandalf the Grey}{rides to Saruman the White}%

% Loading the lower box content
\begin{tcolorbox}[colback=red]
\input{lowerboxcontent}
\end{tcolorbox}

\end{document}

在此处输入图片描述

相关内容