Excluir números de seção de links no ToC: bug de seções não numeradas

Excluir números de seção de links no ToC: bug de seções não numeradas

eu uso etocpara excluir números de seção de links no ToC. No entanto, quando insiro uma seção de apêndice não numerada - etoc adiciona um ponto final:

insira a descrição da imagem aqui

Brinquei com o código e descobri que o problema está \etocthenumberna \etocsetstyle{section}definição (sem etoc o ponto não está lá). Existe uma solução?

Aqui um MWE:

\documentclass{article}

\usepackage{etoolbox}
\usepackage{xcolor}

% heading styles:
\usepackage{titlesec}
\titleformat{\section}
  {\color{teal}\large\sffamily}
  {\thetitle.\hspace{0.5cm}}
  {0cm}
  {}

\titleformat{\subsection}
  {\color{violet}\bfseries}
  {\hspace{0.75cm}\thetitle.\hspace{0.3cm}}
  {0cm}
  {}

\titleformat{\subsubsection}
  {\color{olive}\itshape}
  {\hspace{1.3cm}\thetitle.\hspace{0.3cm}}
  {0cm}
  {}

% ToC styles:
\usepackage[dotinlabels]{titletoc}
\contentsmargin{2.55em} % space for a page number

\titlecontents{section}
    [3.8em] % 1.5em + 2.3em
    {\vspace{0.3cm}\sffamily\bfseries\large}
    {\contentslabel{2.3em}}
    {\hspace*{-2.3em}}
    {\normalsize\normalfont\rmfamily\titlerule*[1pc]{.}\contentspage}
    [\vspace{0.1cm}]

\titlecontents{subsection}
    [5.2em] % 3.8em + 1.3em
    {\vspace{0.1cm}}
    {\contentslabel{1.4em}}
    {\hspace*{-1.4em}}
    {\titlerule*[1pc]{.}\contentspage}
    []

\titlecontents{subsubsection}
    [6.5em] % 5.2em + 1.3em
    {\vspace{0.1cm}}
    {\contentslabel{1.3em}}
    {\hspace*{-1.3em}}
    {\titlerule*[1pc]{.}\contentspage}
    []

\makeatletter
\let\perhapsprint\@firstofone
\patchcmd{\addtocontents}
  {\glossary\@gobble}
  {\glossary\@gobble\let\perhapsprint\@gobble}
  {}{}
\makeatother
%\newcommand{\perhapsprint}[1]{\ifprintprefix#1\fi}
%\newif\ifprintprefix
\renewcommand\thesection{\Roman{section}}
\renewcommand\thesubsection{%
  \perhapsprint{\Roman{section}.}%
  \alph{subsection}%
}
\renewcommand\thesubsubsection{%
  \perhapsprint{\Roman{section}.\alph{subsection}.}%
  \arabic{subsubsection}%
}

% appendix:
\usepackage[toc,page]{appendix}
\renewcommand*\thesubsection{\Alph{subsection}}

\usepackage{hyperref}

% exclude number from the link in ToC:
\usepackage{etoc}
\makeatletter
  % store the original table of contents macros (they are not modified by hyperref, only \contentsline is)
  \let\latchapter\l@chapter
  \let\latsection\l@section
  \let\latsubsection\l@subsection
  \let\latsubsubsection\l@subsubsection
  % then use the etoc package to feed the l@ macros with a filtered out data
  \etocsetstyle{chapter}{}{}
  {\latchapter{\numberline{\etocthenumber}\etocname}{\etocpage}}{}
  \etocsetstyle{section}{}{}
  {\latsection{\numberline{\etocthenumber}\etocname}{\etocpage}}{}
  \etocsetstyle{subsection}{}{}
  {\latsubsection{\numberline{\etocthenumber}\etocname}{\etocpage}}{}
  \etocsetstyle{subsubsection}{}{}
  {\latsubsubsection{\numberline{\etocthenumber}\etocname}{\etocpage}}{}
\makeatother

\renewcommand\thesection{\Roman{section}}
\renewcommand\thesubsection{\alph{subsection}}
\renewcommand\thesubsubsection{\arabic{subsubsection}}
\renewcommand\theparagraph{\Roman{section}.\alph{subsection}.\arabic{subsubsection}.\roman{paragraph}}


\begin{document}

\tableofcontents

\section{H1}
\subsection{H2}
\subsubsection{H3}
\section{H1}
\subsection{H2}
\subsubsection{H3}

\addtocontents{toc}{\vspace*{\baselineskip}}

\renewcommand{\appendixtocname}{Appendices}
\renewcommand{\appendixpagename}{Appendices}
\begin{appendices}
  \subsection{H2}
  \subsubsection{H3}
  \subsection{H2}
  \subsubsection{H3}
  \subsection{H2}
  \subsubsection{H3}
\end{appendices}

\end{document}

(Eu tambemexcluindo numeração de seção no ToC)

Responder1

Conforme mencionado nos comentários, tendo em vista os outros pacotes utilizados pelo código do OP, a solução mais simples é provavelmente abandonar o uso deetoc.

Caso alguns usuários etocencontrem esta pergunta, mesmo assim forneço esta resposta para explicar qual poderia ser a maneira de etoclidar com o problema: basta usar o \etocifnumberedcomando.

\documentclass{article}

% appendix:
\usepackage[toc,page]{appendix}
\renewcommand*\thesubsection{\Alph{subsection}}

\usepackage{hyperref}

% exclude number from the link in ToC:
\usepackage{etoc}
\makeatletter
  % store the original table of contents macros (they are not modified by hyperref, only \contentsline is)
  \let\latchapter\l@chapter
  \let\latsection\l@section
  \let\latsubsection\l@subsection
  \let\latsubsubsection\l@subsubsection

  \etocsetstyle{chapter}{}{}
  {\etocifnumbered
       {\latchapter{\numberline{\etocthenumber}\etocname}{\etocpage}}
       {\latchapter{\etocname}{\etocpage}}}{}

  \etocsetstyle{section}{}{}
  {\etocifnumbered
       {\latsection{\numberline{\etocthenumber}\etocname}{\etocpage}}
       {\latsection{\etocname}{\etocpage}}}{}

  \etocsetstyle{subsection}{}{}
  {\etocifnumbered
       {\latsubsection{\numberline{\etocthenumber}\etocname}{\etocpage}}
       {\latsubsection{\etocname}{\etocpage}}}{}

  \etocsetstyle{subsubsection}{}{}
  {\etocifnumbered
       {\latsubsubsection{\numberline{\etocthenumber}\etocname}{\etocpage}}
       {\latsubsubsection{\etocname}{\etocpage}}}{}

\makeatother

\renewcommand\thesection{\Roman{section}}
\renewcommand\thesubsection{\alph{subsection}}
\renewcommand\thesubsubsection{\arabic{subsubsection}}
\renewcommand\theparagraph{\Roman{section}.\alph{subsection}.\arabic{subsubsection}.\roman{paragraph}}


\begin{document}

\tableofcontents

\section{H1}
\subsection{H2}
\subsubsection{H3}
\section{H1}
\subsection{H2}
\subsubsection{H3}

\renewcommand{\appendixtocname}{Appendices}
\renewcommand{\appendixpagename}{Appendices}
\begin{appendices}
  \subsection{H2}
  \subsubsection{H3}
  \subsection{H2}
  \subsubsection{H3}
  \subsection{H2}
  \subsubsection{H3}
\end{appendices}

\end{document}

índice com etoc

informação relacionada