Estou tentando criar novos comandos para "seções/subseções avançadas" (semelhante ao que você pode ver em um livro didático, onde uma "seção com estrela" indica um tópico avançado ou uma seção que você pode pular na primeira leitura).
Até agora, juntei comandos que colocam a estrela ao lado do número da seção/subseção no próprio documento e no ToC. No entanto, há um efeito colateral estranho onde:
depois de usar o comando "seção avançada", a subseção a seguir não exibe o número da subseção
depois de usar o comando "subseção avançada", as seções a seguir sempre exibem um número de subseção "inútil" de 0,0
Curiosamente, as entradas do ToC se comportam exatamente como esperado, sem problemas de numeração. Então, o que poderia estar causando esse comportamento inesperado no próprio documento?
Incluí abaixo um MWE ilustrando esse comportamento. (As numerosas seções/subseções têm como objetivo ilustrar diferentes permutações do uso de comandos de seção/subseção "regulares" e "avançados".)
\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}
Responder1
O problema é a linha onde você redefiniu o arquivo \@seccntformat
. Seu código parece
\def\@seccntformat##1{\protect\llap{\large*}\csname the#1\endcsname\quad}
observe que você digitou a definição the#1
em vez de the##1
e da mesma forma para a definição que restaura a definição original de \@seccntformat
. Como você conseguiu escrever o código acima, provavelmente poderá descobrir por que isso é um problema. Se você alterar todas as quatro ocorrências, the##1
seu código funcionará conforme o esperado.