使用 memoir 自动更改所有表格环境的文本宽度

使用 memoir 自动更改所有表格环境的文本宽度

我想重新定义table我正在编写的文档中的环境,以便表格和标题比文本块更宽。我正在使用该类memoir,手册中给出的示例是

\documentclass{memoir}

\begin{document}

Lorem ipsum dolor sit amet, ...

\begin{table}
\begin{adjustwidth*}{-1in}{-1in}

\begin{tabular}{ll}
1 & 2\\
3 & 4
\end{tabular}

\caption{Lorem ipsum dolor sit amet, ...}
\end{adjustwidth*}
\end{table}

Lorem ipsum dolor sit amet, ...

\end{document}

这正如我所愿。我的下一步是自动对文档中的所有表格进行此更改。看来该\renewenvironment命令是解决此问题的正确方法,我尝试进行此更改:

\documentclass{memoir}

\let\originaltable\table
\let\originalendtable\endtable
\renewenvironment{table}[1][ht]{%
    \originaltable[%
    \begin{adjustwidth*}{-1in}{-1in}%
    #1%
    \end{adjustwidth*}]%
    }%
    {\originalendtable}

\begin{document}

Lorem ipsum dolor sit amet, ...

\begin{table}
\begin{tabular}{ll}
1 & 2\\
3 & 4
\end{tabular}

\caption{Lorem ipsum dolor sit amet, ...}
\end{table}

Lorem ipsum dolor sit amet, ...

\end{document}

编译时没有错误,但adjustwidth*环境似乎没有任何影响。我一定是误解了如何使用\renewenvironment;有人能给出建议让它工作吗?

答案1

您需要使用以下(重新)定义table

\renewenvironment{table}[1][ht]%
  {\originaltable[#1]% \begin{table}[ht]
   \begin{adjustwidth*}{-1in}{-1in}}%
  {\end{adjustwidth*}\originalendtable}% \end{table}

第一个参数#1是的可选参数\begin{table},现在将其传递给\origingaltable

在处理使用可选参数的函数时,你可以谨慎使用letltxmacro包裹

在此处输入图片描述

\documentclass{memoir}% http://ctan.org/pkg/memoir
\usepackage{letltxmacro}% http://ctan.org/pkg/letltxmacro
\LetLtxMacro{\originaltable}{\table}
\LetLtxMacro{\originalendtable}{\endtable}
\renewenvironment{table}[1][ht]%
  {\originaltable[#1]% \begin{table}[ht]
   \begin{adjustwidth*}{-1in}{-1in}
  }%
  {\end{adjustwidth*}\originalendtable}% \end{table}
\begin{document}

Lorem ipsum dolor sit amet, ...

\begin{table}
\begin{tabular}{ll}
1 & 2\\
3 & 4
\end{tabular}

\caption{Lorem ipsum dolor sit amet, ...}
\end{table}

Lorem ipsum dolor sit amet, ...

\end{document}​

相关内容