我试图tabu
在环境的新定义中包含一个,但如果enddef
新环境的后置 () 包含 tabu 的内容,则它会失败,因此单元格。使用tabular
或tabular*
有效。错误是:
! Missing number, treated as zero. \[email protected]
妇女权利委员会:
\documentclass{article}
\usepackage{tabu}
\newenvironment{testt}
{\begin{tabu} to \textwidth{cccc}
11 & 12 & 13 & 14 \\
21 & 22 & 23 & 24 \\}
{
41 & 42 & 43 & 44
\end{tabu}
}
\begin{document}
\begin{testt}
31 & 32 & 33 & 34 \\
\end{testt}
\end{document}
如何解决这个问题?
答案1
尝试使用包environ
。此包用于\BODY
标记参数的位置,从而避免出现诸如括号不匹配以及本题中出现的问题。
参见文档。
\documentclass{article}
\usepackage{tabu}
\usepackage{environ}
\NewEnviron{testt}
{\begin{tabu} to \textwidth{cccc}
11 & 12 & 13 & 14 \\
21 & 22 & 23 & 24 \\
\BODY
41 & 42 & 43 & 44
\end{tabu}
}
\begin{document}
\begin{testt}
31 & 32 & 33 & 34 \\
\end{testt}
\end{document}
答案2
该tabu
包内部确实
\tabu@collectbody#1#2\end
在排版之前收集表格的所有内容。如果您“隐藏”任何表格,这将无法正常工作。如果您只隐藏表格,则它可以正常工作,\end{tabu}
例如
\documentclass{article}
\usepackage{tabu}
\newenvironment{testt}
{\begin{tabu} to \textwidth{cccc}
11 & 12 & 13 & 14 \\
21 & 22 & 23 & 24 \\}
{
\end{tabu}
}
\begin{document}
\begin{testt}
31 & 32 & 33 & 34 \\
41 & 42 & 43 & 44
\end{testt}
\end{document}
仍然正确抓取所有表格。
如果在单元格内部使用,您会发现有些地方出了问题\showthe\currentgrouplevel
:所有“有效”案例的组级别都是 14,而“错误”案例的组级别是 8。
正如 egreg 所说,这可以说是 中的一个错误tabu
,或者至少是一个应该记录下来的“功能”。为了就解决方法提出建议,我想我们需要知道你想要什么效果,然后才能建议一种替代方法:我认为最好将其作为一个新问题。
答案3
您可以尝试使用该collect
包。注意:我从未使用过,collect
因此tabu
无法专业地评估这是否是一种可行且可靠的方法。
\documentclass{article}
\usepackage{tabu}
\usepackage{collect}
\definecollection{rescuetabu}
\makeatletter
\newenvironment{testt}
{\@nameuse{collect*}{rescuetabu}
{\begin{tabu} to \textwidth{cccc}
11 & 12 & 13 & 14 \\
21 & 22 & 23 & 24 \\ }
{41 & 42 & 43 & 44 \\ \end{tabu}}{}{}}
{\@nameuse{endcollect*}}
\makeatother
\begin{document}
\texttt{normal tabu}
\begin{tabu} to \textwidth{cccc}
11 & 12 & 13 & 14 \\
21 & 22 & 23 & 24 \\
31 & 32 & 33 & 34 \\
\end{tabu}
\hrule\medskip
\texttt{rescued tabus}
\begin{testt}
31 & 32 & 33 & 34 \\
\end{testt}
\bigskip
\begin{testt}
51 & 52 & 53 & 54 \\
61 & 62 & 63 & 64 \\
\end{testt}
\hrule
\end{document}