Перемещение нижнего поля для освобождения места для сносок

Перемещение нижнего поля для освобождения места для сносок

Я видел много похожих вопросов, но не видел ни одного ответа. Я хочу, чтобы сноски появлялись под основным текстом, не меняя размер основного текста. Только в случае, если сноска слишком большая (она должна иметь собственное нижнее поле, ниже поля основного текста), я хочу, чтобы она сдвинула основной текст вверх. Вот приблизительное представление того, что я ищу (извините за мои навыки рисования)Макет страницы

Вот самое близкое, что мне удалось получить на данный момент

\begin{luacode}
function enlarge_page()
  tex.print("\\enlargethispage{\\custom_distance}")
end
\end{luacode}

\let\oldfootnote\footnote
\renewcommand{\footnote}[1]{%
  \directlua{enlarge_page()} % Call the Lua function to enlarge the page
  \oldfootnote{#1}%
}

то есть не очень далеко: расстояние смещения неверное, не учитывает количество строк в сноске, разное расстояние между первой сноской и текстом, а также между самими сносками. Любая попытка включить больше деталей приводила к сообщению об ошибке. Я использую класс memoir. Есть ли способ добиться этого?

UPD: Я больше нигде не использую Lua, так что если есть решение в XeLaTex, я могу его использовать

UPD2: Вот примерно та логика, которую я ищу:

if footnote in page : lower bottom margin by a specific constant amount
for every footnote in page : lower bottom margin by distance between footnotes + (footnote length/55)* line height 
% There are roughly 55 characters per line in the footnotes
if bottom margin < the lowest possible point: bottom margin = the lowest possible point.

Думаю, это должно быть возможно в Lua, учитывая, что мне удалось уменьшить поля для каждой сноски.

Связанный контент