Estoy intentando crear nuevos comandos para "secciones/subsecciones avanzadas" (similar a lo que puede ver en un libro de texto, donde una "sección destacada" indica un tema avanzado o una sección que puede omitir en la primera lectura).
Hasta ahora, he improvisado comandos que colocan la estrella al lado del número de sección/subsección tanto en el documento como en el ToC. Sin embargo, existe un efecto secundario extraño que consiste en:
después de usar el comando "sección avanzada", la siguiente subsección no muestra el número de subsección
después de usar el comando "subsección avanzada", las siguientes secciones siempre muestran un número de subsección "inútil" de .0
Curiosamente, las entradas de ToC se comportan exactamente como se esperaba, sin problemas de numeración. Entonces, ¿qué podría estar causando este comportamiento inesperado en el documento?
He incluido a continuación un MWE que ilustra este comportamiento. (Las numerosas secciones/subsecciones están destinadas a ilustrar diferentes permutaciones del uso de comandos de sección/subsección "normales" y "avanzados").
\documentclass{book}
\usepackage{titlesec}
\usepackage{titletoc}
\usepackage{tocloft}
\makeatletter
\newcommand{\advsection}[2][section]{%
\def\@seccntformat##1{\protect\llap{\large*}\csname the#1\endcsname\quad}%
\addtocontents{toc}{%
\let\protect\mtnumberline\protect\numberline%
\def\protect\numberline{%
\hskip0pt%
\global\let\protect\numberline\protect\mtnumberline%
\protect\llap{\normalfont\normalsize*}%
\protect\mtnumberline%
}%
}%
\csname #1\endcsname{#2}%
\def\@seccntformat##1{\csname the#1\endcsname\quad}%
}
\newcommand{\advsubsection}[2][subsection]{%
\def\@seccntformat##1{\protect\llap{\large*}\csname the#1\endcsname\quad}%
\addtocontents{toc}{%
\let\protect\mtnumberline\protect\numberline%
\def\protect\numberline{%
\hskip0pt%
\global\let\protect\numberline\protect\mtnumberline%
\protect\llap{\normalfont\normalsize*}%
\protect\mtnumberline%
}%
}%
\csname #1\endcsname{#2}%
\def\@seccntformat##1{\csname the#1\endcsname\quad}%
}
\makeatother
\begin{document}
\frontmatter
\tableofcontents
\newpage
\mainmatter
\chapter{My first chapter}
\section{My first section}
Blah
\advsection{My second section}
Blah
\section{My third section}
Blah
\advsection{My fourth section}
Blah
\subsection{My first subsection}
Blah
\advsubsection{My second subsection}
Blah
\subsection{My third subsection}
Blah
\advsubsection{My fourth subsection}
Blah
\section{My fifth section}
Blah
\subsection{My first subsection}
Blah
\end{document}
Respuesta1
El problema es la línea donde redefiniste \@seccntformat
. Tu código se parece
\def\@seccntformat##1{\protect\llap{\large*}\csname the#1\endcsname\quad}
tenga en cuenta que escribió la definición the#1
en lugar de the##1
y de manera similar para la definición que restaura la definición original de \@seccntformat
. Como pudiste escribir el código anterior, probablemente puedas descubrir por qué esto es un problema. Si cambia en las cuatro apariciones, the##1
su código funciona como se esperaba.