Перейти к содержимому
Topos Uranos

Таблицы и рисунки: итоги и задачи повышенной трудности

Краткое содержание

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

Цели обучения

  1. Восстанавливать порядок механизмов раздела, указывая принцип, на который опирается каждый из них.
  2. Объяснять, почему так много дефектов таблиц, изображений и плавающих объектов компилируется без предупреждений, и где искать их след в результате.
  3. Отличать то, что раздел установил, от того, что он лишь наметил и что разовьют следующие разделы.
  4. Набирать таблицы и рисунки, сочетающие выровненные числа, подписи, названия, ссылки, подрисунки и чертежи, и предсказывать, что даст исходный код, который их сочетает.
  5. Выбирать для каждой таблицы, изображения или рисунка окружение, размер и место, которые выдерживают изменения документа.

Что достигнуто в разделе

Раздел ставил целью, чтобы данные, изображения и рисунки работы читались так же ясно, как её текст, нумеровались и упоминались в ссылках так же, как её разделы и уравнения, и находили своё место на странице без того, чтобы автор задавал его вручную. Цель достигнута с опорой на то, что введение считало известным из предыдущих разделов: ссылки, зависящие от того, что запоминает метка; выравнивание из предыдущего раздела, где каждая \\ открывает строку, а каждый & отделяет ячейку; и преамбулу с собственными командами, где решения принимаются один раз. Поэтому пройденный путь можно прочитать как единую цепочку из пяти участков.

Удобочитаемые таблицы

Занятие об удобочитаемых таблицах применило к тексту принцип выравнивания: tabular строит строку на каждую \\ и ячейку между каждой парой &, с одной буквой столбца на ячейку, а целое есть бокс, который движок размещает целиком. Из правила счёта оно вывело два вида ошибок: громкую, «Extra alignment tab», которая при пропущенной \\ указывается на следующей строке, и тихую, строку с меньшим числом ячеек, которую движок принимает. Оно заменило сетку тремя линейками booktabs, с укороченной \cmidrule и \addlinespace; выровняло числа по десятичной запятой столбцом S пакета siunitx, чей table-format резервирует место, которое более широкое число превышает, не оставляя иного следа, кроме «Overfull \hbox» в журнале, и чью запятую нужно объявить через \sisetup, потому что siunitx не берёт её у babel; перенесло единицы измерения в заголовки, в фигурных скобках в столбцах S; и набрало текст с рваным правым краем с помощью \raggedright\arraybackslash.

Сложные и длинные таблицы

Занятие о сложных и длинных таблицах распространило правило счёта на \multicolumn, занимающую место нескольких ячеек, и показало, что забытый начальный & сдвигает групповой заголовок незаметно для движка, потому что частичные линейки зависят только от своих номеров. Оно дало таблицам ширину строки с помощью tabularx или tabular* с \extracolsep{\fill} и отвергло \resizebox, меняющий кегль; распределило длинные таблицы по нескольким страницам пакетом longtable, который повторяет свои заголовки, нумерует один раз, если продолжение несёт \caption[], требует ещё одного прохода, чтобы закрепить ширины, и теряет строки, если заключить его в table; и построило таблицы из единственного источника, файла данных, пакетами csvsimple и pgfplotstable, предупредив, что filecontents* без overwrite не перезаписывает файл.

Изображения в документе

Занятие об изображениях в документе установило, что \includegraphics создаёт бокс, который движок ставит в строку как большую букву, и вывело из этого абзацный отступ, из-за которого изображение выступает за ширину строки, способ его центрировать и способ поставить два изображения рядом. Оно выразило размеры относительно \linewidth, который подстраивается под место; показало, что ширина и высота без keepaspectratio молча искажают изображение и что параметры применяются в порядке записи; отличило векторную графику, которая экспортируется в PDF, от фотографий, разрешение которых движок не проверяет; и изучило поиск файлов: без расширения PDF молча предпочитается PNG, а \graphicspath требует двойных фигурных скобок.

Плавающие рисунки и таблицы

Занятие о плавающих рисунках и таблицах вывело плавание из неделимого бокса: то, что не делится и не помещается, переносится туда, где помещается, и поэтому на него ссылаются по номеру. Оно объяснило спецификаторы как разрешённые места, расширение [h] до [ht], пустоты от [H] и рисунок без возможного места, который задерживает остальные; набрало подпись, которая нумерует, вносит запись в список и в таблицах ставится сверху с отступом пакета caption; заменило «Рис.» на «Рисунок» командой \setlocalecaption, потому что babel отменяет \renewcommand, и исправило cleveref через \crefname, поскольку его параметр russian с LuaLaTeX не работает; убедилось, что caption выдаёт метку, поставленную перед подписью; и набрало подрисунки, независимые рисунки в одном figure и примечания к таблице с помощью threeparttable, показав сначала, что \footnote в плавающем объекте теряет свой текст.

Рисунки в TikZ

Занятие о рисунках в TikZ перешло от изображения, которое вставляют, к изображению, которое пишут. Оно началось с преамбулы: русский модуль babel делает активной двойную кавычку, и без \usetikzlibrary{babel} первая подпись библиотеки quotes не компилируется (а испанский модуль делает активным знак >, и там каскад ошибок вызывает уже первая стрелка). Оно прошло декартовы, полярные и относительные координаты с различием между + и ++; пути, параметры линии и наконечники arrows.meta; именованные узлы с якорями, расположенные друг относительно друга с помощью positioning; стили \tikzset и повторения \foreach; схемы разных дисциплин, график функции, синус которой молча измеряется в градусах, и pgfplots; и завершилось помещением рисунка в плавающий объект и сравнением трёх способов его уменьшить.

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

Опоры цепи

  • AЧто запоминает метка. Метка запоминает последний номер, присвоенный до неё внутри её окружения, не зная, к чему она привязана. Устанавливается в третьем разделе. В этом модуле принимается без доказательства.
  • BВыравнивание есть таблица. Окружение выравнивания строит строку на каждую \\ и ячейку на каждый отрезок между двумя &, даже если строка остаётся неполной. Устанавливается в предыдущем разделе. В этом модуле принимается без доказательства.
  • CРешать один раз. То, что решено в одном месте (команда или формат в преамбуле, стиль, файл данных), меняется во всём документе, если изменить его там; то, что скопировано вручную, перестаёт согласовываться. Устанавливается в предыдущих разделах. В этом модуле принимается без доказательства.
  • DПроходы. Движок записывает во вспомогательные файлы то, что вычисляет за один проход, и использует это на следующем. Устанавливается в первом разделе. В этом модуле принимается без доказательства.
  • EЧто делает babel по-русски. Русский модуль задаёт свои названия (Рис., Таблица, Список таблиц) в начале документа, после того как прочитана вся преамбула; делает активной двойную кавычку "; и не превращает точку в числах в запятую, так что запятую объявляют siunitx и pgfplots. Устанавливается отчасти в предыдущем разделе. В этом модуле принимается без доказательства.
  • FБокс не делится. Таблица, изображение или рисунок есть бокс, который движок размещает целиком, как большую букву, и который не разрывается между двумя страницами. Устанавливается в: 1. Строки и ячейки.
  • GКорректное не предупреждает. Движок предупреждает только о том, что не может набрать; корректный исходный код, который говорит не то, что хотел автор, компилируется без предупреждений, и дефект виден только в результате. Устанавливается в: 1. Строки и ячейки.
  • HПлавать и ссылаться. То, что не делится и не помещается там, где написано, переносится туда, где помещается; поэтому на плавающий объект ссылаются по номеру и никогда по месту. Устанавливается в: 13. Почему они плавают.
  1. Участок 1 Удобочитаемые таблицы

    • Выбирать между таблицей, списком и рисунком в зависимости от того, как будут искать данные.
    • Набирать таблицу с tabular и линейками booktabs, без сетки.
    • Выравнивать числа по десятичной запятой столбцом S.
    • Диагностировать ошибки таблицы, в том числе те, что не дают предупреждений.
    1. Строки и ячейки. tabular переносит в текст правило выравнивания: одна буква на столбец, & между ячейками и \\ в конце строки; строка с лишними ячейками даёт «Extra alignment tab», на следующей строке, если пропущена \\, строка с недостающими корректна, а целое есть бокс, который не делится.

      Опирается на: B (Выравнивание есть таблица), F (Бокс не делится), G (Корректное не предупреждает). Доказывается в уроке: Удобочитаемые таблицы.

    2. Линейки вместо сетки. Без вертикальных и двойных линий: \toprule, \midrule и \bottomrule, \cmidrule с подрезками и \addlinespace; \hline вперемешку с ними не даёт предупреждения и оставляет две системы линий.

      Использует: 1. Строки и ячейки. Опирается на: G (Корректное не предупреждает). Доказывается в уроке: Удобочитаемые таблицы.

    3. Числа по запятой. Столбец S выравнивает по разделителю; table-format резервирует место, и более широкое число выступает, оставляя лишь безымянное «Overfull \hbox»; \sisetup задаёт запятую, которую siunitx не берёт у babel; запятая тысяч, скопированная из английского текста, читается как десятичная.

      Использует: 1. Строки и ячейки. Опирается на: E (Что делает babel по-русски), G (Корректное не предупреждает), C (Решать один раз). Доказывается в уроке: Удобочитаемые таблицы.

    4. Заголовки и текст. Единица измерения указывается один раз в заголовке, который в столбце S заключается в фигурные скобки; \makecell разбивает длинный заголовок; столбец абзаца с рваным краем несёт \raggedright\arraybackslash, а без \arraybackslash появляется «Misplaced \noalign».

      Использует: 3. Числа по запятой, 2. Линейки вместо сетки. Опирается на: B (Выравнивание есть таблица). Доказывается в уроке: Удобочитаемые таблицы.

  2. Участок 2 Сложные и длинные таблицы

    • Группировать столбцы и считать ячейки каждой строки.
    • Давать таблице ширину строки без масштабирования.
    • Распределять длинную таблицу по нескольким страницам.
    • Строить таблицу по её файлу данных.
    1. Ячейки на несколько столбцов. \multicolumn занимает место нескольких ячеек, и счёт строки не должен превышать преамбулу таблицы; забытый начальный & молча сдвигает группу, потому что \cmidrule зависит только от своих номеров; лишняя ширина достаётся последнему столбцу группы.

      Использует: 1. Строки и ячейки, 2. Линейки вместо сетки. Опирается на: B (Выравнивание есть таблица), G (Корректное не предупреждает). Доказывается в уроке: Сложные и длинные таблицы.

    2. Ширина строки. tabularx расширяет свои столбцы X или столбец L, объявленный через \newcolumntype; tabular* распределяет пробел между столбцами с \extracolsep{\fill}; \resizebox отвергается, потому что даёт каждой таблице свой кегль.

      Использует: 4. Заголовки и текст. Опирается на: F (Бокс не делится), C (Решать один раз). Доказывается в уроке: Сложные и длинные таблицы.

    3. Многостраничные таблицы. longtable разрывается и повторяет свои заголовки с \endfirsthead и \endhead; нумерует через \caption и продолжается с \caption[]; записывает свои ширины и просит ещё один проход; внутри table снова становится боксом и теряет строки.

      Использует: 5. Ячейки на несколько столбцов. Опирается на: F (Бокс не делится), D (Проходы). Доказывается в уроке: Сложные и длинные таблицы.

    4. Таблицы из данных. У данных один источник, файл: csvsimple копирует его текст, а pgfplotstable форматирует его числа; filecontents* без overwrite не перезаписывает существующий файл и лишь сообщает об этом.

      Использует: 3. Числа по запятой, 7. Многостраничные таблицы. Опирается на: C (Решать один раз), G (Корректное не предупреждает). Доказывается в уроке: Сложные и длинные таблицы.

  3. Участок 3 Изображения в документе

    • Задавать размер изображения относительно строки и предсказывать его размеры.
    • Выбирать формат каждого изображения и проверять его разрешение.
    • Называть, размещать и находить файлы изображений.
    • Помещать изображение в строку как символ.
    1. Изображение есть большая буква. \includegraphics создаёт бокс, стоящий на базовой линии: после абзацного отступа изображение с width=\linewidth выступает; чтобы его центрировать, центрируют строку, а два изображения стоят рядом, если помещаются в неё.

      Опирается на: F (Бокс не делится). Доказывается в уроке: Изображения в документе.

    2. Размер и порядок параметров. Размеры относительно \linewidth подстраиваются под место; ширина и высота без keepaspectratio молча искажают; параметры применяются в порядке записи; trim требует clip, а несуществующая страница останавливает компиляцию.

      Использует: 9. Изображение есть большая буква. Опирается на: G (Корректное не предупреждает). Доказывается в уроке: Изображения в документе.

    3. Форматы и разрешение. Графики векторные и экспортируются в PDF в размере использования; фотографии растровые и требуют около 300 пикселей на дюйм, чего движок не проверяет; SVG преобразуют заранее, а EPS преобразует graphicx.

      Использует: 10. Размер и порядок параметров. Опирается на: G (Корректное не предупреждает). Доказывается в уроке: Изображения в документе.

    4. Имена и пути. Без расширения движок перебирает фиксированный порядок и молча берёт PDF раньше PNG; \graphicspath требует двойных скобок, а с одинарными каждая буква становится папкой; черновой режим показывает, какой файл использован.

      Использует: 11. Форматы и разрешение. Опирается на: G (Корректное не предупреждает). Доказывается в уроке: Изображения в документе.

  4. Участок 4 Плавающие рисунки и таблицы

    • Объяснять, почему рисунок плавает, и ссылаться на него по номеру.
    • Направлять и ограничивать место плавающих объектов.
    • Давать каждому плавающему объекту подпись, название и метку.
    • Набирать подрисунки и примечания внутри таблицы.
    1. Почему они плавают. figure и table переносят бокс туда, где он помещается, и на него ссылаются по номеру; буквы суть разрешённые места, [h] расширяется только до [ht], [H] оставляет пустоты, а рисунок без возможного места задерживает объекты своего вида.

      Использует: 1. Строки и ячейки, 9. Изображение есть большая буква. Опирается на: F (Бокс не делится), H (Плавать и ссылаться). Доказывается в уроке: Плавающие рисунки и таблицы.

    2. Подпись. \caption нумерует, набирает и вносит запись в список, которому нужен ещё один проход, и допускает краткое название; в таблицах ставится сверху, в рисунках снизу, а пакет caption задаёт её отступ и формат для всего документа.

      Использует: 13. Почему они плавают. Опирается на: D (Проходы), C (Решать один раз). Доказывается в уроке: Плавающие рисунки и таблицы.

    3. Название и ссылка. \setlocalecaption{russian}{figure}{Рисунок} даёт «Рисунок» в подписи, а babel отменяет \renewcommand{\figurename}; cleveref, чей параметр russian с LuaLaTeX вызывает ошибки, требует \crefname{figure}{рисунок}{рисунки}; метка ставится после подписи, и с caption неверно поставленная даёт предупреждение и два вопросительных знака.

      Использует: 14. Подпись. Опирается на: A (Что запоминает метка), E (Что делает babel по-русски). Доказывается в уроке: Плавающие рисунки и таблицы.

    4. Подрисунки и примечания. subcaption даёт буквы частям рисунка, которые cleveref называет «рисунок 1b»; независимые рисунки помещают в minipage внутри одного figure, никогда наоборот; \footnote в плавающем объекте молча теряет свой текст, а threeparttable связывает примечание с таблицей.

      Использует: 15. Название и ссылка, 9. Изображение есть большая буква. Опирается на: H (Плавать и ссылаться), G (Корректное не предупреждает). Доказывается в уроке: Плавающие рисунки и таблицы.

  5. Участок 5 Рисунки в TikZ

    • Подготовить преамбулу русского документа к рисованию.
    • Задавать точки абсолютными, полярными и относительными координатами.
    • Строить схемы из именованных узлов с собственными стилями.
    • Поместить рисунок в плавающий объект и уменьшить его, не потеряв кегля текста.
    1. Библиотека babel. Русский модуль делает активной двойную кавычку, и без \usetikzlibrary{babel} подпись библиотеки quotes даёт ошибку неизвестного ключа (в испанском так ломается уже первая стрелка, из-за знака >); библиотека это исправляет; без arrows.meta или без positioning сообщения гласят «Unknown arrow tip kind» и «Unknown function of».

      Опирается на: E (Что делает babel по-русски). Доказывается в уроке: Рисунки в TikZ.

    2. Координаты и пути. Координаты бывают декартовыми, полярными и относительными: ++ сдвигает опорную точку, а + нет; забытая точка с запятой указывается на следующей строке, а sin(\x) молча измеряет угол в градусах.

      Использует: 17. Библиотека babel. Опирается на: G (Корректное не предупреждает). Доказывается в уроке: Рисунки в TikZ.

    3. Узлы и стили. Узел есть бокс с именем и якорями; positioning располагает его относительно другого по расстоянию между краями, так что схема перестраивается сама; \tikzset задаёт стили, а \foreach повторяет.

      Использует: 18. Координаты и пути. Опирается на: F (Бокс не делится), C (Решать один раз). Доказывается в уроке: Рисунки в TikZ.

    4. Рисунок в плавающем объекте. Рисунок есть бокс и помещается в figure с подписью и меткой; scale сохраняет кегль, transform shape его уменьшает, а \resizebox уменьшает всё; pgfplots с compat не получает от babel десятичную запятую: её запрашивает параметр use comma.

      Использует: 19. Узлы и стили, 15. Название и ссылка, 6. Ширина строки. Опирается на: H (Плавать и ссылаться), E (Что делает babel по-русски). Доказывается в уроке: Рисунки в TikZ.

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