在带有数组的表格序言中使用条件

在带有数组的表格序言中使用条件

我正在尝试在列设置中使用条件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使用负空间删除任何列分隔(宽度)。

相关内容