对LaTeX环境进行小修改

时间:2009-10-14 12:39:50

标签: latex

我在整个LaTeX文档中一直使用\begin{figure} ... \end{figure},但默认样式很丑陋;即,这些数字都是左对齐的。有没有办法重新定义“数字”环境,所以它会自动插入一些像这样的居中命令?:

\begin{figure} \begin{center}
\end{center} \end{figure}

当然,我可以使用\newenvironment来定义“cfigure”环境,但这是不可取的。我不想通过将所有“数字”改为“cfigures”(然后我意识到我希望所有的数字都是右对齐的,并且必须将它们全部重命名为“rfigures”)。

我可以使用\renewenvironment,但之后我必须深入了解LaTeX源代码,找到最初定义为“数字”环境的内容,将其复制/粘贴。

几乎this blog post找到了我想要的东西,但是那里的例子是一个命令,而不是一个环境。

3 个答案:

答案 0 :(得分:20)

\let\oldfigure\figure
\def\figure{\oldfigure\centering}

使用可选参数的另一种解决方案。

<强>固定。

\let\oldfigure\figure
\let\oldendfigure\endfigure
\def\figure{\begingroup \oldfigure}
\def\endfigure{\centering \oldendfigure \endgroup}

已修复2. 它适用于任何选项和任何规则以及\par内部。

\makeatletter
\let\oldfigure\figure
\def\figure{\@ifnextchar[\figure@i \figure@ii}
\def\figure@i[#1]{\oldfigure[#1]\centering}
\def\figure@ii{\oldfigure\centering}
\makeatother

答案 1 :(得分:5)

正如在另一个答案中所指出的那样,你无法做到将命令添加到\figure宏末尾的旧技巧,因为这会搞乱可选参数处理。

如果环境没有参数,那么它将正常工作,但除此之外没有直接的方法。

对于图中的问题,请尝试加载floatrow包:

\usepackage{floatrow}

如果会自动将数字内容置于中心位置。

更新:如果您不想加载软件包,可以使用以下代码。请注意,它特定于figure环境,但基本主题是:复制原始定义,以相同方式解析参数,然后在最后添加所需的任何代码。

\makeatletter
\renewenvironment{figure}[1][\fps@figure]{
  \edef\@tempa{\noexpand\@float{figure}[#1]} 
  \@tempa\centering
}{
  \end@float
}
\makeatother

\edef在传递给\fps@figure宏之前需要完全展开\@float

答案 2 :(得分:2)

怎么样:

\newenvironment{centeredfigure}{\begin{figure}\begin{center}}{\end{center}\end{figure}}

注意:未经测试。