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
包仅加载不同文件中的目录页面。在这种情况下,包含目录的页面不得包含任何其他内容。
如果您的主文档是
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
同一目录中的主文档。
请注意,一些编辑器可能会在编译后将这些文件移动到另一个地方或删除辅助文件,但从终端编译不会出现问题。