Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 35
Текст из файла (страница 35)
Недостаток же такихкоманд в том, что они обходятся с пробелами не так, как все другие, а это легкозабыть.7.2.Определение новых процедурДекларации\newenvironment{env}[num][opt]{begdef}{enddef}\renewenvironment{env}[num][opt]{begdef}{enddef}соответственно определяют новые и переопределяют существующие процедуры.Они могут иметь до пяти аргументов:env — имя процедуры, которое может содержать любую последовательностьбукв, цифр и символа *, но не должно начинаться с end. Для \newenvironmentenv не должно быть именем, которое уже было введено ранее. Напротив, для\renewenvironment оно уже должно быть определено;num — количество аргументов у вновь определяемой процедуры; должно бытьцелым числом от 1 до 9. По умолчанию процедура не имеет аргументов;opt — значение необязательного аргумента.
При наличии [opt] первый аргументпроцедуры env является необязательным и по умолчанию имеет значение opt;при отсутствии [opt] все аргументы env являются обязательными;begdef — текст, подставляемый вместо \begin{env}. Стоящий в begdef параметр#n при подстановке заменяется текстом n-го аргумента;enddef — текст, подставляемый вместо \end{env}. Он не может содержать #-параметров.Аргументы begdef и enddef могут содержать декларации, которые определяютдругие команды и процедуры, если те не имеют аргументов.1637.3.
ТеоремыФигурные скобки, окружающие аргументы процедуры, определённой посредством \newenvironment или \renewenvironment, не ограничивают область действия деклараций, содержащихся в аргументах процедуры.Новая процедура обычно определяется в терминах существующей, такой какitemize. Тогда begdef содержит команду \begin{itemize}, открывающую процедуру itemize, а enddef — \end{itemize}.\newenvironment{emi}[1][\em]{\begin{itemize} #1}{\end{itemize}}Это пример процедуры \texttt{emi}.\begin{emi}\item Она определена при помощипроцедуры \texttt{itemize}.\item Она имеет необязательный параметр.\end{emi}Это пример процедуры emi.• Она определена при помощипроцедуры itemize.• Она имеет необязательный параметр.Необязательные аргументы num и opt позволяют определять процедуры с аргументами.
Они работают так же, как в случае с \newcommand. Вызовем теперьпроцедуру emi, определённую в предыдущем примере, с необязательным аргументом:Это пример процедуры \texttt{emi}.\begin{emi}[\scshape]\item Она определена при помощипроцедуры \texttt{itemize}.\item Она имеет необязательный параметр.\end{emi}Это пример процедуры emi.• Она определена при помощи процедуры itemize.• Она имеет необязательныйпараметр.Параметры #1 . .
. #9 могут появляться только в первой части определенияпроцедуры, т. е. в begdef. Декларация \newenvironment проверяет, не была липроцедура с именем env определена ранее, помогая тем самым избежать случайного переопределения существующей процедуры. Напротив, при использовании\renewenvironment ответственность за последствия целиком ложится на пользователя. Мы вновь предостерегаем Читателя от изменения стандартных процедурLATEX’а, так как это может привести к неожиданным результатам.7.3.ТеоремыКниги и статьи по математике обычно содержат теоремы и другие теоремоподобные структуры, такие как леммы, аксиомы и пр. Нематематический тексттакже может состоять из аналогичных структур: правил, законов, принципов итак далее.
Коллекционирование процедур на каждый случай было бы большойроскошью, и поэтому LATEX располагает декларацией \newtheorem, которая позволяет легко конструировать процедуры для каждой конкретной ситуации.164Глава 7. Программируйте самиСуществуют два варианта \newtheorem:\newtheorem{env}{caption}[within]\newtheorem{env}[theorem]{caption}Оба имеют по два обязательных и одному необязательному аргументу:env — имя процедуры, состоящее из последовательности букв и не совпадающеес именем уже существующей процедуры или счётчика.
Для каждой теоремыenv создаётся счётчик с тем же именем, если в списке аргументов декларации \newtheorem отсутствует опция theorem. При наличии этой опции длянумерации теоремы используется уже существующий счётчик theorem (см.ниже).caption — текст, который должен быть напечатан в начале процедуры непосредственно перед номером;within — имя уже существующего счётчика (обычно соответствующего одной изкоманд секционирования).
Если опция within присутствует, то счётчик envобъявляется внутренним для счётчика within. Другими словами, он будетавтоматически обнуляться при каждом изменении значения within, производимым декларацией \stepcounter{within} или \refstepcounter{within}(раздел 2.9);theorem — имя определённой ранее теоремы. Если опция theorem присутствуетв списке аргументов декларации \newtheorem, то для нумерации процедурыenv будет использован счётчик theorem, а процедуры theorem и env будутиметь единую нумерацию.При каждом вызове процедуры env соответствующий ей счётчик (env или theorem) увеличивается на единицу, а команда \theenv (или \thetheorem) становится текущим ref-значением и используется для организации перекрёстных ссылок(раздел 3.7).
Первоначально команда \theenv определена как \arabic{env} (иликак \thewithin.\arabic{env}, если процедура определена с опцией within). Исходное определение команды \thetheorem зависит от того, как определена процедура theorem. Команды \theenv и \thetheorem могут быть переопределеныпри помощи \renewcommand.Декларация \newtheorem является глобальной, так как она работает со счётчиками, а область определения счётчиков не может быть ограничена никакимифигурными или командными скобками (раздел 2.9). Теоремоподобная процедураможет иметь один необязательный аргумент:\begin{env}[text]Обычно в качестве text указывают имя автора теоремы, аксиомы или закона;text будет вставлен в печатный документ после номера теоремы.Перейдём к примерам.
Начнём с самого простого, но сразу продемонстрируемсхему организации перекрёстных ссылок:1657.3. Теоремы\newtheorem{teo}{Теорема}Теорема \ref{Пифагор}принадлежит Пифагору.\begin{teo}\label{Пифагор}Квадрат гипотенузы равен суммеквадратов катетов.\end{teo}Теорема 1 принадлежит Пифагору.Теорема 1 Квадрат гипотенузыравен сумме квадратов катетов.Здесь для нумерации теоремы заведён счётчик teo. Первоначально он равен нулю, но каждое исполнение одноимённой процедуры увеличивает его значение наединицу. По умолчанию заголовок теоремы имеет полужирную насыщенность, аеё формулировка — курсивное начертание.В следующем примере теорема ttt нумеруется независимо в пределах каждой секции, что определено опцией section в декларации \newtheorem.
Другимисловами, счётчик ttt обнуляется каждой командой \section, начинающей заголовок раздела.\newtheorem{ttt}{Лемма}[section]\begin{ttt}Волга впадает в Каспийское море.\end{ttt}Лемма 7.3.1 Волга впадает вКаспийское море.В следующем примере вводится теоремоподобная процедура hop, которая использует нумерацию, единую с процедурой ttt.\newtheorem{hop}[teo]{Гипотеза}\begin{hop}Солнце восходит на востоке.\end{hop}Гипотеза 2 Солнце восходит навостоке.Помимо номера, теоремы могут иметь названия. Название можно указать в опциитеоремоподобной процедуры. Например, при помощи введённой ранее процедурыteo теорема Ферма формулируется следующим образом:\begin{teo}[Fermat]Нет целых чисел $n>2$, $x$, $y$и $z$ таких, что $x^n+y^n=z^n$.\end{teo}Теорема 3 (Fermat) Нет целыхчисел n > 2, x, y и z таких, чтоxn + y n = z n .Поскольку \newtheorem является глобальной декларацией, её лучше всегопомещать в преамбулу.
Размещение \newtheorem в недрах исходного текста может вызвать совершенно неожиданные затруднения, если входной файл разбитна несколько файлов и они вводятся в корневой файл командой \include (раздел 3.8). Точно так же в файле, вводимом командой \include, нельзя создаватьновые счётчики (раздел 3.8).1667.3.1.Глава 7.
Программируйте самиПакет theoremПакет theorem Франка Миттельбаха (Mittelbach, Frank) из коллекции tools расширяет средства проектирования новых теоремоподобных процедур, вводя понятиестиля теоремы. Стиль теоремы выбирается декларацией(theorem)\theoremstyle{style}из 6-ти вариантов style:plainполностью воспроизводит оригинальный вариант оформления теорем, принятый в формате LATEX, но несколько увеличивает вертикальные пробелы между теоремой и окружающим текстом;changeаналогичен стилю plain, но переставляет местами номер теоремыи её заголовок;marginаналогичен стилю plain, но выносит номер теоремы на левое полестраницы;breakразмещает заголовок теоремы в отдельной строке;changebreak аналогичен стилю break, но переставляет местами номер теоремыи её заголовок;marginbreak аналогичен стилю break, но выносит номер теоремы на поля страницы.Теорема будет иметь тот стиль, который был выбран на момент её определенияпосредством \newtheorem.
Таким образом, в результате следующих определений\theoremstyle{break}\theoremstyle{plain}\newtheorem{Cor}{Предположение}\newtheorem{Exa}{Пример}[section]теорема Cor будет форматировать текст в стиле break, а теорема Exa — в стиле plain. Все последующие теоремы (если они есть) также будут иметь стильplain, пока не встретится другая декларация \theoremstyle. Область действия\theoremstyle можно фиксировать фигурными скобками, тогда как декларация\newtheorem действует глобально.Шрифт, используемый той или иной теоремой по умолчанию, можно изменять независимо от её стиля.
Декларации переключения шрифта, вставляемыенепосредственно перед печатью основного содержания теоремы, извлекаются изаргумента декларации\theorembodyfont{font-dcls}(theorem)Продолжая определять новые теоремоподобные процедуры, добавим ещё однустроку к примеру, начатому выше:\theoremstyle{break} \newtheorem{Cor}{Предположение}\theoremstyle{plain} \newtheorem{Exa}{Пример}[section]{\theorembodyfont{\upshape} \newtheorem{Rem}{Замечание}}7.4. Пакет ifthen167Она устанавливает, что содержание всех теорем Rem будет напечатано шрифтом\upshape при использовании текущего стиля (т.
е. стиля plain). Как и в случае с\theoremstyle, используется текущее содержание \theorembodyfont на моментисполнения \newtheorem. Так как последняя строка целиком заключена в фигурные скобки, действие \theorembodyfont не будет пролонгировано на последующие определения теорем, если такие будут добавлены. По умолчанию (когда\theorembodyfont отсутствует или ничего не содержит) используется шрифт,установленный выбранным стилем.