仅导出目录

仅导出目录

Table of contents将我在文件中使用的内容导出.tex到单独的文件的首选方法是什么.pdf

目前我有一个文件,我希望将( )my-report.tex的结果与 配对,其中仅包含目录。pdflatexmy-report.pdfmy-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将页码数据放入 文件中.auxmyreport标签toc写入目录起始页的页码。通过使用模块,zref-thepage还可以记住文档中所有页码的视觉外观。然后由 读取中的.aux文件。myreportzref-xrmyreport-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包仅加载不同文件中的目录页面。在这种情况下,包含目录的页面不得包含任何其他内容。

如果您的主文档是

my-report.tex

\documentclass{article}

\usepackage{blindtext}

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

创建一个my-report-toc.tex包含以下内容的目录(pages=1用目录的实际页面范围替换)

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同一目录中的主文档。

请注意,一些编辑器可能会在编译后将这些文件移动到另一个地方或删除辅助文件,但从终端编译不会出现问题。

相关内容