自动缩放以适合段落之间的图像

自动缩放以适合段落之间的图像

有人知道如何放置图像来填充段落之间的空白吗?

我的情况是,我有两个minipages必须放在同一页上,但它们不会占用所有空间。现在我使用vfill如下方法将它们分开。

\clearpage

\begin{minipage}{\linewidth}
    about 3 inches worth of text
\end{minipage}

\vfill

\begin{minipage}{\linewidth}
    about 3 inches worth of text
\end{minipage}

\clearpage

我有以下代码片段,用于用点填充水平线,我尝试修改它以垂直工作但无济于事。

\def\mydots{\leavevmode\xleaders\hbox to 0.25em{\hfil.\hfil}\hfill\kern0pt}

任何帮助都将非常有帮助。

答案1

\vfill您可以使用保存顶部/底部的位置zrefsavepos模块,然后拉伸图像以填充该空间:

在此处输入图片描述

\documentclass{article}
\usepackage{zref-savepos,graphicx}
\usepackage[nopar]{lipsum}% Just for this example
\usepackage[margin=1in]{geometry}% Just for this example

\begin{document}

\noindent
\begin{minipage}{\linewidth}
  \strut\lipsum[1]\strut
\end{minipage}

\zsavepos{top}% Save top of \vfill

\vfill

\noindent\zsavepos{bottom}%
\raisebox{.5\baselineskip}[0pt][0pt]
  {\includegraphics[width=\linewidth,height=\dimexpr\zposy{top}sp-\zposy{bottom}sp+.5\baselineskip]{example-image}}

\noindent
\begin{minipage}{\linewidth}
  \strut\lipsum[2]\strut
\end{minipage}

\clearpage

\lipsum

\end{document}

由于这看起来像是一次性使用事件,因此代码按原样包含在文档中。但是,如果您希望更频繁地执行此操作,可以将内容包装在(例如)\vfillimage[..]{...}宏中。

上述技术使用 LaTeX 的\label-\ref系统来跟踪页面上的位置。因此,任何布局更改都需要额外的编译来解决任何引用。第一次处理也是如此(至少需要两次编译)。


这是将上述技术封装成宏的方法。在放置图形之前,可以使用\vfillgraphic*[<opts>]{<image>}选项*插入一个可选的。\noindent<image><opts>

\documentclass{article}
\usepackage{zref-savepos,graphicx}
\usepackage[nopar]{lipsum}% Just for this example
\usepackage[margin=1in]{geometry}% Just for this example

\usepackage{xparse}
\newcounter{vfgcntr}
\NewDocumentCommand{\vfillgraphic}{s O{} m}{%
  \stepcounter{vfgcntr}% Make unique labels
  \zsavepos{vfg-top-\thevfgcntr}% Save top of \vfill

  \vfill

  \IfBooleanT{#1}{\noindent}% \vfillgraphic*
  \zsavepos{vfg-bottom-\thevfgcntr}% Save bottom of \vfill
  \raisebox{-.5\baselineskip}[0pt][0pt]
    {\includegraphics[height=\dimexpr\zposy{vfg-top-\thevfgcntr}sp-\zposy{vfg-bottom-\thevfgcntr}sp+.5\baselineskip,#2]{#3}}
}

\begin{document}

\noindent
\begin{minipage}{\linewidth}
  \strut\lipsum[1]\strut
\end{minipage}

\vfillgraphic*[width=\linewidth]{example-image}

\noindent
\begin{minipage}{\linewidth}
  \strut\lipsum[2]\strut
\end{minipage}

\clearpage

\lipsum

\end{document}

对于 的多次使用\vfillgraphic,您需要避免多次定义\label。因此,vfgcntr每个标签都会添加一个唯一的计数器。

相关内容