我使用此代码来检查现有的列样式(另请参阅这个问题)
但是我一加载包就失败了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
。