Алгоритм размещения сносок с колонками - PullRequest
3 голосов
/ 22 августа 2010

Я реализовал базовый алгоритм макета страницы для размещения сносок. В основном:

  1. Разметка строки основного текста.
  2. Если он содержит ссылки на сноски, выкладывайте сноски строка за строкой.
  3. Перейти к 1.

На каждом шаге я проверяю, превышает ли общая высота (основной текст + текст сноски + пробел) высоту страницы. Если это произойдет, я удаляю последнюю выложенную строку, и страница завершена.

Мой вопрос: Как мне справиться с ситуацией, когда основной текст находится в двух столбцах?

По сути, мне нужно было бы заранее знать общую разрешенную высоту основного текста, чтобы правильно расположить столбцы, но это невозможно узнать, пока я не узнаю высоту текста сноски.

Я также не могу просто взять суммарную высоту строк основного текста и разделить на 2 из-за разной высоты строк, межстрочного интервала, расстояния между абзацами и т. Д.

Ответы [ 2 ]

1 голос
/ 22 августа 2010

У вас есть 3 блока - два для столбцов и один для сносок.Очевидно (высота столбца + высота сносок + пробел) должна быть ниже высоты страницы.

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

1 голос
/ 22 августа 2010

Интересная проблема. (Читайте: Вы должны получить больше голосов.)

Как мне справиться с ситуацией, когда основной текст находится в двух столбцах?

Я не думаю, что есть прямой ответ на это.Ответ действительно зависит от эстетического идеала, который вы задали для своих документов.

Я бы немного изменил ваш алгоритм так, чтобы:

  • Область основного контента была фиксированной для данной страницы
  • Сноски и друзья не будут отображаться в основной области содержимого.

В этом случае выберите объем текста, который можно разместить в многостолбцовой раскладке.Далее укажите все сноски в этом разделе текста.Изменить нумерацию сносок (например, если вы сжимаете пару страниц в одну).Теперь расположите сноски в единственном столбце в обозначенной области.

Проблемы / вопросы:

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

  • Должны ли ваши сноски быть многоколоночными?Я никогда не видел документ, в котором сноски были бы многостолбцовыми, но это зависит от вас.

  • Если существует жесткое требование, чтобы весь текст сноски располагался на одной странице с содержимымэто относится к этому: вам нужно будет алгоритмически вычислить (приходит в голову динамическое программирование), сколько вы можете уместить под заданные ограничения страницы, выкинуть все остальное и макет только столько, сколько сможете, а затем поиграть с текстом так,что не так много пробелов, чтобы беспокоить читателя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...