Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 86
Текст из файла (страница 86)
При наличии в одном документе и одноколоночных, и двухколоночных рисунков (или таблиц) порядок их следования может нарушаться,так что двухколоночный рисунок может оказаться впереди следующего за нимодноколоночного рисунка (или наоборот). Этот изъян в алгоритме размещенияплавающих объектов устраняет загрузка пакета fixltx2e. Пакет fixltx2e лечит ещёнесколько дефектов, которые, вероятно, будут исправлены в новых выпусках системы LATEX. В частности, он разрешает редкую проблему, когда в колонтитулпопадает текст из второй колонки, а не из первой, что кажется более логичным.17.4.Пакет multicolОписанными выше средствами невозможно сформировать страницу с переменным числом колонок, так как команды \twocolumn и \onecolumn всегда начинаютпечатать текст с новой страницы.
Кроме того, колонки оказываются несбалансированными, т. е. имеют разную длину. Пакет multicol, написанный ФранкомМиттельбахом (Mittelbach, Frank), решает эти проблемы. Он вводит процедуруmulticols, которая• может создавать до 10-ти колонок на произвольном числе страниц;• выравнивает колонки на последней странице так, чтобы их длины былиприблизительно одинаковы;40717.4. Пакет multicol• может использоваться внутри другой процедуры, такой как figure илиminipage, где она производит бокс с текстом, распределённым на заданное число колонок;• может проводить между колонками вертикальные разделительные линиизаданной толщины;• имеет удобные средства глобальной и индивидуальной регулировки формата колонок.17.4.1.Процедура multicols\begin{multicols}{number}[preface][skip]text\end{multicols}(multicol)В простейшем варианте процедуры multicols достаточно указать число колонок number.
Тело процедуры text может содержать произвольный текст и любые команды LATEX’а, кроме плавающих объектов и заметок на полях (глава 11).Нередко многоколоночному тексту требуется предпослать некое общее предисловие. Его надо поместить в необязательный аргумент preface. Тогда LATEX постарается разместить preface и начало текста в колонках на одной странице.\begin{multicols}{2}[\section*{Простой совет}]Это текст, распределённый междудвумя колонками.
Если колонкислишком узкие, полезно отменитьвыравнивание по правой границе.\end{multicols}Простой советЭто текст, распределённый между двумя колонками. Если колонки слишкомузкие, полезно отменить выравниваниепо правой границе.Процедура multicols начинает новую страницу, если на текущей страниценедостаточно свободного места. Предельный размер свободного места контролирует некий глобальный параметр. При наличии предисловия preface этот размерможет оказаться слишком малым.
В таком случае можно либо изменить его глобальное значение (см. ниже), либо подобрать нужное значение только для текущей процедуры, указав его во втором необязательном аргументе skip. Например,после\begin{multicols}{2}[\section*{Простой совет}][7cm]Это текст...новая страница будет начата, если на текущей осталось менее 7 см свободногопространства.40817.4.2.Глава 17.
Полоса набораНастройка процедуры multicols\premulticols\postmulticols\multicolsep\columnsep\columnseprule(multicol)Форматируя текст, процедура multicols распознаёт значения нескольких параметров.Прежде всего она измеряет высоту свободного пространства на странице, чтобы определить, достаточно ли оно для размещения некоторой порции текста вколонках.
Минимально требуемый размер задаётся опцией skip, а при её отсутствии — командной длиной \premulticols, которая может быть переопределена стандартными командами LATEX’а, предназначенными для работы с длинами(раздел 2.10). По умолчанию \premulticols составляет 50 pt. Если имеющеесяпространство меньше \premulticols, происходит переход на новую страницу. Вконце выполнения процедуры остающееся на странице место сравнивается со значением \postmulticols, равным по умолчанию 20 pt.
Перед многоколоночнымтекстом и после него вставляется растяжимая длина \multicolsep, в естественном состоянии равная 12 pt.Расстояние между колонками и толщина разделительной вертикальной линии определяются теми же командами \columnsep и \columnseprule, что и вобычном двухколоночном формате (раздел 17.3).\setlength{\columnseprule}{.4pt}\begin{multicols}{3}\raggedrightЭто текст, распределённый междутремя колонками. Здесь отмененовыравнивание по правой границе.\end{multicols}17.4.3.Это текст,распределённыймеждутремяколонками.Здесьотмененовыравнивание поправойгранице.Балансировка колонок\flushcolumns\raggedcolumns(multicol)По умолчанию, когда действует декларация \flushcolumns, процедура пытается сделать все колонки одинаковой длины за счёт растяжения существующихв колонках вертикальных пробелов. Если во входной файл введена декларация\raggedcolumns, избыточные пробелы собираются на дне колонок.unbalancecolumnbadnessfinalcolumnbadnesstracingmulticols(multicol)40917.4.
Пакет multicolВ конце выполнения процедуры остающийся текст балансируется, чтобы создатьколонки равной длины. Если желательно поместить в левые колонки большетекста, чем в самую правую, следует увеличить значение счётчика unbalance, поумолчанию равное нулю. Этот счётчик определяет количество дополнительных(пустых) строк, которое должно быть вставлено в последнюю колонку.\setlength{\columnseprule}{.4pt}\begin{multicols}{3}\raggedrightЭто текст, распределённый междутремя колонками.
Здесь отмененовыравнивание по правой границе.\setcounter{unbalance}{1}\end{multicols}Это текст,распределённыймеждутремяколонками.Здесьотмененовыравнивание поправойгранице.Балансировка колонок управляется ещё двумя счётчиками finalcolumnbadnessи columnbadness. Когда LATEX конструирует боксы (такие как колонки), он вычисляет специальный параметр, характеризующий качество бокса. Для хорошего бокса этот параметр равен 0, для плохого — 10 000, а для переполненного —100 000. Балансировочный алгоритм сравнивает параметр качества для возможных решений по распределению текста между колонками.
Если для любой колонки, кроме последней, величина параметра превышает columnbadness, решение бракуется. По умолчанию columnbadness = 10 001. Когда алгоритм находитподходящее решение, он анализирует качество последней колонки. Если оказывается, что её параметр качества больше, чем finalcolumnbadness, к колонкедобавляется вертикальный пробел снизу, и она выходит короче других. По умолчанию finalcolumnbadness = 99 999.Действия алгоритма можно проследить, задав счётчику tracingmulticolsзначение больше нуля. Чем оно больше, тем более подробную информацию освоих действиях алгоритм балансировки выводит в файле протокола. Той жецели служат опции errorshow, infoshow, balancingshow, markshow и debugshowпри загрузке пакета командой \usepackage.
Каждая из них просто задаёт значение счётчика tracingmulticols на единицу больше, чем предшествующая ейв нашем списке.17.4.4.Сноски и плавающие объектыВ multicols можно использовать процедуры figure* и table*, которые размещают плавающие объекты на полную ширину страницы.
Команда \marginparдля заметок на полях и обычные процедуры figure, table, создающие плавающие фигуры в колонке, не допустимы. Ещё одно ограничение состоит в том,что плавающий рисунок или таблица никогда не попадают на страницу, где онипоявляются во входном файле. Другими словами, можно повлиять на их размещение, применив спецификаторы t, b и/или p в необязательном аргументе процедур figure* и table* (раздел 11.1), но спецификатор h не работает, потомучто ближайшее разрешённое место есть верх следующей страницы.410Глава 17. Полоса набораПодстрочное примечание также печатается на полную ширину страницы, а непод соответствующей колонкой. При определённых обстоятельствах подстрочноепримечание может оказаться не на той странице, где находится текст, к которомуоно относится.
В этом случае пакет multicol выдаёт предупреждениеLaTeX Warning: I moved some lines to the next page4 .Тогда следует проверить страницу, вызвавшую предупреждение, на предмет правильности расположения подстрочного примечания и его метки в тексте.
Если метка и текст подстрочного примечания действительно оказались на разныхстраницах, преодолеть возникшую проблему можно, вставив в подходящее местовходного файла команду \pagebreak (раздел 4.7).Другой способ реагирования на такое предупреждение состоит в том, чтобыизменить значение счётчикаcollectmore(multicol)по умолчанию равное нулю. Если этому счётчику присвоить значение n, то алгоритм балансировки учтёт на n строк больше (или меньше, если n < 0) перед тем,как принять окончательное решение. Поэтому \setcounter{collectmore}{-1}может решить все проблемы с размещением подстрочного примечания, правда,за счёт менее оптимального подбора размеров колонок.17.5.Брошюровка макетаДаже в самых маленьких типографиях книги печатают на больших листах бумаги, размещая несколько страниц на одном листе так, чтобы при сгибании листапо границам страниц получался буклет.