重新定義“\section*”,使其行為*完全*與“\section”相同,只是省略了數字

重新定義“\section*”,使其行為*完全*與“\section”相同,只是省略了數字

「如何將未編號的部分放入目錄中?」這個問題有很多變體。 …

沒有一個答案對我有任何好處,因為它們都涉及將\addcontentsline,再加上其他東西(\mark\phantomsection,...?) 貼在文檔中的正確位置。就我而言,\section*命令是由包發出的,它們沒有給我鉤子來在正確的位置插入東西;而且還不清楚我到底需要哪一套「其他東西」。如果我可以重新定義\section*,使其行為與未加星號的版本完全相同,只是它不印節號,那麼它會更簡單、更健壯。

我該怎麼做

注意:KOMA-Script 類別不是一個選項。我目前正在使用普通article草稿,我最終需要參加期刊課程。

註2(來自對嘗試答案的評論):\secnumdepth全局調整對我來說不起作用,因為(a)我仍然想要未加星號等的正常部分編號,以及(b)無法說服\section發出命令的包使用\section*相反\section

答案1

您可以重新定義\section以捕獲並根據何時使用帶有星號的版本進行條件調整。找到後\section*,像您一樣發出它\section,但是透過計數器的適當設定去除數位列印機制secnumdepth

在此輸入影像描述

\documentclass{article}

\usepackage{xparse}

\let\oldsection\section
\makeatletter
\newcounter{@secnumdepth}
\RenewDocumentCommand{\section}{s o m}{%
  \IfBooleanTF{#1}
    {\setcounter{@secnumdepth}{\value{secnumdepth}}% Store secnumdepth
     \setcounter{secnumdepth}{0}% Print only up to \chapter numbers
     \oldsection{#3}% \section*
     \setcounter{secnumdepth}{\value{@secnumdepth}}}% Restore secnumdepth
    {\IfValueTF{#2}% \section
       {\oldsection[#2]{#3}}% \section[.]{..}
       {\oldsection{#3}}}% \section{..}
}
\makeatother

\begin{document}

\tableofcontents

\section{TestA}

\section*{TestB}

\end{document}

xparse提供了一個簡單的介面,用於(重新)定義可能具有starred 版本以及o可選參數的命令。

相關內容