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包括捆綁包中所有包的目錄。原始檔奧伯迪克.tex\tocinclude
使用此技術,請參閱下面範例中的定義。當然兩者myreport.tex
都myreport-toc.tex
需要hyperref
。
還需要:
中使用的任何巨集
myreport.toc
都應在 中提供myreport-toc.tex
。應使用相同的類別、字體、頁面佈局…。
對於頁碼,該範例使用將
zref
頁碼資料放入.aux
.myreport
標籤toc
寫入目錄起始頁的頁碼。透過使用模組zref-thepage
,還可以記住文件中所有頁碼的視覺外觀。然後由in讀取.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
主文檔在同一目錄中。
請注意,有些編輯器可以在編譯後將這些文件移動到其他位置或刪除輔助文件,但從終端編譯沒有問題。