新环境问题

新环境问题

我正在定义新环境,并尝试向其传递两个参数:

\newenvironment{ctable}[2]%
{%
\begin{center}%
    \begin{tabular}{#1}%
}%
{%
    \end{tabular}%
 \captionof{table}{#2}%
\end{center}%
}

问题是第二个参数 ( captionof) 不起作用。有没有好的方法让它工作?我知道captionof可以/应该在\begin{center}它之后或之前,但我需要它位于表格下方。简而言之:第一个参数定义表格,第二个参数定义表格的标题。

谢谢。

答案1

将第二个参数存储为宏并在环境的“结束”部分使用它的技巧:

\newenvironment{ctable}[2]%
{%
  \def\ctablecaption{#2}%
\begin{center}%
    \begin{tabular}{#1}%
}%
{%
    \end{tabular}%
 \captionof{table}{\ctablecaption}%
\end{center}%
}

答案2

使用environ包中可以避免所示的标准技巧平子的回答:

\documentclass{article}
\usepackage{capt-of}
\usepackage{environ}

\NewEnviron{ctable}[2]%
{%
\begin{center}%
    \begin{tabular}{#1}%
    \BODY
    \end{tabular}%
 \captionof{table}{#2}%
\end{center}%
}

\begin{document}

\begin{ctable}{cc}{test}
test & test
\end{ctable}

\end{document}

答案3

你试图避免浮动表格,这非常危险。此外,你还失去了灵活性。但是,如果你真的想搬起石头砸自己的脚;-),这里有一个可能:包裹xparse

\documentclass{article}
\usepackage{xparse,capt-of}

\NewDocumentEnvironment{ctable}{mm} % two arguments in braces
 {% begin part
  \begin{center}
  \begin{tabular}{#1}
 }
 {% end part
  \end{tabular}
  \captionof{table}{#2}
  \end{center}
 }

\begin{document}
\begin{ctable}{ll}{A meaningful caption\label{tab:foo}}
A & B \\
C & D
\end{ctable}
\end{document}

相关内容