`\includepdf` を使用して挿入された特定のページを指すようにブックマークをインデックス化できますか?

`\includepdf` を使用して挿入された特定のページを指すようにブックマークをインデックス化できますか?

この質問は以前にもされました(\includepdfを使用して挿入された非ラテックスPDFをインデックスすることは可能ですか?)。回答は得られませんでした。

パッケージのコマンド\bookmarkを使用してコンパイルされた特定のページを指すブックマークを作成できます(例:\includepdfpdfpages\pdfbookmark を \includepdf でページ番号と場所にブックマークする

また、 を使用して挿入されたページの正しいページ番号を取得できることもわかっています。 これは、表のリストまたは図のリストの形式で項目のリストを作成するために使用できるの\includepdfオプションを使用して実証されています。addtolist\includepdf

addtolistしたがって、この機能で使用されるのと同じページ番号に索引エントリを添付することは可能ですか?

私の MWE は次のことを行います:と画像を使用して、という名前の単純な 2 ページの PDF ファイルtest.pdfが作成されます。\lipsum

MWE の 2 番目の部分では、 を\includepdf2 回使用して 2 つの のコピーを結合しますtest.pdf。これにより、4 ページのファイルが作成されます。目次を作成すると、ドキュメントの先頭にページが追加されます。 オプションを使用するとaddtolist、 を使用してブックマークのリストが作成されます。これらのブックマークは、最初のファイルのページ 1 と 2、次に 2 番目のファイルのページ 1 と 2@starttoc{lot}を指します。ブックマークは、 を使用するマクロを使用して作成されます。このマクロは、TeX.SE のこちら (test.pdftest.pdf\bookmark\pdfbookmark を \includepdf でページ番号と場所にブックマークする)。マクロを変更して、 を追加しました。\index{#5}ここで、#5 はブックマークされたページのラベルです (実際に機能するとは思っていませんでした)。 を使用すると\makeidx、ドキュメントの 6 ページ目にインデックスが作成されます。

しかし、索引のページ番号は正しくありません。 の最初のコピーのブックマークに添付された索引エントリはtest.pdfファイルの最初のページ (ページ 1) のみを参照しますが、2 番目のファイルのブックマークに関連付けられた索引エントリはページ 3 を参照します。少なくとも索引付けでは物理的なページ番号が認識されますが、ブックマーク 2 と 4 はページ 2 と 4 に関連付けられているのに対し、索引ではページ 1 と 3 が報告されます。これは、addtolist正しいページ番号を持つテーブル エントリを生成する機能を使用した場合のページ番号との関連付けとは対照的です。

私は、テーブルのリスト機能を使用するよりも、ページのインデックスを使用する方が好きです。これは、インデックスではネストされた項目化が可能で、インデックス項目が複数のページを指すことができるためです。

これはtest.pdfテスト目的で作成されます。

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

この MWE は 2 つの test.pdf ファイルを結合し、ブックマークされたページのリスト (正しいページ番号付き) と誤ったページ番号のインデックスを生成します。

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

これは、コンテンツ ページ (物理ページ 1) とインデックス ページ (物理ページ 6) を結合した後の出力です。

ここに画像の説明を入力してください

答え1

おっしゃる通り、addtoindexpdfpages にはオプションがありません。実際、それがないことにとても驚いています。おそらく、誰もこの機能を要求しなかったからでしょう。

とにかく、オプションと小さなマクロを使用してインデックス エントリを取得することは可能ですpagecommand。次に例を示します。

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

関連情報