我todonotes
广泛使用该软件包来标记和评论我的项目。因此,对于一个大型项目,我有几十条待办事项,而我在文档开头插入的待办事项列表非常混乱。
我正在寻找一种方法来按章节对待办事项列表进行分组,因此本质上是这样的:
List of Todos
Chapter 1
Chapter 1 note ... 2
Chapter 1, section 1 note ... 2
Chapter 1, section 2 note ... 3
Chapter 2
Chapter 2, section 1 note ... 4
Chapter 2, section 2 note ... 4
以下 MWE 给出了修改的起点:
\documentclass{scrreprt}
\usepackage{todonotes}
% \usepackage{classicthesis}
\usepackage{tocloft}
\usepackage{lipsum}
\usepackage[colorlinks=true,linktocpage=true]{hyperref}
\begin{document}
\listoftodos
\chapter{My first chapter}
\lipsum[1]
\todo{Chapter 1 note}
\section{A first section}
\lipsum[1]
\todo{Chapter 1, section 1 note}
\section{Another section}
\lipsum[1]
\todo{Chapter 1, section 2 note}
\chapter{My second chapter}
\section{A first section}
\lipsum[1]
\todo{Chapter 2, section 1 note}
\section{Another section}
\lipsum[1]
\todo{Chapter 2, section 2 note}
\end{document}
这个帖子尝试了类似的东西,但只是在页码旁边添加了部分,这并不能消除我的混乱。
我正在使用用于目录外观classicthesis
的模板titlesec
,以防万一。第二点是删除待办事项列表中的“点”。我相信todonotes
用这个命令格式化外观:
\newcommand{\l@todo}
{\@dottedtocline{1}{0em}{2.3em}}
但我不知道如何修改它以删除点并在每个目录条目末尾显示页码。
答案1
这是针对 的classicthesis
。将以下代码添加到序言中
\usepackage{xpatch}
\xapptocmd{\Chap}{%
\addtocontents{tdo}{%
\vskip\bigskipamount\noindent\textbf{Chapter \thechapter}\par\nobreak\vskip\medskipamount}}{}{}
如果你真的需要一种更复杂的方法,仅在有注释时才打印该行,然后就是这样:
\usepackage{xpatch}
\xapptocmd{\Chap}{\addtocontents{tdo}{\protect\todoline{\thechapter}}}{}{}
\makeatletter
\newcommand{\todoline}[1]{\@ifnextchar\Endoftdo{}{\@todoline{#1}}}
\newcommand{\@todoline}[1]{%
\@ifnextchar\todoline
{}
{\vskip\bigskipamount\noindent\textbf{Chapter #1}\par\nobreak\vskip\medskipamount}}
\makeatother
\newcommand{\Endoftdo}{}
\AtEndDocument{\addtocontents{tdo}{\string\Endoftdo}}
但是,当待办事项列表仅用于工作副本时,为什么要做这么复杂的事情呢?
这是一个完整的示例,其中待办事项列表中的待办事项注释的排版方式与目录中的部分相同:
\documentclass{scrreprt}
\usepackage{classicthesis}
\usepackage{todonotes}
\usepackage{tocloft}
\usepackage{lipsum}
\hypersetup{colorlinks=true,linktocpage=true}
\usepackage{xpatch}
\xapptocmd{\Chap}{\addtocontents{tdo}{\protect\todoline{\thechapter}}}{}{}
\makeatletter
\newcommand{\todoline}[1]{\@ifnextchar\Endoftdo{}{\@todoline{#1}}}
\newcommand{\@todoline}[1]{%
\@ifnextchar\todoline
{}
{\vskip\bigskipamount\noindent\spacedlowsmallcaps{Chapter #1}\par\nobreak\vskip\medskipamount}}
\let\l@todo\l@section
\makeatother
\newcommand{\Endoftdo}{}
\AtEndDocument{\addtocontents{tdo}{\string\Endoftdo}}
\begin{document}
\tableofcontents
\listoftodos
\chapter{My first chapter}
\lipsum[1]
\todo{Chapter 1 note}
\section{A first section}
\lipsum[1]
\todo{Chapter 1, section 1 note}
\section{Another section}
\lipsum[1]
\todo{Chapter 1, section 2 note}
\chapter{My second chapter}
\section{A first section}
\lipsum[1]
\todo{Chapter 2, section 1 note}
\section{Another section}
\lipsum[1]
\todo{Chapter 2, section 2 note}
\end{document}
如果您希望在待办事项列表中显示章节标题,则应使用略有不同的方法。将代码从上到下一行更改\usepackage{xpatch}
为\AtEndDocument
以下内容
\usepackage{regexpatch}
\xapptocmd{\Chap}{\addtocontents{tdo}{\protect\todoline{\thechapter}{\spacedlowsmallcaps{#1}}{\thepage}}}{}{}
\makeatletter
\newcommand{\todoline}[1]{\@ifnextchar\Endoftdo{}{\@todoline{#1}}}
\newcommand{\@todoline}[3]{%
\@ifnextchar\todoline
{}
{\contentsline{chapter}{\numberline{#1}#2}{#3}{}{}}%
}
\let\l@todo\l@section
\makeatother
\newcommand{\Endoftdo}{}
\AtEndDocument{\addtocontents{tdo}{\string\Endoftdo}}
它可能可以将章节页码设为链接。对这个版本很满意。:)