我正在寻找一个宏来跨越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}