以下是我想做的事情:
我有一个很大的扫描版 pdf 文件,我想制作一个索引页,这样我可以通过点击链接跳转到给定的页面。到目前为止,我设法做到了这一点,但我还想打印页码,以便有实体副本的人可以找到给定的页面。由于有很多条目,我在考虑这样的事情:
- 条目 1(第 xx 页)
- 条目 2(第 yy 页)
- 条目 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=false
(true
表示链接文本本身是彩色的,也会打印出来,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}