【问题标题】:Making a small modification to a LaTeX environment对 LaTeX 环境进行小修改
【发布时间】:2009-10-14 12:39:49
【问题描述】:

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

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

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

我可以使用\renewenvironment,但我必须深入研究 LaTeX 源代码才能找到最初定义为“图形”环境的复制/粘贴。

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

【问题讨论】:

    标签: latex


    【解决方案1】:
    \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
    

    【讨论】:

    • 这行不通,因为 figure 接受一个可选参数(如 [htbp] 将被此重新定义破坏。
    • 嗯,你测试过你的新解决方案了吗?似乎对我不起作用。
    • (顺便说一下,我刚开始重新定义环境时也犯了同样的错误;)
    • 第二种解决方案对我也不起作用。数字没有居中。有人有什么想法吗?
    • 已修复。需要下移“\centering”。
    【解决方案2】:

    正如另一个答案中所述,您不能使用将命令添加到 \figure 宏末尾的旧技巧,因为这会弄乱可选参数处理。

    如果环境没有参数,那么它可以正常工作,但否则没有直接的方法可以做到这一点。

    对于您的数字问题,请尝试加载 floatrow 包:

    \usepackage{floatrow}
    

    如果会自动将您的图形内容居中。

    更新:如果您不想加载包,这里有一些代码也可以。请注意,它特定于 figure 环境,但基本主题是:复制原始定义,以相同方式解析参数,然后在末尾添加您需要的任何代码。

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

    \edef 需要完全扩展 \fps@figure,然后才能传递给 \@float 宏。

    【讨论】:

    • 我确实要求提供不涉及复制定义的解决方案,但我还是尝试了这个并得到了一个未定义的命令“\fps”。
    • 我解释了为什么不复制定义就不可能(在这种情况下)。当(重新)定义包含@ 的命令时,您需要在代码周围添加\makeatletter...\makeatother(我将其添加到我的示例中)。
    【解决方案3】:

    怎么样:

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

    注意:未经测试。

    【讨论】:

    • 这种方法没有问题,但您应该使用\centering 而不是center 环境,因为后者添加了不必要的额外垂直填充。
    • 正如我在问题中所说,我不想用另一个名字重新定义它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    相关资源
    最近更新 更多