我正在参考教科书章节中的特定章节撰写讲义。
我使用多本教科书,因此我的讲义的第 1 章和第 2 章可能来自教科书 X,但讲义的第 3 章是教科书 Y 的第 5 章。章节也是如此。我只是希望讲义中的章节编号能够反映教科书中各个部分的真实章节编号。我在每个章节/部分的开头都放了一个注释来标识当前的教科书。
所以我的问题是:我如何亲自重新编号报告中的特定章节/部分?
答案1
这是一个完整的实现,允许您\chapter
自行指定和部分编号。它可以与/不与hyperref
:
\documentclass{report}
\usepackage{regexpatch}% http://ctan.org/pkg/regexpatch
\makeatletter
\xpatchcmd*{\@sect}{the#1}{fixed@seccntformat}{}{}% Insert fixed reference in ToC
\xpatchcmd*{\@sect}{\relax\@svsec}{\relax\fixed@seccntformat\quad}{}{}% Insert fixed reference in heading
\xpatchcmd{\l@chapter}{1.5em}{3.5em}{}{}% Lengthen space for ToC number entry
\newcommand{\fixchapters}{%
\let\old@chapter\chapter%
\renewcommand{\chapter}[1]{\xdef\thechapter{##1}% Store chapter #
\old@chapter}% Old chapter
}
\let\old@section\section
\renewcommand{\section}[1]{\xdef\fixed@seccntformat{#1}% Store section #
\old@section}% Old section
\let\old@subsection\subsection
\renewcommand{\subsection}[1]{\xdef\fixed@seccntformat{#1}% Store subsection #
\old@subsection}% Old subsection
\makeatother
\usepackage{hyperref}% http://ctan.org/pkg/hyperref
\begin{document}
\tableofcontents
\fixchapters
\chapter{A.1.B}[Here's a chapter]{A chapter}
\section{3.4}{A section}
\section{1.2}{Another section}
\chapter{1718}{Another chapter}
\section{5}{Yet another section}
\section{8.8}*{Also a section}
\end{document}
对于 ,其想法不同\chapter
,但对于所有分段命令而言都类似。对于分段,编号存储在\fixed@seccntformat
分段设置宏中并在其中进行修补\@sect
。对于\chapter
,计数器打印宏\thechapter
将使用所需编号进行更新。
提供的原因\fixchapters
在于\frontmatter
使用星号变体的元素\chapter
嵌入在宏中,例如\tableofcontents
和\listof
-clan。当然,如果需要,可以采用更好的接口。
一些注意事项:
该接口要求您为所有分段宏提供一个强制参数作为第一个参数。因此您将使用
\section{<number>}[<ToC>]{<title>}
总是. 类似\chapter{<number>}[<ToC>]{<title>}
。根据章节/节号长度,您可能需要更新
\l@chapter
和/或\l@<section>
宏以在目录中留出更多空间。您会注意到,在上面的示例中,我已将常规1.5em
章节\numberline
宽度增加到3.5em
。
答案2
我不太清楚你正在寻找的实现。这是一个想法,但我可能没有抓住重点:
\documentclass{report}
\usepackage{lipsum}
\renewcommand{\chaptername}{Lecture}
\usepackage{xparse}
\ExplSyntaxOn
\tl_new:N \l_my_lecture_book_title_tl
\tl_new:N \l_my_lecture_author_tl
\newcounter{lecturenumber}
\keys_define:nn{ my_lectures }
{
chapter . code:n = { \setcounter{chapter}{\number\numexpr#1\relax}},
section . code:n = { \setcounter{section}{\number\numexpr#1-1\relax}},
book . tl_set:N = \l_my_lecture_book_title_tl,
author . tl_set:N = \l_my_lecture_author_tl
}
\NewDocumentCommand{\mylecture}{ om }
{
\setcounter{lecturenumber}{\thechapter}
\keys_set:nn { my_lectures } { #1 }
\section[#2]{#2\hspace*{\fill}\newline
{\small \tl_use:N \l_my_lecture_book_title_tl
\hspace*{\fill}
(\tl_use:N \l_my_lecture_author_tl)}}
\setcounter{chapter}{\thelecturenumber}
}
\ExplSyntaxOff
\pagestyle{empty}
\begin{document}
\tableofcontents
\chapter{Modeling Random Times}
\mylecture[chapter=8,
section=5,
book={Stochastic Differential Equations},
author={Bernt \O{}ksendal},
]{What's a Random Time Change}
\lipsum[1-3]
\mylecture[chapter=24,
section=2,
book={Statistics},
author={Freedman, Pisani, Purves}
]{Modeling Random Events}
\lipsum[4-5]
\chapter{Testing}
\end{document}
存在几个问题,其中一些可能是:
索引表的编号会稍微令人困惑。但您可能并不关心这一点。如果您关心,请详细说明您希望如何处理。
该
\section
命令使用可选参数调用仅仅是因为我认为您可能需要一个目录。