在最近的分页符处动态插入整页图像

在最近的分页符处动态插入整页图像

情况:我有一份文档,主要由多页纯文本组成。我想在最接近给定行的分页符处包含一张整页图像。重要的是,图像必须插入到预先存在的分页符处(即,插入图像之前的页面上没有多余的尾随空白)。

换句话说,我想要从如下文档开始:

然后,我希望能够在红色标记处的文本中插入某种命令,使图像插入到最近的分页符处,从而得到如下结果:

包含图像的页面不应包含其他内容(即没有页眉/页脚/等),并且应调整图像大小以使其填满整个页面(图像已经具有正确的纵横比)。


这是我到目前为止尝试过的方法。在所有这些情况下,my_image.*都是一张与我的文档具有相同纵横比的图像(在本例中,ebook是 2:3,所以我的图像大多是 800x1200 像素)。

第一的,简单的方法:

\documentclass[ebook]{memoir}
\usepackage{pdfpages} % to include the image-pdf
\usepackage{blindtext}

\begin{document}
    \blindtext[10] % some plain text
    \includepdf{my_image.pdf} % the image I want to be positioned somewhere around here
    \blindtext[10] % some more plain text
\end{document}

这显然会失败,因为它会将图像精确地插入到我要求的位置,而这个位置可能不是分页符。当然,我可以手动调整图像的位置,\includepdf使其紧接着分页符之前的最后一段末尾,但这很不愉快,而且也不是一个实用的解决方案,因为我需要处理相当多的此类图像(位于文档的各个位置)。

第二,尝试使用浮点数的方法:

\documentclass[ebook]{memoir}
\usepackage{pdfpages} % to include the image-pdf
\usepackage{blindtext}

\begin{document}
    \blindtext[10] % some plain text
    \begin{figure}
        \includepdf{my_image.pdf} % the image I want to be positioned somewhere around here
    \end{figure}
    \blindtext[10] % some more plain text
\end{document}

这样做的最终结果是使其成为my_image.pdf其中一个页面的“背景”,而不是放置my_image.pdf在单独的页面上。

然后我尝试添加\pagebreak之前\begin{figure}、之前\includepdf{my_image.pdf}、之前\end{figure}和之后\end{figure};这些都没有任何用处。

第三,我尝试使用一些代码这个 tex.SE 答案,并调整垂直边距(基于查看包的输出layout):

\documentclass[ebook,oneside]{memoir}
\usepackage{blindtext}
\usepackage{graphicx}
% \adjustimg and \centerimg from <https://tex.stackexchange.com/a/39148/31395>
\newcommand{\adjustimg}{% Horizontal adjustment of image
  \ifodd\value{page}\hspace*{\dimexpr\evensidemargin-\oddsidemargin}\else\hspace*{-\dimexpr\evensidemargin-\oddsidemargin}\fi%
}
\newcommand{\centerimg}[2][width=\textwidth]{% Center an image
  \makebox[\textwidth]{\adjustimg\includegraphics[#1]{#2}}%
}

\begin{document}
    \blindtext[10]
    \begin{figure}
      \vspace{-\voffset} \vspace{-1in} \vspace{-\headsep} \vspace{-\topmargin} \vspace{-\headheight}
      \centerimg[width=\paperwidth,height=\paperheight]{my_image.jpg}
    \end{figure}
    \blindtext[10]
\end{document}

这似乎完成了工作,但后来我将其放回到带有页眉和页脚的原始文档中。将以下页眉/页脚代码添加到序言中:

\makepagestyle{nstyle}
\makeevenhead {nstyle}{HEADER TEST LEFT}{MID}{RIGHT}
\makeoddhead  {nstyle}{HEADER TEST LEFT}{MID}{RIGHT}
\makeevenfoot {nstyle}{FOOTER TEST LEFT}{MID}{RIGHT}
\makeoddfoot  {nstyle}{FOOTER TEST LEFT}{MID}{RIGHT}
\pagestyle{nstyle}

这给了我一个奇怪的结果:页眉被隐藏了(大概是在图像后面?),但页脚显示在图像上方。我不明白为什么会发生这种情况,但无论如何,这对我来说都是一个大问题。整个设置(包括一系列的等等\vspace)都非常不雅观,所以我认为这肯定不是解决问题的好方法。


因此,在这一点上,我有点不知道该如何解决这个问题。 (不过,我对乳胶完全是个新手,所以如果有一个简单的解决方案,我只是不知道,我不会感到惊讶。)

注意:我不确定这是否重要,但我正在使用它xetex来编译(我需要外国脚本支持)。


编辑:在我看来,解决这个问题的最佳方法是在环境\includegraphics内部使用figure(即第三我尝试过上述方法)。 我面临的问题是:

  • 我不知道如何从最终所在的页面上删除页眉/页脚figure。或者,我不知道如何让图像显示在页脚“上方”(在 z 方向上)。

  • 我没有一个干净/优雅的方法让图形占据整个页面。如果没有一个干净/优雅的方法,那就这样吧,尽管我确实希望有比用一系列 5 来解决\vspace问题更好的方法。

(注意:我认为上面带有树的图片的示例可能会产生误导 - 我实际使用的图像没有透明或白色背景,因此周围没有空白非常重要。通常我会使用来处理这个问题pdfpages,但我还没有找到让 pdf 页面正确浮动的方法。)

答案1

我立即想到的是使用\afterpage。这将导致在提及它之后一页出现展示位置:

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx,lipsum,afterpage}% http://ctan.org/pkg/{graphicx,lipsum,afterpage}
\begin{document}
\lipsum[1-20]
\afterpage{
  \thispagestyle{empty}\addtocounter{page}{-1}%
  \noindent\includegraphics[width=\textwidth,height=\textheight]{example-image-a}%
}
\lipsum[21-40]
\end{document}

上图显示了第 3 页和第 4 页(顶部),图像插入在第 3 页顶部的三分之二处。\afterpage然后插入一个没有页眉/页脚的页面 ( \thispagestyle{empty}),图像被拉伸到width=\textwidth,height=\textheight后续页面上的文本块 ( )。添加\addtocounter{page}{-1}步骤使页面计数器后退,这样页面看起来就像是独立于文档流插入的(可能不是您完全想要的,但类似于\includepdf来自pdfpages)。

据我所知,这种用法(afterpage) 应该不会出现其他未处理浮点数的问题,因为它不与浮点数放置算法交互。

当然,图像也可以填满整个页面。答案只是为了展示这种可能性。

答案2

这是你的意思吗?我不确定(它只是使用浮点数)。图形将出现在标题后面,我用红色大写字母 R 表示。更新,当我按照注释所示操作时,我的浮点数正如我所料,出现在标题后面的页面上。

感谢 barbare beeton 提供的关于如何删除浮动页面上的页码的提示。我使用了(我认为)那里建议的变体。

\documentclass{article}
\usepackage{graphicx}
\usepackage{color}
\usepackage{lipsum}
\usepackage{mwe}
\usepackage{afterpage}
\let\svthepage\thepage
\newcommand\rubric[1]{%
  \textcolor{red}{R}%
  \def\thepage{\svthepage\thispagestyle{empty}}%
  \begin{figure}[p]%
  \includegraphics{#1}%
  \end{figure}%
  \afterpage{\global\def\thepage{\svthepage\let\thepage\svthepage}}%
}
\begin{document}
\lipsum[1-20]
\rubric{example-image-a}
\lipsum[21-40]
\end{document}

在此处输入图片描述

相关内容