对LaTeX环境进行小修改

exc*_*ipy 24 latex

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

\begin{figure} \begin{center}
\end{center} \end{figure}
Run Code Online (Sandbox Code Playgroud)

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

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

几乎这篇博文中找到了我想要的东西,但是那里的例子是一个命令,而不是一个环境.

Ale*_*tov 21

\let\oldfigure\figure
\def\figure{\oldfigure\centering}
Run Code Online (Sandbox Code Playgroud)

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

固定.

\let\oldfigure\figure
\let\oldendfigure\endfigure
\def\figure{\begingroup \oldfigure}
\def\endfigure{\centering \oldendfigure \endgroup}
Run Code Online (Sandbox Code Playgroud)

已修复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
Run Code Online (Sandbox Code Playgroud)

  • 这不起作用,因为figure采用了一个可选参数(如[htbp],这个参数将被重新定义打破). (2认同)

Wil*_*son 5

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

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

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

\usepackage{floatrow}
Run Code Online (Sandbox Code Playgroud)

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

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

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

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