为外部 pdf 文件创建索引

为外部 pdf 文件创建索引

以下是我想做的事情:

我有一个很大的扫描版 pdf 文件,我想制作一个索引页,这样我可以通过点击链接跳转到给定的页面。到目前为止,我设法做到了这一点,但我还想打印页码,以便有实体副本的人可以找到给定的页面。由于有很多条目,我在考虑这样的事情:

  1. 条目 1(第 xx 页)
  2. 条目 2(第 yy 页)
  3. 条目 3(第 zz 页)

等等。

我还想在条目周围添加一个红框,以便它们显示在 pdf 文件上,但不显示在打印的副本上。我不需要 pdf 文件的目录。可以这样做吗?

主要代码:

\documentclass[12pt,a4paper]{article}
\input{packs.tex}
\title{\Large Fancy title}
\author{\Large Me}
\date{\Large \today}
\begin{document}
\maketitle
Here are some entries...
\begin{multicols}{2}
\begin{foo}[nosep]
\hyperlink{page.2}{Entry 1}
\hyperlink{page.4}{Entry 2}
\hyperlink{page.6}{Entry 3}
\end{foo}
\end{multicols}
\includepdf[pages=-,pagecommand={\thispagestyle{plain}}]{dummy.pdf}
\end{document}

包.tex:

\usepackage[utf8]{inputenc}
\usepackage{enumitem}
\usepackage{multicol}
\usepackage{pdfpages}
\usepackage[left=2cm,right=2cm,top=2cm,bottom=2cm]{geometry}
\makeatletter
\newcommand{\checkForEnd}{\@ifnextchar\end{}{\item}}
\makeatother
\newenvironment{foo}[1][]
 {\par\obeylines
  \begingroup\lccode`~=`\^^M
  \lowercase{\endgroup\let~}\checkForEnd
  \begin{enumerate}[#1]}
 {\end{enumerate}}
\makeatletter
\let\orig@Hy@EveryPageAnchor\Hy@EveryPageAnchor
\def\Hy@EveryPageAnchor{%
    \begingroup
    \hypersetup{pdfview=Fit}%
    \orig@Hy@EveryPageAnchor
    \endgroup
}
\makeatother 
\usepackage{hyperref}

生成虚拟 pdf 文件的代码如下:

\documentclass{report}
\usepackage{blindtext}
\pagenumbering{gobble}
\begin{document}
\Blinddocument 
\end{document}

答案1

您可以定义一个新命令,以条目文本和页码作为参数,然后在命令中使用页码\hyperlink并再次在索引中打印页码本身。

对于未打印的红色框,您可以设置一些超链接选项:

  • colorlinks=falsetrue表示链接文本本身是彩色的,也会打印出来,false表示显示边框,但不打印)
  • linkbordercolor={1 0 0}(RGB 介于 0 和 1 之间,因此1 0 0为红色)
  • pdfborder={0 0 1}(链接边框的1pt宽度)

这些值是默认值(因此您不需要明确设置它们),但默认值可能会在未来版本中发生变化hyperref,请参阅超链接的默认颜色更好

梅威瑟:

\documentclass[12pt,a4paper]{article}
\input{packs.tex}

% explicitly set red link boxes
\hypersetup{colorlinks=false, linkbordercolor={1 0 0}, pdfborder={0 0 1}}

\newcommand{\myindex}[2]{%
\hyperlink{page.#2}{#1} (p. #2)%
}

\title{\Large Fancy title}
\author{\Large Me}
\date{\Large \today}
\begin{document}
\maketitle
Here are some entries...
\begin{multicols}{2}
\begin{foo}[nosep]
\myindex{Entry 1}{2}
\myindex{Entry 2}{4}
\myindex{Entry 3}{6}
\end{foo}
\end{multicols}
\includepdf[pages=-,pagecommand={\thispagestyle{plain}}]{dummy.pdf}
\end{document}

结果:

在此处输入图片描述

如果您要引用的页码与链接页面不同,则可以使用额外的可选参数。由于该参数的默认值本身就是一个参数(如果#3没有指定,则您想使用#2),因此您需要xparse(请参阅\newcommand:使用一个参数作为另一个参数的默认值)。当然,当第三个参数是总是不同,那么您只需使用\newcommand具有三个强制参数的常规参数即可,即删除该\NewDocumentCommand部分并直接使用\printmyindex

\documentclass[12pt,a4paper]{article}
\input{extindexpre.tex}
\usepackage{xparse}

% explicitly set red link boxes
\hypersetup{colorlinks=false, linkbordercolor={1 0 0}, pdfborder={0 0 1}}

\NewDocumentCommand{\myindex}{m m o}{%
  \IfValueTF{#3}
    {\printmyindex{#2}{#1}{#3}}%
    {\printmyindex{#2}{#1}{#2}}%
}

\newcommand{\printmyindex}[3]{%
\hyperlink{page.#1}{#2} (p. #3)%
}

\title{\Large Fancy title}
\author{\Large Me}
\date{\Large \today}
\begin{document}
\maketitle
Here are some entries...
\begin{multicols}{2}
\begin{foo}[nosep]
\myindex{Entry 1}{2}
\myindex{Entry 2}{4}[5]
\myindex{Entry 3}{6}
\end{foo}
\end{multicols}
\includepdf[pages=-,pagecommand={\thispagestyle{plain}}]{dummy.pdf}
\end{document}

在此处输入图片描述

相关内容