.cls 文件中的 IF 语句。如何从 .t​​ex 文件控制它?

.cls 文件中的 IF 语句。如何从 .t​​ex 文件控制它?

此处附有最低工作代码。如果我将 \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}}

这将导致章节以下的所有内容均未编号。


  1. 这是 TeX 编程的众多特性之一,因为实际上没有变量,一切都通过宏扩展进行。

相关内容