在我提问之前,我想先介绍一些背景信息。
我创建了一个算法(不是 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...
这是使用此修复生成的输出: