LaTeX双栏页面忽略页边距插入绕排图片及半页图实现方案问询
双栏排版跨页边距插入图片并实现文本绕排解决方案
问题原因
你原有方案的失效核心原因是:tikz 开启 overlay 参数时,生成的绘图元素完全脱离TeX的正常文本流排版逻辑,排版引擎不会为这部分内容预留排版空间,因此会出现正文和图片重叠的问题。
实现方案
需要搭配 cutwin 包实现段落自定义缩进,为图片提前预留对应尺寸的空白区域,再用 tikz 将图片精确放置到页面指定位置,即可同时满足「忽略页边距定位」和「文本自动绕排」两个需求。
依赖包说明
cutwin:自定义段落缩进规则,为图片预留空白tikz:实现图片相对于页面的绝对定位,忽略页边距限制graphicx:图片插入支持lipsum:生成测试占位文本
完整可运行示例(左上角半页图场景)
\documentclass[twocolumn, 12pt]{book} \usepackage{lipsum} \usepackage{tikz} \usepackage{cutwin} \usepackage{graphicx} \begin{document} \lipsum[1-2] % 步骤1:为图片预留空白区域:左缩进-1in(伸到左页边距外),占20行高度 \opencutleft \cutwin{0}{-1in}{0pt}{20行} % 调整垂直偏移对齐图片位置 \vspace*{0.5\baselineskip} % 步骤2:用tikz绝对定位放置图片 \begin{tikzpicture}[remember picture, overlay] \node[anchor=north west, yshift=-1.5pt, xshift=1pt] at (current page.north west) {\includegraphics[width=0.5\paperwidth, height=0.5\paperheight]{example-image-a}}; \end{tikzpicture} % 绕排的正文内容 \lipsum[1-4] \end{document}
其他位置适配方法
- 右上角:将
\opencutleft改为\opencutright,cutwin参数改为\cutwin{0}{0pt}{-1in}{20行},tikz节点锚点改为anchor=north east,对齐current page.north east - 左下角:调整
cutwin的预留行数参数,将tikz节点锚点改为anchor=south west,对齐current page.south west,同步调整vspace偏移量 - 右下角:同理修改锚点为
anchor=south east,修改cutwin缩进方向为右侧 - 非半页尺寸的图片:只需同步修改
includegraphics的宽高参数,以及cutwin的预留行数、缩进尺寸即可匹配
注意事项
- 该方案需要编译2次,
tikz的绝对定位需要两次编译才能确定准确的页面坐标 - 预留行数可根据实际图片高度微调,12pt字号下每行高度约为14pt,可根据图片高度换算对应行数,避免出现空白过大或重叠问题
内容的提问来源于stack exchange,提问作者stripesbunny
相关产品推荐
相关产品推荐

