這個問題之前被問過(是否可以索引使用 \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}