Этот вопрос был задан ранее (Можно ли индексировать не-латексный PDF, вставленный с помощью \includepdf?). Ответов не последовало.
Закладки можно создавать с помощью \bookmark
, которые направляют на определенные страницы, скомпилированные с помощью \includepdf
команды из pdfpages
пакета (например,\pdfсоздать закладку на номер страницы и местоположение с помощью \includepdf.
Мы также знаем, что можно получить правильный номер страницы, вставленной с помощью \includepdf
. Это демонстрируется с помощью опции addtolist
, \includepdf
которую можно использовать для построения списка элементов в формате списка таблиц или списка рисунков.
Поэтому возможно ли прикрепить записи указателя к тем же номерам страниц, которые используются в этой addtolist
функции?
test.pdf
Мой MWE делает следующее: создается простой двухстраничный PDF-файл с именем \lipsum
и изображением.
Вторая часть MWE использует \includepdf
дважды для объединения двух копий test.pdf
. Это дает файл с 4 страницами. Создание оглавления добавляет страницу в начало документа. Используя опцию addtolist
, список закладок создается с помощью @starttoc{lot}
. Эти закладки указывают на страницы 1 и 2 первого test.pdf
файла, а затем на страницы 1 и 2 второго test.pdf
файла. Закладки создаются с помощью макроса, который использует \bookmark
и который был размещен на TeX.SE здесь (\pdfсоздать закладку на номер страницы и местоположение с помощью \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
Вы правы, в pdfpages нет такой addtoindex
опции. И на самом деле я весьма удивлен, что ее нет. Вероятно, потому что никто никогда не просил об этой функции.
В любом случае, можно использовать 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}