2009-11-18 35 views
5

我爲我的一貫表乳膠文件建立一個新的環境。它看起來像這樣:新的環境中,編譯器不能找到結束

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

它似乎並沒有找到\ {結束}表雖:

! LaTeX錯誤:輸入行23上的\ begin {table}由\ end {document}結尾。

有沒有辦法避免這種情況?

回答

3

更換\begin{table}與與\[email protected]取代\end{table}

\@float\[email protected]是開始和結束的浮動環境的LaTeX的內部命令。

您也想跟隨的#2參數阿列克謝的意見。將其存儲在環境的第一部分(\gdef\mycaption{#2})中,然後在第二部分中調用它\caption{\mycaption}。在\begin{defaultTable}行之前放\def\mycaption{\relax}

而且,由於\@float\[email protected]在他們@跡象,如果這個代碼是在你的文檔文件(而不是說,一個​​文件)的序言中,你需要你的\begin{defaultTable},也\makeatother之前把\makeatletter之後\end{defaultTable}

3

你不能在\newenvironment宏的最後一個參數使用#2。您應該僅在第二個參數中使用#1 ..#9。

保存您的#2\tempa(或宏)。並在標題中使用\tempa

\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的提示,它並不雖然解決這個問題,我仍然得到的是\ {開始}表由\ {結束}文件結束 – arsenbonbon 2009-11-18 11:29:28

+0

寫完整版的錯誤你與preambule文件。 – 2009-11-18 12:23:57

4

可以在結尾使用#2,如果你使用xparse機制:

\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

我已經有同樣的問題,這是因爲「\ {結束} tabularx」的。解決方法是:

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

因此您將行定義爲參數。

問候, 埃裏克