Экспортировать только оглавление

Экспортировать только оглавление

Какой способ экспорта Table of contentsиспользуемого мной .texфайла в отдельный файл будет предпочтительным .pdf?

В настоящее время у меня есть my-report.texфайл, и я хочу связать результат pdflatex( my-report.pdf) с my-report-toc.pdf, который содержит только оглавление.

Есть ли простой способ добиться этого?


Мой .texфайл имеет следующую структуру (упрощенно):

...
\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}
...

решение1

Извлечение PDF-файлов

Для извлечения страниц из файла PDF можно использовать внешние инструменты, например pdftk. Если оглавление находится на страницах 5 и 6:

pdftk myreport.pdf cat 5-6 output myreport-toc.pdf

\include

Если основной документ разделен на несколько \includeфайлов, то он \tableofcontentsпомещается в отдельный файл myreport-tableofcontents.tex:

\tableofcontents
\newpage

и myreport.texвключить его оглавление:

\include{myreport-tableofcontents}

Затем myreport-toc.texвключает только оглавление:

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

С hyperrefи ссылками

Если myreport.texзагружает пакет hyperref, то файл таблицы содержания myreport.tocтакже содержит имена якорей. Это может быть использовано для создания междокументных ссылок. Например, файл обзора для моего пакета на CTAN,обердиек.pdfвключает в себя таблицу содержания всех пакетов в комплекте. Исходный файлобердиек.тексиспользует эту технику, см. определение \tocincludeв примере ниже. Конечно, и то, и myreport.texдругое myreport-toc.texнужно hyperref.

Также необходимо:

  • Все макросы, используемые в, myreport.tocдолжны быть предоставлены в myreport-toc.tex.

  • Следует использовать тот же класс, шрифты, макет страницы и т. д.

  • В случае номера страницы пример использует zrefдля помещения данных для номеров страниц в .auxфайл myreport. Метка tocзаписывает номер страницы для начальной страницы оглавления. С помощью модуля zref-thepageтакже запоминается визуальный вид всех номеров страниц в документе. Затем .auxфайл myreportсчитывается zref-xrв myreport-toc.tex.

Файл 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}

Файл 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}

решение2

Первый метод (сshorttoc)

Самый простой способ — использовать команду \anothertableofcontentsиз shorttocпакета, которая загружает и печатает оглавление из произвольного .tocфайла.

Если ваш основной документ

my-report.tex

\documentclass{article}

\usepackage{blindtext}

\begin{document}    
\tableofcontents    
\blinddocument    
\end{document} 

создайте my-report-toc.texсо следующим содержимым

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} 

При компиляции последнего результата my-report-toc.pdfбудет получено следующее оглавление my-report.pdf:

введите описание изображения здесь


Второй метод (сpdfpages)

Другой метод — использовать pdfpagesпакет для загрузки только страниц ToC в другом файле. В этом случае страницы, содержащие ToC, не должны содержать ничего другого.

Если ваш основной документ

my-report.tex

\documentclass{article}

\usepackage{blindtext}

\begin{document}    
\tableofcontents 
\clearpage   
\blinddocument    
\end{document} 

создайте my-report-toc.texсо следующим содержимым (замените pages=1реальным диапазоном страниц вашего ToC)

my-report-toc.tex

\documentclass{article}

\usepackage{pdfpages}

\begin{document}
\includepdf[pages=1]{my-report.pdf}
\end{document} 

При компиляции последнего результата my-report-toc.pdfбудет получено следующее оглавление my-report.pdf:

введите описание изображения здесь

решение3

Вы можете использовать его pdfseparateдля извлечения страницы или диапазона страниц из PDF-файла.

Предполагая, что оглавление занимает всего одну страницу, попробуйтеpdfseparate -f 2 -l 2 my-report.pdf my-report-toc.pdf

Конечно, для этого вам необходимо знать, сколько страниц занимает оглавление.

решение4

mycontents.tex:

\documentclass{article}
\begin{document}
\section*{My Contents}
\input{mwe.toc}
\end{document}

Гдеmwe.toc находится вспомогательный файл вашегоуже скомпилировано mwe.texосновной документ в том же каталоге.

Обратите внимание, что некоторые редакторы могут перемещать эти файлы в другое место или удалять вспомогательные файлы после компиляции, но при компиляции из терминала проблем не возникает.

Связанный контент