Qual seria a maneira preferida de exportar o Table of contents
que uso em um .tex
arquivo para um arquivo separado .pdf
?
Atualmente tenho um my-report.tex
arquivo e desejo emparelhar o resultado de pdflatex
( my-report.pdf
) com my-report-toc.pdf
, que contém apenas o índice analítico.
Existe uma maneira simples de conseguir isso?
Meu .tex
arquivo tem esse tipo de layout (simplificado):
...
\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}
...
Responder1
Extração de PDF
Ferramentas externas podem ser usadas para extrair páginas do arquivo PDF, por exemplo pdftk
. Se o índice estiver nas páginas 5 e 6:
pdftk myreport.pdf cat 5-6 output myreport-toc.pdf
\include
Se o documento principal estiver separado em vários \include
arquivos, ele
\tableofcontents
irá para um arquivo separado myreport-tableofcontents.tex
:
\tableofcontents
\newpage
e myreport.tex
para incluir seu toc:
\include{myreport-tableofcontents}
Então myreport-toc.tex
inclui apenas o índice:
\includeonly{myreport-tableofcontents}
\input{myreport}
Com hyperref
e links
Se myreport.tex
carregar package hyperref
, o arquivo do índice myreport.toc
também conterá nomes de âncoras. Isso pode ser usado para fazer links entre documentos. Por exemplo, o arquivo de visão geral do meu pacote no CTAN,oberdiek.pdfinclui o índice de todos os pacotes do pacote. O arquivo de origemoberdiek.texusa esta técnica, veja a definição \tocinclude
no exemplo abaixo. Claro que ambos myreport.tex
e myreport-toc.tex
precisam hyperref
.
Também necessário:
Quaisquer macros usadas
myreport.toc
devem ser fornecidas no formatomyreport-toc.tex
.A mesma classe, fontes, layout de página,… devem ser usados.
No caso do número da página, o exemplo usa
zref
para colocar os dados dos números das páginas no.aux
arquivomyreport
. A etiquetatoc
escreve o número da página inicial do índice. Ao usar o módulo,zref-thepage
a aparência visual de todos os números de página do documento também é lembrada. O.aux
arquivo demyreport
é então lidozref-xr
emmyreport-toc.tex
.
Arquivo 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}
Arquivo 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}
Responder2
Primeiro método (comshorttoc
)
O método mais fácil é usar o comando \anothertableofcontents
do shorttoc
pacote, que carrega e imprime o ToC de um .toc
arquivo arbitrário.
Se o seu documento principal for
my-report.tex
\documentclass{article}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\blinddocument
\end{document}
crie um my-report-toc.tex
com o seguinte conteúdo
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}
Compilando este último, o resultado my-report-toc.pdf
conterá o ToC de my-report.pdf
:
Segundo método (compdfpages
)
Outro método é usar o pdfpages
pacote para carregar apenas as páginas do ToC em um arquivo diferente. Neste caso, as páginas que contêm o ToC não devem conter mais nada.
Se o seu documento principal for
my-report.tex
\documentclass{article}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\clearpage
\blinddocument
\end{document}
crie um my-report-toc.tex
com o seguinte conteúdo (substitua pages=1
pelo intervalo real de páginas do seu ToC)
my-report-toc.tex
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=1]{my-report.pdf}
\end{document}
Compilando este último, o resultado my-report-toc.pdf
conterá o ToC de my-report.pdf
:
Responder3
Você pode usar pdfseparate
para extrair uma página ou intervalo de páginas de um arquivo PDF.
Supondo que o índice tenha apenas uma página, tentepdfseparate -f 2 -l 2 my-report.pdf my-report-toc.pdf
Claro, isso requer que você saiba quantas páginas o índice ocupa.
Responder4
mycontents.tex
:
\documentclass{article}
\begin{document}
\section*{My Contents}
\input{mwe.toc}
\end{document}
Onde mwe.toc
está o arquivo auxiliar do seujá compilado mwe.tex
documento principal no mesmo diretório.
Tome cuidado para que alguns editores possam mover esses arquivos para outro local ou remover os arquivos auxiliares após a compilação, mas não há problemas ao compilar a partir de um terminal.