Redefina `\section*` para que ele se comporte *exatamente* como `\section` exceto omitindo o número

Redefina `\section*` para que ele se comporte *exatamente* como `\section` exceto omitindo o número

Existem inúmeras variações na pergunta "Como faço para colocar minhas seções não numeradas no índice?" ...

e nenhuma das respostas é boa para mim, porque todas envolvem colar \addcontentsline, além de talvez outras coisas ( \mark, \phantomsection, ...?), no lugar certo do documento. No meu caso, os \section*comandos estão sendo emitidos por pacotes e não me dão ganchos para inserir coisas no lugar certo; e também não está claro exatamente de que conjunto de "outras coisas" eu preciso. Seria mais simples e robusto se eu pudesse simplesmente redefinir \section*para que ele se comportasse exatamente como sua versão sem estrela, exceto que não imprime um número de seção.

Como eu façoque?

Nota: As classes KOMA-Script não são uma opção. Atualmente, estou usando o plano articlepara rascunhos e, eventualmente, precisarei participar de uma aula de diário.

Nota 2 (dos comentários sobre uma tentativa de resposta): o ajuste \secnumdepthglobal não funcionará para mim, porque (a) ainda quero a numeração normal da seção sem estrela \section, etc., e (b) os pacotes que estão emitindo \section*comandos não podem ser persuadidos a usar simples \sectionem vez disso.

Responder1

Você pode redefinir \sectiona captura e condicionar quando a versão com estrela será usada. Ao encontrá-lo \section*, emita-o como faria \section, masremova o mecanismo de impressão de números através de uma configuração apropriada do contadorsecnumdepth.

insira a descrição da imagem aqui

\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}

xparsefornece uma interface fácil para (re)definir comandos que podem ter uma sversão tarred, bem como um oargumento opcional.

informação relacionada