Exportar apenas índice

Exportar apenas índice

Qual seria a maneira preferida de exportar o Table of contentsque uso em um .texarquivo para um arquivo separado .pdf?

Atualmente tenho um my-report.texarquivo 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 .texarquivo 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 \includearquivos, ele \tableofcontentsirá para um arquivo separado myreport-tableofcontents.tex:

\tableofcontents
\newpage

e myreport.texpara incluir seu toc:

\include{myreport-tableofcontents}

Então myreport-toc.texinclui apenas o índice:

\includeonly{myreport-tableofcontents}
\input{myreport}

Com hyperrefe links

Se myreport.texcarregar package hyperref, o arquivo do índice myreport.toctambé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 \tocincludeno exemplo abaixo. Claro que ambos myreport.texe myreport-toc.texprecisam hyperref.

Também necessário:

  • Quaisquer macros usadas myreport.tocdevem ser fornecidas no formato myreport-toc.tex.

  • A mesma classe, fontes, layout de página,… devem ser usados.

  • No caso do número da página, o exemplo usa zrefpara colocar os dados dos números das páginas no .auxarquivo myreport. A etiqueta tocescreve o número da página inicial do índice. Ao usar o módulo, zref-thepagea aparência visual de todos os números de página do documento também é lembrada. O .auxarquivo de myreporté então lido zref-xrem myreport-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 \anothertableofcontentsdo shorttocpacote, que carrega e imprime o ToC de um .tocarquivo 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.texcom 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.pdfconterá o ToC de my-report.pdf:

insira a descrição da imagem aqui


Segundo método (compdfpages)

Outro método é usar o pdfpagespacote 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.texcom o seguinte conteúdo (substitua pages=1pelo 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.pdfconterá o ToC de my-report.pdf:

insira a descrição da imagem aqui

Responder3

Você pode usar pdfseparatepara 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.tocestá o arquivo auxiliar do seujá compilado mwe.texdocumento 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.

informação relacionada