我想创建一个具有条件列数的 longtabu 表:在开发模式下,应显示 5 列。在最终版本中,仅应显示第一列和最后一列。
为了实现这一点,我定义了一个新的列类型“H”,它在输出中被抑制(在删除列的最简单方法?)。隐藏具有此列类型的列可以正常工作。
问题是:我无法有条件地在“H”列和“X”列之间切换。我想在我的 longtabu 表中使用不同的列定义,但它不起作用(错误:“对齐制表符放错位置”)。
如何让它工作?
\documentclass[]{scrreprt}
\usepackage{tabu, longtable}
% Create hidden column, see: https://tex.stackexchange.com/q/16604/
\usepackage{collcell}
\makeatletter
\newcolumntype{H}{>{\collectcell\@gobble}c<{\endcollectcell}@{}}
\makeatother
\tabucolumn H
% If defined, only show first and last column
%\def\MyOnlyShowFinalTable{\relax}
\begin{document}
\ifdefined\MyOnlyShowFinalTable
\begin{longtabu} to \textwidth { X[2.0,m,m] | H | H | H | X[7.0,m,m] }
\else
\begin{longtabu} to \textwidth { X[1.3,m,m] | X[0.8,m,m] | X[0.8,m,m] | X[0.8,m,m] | X[5.0,m,m] }
\fi
A & B & C & D & E\\
A & B & C & D & E\\
A & B & C & D & E\\
A & B & C & D & E\\
\end{longtabu}
\end{document}
一些额外的信息:我发现,当使用“c”列而不是“X”列时有一些解决方法:
\documentclass[]{scrreprt}
\usepackage{tabu, longtable}
% If defined, only show first and last column
%\def\MyOnlyShowFinalTable{\relax}
\ifdefined\MyOnlyShowFinalTable
% Create hidden column, see: https://tex.stackexchange.com/q/16604/
\usepackage{collcell}
\makeatletter
\newcolumntype{H}{>{\collectcell\@gobble}c<{\endcollectcell}@{}}
\makeatother
\else
\newcolumntype H{c |}
\fi
\tabucolumn H
%\newcolumntype Y{c |}
%
%\tabucolumn Y
\begin{document}
\begin{longtabu} to \textwidth { X[1.3,m,m] | H H H X[5.0,m,m] }
A & B & C & D & E\\
A & B & C & D & E\\
A & B & C & D & E\\
A & B & C & D & E\\
\end{longtabu}
\end{document}
但是,这仍然不是我想要的,因为它不允许我指定不同的列比率,并且强迫我使用“c”列。
不过,我想知道为什么这对“X”列不起作用?
答案1
问题在于,\fi
在已经读取并构建了表序言的情况下才进行评估。
这是一个工作版本;该\condtabupreamble
命令有四个参数:
- 0 或 1 分别表示选择第三或第四个参数
- 规范
tabu
- 带有“隐藏”列的列规范
- “非隐藏”情况的完整列规范
\documentclass[paper=a4]{scrreprt}
\usepackage{tabu, longtable}
% Create hidden column, see: http://tex.stackexchange.com/q/16604/
\usepackage{collcell}
\makeatletter
\newcolumntype{H}{>{\collectcell\@gobble}c<{\endcollectcell}@{}}
\makeatother
\tabucolumn H
\makeatletter
\newcommand{\condtabupreamble}[4]{%
\ifcase#1\relax
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{#2 {#3}}
{#2 {#4}}%
}
\makeatother
\begin{document}
\condtabupreamble{0}% 1 for the non hidden version
{\begin{longtabu} to \textwidth}
{ | X[2.0,m] | H | H | H | X[7.0,m] | }
{ | X[1.3,m] | X[0.8,m] | X[0.8,m] | X[0.8,m] | X[5.0,m] | }
A & B & C & D & E\\
A & B & C & D & E\\
A & B & C & D & E\\
A & B & C & D & E\\
\end{longtabu}
\condtabupreamble{1}% 1 for the non hidden version
{\begin{longtabu} to \textwidth}
{ | X[2.0,m] | H | H | H | X[7.0,m] | }
{ | X[1.3,m] | X[0.8,m] | X[0.8,m] | X[0.8,m] | X[5.0,m] | }
A & B & C & D & E\\
A & B & C & D & E\\
A & B & C & D & E\\
A & B & C & D & E\\
\end{longtabu}
\end{document}