Ein Tabu kann nicht in \newenvironment mit Zellen im Postambel eingefügt werden

Ein Tabu kann nicht in \newenvironment mit Zellen im Postambel eingefügt werden

tabuIch versuche, ein in eine neue Definition einer Umgebung einzubinden , aber es schlägt fehl, wenn das Postambel ( enddef) der neuen Umgebung den Inhalt von tabu, also Zellen, enthält. Mit tabularoder tabular*funktioniert es. Der Fehler ist:

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

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

Wie kann man das lösen?

Antwort1

Probieren Sie das Paket aus environ. Dieses Paket \BODYmarkiert die Position des Parameters, wodurch Probleme wie nicht übereinstimmende Klammern und das, was in dieser Frage auftrat, vermieden werden.

Sehen Sie sich diedokumentieren.

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

Antwort2

Das tabuPaket funktioniert intern

\tabu@collectbody#1#2\end

um den gesamten Inhalt der Tabelle vor dem Satz zu sammeln. Das funktioniert nicht richtig, wenn Sie einen Teil der Tabelle „verstecken“. Es funktioniert, wenn Sie nur den Inhalt verbergen, \end{tabu}wie zum Beispiel

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

erfasst immer noch die gesamte Tabelle korrekt.

Sie können sehen, dass etwas nicht stimmt, wenn Sie innerhalb der Zellen verwenden \showthe\currentgrouplevel: Alle „funktionierenden“ Fälle haben die Gruppenebene 14, während der „falsche“ Fall die Gruppenebene 8 hat.

Wie egreg sagt, handelt es sich hier wohl um einen Fehler in tabuoder zumindest um ein „Feature“, das dokumentiert werden sollte. Um Ratschläge zu einer Problemumgehung zu geben, müssen wir wohl wissen, welchen Effekt Sie erzielen möchten, und können dann einen alternativen Ansatz vorschlagen: Ich denke, das wäre am besten als neue Frage.

Antwort3

Sie können es mit dem collectPaket versuchen. Nota bene: Da ich weder collectnoch jemals verwendet habe tabu, kann ich nicht fachmännisch beurteilen, ob dies ein praktikabler und robuster Weg ist.

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

gerettetes Tabu

verwandte Informationen