Können Lesezeichen indiziert werden, die auf bestimmte Seiten verweisen, die mit `\includepdf` eingefügt wurden?

Können Lesezeichen indiziert werden, die auf bestimmte Seiten verweisen, die mit `\includepdf` eingefügt wurden?

Diese Frage wurde bereits früher gestellt (Ist es möglich, nicht-Latex-PDFs zu indizieren, die mit \includepdf eingefügt wurden?). Es gab keine Antworten.

Mit können Lesezeichen erstellt werden \bookmark, die auf bestimmte Seiten verweisen, die mit dem \includepdfBefehl aus dem pdfpagesPaket zusammengestellt wurden (z. B.\pdfbookmark zur Seitenzahl und Position mit \includepdf.

Wir wissen auch, dass es möglich ist, die korrekte Seitenzahl der eingefügten Seiten mithilfe von zu erhalten \includepdf. Dies wird anhand der Option addtolistvon demonstriert \includepdf, mit der eine Liste von Elementen im Format einer Tabellenliste oder einer Abbildungsliste erstellt werden kann.

Ist es daher möglich, Indexeinträge denselben Seitenzahlen zuzuordnen, die von der addtolistFunktion verwendet werden?

Mein MWE macht Folgendes: Es wird eine einfache 2-seitige PDF-Datei mit dem Namen und einem Bild test.pdferstellt .\lipsum

Der zweite Teil des MWE verwendet \includepdfzweimal , um zwei Kopien von zu verbinden test.pdf. Dies ergibt eine Datei mit 4 Seiten. Die Erstellung des Inhaltsverzeichnisses fügt eine Seite am Anfang des Dokuments hinzu. Mit der addtolistOption wird eine Liste von Lesezeichen erstellt, die verwendet wird @starttoc{lot}. Diese Lesezeichen verweisen auf Seite 1 und 2 der ersten test.pdfDatei und dann auf Seite 1 und 2 der zweiten test.pdfDatei. Die Lesezeichen werden mit einem Makro erstellt, das verwendet \bookmarkund das hier auf TeX.SE veröffentlicht wurde (\pdfbookmark zur Seitenzahl und Position mit \includepdf). Ich habe das Makro geändert, indem ich hinzugefügt habe, \index{#5}wobei #5 eine Bezeichnung für die mit einem Lesezeichen versehene Seite ist (ich habe nicht wirklich damit gerechnet, dass das funktioniert). Mit \makeidxwird auf Seite 6 des Dokuments ein Index erstellt.

Allerdings sind die Seitenzahlen im Index nicht korrekt. Die Indexeinträge zu den Lesezeichen der ersten Kopie beziehen sich test.pdfnur auf die erste Seite der Datei (Seite 1), während die Indexeinträge zu den Lesezeichen der zweiten Datei auf Seite 3 verweisen. Die Indizierung erkennt zwar immerhin die physischen Seitenzahlen, aber die Lesezeichen 2 und 4 sind den Seiten 2 und 4 zugeordnet, während der Index die Seiten 1 und 3 meldet. Dies steht im Gegensatz zur Zuordnung zu den Seitenzahlen bei Verwendung der addtolistFunktion, die Tabelleneinträge mit den korrekten Seitenzahlen erzeugt.

Ich würde lieber einen Index für die Seiten haben, als die Funktion „Tabellenliste“ zu verwenden. Dies liegt daran, dass wir in einem Index verschachtelte Aufschlüsselungen haben können und Indexelemente auf mehrere Seiten verweisen können.

Dies wird test.pdfzu Testzwecken erstellt.

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

Dieses MWE verbindet zwei Test-PDF-Dateien und erstellt eine Liste mit Lesezeichen (mit korrekten Seitenzahlen) und einen Index mit falschen Seitenzahlen.

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

Dies ist die Ausgabe (nach dem Zusammenführen der Inhaltsseite (physische Seite 1) mit der Indexseite (physische Seite 6).

Bildbeschreibung hier eingeben

Antwort1

Sie haben Recht, es gibt keine addtoindexOption in pdfpages. Und eigentlich bin ich ziemlich erstaunt, dass es keine gibt. Wahrscheinlich, weil niemand jemals nach dieser Funktion gefragt hat.

Es ist jedoch möglich, die Option und ein kleines Makro zu verwenden, pagecommandum Indexeinträge abzurufen. Hier ist ein Beispiel:

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

verwandte Informationen