目录页和计数器

目录页和计数器

我正在尝试创建一个文档,其中每个部分都有两种不同类型的标题。

第一个标题需要放在目录页中,格式如下

区块 #1 -- #2 (3 节课)

其中 #1 是具有两位小数的数字,每次增加 0.01(即,第一部分的数字为 0.00,第二部分的数字为 0.01,第三部分的数字为 0.02,依此类推,直到 0.42),#2 只是标题。

在此之下,我需要为我的会话添加第二个标题。每个部分通常有 3 个会话,但并非总是如此。我尝试使用计数器,但无法使其工作。

我希望我可以使用 \section 作为第一个标题,并使用计数器作为第二个标题,以便自动从 1 开始对会话进行编号。

下面是完成的文档的示例。

非常感谢,温迪

%%内容页

内容

区块 0.00 简介 (2 节课程)

区块 0.01 数到 3(3 节课)

课程 0.02 数到 6(3 节课)

课程 0.03 数到 9(3 节课)

%%主文档

区块 0.00 简介 (2 节课程)

第 1 节

啦啦啦

第 2 节

啦啦啦

区块 0.01 数到 3(3 节课)

第 3 节

啦啦啦

第四节

啦啦啦

第 5 节

啦啦啦

答案1

您的文档的整体结构有点不清楚。希望以下内容能为您提供一些可供您使用和修改的内容。

  • 下面使用\titlesec\titletoc。这两个包都不是必需的,只是我对它们比较熟悉,所以为了方便使用它们。
  • 您所需的大部分内容只是简单的格式更改。只有两个要求需要进行一些工作:
    1. 自动计算区块中的会话数
    2. 块编号的格式(我假设第 10 个块应该是 0.10 而不是 0.010)。
  • 以下代码将“Block”实现为\section,将“Session”实现为\subsection
\documentclass{article}
\usepackage[explicit]{titlesec}
\usepackage{titletoc}

\makeatletter
% Continuous numbering of sessions
\counterwithout{subsection}{section}
% Helper macro to register the first and last sessions in a block, as well as the total number of sessions
\newcommand*\count@sessions[2]{%
        \ifcsname sessions@#1@start\endcsname
        \else
                \expandafter\gdef\csname sessions@#1@start\endcsname{#2}
        \fi
        \expandafter\gdef\csname sessions@#1@end\endcsname{#2}
        \expandafter\xdef\csname sessions@#1@total\endcsname{\the\numexpr #2 + 1 - \csname sessions@#1@start\endcsname\relax}
}
% Helper macro to display to total number of sessions in a block; exists only to use singular (session) if there is only one session. 
\newcommand*\display@total@sessions[1]{%
        \ifcsname sessions@#1@start\endcsname%
                \if\csname sessions@#1@total\endcsname1%
                        (1~session)%
                \else%
                        (\csname sessions@#1@total\endcsname~sessions)%
                \fi
        \fi}
% One can also display the list of sessions, for example
\newcommand*\display@sessions@list[1]{%
        \ifcsname sessions@#1@start\endcsname%
                \if\csname sessions@#1@total\endcsname1%
                        (Session \csname sessions@#1@start\endcsname)%
                \else
                        (Sessions \csname sessions@#1@start\endcsname--\csname sessions@#1@end\endcsname)%
                \fi\fi}
% Pad a number with a zero if less than 10 (no extra checks, assume nonnegative.
\newcommand*\padnum[1]{%
        \ifnum10>#1\relax%
                0#1%
        \else%
                #1%
        \fi
}

%%% Two options below uncomment the first line to display the total number of sessions in a block; uncomment the second line to display 
%%% the list of all sessions in that block
\titleformat{\section}{\bfseries\large}{Block 0.\padnum{\thesection}}{0.5em}{#1 \display@total@sessions{\thesection}}
%\titleformat{\section}{\bfseries\large}{Block 0.\padnum{\thesection}}{0.5em}{#1 \display@sessions@list{\thesection}}
\titleformat{\subsection}{\itshape}{Session \thesubsection}{0pt}{}[\immediate\write\@auxout{\string\count@sessions{\thesection}{\thesubsection}}]

% Finally, format the toc
\titlecontents{section}[0em]{\normalfont}{Block 0.\padnum{\thecontentslabel} }{}{ \display@total@sessions{\thecontentslabel}{\hspace{1ex}\titlerule*[1ex]{.}}\contentspage}
\setcounter{tocdepth}{1}
\makeatother

\begin{document}

\tableofcontents
\section{Introduction}

\subsection{}

\section{Counting to 3}

\subsection{}

\subsection{}

\section{Countering to 6}

\subsection{}

\subsection{}

\subsection{}

\end{document}

在此处输入图片描述

相关内容