2009-10-14 17 views
17

私はLaTeXドキュメント全体で\begin{figure} ... \end{figure}を使っていますが、デフォルトのスタイリングは醜いです。つまり、数字はすべて左揃えです。それは自動的に、このような、これはLaTeX環境を少し変更する

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

確か?:などのいくつかの中心のコマンドを挿入して、「フィギュア」の環境を再定義する方法がありますが、私は「cfigure」環境を定義するために\newenvironmentを使用することができますが、それは望ましくないです。私はすべての「人物」を「人形」に変更したいと思います(そして、後で私はすべての人物を右揃えにして、それらをすべて「改装」するために名前を変更しなければなりません)。

私は\renewenvironmentを使用することができますが、その後、私はそれを貼り付ける/「フィギュア」環境は、もともとコピーとして定義されていたものを見つけるためにLaTeXソースを通じて掘るする必要があると思います。私

はほとんど見つけたものI this blog postが欲しかったのですが、その例は環境ではなくコマンドでありました。

答えて

15
\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[\[email protected] \[email protected]} 
\def\[email protected][#1]{\oldfigure[#1]\centering} 
\def\[email protected]{\oldfigure\centering} 
\makeatother 
+2

figureは、この定義で壊れてしまう[htbp]のようなオプションの引数を取るため、これは機能しません –

+1

Ummm ...右。再考します –

+1

Hmmm、新しいソリューションをテストしましたか?私にとってはうまくいかないようです。 –

5

別の答えで述べたように、あなたはその意志台無しにオプションの引数の処理をするので\figureマクロの最後にコマンドを付加する古いトリックを行うことはできません。

環境に引数がない場合は正常に動作しますが、そうでない場合はこれを行う簡単な方法はありません。図面とあなたの問題のために

、floatrowパッケージをロードしてみてください。

\usepackage{floatrow} 

自動的に数値の内容を中心に説明する場合。

更新:パッケージを読み込みたくない場合は、ここでコードを読み込んでください。 figureに固有のことですが、基本的なテーマは、元の定義をコピーし、引数を同じ方法で解析し、最後に必要なコードを追加することです。

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

\edefは、それが\@floatマクロに渡される前に完全に\[email protected]を拡大するために必要とされます。

+0

私は定義をコピーすることを含まない解決策を求めましたが、とにかくこれを試して、未定義のコマンド "\ fps"を得ました。 – exclipy

+0

私は定義をコピーせずに(この場合)行うことが不可能な理由について説明しました。 '@'を含むコマンドを(再)定義するときに、コードの周りに '\ makeatletter' ...' \ makeatother'を追加する必要があります。 –

2

方法について:

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

注:テストされていません。

+3

このアプローチでは何も問題はありませんが、後者は必要ではない追加の垂直パディングを追加するため、 'center'環境の代わりに' \ centering'を使用するべきです。 –

+0

良い点。私はこれを自分で回避しようとしてきました。ありがとう! – Martijn

+3

私が質問したように、私は別の名前でそれを再定義したくない。 – exclipy

関連する問題