¿Se pueden indexar los marcadores apuntando a páginas específicas insertadas usando `\includepdf`?

¿Se pueden indexar los marcadores apuntando a páginas específicas insertadas usando `\includepdf`?

Esta pregunta se hizo anteriormente (¿Es posible indexar PDF sin látex insertado usando \includepdf?). No obtuvo respuestas.

Se pueden crear marcadores \bookmarkque se dirijan a páginas particulares compiladas usando el \includepdfcomando del pdfpagespaquete (p. ej.\pdfbookmark al número de página y ubicación con \includepdf.

También sabemos que es posible insertar el número correcto de páginas usando \includepdf. Esto se demuestra usando la opción addtolistde \includepdf, que se puede usar para crear una lista de elementos en formato de lista de tablas o lista de figuras.

Por lo tanto, ¿es posible adjuntar entradas de índice a los mismos números de página utilizados por la addtolistfunción?

test.pdfMi MWE hace lo siguiente: se crea un archivo pdf simple de 2 páginas con el nombre \lipsumy una imagen.

La segunda parte del MWE utiliza \includepdfdos veces para unir dos copias de test.pdf. Esto da un archivo con 4 páginas. La producción del índice agrega una página al frente del documento. Usando la addtolistopción, se crea una lista de marcadores usando @starttoc{lot}. Estos marcadores apuntan a las páginas 1 y 2 del primer test.pdfarchivo y luego a las páginas 1 y 2 del segundo test.pdfarchivo. Los marcadores se crean usando una macro que usa \bookmarky que fue publicada en TeX.SE aquí (\pdfbookmark al número de página y ubicación con \includepdf). Modifiqué la macro agregando \index{#5}donde #5 es una etiqueta para la página marcada (realmente no esperaba que funcionara). Usando \makeidx, se crea un índice en la página 6 del documento.

Sin embargo, los números de página del índice no son correctos. Las entradas de índice adjuntas a los marcadores para la primera copia se test.pdfrefieren solo a la primera página del archivo (página 1), mientras que las entradas de índice asociadas con los marcadores en el segundo archivo se refieren a la página 3. Al menos la indexación reconoce el formato físico. números de página, pero los marcadores 2 y 4 están asociados con las páginas 2 y 4, mientras que el índice informa las páginas 1 y 3. Esto contrasta con la asociación con los números de página cuando se utiliza la addtolistfunción, que produce entradas de tabla con los números de página correctos.

Preferiría tener un índice de las páginas en lugar de utilizar la función de lista de tablas. Esto se debe a que en un índice podemos tener desgloses anidados y los elementos del índice pueden apuntar a varias páginas.

Esto se crea test.pdfcon el propósito de realizar pruebas.

\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 archivos test.pdf que producen una lista de páginas marcadas (con números de página correctos) y un índice con números de página incorrectos.

\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}

Este es el resultado (después de unir la página de contenido (página física 1) con la página de índice (página física 6).

ingrese la descripción de la imagen aquí

Respuesta1

Tienes razón, no hay ninguna addtoindexopción en pdfpages. Y en realidad estoy bastante sorprendido de que no lo haya. Probablemente porque nadie pidió nunca esta función.

De todos modos, es posible utilizar la pagecommandopción y una pequeña macro para obtener entradas de índice. He aquí un ejemplo:

\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}

información relacionada