No se puede incluir un 'tabú' dentro de \newenvironment con celdas en el postámbulo

No se puede incluir un 'tabú' dentro de \newenvironment con celdas en el postámbulo

Estoy tratando de incluir tabudentro de una nueva definición de un entorno, pero falla si el postámbulo ( enddef) del nuevo entorno incluye el contenido del tabú, es decir, las celdas. Con tabularo tabular*funciona. El error es:

! Missing number, treated as zero. \[email protected]

El MWE:

\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}

¿Cómo solucionar esto?

Respuesta1

Pruebe el paquete environ. Este paquete utiliza \BODYpara marcar la posición del parámetro, lo que evita problemas, como la falta de coincidencia de llaves y lo que ocurrió en esta pregunta.

ver sudocumento.

\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}

Respuesta2

El tabupaquete internamente

\tabu@collectbody#1#2\end

para recoger todo el contenido de la tabla antes de componerla. Eso no funcionará correctamente si "oculta" alguna parte de la tabla. Funciona si solo ocultas el \end{tabu}como por ejemplo

\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}

todavía agarra toda la mesa correctamente.

Puedes ver que algo anda mal si usas \showthe\currentgroupleveldentro de las celdas: todos los casos "funcionales" tienen el nivel de grupo 14, mientras que el "incorrecto" es el nivel de grupo 8.

Como dice egreg, podría decirse que esto es un error tabu, o al menos una "característica" que debería documentarse. Para aconsejarle sobre una solución alternativa, supongo que necesitamos saber qué efecto busca y luego podemos sugerir un enfoque alternativo: creo que sería mejor como una nueva pregunta.

Respuesta3

Puedes probar con el collectpaquete. Nota bene: nunca lo he usado collectni tabuseguramente soy incapaz de evaluar de manera experta si esta es una forma viable y sólida.

\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}

tabú rescatado

información relacionada