Lien à la table de matière principale

Bonjour à tous. J’ai trouvé sur le net une manière d’utiliser les sections comme pointeurs (c’est-à-dire, lorsque je clique sur le titre de la section, je reviens à la table de matière principale). Pour cela, il suffit de mettre dans le préambule le code suivant :
\AtBeginDocument{
\addtocontents{toc}{\protect\label{toc}}}
et de mettre au niveau de la section la commande suivante:
\section[Titre de la section]{\protect\hyperref[toc]{Titre de la section}}
Cependant, deux problèmes surgissent (je comprend que c’est dû à la présence des mini tables) :

1. Premièrement, les sections pointent vers la mini table du chapitre en question, et non pas à la table de matière principale..

2. Deuxièmement, lors de la compilation, j’ai l’affichage suivant : « Label `toc` multiply defined » et « There were multiply-defined labels ».

Donc je cherche une solution pour que Latex reconnaisse seulement la table de matière principale comme référence (vers laquelle on fait référence). Voici un ECM de mon fichier sur le quel je travaille.
\documentclass[twoside]{memoir}
\RequirePackage[T1]{fontenc}
\RequirePackage[utf8]{inputenc}
\RequirePackage[french]{babel}
\RequirePackage{lmodern}
\usepackage{tikz}
\usetikzlibrary{shadows.blur}
\RequirePackage{titletoc}
\RequirePackage{titlesec}
\RequirePackage{hyperref}
\hypersetup{colorlinks=true}

\AtBeginDocument{
\addtocontents{toc}{\protect\label{toc}}}

%%%%%%%%%%%%%%%%%%%
\definecolor{gris}{RGB}{192,192,192}
%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%

%commande pour l'affichage de la minitoc
\newcommand{\printmyminitoc}{\noindent\hspace{1cm}\begin{tikzpicture}
    \node[rounded corners,align=left,fill=gris, blur shadow={shadow blur steps=2}, inner sep=4mm]{%
        \color{black}%
      \hspace{-2cm}  \begin{minipage}{8cm}%minipage trick
         \printcontents[chapters]{1}{1}[1]{}% profondeur différente entre la minitable et la table de matière
         \end{minipage}};
    \end{tikzpicture}}
%%%%%%%%%%%%%%%%%%%%%

\setcounter{secnumdepth}{3}
\setcounter{tocdepth}{2}

\begin{document}
\include{titlepage}

\tableofcontents*
\chapter{Optimisation}\label{chap-Optim}
\startcontents[chapters]
%Imprimer ici la minitable de matières
\printmyminitoc
\newpage
\section[Généralités]{\protect\hyperref[toc]{Généralités}}
Bla.............
\newpage

\section[Principe du gradient]{\protect\hyperref[toc]{Principe du gradient}}
BlaBla.....

\end{document}
Merci à l’avance pour toutes vos suggestions et je profite de l’occasion pour passer mes salutations à Brian.
zenon

Réponses

  • Bonjour à tous. Finalement j'ai trouvé la solution sur le net. En voici la démarche pour ceux qui auraient ce même problème à l'avenir. Il faudrait ajouter la commande
    \addtocontents{toc}{\protect\hypertarget{toc}{}}
    
    juste avant
    [code]
    \tableofcontents
    

    [/code]
    Dans le texte, au niveau de chaque section il faudrait mettre
    \section[Nom de la section]{\hyperlink{toc}{Nom de la section}}
    
    Bien sûr vous pourriez changer section en chapitre ou tout autre niveau.

    Cependant, j'ai une question pour Brian concernant l'environnement qu'il a brillamment concocté. Puisque je ne sais pas comment adapter cette solution à l'environnement exercice. C'est-à-dire, en cliquant sur exercice il me renvoie à la table de matière. Si c'est assez compliqué à faire, tu peux oublier ma question Brian (c'est un caprice de plus de ma part). Bonne journée.

    zenon
  • Bonsoir,

    La solution avec
    \addtocontents{toc}{\protect\hypertarget{toc}{}}
    
    n'est pas bonne à mon avis, car pour la même raison que précédemment, elle va définir plusieurs fois la même cible via \hypertarget. Je préconise de reprendre le code du premier message, de retirer
    \AtBeginDocument{
    \addtocontents{toc}{\protect\label{toc}}}
    
    et de mettre
    \clearpage\phantomsection\label{toc}%
    
    juste avant le \tableofcontents*. Pour l'adaptation de l'environnement 'exercice', je n'ai pas cherché mais ne vois pas le problème : ne suffit-il pas de mettre un \hyperref[toc]{...} au bon endroit ? L'utilité de tout ça me semble limitée, cela dit.

    Edit : ajout du \phantomsection, nécessaire pour hyperref.
  • Note : on peut aussi faire la même chose avec \hypertarget et \hyperlink comme dans ton deuxième message, mais sans le \addtocontents{toc}{...}. C'est un chouia plus léger que \label et \hyperref (pas de passage par le fichier .aux, sauf erreur) mais ne permet pas de faire \pageref{toc}... ce qui n'est peut-être pas un problème.

    Je définis ci-dessous une petite commande \sectionAvecLienVersToc pour limiter la redondance. Son argument optionnel peut prendre des valeurs telles que 'subsection', 'subsubsection', etc., si l'on souhaite utiliser cette commande pour faire autre chose que des \section.
    \documentclass[twoside]{memoir}
    % \usepackage{xparse} % seulement nécessaire si LaTeX plus vieux que 2020-10-01
    \usepackage[T1]{fontenc}
    \usepackage[utf8]{inputenc}
    \usepackage[french]{babel}
    \usepackage{lmodern}
    \usepackage{tikz}
    \usetikzlibrary{shadows.blur}
    \usepackage{titletoc}
    \usepackage{hyperref}
    \hypersetup{colorlinks=true}
    
    %%%%%%%%%%%%%%%%%%%
    \definecolor{gris}{RGB}{192,192,192}
    %%%%%%%%%%%%%%%%%%%%%%%%%
    
    %%%%%%%%%%%%%%%%%%%%%%%%
    
    %commande pour l'affichage de la minitoc
    \newcommand{\printmyminitoc}{\noindent\hspace{1cm}\begin{tikzpicture}
        \node[rounded corners,align=left,fill=gris, blur shadow={shadow blur steps=2}, inner sep=4mm]{%
            \color{black}%
          \hspace{-2cm}  \begin{minipage}{8cm}%minipage trick
             \printcontents[chapters]{1}{1}[1]{}% profondeur différente entre la minitable et la table de matière
             \end{minipage}};
        \end{tikzpicture}}
    %%%%%%%%%%%%%%%%%%%%%
    
    \NewDocumentCommand{\sectionAvecLienVersToc}{ O{section} m }{%
      \csname #1\endcsname [{#2}]{\protect\hyperlink{toc}{#2}}%
    }
    
    \setcounter{secnumdepth}{3}
    \setcounter{tocdepth}{2}
    
    \begin{document}
    
    Page de titre.
    
    \clearpage\hypertarget{toc}{}%
    \tableofcontents*
    
    \chapter{Optimisation}\label{chap-Optim}
    \startcontents[chapters]
    %Imprimer ici la minitable de matières
    \printmyminitoc
    \newpage
    \sectionAvecLienVersToc{Généralités}
    Bla.............
    \newpage
    
    \sectionAvecLienVersToc{Principe du gradient}
    BlaBla.....
    
    \end{document}
    
  • Je vais vérifier cette solution.
    Merci beaucoup Brian et bonne fin de semaine.
    zenon.
  • Ta solution marche très bien Brian et plus facile à mettre en œuvre. J'ai un problème concernant le changement de style des chapitres, mais je poserai la question sous une autre rubrique.

    Merci beaucoup et bonne fin journée.
Connectez-vous ou Inscrivez-vous pour répondre.