我正在定义新环境,并尝试向其传递两个参数:
\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}