`\includepdf`를 사용하여 삽입된 특정 페이지를 가리키는 북마크를 색인화할 수 있습니까?

`\includepdf`를 사용하여 삽입된 특정 페이지를 가리키는 북마크를 색인화할 수 있습니까?

이 질문은 이전에 요청되었습니다(\includepdf를 사용하여 삽입된 비라텍스 PDF를 색인화할 수 있습니까?). 아무런 대답도 얻지 못했습니다.

패키지 의 명령을 \bookmark사용하여 컴파일된 특정 페이지로 이동하는 북마크를 만들 수 있습니다 (예:\includepdfpdfpages\pdf\includepdf를 사용하여 페이지 번호 및 위치에 북마크 추가.

또한 를 사용하여 삽입된 페이지의 올바른 페이지 수를 얻는 것이 가능하다는 것도 알고 있습니다 \includepdf. 이는 표 목록 또는 그림 목록 형식으로 항목 목록을 작성하는 데 사용할 수 있는 옵션을 사용하여 설명됩니다 addtolist.\includepdf

따라서 기능에서 사용하는 것과 동일한 페이지 번호에 색인 항목을 첨부할 수 있습니까 addtolist?

내 MWE는 다음을 수행합니다. 및 이미지를 사용하여 이름이 지정된 간단한 2페이지 PDF 파일이 test.pdf만들어집니다 .\lipsum

MWE의 두 번째 부분 \includepdf에서는 두 번을 사용하여 test.pdf. 이렇게 하면 4페이지의 파일이 제공됩니다. 목차를 제작하면 문서 앞에 페이지가 추가됩니다. 옵션을 사용하면 addtolist북마크 목록이 생성됩니다 @starttoc{lot}. 이러한 책갈피는 첫 번째 파일의 1페이지와 2페이지를 가리킨 test.pdf다음 두 번째 test.pdf파일의 1페이지와 2페이지를 가리킵니다. 북마크는 \bookmark여기 TeX.SE에 게시된 매크로를 사용하여 생성됩니다(\pdf\includepdf를 사용하여 페이지 번호 및 위치에 북마크 추가). 북마크된 페이지의 레이블인 #5를 추가하여 매크로를 수정했습니다 \index{#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}

관련 정보