加载 boolexpr 时代码失败

加载 boolexpr 时代码失败

我使用此代码来检查现有的列样式(另请参阅这个问题

但是我一加载包就失败了boolexpr。这与不兼容吗etoolbox

\documentclass[]{scrbook}

\RequirePackage{etoolbox}
\makeatletter
\expandafter\let\csname columntype@p\endcsname\@empty
\newcommand\CheckIfColumntypeDefined[1]{%
  \providebool{tpl@coltype@#1}
  \ifcsdef{NC@find@\string#1}%
    {\setbool{tpl@coltype@#1}{true}}%
    {\ifcsdef{columntype@\string#1}
      {\setbool{tpl@coltype@#1}{true}}%
      {\setbool{tpl@coltype@#1}{false}}%
    }%
}
\newcommand\isColumntypeDefined[1]{tpl@coltype@#1}
\newcommand\IfColumntypeDefined[3]{%
  \CheckIfColumntypeDefined{#1}
  \ifboolexpr{ bool{\isColumntypeDefined{#1}} }{#2}{#3}%
}
\makeatother

\RequirePackage{boolexpr}

\begin{document}
\IfColumntypeDefined{p}{p column defined}{p not defined}%
\end{document}

答案1

我也回答了与命令相关的问题。首先,两个包都定义了命令\ifboolexpr。包boolexpr用自己的定义覆盖了现有的定义。这可以从第 78 行定义的警告消息中看出boolexpr.sty

\PackageWarning{boolexpr}{\string\ifboolexpr\space has been defined
                          by etoolbox (I suppose) - Overwritting}

因此,与 配合使用的测试etoolbox会失败,因为在执行时boolexpr将使用包的定义。包boolexpr不像 那样稳定etoolbox

我建议使用etoolbox而不是boolexpr

相关内容