![将分节的页面范围(即包括该节的最后一页)写入目录(使用 etoc)](https://linux22.com/image/383088/%E5%B0%86%E5%88%86%E8%8A%82%E7%9A%84%E9%A1%B5%E9%9D%A2%E8%8C%83%E5%9B%B4%EF%BC%88%E5%8D%B3%E5%8C%85%E6%8B%AC%E8%AF%A5%E8%8A%82%E7%9A%84%E6%9C%80%E5%90%8E%E4%B8%80%E9%A1%B5%EF%BC%89%E5%86%99%E5%85%A5%E7%9B%AE%E5%BD%95%EF%BC%88%E4%BD%BF%E7%94%A8%20etoc%EF%BC%89.png)
这个问题可能有点奇怪:我正在为学生编写一个脚本,其中我重置了每个部分的页数并添加了\thesection
页面标记,例如页码1.1-2
。因此,所有页面都标记明确,而我仍然能够将页面插入到部分而不影响后续页码。
然而,这样做的缺点是,学生无法从页码中判断他们是否真的拥有某一节的所有页面。因此,我希望在目录中不仅显示某一节的第一页码,还显示最后一页码。在下面的 MWE 中,目录应该显示第 1.1 节从第 1.1-1 页开始,到第 1.1-5 页结束。
这可能吗?etoc
无论如何我都在使用该软件包,因此与本地 TOC 集成的解决方案将是理想的选择。
我很抱歉我的 MWE 不够简洁。我认为最好展示一些接近我的用例的东西。
\documentclass{scrbook}
\usepackage{blindtext}
\usepackage{calc, setspace}
\setstretch{1.15}
\setlength{\parindent}{0pt}
\usepackage{etoc}
\etocsetnexttocdepth{subsection}
\setcounter{tocdepth}{2}
\renewcommand*{\thepage}{\thesection-\arabic{page}}
\newlength{\mypnumwidth}\settowidth{\mypnumwidth}{D-0.D-00}
\etocsetstyle{chapter}{}{}
{\bfseries\etocifnumbered{\makebox[5mm][l]{\etocnumber}}{}\etocname\hfill
\makebox[\mypnumwidth][r]{\etocpage}\par}{}
\etocsetstyle{section}{\smallskip}{\smallskip}
{\mdseries\hspace{5mm}%
\etocifnumbered{\makebox[8mm][l]{\etocnumber}\etocname%
\nobreak\leaders\hbox{\normalsize\hbox to 1ex {\hss.\hss}}\hfill%
\makebox[\mypnumwidth][r]{\etocpage}}{%
\etocname}%
\par}{\bigskip}
\etocsetstyle{subsection}{\leftskip=13mm \rightskip=\mypnumwidth\advance\rightskip by 1ex%
\nobreak\etocskipfirstprefix\smallskip\begin{spacing}{1}\small}
{$\;${\footnotesize\textbullet}\allowbreak$\;$}{\etocname}{\end{spacing}\medskip\leftskip0mm\rightskip0mm}
\begin{document}
%\tableofcontents
\chapter{Chapter 1 Header}
\etocsettocstyle{\subsection*{Contents}}{}%
\localtableofcontents
\cleardoublepage
\section{Section 1.1 Header}\setcounter{page}{1}
\subsection{Subsection 1.1.1 Header}\Blindtext
\subsection{Subsection 1.1.2 Header}\Blindtext
\subsection{Subsection 1.1.3 Header}\Blindtext\Blindtext
\cleardoublepage
\section{Section 1.2 Header}\setcounter{page}{1}
\subsection{Subsection 1.2.1 Header}\Blindtext
\subsection{Subsection 1.2.2 Header}\Blindtext
\end{document}
我查看了建议的主题
但如果它们包含对我有帮助的信息,我却无法提取。最后一个非常接近,但etoc
不幸的是,我无法将其与自己结合起来。所以我很感激任何意见。非常感谢!
答案1
\documentclass{scrbook}
\usepackage{blindtext}
\usepackage{calc, setspace}
\setstretch{1.15}
\setlength{\parindent}{0pt}
\usepackage{etoc}
% \etocsetnexttocdepth{subsection}% better to use this where
% really needed, not here
\setcounter{tocdepth}{2}% 2 = subsection anyway
\renewcommand*{\thepage}{\thesection-\arabic{page}}
\newlength{\mypnumwidth}\settowidth{\mypnumwidth}{9.9-99 to 9.9.99}
\etocsetstyle{chapter}
{}
{}
{\bfseries
\etocifnumbered
{\makebox[5mm][l]{\etocnumber}}
{}%
\etocname\hfill
\makebox[\mypnumwidth][r]{\etocpage}\par
}
{}
\etocsetstyle{section}
{\smallskip}
{\smallskip}
{\mdseries
\hspace{5mm}%
\etocifnumbered
{\makebox[8mm][l]{\etocnumber}%
\etocname
\nobreak\leaders\hbox{\normalsize\hbox to 1ex {\hss.\hss}}\hfill
\makebox[\mypnumwidth][r]
{\etoclink{\PageRangeOf{\etocthenumber}}}%
}
{\etocname}%
\par
}
{\bigskip}
\etocsetstyle{subsection}
{\leftskip=13mm
\rightskip=\mypnumwidth
\advance\rightskip by 1ex
\nobreak\etocskipfirstprefix
\smallskip
\begin{spacing}{1}\small
}
{$\;${\footnotesize\textbullet}\allowbreak$\;$}
{\etocname}
{\end{spacing}\medskip
\leftskip0mm
\rightskip0mm }
\makeatletter
\newcommand\PageRangeOf[1]{\@nameuse{PageRange#1}}
\newcommand\StorePageRange{%
\write\@auxout
{\noexpand\expandafter\gdef\noexpand\csname
PageRange\thesection\noexpand\endcsname
{\thesection-1 to \thesection-\the\value{page}}}%
}%
\makeatother
% \usepackage{hyperref}% testing
\begin{document}
%\tableofcontents
\chapter{Chapter 1 Header}
\etocsettocstyle{\subsection*{Contents}}{}
\localtableofcontents
\cleardoublepage
\section{Section 1.1 Header}\setcounter{page}{1}
\subsection{Subsection 1.1.1 Header}\Blindtext
\subsection{Subsection 1.1.2 Header}\Blindtext
\subsection{Subsection 1.1.3 Header}\Blindtext\Blindtext
\StorePageRange
\cleardoublepage
\section{Section 1.2 Header}\setcounter{page}{1}
\subsection{Subsection 1.2.1 Header}\Blindtext
\subsection{Subsection 1.2.2 Header}\Blindtext
\StorePageRange
\end{document}
用\StorePageRange
. 结束每个部分(这一定不能出现在 IIRC 之后的文档末尾\clearpage
)。
通过一些辅助宏,我们可以配置排版,例如使用页码颜色等......