Was wäre die bevorzugte Methode zum Exportieren der Table of contents
in einer Datei verwendeten Daten .tex
in eine separate Datei .pdf
?
Derzeit habe ich eine my-report.tex
Datei und möchte das Ergebnis von pdflatex
( my-report.pdf
) mit koppeln my-report-toc.pdf
, das nur das Inhaltsverzeichnis enthält.
Gibt es eine einfache Möglichkeit, dies zu erreichen?
Meine .tex
Datei hat folgendes Layout (vereinfacht):
...
\begin{titlepage}
\includepdf[pages=-]{abstract.pdf}
\end{titlepage}
% -------------------------------------------------
% This should go to a separate .pdf file on export.
\tableofcontents
\pagebreak
% -------------------------------------------------
\section{Section1}
...
\section{Section2}
...
\section{Section3}
...
Antwort1
PDF-Extraktion
Mit externen Tools lassen sich Seiten aus der PDF-Datei extrahieren, z. B. pdftk
. Wenn das Inhaltsverzeichnis auf den Seiten 5 und 6 steht:
pdftk myreport.pdf cat 5-6 output myreport-toc.pdf
\include
Wenn das Hauptdokument in mehrere \include
Dateien aufgeteilt ist, dann
\tableofcontents
kommt das in eine separate Datei myreport-tableofcontents.tex
:
\tableofcontents
\newpage
und um myreport.tex
das Inhaltsverzeichnis einzuschließen:
\include{myreport-tableofcontents}
Anschließend myreport-toc.tex
folgt nur noch das Inhaltsverzeichnis:
\includeonly{myreport-tableofcontents}
\input{myreport}
Mit hyperref
und Links
Wenn myreport.tex
das Paket geladen wird hyperref
, enthält die Inhaltsverzeichnisdatei myreport.toc
auch Ankernamen. Diese können verwendet werden, um Links zwischen Dokumenten zu erstellen. Beispielsweise die Übersichtsdatei für mein Paket auf CTAN,oberdiek.pdfenthält das Inhaltsverzeichnis aller Pakete im Bundle. Die Quelldateioberdiek.texverwendet diese Technik, siehe die Definition von \tocinclude
im Beispiel unten. Natürlich benötigen sowohl myreport.tex
als auch .myreport-toc.tex
hyperref
Außerdem wird benötigt:
Alle in verwendeten Makros
myreport.toc
sollten in bereitgestellt werdenmyreport-toc.tex
.Es sollten die gleiche Klasse, die gleichen Schriftarten, das gleiche Seitenlayout usw. verwendet werden.
Im Falle der Seitenzahlen verwendet das Beispiel ,
zref
um die Daten für die Seitenzahlen in die.aux
Datei von zu schreibenmyreport
. Das Labeltoc
schreibt die Seitenzahl für die Startseite des Inhaltsverzeichnisses. Durch die Verwendung des Modulszref-thepage
wird auch das visuelle Erscheinungsbild aller Seitenzahlen im Dokument gespeichert. Die.aux
Datei von wird dann von inmyreport
gelesen .zref-xr
myreport-toc.tex
Datei myreport.tex
:
\documentclass{book}
\usepackage{zref-abspage,zref-thepage}
\makeatletter
\newcommand*{\pagevaluelabel}[1]{%
\zref@labelbyprops{toc}{abspage}%
}
\makeatother
\AtBeginDocument{%
\addtocontents{toc}{\string\providecommand\string\pagevaluelabel[1]{}}%
\addtocontents{toc}{\string\pagevaluelabel{toc}}%
}
\usepackage{hyperref}
\setcounter{secnumdepth}{4}
\begin{document}
\frontmatter
Title page
\newpage
\chapter*{Foreword}
\tableofcontents
\mainmatter
\chapter{Chapter}
\section{Section}
\subsection{Subsection}
\subsubsection{Subsubsection}
\end{document}
Datei myreport-toc.tex
:
\documentclass{book}
\usepackage{hyperref}
\usepackage{zref-xr}
\zexternaldocument[main:]{test}\relax
\makeatletter
\newcommand*{\tocinclude}[1]{%
\chapter*{\contentsname
\@mkboth{\MakeUppercase\contentsname}%
{\MakeUppercase\contentsname}%
}%
\begingroup
\makeatletter
\def\@prj{#1}%
\let\contentsline\foreign@contentsline
\input{\@prj.toc}%
\endgroup
}
\def\foreign@contentsline#1#2#3#4{%
\ifx\\#4\\%
\csname l@#1\endcsname{#2}{#3}%
\else
\ifHy@linktocpage
\csname l@#1\endcsname{{#2}}{%
\hyper@linkfile{#3}{\@prj.pdf}{#4}%
}%
\else
\csname l@#1\endcsname{%
\hyper@linkfile{#2}{\@prj.pdf}{#4}%
}{#3}%
\fi
\fi
}%
\begin{document}
\makeatletter
\zref@refused{main:toc}
\setcounter{page}{%
\numexpr\zref@extractdefault{main:toc}{abspage}{1}\relax
}
\renewcommand*{\thepage}{%
\zref@extractdefault{main:thepage\number\value{page}}%
{page}{\arabic{page}}%
}
\tocinclude{myreport}
\end{document}
Antwort2
Erste Methode (mitshorttoc
)
Am einfachsten geht das mit dem Befehl \anothertableofcontents
aus dem Paket, der das Inhaltsverzeichnis aus einer beliebigen Datei shorttoc
lädt und druckt ..toc
Wenn Ihr Hauptdokument
my-report.tex
\documentclass{article}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\blinddocument
\end{document}
Erstellen Sie eine my-report-toc.tex
mit folgendem Inhalt
my-report-toc.tex
\documentclass{article}
\usepackage{shorttoc}
\usepackage{xspace} % this shouldn't be needed in your document
\begin{document}
\anothertableofcontents{my-report}{Contents}{3}
\end{document}
Wenn Sie Letzteres kompilieren, my-report-toc.pdf
enthält das Ergebnis das Inhaltsverzeichnis von my-report.pdf
:
Zweite Methode (mitpdfpages
)
Eine andere Methode besteht darin, das Paket zu verwenden, pdfpages
um nur die Seiten des Inhaltsverzeichnisses in eine andere Datei zu laden. In diesem Fall dürfen die Seiten, die das Inhaltsverzeichnis enthalten, nichts anderes enthalten.
Wenn Ihr Hauptdokument
my-report.tex
\documentclass{article}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\clearpage
\blinddocument
\end{document}
Erstellen Sie eine my-report-toc.tex
mit folgendem Inhalt (ersetzen Sie diesen pages=1
durch den tatsächlichen Seitenumfang Ihres Inhaltsverzeichnisses)
my-report-toc.tex
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=1]{my-report.pdf}
\end{document}
Wenn Sie Letzteres kompilieren, my-report-toc.pdf
enthält das Ergebnis das Inhaltsverzeichnis von my-report.pdf
:
Antwort3
Sie können es verwenden, pdfseparate
um eine Seite oder einen Seitenbereich aus einer PDF-Datei zu extrahieren.
Angenommen, das Inhaltsverzeichnis ist nur eine Seite lang, versuchen Siepdfseparate -f 2 -l 2 my-report.pdf my-report-toc.pdf
Voraussetzung hierfür ist natürlich, dass Sie wissen, wie viele Seiten das Inhaltsverzeichnis umfasst.
Antwort4
mycontents.tex
:
\documentclass{article}
\begin{document}
\section*{My Contents}
\input{mwe.toc}
\end{document}
Wo mwe.toc
befindet sich die Hilfsdatei Ihresbereits zusammengestellt mwe.tex
Hauptdokument im selben Verzeichnis.
Beachten Sie, dass einige Editoren diese Dateien nach dem Kompilieren an einen anderen Ort verschieben oder die Hilfsdateien entfernen können, beim Kompilieren von einem Terminal aus jedoch keine Probleme auftreten.