Подтвердить что ты не робот

Создание небольшой модификации среды LaTeX

Я использую \begin{figure} ... \end{figure} во всем документе LaTeX, но стиль по умолчанию уродлив; а именно, цифры все выровнены по левому краю. Есть ли способ переопределить среду "figure", чтобы она автоматически вставляла некоторые команды центрирования, такие как:?

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

Конечно, я мог бы использовать \newenvironment для определения среды "cfigure", но это нежелательно. Я не хочу проходить и менять все свои "цифры" на "cfigures" (а потом понял, что хочу, чтобы все фигуры были выровнены по правому краю и должны переименовать их все в "rfigures" ).

Я мог бы использовать \renewenvironment, но потом мне пришлось бы прорываться через источник LaTeX, чтобы узнать, что изначально было определено в "фигурной" среде, как скопировать/вставить его.

Я почти нашел то, что хотел на этом сообщении в блоге, но пример был для команды, а не для среды.

4b9b3361

Ответ 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[\[email protected] \[email protected]}
\def\[email protected][#1]{\oldfigure[#1]\centering}
\def\[email protected]{\oldfigure\centering}
\makeatother

Ответ 2

Как отмечено в другом ответе, вы не можете использовать старый трюк добавочных команд в конце макроса \figure, потому что это испортит обработку необязательных аргументов.

Если в среде нет аргументов, она будет работать нормально, но в противном случае нет простого способа сделать это.

Для вашей проблемы с цифрами попробуйте загрузить пакет floatrow:

\usepackage{floatrow}

Если вы автоматически центрируете содержимое ваших цифр.

Обновление: Если вы не хотите загружать пакет, здесь есть код, который также будет работать. Обратите внимание, что это специфично для среды figure, но основная тема: копировать исходное определение, анализировать аргументы одинаково, а затем добавлять любой код, который вам нужен в конце.

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

\edef требуется полностью развернуть \[email protected], прежде чем передать макрос \@float.

Ответ 3

Как насчет:

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

Примечание: непроверенный.