hyperref 和 todonote 自定义的含义

hyperref 和 todonote 自定义的含义

你好,乳胶团队

我发现 hyperref 的使用与文档末尾的 todolist \mylistoftodos 的习惯不兼容。

您能解释并解决我的问题吗?

如果我评论包 hyperref,错误就会消失,但显然链接不会消失,这里是我灵感的来源:

[如何添加待办事项?

[使用 listoftodos 中的其他计数器替换页码

MWE 代码

\documentclass{book}
%% todonote_custom.tex  fonctionnement ok sur les liens
\usepackage[english,french]{babel}%pour un document en français
%mini sommaire à chaque chapitre
\usepackage[french]{minitoc}
\setcounter{mtc}{5}
\usepackage{xspace}
%Permet à  babel d'utiliser la macro xspace partout où c'est nécessaire. (Voir la doc de babel pour de plus amples explications.)
\usepackage[cyr]{aeguill}
\usepackage[latin1]{inputenc} 
\usepackage[T1]{fontenc}
\usepackage{lipsum}                     % Dummytext
%---------------------------------------------------------------------------------
% divers codes pour todonote
\usepackage{ifthen}
% variable pour édition papier ou online
\newboolean{vsersion-pdf}
%VARIABLE À POSITIONNER À true POUR UNE VERSION PDF POUR SITE INTERNET
\setboolean{vsersion-pdf}{true}
%VARIABLE À POSITIONNER À false POUR EDITION PAPIER
%\setboolean{vsersion-pdf}{false}
%---------------------------------------------------------------------------------
\usepackage{hyperref}%rend actif les liens, références croisée, toc, ...
\ifthenelse{ \boolean{vsersion-pdf} }
{% pdf en ligne
    \hypersetup{colorlinks,%
        citecolor=blue,%
        filecolor=blue,%
        linkcolor=orange,%ou bien blue
        urlcolor=blue}
}
{%version papier
    \hypersetup{colorlinks,%
        citecolor=black,%
        filecolor=black,%
        linkcolor=blue,%
        urlcolor=black}
}
\usepackage{xargs}                      % Use more than one optional parameter in a new commands
\usepackage[pdftex,dvipsnames]{xcolor}  % Coloured text etc.
% paramétrage de base
% cette commande est indispensable pour que les lien fonction dans la liste de récap de la FAQ

\usepackage[colorinlistoftodos,french,prependcaption,textsize=tiny]{todonotes}
%liste de nouvelles commandes customisée
\newcommandx{\unsure}[2][1=]{\todo[linecolor=red,backgroundcolor=red!25,bordercolor=red,#1]{#2}}
\newcommandx{\change}[2][1=]{\todo[linecolor=blue,backgroundcolor=blue!25,bordercolor=blue,#1]{#2}}
\newcommandx{\info}[2][1=]{\todo[linecolor=OliveGreen,backgroundcolor=OliveGreen!25,bordercolor=OliveGreen,#1]{#2}}
\newcommandx{\improvement}[2][1=]{\todo[linecolor=Plum,backgroundcolor=Plum!25,bordercolor=Plum,#1]{#2}}
\newcommandx{\thiswillnotshow}[2][1=]{\todo[disable,#1]{#2}}


\newcounter{faqcounter}
\newcommandx{\faq}[2][1=]{
    \refstepcounter{faqcounter}%
    \ifthenelse{ \boolean{vsersion-pdf} }
    { \todo[fancyline,linecolor=red,backgroundcolor=blue!25,bordercolor=blue,color={red!100!green!33},size=\small]{%
            \textbf{FAQ [\uppercase{#1}N°\thefaqcounter]:}~#2}}
    { \todo[linecolor=red,backgroundcolor=blue!25,bordercolor=blue,color={red!100!green!33},size=\small]{%
            \textbf{FAQ [\uppercase{#1}N°\thefaqcounter]:}~#2}}}
%---------------------------------------------------------------------------------
%The  idea  is  to  define  a  newcommand\mycomment which  adds  a  counter  and  optionally  the  initials  of  theauthor to the inserted todonote.
\newcounter{mycomment}
\newcommand{\mycomment}[2][]{%
    % initials of the author (optional) + note in the margin
    \refstepcounter{mycomment}%
    {%
        %\setstretch{0.7}% spacing cette ligne perturbe
        \todo[color={red!100!green!33},size=\small]{%
            \textbf{Commentaire [\uppercase{#1}-N°\themycomment]:}~#2}%
}}  



%---------------------------------------------------------------------------------
% gestion de notes avec un mot encadré et placé au fil de l'eau dans le texte avec option livre ou online
% commande \margintip {mot}{commentaire}
\newcommand{\tipword}[1]{\colorlet{currentcolor}{.}{\color{red}\fbox{\color{currentcolor}#1}}} 
\newcommand{\tipitself}[1]{
    \ifthenelse{ \boolean{vsersion-pdf} }
    { \todo[backgroundcolor=OliveGreen!25,bordercolor=red,fancyline]{#1}}
    { \todo[backgroundcolor=OliveGreen!25,bordercolor=red]{#1}}
} 
\newcommand{\margintip}[2]{\tipword{#1}\tipitself{#2}} 
%---------------------------------------------------------------------------------
% commentaire à la word pour les auteurs

%---------------------------------------------------------------------------------
% part of custom is not compatible with hyperref
\makeatletter
\def\myaddcontentsline#1#2#3{%
    \addtocontents{#1}{\protect\contentsline{#2}{#3}{voir \thesection\  page. \thepage}}}
\renewcommand{\@todonotes@addElementToListOfTodos}{%
    \if@todonotes@colorinlistoftodos%
    \myaddcontentsline{tdo}{todo}{{%
            \colorbox{\@todonotes@currentbackgroundcolor}%
            {\textcolor{\@todonotes@currentbackgroundcolor}{o}}%
            \ \@todonotes@caption}}%
    \else%
    \myaddcontentsline{tdo}{todo}{{\@todonotes@caption}}%
    \fi}%
\newcommand*\mylistoftodos[1][nom par défaut]{%
    \begingroup
    \setbox\@tempboxa\hbox{see 9.9 at p. 99}%
    \renewcommand*\@tocrmarg{\the\wd\@tempboxa}%
    \renewcommand*\@pnumwidth{\the\wd\@tempboxa}%
    \listoftodos[#1]%
    \endgroup
}
\makeatother

%---------------------------------------------------------------------------------
% --------------------- FIN des commandes pour tonotes----------------------------

%---------------------------------------------------------------------------------
\begin{document}
\dominitoc
\pagestyle{empty}
\chapter{démo de todonotes}
\minitoc
\textbf{Ce code fonctionne correctement les hyperliens de la liste récap pointent sur les bonnes pages.}
\section{section todo en ligne}
\todo[inline]{The original todo note withouth changed colours.\newline Here's another line.}
\section{section test de todo dans la marge}
\lipsum[150]\unsure{Is this correct?}\unsure{I'm unsure about also!}
\lipsum[120]\change{Change this!}
\lipsum[110]\info{This can help me in chapter seven!}
\lipsum[110]\improvement{This really needs to be improved!\newline\newline What was I thinking?!}
\lipsum[5]

\section{section zone cachée à revoir}
\thiswillnotshow{This is hidden since option `disable' is chosen!}
\improvement[inline]{The following section needs to be rewritten!}

\section{Commentaires à la Word}
Toujours plus fort il peut être nécessaire de travailler à plusieurs et d'apporter des annotations diverses par auteur
The  idea  is  to  define  a  newcommand \verb+\mycomment +  which adds  a  counter  and  optionally  the  initials  of  the author to the inserted todonote.\mycomment[FD]{Ceci est mon commentaire auteur FD}

\lipsum[1]\faq{il faut bien en faire une}
\lipsum[1]\faq{il faut bien en faire deux}
\lipsum[1]\faq{il faut bien en faire trois}
\lipsum[1]\margintip{mot louche}{il faut bien en faire quatre}
Now this is where the tip word comes in, it's \margintip{form}{this is the tip (\textbf{form})} can be shaped with the todo package \margintip{pas le bon texte}{il faut bien en faire cinq}

\lipsum[1] \faq{il faut bien en faire trois}


Now this is where the tip word comes in, it's \margintip{form}{this is the tip} can be shaped with the todo package 

\lipsum[3-4] 

\begin{enumerate}
    \setlength\itemsep{0.05em} %semble ok 
    \item trop de todonotes devient impossible à bien gérer.
    \item énumérer juste avant tous les points à traiter pour la rédaction du livre. A la fin cette liste est vide. \todo[fancyline]{du coup le texte est à enlever.}
    \item Etablir une FAQ liée au livre .\faq[FD]{Et là le travail est à faire au fil de l'eau.}
    \item Etablir une FAQ liée au livre \faq{aussi du coup le texte est à enlever.}
\end{enumerate}
\todo[inline]{vérifier que les liens de la faq pointe bien sur la bonne page actuellement il y a un bug.}

\lipsum[1]voila ici commentaire à la word.\mycomment[FD]{Ceci est mon commentaire} notez que marginpar is moved!!
\mylistoftodos[Liste des points a traiter...]

\end{document}

编辑以添加修复 hyperref 不完整与 4 参数与这一新步骤我有坏链接但我有链接:-)

\documentclass{book}
%% todonote_custom_next.tex  fonctionnement ok sur les liens
\usepackage[english,french]{babel}%pour un document en français
%mini sommaire à chaque chapitre
\usepackage[french]{minitoc}
\setcounter{mtc}{5}
\usepackage{xspace}
%Permet à  babel d'utiliser la macro xspace partout où c'est nécessaire. (Voir la doc de babel pour de plus amples explications.)
\usepackage[cyr]{aeguill}
\usepackage[latin1]{inputenc} 
\usepackage[T1]{fontenc}
\usepackage{lipsum}                     % Dummytext
%---------------------------------------------------------------------------------
% divers codes pour todonote
\usepackage{ifthen}
% variable pour édition papier ou online
\newboolean{vsersion-pdf}
%VARIABLE À POSITIONNER À true POUR UNE VERSION PDF POUR SITE INTERNET
\setboolean{vsersion-pdf}{true}
%VARIABLE À POSITIONNER À false POUR EDITION PAPIER
%\setboolean{vsersion-pdf}{false}
%---------------------------------------------------------------------------------
\usepackage{hyperref}%rend actif les liens, références croisée, toc, ...
\ifthenelse{ \boolean{vsersion-pdf} }
{% pdf en ligne
    \hypersetup{colorlinks,%
        citecolor=blue,%
        filecolor=blue,%
        linkcolor=orange,%ou bien blue
        urlcolor=blue}
}
{%version papier
    \hypersetup{colorlinks,%
        citecolor=black,%
        filecolor=black,%
        linkcolor=blue,%
        urlcolor=black}
}
\usepackage{xargs}                      % Use more than one optional parameter in a new commands
\usepackage[pdftex,dvipsnames]{xcolor}  % Coloured text etc.
% paramétrage de base
% cette commande est indispensable pour que les lien fonction dans la liste de récap de la FAQ

\usepackage[colorinlistoftodos,french,prependcaption,textsize=tiny]{todonotes}
%liste de nouvelles commandes customisée
\newcommandx{\unsure}[2][1=]{\todo[linecolor=red,backgroundcolor=red!25,bordercolor=red,#1]{#2}}
\newcommandx{\change}[2][1=]{\todo[linecolor=blue,backgroundcolor=blue!25,bordercolor=blue,#1]{#2}}
\newcommandx{\info}[2][1=]{\todo[linecolor=OliveGreen,backgroundcolor=OliveGreen!25,bordercolor=OliveGreen,#1]{#2}}
\newcommandx{\improvement}[2][1=]{\todo[linecolor=Plum,backgroundcolor=Plum!25,bordercolor=Plum,#1]{#2}}
\newcommandx{\thiswillnotshow}[2][1=]{\todo[disable,#1]{#2}}


\newcounter{faqcounter}
\newcommandx{\faq}[2][1=]{
    \refstepcounter{faqcounter}%
    \ifthenelse{ \boolean{vsersion-pdf} }
    { \todo[fancyline,linecolor=red,backgroundcolor=blue!25,bordercolor=blue,color={red!100!green!33},size=\small]{%
            \textbf{FAQ [\uppercase{#1}N°\thefaqcounter]:}~#2}}
    { \todo[linecolor=red,backgroundcolor=blue!25,bordercolor=blue,color={red!100!green!33},size=\small]{%
            \textbf{FAQ [\uppercase{#1}N°\thefaqcounter]:}~#2}}}
%---------------------------------------------------------------------------------
%The  idea  is  to  define  a  newcommand\mycomment which  adds  a  counter  and  optionally  the  initials  of  theauthor to the inserted todonote.
\newcounter{mycomment}
\newcommand{\mycomment}[2][]{%
    % initials of the author (optional) + note in the margin
    \refstepcounter{mycomment}%
    {%
        %\setstretch{0.7}% spacing cette ligne perturbe
        \todo[color={red!100!green!33},size=\small]{%
            \textbf{Commentaire [\uppercase{#1}-N°\themycomment]:}~#2}%
}}  



%---------------------------------------------------------------------------------
% gestion de notes avec un mot encadré et placé au fil de l'eau dans le texte avec option livre ou online
% commande \margintip {mot}{commentaire}
\newcommand{\tipword}[1]{\colorlet{currentcolor}{.}{\color{red}\fbox{\color{currentcolor}#1}}} 
\newcommand{\tipitself}[1]{
    \ifthenelse{ \boolean{vsersion-pdf} }
    { \todo[backgroundcolor=OliveGreen!25,bordercolor=red,fancyline]{#1}}
    { \todo[backgroundcolor=OliveGreen!25,bordercolor=red]{#1}}
} 
\newcommand{\margintip}[2]{\tipword{#1}\tipitself{#2}} 
%---------------------------------------------------------------------------------
% commentaire à la word pour les auteurs

%---------------------------------------------------------------------------------
% part of custom is not compatible with hyperref
\makeatletter
\def\myaddcontentsline#1#2#3#4{%
    % first solution without hyperref using
    %\addtocontents{#1}{\protect\contentsline{#2}{#3}{see \thesection\ at page. \thepage}}}
    % new solution to be compatible with hyperrref 4 parameter for \addtocontents
     \addtocontents{#1}{\protect\contentsline{#2}{#3}{see \thesection\ at page \thepage}{#4}}}%
\renewcommand{\@todonotes@addElementToListOfTodos}{%
    \if@todonotes@colorinlistoftodos%
    \myaddcontentsline{tdo}{todo}{{%
            \colorbox{\@todonotes@currentbackgroundcolor}%
            {\textcolor{\@todonotes@currentbackgroundcolor}{o}}%
            \ \@todonotes@caption}}{fourth parameter}%
    \else%
    \myaddcontentsline{tdo}{todo}{{\@todonotes@caption}}{fourth parameter}%
    \fi}%
\newcommand*\mylistoftodos[1][nom par défaut]{%
    \begingroup
    \setbox\@tempboxa\hbox{see 9.9 at p. 99}%
    \renewcommand*\@tocrmarg{\the\wd\@tempboxa}%
    \renewcommand*\@pnumwidth{\the\wd\@tempboxa}%
    \listoftodos[#1]%
    \endgroup
}
\makeatother

%---------------------------------------------------------------------------------
% --------------------- FIN des commandes pour tonotes----------------------------

%---------------------------------------------------------------------------------
\begin{document}
\dominitoc
\pagestyle{empty}
\chapter{démo de todonotes}
\minitoc
\textbf{Ce code fonctionne correctement les hyperliens de la liste récap pointent sur les bonnes pages.}
\section{section todo en ligne}
\todo[inline]{The original todo note withouth changed colours.\newline Here's another line.}
\section{section test de todo dans la marge}
\lipsum[150]\unsure{Is this correct?}\unsure{I'm unsure about also!}
\lipsum[120]\change{Change this!}
\lipsum[110]\info{This can help me in chapter seven!}
\lipsum[110]\improvement{This really needs to be improved!\newline\newline What was I thinking?!}
\lipsum[5]

\section{section zone cachée à revoir}
\thiswillnotshow{This is hidden since option `disable' is chosen!}
\improvement[inline]{The following section needs to be rewritten!}

\section{Commentaires à la Word}
Toujours plus fort il peut être nécessaire de travailler à plusieurs et d'apporter des annotations diverses par auteur
The  idea  is  to  define  a  newcommand \verb+\mycomment +  which adds  a  counter  and  optionally  the  initials  of  the author to the inserted todonote.\mycomment[FD]{Ceci est mon commentaire auteur FD}

\lipsum[1]\faq{il faut bien en faire une}
\lipsum[1]\faq{il faut bien en faire deux}
\lipsum[1]\faq{il faut bien en faire trois}
\lipsum[1]\margintip{mot louche}{il faut bien en faire quatre}
Now this is where the tip word comes in, it's \margintip{form}{this is the tip (\textbf{form})} can be shaped with the todo package \margintip{pas le bon texte}{il faut bien en faire cinq}

\lipsum[1] \faq{il faut bien en faire trois}


Now this is where the tip word comes in, it's \margintip{form}{this is the tip} can be shaped with the todo package 

\lipsum[3-4] 

\begin{enumerate}
    \setlength\itemsep{0.05em} %semble ok 
    \item trop de todonotes devient impossible à bien gérer.
    \item énumérer juste avant tous les points à traiter pour la rédaction du livre. A la fin cette liste est vide. \todo[fancyline]{du coup le texte est à enlever.}
    \item Etablir une FAQ liée au livre .\faq[FD]{Et là le travail est à faire au fil de l'eau.}
    \item Etablir une FAQ liée au livre \faq{aussi du coup le texte est à enlever.}
\end{enumerate}
\todo[inline]{vérifier que les liens de la faq pointe bien sur la bonne page actuellement il y a un bug.}

\lipsum[1]voila ici commentaire à la word.\mycomment[FD]{Ceci est mon commentaire} notez que marginpar is moved!!
\mylistoftodos[Liste des points a traiter...]
%\listoftodos
\end{document}

我理解,基本的 MWE 是下一个

请参阅以下代码

\documentclass{book}
%% todonote_custom_MWE.tex  fonctionnement ok sur les liens
\usepackage[english,french]{babel}%pour un document en français

\usepackage[cyr]{aeguill}
\usepackage[latin1]{inputenc} 
\usepackage[T1]{fontenc}
\usepackage{lipsum}                     % Dummytext
%---------------------------------------------------------------------------------
\usepackage{hyperref}%rend actif les liens, références croisée, toc, ...


\hypersetup{colorlinks,%
    citecolor=blue,%
    filecolor=blue,%
    linkcolor=orange,%ou bien blue
    urlcolor=blue}
\usepackage{xargs}                      % Use more than one optional parameter in a new commands
\usepackage[pdftex,dvipsnames]{xcolor}  % Coloured text etc.

\usepackage[colorinlistoftodos,french,prependcaption,textsize=tiny]{todonotes}
%liste de nouvelles commandes customisée
\newcommandx{\info}[2][1=]{\todo[linecolor=OliveGreen,backgroundcolor=OliveGreen!25,bordercolor=OliveGreen,#1]{#2}}




%---------------------------------------------------------------------------------
% part of custom is not compatible with hyperref
\makeatletter
\def\myaddcontentsline#1#2#3#4{%
    % first solution without hyperref using
    %\addtocontents{#1}{\protect\contentsline{#2}{#3}{see \thesection\ at page. \thepage}}}
    % new solution to be compatible with hyperrref 4 parameter for \addtocontents
     \addtocontents{#1}{\protect\contentsline{#2}{#3}{see \thesection\ at page \thepage}{#4}}}{}%
\renewcommand{\@todonotes@addElementToListOfTodos}{%
    \if@todonotes@colorinlistoftodos%
    \myaddcontentsline{tdo}{todo}{{%
            \colorbox{\@todonotes@currentbackgroundcolor}%
            {\textcolor{\@todonotes@currentbackgroundcolor}{o}}%
            \ \@todonotes@caption}}{blalbla}%
    \else%
    \myaddcontentsline{tdo}{todo}{{\@todonotes@caption}}{blabla}%
    \fi}%
\newcommand*\mylistoftodos[1][nom par défaut]{%
    \begingroup
    \setbox\@tempboxa\hbox{see 9.9 at p. 99}%
    \renewcommand*\@tocrmarg{\the\wd\@tempboxa}%
    \renewcommand*\@pnumwidth{\the\wd\@tempboxa}%
    \listoftodos[#1]%
    \endgroup
}
\makeatother
%---------------------------------------------------------------------------------
\begin{document}


\chapter{démo de todonotes}

\lipsum[1]\info{il faut bien en faire une}
\lipsum[1]\info{il faut bien en faire deux}
\lipsum[1]\info{il faut bien en faire trois}

\mylistoftodos[Liste des points a traiter...]
\end{document}

你认为现在的基础知识对你的测试来说足够了吗(部分是为了帮助 Ulrike)?提前谢谢

答案1

您只需添加 always\@currentHref作为第四个参数:

\documentclass{book}
%% todonote_custom_MWE.tex  fonctionnement ok sur les liens
\usepackage[english,french]{babel}%pour un document en français

%\usepackage[cyr]{aeguill} %outdated
%\usepackage[latin1]{inputenc} % I have utf8 by default
\usepackage[T1]{fontenc}
\usepackage{lipsum}                     % Dummytext

\usepackage{xargs}                      % Use more than one optional parameter in a new commands
\usepackage[pdftex,dvipsnames]{xcolor}  % Coloured text etc.

\usepackage[colorinlistoftodos,french,prependcaption,textsize=tiny]{todonotes}

%---------------------------------------------------------------------------------
\usepackage{hyperref}%rend actif les liens, références croisée, toc, ...


\hypersetup{colorlinks,%
    citecolor=blue,%
    filecolor=blue,%
    linkcolor=orange,%ou bien blue
    urlcolor=blue}
%liste de nouvelles commandes customisée
\newcommandx{\info}[2][1=]{\todo[linecolor=OliveGreen,backgroundcolor=OliveGreen!25,bordercolor=OliveGreen,#1]{#2}}

\makeatletter
\def\myaddcontentsline#1#2#3{%
     \addtocontents{#1}{\protect\contentsline{#2}{#3}%
     {see \thesection\ at page \thepage}{\@currentHref}}}{}% %<-------------

\renewcommand{\@todonotes@addElementToListOfTodos}{%
    \if@todonotes@colorinlistoftodos%
    \myaddcontentsline{tdo}{todo}{{%
            \colorbox{\@todonotes@currentbackgroundcolor}%
            {\textcolor{\@todonotes@currentbackgroundcolor}{o}}%
            \ \@todonotes@caption}}%
    \else%
    \myaddcontentsline{tdo}{todo}{{\@todonotes@caption}}%
    \fi}%

\newcommand*\mylistoftodos[1][nom par défaut]{%
    \begingroup
    \setbox\@tempboxa\hbox{see 9.9 at p. 99}%
    \renewcommand*\@tocrmarg{\the\wd\@tempboxa}%
    \renewcommand*\@pnumwidth{\the\wd\@tempboxa}%
    \listoftodos[#1]%
    \endgroup
}
\makeatother
%---------------------------------------------------------------------------------
\begin{document}


\chapter{démo de todonotes}

\lipsum[1]\info{il faut bien en faire une}
\lipsum[1]\info{il faut bien en faire deux}
\lipsum[1]\info{il faut bien en faire trois}

\mylistoftodos[Liste des points a traiter...]
\end{document}

相关内容