
tabu
Ich 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 tabular
oder 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 \BODY
markiert 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 tabu
Paket 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 tabu
oder 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 collect
Paket versuchen. Nota bene: Da ich weder collect
noch 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}