我正在尝试在列设置中使用条件tabular
。也就是说,一列(实际上是几列)的定义取决于布尔值(从包中设置etoolbox
)。
我array
也需要该包,但是一旦我添加它(或依赖它的其他包),我就会收到错误:
! Package array Error: Illegal pream-token (\ifbool): `c' used.
我尝试将我的列定义打包成一个新的列类型,如下所述这里以及一些csname
技巧这里,但无济于事。
这是一个最小(非)工作示例
\documentclass{article}
\usepackage{etoolbox}
\usepackage{array}
\newbool{MyBoolean} \setbool{MyBoolean}{true}
\begin{document}
\begin{tabular}{
l
\ifbool{MyBoolean}{c}{}
r
}
Left & \ifbool{MyBoolean}{Center &}{} Right \\
Left & \ifbool{MyBoolean}{Center &}{} Right
\end{tabular}
\end{document}
有任何想法吗?
答案1
我会用collcell
收集并有条件地设置列条目:
\documentclass{article}
\usepackage{etoolbox,array,collcell}
\newcolumntype{C}{>{\collectcell\usermacro}c<{\endcollectcell}}
\newcommand{\usermacro}[1]{\ifbool{MyBoolean}{#1}{\hspace*{-2\tabcolsep}}}
\newbool{MyBoolean}
\begin{document}
% Control tabular
\begin{tabular}{ l c r }
Left & Center & Right \\
Left & Center & Right
\end{tabular}
\setbool{MyBoolean}{true}
\begin{tabular}{ l C r }
Left & Center & Right \\
Left & Center & Right
\end{tabular}
\setbool{MyBoolean}{false}
\begin{tabular}{ l C r }
Left & Center & Right \\
Left & Center & Right
\end{tabular}
\end{document}
对错误布尔值的修正是\tabcolsep
使用负空间删除任何列分隔(宽度)。