「如何將未編號的部分放入目錄中?」這個問題有很多變體。 …
沒有一個答案對我有任何好處,因為它們都涉及將\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
提供了一個簡單的介面,用於(重新)定義可能具有s
tarred 版本以及o
可選參數的命令。