我正在用我最喜欢的一个包进行一些实验: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}