6/09/2014

Свистульки, бубенчики и рюшечки в документах LaTeX

Как все уже хорошо знают, в ЛаТеХ добиться хорошего качества документов по умолчанию очень просто: используя десяток стандартных команд, вы получите неизменно превосходный результат (ТМ) без лишних усилий. То есть документ будет хорош, но ведь иногда хочется украшательств, мигалок, свистулек и бубенчиков. На эту тему автор уже собрал небольшую коллекцию, которой и рад поделиться. Кроме того, автор открыл для себя удивительные книги Edward Tufte, который знает толк в визуальной подаче информации.



Украшательства в ЛаТеХ документах

Как правило, в научных документах такое не сильно поощряется, но если есть желание повыделываться, то в приличных местах этому, как правило, не противятся. Среди терпимых украшательств можно выделить буквицы (drop caps), оформление цветом всего и вся, нумерацию строк по главам.

Буквица (Drop Capital) в ЛаТеХ

Если открыть старинные книги, то первая буква главы там обычно была большой и вычурной. Хотя в научных публикациях такое, в целом, встречается редко, сделать буквицу в ЛаТеХ можно запросто. Для этого подключаем пакеты:
\usepackage[usenames,dvipsnames,svgnames,table]{xcolor}
\usepackage{lettrine} %%% To make a Drop Cap
\usepackage{yfonts} %% to make a fancy Gothic drop caps.
Первый пакет содержит lettrine для LaTeX, второй - вычурные шрифты. Если у вас Debian, то достаточно установить дополнительные пакеты:
texlive-fonts-extra - TeX Live: Extra fonts
texlive-latex-extra - TeX Live: LaTeX supplementary packages
и теперь в документе можно использовать цветные буквицы:
\definecolor{currentfancycolout}{RGB}{164,179,3}
\lettrine[lines=3]{\color{currentfancycolout} 
\textbf{{\small\initfamily F}}}{ ormulation} of \lipsum[1-2]
Вот как это выглядит в жизни:
Мелочь, но тем не менее красивая. Кожаный переплёт опционален :-)

Эпиграфы к главам

Пакет с простым названием epigraph делает то, что и подразумевается: вставляет эпиграфы в начале глав. Для этого подключаем пакет:
\usepackage{epigraph} %%% to make inspirational quotes.
и начинаем цитировать умных дядь по поводу и без:
\epigraph{\textit{The greatest difficulties lie where we are not looking for them.}}
{-- Johann Wolfgang von Goethe}
Первый параметр - цитата, второй - автор цитаты. Вот как выглядит:

Взято из моей собственной Ph.D.


Номера страниц, включающие номер главы

В больших документах, типа книг или в пространных технических отчётах, имеет смысл нумеровать страницы как НОМЕРГЛАВЫ-Страница. То есть, скажем, номер страницы 7-11 означает Глава 7, страница 11. Так как всё уже украдено до нас сделано латехниками, нам осталось только воспользоваться пакетом

\usepackage[auto]{chappg} %%% this is to set the page numbers as Chapter-Page.

который автоматически пересчитает все страницы в формат Глава-Страница вот так:


Работа с колонтитулами в LaTeX

Колонтитулы это, говоря простым языком, тот текст, который появляется вверху и внизу страницы - например, вверху обычно пишут название книги или имя главы отчёта, а внизу - номер страницы.

Для переопределения содержимого колонтитулов следует подключить пакеты расширений
\usepackage{fancybox,fancyhdr} %this packages provides fancy up and bottom of page
в преамбуле документа. Там же, в преамбуле, будет задаваться содержимое колонтитутов. Как и прежде, чтобы лучше понять команды, откройте на другом виртуальном экране просмотрщик dvi-файлов.

После всех этих приготовлений вставляем в преамбуле следующий код:
\fancyhead[R]{Это простой пример верхнего колонтитула}
\fancyhead
[L]{}
\fancyhead
[C]{}

\fancyfoot
[R]{ \copyright Конник М.В., перевод}
\fancyfoot
[L]{Страница \thepage \; из \pageref{LastPage}}
\fancyfoot
[C]{}
Как легко догадается,  \fancyhead управляет верхним колонтитулом, а \fancyfoot управляет нижним.

Дальше в квадратных скобках следует уточнение, какая часть колонтитула имеется в виду - правая, левая или центральная. Если не указать часть колонтитула, \fancyhead{текст} будет одинаковым в левом, правом и центральном колонитуле.

Этот пример интересен ещё и тем, что здесь показан один полезный трюк: левый нижний колонтитул будет выглядеть как "Страница N из M". Для этого следует подключить расширение
\usepackage{lastpage}
Текст колонтитулов можно задать и более хитро, например менять их в зависимости чётности страницы. Это потребует применения пакета ifthen.

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

\usepackage
{ifthen}

и правим:

\fancyfoot[C]{\ifthenelse{\isodd{\thepage}}{нечётная}{чётная} }
Здесь правило такое: \ifthenelse{условие проверки}{если НЕ истина}{если истина}.

Колонтитулы в работе

Теперь нужно включить использование "кучерявых и причудливых" колонтитулов:
\begin{document}
\pagestyle
{fancy}
После этого скомпилируйте документ и посмотрите как он выглядит.

Если нужно на время отключить вообще все "навороты" на странице, это делается командой \pagestyle{empty}

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

\renewcommand{\headrulewidth}{0pt}
Эти трюки часто требуются для отображения в документе дополнительной информации, например, номера ревизии в Subversion репозитории, как уже говорилось здесь.


Вариантов проделывания такого трюка по крайней мере два: используя пакет hancyhdr или пакет titlesec.

Вариант с пакетом titlesec

В преамбуле документа пишем:

\usepackage{titlesec}
  \newpagestyle{kmvmain}[\small]{
    \setheadrule{.2pt}%
    \sethead[\colorbox{currentfancycolout}{\color{white}{\textbf{\large \thepage}}}]%  even-left
            [\textsc{Chapter~\thechapter: \chaptertitle}]%                              even-center
            [\colorbox{lightgrey}{\textbf{\thesection}}]%     even-right
            {\colorbox{lightgrey}{\textbf{\thesection}}}%     odd-left
            {\sectiontitle}%                              odd-center
            {\colorbox{currentfancycolout}{\color{white}{\textbf{\large \thepage}}}}%  odd-right
  }

тем самым создав стиль kmvmain, который и будем потом использовать.
Далее в тексте используем:
\pagestyle{kmvmain}
и после этого стиль колонтитулов изменится на вычурный.

 

Вариант с пакетом hancyhdr

В преамбуле документа пишем:

\usepackage{fancyhdr}
\fancyhead[RO]{\colorbox{currentfancycolout}{\color{white}{\textbf{\large \thepage}}}}  %% odd-right 
\fancyhead[LE]{\colorbox{currentfancycolout}{\color{white}{\textbf{\large \thepage}}}}  %%% even-left
\fancyhead[LO]{\colorbox{lightgrey}{\textbf{\thesection}}}% odd-left
\fancyhead[RE]{\colorbox{lightgrey}{\textbf{\thesection}}}% even-right 
\fancyhead[CE]{\rightmark}% odd-center, with the name of the Section
\fancyhead[CO]{\textsc{Chapter~\thechapter: \leftmark}}% Even-center, with the name of the Chapter.
\fancyfoot[L,R,C]{}

Параметры у fancyhead и fancyfoot одинаковы и означают вот что:

E: Even page (чётная страница)
O: Odd page (нечётная страница)
L: Left field (левое поле)
C: Center field (цетральное поле)
R: Right field  (правое поле)
H: Header  (верхний колонтитул)
F: Footer   (нижний колонтитул)

Далее вставляем в требуемое место упоминание вычурного (fancy) стиля:
\pagestyle{fancy}
Автор черпал вдохновение в посте на stackexchange про fancyhdr полной ложкой.

Эдвард Тафтэ и искусство отображения информации

Отображение данных, представление данных в виде таблиц и построение наглядных графиков - целое искусство. В этой области Edward Tufte - это Леонардо да Винчи отображения данных. Пожалуй, одна из его лучших книг - Envisioning Information, в которой он устраивает Tour De Fource информационного дизайна. 

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

Например, в главе ESCAPING FLATLAND, Тафтэ рассказывает о принципе small multitude - одна и та же структура, повторяющаяся много раз, и как это использовать в графиках. Этот прицнип позволяет сильно сэкономить место, подавая данные в более концетрированном и удобном для чтения виде.

В главе MICRO/MACRO READINGS много говорится об использовании цвета, особенно для компактного отображения статистических данных на графиках. Его фраза
Clutter and confusion are failures of design, not attributes of information.
отлично проиллюстрирована в главе LAYERING AND SEPARATION, где показан чертёж сложного устройства, но выполненный настолько грамотно, что читается невероятно легко. Мимоходом критикует графики типа candlesticks (пример, такой, что уже обсуждалось в блоге). Вообще, о цвете Тафтэ говорит много и подробно, приводя многочисленные примеры и картографии и построения схем.

Прошёлся он и по таблицам: глава NARRATIVES OF SPACEAND TIME одна из самых лучших в книге. Там он подробно разбирает абсолютно кошмарные таблицы, сделанные для расписаний поездов, и приводит примеры того, как это надо делать правильно.

Желающим заценить визуальный катарсис можно посоветовать ЛаТеХ-класс tufte-book, который создан по всем канонам. Этот класс можно использовать и для ведения  личного дневника. Вот как выглядит образец книги, оформленной tufte-book:



Эпилог

Оформление документов - дело тонкое, и то, что иногда кажется бесполезным украшательством, может сильно упростить чтение данных. Хотя цветные буквицы в документах - почти всегда выпендрёж, использование цвета и грамотный подход к построению таблиц позволят читателю быстрее вникнуть в суть.

13 комментариев:

  1. С возвращением в ряды блоггеров! Не зря я не удалял твой блог из подписки, ой не зря! Жаль, диссер уже давно написан, а так бы твоими рецептами пренепременно воспользовался бы. Из всего добра, я только fancyhdr задействовал.

    ОтветитьУдалить
  2. @iv_vl комментирует...
    С возвращением в ряды блоггеров!
    Да я, собственно, никуда и не уходил. Я не буду закрывать блог - просто у меня больше нет возможности уделять блогу столько времени, сколько раньше. Теперь я чаще пишу в scriptogram, хотя качество постов там, естественно, куда ниже (это типа записной книжки).

    Жаль, диссер уже давно написан, а так бы твоими рецептами пренепременно воспользовался бы.
    Ну, мало ли, кому пригодится. Сейчас время написания курсовых и дипломов - мои старые записки по латеху пользуются спросом.

    Кстати, пользуясь случаем, ещё попиарю Эдварда Тафтэ и его книжки - старик дело пишет. Немного дополнил пост PDF-образцом того, как выглядит его стиль.

    ОтветитьУдалить
  3. Приятно видеть новую статью в любимом блоге!

    Отображение данных, представление данных в виде таблиц и построение
    Edward Tufte - это Леонардо да Винчи отображения данных. Пожалуй, одна из его лучших книг - Envisioning Information, в которой он устраивает Tour De Fource информационного дизайна.
    наглядных графиков - целое искусство. В этой области

    Похоже части абзаца перепутались)

    ОтветитьУдалить
  4. He's alive, alive!!! Ура! :)
    @virens комментирует...
    Я не буду закрывать блог - просто у меня больше нет возможности уделять блогу столько времени, сколько раньше.
    Зато статья получилась более выдержанная. :)
    @virens комментирует...
    Теперь я чаще пишу в scriptogram, хотя качество постов там, естественно, куда ниже (это типа записной книжки).
    Ни разу не видел. Что за зверь?
    @virens комментирует...
    Кстати, пользуясь случаем, ещё попиарю Эдварда Тафтэ и его книжки - старик дело пишет.
    Тема вообще для отдельной статьи, имхо. И, кстати, вдогонку. Качество русскоязычной вики оставляет желать лучшего, как всегда.
    Везде Тафтэ - политолог, а оказывается у него талант грамотно преподносить нформацию. Мда, и перечень работ на русской вики вообще мизер. Ну это уже тема для отдельных дискуссий.

    ОтветитьУдалить
  5. @Gregory комментирует...
    Похоже части абзаца перепутались)
    Есть такое. Исправил.


    @Basil Orlov комментирует...
    He's alive, alive!!!

    На Франкенштейна намекаешь, да? :-) Не помру - не дождётесь!

    Зато статья получилась более выдержанная. :)

    На самом деле - написана "с колёс", то есть с одного захода. И попутно собрал несколько черновиков сюда. Просто хотелось дополнить книжкой Тафтэ - до сих пор под впечатлением.

    Ни разу не видел. Что за зверь?
    Так вот это Лунодром и есть. Собственно, сам scriptogram тут. Но там моя записная книжка, на английском, со всякой всячиной и подчас матюгами :-)

    Тема вообще для отдельной статьи, имхо.
    В общем-то да, просто мне по этому поводу сказать лучше Тафтэ уже не получится. Я приспособил tafte-book для ведения личного дневника - мне очень нравится, как он выглядит.

    И, кстати, вдогонку. Качество русскоязычной вики оставляет желать лучшего, как всегда.
    "А вы не читайте советских газет" (С). В англоязычной вики всё в целом грамотно написано. Он там ещё и по PowerPoint прошёлся, причём весьма обоснованно.

    Везде Тафтэ - политолог, а оказывается у него талант грамотно преподносить информацию.
    Собственно, я на его работы по Data Visualisation и попал - мне его политология, скажем так, не важна. Из тех трёх книг, что я читал, Envisioning Information наверное запомнилась более всего. Почерпнул много нового, особенно в плане дизайна таблиц. Теперь booktabs в латехе - мой рулевой :-)

    ОтветитьУдалить
  6. Очень ждали Ваших постов, как-то без них скучнова-то, да и посты по латех для меня очень вовремя - закончил исследования и планирую браться за диссертацию. Спасибо, Михаил.

    ОтветитьУдалить
  7. Стоит ещё упомянуть про пакет fontogroup, взять его можно тут:
    http://herba.msu.ru/shipunov/software/tex/tex-ru.htm
    Пакет позволяет подключать различные кириллические фигурные шрифты в LaTeX.

    Как пример того, что можно сделать с этим пакетом, у меня блоге можно видеть методичку готическим шрифтом:
    http://ra3xdh.blogspot.ru/2013/08/fontogroup-latex.html
    Не знаю, правда, зачем это может быть нужно, но может быть пригодится.

    ОтветитьУдалить
  8. @Виктор Дубинич комментирует...
    Очень ждали Ваших постов, как-то без них скучнова-то, да и посты по латех для меня очень вовремя

    Со временем было (и, увы, есть) очень туго, так что не уверен, когда будут ещё посты. Но рад, что они кому-то помогают.

    @Вадим Кузнецов комментирует...
    методичку готическим шрифтом:
    Вадим, оно, конечно, оригинально, но я таки за свистульки не в ущерб читабельности. Готику очень тяжко читать, и через пару страниц хочется уже простого sans serif что ли :-) Но за ссылку спасибо.

    ОтветитьУдалить
  9. @virens комментирует...
    На самом деле - написана "с колёс", то есть с одного захода. И попутно собрал несколько черновиков сюда.
    Ну вот что и требовалось доказать. Черновики-то вылежались. А в это в ремя в голове картинка сложилась. Вот и получилось "с колёс", то есть с одного захода, мда... Творческий же процесс :)

    "А вы не читайте советских газет" (С)
    Приходится. Иногда и в русскоязычной версии интересные ссылки встречаются, например такие как тут, тут или тут. :)

    @Вадим Кузнецов комментирует...
    Стоит ещё упомянуть про пакет fontogroup, взять его можно тут:
    http://herba.msu.ru/shipunov/software/tex/tex-ru.htm


    На сервере ведутся ремонтные работы. Приносим извинения за доставленные неудобства. Не вовремя я туда зашёл, да

    @Вадим Кузнецов комментирует...
    ...у меня блоге... http://ra3xdh.blogspot.ru ...
    хм, я утащу себе в офлайн, пожалуй, кое-что ))

    ОтветитьУдалить
  10. @Basil Orlov комментирует...
    На сервере ведутся ремонтные работы.
    Если сервер и дальше будет лежать, то выложу fontogroup куда-нибудь, например, на Гитхаб.

    ОтветитьУдалить
  11. Теперь fontogroup я положил на Гитхаб. Можно его забирать отсюда:
    https://github.com/ra3xdh/fontogroup

    ОтветитьУдалить
  12. Доброго и бесконечно волшебного времени!
    Не сплю и не ем, хочу разрешить задачу, да не умею, наверное.
    Есть у меня документ сборный: в папке include храню я файлы, в коих у меня есть некоторый перечень.

    \addtocounter{pointcount3}{1}
    \arabic{section}.\arabic{subsection}.\arabic{pointcount3} - так был решён вопрос с нумерацией, причем section находится в основном документе, а subsection и pointcount в подключаемом. Теперь мне необходимо взять получившийся номер, а он будет выглядеть так: 1.1.1 и вставить ссылку на номер в текст и в таблицу, при всавке оного по средствам команд \label{...} и \ref{...} у меня получается только 1.1 теряется важная составляющая (но я пока даже не могу понять что именно section или pointcount). В любом случае в моей документации сие не допустимо. Может, Гуру ЛаТеХа ответят, как решается оная загадка? Буду благодарен. Андрей

    ОтветитьУдалить