
Этот вопрос не требует фрагментов кода.
Он требует описания общих практик словами.
В простом TeX я хотел бы разместить изображение/прямоугольное поле слева от некоторого фрагмента текста, который обрабатывается в горизонтальном режиме.
Верхняя граничная линия прямоугольного блока, содержащего изображение, должна быть вертикально выровнена с граничной линией, обозначающей высоту первой строки текста. (Эта высота не является высотой a, \strutbox
а зависит от содержимого этой первой строки. Это может быть высота заглавной буквы, высота x или сумма высоты x и высоты выносного элемента какой-либо буквы или что-то еще.)
По горизонтали между правой границей поля, содержащего изображение, и левым полем строк текста должен быть зазор около 1/3 дюйма.
В любом случае изображение и текст не должны выходить за поля документа.
Таким образом, ширина текста должна быть равна ширине обычной строки текста, уменьшенной на ширину горизонтального зазора (1/3 дюйма) и уменьшенной на ширину изображения.
В случае, если текст занимает больше вертикального пространства, чем изображение, может произойти разрыв страницы, поскольку строки текста без разрыва страницы по вертикали окажутся ниже нижней границы прямоугольного блока, содержащего изображение.
В случае, если текст занимает меньше вертикального пространства, чем изображение, под текстом должен быть вертикальный зазор, длина которого равна высоте изображения + глубине изображения - высоте текста - глубине текста.
На данный момент я рассматриваю следующий подход:
Поместите изображение и горизонтальный зазор в горизонтальный блок. Назовем это imagebox
.
Измерьте ширину области изображения.
Поместите текст в , \vtop
чей размер \topskip
равен 0pt и чей \hsize
равен разнице ширины imagebox и ширины обычной строки текста.
Давайте назовем этот box "промежуточным textbox".
Назначьте imagebox новую глубину: Высота imagebox + глубина imagebox - высота промежуточного текстового поля.
Назначьте imagebox новую высоту: Высота "промежуточного текстового поля".
Случай 1: Если текстовое поле по вертикали больше, чем поле изображения:
Создайте "окружение
\vbox
", которое\hsize
равно разнице ширины imagebox и ширины обычной строки текста и которое\leftskip
равно ширине imagebox и первая строка которого начинается с\llap
(принимая\parindent
во внимание) удерживающего "внутреннего\vbox
" без\topskip
, содержащего imagebox и отрицательного (вверх) вертикального скачка, длина которого равна глубине imagebox.\llap
За ним следует текст.\unvbox
окружение\vbox
.Случай 2: Если текстовое поле по вертикали меньше, чем поле изображения:
Создайте «окружающую
\vbox
» область, ширина которой\hsize
равна ширине поля изображения, и которая в качестве первой/единственной строки содержит поле изображения, а первая строка\rlap
содержит «внутреннюю\vbox
» область с «промежуточным текстовым полем», за которой следует отрицательный (вверх) вертикальный пропуск, длина которого равна глубине промежуточного текстового поля.
Вопросы:
Ad Case 1: Как можно гарантировать, что imagebox не будет прилипать к полю внизу? Достаточно ли иметь внутри \llap
"окружающего \vbox
" с последующим вертикальным положительным (вниз) пропуском, длина которого равна глубине imagebox, с последующим значительным уменьшением штрафа, с последующим отрицательным (вверх) вертикальным пропуском, длина которого также равна глубине imagebox?
Ad Case 2: И «окружение \vbox
», и «внутреннее \vbox
» не \unvbox
редактируются. Как убедиться, что вертикальный клей наверху этих вертикальных коробок сочетается с вертикальным клеем поверх «окружения \vbox
», как будто «окружения \vbox
» и «внутреннего \vbox
» там нет?