如何将 \renewcommand 指令的范围限制到“表格”环境?

如何将 \renewcommand 指令的范围限制到“表格”环境?

我想用它\renewcommand{\arraystretch}{1.2}来调整表格中行与行之间的间距。由于我在论文中到处都使用矩阵(并且此命令也会影响矩阵),因此我想将此命令的范围限制为仅适用于table环境。

我知道我可以使用另一个\renewcommand{\arraystretch}{1}来将 改回原始值\end{table},但是,我想知道是否有任何方法可以限制 的范围\renewcommand

答案1

使 的增加值\arraystretch适用于所有表状结构(例如arraytabulartabular*tabularxtabulary等),但前提是它们发生里面环境table,您可以在文档的序言中发出以下指令:

\makeatletter
\renewenvironment{table}
    {\renewcommand{\arraystretch}{1.2}%
     \@float{table}}
    {\end@float}
\makeatother

(的原始定义table直接取自;和article.cls中给出了相同的定义。)请注意,此重新定义不会影响未在环境内设置的表格结构。report.clsbook.clstable

答案2

我只是发现,如果我\renewcommand在环境本身内使用,范围将仅限于该环境。

\begin{table}
\renewcommand{\arraystretch}{1.2}

TABLE CODE


\end{table}

答案3

为何沒有etoolbox答案?

\documentclass{article}
\usepackage{amsmath}
\usepackage{etoolbox}
\AtBeginEnvironment {tabular}{\renewcommand{\arraystretch}{3}}
\begin{document}

\begin{tabular}{c}
foo \\ bar \\ baz
\end{tabular}

\[
\begin{matrix}
foo \\ bar \\ baz
\end{matrix}
\]

\end{document}

在此处输入图片描述

只需将其table替换tabular为即可。table\AtBeginEnvironment {table}{\renewcommand{\arraystretch}{3}}

etoolbox提供以下环境挂钩:

  1. \AtBeginEnvironment {<environment>}{<code>}
  2. \AtEndEnvironment {<environment>}{<code>}
  3. \BeforeBeginEnvironment {<environment>}{<code>}
  4. \AfterEndEnvironment{<environment>}{<code>}

钩子 1 和 2 将限制<code>环境内部。有关详细信息,texdoc.nettexdoc etoolbox从命令行。

答案4

对于更通用的解决方案,限制\renewcommand{}在范围内使用\bgroup\egroup定义范围。代码

\newcommand{\foo}{foo}
\foo
...
\bgroup
    \renewcommand{\foo}{bar}
    \foo
\egroup
...
\foo

将产生

foo...酒吧...foo

相关内容