Работа в системе LaTeX

       

Размещение плавающих объектов на странице


Сейчас мы обсудим параметры, которыми руководствуется LaTeX при размещении плавающих объектов на странице.

Сразу же отметим, что все эти параметры относятся в равной мере к плавающим иллюстрациям и плавающим таблицам, и любое изменение этих параметров также затрагивает плавающие объекты всех типов.

Часть параметров, отвечающих за плавающие объекты, представляет собой LaTeX'овские счетчики, которым можно присваивать новые значения командой \setcounter:

  • \topnumber Максимальное количество плавающих объектов, которое разрешается разместить вверху страницы (при двухколонном наборе и иллюстрациях/таблицах шириной в колонку — вверху колонки). Значение по умолчанию:
    .
  • \bottomnumber Максимальное количество плавающих объектов, которое разрешается разместить внизу страницы (при двухколонном наборе и иллюстрациях/таблицах шириной в колонку — внизу колонки). Значение по умолчанию:
    .
  • \totalnumber Максимальное количество плавающих объектов, которое разрешается разместить на странице (при двухколонном наборе и иллюстрациях/таблицах шириной в колонку — в колонке). Значение по умолчанию:
    .
  • \dbltopnumber При наборе в две колонки: максимальное количество плавающих объектов шириной во всю страницу, которое разрешается разместить вверху страницы. Значение по умолчанию:
    .

Значение счетчика totalnumber не влияет на количество иллюстраций и/или таблиц на странице, специально для них предназначенной (таковая, как мы помним, выделяется, если в необязательном аргументе окружения {figure} или {table} присутствует буква p).

Вторая группа параметров регулирует уже не количество плавающих иллюстраций на странице, а величину места, ими занимаемого. Все эти параметры являются командами наподобие \arraystretch или \baselinestretch; чтобы менять значения параметров, надо их переопределять с помощью команды \renewcommand. Эти параметры таковы:

  • \topfraction Максимальная доля страницы, которую могут занимать плавающие объекты, размещаемые вверху страницы. Значение по умолчанию:
    . Это означает, что плавающие иллюстрации и таблицы, размещаемые вверху страницы, могут занимать не более 70% страницы по высоте.
    Если мы хотим уменьшить эту долю, скажем, до 50%, надо написать \renewcommand{\topfraction}{0.5} Ниже слова "доля страницы" также всюду означают "доля страницы по высоте".
  • \bottomfraction Максимальная доля страницы, которую могут занимать плавающие объекты внизу страницы. Значение по умолчанию:
    .
  • \textfraction Минимальная доля страницы, которую должен занимать текст, а не плавающие объекты (к страницам, создаваемым LaTeX'ом специально для размещения плавающих объектов при обработке необязательного аргумента p, это не относится). Значение по умолчанию:
    .
  • \floatpagefraction Этот параметр, напротив, относится именно к страницам, которые LaTeX создает при обработке необязательного аргумента p. Он указывает минимально возможную долю такой страницы, которую могут занимать размещаемые на ней плавающие иллюстрации и таблицы. Значение по умолчанию:
    (стало быть, специальная страница для плавающих иллюстраций, которую вы требуете с помощью необязательного аргумента p к окружению {figure}, не будет создана, пока эти иллюстрации занимают менее 50% высоты страницы текста).
Все вышеуказанные параметры применимы также к двухколонному набору и плавающим объектам шириной в колонку. Если же набор — в две колонки, а ширина плавающего объекта — целая страница, то используются такие параметры:

  • \dbltopfraction То же, что \topfraction, применительно к иллюстрациям (таблицам) шириной в целую страницу при двухколонном наборе. Значение по умолчанию:
    .
  • \dblfloatpagefraction То же, что \floatpagefraction, применительно к иллюстрациям (таблицам) шириной в целую страницу при двухколонном наборе. Значение по умолчанию:
    .
При вычислении, какую часть страницы занимает плавающий объект, учитывается не только размер собственно иллюстрации или таблицы, но и величина вертикальных отступов (" отбивок"), отделяющих этот объект от остального текста. Эти отступы задаются следующей группой параметров. Все эти параметры суть длины, присваивать им новое значение надо с помощью \setlength.



  • \textfloatsep Отступ между текстом и иллюстрациями (таблицами), размещаемыми вверху или внизу страницы.
  • \ floatsep Отступ между двумя иллюстрациями (таблицами).
  • \intextsep Отступ между текстом и иллюстрациями (таблицами), размещаемыми посреди страницы (при обработке необязательного аргумента h).
Как водится, три перечисленных параметра применимы и к иллюстрациям (таблицам) шириной в колонку при двухколонном наборе. А вот как обозначаются соответствующие параметры, если набор в две колонки, а иллюстрация или таблица занимает по ширине всю страницу:

  • \dbltextfloatsep При двухколонном наборе - отступ между текстом и иллюстрацией (таблицей), занимающей всю страницу по ширине.
  • \dblfloatsep При двухколонном наборе - отступ между двумя иллюстрациями (таблицами), занимающими всю страницу по ширине.
Если вы почему-либо решите менять эти параметры с помощью команды \setlength, полезно иметь в виду, что при пользовании шрифтом кегля
значения \floatsep, \intextsep и \dblfloatsep равны 12pt plus 2pt minus 2pt, а значения \textfloatsep и \dbltextfloatsep равны 20pt plus 2pt minus 4pt.

По умолчанию плавающие объекты не отделены от текста ничем, кроме вышеперечисленных отбивок. Но можно сделать и так, чтобы иллюстрации (таблицы) отделялись от текста как-то иначе (линейками, например). Для этих целей предусмотрены следующие три команды:

  • \topfigrule Разделитель между плавающим объектом, размещаемым вверху страницы (колонки), и остальным текстом.
  • \botfigrule Разделитель между текстом и размещаемым внизу страницы (колонки) плавающим объектом.
Эти две команды относятся и к двухколонному набору, при условии, что иллюстрации (таблицы) занимают по ширине одну колонку (иными словами, если используются окружения {figure} или {table} без звездочек). А если используются варианты этих окружений со звездочками, то используется еще один параметр:

  • \dblfigrule То же, что \topfigrule, для случая, когда набор двухколонный, а плавающий объект занимает по ширине всю страницу.
По умолчанию указанные три команды ничего не делают.


Если вы хотите задать явные разделители между текстом и иллюстрациями (таблицами), то эти команды надо определить с помощью \newcommand.7). Определять эти команды нужно не произвольным образом: чтобы они правильно стыковались с LaTeX'овскими алгоритмами размещения плавающих объектов, нужно иметь в виду следующее:

  1. каждая из этих команда будет выполняться в те моменты, когда TeX находится в вертикальном режиме;
  2. по окончании работы каждой из этих команд TeX должен снова оказаться в вертикальном режиме;
  3. текст, генерируемый каждой из этих команд, не должен, с точки зрения TeX'а, занимать места по вертикали.
Поэтому будет неправильно, если вы, решив отделять текст от иллюстраций линейкой, определите \botfigrule просто как \hrule: первое и второе условия при этом выполнены будут, а вот третье — нет, в результате чего LaTeX собьется со счета при решении вопроса о размещении иллюстраций. Формально правильным было бы такое решение:

\newcommand{\botfigrule}{\hrule\vspace{-0.4pt} (вспомним, что линейка, генерируемая командой \hrule, имеет по умолчанию толщину 0.4pt). Впрочем, формальной правильности мало: если вы опробуете такое определение на практике, то увидите, что линейка вплотную прилегает к иллюстрации, что никуда не годится. Правильно действовать, например, так:

\newcommand{\botfigrule}{\vspace{-3pt}\hrule \vspace{2.6pt}} Теперь мы проводим линейку не прямо по верхней кромке иллюстрации, а на три пункта выше; заключительное \vspace{2.6pt} нужно для того, чтобы в сумме получилось нулевое вертикальное смещение.

С \topfigrule и \dblfigrule вы сможете теперь разобраться самостоятельно.

В заключение отметим, что разделители, определяемые \topfigrule и ей подобными командами, не обязаны быть именно линейками: необходимо только при их определении учитывать три перечисленных выше обстоятельства.


Содержание раздела