Нет, но каждый раз, когда Вы делаете чрезвычайно сложные вещи как это, Вы могли бы хотеть заново продумать свое решение. Помните, что код должно быть легче считать, чем он должен был записать.
Замените \ begin {table}
на \ @ float {table}
и замените \ end {table}
на \ end @ float
.
\ @ float
и \ end @ float
- это внутренние команды LaTeX для запуска и завершения среды с плавающей запятой.
Вы также захотите последовать совету Алексея по поводу Параметр №2. Сохраните его в первой части вашей среды ( \ gdef \ mycaption {# 2}
), а затем вспомните его позже \ caption {\ mycaption}
во второй части. Поместите \ def \ mycaption {\ relax}
непосредственно перед строкой \ begin {defaultTable}
.
Кроме того, поскольку \ @ float
и \ end @ float
содержат знаки @
, если этот код находится в преамбуле вашего файла документа (вместо, скажем, файла .sty
), вам нужно будет поставить \ makeatletter
перед вашим \ begin {defaultTable}
, а также \ makeatother
после \ end {defaultTable}
.
Вы можете использовать # 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
в последнем аргументе макроса \ 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}
}