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

Оформление подрисуночной подписи


Обсудим, как можно менять оформление подписи под рисунком (или таблицей), создаваемой командой \caption).

Над и под подписью предусмотрены вертикальные отбивки. Их размеры хранятся в параметрах со значением длины (растяжимой) \abovecaptionskip (отбивка над подписью) и \belowcaptionskip (под подписью). В стандарте отбивка над подписью равна 10pt (без растяжимости или сжимаемости), а под подписью — нулю.

Чтобы изменить само оформление подписи, надо переопределить команду \@makecaption; вот ее стандартное определение в адаптированном виде (параметр #1 — номер иллюстрации или таблицы с подписью, то есть значение команды \thefigure или \thetable; параметр #2 — текст подписи):

\newcommand{\@makecaption}[2]{% \vspace{\abovecaptionskip}% \sbox{\@tempboxa}{#1: #2} \ifdim \wd\@tempboxa >\hsize #1: #2\par \else \global\@minipagefalse \hbox to \hsize {\hfil #1: #2\hfil}% \fi \vspace{\belowcaptionskip}}

Разберем этот код. Во второй и последней строчках вокруг подписи делаются отбивки, как было объяснено выше. В третьей строке в блоковую переменную \@tempboxa (эта переменная используется LaTeX'ом для временного хранения данных такого рода) записывается текст подписи вместе с номером (пока что в одну строку; поскольку в данный момент этот текст еще не печатается, нас не волнует, не окажется ли он длинней, чем ширина полосы). В следующих шести строках (с помошью не рассматривавшейся нами TeX'овской конструкции "условных макросов") длина подписи с номером сравнивается с шириной текста (она обозначена \tex'овским параметром \hsize: при одноколонном наборе это то же самое, что \textwidth), а при многоколонном — \columnwidth). Если подпись вместе с номером длиннее строки, то она печатается как абзац (часть кода между \ifdim) и \else), а если не длиннее, то центрируется (часть кода между \else и \fi). Код на седьмой строке воспринимайте как данность.

Что можно изменить в этом определении? Поскольку #1 — это номер, а #2 — текст подписи, нетрудно заметить, что номер отделяется от подписи двоеточием, что с отечественными полиграфическими традициями не согласуется.
Разумно заменить в этом месте двоеточие на точку. Кроме того, можно изменить шрифт, которым печатается подпись. Только не забудьте, что при переопределении надо будет вставить команды смены шрифта в три места (всюду, где в исходном определении стоит #1: #2): и в "измеряющую размер" строку, начинающуюся с \sbox (от смены шрифта размер тоже может измениться), и в оба варианта печати. Наконец, вы можете решить (не знаю, насколько это правильно) никогда не центрировать подписи; тогда в измененном определении \@makecaption надо будет удалить строки, начинающиеся с \ifdim, \else и \fi, а также текст между \else и \fi (и, возможно, установить свои любимые параметры верстки абзаца). Возможны, наверное, и другие решения. В любом случае помните, что текст между \ifdim и \else относится к случаю, когда подпись с номером в строку не умещается, а текст между \else и \fi — к противоположному.

И последнее: команду \@makecaption вы будете, конечно, переопределять с помощью \renewcommand; имейте в виду, что в данном случае надо пользоваться вариантом \renewcommand без звездочки, поскольку второй аргумент этой команды (текст подписи) вполне может состоять из нескольких абзацев.


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