我想重新定义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}