Новая среда в латексе, использующая другие среды, компилятор не находит \ end - PullRequest
5 голосов
/ 18 ноября 2009

Я настраиваю новую среду для своего латексного документа для согласованных таблиц. Это выглядит так:

\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: \ begin {table} в строке ввода 23 заканчивается \ end {document}.

Есть ли способ избежать этого?

Ответы [ 4 ]

4 голосов
/ 19 ноября 2009

В конце вы можете использовать # 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}
}
4 голосов
/ 19 ноября 2009

Заменить \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}.

3 голосов
/ 18 ноября 2009

Нельзя использовать #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}
}
2 голосов
/ 15 ноября 2010

У меня та же проблема, и это из-за "\ end {tabularx}". Решение:

\ newenvironment {defaultTable} [3] {
\ Начать {таблица} [ч]
\ титр {# 2}
\ Noindent
\ Начать {tabularx} {\ TextWidth} {# 1}
\ specialrule {0.5pt} {10pt} {0pt} \ rowcolor [grey] {. 9}
# 3
\ bottomrule
\ end {tabularx}
} {
\ end {table}}

Итак, вы определяете строки как параметр.

С уважением, Eric

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...