Redefina `\section*` para que se comporte *exactamente* como `\section` excepto que omite el número

Redefina `\section*` para que se comporte *exactamente* como `\section` excepto que omite el número

Hay numerosas variaciones sobre la pregunta "¿Cómo puedo incluir mis secciones no numeradas en la tabla de contenido?" ...

y ninguna de las respuestas es buena para mí, porque todas implican pegarse \addcontentsline, además de quizás otras cosas ( \mark,, \phantomsection...?), en el lugar correcto del documento. En mi caso, los \section*comandos los emiten paquetes y no me dan ganchos para insertar cosas en el lugar correcto; y tampoco está claro exactamente qué conjunto de "otras cosas" necesito. Sería más simple y robusto si pudiera redefinirlo \section*para que se comporte exactamente como lo hace su versión sin asterisco, excepto que no imprime un número de sección.

Como lo hagoeso?

Nota: Las clases de KOMA-Script no son una opción. Actualmente estoy usando formato simple articlepara borradores y eventualmente tendré que asistir a una clase de diario.

Nota 2 (de los comentarios sobre un intento de respuesta): el ajuste \secnumdepthglobal no funcionará para mí, porque (a) todavía quiero una numeración de secciones normal desde las no destacadas , etc., y (b) no se puede persuadir a \sectionlos paquetes que emiten comandos para que los usen. \section*simple \sectionen su lugar.

Respuesta1

Puede redefinir \sectionpara capturar y condicionar cuándo se utiliza la versión destacada. Al encontrarlo \section*, emitalo como lo haría \section, peroeliminar el mecanismo de impresión de números mediante una configuración adecuada del contadorsecnumdepth.

ingrese la descripción de la imagen aquí

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

xparseproporciona una interfaz sencilla para (re)definir comandos que pueden tener una sversión tarred, así como un oargumento opcional.

información relacionada