
Я новичок в Latex (использую xelatex) и пытаюсь сделать макет документа с большим количеством коротких сносок. Я использую para
и perpage
.
Я пробовал para
и с тем, bigfoot
и с другим footmisc
. Я пробовал perpage
из footmisc
, perpage
и bigfoot
. Во всех этих комбинациях (когда я наконец получаю что-то компилируемое), однако, я получаю своего рода состояние гонки, когда страница a будет начинаться со сносок 27 и 28, например. Когда я перезапускаю xetex, сноски оказываются на предыдущей странице, но пронумерованы 1 и 2, а следующая страница начинается со сноски 3.
Другими словами, кажется, что номер(а) сноски, состоящий из двух цифр, находится на пороге, который переносит слово(а) на следующую страницу. Когда xetex запускается снова (со словами и сносками на следующей странице), номер сноски уменьшается на страницу, что заставляет слово(а) перенестись обратно на предыдущую страницу.
Я могу бесконечно перезапускать xetex, но нумерация/интервалы не стабилизируются. Я могу привести рабочий пример, но он не будет "минимальным", потому что документы часто длинные. Они также в основном на греческом языке.
[РЕДАКТИРОВАТЬ:]Как я уже сказал, я новичок в Latex, и мне кажется, что вся система довольно хрупкая. Если есть Right Way™, как это сделать, я весь внимание. Одна вещь, которая, как мне показалось, могла бы помочь, это возможность установить минимальную ширину сноски. Я не думаю, что у меня 100 сносок на какой-либо странице, поэтому мне просто нужно было бы зафиксировать ширину на чем-то достаточно широком, чтобы вместить две самые широкие цифры. Я не знаю, возможно ли это, но это сделало бы номера сносок предсказуемыми для переноса.
решение1
Стандартные знаки сносок LaTeX набираются в полях, ширина которых как раз достаточна для того, чтобы вместить их содержимое. Это делается командой, \@makefnmark
определенной в ltfloat.dtx
:
\def\@makefnmark{\hbox{\@textsuperscript{\normalfont\@thefnmark}}}
Согласноваш комментарий, я покажу, как можно изменить это определение, чтобы набрать знаки сносок в полях одинаковой ширины. Боюсь, это будет некрасиво для маленьких (например, однозначных) номеров сносок...
Для общей ширины, общей для всех полей сносок, мы будем использовать естественную ширину 00
в \normalfont
и размер для стандартных сносок. Если вы хотите зафиксировать ширину более простым способом — который не будет адаптироваться к шрифту документа — вы можете использовать что-то вроде \setlength{\myfootnotemarkwidth}{4mm}
.
Поскольку в этой настройке поля для сносок имеют фиксированную ширину, вам нужно выбрать, как содержимое будет выравниваться внутри поля. Следующий пример, используемый в полном примере ниже, центрирует каждый знак сноски внутри его поля:
\renewcommand*\@makefnmark{%
\hbox to \myfootnotemarkwidth{%
\hfil\@textsuperscript{\normalfont\@thefnmark}\hfil
}%
}
Если вы предпочитаете выравнивание по левому или правому краю, просто удалите одну из \hfil
команд.
Если у вас есть знаки сносок, которые слишком велики для выбранной ширины блока (которая есть \myfootnotemarkwidth
в моем коде), это правильно выдаст \hbox
предупреждения о переполнении. Как я понял из вашего вопроса, ситуация переполненности может быть временной из-за perpage
и обязательно исчезнет при следующем запуске LaTeX. Тем не менее, если вас слишком беспокоят \hbox
предупреждения о переполнении при первом запуске (почему?), вы можете заменить \hfil
на \hss
; но будьте осторожны, если вы это сделаете, у вас могут быть знаки сносок, накладывающиеся на соседний текст без уведомления. Поэтому тщательно взвесьте все «за» и «против», прежде чем вносить такое изменение.
Вот полный пример:
\documentclass{article}
\makeatletter
\newlength{\myfootnotemarkwidth}
% Compute the width of a standard footnote mark numbered 00 (two digits) in
% \normalfont.
\AtBeginDocument{%
\settowidth{\myfootnotemarkwidth}{\@textsuperscript{\normalfont 00}}%
}
\renewcommand*\@makefnmark{%
\hbox to \myfootnotemarkwidth{%
\hfil\@textsuperscript{\normalfont\@thefnmark}\hfil
}%
}
\makeatother
\begin{document}
Some text\footnote{The footnote text.} to show the width of the footnote mark.
And now a high-numbered\footnote[99]{Other footnote text.} footnote.
\end{document}
Верх страницы:
Внизу страницы:
Если вы хотите, чтобы знаки сносок, используемые командой \footnotetext
(т. е. место назначения для сносок внизу страницы), оставались в своем обычном форматировании, вы можете изменить предыдущий пример следующим образом:
\documentclass{article}
\usepackage{etoolbox}
(...)
\AtBeginDocument{(...)
}
\let\@latex@makefnmark\@makefnmark
\patchcmd{\@makefntext}{\@makefnmark}{\@latex@makefnmark}{}{\FAILED}
\renewcommand*\@makefnmark{%
(...)
Тогда нижний колонтитул примера будет выглядеть следующим образом (цифра «1» расположена ближе к слову «The», чем в полном примере, показанном выше):