PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabelle - \newenvironment - Runaway argument?



Wolfgang K.
07-03-2005, 16:35
Hallo!

Vielleicht kann mal kurz jemand einem Anfänger helfen und sagen warum untenstehender Code folgenden Fehler prduziert: "Runaway Argument? ! File ended while scanning use of \TX@get@body."

Klammern habe ich keine vergessen und unerlaubte Leerzeilen gibt's doch auch nicht, oder?


\documentclass[a4paper,12pt]{scrartcl}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[ngerman]{babel}
\usepackage{tabularx}

\newenvironment{tab}
{\begin{table}[htbp]
\centering
\captionabove{Tabellentitel}
\label{t:Tabellenlabel}
\begin{tabularx}{13cm}{C C C}}
{\end{tabularx}
\end{table}}

\newcolumntype{C}{>{\small\centering\arraybackslash}X}

\begin{document}

\begin{tab}
Spalte 1 & Spalte 2 & Spalte 3
\end{tab}

\end{document}

Mit bestem Dank im Voraus,
Wolfgang!

Salnic
07-03-2005, 17:02
Hi Wolfgang und herzlich willkommen hier im Forum,

habe mir nur mal ganz schnell Deinen Quelltext angesehen und drei kleine Anmerkungen dazu. Ob das die Ursache Deiner Fehler sind? Vielleicht.







\newenvironment{tab}
{\begin{table}[htbp]
\centering
\captionabove{Tabellentitel}
\label{t:Tabellenlabel}
\begin{tabularx}{13cm}{C C C}}
{\end{tabularx}
\end{table}}

\newcolumntype{C}{>{\small\centering\arraybackslash}X}


1. Du definierst eine neue Umgebung (tab) mit einer neuen Spaltendefinitionen (C). Da Latex von oben nach unten arbeitet, kennt Latex zu diesem Zeitpunkt C noch nicht. --> Reihenfolge ändern, also erst \newcolumntype{C}, dann \newenvironment{tab}

2. Du definierst in der neuen Umgebung ein Label mit label{t:Tabellenlabel}. Wie willst Du unterschiedliche Tabellen unterscheiden? Jede neue tab-Umgebung erhält jetzt das gleiche Label? --> Labeldefinition nicht dort, sondern entweder mit Parameterübergabe (geht das?) oder im "laufenden Text". Mit Tabellentitel ist das gleiche Problem.

3. In Deiner Konstruktion

{\begin{table}[htbp]
\centering
\begin{tabularx}{13cm}{C C C}}
{\end{tabularx}
\end{table}}
gibt es tatsächlich ein Klammerproblem.

besser ist es wie folgt:


{\begin{table}[htbp]
\centering
\begin{tabularx}{13cm}{C C C}
\end{tabularx}
\end{table}}

Ich bezweifle aber, ob das überhaupt funktioniert, ob man so einfach eine neue Tabellenumgebung definieren kann. Vielleicht hast Du Glück! Berichte bitte, ob es funktioniert, bin sehr gespannt.

ich denke, Du musst auch den Tabelleninhalt als Parameter übergeben und das ganze als Makro schreiben.

Salnic

Salnic
07-03-2005, 17:09
zu Deiner Fehlermeldung und was sie bedeutet.

Warum untenstehender Code folgenden Fehler prduziert: "Runaway Argument? ! File ended while scanning use of \TX@get@body."
Latex will Dir sagen, dass es nichts zu übersetzen gibt. Außer der Tab-Umgebung gibt es ja wirklich nichts und wahrscheinlich (wohl eher offensichtlich) kann Latex nichts mit der Tab-Umgebung anfangen.

Salnic

mr. pelle
07-03-2005, 17:25
Moin moin,

ersteinmal herzlich willkommen im Forum.

Zu den Anmerkungen zu Salnic:
zu 1: Die Umgebung wird zwar vor der Spaltendefinition erstellt, aber eigentliche Aufruf geschieht ja erst nach der Spaltendefinition mit \begin{tab}..\end{tab}. Daher ist hier alles soweit in Ordnung.
zu 2: Tja Wolfgang, da musst du dir was anderes einfallen lassen. So bekommen alle Tabellen ja das gleiche Label.
zu 3: Salnic, bist du dir sicher, das du die Syntax von \newenvironment kennst? Die Klammern sind schon so in Ordnung gewesen.

Und jetzt zum eigentlichen Problem. Ich habe den Code mal durchlaufen lassen und bin auf die gleiche Fehlermeldung gestoßen.
Die Fehlermeldung tritt bei mir nicht auf, wenn ich anstelle von tabularx nur tabular verwende - natürlich muss der Code etwas abgeändert werden.
Den Unterschied zwischen den beiden Versionen ist mir nicht wirklich klar. Ich werde mal sehen, ob ich da noch etwas herausfinden kann.

Einen schönen Abend

Mr. Pelle

Wolfgang K.
07-03-2005, 17:45
Danke für die rasche und ausführliche Antwort!


Reihenfolge ändern, also erst \newcolumntype{C}, dann \newenvironment{tab}
Hab ich geändert, funktioniert aber trotzdem nicht.


2. Du definierst in der neuen Umgebung ein Label mit label{t:Tabellenlabel}. Wie willst Du unterschiedliche Tabellen unterscheiden? Jede neue tab-Umgebung erhält jetzt das gleiche Label? --> Labeldefinition nicht dort, sondern entweder mit Parameterübergabe (geht das?) oder im "laufenden Text". Mit Tabellentitel ist das gleiche Problem.
Tabellentitel und Label (sowie Tabellenbreite und Spaltendeklination) hab ich nur in diesem Beispielcode fix angegeben, da die Parameterübergabe soweit problemlos funktioniert und nur das Beispeil umfangreicher machen würde.


3. In Deiner Konstruktion gibt es tatsächlich ein Klammerproblem.
Aber bei deinem Vorschlag wird die eigentliche Tabelle nicht eingebunden. Die Syntax lautet ja \newenvironment{Name}[Anzahl]{Begin}{End}



Ich bezweifle aber, ob das überhaupt funktioniert,
Ich mittlerweile auch, schreib hier aber, wenns doch noch funktionieren sollte.

Grüße,
Wolfgang

Wolfgang K.
07-03-2005, 17:56
zu 2: Tja Wolfgang, da musst du dir was anderes einfallen lassen.
Ja, ich weiß, dass mit der Parameterübergabe funktioniert aber ohne Probleme, darum hab ich's weggelassen.

Und jetzt zum eigentlichen Problem. Ich habe den Code mal durchlaufen lassen und bin auf die gleiche Fehlermeldung gestoßen.
Die Fehlermeldung tritt bei mir nicht auf, wenn ich anstelle von tabularx nur tabular verwende - natürlich muss der Code etwas abgeändert werden.
Den Unterschied zwischen den beiden Versionen ist mir nicht wirklich klar. Ich werde mal sehen, ob ich da noch etwas herausfinden kann.
Danke für den Hnweis, werde mal versuchen, da irgendwo anzusetzen.


Einen schönen Abend

Danke, ebenso!

mr. pelle
07-03-2005, 18:07
Ich bin dem ganzen ein wenig näher gekommen:
Es liegt an der Defnition von tabularx, dass man es nicht so einfach in eine neue Umgebung packen kann (Genauere Beschreibung siehe Dokumentaion). Um dieses zu umgehen muss man an Stelle von \begin{tabularx} tabularx{}{} und an Stelle von \end{tabularx} \endtabularx verwenden. Allerdings gibt es dann weiterhin die Fehlermeldung, wenn die table-Umgebung aktiviert ist. Also, kleine Zwischenbilanz, wie es funktioniert:


\documentclass{scrartcl}
\usepackage{tabularx}

\newenvironment{tab}
{
\tabularx{3cm}{CCC}
}
{
\endtabularx
}

\newcolumntype{C}{>{\small\centering\arraybackslash}X}

\begin{document}

\begin{tab}
Spalte 1&Spalte 2&Spalte 3
\end{tab}

\end{document}

Mal sehen, ob ich noch was herausfinden kann...