我正在尝试创建一个文档,其中每个部分都有两种不同类型的标题。
第一个标题需要放在目录页中,格式如下
区块 #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
。这两个包都不是必需的,只是我对它们比较熟悉,所以为了方便使用它们。 - 您所需的大部分内容只是简单的格式更改。只有两个要求需要进行一些工作:
- 自动计算区块中的会话数
- 块编号的格式(我假设第 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}