Ich füge Dokumente mit vielen Seiten an, hätte aber gerne Links zum Anfang der ersten Seite jedes Dokuments im Inhaltsverzeichnis. Pseudocode zum Erstellen eines benutzerdefinierten Inhaltsverzeichnisses
- Fügen Sie auf der ersten Seite von PDF-Dokumenten ein benutzerdefiniertes Etikett hinzu
- Hinzufügen benutzerdefinierter Beschriftungen zum Inhaltsverzeichnis
Code, der Seitennummern hinzufügt, ohne die Größe der PDF-Seiten zu verringern, aber nichts mit der Anwendung von Referenzen am Anfang der PDF-Seiten zu tun hat.
\documentclass{article}
\usepackage{pdfpages}
\usepackage{hyperref} % for links in TOC
% https://tex.stackexchange.com/q/56316/13173
\usepackage{fancyhdr}
\renewcommand{\headrulewidth}{0pt} % Werner, remove top margin border
% https://tex.stackexchange.com/a/338919/13173
\usepackage{letltxmacro}
\LetLtxMacro\oldincludepdf\includepdf
\renewcommand{\includepdf}[2][]{%
\oldincludepdf[pagecommand={\thispagestyle{fancy}},#1]{#2}}
\begin{document}
% TODO add custom labels to TOC
\tableofcontents
% Pseudocode
% \addcontentsline{toc}{someLabelForPdf}{\listPdfBeginningLabels}
% TODO add here a label/... to the beginning of pdf page such that included in TOC
\includepdf[pages=1,pagecommand=\thispagestyle{plain}]{7.pdf}
% No reference to the rest
\includepdf[pages=2-,pagecommand=\thispagestyle{plain}]{7.pdf}
% TODO reference here
\includepdf[pages=1,pagecommand=\thispagestyle{plain}]{8.pdf}
% No reference to the rest
\includepdf[pages=2-,pagecommand=\thispagestyle{plain}]{8.pdf}
\end{document}
Vielleicht \addcontentsline{toc}{someLabelForPdf}{\listPdfBeginningLabels}
funktioniert Pseudocode.
Beispiel-Inhaltsverzeichnis
Table of Contents
7 1
8 150
Versuch mit Samcarters Vorschlag
Handbuchworauf Samcarter verweist, ist ungefähr das Folgende addtotoc
, also versuche ich das Folgende, aber ich bekomme die folgende Ausgabe
\includepdf[pages=-,pagecommand=\thispagestyle{plain},addtotoc={1}]{7.pdf}
Ausgabe
<use "7.pdf" > <use "7.pdf" > <use "7.pdf" page1> <use "7.pdf" page1>
[1] <use "7.pdf" page1> <use "7.pdf" page1>
Runaway argument?
addtotoc={1}]{9.pdf} \includepdf [pages=-,pagecommand=\thispagestyle \ETC.
! Paragraph ended before \AM@parse@toclisti was complete.
<to be read again>
\par
l.33
addtotoc Adds an entry to the table of contents. This option requires five
arguments, separated by commas:
addtotoc={hpage number i,hsection i,hlevel i,hheading i,hlabel i}
Christians Vorschlag wiederholen
Keine Trennung durch pages=1
und erforderlich pages=2-
. Einige kleinere kosmetische Änderungen in Links
\documentclass{article}
\usepackage{pdfpages}
\usepackage[hidelinks]{hyperref}
\usepackage{xcolor}
\hypersetup{
colorlinks,
linkcolor={red!50!black},
citecolor={blue!50!black},
urlcolor={blue!80!black}
}
% https://tex.stackexchange.com/q/56316/13173
\usepackage{fancyhdr}
\renewcommand{\headrulewidth}{0pt} % Werner, remove top margin border
% https://tex.stackexchange.com/a/338919/13173
\usepackage{letltxmacro}
\LetLtxMacro\oldincludepdf\includepdf
\renewcommand{\includepdf}[4][]{%
\oldincludepdf[pagecommand={\thispagestyle{fancy}},addtotoc={#4,section,1,#2,#3}, #1]{#2}}
\begin{document}
\tableofcontents
\includepdf[pages=-,pagecommand=\thispagestyle{plain}]{8.pdf}{p1d8}{1}
\end{document}
Betriebssystem: Debian 8.7
Hardware: Asus Zenbook UX303UB
Testdatei 7.pdf
:http://www.texdoc.net/texmf-dist/doc/latex/pdfpages/pdfpages.pdf
Testdatei 8.pdf
:http://ctan.sharelatex.com/tex-archive/macros/latex/required/graphics/grfguide.pdf
Antwort1
Die addtotoc
Option ist ein wenig knifflig!
addtotoc={page-number,sectiontype,level,heading,label}
ist die korrekte Verwendung von addtotoc
,
wobei die Seitenzahlmussstimmt mit der Seitenzahl überein, die mit der pages=
Option angegeben ist.
- Abschnittstyp kann
section
seinsubsection
usw. - Ebene ist die Abschnittsebene, d. h. 1 bedeutet
section
, 2 steht fürsubsection
usw. (wie üblich) Überschrift ist der Name, der im Inhaltsverzeichnis erscheint
label ist das Label, das auf diese eingebundene PDF-Datei angewendet wird (kann leer gelassen werden)
Die 7.pdf
und 8.pdf
wurden mit folgender Datei generiert (und umbenannt)
\documentclass{article}
\usepackage{blindtext}
\begin{document}
\section{Beginning \jobname}
\blindtext[50]
\end{document}
Hier ist der laufende Code.
\documentclass{article}
\usepackage{pdfpages}
\usepackage{hyperref} % for links in TOC
% https://tex.stackexchange.com/q/56316/13173
\usepackage{fancyhdr}
\renewcommand{\headrulewidth}{0pt} % Werner, remove top margin border
% https://tex.stackexchange.com/a/338919/13173
\usepackage{letltxmacro}
\LetLtxMacro\oldincludepdf\includepdf
\renewcommand{\includepdf}[4][]{%
\oldincludepdf[pagecommand={\thispagestyle{fancy}},addtotoc={#4,section,1,#2,#3}, #1]{#2}}
\begin{document}
% TODO add custom labels to TOC
\tableofcontents
% Pseudocode
% \addcontentsline{toc}{someLabelForPdf}{\listPdfBeginningLabels}
% TODO add here a label/... to the beginning of pdf page such that included in TOC
\includepdf[pages=1,pagecommand=\thispagestyle{plain}]{7.pdf}{firstpage7pdf}{1}
% No reference to the rest
\includepdf[pages=2-,pagecommand=\thispagestyle{plain}]{7.pdf}{remainingpages7pdf}{2}
% TODO reference here
\includepdf[pages=1,pagecommand=\thispagestyle{plain}]{8.pdf}{firstpage8pdf}{1}
% No reference to the rest
\includepdf[pages=2-,pagecommand=\thispagestyle{plain}]{8.pdf}{remainginpages8pdf}{2}
\end{document}
Update mit Key-Value-Schnittstelle
\documentclass{article}
\usepackage{xparse}
\ExplSyntaxOn
% Switch to expl3 - Syntax
% Define a storing place for the option values
\prop_new:N \l_leo_option_prop
% keys for the new functionality
\keys_define:nn {LEO} {%
page .code:n = {\prop_put:Nnn \l_leo_option_prop {page} {#1}},
section .code:n = {\prop_put:Nnn \l_leo_option_prop {section} {#1}},
level .code:n = {\prop_put:Nnn \l_leo_option_prop {level} {#1}},
heading .code:n = {\prop_put:Nnx \l_leo_option_prop {heading} {#1}},
label .code:n = {\prop_put:Nnn \l_leo_option_prop {label} {#1}},
}
% Keys setting
\cs_new:Npn \SetupPdfInclude #1 {%
\keys_set:nn {LEO} {#1}
}
% Get some key value
\cs_new:Npn \retrieveoption #1 {%
\prop_item:Nn \l_leo_option_prop {#1}
}
\ExplSyntaxOff
\usepackage{pdfpages}
\usepackage{hyperref} % for links in TOC
% https://tex.stackexchange.com/q/56316/13173
\usepackage{fancyhdr}
\renewcommand{\headrulewidth}{0pt} % Werner, remove top margin border
% https://tex.stackexchange.com/a/338919/13173
\usepackage{letltxmacro}
\makeatletter
\LetLtxMacro\pdfpages@@includepdf\includepdf
\RenewDocumentCommand{\includepdf}{O{}mo}{%
\begingroup
\IfValueTF{#3}{% Is there a 3rd argument? Yes
% Process the keys for the \includepdf first in order to get the value of 'pages=...' option
% This is stored to \AM@pagestemp (see pdfpages.sty)
\setkeys{pdfpages}{#1}%
\SetupPdfInclude{label={label#2\AM@pagestemp},page={\AM@pagestemp}, heading={#2},#3}
% Call the old command with the options for addtotoc
\pdfpages@@includepdf[pagecommand={\thispagestyle{fancy}},addtotoc={\retrieveoption{page},\retrieveoption{section},\retrieveoption{level},\retrieveoption{heading},\retrieveoption{label}},#1]{#2}
}{% No, no 3rd. argument}
\pdfpages@@includepdf[pagecommand={\thispagestyle{fancy}},#1]{#2}
}%
\endgroup% Prevent leaking of key values to the next call of the command
}
\makeatother
% Set some default values
\SetupPdfInclude{page=1,section=section,level=1}
\begin{document}
% TODO add custom labels to TOC
\tableofcontents
% Pseudocode
% \addcontentsline{toc}{someLabelForPdf}{\listPdfBeginningLabels}
\includepdf[pagecommand=\thispagestyle{plain}]{7.pdf}[label=firstpage7pdf]
\includepdf[pages=2-,pagecommand=\thispagestyle{plain}]{7.pdf}[page=2,heading={\retrieveoption{heading} continued}]
\includepdf[pages=1,pagecommand=\thispagestyle{plain}]{8.pdf}[label=firstpage8pdf]
\includepdf[pages=2-,pagecommand=\thispagestyle{plain}]{8.pdf}[heading={\retrieveoption{heading} continued}]
\end{document}
Die einzelnen Schlüsselwerte entsprechen dabei den Einträgen in der addtotoc
Option, der Vorteil liegt darin, dass die genaue Reihenfolge durch den Code vorgegeben wird und nicht durch eine Verwendungsvorgabe.
Standardmäßig heading
wird das obligatorische Argument verwendet \includepdf
, d. h. #2
.