¿Cuál sería la forma preferida de exportar lo que Table of contents
uso en un .tex
archivo a otro separado .pdf
?
Actualmente tengo un my-report.tex
archivo y deseo emparejar el resultado de pdflatex
( my-report.pdf
) con my-report-toc.pdf
, que contiene solo la tabla de contenido.
¿Existe una manera sencilla de lograr esto?
Mi .tex
archivo tiene este tipo de diseño (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}
...
Respuesta1
extracción de PDF
Se pueden utilizar herramientas externas para extraer páginas del archivo PDF, por ejemplo pdftk
. Si el índice está en las páginas 5 y 6:
pdftk myreport.pdf cat 5-6 output myreport-toc.pdf
\include
Si el documento principal está separado en varios \include
archivos, entonces
\tableofcontents
va a un archivo separado myreport-tableofcontents.tex
:
\tableofcontents
\newpage
y myreport.tex
para incluir su toc:
\include{myreport-tableofcontents}
Luego myreport-toc.tex
solo incluye el índice:
\includeonly{myreport-tableofcontents}
\input{myreport}
Con hyperref
y enlaces
Si myreport.tex
carga el paquete hyperref
, entonces el archivo de tabla de contenidosmyreport.toc
también contiene nombres de anclaje. Eso se puede utilizar para hacer enlaces entre documentos. Por ejemplo, el archivo de descripción general de mi paquete en CTAN,oberdiek.pdfIncluye la tabla de contenidos de todos los paquetes del paquete. El archivo fuenteoberdiek.texutiliza esta técnica, consulte la definición de \tocinclude
en el siguiente ejemplo. Por supuesto que ambos myreport.tex
y myreport-toc.tex
necesitan hyperref
.
También se necesita:
Cualquier macro utilizada
myreport.toc
debe proporcionarse en formatomyreport-toc.tex
.Se debe utilizar la misma clase, fuentes, diseño de página,….
En el caso del número de página, el ejemplo utiliza
zref
para colocar los datos de los números de página en el.aux
archivo demyreport
. La etiquetatoc
escribe el número de página de la página de inicio de la tabla de contenido. Al utilizar el módulo,zref-thepage
también se recuerda la apariencia visual de todos los números de página del documento. Luego, el.aux
archivo demyreport
se leezref-xr
enmyreport-toc.tex
.
Archivo 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}
Archivo 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}
Respuesta2
Primer método (conshorttoc
)
El método más sencillo es utilizar el comando \anothertableofcontents
del shorttoc
paquete, que carga e imprime la ToC desde un .toc
archivo arbitrario.
Si su documento principal es
my-report.tex
\documentclass{article}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\blinddocument
\end{document}
crear un my-report-toc.tex
con el siguiente contenido
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}
Al compilar este último, el resultado my-report-toc.pdf
contendrá el ToC de my-report.pdf
:
Segundo método (conpdfpages
)
Otro método es utilizar el pdfpages
paquete para cargar sólo las páginas del ToC en un archivo diferente. En este caso, las páginas que contienen el ToC no deben contener nada más.
Si su documento principal es
my-report.tex
\documentclass{article}
\usepackage{blindtext}
\begin{document}
\tableofcontents
\clearpage
\blinddocument
\end{document}
cree un my-report-toc.tex
con el siguiente contenido (reemplace pages=1
con el rango real de páginas de su ToC)
my-report-toc.tex
\documentclass{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=1]{my-report.pdf}
\end{document}
Al compilar este último, el resultado my-report-toc.pdf
contendrá el ToC de my-report.pdf
:
Respuesta3
Puede utilizar pdfseparate
para extraer una página, o un rango de páginas, de un archivo pdf.
Suponiendo que el índice tiene sólo una página, intentepdfseparate -f 2 -l 2 my-report.pdf my-report-toc.pdf
Por supuesto, esto requiere que sepas cuántas páginas ocupa el índice.
Respuesta4
mycontents.tex
:
\documentclass{article}
\begin{document}
\section*{My Contents}
\input{mwe.toc}
\end{document}
Dóndemwe.toc
está el archivo auxiliar de suya compilado mwe.tex
documento principal en el mismo directorio.
Tenga cuidado que algunos editores pueden mover estos archivos a otro lugar o eliminar los archivos auxiliares después de compilar, pero no hay problemas al compilar desde una terminal.