多列环境中图片超出页面范围

多列环境中图片超出页面范围

在我提问之前,我想先介绍一些背景信息。

我创建了一个算法(不是 latex),它将动态生成一组书籍的目录。用户提供信息来查询 SQL 数据库以检索书籍信息,并在 XML 文件中定义目录的结构。最后,通过一系列自动化步骤生成.tex文件,然后通过 latex 运行这些文件以创建目录 PDF 文件。

除了添加图像之外,一切都运行良好。通过反复试验,我发现该包picins与包配合得很好,multicol而且看起来也很棒。我遇到的唯一问题是,该包似乎picins没有计算图像何时会出现在页面之外,因此有时图像会出现在目录中的页面之外。

由于这些目录是自动生成的,因此人机交互越少越好。\columnbreak在由 文本换行的段落前添加parpic确实可以解决问题,但是手动执行此操作并不是解决方案,因为每个目录将包含数百本(甚至数千本)书籍。

用 包围段落和图片\parbox可以防止图片超出页面范围;但是,这会产生大量空白,并增加目录页数。由于此目录将打印,额外的页面意味着更多的钱,因此必须将空白保持在最低限度。

我很困惑,不知道该如何解决,抱歉,我的问题太广泛了。感谢您的建议。

这是否有意义/是否可以计算列中剩余的行并使用ifthen包自动插入\columnbreak

有没有比picins与包配合更好的解决方案multicol,当图像不适合时会自动中断列?

感谢您的帮助。

MWE如下:

\documentclass[english]{book}
\usepackage{multicol}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage[includeheadfoot,top=.25in,bottom=.25in,left=.5in,right=.5in]{geometry}
\usepackage{graphicx}
\usepackage{picins}
\usepackage{blindtext}

\setlength{\columnsep}{0.375in}

\begin{document}
\begin{multicols*}{2}
\noindent\blindtext[5]\\
\pichskip{.25in}\noindent\parpic[sr][r]{\includegraphics[width=2in]{dog.png}\picskip{15}}
\blindtext
\end{multicols*}
\end{document}

狗图像(用于测试目的):

狗

输出:

输出

答案1

这是一个适合您的自动化的解决方案。

needspace包裹提供一个命令\needspace{<length>},检查<length>列或页面上是否还有,否则会发出\break。这允许文本滚动到另一列/页面。从这个意义上讲,您可以将代码修改为以下内容:

<preamble>
...
\usepackage{needspace}% http://ctan.org/pkg/needspace
...
\begin{document}
...
\setbox0=\hbox{\includegraphics[width=2in]{dog.png}}% Store image in \box0
\needspace{\ht0}% Need at least the height of \box0
\pichskip{.25in}\noindent\parpic[sr][r]{\usebox0}% Insert image
Lorem ipsum...

这是使用此修复生成的输出:

正确对齐图片

相关内容