这道题不是要求代码片段,
而是要求用文字描述一般做法。
在纯 TeX 中,我想将图像/矩形框放置在以水平模式处理的某段文本的左侧。
包含图像的矩形框的上边界线应垂直对齐表示文本第一行高度的边界线。(该高度不是字母的高度,\strutbox
而是取决于第一行的内容。它可能是大写字母的高度,可能是 x 高度或 x 高度与某个字母的上升部分之和,或其他任何高度。)
水平方向上,包含图像的框的右边界线与文本行的左边距之间应有约 1/3 英寸的间隙。
无论如何,图像和文本都不能粘在文件的边缘。
因此,文本的宽度应为正常文本行的宽度减去水平间隙的宽度(1/3 英寸)并减去图像的宽度。
如果文本占用的垂直空间比图像多,则可能会发生分页,如果不分页,文本行将垂直位于包含图像的矩形框的下边界线以下。
如果文本占用的垂直空间小于图像,则文本下方应该有一个垂直间隙,其长度为图像高度 + 图像深度 - 文本高度 - 文本深度。
现在我考虑以下方法:
将图像和水平间隙放入一个水平框中。我们称之为imagebox
。
测量图像框的宽度。
将文本放入一个0pt 大小的\vtop
文本框中,该文本框的宽度等于图像框宽度与一行普通文本宽度之差。 我们称该文本框为“中间文本框”。\topskip
\hsize
为图像框指定一个新的深度:图像框的高度 + 图像框的深度 - 中间文本框的高度。
为图像框指定一个新的高度:“中间文本框”的高度。
情况 1:如果文本框垂直方向大于图像框:
创建一个“环绕
\vbox
”,其\hsize
等于图像框宽度与常规文本行宽度之差,其\leftskip
等于图像框宽度,其第一行以 开始\llap
(考虑\parindent
到)包含一个不带 的“内部\vbox
”\topskip
,包含图像框和负(向上)垂直跳跃,其长度等于图像框深度。其后\llap
是文本。\unvbox
环绕\vbox
。情况 2:如果文本框垂直方向小于图像框:
创建一个“周围
\vbox
”,其\hsize
宽度等于图像框的宽度,其第一行/唯一一行包含图像框,其第一行包含\rlap
一个“内部\vbox
”,其中有“中间文本框”,后跟一个负(向上)垂直跳跃,其长度等于中间文本框的深度”。
问题:
广告案例 1:如何确保图像框不会卡在底部边缘?在\llap
“周围\vbox
”内,然后是垂直正(向下)跳跃,其长度等于图像框的深度,然后是惩罚的显著减少,然后是负(向上)垂直跳跃,其长度也等于图像框的深度,这样就足够了吗?
广告案例 2:没有编辑“surrounding \vbox
”和“inner ” 。如何确保这些垂直框顶部的垂直粘连与“surrounding ”顶部的垂直粘连相结合,就好像“surrounding ”和“inner ”不存在一样?\vbox
\unvbox
\vbox
\vbox
\vbox