![如何在标题页上创建伪造的目录?](https://linux22.com/image/431016/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%A0%87%E9%A2%98%E9%A1%B5%E4%B8%8A%E5%88%9B%E5%BB%BA%E4%BC%AA%E9%80%A0%E7%9A%84%E7%9B%AE%E5%BD%95%EF%BC%9F.png)
我写了一本 2000 页的大书,因此我必须将其分成 4 或 5 卷,每卷约 500 页(250 张纸),以解决印刷和装订问题。每卷都有自己的封面标题页,设计如下代码所示。如果能添加一个部分目录(真正的完整目录位于本书的第一卷内)。当然,每个页码都会手动添加到这些“假目录”中,因为标题页与主文档是分开制作的。我会在这些假的部分目录中仅列出章节,因为它们将显示在一页上。
那么,您建议如何使用下面的代码来构建这种“部分假目录”来代替哑文本部分?
\documentclass[letterpaper]{book}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\usepackage{libertine}
\renewcommand*\familydefault{\sfdefault}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{anysize}
\marginsize{1.5in}{1in}{0.5in}{0.5in}
\usepackage[x11names]{xcolor}
\definecolor{backgroundcolor}{RGB}{150, 170, 170}
\definecolor{andcolor}{RGB}{230, 255, 255}
\definecolor{subtitle}{RGB}{230, 255, 255}
\usepackage{graphicx}
\usepackage{afterpage}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand*{\maintitle}{\begingroup
\pagecolor{backgroundcolor}
\raggedright
{\hspace{-4pt}\fontsize{52}{0}\selectfont{Title 1}}
\vspace*{2\baselineskip}
\raggedleft
{\textcolor{subtitle}{\fontsize{45}{0}\selectfont {Part 1 of 5}}}
\vspace*{3\baselineskip}
\raggedleft
{\huge Author}
\vfill
\endgroup}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{titlepage}
\begin{tikzpicture}[remember picture, overlay]
\draw[line width = 1in,color = white] ($(current page.north west) + (0.25in,0.25in)$) rectangle ($(current page.south east) + (0.25in,-0.25in)$);
\draw[line width = 0.25pt,color = black] ($(current page.north west) + (0.75in,-0.25in)$) rectangle ($(current page.south east) + (-0.25in,0.25in)$);
\draw[line width = 1pt,color = white] ($(current page.north west) + (1in,-0.5in)$) rectangle ($(current page.south east) + (-0.5in,0.5in)$);
\end{tikzpicture}
\maintitle
Dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text.
\end{titlepage}
\end{document}
预览此代码的作用,并以红色显示假的 ToC 阵地:
答案1
该解决方案基于包etoc
,具有两步工作流程。
我准备了一本有近 2000 页编号的书的模型,以获得重要的目录。这本书分为四个部分,每个部分有三章。
\fakeTOC
我已经定义了在目录中添加条目作为其一部分的命令。稍后需要通过 生成部分目录etoc
。
带有伪目录的页面是使用命令根据您的设计生成的\fakeTOC{<part name>}
,并且根据要求包含整本书部分的部分目录。
这些添加的页面不会增加原始内容的页码!这样,部分目录的章节页码将与原始文档相同。
本地目录由包构建etoc
。当然,这个本地目录的布局是高度可定制的。我只添加了两条水平线。
主目录维护着类提供的布局。
初始目录:完整原始文件
带有伪造 TOC 的 TOC:跑步后generateFkTOC.tex
。
请注意,章节页码与原始目录中的页码相同。
提取带有伪造目录的页面:跑步后extractfkTOC.tex
由于您不希望在主文档中出现这些“假”页面,因此工作流程分为以下两步:
(1)在主文档中生成它们,添加 \fakeTOC{<partnumber>}
每个部分的开头,以便本地目录自动生成和更新通过etoc
。查看generateFkTOC.tex
(2)从主 pdf 文件中提取包含部分目录的四个页面,运行extractfkTOC.tex
这是generateFkTOC.tex
\documentclass[letterpaper,twoside]{book}
\usepackage{kantlipsum} % dummy text
\usepackage{libertine}
\usepackage{fancyhdr}
\usepackage{lastpage} % last page
\pagestyle{fancy}
\fancyhf{}
\rfoot{Page \thepage \, of \pageref{LastPage}}
%%% ************************************
\usepackage{etoc} % added <<<<<<<<<<<<
\newcounter{fkpart}
\newcommand{\fakeTOC}[1]{% % added <<<<<<<<<<<<
\cleardoublepage
\addtocounter{page}{-2} % decrease page counter
\addtocounter{fkpart}{1}
\addcontentsline{toc}{part}{\thefkpart\hspace{1em}#1}%
\begin{tikzpicture}[remember picture, overlay]
\draw[line width = 1in,color = white] ($(current page.north west) + (0.25in,0.25in)$) rectangle ($(current page.south east) + (0.25in,-0.25in)$);
\draw[line width = 0.25pt,color = black] ($(current page.north west) + (0.75in,-0.25in)$) rectangle ($(current page.south east) + (-0.25in,0.25in)$);
\draw[line width = 1pt,color = white] ($(current page.north west) + (1in,-0.5in)$) rectangle ($(current page.south east) + (-0.5in,0.5in)$);
\end{tikzpicture}
\begingroup
\thispagestyle{empty}
\pagecolor{backgroundcolor}
\sffamily
{\raggedright\fontsize{52}{52}\selectfont The Full Book}
\vspace*{2\baselineskip}
\raggedleft
{ \textcolor{subtitle}{\sffamily \fontsize{45}{45}\selectfont {Part #1 of 4}}}
\vspace*{3\baselineskip}
{\sffamily \huge Author}
\vfill
\localtableofcontents
\vfill
Dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text dumb text.
\newpage\null
\thispagestyle{empty}
\pagecolor{white}
\endgroup
\cleardoublepage
}
%%% ************************************
\usepackage[x11names]{xcolor}
\definecolor{backgroundcolor}{RGB}{150, 170, 170}
\definecolor{andcolor}{RGB}{230, 255, 255}
\definecolor{subtitle}{RGB}{230, 255, 255}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\frontmatter
\tableofcontents
\newpage\null\thispagestyle{empty}
\etocsettocstyle{\noindent\rule{\linewidth}{0.5pt}\vskip0.3\baselineskip\sffamily}%
{\noindent\rule{\linewidth}{0.5pt}\vskip0.5\baselineskip} % etoc style for local TOC
\mainmatter
\fakeTOC{1}% part #1 starts
\chapter{I-One}
1. \kant[1-5]
\chapter{I-Two}
\addtocounter{page}{150}
1. \kant[1-5]
\chapter{I-Three}
\addtocounter{page}{150}
1. \kant[1-5]
\fakeTOC{2} % part #2 starts
\chapter{II-Four}
2. \kant[1-5]
\chapter{II-Five}
\addtocounter{page}{350}
2. \kant[1-25]
\chapter{II-Six}
2. \kant[1-25]
\fakeTOC{3} % part #3 starts
\chapter{III-Seven}
3. \kant[1-5]
\chapter{III-Eight}
\addtocounter{page}{350}
3. \kant[1-25]
\chapter{III-Nine}
3. \kant[1-25]
\fakeTOC{4} % part #4 starts
\chapter{IV-Ten}
4. \kant[1-5]
\chapter{IV-Eleven}
\addtocounter{page}{350}
4. \kant[1-25]
\chapter{IV-Twelve}
4. \kant[1-25]
\end{document}
这是extractfkTOC.tex
。使用该包pdfpages
将带有伪造目录的页面提取到新的 pdf 文件中。页码是要从中提取的物理页面的数量generateFkTOC.tex
。
%%% extractfkTOC.tex from generateFkTOC.tex
\documentclass[letterpaper]{article}
\usepackage{pdfpages}
\begin{document}
\includepdf[pages=3]{generateFkTOC.pdf} % use page numbers of physical pages
\includepdf[pages=11]{generateFkTOC.pdf}
\includepdf[pages=31]{generateFkTOC.pdf}
\includepdf[pages=51]{generateFkTOC.pdf}
\end{document}
答案2
也许可以采用让每卷都成为完整的文档文件的方法。根据前一卷的最后数字设置每篇文档前言中的起始页码/章节等编号,以便在整个组中进行连续编号。除第一卷外,任何目录都只引用该卷中的条目。对于第一卷,用后续卷的 *.toc 文件扩展其 *.toc 文件。
答案3
好的,这是我需要做的快速而肮脏的方法:
\documentclass[letterpaper]{book}
\usepackage[T1]{fontenc}
\usepackage{microtype}
\usepackage{libertine}
\renewcommand*\familydefault{\sfdefault}
\usepackage[utf8]{inputenc}
\usepackage[french]{babel}
\usepackage{anysize}
\marginsize{1.5in}{1in}{0.5in}{0.5in}
\usepackage[x11names]{xcolor}
\definecolor{backgroundcolor}{RGB}{150, 170, 170}
\definecolor{andcolor}{RGB}{230, 255, 255}
\definecolor{subtitle}{RGB}{230, 255, 255}
\usepackage{graphicx}
\usepackage{afterpage}
\usepackage{tikz}
\usetikzlibrary{calc}
\newcommand*{\maintitle}{\begingroup
\pagecolor{backgroundcolor}
\raggedright
{\hspace{-4pt}\fontsize{52}{0}\selectfont{Big Book Title}}
\vspace*{2\baselineskip}
\raggedleft
{\textcolor{subtitle}{\fontsize{45}{0}\selectfont {Part 1 of 5}}}
\vspace*{3\baselineskip}
\raggedleft
{\huge Author's name}
\vfill
\endgroup}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\begin{document}
\begin{titlepage}
\begin{tikzpicture}[remember picture, overlay]
\draw[line width = 1in,color = white] ($(current page.north west) + (0.25in,0.25in)$) rectangle ($(current page.south east) + (0.25in,-0.25in)$);
\draw[line width = 0.25pt,color = black] ($(current page.north west) + (0.75in,-0.25in)$) rectangle ($(current page.south east) + (-0.25in,0.25in)$);
\draw[line width = 1pt,color = white] ($(current page.north west) + (1in,-0.5in)$) rectangle ($(current page.south east) + (-0.5in,0.5in)$);
\end{tikzpicture}
\maintitle
\LARGE
\raggedright
Chapitre 1. First chapter title \dotfill 1
\vspace*{0.5\baselineskip}
Chapitre 2. Second chapter title \dotfill 83
\vspace*{0.5\baselineskip}
Chapitre 3. Third chapter title \dotfill 109
\vspace*{0.5\baselineskip}
Chapitre 4. Fourth chapter title \dotfill 179
\vspace*{0.5\baselineskip}
Chapitre 5. Another chapter title \dotfill 269
\vspace*{0.5\baselineskip}
Chapitre 6. Some funny chapter title \dotfill 399
\vfill
\end{titlepage}
\end{document}
这并不理想,因为我需要手动放回章节标题和页码,但至少它能完成工作,而且做起来也不太麻烦,因为我有大约 20 个章节,分成 4 或 5 卷(所以要创建 4 个标题页,就像这个一样)。第一卷有真正的标题页(上面没有目录!),而真正的完整目录在卷内。
此代码的预览: