我想将 PDF 文档中的多页包含到我的文档的单页中。
\includepdf
可以使用“nup”选项来实现。
\documentclass{book}
\usepackage{fancyhdr}
\usepackage{pdfpages}
\begin{document}
\chapter{includepdf}
\includepdf[pages={1-4},nup=2x2,pagecommand={\thispagestyle{fancy}}]{numbered_pages.pdf}
\includepdf[pages={1-4},nup=1x2,pagecommand={\thispagestyle{fancy}},angle=90]{numbered_pages.pdf}
\end{document}
然而,
- 2x2 页面未显示在
\chapter
-page上 - 在常规页面上,我的页眉和页脚不受尊重,并且
- 在两个连续的 1x2 页面上,顺序应该是 2-1-4-3,这样我就可以装订后将打印的文档顺时针旋转 90 度。
为了响应@Werner 的请求,我添加了以下代码,使用 大致实现了我所想的效果
\includegraphics
。
\documentclass{book}
\usepackage{fancyhdr}
\usepackage{graphicx}
\begin{document}
\pagestyle{fancy}
\chapter{Desired Output}
\centering\null\hfill
\includegraphics[page=1,width=.35\linewidth,height=.4\textheight,keepaspectratio]{numbered_pages}
\hfill
\includegraphics[page=2,width=.35\linewidth,height=.4\textheight,keepaspectratio]{numbered_pages}
\hfill\null\vfill\null\hfill
\includegraphics[page=3,width=.35\linewidth,height=.4\textheight,keepaspectratio]{numbered_pages}
\hfill
\includegraphics[page=4,width=.35\linewidth,height=.4\textheight,keepaspectratio]{numbered_pages}
\hfill\null\clearpage
\null\vfill\noindent
\includegraphics[page=5,width=.48\linewidth,height=.45\textheight,keepaspectratio]{numbered_pages}
\hfill
\includegraphics[page=6,width=.48\linewidth,height=.45\textheight,keepaspectratio]{numbered_pages}
\vfill
\includegraphics[page=7,width=.48\linewidth,height=.45\textheight,keepaspectratio]{numbered_pages}
\hfill
\includegraphics[page=8,width=.48\linewidth,height=.45\textheight,keepaspectratio]{numbered_pages}
\vfill\null
\noindent
\includegraphics[page=2,width=.45\textheight,angle=90]{numbered_pages}
\vfill
\includegraphics[page=1,width=.45\textheight,angle=90]{numbered_pages}
\includegraphics[page=4,width=.45\textheight,angle=90]{numbered_pages}
\vfill
\includegraphics[page=3,width=.45\textheight,angle=90]{numbered_pages}
\end{document}
这可以作为一个例证,但存在以下缺陷
- 如果
\chapter
页面被修改titlesec
,代码不会自动适应它 - 如果总页数不是 4 的倍数,则最后几页将不会按原样排版
- 在 1x2 页面上,如果要包含大量页面,则需要按 2、1、4、3、6、5、8...(即 4n-2、4n-3、4n、4n-1)单独包含页面,循环不能为我做到这一点吗?
\includepdf
我对或均无偏好\includegraphics
。我只想在这些页面上显示页眉、页脚和包含的页面。
我需要如何定义\mycommand
才能解决列出的缺点,并且
\begin{document}
\chapter{Desired Output}
\mycommand[pages={1-8},nup=2x2]{numbered_pages.pdf}
\mycommand[pages={1-4},nup=1x2,]{numbered_pages.pdf}
\end{document}
是否能得到如上所示的期望输出?
答案1
对于以前的读者
如果是第一次阅读这个答案,那么阅读下一段将不会对您有任何帮助,可以安全地跳到下面的简介。
这个解决方案比以前的解决方案简单得多。它非常明显,但我没有注意到。 、\chappdf
和\chappdf*
的语法\headerspdf
保持不变。 命令也保持不变。但和\headerspdf
的代码要简单得多。(实际上,执行工作的代码可能基本相同。但是,您不再需要将其包含在文档中。)这也避免了不必要地重复标准类中的代码。此外,它与\chappdf
\chappdf*
一些章节标题的定制。
介绍
正如我在原始问题的评论中所解释的那样,提供完全符合标准的解决方案实际上是不可能的,因为通过使用来适应页面布局的任意重新定义要求titlesec
使得无法知道章节首页上有多少空间可用于图像。即使知道titlesec
使用了多少,该软件包也允许完全自由形式的布局,这又使得无法计算页面上剩余多少空间。
此外,如果命令是与调用分开发出的(不以会破坏命令其他用途的方式重新定义),则无法以pdfpages
允许您将章节标题放在与 PDF 中包含的页面相同的页面上的方式使用。\chapter
\includepdf
\chapter
此外,缩放比例等方面的差异使得使用单个命令同时包含章节首页和后续页面变得更加复杂。因此,章节开头需要单独的解决方案。
概述
此解决方案使用pdfpages
。它提供了两个自定义命令:(\chappdf
加上带星号的变体)和\headerspdf
。
如果满足以下任何条件,则需要调整此解决方案:
对于您想要在章节首页包含 PDF 页面的章节,章节标题长达数行。[肯定需要调整,但我认为您应该能够调整代码。另外,如果章节标题太长,您可能应该重新考虑!]
您的文档或所包含的 PDF 页面不是 A4。[可能需要稍微调整,但我不确定。只要所包含页面的大小与文档大小匹配,可能就没问题。如果两者不一致,则更有可能需要调整。]
我已将包含的 PDF 的选项添加frame
到其中,以显示页面上的内容布局。当然,如果您愿意,可以删除此选项。我还使用delta
(用于页面之间的间距)和offset
(用于页面块周围的间距)调整了包含页面的位置。后者是使用默认twoside
选项正确居中图像所必需的book.cls
。我使用geometry
该verbose
选项来找出正确的水平偏移。
我使用过,因为它可以轻松处理带星号的和可选的参数。和xparse
的定义仅取决于被认为稳定的特征。\chappdf
\chappdf*
xparse
的定义\headerspdf
取决于xparse
标记为实验性的代码。因此,如果在更新后出现意外故障,\ProcessList
则应被视为主要嫌疑人。我不太清楚和的状态\SplitArgument
。\SplitList
一方面,它们不包含在被视为稳定的命令列表中。另一方面,它们也没有被标记为实验性的。
新命令
提供了两个基本命令用于包含 PDF 中的页面。(显然,提供的常用命令pdfpages
也仍然可用。)
\chappdf
该解决方案使用自定义命令,\chappdf
将 PDF 中的页面包含在章节第一页中。此命令指定的页面不得超过 4 页。如果您希望包含更多 PDF 页面,请使用\headerspdf
来包含它们。
\chappdf
基于 的定义\chapter
。与该命令一样,它接受可选的短标题,用于页眉和目录。*
如果您不想在目录中添加条目,它还会接受 。就像\chapter*
在这种情况下由您根据需要调整页眉一样。使用常规命令,与 一样\chapter
,这是自动的。
语法如下
\chappdf[short title]{chapter title}[page specification]{filename.pdf}
或者
\chappdf*{chapter title}[page specification]{filename.pdf}
这两个命令都像新章节一样开始新的一页并进行chapter title
相应设置。如果未指定第二个可选参数,-
则将假定为,并将filename.pdf
包含来自的所有页面。重要的是,文件不要包含超过 4 页,否则章节将在每个新页面上重新开始。指定页面的语法与您pages
使用传递给键的值相同pdfpages
。例如1-2,4,89
或2-5
。
\headerspdf
\headerspdf
旨在包含 2x2 或 1x2 布局的 PDF 页面,并fancy
带有 支持的页面样式的标准fancyhdr
页眉和页脚。这意味着您可以轻松根据自己的喜好重新定义整个文档的页眉和页脚,并且 包含的页面\headerspdf
将遵循您的配置。
\headerspdf
nup=2x2
可以自动调整和的布局nup=1x2
。在后一种情况下,代码将自动正确排列包含的页面,例如将第一页放在底部,第二页放在上面,这样当它们垂直放置时,就可以从左到右阅读。如果您还希望 PDF 查看器为读者自动旋转这些页面,请删除禁止此行为的turn=false
选项\includepdf
。(无论如何,旋转都不会影响打印。)
\headerspdf[pdf inclusion options]{filename.pdf}
如果未提供可选参数,则默认指定包含所有 2x2 格式的页面,以及其他标准选项。在nup=1x2
指定的情况下,还将通过请求使用来\headerspdf
调整布局。如上所述,这避免了手动指定正确页面顺序的需要。您可以这样说:\includepdf
landscape=true
\headerspdf[pages=56-67,nup=1x2]{greatdoc.pdf}
或者:
\headerspdf[nup=1x2]{fantasypdfs.pdf}
该命令应该能正确执行。后者将包含 1x2 格式的 PDF 的所有页面。
代码
要使用此解决方案,请按如下方式设置您的文档:
\documentclass[a4paper]{book}
\usepackage{geometry}% optional
\usepackage{fancyhdr}% required (or change fancy to another pagestyle)
\usepackage{pdfpages}% required
\usepackage{xparse}% required
\makeatletter
\NewDocumentCommand\headerspdf{ O {pages=-,nup=2x2} m }{%
\gdef\@myland{false}%
\@splitpdfopts{#1}%
\includepdf[%
pages=-,
nup=2x2,
#1,
delta=5pt 5pt,
landscape=\@myland,
turn=false,
pagecommand={\thispagestyle{fancy}},
scale=.65,
frame,
offset=-15pt 15pt]{#2}}
\NewDocumentCommand\@splitpdfopts{ >{\SplitList{,}}m }{%
\ProcessList{#1}{\@splitpdfarg}}
\NewDocumentCommand\@splitpdfarg{ >{\SplitArgument{1}{=}}m }{%
\@tweakpdfopts #1}
\newcommand\@tweakpdfopts[2]{%
\def\tempa{nup}%
\def\tempb{#1}%
\def\tempc{1x2}%
\def\tempd{#2}%
\ifx\tempa\tempb
\ifx\tempd\tempc
\gdef\@myland{true}%
\fi
\fi}
\NewDocumentCommand\chappdf{somO{-}m}{% include all pages of PDF by default
\cleardoublepage
\includepdf[%
pages={#4},
pagecommand={%
\IfBooleanTF{#1}{%
\chapter*{#3}}{%
\IfNoValueTF{#2}{%
\chapter{#3}}{%
\chapter[#2]{#3}}}},
nup=2x2,
scale=.5,
frame,
delta=5pt 5pt,
offset=-15pt -45pt]%
{#5}}
\makeatother
\pagestyle{fancy}% optional but probably what you want unless you change fancy in the definition of \headerspdf above
\begin{document}
% Document here as usual
\end{document}
例子
kantlipsum
包含在示例中以提供一些填充文本,该示例还使用mwe
的文档作为所包含页面的源 PDF。
代码
\documentclass[a4paper]{book}
\usepackage{geometry}
\usepackage{fancyhdr}
\usepackage{pdfpages}
\usepackage{xparse}
\usepackage{kantlipsum}
\makeatletter
\NewDocumentCommand\headerspdf{ O {pages=-,nup=2x2} m }{%
\gdef\@myland{false}%
\@splitpdfopts{#1}%
\includepdf[%
pages=-,
nup=2x2,
#1,
delta=5pt 5pt,
landscape=\@myland,
turn=false,
pagecommand={\thispagestyle{fancy}},
scale=.65,
frame,
offset=-15pt 15pt]{#2}}
\NewDocumentCommand\@splitpdfopts{ >{\SplitList{,}}m }{%
\ProcessList{#1}{\@splitpdfarg}}
\NewDocumentCommand\@splitpdfarg{ >{\SplitArgument{1}{=}}m }{%
\@tweakpdfopts #1}
\newcommand\@tweakpdfopts[2]{%
\def\tempa{nup}%
\def\tempb{#1}%
\def\tempc{1x2}%
\def\tempd{#2}%
\ifx\tempa\tempb
\ifx\tempd\tempc
\gdef\@myland{true}%
\fi
\fi}
\NewDocumentCommand\chappdf{somO{-}m}{% include all pages of PDF by default
\cleardoublepage
\includepdf[%
pages={#4},
pagecommand={%
\IfBooleanTF{#1}{%
\chapter*{#3}}{%
\IfNoValueTF{#2}{%
\chapter{#3}}{%
\chapter[#2]{#3}}}},
nup=2x2,
scale=.5,
frame,
delta=5pt 5pt,
offset=-15pt -45pt]%
{#5}}
\makeatother
\pagestyle{fancy}
\begin{document}
\frontmatter
\tableofcontents
\chappdf*{2x2 PDF on Starred Chapter Page}[1-4]{/usr/local/texlive/2013/texmf-dist/doc/latex/mwe/mwe.pdf}
\kant[2]
\mainmatter
\chapter{Include 2x2 PDF after Chapter Page}
\kant[1]
\headerspdf[pages=1-8,nup=2x2]{/usr/local/texlive/2013/texmf-dist/doc/latex/mwe/mwe.pdf}
\chappdf{2x2 PDF on Chapter Page}[1-4]{/usr/local/texlive/2013/texmf-dist/doc/latex/mwe/mwe.pdf}
\kant[2]
\chappdf[Short Title]{2x2 PDF before 1x2 PDF}[1-4]{/usr/local/texlive/2013/texmf-dist/doc/latex/mwe/mwe.pdf}
\kant[3]
\headerspdf[pages=1-4,nup=1x2]{/usr/local/texlive/2013/texmf-dist/doc/latex/mwe/mwe.pdf}
\end{document}
输出
章节样式
可以重新定义标准\chapter
和\chapter*
命令来改变章节标题的布局。如果这样做,请注意这将对\chappdf
\chappdf*` 产生的影响。有两件事至关重要:
- 标题所占空间不得超过所含 PDF 页面所允许的空间。如有必要,您可以通过编辑
\includepdf
这些命令传递的选项来更改此设置。 - 重新定义的命令不应该做任何太奇怪的事情,否则当它传递给 选项时会破坏一些东西
pagecommand
。\includepdf
代码还必须与 的使用兼容xparse
,包括此代码调用的实验性功能。
不合理使用
titlesec
或类似将要破坏东西。这是预料之中的。
titlesec
我运行了文档中的几个示例,但它们都破坏了事情。
话虽如此,如果你坚持的话,还是有可能的明智的使用titlesec
。如果你尝试这样做,它坏了,你可以保留两部分。我个人从来没有发现过我可以做的事情,如果没有或干脆没有,titlesec
我会做得更容易。因此我titlesec
不是建议将它与我的代码一起使用。我知道我的代码对 过敏titlesec
。买者自负。
不推荐的示例
下面是一个使用的titlesec
示例做工作。
重要警告
titlesec
不用于任何特别奇特的用途。它不会尝试添加图片、播放动画或以华丽的音乐退出。它不会尝试开始新的段落、页面或热潮。- 除了引入我认为未知的波动性之外,这看起来也很可怕。(我不愿意鼓励使用我显然不喜欢的软件包。)
- 买者自负。
关于这个例子,我所能说的实际上就是,它编译时没有错误,这比我尝试过的任何其他例子(我赶紧补充一点,这些例子显然不是像我尝试的那样被误用和滥用)都要好。买者自负。
代码(我不推荐)
\documentclass[a4paper]{book}
\usepackage{geometry}
\usepackage{fancyhdr}
\usepackage{pdfpages}
\usepackage{xparse}
\usepackage{titlesec}
\renewcommand{\thechapter}{\Roman{chapter}}
\titleformat{\chapter}[display]{\bfseries\large}{\MakeUppercase{\chaptertitlename} \thechapter}{2ex}{\Huge}[\vspace{2ex}]
\usepackage{kantlipsum}
\makeatletter
\NewDocumentCommand\headerspdf{ O {pages=-,nup=2x2} m }{%
\gdef\@myland{false}%
\@splitpdfopts{#1}%
\includepdf[%
pages=-,
nup=2x2,
#1,
delta=5pt 5pt,
landscape=\@myland,
turn=false,
pagecommand={\thispagestyle{fancy}},
scale=.65,
frame,
offset=-15pt 15pt]{#2}}
\NewDocumentCommand\@splitpdfopts{ >{\SplitList{,}}m }{%
\ProcessList{#1}{\@splitpdfarg}}
\NewDocumentCommand\@splitpdfarg{ >{\SplitArgument{1}{=}}m }{%
\@tweakpdfopts #1}
\newcommand\@tweakpdfopts[2]{%
\def\tempa{nup}%
\def\tempb{#1}%
\def\tempc{1x2}%
\def\tempd{#2}%
\ifx\tempa\tempb
\ifx\tempd\tempc
\gdef\@myland{true}%
\fi
\fi}
\NewDocumentCommand\chappdf{somO{-}m}{% include all pages of PDF by default
\cleardoublepage
\includepdf[%
pages={#4},
pagecommand={%
\IfBooleanTF{#1}{%
\chapter*{#3}}{%
\IfNoValueTF{#2}{%
\chapter{#3}}{%
\chapter[#2]{#3}}}},
nup=2x2,
scale=.5,
frame,
delta=5pt 5pt,
offset=-15pt -45pt]%
{#5}}
\makeatother
\pagestyle{fancy}
\begin{document}
\frontmatter
\tableofcontents
\chappdf*{2x2 PDF on Starred Chapter Page}[1-4]{/usr/local/texlive/2013/texmf-dist/doc/latex/mwe/mwe.pdf}
\kant[2]
\mainmatter
\chapter{Include 2x2 PDF after Chapter Page}
\kant[1]
\headerspdf[pages=1-8,nup=2x2]{/usr/local/texlive/2013/texmf-dist/doc/latex/mwe/mwe.pdf}
\chappdf{2x2 PDF on Chapter Page}[1-4]{/usr/local/texlive/2013/texmf-dist/doc/latex/mwe/mwe.pdf}
\kant[2]
\chappdf[Short Title]{2x2 PDF before 1x2 PDF}[1-4]{/usr/local/texlive/2013/texmf-dist/doc/latex/mwe/mwe.pdf}
\kant[3]
\headerspdf[pages=1-4,nup=1x2]{/usr/local/texlive/2013/texmf-dist/doc/latex/mwe/mwe.pdf}
\end{document}
输出
答案2
命令出了什么问题\includegraphics
?
\documentclass{book}
\usepackage{fancyhdr}
\usepackage{pdfpages}
\begin{document}
\chapter{includepdf}
\centering
\fboxsep=0pt
\fbox{\includegraphics[page=1,width=.37\linewidth,height=.4\textheight,keepaspectratio]{pgfmanual}} \hfill
\fbox{\includegraphics[page=2,width=.37\linewidth,height=.4\textheight,keepaspectratio]{pgfmanual}}
\vfill
\fbox{\includegraphics[page=3,width=.37\linewidth,height=.4\textheight,keepaspectratio]{pgfmanual}}
\hfill
\fbox{\includegraphics[page=4,width=.37\linewidth,height=.4\textheight,keepaspectratio]{pgfmanual}}
\clearpage
\noindent
\fbox{\includegraphics[page=5,width=.48\linewidth,height=.45\textheight,keepaspectratio]{pgfmanual}}
\hfill
\fbox{\includegraphics[page=6,width=.48\linewidth,height=.45\textheight,keepaspectratio]{pgfmanual}}
\vfill
\fbox{\includegraphics[page=7,width=.48\linewidth,height=.45\textheight,keepaspectratio]{pgfmanual}}
\hfill
\fbox{\includegraphics[page=8,width=.48\linewidth,height=.45\textheight,keepaspectratio]{pgfmanual}}
\end{document}
答案3
以下命令将你的 pdf 的前四页提取到 pg_0001.pdf 到 pg_0004.pdf 中:
pdftk A=numbered_pages.pdf cat A1-4 输出 new.pdf pdftk new.pdf 爆裂
现在您可以使用
\includegraphics{...}以便将这些 pdf 文件单独包含到您的文档中。您还可以在这些图形上使用 TikZ 等软件包。
答案4
只是为了好玩,没有 PSTricks。
\documentclass{article}
\usepackage[a4paper,margin=2cm]{geometry}
\usepackage{graphicx}
\usepackage{multido}
\def\filename{status-lua.pdf}
\def\scale{.1}
\pdfximage{\filename}
\begin{document}
\noindent\multido{\i=1+1}{\the\pdflastximagepages}{\fbox{\includegraphics[scale=\scale,page=\i,angle=90]{\filename}} }
\end{document}