此处附有最低工作代码。如果我将 \newcommand{\numsections}{1} 中的 1 更改为 0,我会得到没有编号的标题,而要获得编号标题,我必须转到 .cls 文件。我不希望用户进入 .cls 文件来更改是否应使用章节编号!请检查。
\documentclass[ieee]{file}
\begin{document}
\section{first section}
\end{document}
和 .cls 文件
\ProvidesClass{file}
\LoadClass[12pt,a4paper]{report}
\newcommand{\numsections}{1}
\usepackage{titlesec}
\if\numsections1
\titleformat{\section}{}{\thesection.\ }{}{}
\else
\titleformat{\section}{}{}{}{}
\fi
答案1
这种功能通常通过类选项进行管理。因此,您可以在文件中写入file.cls
:
\newif\if@unnumberedsections % ❶
\@unnumberedsections
\DeclareOption{unnnumberedsections}
{\@unnumberedsectionstrue} % ❶
\LoadClass[12pt,a4paper]{report}
\RequirePackage{titlesec}
\if@unnumberedsections % ❶
\titleformat{\section}{}{\thesection.\ }{}{}
\else
\titleformat{\section}{}{}{}{}
\fi
我在这里做了一些小修改,使用 TeX 内置\newif
的 ❶ 功能,这是管理布尔条件的常用方法。¹
选项处理由 ❷ 管理\DeclareOption
,它指示在选项存在时要执行的代码。这将由\ProcessOptions
以下命令执行:不是出现在这里,至少不是明确的,但由于它将在您加载report
类时进行管理,通过在加载报告类之前声明该选项,它将在发生这种情况时执行(这意味着我们需要在之前声明该选项\LoadClass
。
但等一下,这就是你想要做的吗?
由于您在此处所做的更改是删除章节编号,您真的要使用此处使用的机制吗?请注意,如果您有子章节,则它们仍将编号为 1.1.1、1.1.2 等。
LaTeX 提供了一种使用计数器控制编号深度的机制secnumdepth
。您可能实际上想要做的是将您的选项定义为:
\DeclareOption{unnumberedsections}
{\setcounter{secnumdepth}{0}}
这将导致章节以下的所有内容均未编号。
- 这是 TeX 编程的众多特性之一,因为实际上没有变量,一切都通过宏扩展进行。