Как сделать рамку в латехе

Добавил пользователь Дмитрий К.
Обновлено: 05.10.2024

В этом блоге публикуются заметки и решения, найденные в процессе работы, освоения и жизни в дистрибутиве Debian GNU/Linux.

Иллюстрации и рисунки в LaTeX

Этот пост является частью большой статьи
"Как оформить диплом в LaTeX?",
которую написал virens,
ведущий блога "Записки дебианщика".

Здесь приводятся базовые идеи и примеры, которые вам нужно освоить для вставки изображений и рисунков в LaTeX. Мы рассмотрим вставку нескольких рисунков в ряд и оформление групп рисунков, для чего будем пользоваться окружением minipage. Для набора дипломов по техническим специальностям приведённых сведений должно хватить.



Подготовка
Для начала работы с изображениями нужно подключить пакет graphicx, который обеспечивает их вставку в текст документа. Есть много драйверов для работы с изображениями, но мы будем использовать dvips - это позволит нам потом сравнительно легко и довольно просто конвертировать диплом из LaTeX в Word или OpenOffice через формат RTF, используя открытую программу latex2rtf. Для этого ваши рисунки нужно конвертировать в EPS, что делается программой convert из пакета imagemagick или утилитой sam2p. И imagemagick, и sam2p есть в стандартных репозиториях Debian и ставятся на раз.


Как вставить в LaTeX-документ изображение?
Рисунок в технической статье или отчёте - это не просто картинка, а ещё и подпись к нему, и возможность поставить на рисунок ссылку. Для этого сначала в преамбуле документа (это те самые магические заклинания, которые до \begin < document >) нужно вставить следующее:

Рисунки лучше хранить в отдельных каталогах, идеально - для каждой главы диплома свой каталог. Следует перечислить все каталоги с рисунками, чтобы ЛаТеХ смог их найти. Делается это так:

Как уже говорилось, если ваш рисунок в формате PNG/TIF/JPG или ещё каком-нибудь, нужно сначала перевести его в EPS при помощи программы convert из пакета imagemagick или утилитой sam2p. Например, чтобы конвертировать файл в EPS программой convert, нужно дать команду:

После этого копируем полученный eps-файл в каталог, указанный в \graphicspath <>, в данном случае подкаталог noiseimages, который находится в каталоге с нашим tex-файлом.

  • определить место рисунка в тексте - разрешить алгоритмам ТеХа принять решение исходя из заполненности страницы \begin < figure >[h] "хотелось бы картинку здесь", настойчиво просить разместить после текста \begin < figure >[h!] "очень хочу картинку здесь", и ударить кулаком по столу - картинку тут и точка \begin < figure >[H] "ХОЧУ картинку здесь и баста", а с прибавлением буквы p мы заставляем поместить ЛаТеХ картинку отдельно на страницу так: \begin < figure >[pH].
  • задать размер изображения в относительных единицах - долях от ширины строки или текста
  • вставить подпись под рисунком \caption
  • вставить ссылку на рисунок \label

  • Результат в документе:

    Всё просто и понятно в этом примере: мы разместили рисунок, который находится в файле image, в тексте - оставляем выбор размещения за ТеХом. Размер его будет во всю строку, подпись - "Рис.N:Зависимость сигнала от шума для данных.", где N - номер рисунка, который будет вставлен позже, во время сборки документа. Расширение у документа не указывается: если вы используете драйвер dvips, то это обязательно postscipt.

    Теперь надо ссылаться на рисунок так: как показано на Рис.~ \ref < ris:image >- так вы всегда сошлётесь на правильный рисунок. Только нужно следить, чтобы имена рисунков не повторялись. Главное - делать название рисунков осмысленными и понятными вам, а не просто ris1, ris2. Естественно, что LaTeX - это язык программирования, так что все советы по грамотному написанию программ уместны и здесь.
    Маленькая хитрость: команду \caption <> нужно использовать обязательно перед \label < >, иначе в документе ссылка будет не на рисунок, а на текущую subsection.


    Полезно запомнить, что ЛаТеХ рассматривает рисунок как одну большую букву. Поэтому в некоторых сложных случаях полезно применять грубую силу, т.е. например можно сделать интервал от подписи командой \vspace - не очень изящно, зато действенно.

    Два рисунка в строчку
    Немного усложним пример - вставим два рисунка в строку, с единой подписью под каждым. Можно вставить ещё один \includegraphics , но под рисунками должны быть подписи а) и б) и нужно, чтобы они были по центру. Для этого есть замечательное окружение \begin < minipage >.. \end < minipage >. То есть резервируем место под рисунок, и вставляем его во фрейм. Вот так:

    Здесь ширина рисунка указана 1 \linewidth то есть во всю строку, но строка теперь ширины 0.49 \linewidth так что рисунок будет во весь фрейм размера в половину строки. Кроме того, после каждого рисунка идётразрыв строки и буква, обозначающая рисунок. Нужно помнить, что ссылка и подпись под рисунками одна.

    Результат, как всегда, логичен и приятен:


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

    Два рисунка в строчку и два в столбец
    Следующий уровень - вставляем рисунки не только в строчку, но и по столбцам. Идея таже, только после заполнения строчек вставляем команду \vfill которая растолкнёт рисунки по строкам. Всё остальное остаётся в силе: используем окружение minipage и грамотно выставляем ширину этих самых minipage так, чтобы оставался небольшой зазор: для двух картинок 0.48, для трёх 0.31 и так далее. Собственно, код:


    То есть теперь мы не падаем в обморок от просьбы вставить 12 рисунков по 3 в ряд. Все идеи те же самые, хотя едва ли в дипломе вам придётся столкнуться с большим количеством хитро расположенных рисунков.



    Два рисунка с разными подписями
    Это важный частный случай, так как довольно часто сделать одну подпись для двух рисунков или длинно, или сложно, и поэтому лучше выделить их в два отдельных рисунка, но в ряд. Мы не будем привлекать для этого отдельные сущности, а воспользуемся старым-добрым minipage. Надеюсь, благодарный читатель ещё помнит, что ЛаТеХ - он как рельса, прост и бесхитростен, и делает то, что вы ему прикажете, как бы костыляво это не выглядело:


    Для этого случая код следующий:

    Как видно, всё достаточно легко и просто. Не забываем проставлять нужные размеры minipage и рисунков, периодически посматривая на результат в kdvi и корректируя код по ходу дела.


    Три рисунка с индивидуальными ссылками
    Вариация на тему предыдущего случая, но через subfigure. При этом можно ссылаться на под-рисунки отдельными ссылками, например "см. Рис ~\ref fig:actuatorscouplingSheme _ decoupledcase > будет отображено как "Рис 2(а)". Добавляем в преамбулу:

    \usepackage < subfigure >

    и далее вставляем этот код:



    Так что теперь в тексте можем ссылаться отдельно на рисунок 2а, 2b или 2c с помощью команды \ref <>. На самом деле, subfigures умеют намного больше.


    Три рисунка разной высоты
    Иногда случается такая партизанская засада, как разномасштабные рисунки, которые под один размер подгонять нехорошо по смыслу, и нужно сделать так, чтобы подписи к ним были в одну строчку. Иначе получается некрасиво: буквы под рисунками в разных положениях. Я не претендую на истину в последней инстанции, но вот выход, который я нашёл для себя:

    Как это выглядит в документе:


    Здесь игра в том, что после всех окружений minipage, в которых вставлены картинки, идёт отдельная minipage. В ней - таблица, ширина колонок которой точно такая же, как и ширина minipage для картинок. Вот, собственно, код:

    Я немного забегаю вперёд и использую таблицы, которые будут описываться в другом разделе, но думаю, что человек с высшим образованием без труда переведёт слово tabular.


    Рисунок с обтеканием текста в LaTeX
    В дипломах такие фокусы не приветствуются, но если очень нужно - делается сравнительно просто пакетом расширения wrapfig. Для это подключаем этот пакет в преамбуле \usepackage .

    После этого у нас появляется замечательная возможность продемонстрировать свою невероятную оформительскую крутизну, используя окружение \begin < wrapfigure >. \end < wrapfigure >, когда нужно сделать обтекание рисунка:

    \begin < wrapfigure >[16]
    \vspace
    \includegraphics [width= \linewidth ]
    \caption
    \label < fig:somelabel >
    \end < wrapfigure >

    Подсвеченные параметры означают:

    [16] - определяет высоту рисунка в число строк текста и позволяет отбить дополнительное место для рисунков.

    - положение картинки на странице, можно слева или справа .
    - ширина картинки в относительных единицах от ширины линии.

    Тонкий момент: на самом деле, параметр положения рисунка на странице можно писать с маленькой буквы (слева или справа ), но это заставляет ЛаТеХ поместить изображение именно там, где вы прикажете. Если же ставить большие буквы (слева или справа ), то это даст больше свободы ЛаТеХу.

    Ещё тонкость в том, что автоматика может сделать слишком много (или мало) места в верхней или нижней части обтекаемого рисунка. Вот тут нам поможет дополнительный аргумент [lineheight] , который в данном примере задан как [16]. Он-то определяет высоту рисунка в строках текста. Другой возможностью является добавление или удаления промежутков с помощью команды \vspace и данном примере \vspace ЛаТеХу приказывается сместить картинку немного вверх, чтобы выиграть место для текста.

    Часто требуется, чтобы номер рисунка содержал в себе номер главы (вроде Рис. 1.1) . Чтобы была сделана нумерация по главам, достаточно изменить счётчик рисунков в преамбуле документа вот так:

    • \arabic 4
    • \roman iv
    • \Roman IV
    • \alph d
    • \Alph D

    Вставка изображений в ЛаТеХ - дело очень простое, и оно сэкономит вам много нервных клеток для более важных дел. Важно то, что со временем эти конструкции у вас войдут в привычку, и однажды написанный код начнёт кочевать из работы в работу.

    Волшебных текстовых процессоров не существует. Телепатией программы пока не обладают. Они, естественно, делают то, что им сказано, но вкус и чувство прекрасного у них полностью отсутствует. В конце занимательного приключения по созданию текстов частенько приходится брать управление в свои руки, дабы навести лоск на почти готовое произведение.

    Img 89 92 1.jpg

    Кроме определённых единиц измерения, длину можно задавать также и в относительных: 1ex соответствует высоте строчной латинской буквы x, а 1em – ширине прописной латинской буквы M. Эти величины меняются вместе со сменой шрифта, что позволяет задавать автоматически масштабирующиеся горизонтальные промежутки, не привязанные к конкретному размеру и типу шрифта. Например, широкий пробел, задаваемый с помощью команды \quad, определяется как \hspace .

    Img 89 92 2.jpg

    Интересной инструкцией является длина fill – это бесконечность. TeX поддерживает операции с бесконечностями, причём оперирует тремя их видами: fil, fill и filll, где fil calc

    В дополнение к стандартным возможностям, пакет calc расширяет базовые операции с длинами. Фактически calc вводит арифметические операции в привычной со школы инфиксной записи.

    Img 89 93 2.jpg

    При загрузке calc \setlength и \addtolength переопределяются так, что в качестве аргумента после этого можно передавать арифметические выражения. Кроме арифметики, в calc определяются макросы \widthof , \heightof и \depthof – ширина, высота и глубина текста.

    (thumbnail)

    При умножении длины на число длина должна стоять до числа (4mm*2 – верно, а 2*4mm– нет). Делить и умножать можно только на целые числа. Действительные числа вводятся с помощью уже использованного в примере макроса \real и отношения длин, вычисляемого с помощью команды:

    Подробное описание пакета можно найти в документации calc.pdf из коллекции tools.

    Скелет страницы

    (thumbnail)


    Совокупность размеров и расположений указанных полей, а также вид и содержание колонтитулов называется макетом полосы набора. На рисунке пунктирной линией изображены поля драйвера (1 и 2) относительно которых выстраиваются все остальные поля. По договорённости отступы до полей драйвера равны одному дюйму. Переопределив \hoffset и \voffset (по умолчанию они равны нулю), можно легко сдвинуть полосу набора целиком по горизонтали и вертикали, соответственно.

    Ниже перечислены параметры, которые управляют макетом полосы набора:

    • Тело текста характеризуется высотой \TeXthight (7) и шириной \TeXtwidth (8) При многоколоночной вёрстке ширина колонки равна \columnwidth. Переменная \linewidth принимает значение, равное длине строки текущего текста.
    • \oddsidemargin (3) добавляется слева в случае односторонней печати. При двусторонней печати полосы набора для чётных и нечётных страниц различаются. В этом случае для нечётных слева опять же добавляется \oddsidemargin, а для чётных \evensidemargin.
    • Верхний колонтитул располагается на расстоянии \topmargin (4) от поля драйвера, имеет высоту \headheight (5), а тело текста отступает от колонтитула на расстояние \headsep (6).
    • \footskip позиционирует базовую линию нижнего колонтитула относительно последней строки текста.
    • Поля для заметок имеют ширину \marginparwidth (10) и отступают от тела текста на расстояние \marginparsep (9). Ещё одна опция управляет минимальным расстоянием между заметками: \marginparpush.
    Выбор размера бумаги

    Физический размер бумаги описывается параметрами \paperwidth и \paperheight. Стандартные базовые классы LaTeX (article, book, report и letter) по умолчанию предполагают, что для печати используется бумага формата letter. Очевидно, это умолчание не годится для России, где стандартом является формат A4 (210x297 мм). Обычно установить правильный формат можно с помощью передачи параметра a4paper при выборе класса документа:

    Для создания небольших брошюрок со страницей размера A5 (половина размера A4) используется опция a5paper.

    Ориентация

    Для портретной и альбомной ориентации вообще-то требуются разные макеты полосы набора. Альбомная ориентация может использоваться по умолчанию в некоторых специализированных классах (например, slides).


    Если повернуть требуется только текст без изменения полей колонтитулов, то проще всего воспользоваться окружением landscape из пакета lscape. Всё, что находится внутри этого окружения поворачивается на 90 градусов против часовой стрелки. При использовании pdflatex для изменения ориентации не только текста, но и страницы (дабы не наклонять при чтении текста голову набок) при загрузке пакета следует передать ему опцию pdftex или воспользоваться пакетомнадстройкой pdflscape.

    Лучше не менять параметры макета во время набора, но если очень хочется это сделать, то можно воспользоваться стандартным пакетом portland. Он позволяет менять портретную ориентацию на альбомную и обратно на лету, переопределяя соответствующие управляющие макетом переменные. Команды \portrait и \landscape работают как переключатели между этими режимами. В пакете определены и одноимённые с переключателями окружения. Это довольно низкоуровневый пакет, и пользоваться им надо аккуратно.

    (thumbnail)


    Если по какой-то причине требуется развернуть текст на 180 градусов, можно воспользоваться пакетом rotpages. В пакете определены два переключателя режима \rotboxpages и \endrotboxpages, которые указывают границы повёрнутого теста. Пакет умеет разворачивать не только страницы, но и колонки. Подробности можно найти в документации: rotpages-doc.pdf.

    Меняем макет

    Двигаем размеры

    Выбор, естественно, не ограничивается упомянутыми выше классами – он огромен. Поэтому, прежде чем что-то изменять, следует внимательно изучить уже имеющиеся решения. И даже если вы знаете, что делаете, лучше не переопределять переменные, управляющие размерами макета полосы набора, вручную. Правильным решением будет воспользоваться одним из уже имеющих специализированных пакетов, например: geometry или vmargin.

    geometry

    Пакет geometry меняет размеры прямо в процессе загрузки стилевого файла, например, так:

    Список воспринимаемых пакетом опций очень обширен. В документации (geometry.pdf) подробное описание всех имеющихся опций занимает свыше пяти страниц текста. Использование этого пакета для изменения размеров полей является более предпочтительным, чем изменение размеров напрямую. Обилие принимаемых параметров позволит задать любой формат полосы набора в наиболее естественной форме, не ошибившись при расчётах. Подробное описание пакета, к сожалению, выходит за все разумные ограничения на объём статьи. К счастью, документация очень хорошая и чрезвычайно подробная.

    vmargin

    Пакет vmargin управляет размерами макета через выставку полей. Перед этим следует задать формат листа:

    В качестве обязательного параметра команды можно указать один из следующих форматов: A0, A1, …, A9, B0, B1, …, B9, C0,…, C9, USletter, USlegal и USexecutive. Необязательный параметр может принимать значения landscape (альбомная ориентация) или portrait (портретная ориентация, по умолчанию). Для нестандартных форматов листа можно задать размеры с помощью ключевого слова custom команды:

    После того, как вы определитесь с размером страницы, можно задавать размеры для полосы набора с помощью одной из следующих команд:

    Кроме перечисленных команд, определены их аналоги: \setmarginsrb, \setmargnohfrb, \setmargrb. Отличие состоит в том, что вместо ширины и высоты тела текста в качестве параметров им передаются ширина правого поля и высота нижнего поля. Подробно пакет описан в документации vmargin.pdf.

    Стили страницы

    Полоса набора – это не только размеры: это ещё и наполнение колонтитулов. Обычно оно определяется в классе документа. Здесь без необходимости лучше тоже ничего не менять.

    Простейший способ изменить стиль страницы – это воспользоваться командой:

    Если стиль надо переопределить только для текущей страницы, то следует воспользоваться командой \thispagestyle .

    Есть три стандартно определённых стиля:

    Если и это наполнение не устраивает, то можно определить свой собственный стиль. Пакет fancyhdr специализируется как раз на этом.

    fancyhdr

    (thumbnail)


    Чтобы воспользоваться возможностями пакета, необходимо загрузить стилевой файл и выбрать стиль с помощью \pagestyle

    Пакет fancyhdr позволяет управлять содержимым колонтитула. Возможности: верхний и нижний колонтитул разбивается на три независимых части, многострочные колонтитулы, колонтитулы, вылезающие по ширине за \textwidth, декоративные линейки, разные колонтитулы для чётных и нечётных страниц, отдельные колонтитулы для специальных полос (начала глав, страницы, отведённые под плавающие объекты). Вот простейший пример для определения колонтитулов с помощью fancyhdr:

    Переменная page содержит номер страницы. Подробности о том что можно сотворить с колонтитулами, следует искать в документации к пакету fancyhdr.pdf.

    Причёсываем текст

    (thumbnail)


    Теперь, когда границы определены, разберемся, что можно сделать для красивого размещения текста на странице. Часть забот по следованию правилам вёрстки LaTeX берёт на себя. Вам, например, не требуется следить за единообразием оформления полос. Но есть дефекты, которые компьютеру заметить не под силу, например, так называемые коридоры.

    Строка

    (thumbnail)


    Когда строка с точки зрения TeX становится слишком разряженной (Underfull) или слишком сжатой (Overfull), в log-файле появляются предупреждения, начинающиеся словами вида:

    Если можно редактировать текст, то для исправления дефектов набора лучше переделать предложение так, чтобы в новой инкарнации тест не создавал проблем для чтения.

    Горизонтальные пробелы

    Расстояние между словами можно изменить с помощью горизонтальных промежутков. Они создаются с помощью команды \hspace. В качестве параметра команде передаётся длина. Вариант команды \hspace* отличается от основной тем, что создание пробела не игнорируется даже тогда, когда пробел приходится на начало или конец строки.

    Существует несколько определённых по умолчанию горизонтальных пробелов:

    Проблемы могут возникнуть и при формировании страниц. В крайнем случае, можно воспользоваться командами принудительного завершения страницы \pagebreak или \newpage. Отличие первой команды от второй в том, что после формирования страницы полоса выравнивается по нижней кромке – это может привести к неоправданному растяжению страницы. Если проблему можно решить путём увеличения/уменьшения страницы на одну-две строки, то лучше воспользоваться следующими макросами:

    Команда \longpage увеличивает тело текста текущей страницы на одну строку, а \shortpage, соответственно, уменьшает. Длина \baselineskip служит для определения интерлиньяжа – междустрочного пробела.

    Висячая строка
    Вертикальные просветы

    По аналогии с командой \hspace , вертикальные промежутки организуются с помощью команды \vspace . Модификация команды \vspace* создаёт вертикальный просвет, которые не игнорируется, даже если просвет попадает на начало или конец страницы.

    Вертикальные просветы также имеют свои умолчания:

    Печать через две строки

    Img 89 96 1.jpg

    В качестве основного параметра окружению spacing передаётся интервал, с которым следует печатать текст.

    Послесловие

    В этом тексте присутствует далеко не вся информация, необходимая для вёрстки текста. Несмотря на то, что LaTeX позволяет верстать книги любителям без помощи профессионалов, лучше при любой возможности спрашивать у этих профессионалов совета. Понимание того, что, где и зачем надо исправлять, в случае LaTeX чрезвычайно важно, потому что, как правило, и так очевидно.

    Волшебных текстовых процессоров не существует. Телепатией программы пока не обладают. Они, естественно, делают то, что им сказано, но вкус и чувство прекрасного у них полностью отсутствует. В конце занимательного приключения по созданию текстов частенько приходится брать управление в свои руки, дабы навести лоск на почти готовое произведение.

    Img 89 92 1.jpg

    Кроме определённых единиц измерения, длину можно задавать также и в относительных: 1ex соответствует высоте строчной латинской буквы x, а 1em – ширине прописной латинской буквы M. Эти величины меняются вместе со сменой шрифта, что позволяет задавать автоматически масштабирующиеся горизонтальные промежутки, не привязанные к конкретному размеру и типу шрифта. Например, широкий пробел, задаваемый с помощью команды \quad, определяется как \hspace .

    Img 89 92 2.jpg

    Интересной инструкцией является длина fill – это бесконечность. TeX поддерживает операции с бесконечностями, причём оперирует тремя их видами: fil, fill и filll, где fil calc

    В дополнение к стандартным возможностям, пакет calc расширяет базовые операции с длинами. Фактически calc вводит арифметические операции в привычной со школы инфиксной записи.

    Img 89 93 2.jpg

    При загрузке calc \setlength и \addtolength переопределяются так, что в качестве аргумента после этого можно передавать арифметические выражения. Кроме арифметики, в calc определяются макросы \widthof , \heightof и \depthof – ширина, высота и глубина текста.

    (thumbnail)

    При умножении длины на число длина должна стоять до числа (4mm*2 – верно, а 2*4mm– нет). Делить и умножать можно только на целые числа. Действительные числа вводятся с помощью уже использованного в примере макроса \real и отношения длин, вычисляемого с помощью команды:

    Подробное описание пакета можно найти в документации calc.pdf из коллекции tools.

    Скелет страницы

    (thumbnail)


    Совокупность размеров и расположений указанных полей, а также вид и содержание колонтитулов называется макетом полосы набора. На рисунке пунктирной линией изображены поля драйвера (1 и 2) относительно которых выстраиваются все остальные поля. По договорённости отступы до полей драйвера равны одному дюйму. Переопределив \hoffset и \voffset (по умолчанию они равны нулю), можно легко сдвинуть полосу набора целиком по горизонтали и вертикали, соответственно.

    Ниже перечислены параметры, которые управляют макетом полосы набора:

    • Тело текста характеризуется высотой \TeXthight (7) и шириной \TeXtwidth (8) При многоколоночной вёрстке ширина колонки равна \columnwidth. Переменная \linewidth принимает значение, равное длине строки текущего текста.
    • \oddsidemargin (3) добавляется слева в случае односторонней печати. При двусторонней печати полосы набора для чётных и нечётных страниц различаются. В этом случае для нечётных слева опять же добавляется \oddsidemargin, а для чётных \evensidemargin.
    • Верхний колонтитул располагается на расстоянии \topmargin (4) от поля драйвера, имеет высоту \headheight (5), а тело текста отступает от колонтитула на расстояние \headsep (6).
    • \footskip позиционирует базовую линию нижнего колонтитула относительно последней строки текста.
    • Поля для заметок имеют ширину \marginparwidth (10) и отступают от тела текста на расстояние \marginparsep (9). Ещё одна опция управляет минимальным расстоянием между заметками: \marginparpush.
    Выбор размера бумаги

    Физический размер бумаги описывается параметрами \paperwidth и \paperheight. Стандартные базовые классы LaTeX (article, book, report и letter) по умолчанию предполагают, что для печати используется бумага формата letter. Очевидно, это умолчание не годится для России, где стандартом является формат A4 (210x297 мм). Обычно установить правильный формат можно с помощью передачи параметра a4paper при выборе класса документа:

    Для создания небольших брошюрок со страницей размера A5 (половина размера A4) используется опция a5paper.

    Ориентация

    Для портретной и альбомной ориентации вообще-то требуются разные макеты полосы набора. Альбомная ориентация может использоваться по умолчанию в некоторых специализированных классах (например, slides).


    Если повернуть требуется только текст без изменения полей колонтитулов, то проще всего воспользоваться окружением landscape из пакета lscape. Всё, что находится внутри этого окружения поворачивается на 90 градусов против часовой стрелки. При использовании pdflatex для изменения ориентации не только текста, но и страницы (дабы не наклонять при чтении текста голову набок) при загрузке пакета следует передать ему опцию pdftex или воспользоваться пакетомнадстройкой pdflscape.

    Лучше не менять параметры макета во время набора, но если очень хочется это сделать, то можно воспользоваться стандартным пакетом portland. Он позволяет менять портретную ориентацию на альбомную и обратно на лету, переопределяя соответствующие управляющие макетом переменные. Команды \portrait и \landscape работают как переключатели между этими режимами. В пакете определены и одноимённые с переключателями окружения. Это довольно низкоуровневый пакет, и пользоваться им надо аккуратно.

    (thumbnail)


    Если по какой-то причине требуется развернуть текст на 180 градусов, можно воспользоваться пакетом rotpages. В пакете определены два переключателя режима \rotboxpages и \endrotboxpages, которые указывают границы повёрнутого теста. Пакет умеет разворачивать не только страницы, но и колонки. Подробности можно найти в документации: rotpages-doc.pdf.

    Меняем макет

    Двигаем размеры

    Выбор, естественно, не ограничивается упомянутыми выше классами – он огромен. Поэтому, прежде чем что-то изменять, следует внимательно изучить уже имеющиеся решения. И даже если вы знаете, что делаете, лучше не переопределять переменные, управляющие размерами макета полосы набора, вручную. Правильным решением будет воспользоваться одним из уже имеющих специализированных пакетов, например: geometry или vmargin.

    geometry

    Пакет geometry меняет размеры прямо в процессе загрузки стилевого файла, например, так:

    Список воспринимаемых пакетом опций очень обширен. В документации (geometry.pdf) подробное описание всех имеющихся опций занимает свыше пяти страниц текста. Использование этого пакета для изменения размеров полей является более предпочтительным, чем изменение размеров напрямую. Обилие принимаемых параметров позволит задать любой формат полосы набора в наиболее естественной форме, не ошибившись при расчётах. Подробное описание пакета, к сожалению, выходит за все разумные ограничения на объём статьи. К счастью, документация очень хорошая и чрезвычайно подробная.

    vmargin

    Пакет vmargin управляет размерами макета через выставку полей. Перед этим следует задать формат листа:

    В качестве обязательного параметра команды можно указать один из следующих форматов: A0, A1, …, A9, B0, B1, …, B9, C0,…, C9, USletter, USlegal и USexecutive. Необязательный параметр может принимать значения landscape (альбомная ориентация) или portrait (портретная ориентация, по умолчанию). Для нестандартных форматов листа можно задать размеры с помощью ключевого слова custom команды:

    После того, как вы определитесь с размером страницы, можно задавать размеры для полосы набора с помощью одной из следующих команд:

    Кроме перечисленных команд, определены их аналоги: \setmarginsrb, \setmargnohfrb, \setmargrb. Отличие состоит в том, что вместо ширины и высоты тела текста в качестве параметров им передаются ширина правого поля и высота нижнего поля. Подробно пакет описан в документации vmargin.pdf.

    Стили страницы

    Полоса набора – это не только размеры: это ещё и наполнение колонтитулов. Обычно оно определяется в классе документа. Здесь без необходимости лучше тоже ничего не менять.

    Простейший способ изменить стиль страницы – это воспользоваться командой:

    Если стиль надо переопределить только для текущей страницы, то следует воспользоваться командой \thispagestyle .

    Есть три стандартно определённых стиля:

    Если и это наполнение не устраивает, то можно определить свой собственный стиль. Пакет fancyhdr специализируется как раз на этом.

    fancyhdr

    (thumbnail)


    Чтобы воспользоваться возможностями пакета, необходимо загрузить стилевой файл и выбрать стиль с помощью \pagestyle

    Пакет fancyhdr позволяет управлять содержимым колонтитула. Возможности: верхний и нижний колонтитул разбивается на три независимых части, многострочные колонтитулы, колонтитулы, вылезающие по ширине за \textwidth, декоративные линейки, разные колонтитулы для чётных и нечётных страниц, отдельные колонтитулы для специальных полос (начала глав, страницы, отведённые под плавающие объекты). Вот простейший пример для определения колонтитулов с помощью fancyhdr:

    Переменная page содержит номер страницы. Подробности о том что можно сотворить с колонтитулами, следует искать в документации к пакету fancyhdr.pdf.

    Причёсываем текст

    (thumbnail)


    Теперь, когда границы определены, разберемся, что можно сделать для красивого размещения текста на странице. Часть забот по следованию правилам вёрстки LaTeX берёт на себя. Вам, например, не требуется следить за единообразием оформления полос. Но есть дефекты, которые компьютеру заметить не под силу, например, так называемые коридоры.

    Строка

    (thumbnail)


    Когда строка с точки зрения TeX становится слишком разряженной (Underfull) или слишком сжатой (Overfull), в log-файле появляются предупреждения, начинающиеся словами вида:

    Если можно редактировать текст, то для исправления дефектов набора лучше переделать предложение так, чтобы в новой инкарнации тест не создавал проблем для чтения.

    Горизонтальные пробелы

    Расстояние между словами можно изменить с помощью горизонтальных промежутков. Они создаются с помощью команды \hspace. В качестве параметра команде передаётся длина. Вариант команды \hspace* отличается от основной тем, что создание пробела не игнорируется даже тогда, когда пробел приходится на начало или конец строки.

    Существует несколько определённых по умолчанию горизонтальных пробелов:

    Проблемы могут возникнуть и при формировании страниц. В крайнем случае, можно воспользоваться командами принудительного завершения страницы \pagebreak или \newpage. Отличие первой команды от второй в том, что после формирования страницы полоса выравнивается по нижней кромке – это может привести к неоправданному растяжению страницы. Если проблему можно решить путём увеличения/уменьшения страницы на одну-две строки, то лучше воспользоваться следующими макросами:

    Команда \longpage увеличивает тело текста текущей страницы на одну строку, а \shortpage, соответственно, уменьшает. Длина \baselineskip служит для определения интерлиньяжа – междустрочного пробела.

    Висячая строка
    Вертикальные просветы

    По аналогии с командой \hspace , вертикальные промежутки организуются с помощью команды \vspace . Модификация команды \vspace* создаёт вертикальный просвет, которые не игнорируется, даже если просвет попадает на начало или конец страницы.

    Вертикальные просветы также имеют свои умолчания:

    Печать через две строки

    Img 89 96 1.jpg

    В качестве основного параметра окружению spacing передаётся интервал, с которым следует печатать текст.

    Послесловие

    В этом тексте присутствует далеко не вся информация, необходимая для вёрстки текста. Несмотря на то, что LaTeX позволяет верстать книги любителям без помощи профессионалов, лучше при любой возможности спрашивать у этих профессионалов совета. Понимание того, что, где и зачем надо исправлять, в случае LaTeX чрезвычайно важно, потому что, как правило, и так очевидно.

    Читайте также: