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

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

我正在使用该todonotes包在我的文档中添加注释。该\listoftodos命令为待办事项添加了目录。

我想显示另一个值,例如,而不是此目录中的页码\thesection。该todonotes包操纵一个名为的目录.tdo,所以我猜我可以使用来做到这一点,tocloft但到目前为止我还没有实现它。

以下是 MWE:

\documentclass{scrbook}

\usepackage{todonotes}
\usepackage{tocloft}
\usepackage{lipsum}

\begin{document}

\chapter{My first chapter}

\section{A first section}

\lipsum

\todo{This is a note}

\section{Another section}

\lipsum

\todo{This is another note}


\listoftodos


\end{document}

这两个笔记的页码分别为 2 和 3。我希望它们显示1.11.2(章节编号)。我该怎么做?

答案1

更新!!!

以下解决方案设置了正确的宽度\@pnumwidth

\documentclass{scrbook}

\usepackage{todonotes}
\usepackage{tocloft}
\usepackage{lipsum}
\usepackage{showframe}
\makeatletter
\def\myaddcontentsline#1#2#3{%
  \addtocontents{#1}{\protect\contentsline{#2}{#3}{see \thesection\ at p. \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{%
  \begingroup
       \setbox\@tempboxa\hbox{see 9.9 at p. 99}%
       \renewcommand*\@tocrmarg{\the\wd\@tempboxa}%
       \renewcommand*\@pnumwidth{\the\wd\@tempboxa}%
       \listoftodos%
  \endgroup
}
\makeatother

\begin{document}
\chapter{My first chapter}
\section{A first section}
\lipsum
\todo{This is a note}
\section{Another section}
\lipsum
\todo{This is another note}

\mylistoftodos
\end{document}

结果是:

在此处输入图片描述

答案2

由于它是我的文档中唯一的目录,我发现重新定义\addcontentsline效果很好并且非常简单:

 \renewcommand{\addcontentsline}[3]{%
   \addtocontents{#1}{\protect\contentsline{#2}{#3}{\tododate}{section*.\thesection}}
 }

我看到的唯一副作用是它破坏了 PDF 中的书签。这对我的草稿来说没问题(这就是我使用的原因todonotes),但对我的最终文档来说不行,所以我到目前为止的解决方案是制作一个包装todonotes并传递给它的disable选项的包:

\ProvidesPackage{review}
\let\review@disable\@empty
\let\review@dateinlist\@empty
\DeclareOption{disable}{\def\review@disable{true}}
\DeclareOption{dateinlist}{\def\review@dateinlist{true}}
\ProcessOptions


% Put dates instead of page numbers in listoftodos
\newcommand{\tododate}{%
  \thesection~\chaphead
}

\ifx\review@disable \@empty
  \usepackage[french,colorinlistoftodos,textsize=small]{todonotes}
  \ifx\review@dateinlist \@empty
  \else
    \renewcommand{\addcontentsline}[3]{%
      \addtocontents{#1}{\protect\contentsline{#2}{#3}{\tododate}{section*.\thesection}}
    }
  \fi
\else
  \usepackage[french,colorinlistoftodos,textsize=small,disable]{todonotes}
\fi

这样,我就可以用不同的方式调用我的包:

\usepackage{review} % normal style
\usepackage[dateinlist}{review} % date instead of page numbers
\usepackage[disable]{review} % disable todonotes and do not mess up bookmarks

相关内容