Создание небольшой модификации среды LaTeX
Я использую \begin{figure} ... \end{figure}
во всем документе LaTeX, но стиль по умолчанию уродлив; а именно, цифры все выровнены по левому краю. Есть ли способ переопределить среду "figure", чтобы она автоматически вставляла некоторые команды центрирования, такие как:?
\begin{figure} \begin{center}
\end{center} \end{figure}
Конечно, я мог бы использовать \newenvironment
для определения среды "cfigure", но это нежелательно. Я не хочу проходить и менять все свои "цифры" на "cfigures" (а потом понял, что хочу, чтобы все фигуры были выровнены по правому краю и должны переименовать их все в "rfigures" ).
Я мог бы использовать \renewenvironment
, но потом мне пришлось бы прорываться через источник 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[\[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}}
Примечание: непроверенный.