使用 \renewenvironment 命令重新定义表格环境时出现问题

使用 \renewenvironment 命令重新定义表格环境时出现问题

在我正在排版的一本书中,我希望表格环境采用脚注大小,而书的其他正文采用正常大小的字体。为此,我尝试了以下方法:

‎‎‎‎‎‎‎\re‎newenvironment‎{‎‎tabular‎‎}[1][t‎]{\footnotesize‎‎‎‎‎
\begin{tabular}‎
‎‎‎‎‎‎‎‎‎‎‎‎‎[#1]}{‎‎‎‎\end{tabular}‎\normalsize‎‎‎‎}‎

但我收到以下错误:

! TeX capacity exceeded, sorry [save size=50000]. 
 <to be read again> 
               \relax 
 l.72 \centering\begin{tabular}{
                           cccccc}

顺便说一下,我使用如下表格:

\begin{‎table}[t]‎
\caption{Title}\label{tab1‎}‎‎
‎\centering‎‎‎‎‎\begin{‎tabular}{c‎c‎‎‎‎‎‎c‎‎c‎‎‎‎cc‎‎}‎‎‎
‎....
‎‎‎\end{‎tabular}‎
\end{‎table}‎‎

我在这里做错什么了吗?

12月28日编辑(另一个问题):

在下面的代码中,如果我还想添加一个\centering命令,我应该把它放在哪里?我把它放在了前面和后面,\footnotesize但是不起作用!

\let\oldtabular\tabular
\let\endoldtabular\endtabular
\renewenvironment{tabular}{\bgroup\footnotesize\oldtabular}%
                          {\endoldtabular\egroup}

答案1

更好的方法是使用你自己的自定义定义一个新的表格环境

\newenvironment{smalltabular}{\footnotesize\tabular}{\endtabular}

然后使用smalltabular而不是tabular。需要注意以下几点:

  • 在定义新环境时,不用和,只需\begin{tabular}\end{tabular}和就足够\tabular\endtabular
  • 您不需要为 注册任何参数smalltabular,因为其定义中的最后一个命令(即\tabular)已经将查找并适当地处理任何参数。

如果出于某种原因你真的要重新定义表格环境,首先需要保存其旧定义,然后重新定义。例如:

\let\oldtabular\tabular
\let\endoldtabular\endtabular
\renewenvironment{tabular}{\footnotesize\oldtabular}{\endoldtabular}

答案2

在同一宏的重新定义中使用该\tabular宏将产生无限循环。请尝试以下操作:

\makeatletter
\renewcommand{\tabular}{\let\@halignto\@empty\footnotesize\@tabular}
\makeatother

答案3

当您使用 \renewenvironment 时,它不会扩展新定义,直到使用时才扩展。因此,在您的情况下,当您调用它时,它会尝试扩展新的表格环境并替换您在其中包含的 \begin{tabular},从而导致另一个,依此类推,导致无限循环。

一般来说,你不能根据其自身来定义环境或命令,除非你非常小心地确保它是递归地有充分依据的。

(编辑:抱歉,我们重复了同样的步骤;我们同时回答了。)

相关内容