2009-11-18 3 views
5

Ich richte eine neue Umgebung für mein Latex-Dokument für konsistente Tabellen. Es sieht wie folgt aus:Neue Umgebung in Latex mit anderen Umgebungen, Compiler findet nicht end

\newenvironment{defaultTable}[2] { 
    \begin{table}[h] 
    \noindent 
    \tabularx{\textwidth}{#1} 
    \specialrule{0.5pt}{10pt}{0pt} \rowcolor[gray]{.9} 
} { 
    \bottomrule 
    \endtabularx 
    \caption{#2} 
    \end{table} 
} 

Es scheint nicht die \ end {table} obwohl zu finden:

! LaTeX-Fehler: \ begin {table} in der Eingabezeile 23, beendet durch \ end {document}.

Gibt es eine Möglichkeit, dies zu vermeiden?

Antwort

3

ersetzen \begin{table} mit und ersetzen \end{table} mit \[email protected].

Die \@float und \[email protected] sind LaTeXs interne Befehle zum Starten und Beenden der Float-Umgebung.

Sie möchten auch Alexeys Ratschlag auf dem # 2-Parameter folgen. Speichern Sie es im ersten Teil Ihrer Umgebung (\gdef\mycaption{#2}) und rufen Sie es später im zweiten Teil wieder auf \caption{\mycaption}. Setzen Sie \def\mycaption{\relax} kurz vor der \begin{defaultTable} Linie.

Da auch \@float und \[email protected]@ Zeichen in ihnen, wenn dieser Code in der Präambel des Dokuments Datei (statt etwa eine .sty-Datei) ist, müssen Sie \makeatletter vor Ihrer \begin{defaultTable} setzen und auch \makeatother nach \end{defaultTable}.

3

Sie können #2 nicht im letzten Argument der \newenvironment Makros verwenden. Sie sollten # 1 .. # 9 nur im zweiten Argument verwenden.

Speichern Sie Ihre #2 zu \tempa (oder andere Makros). Und verwenden Sie \tempa in der Beschriftung.

\newenvironment{defaultTable}[2]{ 
    \begin{table}[h] 
    \def\tempa{#2} 
    \noindent  
    \tabularx{\textwidth}{#1} \specialrule{0.5pt}{10pt}{0pt} \rowcolor[gray]{.9} 
}{  
\bottomrule  
\endtabularx  
\caption{\tempa} 
\end{table} 
} 
+0

Thx für den Hinweis, es löst nicht das Problem, obwohl ich immer noch den Fehler, die \ begin {table} von \ end beendet {document} – arsenbonbon

+0

schreiben Vollversion Ihrer Datei mit Preambule. –

4

Sie können # 2 am Ende, wenn Sie den xparse Mechanismus verwenden:

\usepackage{xparse} 
\NewDocumentEnvironment{defaultTable}{+m+m}{% 
    \begin{table}[h] 
    \noindent 
    \tabularx{\textwidth}{#1} 
    \specialrule{0.5pt}{10pt}{0pt} \rowcolor[gray]{.9} 
} {% 
    \bottomrule 
    \endtabularx 
    \caption{#2} 
    \end{table} 
} 
2

Ich habe das gleiche Problem, und es ist wegen der "\ end {tabularx}". Die Lösung ist:

\newenvironment{defaultTable}[3] {
\begin{table}[h]
\caption{#2}
\noindent
\begin{tabularx}{\textwidth}{#1}
\specialrule{0.5pt}{10pt}{0pt} \rowcolor[gray]{.9}
#3
\bottomrule
\end{tabularx}
} {
\end{table} }

Sie definieren also die Zeilen als Parameter.

Grüße, Eric

Verwandte Themen