将分节的页面范围(即包括该节的最后一页)写入目录(使用 etoc)

将分节的页面范围(即包括该节的最后一页)写入目录(使用 etoc)

这个问题可能有点奇怪:我正在为学生编写一个脚本,其中我重置了每个部分的页数并添加了\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)。

通过一些辅助宏,我们可以配置排版,例如使用页码颜色等......

相关内容