`\section*` を再定義して、数字を除いた `\section` と *まったく* 同じように動作するようにします。

`\section*` を再定義して、数字を除いた `\section` と *まったく* 同じように動作するようにします。

「番号が付いていないセクションを目次に入れるにはどうしたらいいですか?」という質問には、さまざまなバリエーションがあります...

回答のどれも私には役に立ちません。なぜなら、それらはすべて\addcontentsline、 に加えて、おそらく他のもの ( \mark\phantomsection、 ...?) をドキュメント内の適切な場所に貼り付ける必要があるからです。私の場合、コマンドは\section*パッケージによって発行されており、適切な場所にものを挿入するためのフックは提供されません。また、必要な「他のもの」のセットが正確に何であるかは不明です。 を再定義して、\section*セクション番号を印刷しないことを除いて、星なしバージョンとまったく同じように動作するようにすることができれば、よりシンプルで堅牢になります。

私はどのように行いますかそれ?

注: KOMA-Script クラスはオプションではありません。現在、articleドラフトにはプレーンを使用していますが、最終的にはジャーナルのクラスを追加する必要があります。

注 2 (回答の試みに対するコメントより):\secnumdepthグローバルに調整してもうまくいきません。理由は、(a) 星なし\sectionなどからの通常のセクション番号付けがまだ必要なため、(b) コマンドを発行しているパッケージに、代わりに\section*plain を使用するように説得できないためです\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だけでなく、tar バージョンを持つ可能性のあるコマンドを (再) 定義するための簡単なインターフェイスを提供します。o

関連情報