Beim Versuch mit dem xparse-Befehl \NewDocumentEnvironment eine Umgebung zu definieren, die eine Tabelle beginnt und beendet, erhalte ich eine Fehlermeldung. Mit dem klassischen \newenvironment funktioniert das Ganze aber.

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{xparse}
\usepackage[utf8]{inputenc}
\newenvironment{TabelleFr}
{\begin{tabular}{ll}\hline französisch & deutsch \\ \hline}
{\hline\end{tabular}}
\NewDocumentEnvironment{TabelleLa}{}
{\begin{tabular}{ll}\hline lateinisch & deutsch \\ \hline}
{\hline\end{tabular}}
\begin{document}
\begin{TabelleFr}
liberté & Freiheit \\
egalité & Gleichheit \\
fraternité & Brüderlichkeit \\
\end{TabelleFr}
\bigskip
\begin{TabelleLa}
edere & essen \\
bibere & trinken \\
dormire & schlafen \\
\end{TabelleLa}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Code, hier editierbar zum Übersetzen:
! Misplaced \noalign.
\hline ->\noalign
{\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet...
l.25 \end{TabelleLa}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

gefragt 27 Jan '16, 12:09

Cletus's gravatar image

Cletus
1.6k75866
Akzeptiert-Rate: 75%

bearbeitet 27 Jan '16, 12:23

saputello's gravatar image

saputello
11.1k174365

1

Das Problem ist nicht die tabular-Umgebung. Das Problem ist das \hline. Da \end{TabelleFr} schon etwas ausführt, bevor \hline zum Zuge kommt, ist dessen \noalign dann nicht mehr im korrekten Kontext. Aus ähnlichem Grund funktioniert auch ein mit \NewDocumentCommand{\myhline}{}{\hline} definiertes \myhline nicht in einer Tabelle, während \DeclareExpandableDocumentCommand{\myhline}{}{\hline} funktioniert.

(27 Jan '16, 12:15) saputello

@saputello hat es in einem Kommentar schon angedeutet: zu Beginn einer Tabelle oder zu Beginn einer neuen Tabellenzeile kann per \hline (oder den meines Erachtens schöneren Linien mit booktabs' Befehlen wie \toprule etc.) eine horizontale Tabellenlinie eingefügt werden. Damit die Linie nicht als Teil der ersten Zelle der aktuellen Zeile interpretiert wird, wird dafür unter der Haube das TeX-Primitiv \noalign verwendet.

Open in Online-Editor
\def\hline{\noalign{...}}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Damit \noalign seine Arbeit verrichten kann, darf die aktuelle Zelle noch nicht begonnen haben. Konkret heißt das, dass vor \noalign nur expandierbare Makros stehen dürfen (die auch nicht zu nichtexpandierbarem Inhalt/Output etc expandieren dürfen). Steht irgendetwas derartiges vor \noalign, dann kommt es zu dem berüchtigten »misplaced \noalign«-Fehler wie hier:

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
! Misplaced \noalign.
\hline ->\noalign
{\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet...
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Die Fehlermeldung lässt sich beispielsweise schon mit einem relax hervorrufen, das ja (siehe Link) keinerlei Output erzeugt, aber eben nicht expandierbar ist:

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\begin{document}
\begin{tabular}{c}
\relax \hline
\end{tabular}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

In diesem Fall ist das Problem, dass die Befehle \foo und \endfoo, die durch \NewDocumentEnvironment{foo} definiert werden, \protected, also nicht expandierbar sind, so wie \relax. Da \endfoo aufgerufen werden muss, um die Definition des Umgebungsendes einzufügen, wirst Du hier gebissen.

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\documentclass{article}
\usepackage{xparse}
\NewDocumentEnvironment{tabelle}{}
{\tabular}
{\hline\endtabular}
\show\endtabelle
% > \endtabelle=\protected macro:
% ->\environment tabelle end aux .
\begin{document}
\begin{tabelle}{c}
\hline foo \\
\end{tabelle}
\end{document}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Einfacher Workaround für Deinen Fall: definiere TabelleLa folgendermaßen:

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\NewDocumentEnvironment{TabelleLa}{}
{\tabular{ll}\hline lateinisch & deutsch \\ \hline}
{\\ \hline\endtabular}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Damit wird das Ende der Zeile und der Start der neuen verzögert, und das \noalign in \hline ist tatsächlich das erste in der entsprechenden Zeile. Du musst dann eben das letzte \\ bei der Verwendung der Umgebung weglassen:

Open in Online-Editor
Code, hier editierbar zum Übersetzen:
\begin{TabelleLa}
edere & essen \\
bibere & trinken \\
dormire & schlafen
\end{TabelleLa}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Permanenter link

beantwortet 29 Jan '16, 10:12

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 29 Jan '16, 10:40

Deine Antwort
[Vorschau ausblenden]

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Frage-Themen:

×257
×5

gestellte Frage: 27 Jan '16, 12:09

Frage wurde gesehen: 6,577 Mal

zuletzt geändert: 29 Jan '16, 10:40

Willkommen, erstes Mal hier? Schau mal unter FAQ!

×