代码之家  ›  专栏  ›  技术社区  ›  exclipy

对乳胶环境进行小的修改

  •  22
  • exclipy  · 技术社区  · 16 年前

    \begin{figure} ... \end{figure}

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

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

    我可以用 \renewenvironment

    几乎 找到了我想要的 this blog post ,但这里的示例是针对命令的,而不是针对环境的。

    3 回复  |  直到 12 年前
        1
  •  24
  •   Alexey Malistov    16 年前
    \let\oldfigure\figure
    \def\figure{\oldfigure\centering}
    

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

    固定的。

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

    它与任何选项和规则都能很好地配合使用 \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
    
        2
  •  6
  •   Will Robertson    16 年前

    正如在另一个答案中所指出的那样,您不能使用将命令前置到 \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 宏。

        3
  •  3
  •   Martijn    16 年前

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