可以對書籤進行索引,指向使用「\includepdf」插入的特定頁面嗎?

可以對書籤進行索引,指向使用「\includepdf」插入的特定頁面嗎?

這個問題之前被問過(是否可以索引使用 \includepdf 插入的非乳膠 PDF)。它沒有引起任何答案。

可以使用書籤\bookmark將其定向到使用包\includepdf中的命令編譯的特定頁面pdfpages(例如\pdfbookmark 到頁碼和位置,使用 \includepdf

我們也知道可以使用 來獲得插入頁面的正確頁碼\includepdf。這是使用 選項進行示範addtolist\includepdf,該選項可用於以表格清單或圖形清單格式建立項目清單。

因此,是否可以將索引條目附加到該功能使用的相同頁碼上addtolist

我的 MWE 執行以下操作: 使用影像test.pdf製作一個名為 的簡單 2 頁 pdf 檔案。\lipsum

MWE 的第二部分使用\includepdf兩次來連接 的兩個副本test.pdf。這給了一個有 4 頁的文件。目錄的製作會在文件的前面新增一頁。使用該addtolist選項,可以使用 建立書籤清單@starttoc{lot}。這些書籤指向第一個test.pdf文件的第 1 頁和第 2 頁,然後指向第二個test.pdf文件的第 1 頁和第 2 頁。書籤是使用巨集建立的,該巨集使用\bookmark和 ,該巨集已發佈在 TeX.SE 上(此處)\pdfbookmark 到頁碼和位置,使用 \includepdf)。我透過新增\index{#5}#5 是已新增書籤的頁面的標籤來修改巨集(我並沒有真正期望它能夠工作)。使用\makeidx,在文件的第 6 頁上建立索引。

但是,索引中的頁碼不正確。附加到第一個副本的書籤的索引條目test.pdf僅引用文件的第一頁(第 1 頁),而與第二個文件中的書籤關聯的索引條目引用第 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

addtoindex你是對的, pdfpages 中沒有選項。事實上,我很驚訝沒有。可能是因為從來沒有人要求過這項功能。

無論如何,可以使用該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}

相關內容