覆盖命令

覆盖命令

如何在 Latex 中部分重新实现现有命令?

我有一个\documentclass

\ProvidesClass{myclass}[My sample class]
\LoadClass{article}

当有人使用 时\subsection{},我真的希望将其视为他们写的\subsection*{}(没有章节编号)。在我的 中,*.cls我尝试过:

\renewcommand{\subsection}[1]{\subsection*}

但这只会导致 Latex 中出现无限循环,我需要终止该进程。我也尝试过:

\let\subsection\subsection*

但这只是让它\subsection等于自己,然后打印一个*

答案1

LaTeX 有一个内置机制。每个分段命令都分配有一个级别

第 1 部分
第 0 章第
1
节 第 2
款 第 3
款 第 4
段 第 5 项

一个班级可能没有章节,但为了统一,级别总是相同的。

您可以通过设置计数器来决定部分标题的编号级别secnumdepth

\setcounter{secnumdepth}{1}

只会对部分、章节(如果课程提供)和节进行编号。

有一个配套计数器tocdepth,用于控制在目录中列出的节级别。

当然,如果用户知道,他们可以覆盖您的设置secnumdepth。您对此无能为力。

即使你决定采用“重新定义”的方式

\let\latex@subsection\subsection
\renewcommand{\subsection}{\latex@subsection*}

用户仍然可以执行

\makeatletter
\let\subsection\latex@subsection
\makeatother

并推翻你的决定。

答案2

\documentclass{article}
\let\svsubsection\subsection
\renewcommand\subsection[1]{\svsubsection*{#1}}
\begin{document}
\section{Section Name}
\subsection{Subsection Name}
\end{document}

在此处输入图片描述

相关内容