Abschnittsnummern aus Links im Inhaltsverzeichnis ausschließen: Fehler bei nicht nummerierten Abschnitten

Abschnittsnummern aus Links im Inhaltsverzeichnis ausschließen: Fehler bei nicht nummerierten Abschnitten

Ich benutze etocum Abschnittsnummern aus Links im Inhaltsverzeichnis auszuschließen. Wenn ich jedoch einen nicht nummerierten Appexdix-Abschnitt einfüge, fügt etoc einen Punkt hinzu:

Bildbeschreibung hier eingeben

Ich habe mit dem Code herumgespielt und festgestellt, dass das Problem bei der Definition liegt \etocthenumber( \etocsetstyle{section}ohne etoc ist der Punkt nicht da). Gibt es eine Lösung?

Hier ein 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}

(Ich bin auchausgenommen Abschnittsnummerierung im Inhaltsverzeichnis)

Antwort1

Wie in den Kommentaren erwähnt, ist angesichts der anderen Pakete, die vom Code des OP verwendet werden, die einfachste Lösung wahrscheinlich, die Verwendung vonetoc.

Für den Fall, dass einige Benutzer etocdiese Frage haben, biete ich dennoch diese Antwort an, um zu erklären, wie etocdas Problem gelöst werden kann: Verwenden Sie einfach den \etocifnumberedBefehl.

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

Inhaltsverzeichnis mit etoc

verwandte Informationen