如何跨越可变数量的单元格?

如何跨越可变数量的单元格?

我正在寻找一个宏来跨越tabu环境中的所有单元格以获取表中的类别标题。

此示例实现了我对两列的需求。

\begin{tabu} {XX}
   abc   & def \\
   \multicolumn{2}{c}{category header} \\
   ghi   & jkl \\
\end{tabu}

我想要的是一个不需要指定列数的宏。类别标题应始终跨越环境的所有列tabu

我尝试访问该tabu@nbcols常量,但我不知道该怎么做。以下两个不起作用:

\multicolumn{\tabu@nbcols}{c}{header}
\multicolumn{\the\tabu@nbcols}{c}{header}

我想要的可能是这样的:

\begin{tabu} {XX}
   abc   & def \\
   \mycatheader{category header} \\
   ghi   & jkl \\
\end{tabu}

答案1

\makeatletter
\def\mycatheader#1{\multicolumn{\tabu@nbcols}{c}{#1}}
\makeatother

\begin{document}


\begin{tabu} {XX}
   abc   & def \\
   \mycatheader{category header}\\
   \multicolumn{2}{c}{category header} \\
   ghi   & jkl \\
\end{tabu}

答案2

你很快就明白了。

您的问题是使用带有 @ 字母的宏,这通常是不允许的;您需要写入\makeatletter才能使用 @ 并使\makeatother情况再次正常。

您可以执行以下操作:

在您的序言中,定义一个新的宏来访问列数:

\makeatletter
\edef\mycol{\tabu@nbcols}
\makeatother

tabu环境中:

\begin{tabu} {XX}
abc   & def \\
\multicolumn{\mycol}{c}{header}\\
ghi   & jkl \\
\end{tabu}

你的宏可以这样写:

\def\mycatheader#1{\multicolumn{\mycol}{c}{#1}}

答案3

\documentclass[a4paper]{article}
\usepackage{tabu}
\begin{document}

\begin{tabu} {XX}
 abc   & def \\
 \multicolumn{2}{c}{category header} \\
 ghi   & jkl \\
\end{tabu}

\bigskip
\newcommand{\mycatheader}[1]{\noalign{\medskip\noindent\centerline{\textbf{#1}}\smallskip}}

\begin{tabu} {XX}
abc   & def \\
\mycatheader{category header}
ghi   & jkl \\
\end{tabu}

\end{document}

相关内容