|
2010/11/20 Aleksander Gorohovski <CyrTeX-ru@vsu.ru>:
> On Sat, 20 Nov 2010 13:17:29 +0200, Andrew R. Muhametshin wrote:
>
> *Tex система существует примерно уже четверть века, сформировались
> устоявшиеся схемы-подходы
> и, наверное,.такое решение давно должно было бы появится.
Сложность задачи в том, что в TeXовском алгоритме разбиения текста на
страницы на момент вывода страницы операция разбиения абзацев на
строки уже сделана, причем достаточно необратимо: нельзя переразбить
часть абзаца, попавшую на следующую страницу, на более короткие
строки. Видимо, поэтому на поверхности нет готовых решений.
Если пофантазировать, то по-видимому, надо было бы каждый абзац
сохранять во временный регистр, потом его обычным образом набирать и
разбивать на строки (hbox'ы) и добавлять эти hbox'ы в main vertical
list (MVL). Если при разбиении на страницы оказывается, что очередной
абзац попал на стык страниц и на следующей странице вверху должна быть
обтекаемая картинка высотой N строк, то надо возвращать в MVL всю
только что набранную страницу, потом выбрасывать из MVL те hbox'ы,
которые соответствуют последнему набранному абзацу (запомнив число M
его строк, попавших на набранную страницу) и вновь набирать копию
этого абзаца, сохраненную во временном регистре.
Причем для повторного набора этого несчастного абзаца надо
использовать команду \parshape, где первые M строк имеют ширину,
соответствующую концу предыдущей страницы, следующие N строк -
уменьшенную ширину, соответствующую верхней части страницы с рисунком
(считаем, что рисунок имеет высоту N строк), а остальные строки -
стандартную ширину.
Наверное, полезно было бы еще переопределить "страницы" в алгоритме
разбиения на страницы как вертикальные куски, имеющие одинаковую
ширину строки (т.е. блок строк рядом с верхним рисунком, блок строк
нормальной ширины посредине высоты печатной полосы и блок строк рядом
с нижним рисунком - это три последовательных "страницы") и собирать
эти страницы в настоящие полосы для вывода на печать уже внутри output
routines (OTR).
Но у меня программистская квалификация, увы, не настолько высока,
чтобы вот прям сейчас сесть и такое сделать :)
Про OTR главный (но непонятный) источник - это, конечно, The TeXbook,
но более подробно и хорошо написано в старой книжке D. Salomon "The
Advanced TeXbook": http://books.google.com/books?id=rstheMEAf2gC (надо
смотреть гл. 14 и 16-19). Но это для Plain TeX'а (хотя мне случалось
пользоваться кусками кода из этой книжки и в LaTeXовских проектах).
Вот как-то так.
Андрей
|
|