Сноски
Стиль оформления сносок зависит от многих вещей. Начнем с пробела между страницей и сносками. Чтобы его изменить, надо применить команду \setlength с необычным первым аргументом. Вот, например, как выглядит команда, устанавливающая стандартную для LaTeX'а величину этого пробела:
\setlength{\skip\footins}{12pt plus 4pt minus 4pt}Почему в первом аргументе\setlength целых две команды и что они означают, объяснить в рамках этой книги невозможно, так что воспринимайте этот рецепт для установки пробела между текстом и сносками догматически (для любознательных: вся правда содержится в пятнадцатой главе книги [2].
Далее, сноски обычно отделяются от текста не только пробелом, но и линейкой. Чтобы задать вид этой линейки, отличный от стандартного, либо задать какой-то другой разделитель, надо переопределить команду \footnoterule, которая в стандарте определена так:
\newcommand{\footnoterule}{\vspace*{-3pt} \hrule width .4\columnwidth \vspace*{2.6pt}}К этому макроопределению необходим комментарий: непонятно, зачем нужны команды \vspace. Дело в том, что "текст", генерируемый командой \footnoterule, не должен, с точки зрения TeX'а, занимать места по вертикали (фактически он располагается внутри пробела между текстом и сносками, о котором шла речь выше). Поэтому мы сначала отступаем на 3 пункта вверх, затем печатаем линейку (вспомним, что по умолчанию линейка, генерируемая командой \hrule, имеет толщину 0.4 пункта), а затем спускаемся на 2.6 пункта вниз. В итоге получается, что и линейка напечаталась, и места по вертикали мы не занимаем, поскольку
.Может возникнуть вопрос, зачем нужен \vspace*{-3pt}: не проще ли обойтись без этой команды, а после \hrule сказать \vspace*{-0.4pt}? Ответ: в этом случае линейка напечаталась бы вплотную к сноске.
Если вы хотите изменить ширину или толщину линейки, команду \footnoterule можно переопределить; только не забудьте проследить, чтобы отрицательный \vspace скомпенсировал толщину линейки. Можно, собственно говоря, сделать так, чтобы этой линейки вообще не было, сказав
\renewcommand{\footnoterule}{} (уж тут- то места по вертикали мы не займем!). Если вам вдруг понадобится задать совсем иной разделитель между сносками и текстом, можете переопределить команду \footnoterule принципиально по-иному. В этом случае необходимо знать следующее:
- команда \footnoterule будет выполняться в те моменты, когда TeX находится в вертикальном режиме;
- по окончании работы команды \footnoterule TeX должен снова оказаться в вертикальном режиме;
- текст, генерируемый командой \footnoterule, не должен, с точки зрения TeX'а, занимать места по вертикали.
За вид номеров сносок в тексте отвечает команда \@makefnmark. По умолчанию она определена следующим образом:
\newcommand{\@makefnmark}{\hbox{\mathsurround=0pt $^{\@thefnmark}$}} Здесь на место команды \@thefnmark при выполнении будет подставлен номер сноски (или то, что его заменяет, если мы пользовались командой \footnotemark). Обратите внимание, что номер сноски оформлен как верхний индекс в математической формуле — именно благодаря этому номера сносок печатаются над строкой. По этой же причине внутри группы, являющей собой аргумент команды \hbox, устанавливается в нуль параметр \mathsurround - иначе, если вы установили для него ненулевое значение, номер сноски будет окружен лишними пробелами.
И, наконец, самое главное — команда, генерирующая собственно текст сноски. Она называется \@makefntext. Вот ее стандартное определение, в котором аргумент #1 обозначает текст сноски, а команда \@thefnmark означает то же, что и выше:
\newcommand{\@makefntext}[1]{\parindent=1em\noindent \hbox to 1.8em{\hss\@makefnmark}#1} При переопределении этой команды следует иметь в виду, что она будет выполняться внутри аргумента команды \parbox с длиной строки, равной ширине колонки текста; в приведенном выше определении применена команда \noindent, чтобы подавить абзацный отступ в первом абзаце сноски, в котором будет печататься ее номер.
Имейте в виду, что поскольку текст сноски, являющийся аргументом команды \@makefntext, может состоять из нескольких абзацев, переопределять эту команду надо с помощью \renewcommand без звездочки.