我正在尝试创建一个允许在子段落下进行分段的 latex 类。为此,我修改了article.cls
texlive 发行版的类,添加了两个选项\thesubsubsubsection
和\thesubsubsubsubsection
。所以现在,分段树如下所示:
\thesection
\thesubsection
\thesubsubsection
\thesubsubsubsection
\thesubsubsubsubsection
\theparagraph
\thesubparagraph
请参看下文myarticle.cls
以及mysectioning.tex
由此产生的mysectioning.pdf
。
我在编号、目录和章节格式方面实现了想要的效果。我遇到的唯一问题是,在新的两个标题\thesubsubsubsection
和中\thesubsubsubsubsection
,标题标题在下一段中以缩进文本的形式重复出现(请参阅下面的第 1.1.1.1 和 1.1.1.1.1 节)。
你知道我该如何避免这种行为吗?
非常感谢您的帮助和想法!
Sebastian
答案1
标题的重复源于对部分内容的呼吁标记也就是说,每个编号的部分单元\<section>
都有一个关联的\<section>mark
,用于将内容打印到页眉/页脚。LaTeX 内核将这些(而不是类)定义为
\let\sectionmark\@gobble
\let\subsectionmark\@gobble
\let\subsubsectionmark\@gobble
\let\paragraphmark\@gobble
\let\subparagraphmark\@gobble
这样他们都可以没有什么(它们是\@gobble
它们的论点)但它们是有定义的。因此,你需要添加
\let\subsubsubsectionmark\@gobble
\let\subsubsubsubsectionmark\@gobble
在类文件的某个地方,它们至少被定义。
您可能想知道,既然调用了未定义的标记,为什么没有报告错误……?那是因为它们是通过使用以下方法通过c
控制s
序列构造调用的
\csname <section>mark\endcsname
\@sect
以下是-的摘录\@startsection
当您执行应编号的通用部分单元时:
\def\@sect#1#2#3#4#5#6[#7]#8{%
\ifnum #2>\c@secnumdepth
\let\@svsec\@empty
\else
\refstepcounter{#1}%
\protected@edef\@svsec{\@seccntformat{#1}\relax}%
\fi
\@tempskipa #5\relax
\ifdim \@tempskipa>\z@
\begingroup
#6{%
\@hangfrom{\hskip #3\relax\@svsec}%
\interlinepenalty \@M #8\@@par}%
\endgroup
\csname #1mark\endcsname{#7}% <=================== Call the sectional unit mark
\addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}%
\fi
#7}%
\else
\def\@svsechd{%
#6{\hskip #3\relax
\@svsec #8}%
\csname #1mark\endcsname{#7}%
\addcontentsline{toc}{#1}{%
\ifnum #2>\c@secnumdepth \else
\protect\numberline{\csname the#1\endcsname}%
\fi
#7}}%
\fi
\@xsect{#5}}
突出显示的宏显示对标记的调用。如果不知道控制序列,这种类型的调用不会报告错误。