我正在使用该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.1
和1.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