我正在为我的乳胶文档设置一个新环境以获得一致的表格。它看起来像这样:
\newenvironment{defaultTable}[2] {
\begin{table}[h]
\noindent
\tabularx{\textwidth}{#1}
\specialrule{0.5pt}{10pt}{0pt} \rowcolor[gray]{.9}
} {
\bottomrule
\endtabularx
\caption{#2}
\end{table}
}
它似乎没有找到\ end {table}:
! LaTeX错误:输入行23上的\ begin {table}以\ end {document}结束。
有没有办法避免这种情况?
答案 0 :(得分:4)
如果使用xparse机制,最后可以使用#2:
\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}
}
答案 1 :(得分:4)
将\begin{table}
替换为\@float{table}
,并将\end{table}
替换为\end@float
。
\@float
和\end@float
是LaTeX用于启动和结束浮动环境的内部命令。
您还需要遵循Alexey关于#2参数的建议。将其存储在环境的第一部分(\gdef\mycaption{#2}
)中,然后在第二部分中稍后再回忆\caption{\mycaption}
。将\def\mycaption{\relax}
放在\begin{defaultTable}
行之前。
此外,由于\@float
和\end@float
中有@
个符号,如果此代码位于文档文件的前导中(而不是.sty
个文件),您需要在\makeatletter
之前加\begin{defaultTable}
,在\makeatother
之后加\end{defaultTable}
。
答案 2 :(得分:3)
您不能在#2
宏的最后一个参数中使用\newenvironment
。你应该只在第二个参数中使用#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}
}
答案 3 :(得分:2)
我遇到了同样的问题,这是因为“\ end {tabularx}”。解决方案是:
\ newenvironment {defaultTable} [3] {
\开始{表}并[h]
的 \字幕{#2} 强>
\ noindent,会
\开始{tabularx} {\文本宽度} {#1}
\ specialrule {0.5pt} {10pt} {0pt} \ rowcolor [gray] {。9}
的#3 强>
\ bottomrule
\ end {tabularx}
} {
\ end {table}}
因此,您将行定义为参数。
此致 埃里克