Я написал диссертацию, и она готова к отправке, но, к сожалению, ограничение по объему тома составляет 300 страниц, а моя диссертация — 324. Было решено, что решением будет отделить приложения от основного текста и поместить их в отдельный том.
Теперь мне нужна страница с содержанием, на которой будет написано:
Volume one
Chapter 1 blah..... 1
Chapter 2 blah..... 4
...
Volume two
Appendix 1 ...... A1
Appendix 2 ...... A3
Appendix 3 ...... A12
...
Эта страница содержания должна появиться в обоих томах. Один раз в том виде, в котором она есть сейчас, и один раз в начале второго тома.
Моя преамбула такова:
\documentclass[a4paper, 11pt, oneside]{book}
\usepackage[UKenglish]{babel}
\usepackage[left=3cm, right=3cm, bottom=3.5cm, top=3.5cm]{geometry}
\usepackage[
font=footnotesize,
center
]{caption} % Changes font size of figure captions to small
\usepackage[
backend=biber,
block=space,
date=long,
doi=false,
dashed=false,
eprint=false,
firstinits=true,
isbn=false,
minnames=2,
maxnames=2,
mincitenames=2,
maxcitenames=2,
natbib=true,
sortcites=false,
sorting=nyt,
style=authoryear-comp,
terseinits=true,
uniquelist=false,
uniquename=false,
url=false
]{biblatex}
\addbibresource{C:/Documents and Settings/LBOYD/My Documents/LaTeX/BibTex/library.bib}
%Put initials after names...
\DeclareNameAlias{sortname}{last-first}
\DeclareNameAlias{default}{last-first}
%Remove "and" before last name. However, this also removes "and" in a textcite...
\renewcommand*{\finalnamedelim}{\space\&\space}
\usepackage{fancyhdr} % Provides support for improved document headers
\usepackage{graphicx} % Provides support for inserting images
\usepackage{tikz} % Provides support for tikz images
\usetikzlibrary{arrows} % Add arrows package to tikz
\usepackage{wrapfig} % Allows text to wrap around images
\usepackage{sidecap} % Allows captions to be put to side of figures
\usepackage{subfig} % Allows us to include sub-figures
\usepackage{float}
\usepackage{pdflscape}
\usepackage{makeidx}
\usepackage[big,compact]{titlesec}
\usepackage{pdfpages}
\usepackage[inline]{enumitem}
\usepackage{multirow}
\usepackage{mathtools}
\usepackage[hidelinks]{hyperref}
\hypersetup{
pdftitle=Third Year Report,
pdfauthor=Liam Boyd,
pdfkeywords=EngD Thesis CMOS VCO Oscillator Transmission
}
\usepackage{longtable}
\usepackage{acro}% needs v0.4 of `acro'
\acsetup{
page-name=Acronyms,
list-style=longtable,
list-header=chapter*,
list-table-width=10cm,
list-long-format=\capitalisewords
}
\usepackage{mfirstuc}% provides\capitalisewords
\include{Frontmatter/acronyms2} %Include external acronym list.
\makeindex
\setlength{\parindent}{0in}
\usepackage{setspace}
\doublespacing
\newcommand{\comment}[1]{}
\begin{document}
%%---------------------------------------------------------------
% FRONTMATTER
%%---------------------------------------------------------------
\pdfbookmark[0]{Title}{Title}
\input{Frontmatter/titlepage} % Custom front page
\frontmatter
\input{Frontmatter/abstract} % Document Abstract
\addcontentsline{toc}{chapter}{Abstract}
\pagestyle{plain} % Set page style
\input{Frontmatter/declaration}
\addcontentsline{toc}{chapter}{Declaration}
\input{Frontmatter/acknowledgments} % Acknowledgements page
\addcontentsline{toc}{chapter}{Acknowledgements}
\listoffigures % List of figures
\addcontentsline{toc}{chapter}{List of Figures}
\newpage % Start a new page
\listoftables % List of Tables
\addcontentsline{toc}{chapter}{List of Tables}
\newpage % Start a new page
\begingroup
\setlength{\LTleft}{-\tabcolsep}
\printacronyms
\endgroup
\addcontentsline{toc}{chapter}{Acronyms}%\printacronyms
\clearpage % Start a new page
\pdfbookmark[0]{Contents}{Contents}
\tableofcontents % Insert a table of contents
\clearpage
%%---------------------------------------------------------------
% INPUT CHAPTERS
%%---------------------------------------------------------------
\mainmatter
\pagestyle{plain}
\input{Mainmatter/Introduction}
\input{Mainmatter/DesignOptions}
\input{Mainmatter/SystemsContext}
\input{Mainmatter/MB8AW4316}
\input{Mainmatter/MB8AW5318}
\input{Mainmatter/Analysis}
\input{Mainmatter/Conclusion}
%%---------------------------------------------------------------
% BACK MATTER
%%---------------------------------------------------------------
\backmatter % States that we are now into Appendicies
\pagestyle{plain}
\printbibliography[heading=bibintoc] % Insert Bibliography
\input{Backmatter/Appendix} % Appendix
\end{document}
Я понимаю, что это похоже наРазделить книгу на несколько томовно требования к нумерации и форматированию различны.
решение1
Я опишу способ, как работать с book
классом, используяэтокПример кода минимален, но вы сможете перенести соответствующие части в свой реальный вариант использования.
см. обновление ниже в ответе на вопрос, заданный в комментарии
Вот два оглавления (с правильными гиперссылками):
Код:
\documentclass{book}
\usepackage{hyperref}
\usepackage{blindtext}
\usepackage{etoc}
\newcommand{\TableOfContents}{%
\centerline{\LARGE\scshape Thesis Contents}
\vspace{0.5cm}
\markboth{\MakeUppercase\contentsname}{\MakeUppercase\contentsname}
\phantomsection
\addcontentsline{toc}{chapter}{Thesis contents}
\etocsettagdepth {VolumeOne}{all}
\etocsettagdepth {VolumeTwo}{none}
\etocsettocstyle {\section*{Volume One}}{\bigskip}
\tableofcontents
\etocsettagdepth {VolumeOne}{none}
\etocsettagdepth {VolumeTwo}{all}
\etocsettocstyle {\section*{Volume Two}}{\cleardoublepage}
\tableofcontents
}
\begin{document}
\etocdepthtag.toc {VolumeOne}
\frontmatter
\vspace*{1cm}
\begin{center}
\huge\bfseries Volume One:\\ Oscillation Theory and Beyond
\end{center}
\vspace{2cm}
\TableOfContents
\mainmatter
\chapter{Foo}
\blindtext
\chapter{Bar}
\blindtext
\backmatter
\etocdepthtag.toc {VolumeTwo}
\vspace*{1cm}
\begin{center}
\huge\bfseries Volume Two:\\ Appendices
\end{center}
\vspace{2cm}
\TableOfContents
\chapter{Appendix}
\blindtext
\chapter{Another appendix}
\blindtext
\end{document}
Вот теперь вариант, где оглавление во втором томе перечисляет только приложения. Также нумерация страниц для второго тома перезапускается.
\documentclass{book}
\usepackage{hyperref}
\usepackage{blindtext}
\usepackage{etoc}
\newcommand{\TableOfContents}{%
\centerline{\LARGE\scshape Thesis Contents}
\vspace{0.5cm}
\markboth{\MakeUppercase\contentsname}{\MakeUppercase\contentsname}
\phantomsection
\addcontentsline{toc}{chapter}{Thesis contents}
\etocsettagdepth {VolumeOne}{all}
\etocsettagdepth {VolumeTwo}{none}
\etocsettocstyle {\section*{Volume One}}{\bigskip}
\tableofcontents
\etocsettagdepth {VolumeOne}{none}
\etocsettagdepth {VolumeTwo}{all}
\etocsettocstyle {\section*{Volume Two}}{\cleardoublepage}
\tableofcontents
}
\begin{document}
\etocdepthtag.toc {VolumeOne}
\frontmatter
\vspace*{1cm}
\begin{center}
\huge\bfseries Volume One:\\ Oscillation Theory and Beyond
\end{center}
\vspace{2cm}
\TableOfContents
\mainmatter
\chapter{Foo}
\blindtext
\chapter{Bar}
\blindtext
\mainmatter % to restart page numbering
\backmatter
\etocdepthtag.toc {VolumeTwo}
\vspace*{1cm}
\begin{center}
\huge\bfseries Volume Two:\\ Appendices
\end{center}
\vspace{2cm}
\etocsettagdepth {VolumeOne}{none}
\etocsettagdepth {VolumeTwo}{all}
\etocsettocstyle {\section*{\contentsname}\phantomsection
\addcontentsline{toc}{chapter}{\contentsname}}
{\cleardoublepage}
\markboth{\MakeUppercase\contentsname}{\MakeUppercase\contentsname}
\tableofcontents
\chapter{Appendix}
\blindtext
\chapter{Another appendix}
\blindtext
\end{document}
решение2
ОБНОВЛЯТЬ
Это оказалось на удивление проблематичным. Изначально я опубликовал то, что, как я думал, было решением, основанным на изменении, \tableofcontents
которое длилось около десяти секунд, прежде чем я обнаружил, что это не будет работать с hyperref
. Затем я нашел что-то, что работало, но было неуклюжим. Эта версия более приятна: мой первоначальный инстинкт (изменение способа печати таблиц содержания для включения двух из них) был верным; проблема была в hyperref
. Решение заключалось в предложении в ответе pst ниже, которое memoir
могло бы сделать это. Мне пришло в голову, что, memoir
вероятно, решило проблему, с которой я столкнулся, и так оно и вышло.
Поэтому все нижеследующее написано во многом благодаря коду Питера Уилсона (и, я думаю, в нем также есть что-то от Дэвида Карлайла), который я взял на вооружение, а также предложению pst взглянуть на Memoir, без которого, я не думаю, что я когда-либо нашел бы решение проблемы с hyperref
.
МЕТОД
Мы определяем команду
\startvolume{name}
для начала нового тома. Поскольку Questioner, по-видимому, не использует "part", я просто адаптировал это, хотя, несомненно, было бы элегантнее определить новую единицу секционирования.\startvolume
очищает страницу, сбрасывает нумерацию страниц на 1, печатает вводный форзац и делает соответствующую запись в оглавлении.Чтобы сохранить оглавление четким, мы переопределяем внутренний макрос
l@part
, так что он не пытается вставить номер страницы в список. Мы также играем с определением , чтобы\part
гарантировать, что мы не получим номер страницы на странице нашего тома. (Правильный дизайн книги требует, чтобы форзац для тома был (a) первым, перед титульным листом; (b) не имел номера фолио, но (c) рассматривался как фолио 1.)Затем часть, которая в принципе кажется простой, но оказалась сложной. Стандартное определение LaTeX означает,
\tableofcontents
что у вас может быть только один: как только он напечатан, необходимый файл «затирается». Это следствие того, как\@starttoc
он написан. Это несложно изменить в принципе, и становится сложным только потому, чтоhyperref
возится тоже. В любом случае,memoir
имеет правильный код, который я реквизировал.Все это работало, но hyperref жаловался, потому что сброс нумерации страниц сбивал его с толку. Я пробовал разные решения. В конце концов, самым простым и надежным оказалось использование опции
hypertexnames=false
; это, кажется, работает, но это настоящее программирование карго-культа худшего сорта, поскольку я не могу притворяться, что действительно понимаю, что происходит.Потребовалось немного доработать
\backmatter
, поскольку (так как никто не ожидал, что это может сразу последовать из\frontmatter
!) он не сбрасывает нумерацию страниц на римскую.
Я не тестировал это всесторонне с очень многими пакетами, которые вы используете, и поэтому, без сомнения, это может потребовать некоторой возни. Но это, по крайней мере, начало.
\documentclass[a4paper,oneside]{book}
\usepackage{filecontents}% Just for demonstration
\begin{filecontents}{\jobname-c.tex}
\chapter{Blah}
\lipsum% Just for demonstration
\chapter{More Blah}
\lipsum
\end{filecontents}
\usepackage[hypertexnames=false]{hyperref}
\usepackage{lipsum}
\makeatletter
%This is to enable an unpaginated "part" entry in the TOC, based on l@part in book.cls
\renewcommand*\l@part[2]{%
\ifnum \c@tocdepth >-2\relax
\addpenalty{-\@highpenalty}%
\addvspace{2.25em \@plus\p@}%
\setlength\@tempdima{3em}%
\begingroup
\parindent \z@ \rightskip \@pnumwidth
{\leavevmode
\large \bfseries #1}\par
\nobreak
\global\@nobreaktrue
\everypar{\global\@nobreakfalse\everypar{}}%
\endgroup
\fi}
%And this is simply to ensure that we get an empty page for the volume titles
\renewcommand\part{%
\if@openright
\cleardoublepage
\else
\clearpage
\fi
\thispagestyle{empty}%
\if@twocolumn
\onecolumn
\@tempswatrue
\else
\@tempswafalse
\fi
\null\vfil
\secdef\@part\@spart}
%backmatter needs to be patched to reset pagination to arabic
\renewcommand\backmatter{%
\if@openright
\cleardoublepage
\else
\clearpage
\fi
\pagenumbering{arabic}%
\@mainmatterfalse}
\newcommand{\secondtableofcontents}{%
\tableofcontents
\if@filesw
[Table of Contents will generate here]\par
\typeout{Warning: No second table of contents generated. Rerun with \nofiles once all references are stable.}
\fi}
%Finally we patch the \@starttoc macro so that it doesn't clobber the .toc file,
%this code is taken straight from memoir. We are using hyperref here, but for
%completeness we provide for both
\renewcommand{\@starttoc}[1]{%
\begingroup\makeatletter
\@input{\jobname.#1}%
\if@filesw
\AtEndDocument{%
\expandafter\ifx\csname tf@#1\endcsname\relax
\expandafter\newwrite\csname tf@#1\endcsname
\immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
\fi
}%
\fi
\@nobreakfalse
\endgroup}
\@ifpackageloaded{hyperref}{%
\Hy@AtBeginDocument{%
\ifx\hyper@last\@undefined
\def\@starttoc#1{%
\begingroup\makeatletter
\IfFileExists{\jobname.#1}{%
\Hy@WarningNoLine{%
old #1 file detected, not used; run LaTeX again%
}%
}{}%
\if@filesw
\AtEndDocument{%
\expandafter\ifx\csname tf@#1\endcsname\relax
\expandafter\newwrite\csname tf@#1\endcsname
\immediate\openout \csname tf@#1\endcsname \jobname.#1\relax
\fi
}
\fi
\@nobreakfalse
\endgroup
}%
\fi
}
}
% \startvolume{Title} at beginning of each volume: print a starting page
% for hyperref to grab and add contents line
\newcommand{\startvolume}[1]{%
\cleardoublepage%
\setcounter{page}{1}%
\part*{#1}%
\addcontentsline{toc}{part}{#1}%
}
\makeatother
\begin{document}
\frontmatter
\startvolume{I}
\tableofcontents
\mainmatter
\input{\jobname-c.tex}
\frontmatter
\startvolume{II}
\tableofcontents
\backmatter
\input{\jobname-c.tex}
\end{document}
решение3
Если изменение с book
на memoir
приемлемо на этом позднем этапе процесса, вы можете использовать это. Одной из его особенностей является то, что \tableofcontents
и подобные команды могут повторяться, поскольку они не очищаются при использовании, как в стандартных классах. Вот неотшлифованное доказательство концепции того, как это сделать в memoir
, создавая результат, который впоследствии можно разделить на два тома.
\documentclass{memoir}
\usepackage{blindtext}
\begin{document}
\author{A. Uthor}
\title{The Book -- Volume One}
\frontmatter
\addcontentsline{toc}{part}{Volume one}
\maketitle
\newpage
\tableofcontents*
\mainmatter
\chapter{Foo}
\blindtext
\chapter{Bar}
\blindtext
% Restart page numbering
\frontmatter
\addcontentsline{toc}{part}{Volume two}
\title{The Book -- Volume Two}
\maketitle
\newpage
\tableofcontents*
\mainmatter
\backmatter
\chapter{Appendix}
\blindtext
\chapter{Another appendix}
\blindtext
\end{document}