首页 文章

对LaTeX环境进行小的修改

提问于
浏览
21

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

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

当然,我可以使用 \newenvironment 来定义"cfigure"环境,但是's undesirable. I don't想要通过并将我所有的"figures"更改为"cfigures"(然后我意识到我希望所有的数字都是右对齐的,并且必须将它们全部重命名为"rfigures" ) .

我可以使用 \renewenvironment ,但之后我必须深入研究LaTeX源代码,找出"figure"环境最初被定义为复制/粘贴它的内容 .

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

3 回答

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

    另一个使用可选参数的解决方案 .

    Fixed.

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

    Fixed 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
    
  • 18

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

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

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

    \usepackage{floatrow}
    

    如果将自动居中的数字内容 .

    Update: 如果你没有't want to load a package, here'的一些代码也会这样做 . 请注意,它特定于 figure 环境,但基本主题是:复制原始定义,以相同方式解析参数,然后在最后添加所需的任何代码 .

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

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

  • 5

    怎么样:

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

    注意:未经测试 .

相关问题