“如何将未编号的部分放入目录中?”这个问题有很多变体......
对我来说,这些答案都没什么用,因为它们都涉及将\addcontentsline
,可能还有其他内容(\mark
,\phantomsection
,...?)粘贴到文档中的正确位置。就我而言,命令\section*
是由包发出的,它们没有给我钩子来将内容插入到正确的位置;而且我不清楚我到底需要什么“其他内容”。如果我可以重新定义,\section*
使其行为与非星号版本完全相同,除了它不打印节号外,它会更简单、更强大。
我该怎么做那?
注意:KOMA-Script 课程不是一种选择。我目前使用纯文本article
来写草稿,最终我需要参加期刊课程。
注 2(来自对尝试回答的评论):\secnumdepth
全局调整对我来说不起作用,因为(a)我仍然希望从无星号\section
等进行正常的章节编号,并且(b)发出命令的包\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
可选参数的命令。