Esta pergunta foi feita anteriormente (É possível indexar PDF sem látex inserido usando \includepdf). Não atraiu respostas.
Os marcadores podem ser feitos usando \bookmark
os que são direcionados para páginas específicas compiladas usando o \includepdf
comando do pdfpages
pacote (por exemplo\pdfbookmark para o número da página e localização com \includepdf.
Também sabemos que é possível obter o número correto de páginas inseridas usando \includepdf
. Isso é demonstrado usando a opção addtolist
, \includepdf
que pode ser usada para construir uma lista de itens em formato de lista de tabelas ou lista de figuras.
Portanto, é possível anexar entradas de índice aos mesmos números de página usados pelo addtolist
recurso?
Meu MWE faz o seguinte: Um arquivo PDF simples de 2 páginas nomeado test.pdf
é feito usando \lipsum
uma imagem.
A segunda parte do MWE usa \includepdf
duas vezes para unir duas cópias do arquivo test.pdf
. Isso dá um arquivo com 4 páginas. A produção do índice adiciona uma página na frente do documento. Usando a addtolist
opção, uma lista de marcadores é criada usando @starttoc{lot}
. Esses marcadores apontam para as páginas 1 e 2 do primeiro test.pdf
arquivo e depois para as páginas 1 e 2 do segundo test.pdf
arquivo. Os marcadores são criados usando uma macro que usa \bookmark
e que foi postada no TeX.SE aqui (\pdfbookmark para o número da página e localização com \includepdf). Modifiquei a macro adicionando \index{#5}
onde #5 é um rótulo para a página marcada (eu realmente não esperava que funcionasse). Usando \makeidx
, um índice é criado na página 6 do documento.
No entanto, os números das páginas no índice não estão corretos. As entradas de índice anexadas aos marcadores da primeira cópia referem test.pdf
-se apenas à primeira página do arquivo (página 1), enquanto as entradas de índice associadas aos marcadores no segundo arquivo referem-se à página 3. Pelo menos a indexação reconhece o físico números de página, mas os marcadores 2 e 4 estão associados às páginas 2 e 4, enquanto o índice relata as páginas 1 e 3. Isso contrasta com a associação com números de página ao usar o addtolist
recurso, que produz entradas de tabela com os números de página corretos.
Eu preferiria ter um índice para as páginas em vez de usar o recurso de lista de tabelas. Isso ocorre porque em um índice podemos ter itens aninhados e os itens do índice podem apontar para várias páginas.
Isso cria test.pdf
para fins de teste.
\documentclass[10pt,a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{lipsum}
\usepackage{graphicx}
\usepackage[left=3.00cm, right=3.00cm, top=3.00cm, bottom=3.00cm]{geometry}
\begin{document}
\pagestyle{empty}
\lipsum[1-10]
\includegraphics{example-image-a}
\lipsum[2]
\end{document}
Este MWE une 2 arquivos test.pdf produzindo uma lista de páginas marcadas (com números de página corretos) e um índice com números de páginas incorretos.
\documentclass[a4paper]{article}
\usepackage{fancyhdr}
\usepackage{pdfpages}
\usepackage{multicol}
\usepackage{refcount}
\usepackage{imakeidx}
\usepackage{hyperref}
\usepackage{bookmark}
\makeindex[program=makeindex,columns=2,intoc=true]
%https://tex.stackexchange.com/a/55654
\makeatletter
\define@key{pdfpages}{linkname}{\def\AM@linkname@option{#1}\label{pdfpages@#1@begin}}
\newcommand*{\mypdfbookmark}[5]{\bookmark[page=\numexpr\getpagerefnumber{pdfpages@#1@begin}+#2\relax,view={#3}]{#4}\index{#5}}
\makeatother
\hypersetup{
backref=true,
pagebackref=true,
hyperindex=true,
colorlinks=true,
linkcolor= purple,
bookmarks=true,
}
\renewcommand{\headrulewidth}{0pt}% % No header rule
\renewcommand{\footrulewidth}{0pt}% % No footer rule
\begin{document}
\thispagestyle{empty}
\tableofcontents
\section*{List of bookmarked items}
\begin{multicols}{2}
\makeatletter
\@starttoc{lot}
\makeatother
\end{multicols}
\clearpage
\setcounter{page}{1}
\pagestyle{plain}
\mypdfbookmark{Test1}{1}{FitH \calc{\paperheight-2cm}}{Mark1}{Cat!a}
\mypdfbookmark{Test1}{2}{FitH \calc{\paperheight-4cm}}{Mark2}{Cat!b}
\includepdf[
pages=-,
link,
scale=0.95,
linkname=Test1,
addtotoc={1,section,1,file 1,aa},
addtolist=
{
1,table,{Cat a},lab:CatA,
2,table,{Cat b},lab:CatB
},
pagecommand={\pagestyle{plain}},
]{test.pdf}
\mypdfbookmark{Test2}{1}{FitH \calc{\paperheight-2cm}}{Mark3}{Dog!a}
\mypdfbookmark{Test2}{2}{FitH \calc{\paperheight-4cm}}{Mark4}{Dog!b}
\includepdf[
pages=-,
link,
scale=0.95,
linkname=Test2,
addtotoc={1,section,1,file 2,aa},
addtolist=
{
1,table,{Dog a},lab:DogA,
2,table,{Dog b},lab:DogB
},
pagecommand={\pagestyle{plain}},
]{test.pdf}
\printindex
\end{document}
Esta é a saída (após juntar a página de conteúdo (página física 1) com a página de índice (página física 6).
Responder1
Você está certo, não há addtoindex
opção em pdfpages. E na verdade estou bastante surpreso que não exista. Provavelmente porque ninguém nunca pediu esse recurso.
De qualquer forma, é possível usar a pagecommand
opção e uma pequena macro para obter entradas de índice. Aqui está um exemplo:
\documentclass[a4paper]{article}
\usepackage{pdfpages}
\usepackage{makeidx}\makeindex
\usepackage{hyperref}
\makeatletter
\newcommand\addtoindex[2]{%
\ifnum\AM@page=#2\relax\index{#1}\fi
}
\makeatother %
\begin{document}
\includepdf[
pages=1-3,
pagecommand={\thispagestyle{empty}\addtoindex{foo}{1}\addtoindex{bar}{2}}
]{dummy.pdf}
\includepdf[
pages=1-3,
pagecommand={\thispagestyle{empty}\addtoindex{foo}{2}}
]{dummy.pdf}
\printindex
\end{document}