在章节标题中添加 \todo

在章节标题中添加 \todo

我正在使用todonotes包,我想在章节标题中添加一条注释,例如:

\section{This is the section heading\todo{We should rethink the section title.}}

但是,这会抛出“未处于外部 par 模式”错误。我理解原因,但我想知道是否有办法做到这一点。

我之前曾问过将待办事项放在标题中的问题,建议的解决方案\todo[inline]{...}在这种情况下有效,但不能放在标题中\section{...}

编辑:经过一些帮助,我意识到错误是在目录的生成中。以下是 MWP:

\documentclass{book}

\usepackage{todonotes}
\long\def\intodo#1{\todo[inline]{#1}}

\begin{document}

\tableofcontents

\chapter{Chapter 1}

\section{Another Section Name \intodo{We should rethink the section title for this as well.}}

\end{document}

我收到的错误是:

./test.toc:2: Leaders not followed by proper glue.
<to be read again> 
                   \hfill 
l.2 ...e]{We should rethink the section title}}{3}

答案1

与 Fran 的想法类似,使用宏,但在 ToC 中重新定义它以禁用其在那里的含义,这样就\section[short title]{Other \todo}不需要了(但可能)。

为了在 ToC 中获得良好的输出,\intodo命令应该是强大的。

在这种方法中,该inline选项不是必需的,因为 ToDo - 内容不会进入该ToC区域。

\documentclass{article}
\usepackage{todonotes}

\DeclareRobustCommand{\intodo}[1]{%
  \todo[inline]{#1}%
}

\addtocontents{toc}{\begingroup\protect\renewcommand{\protect\intodo}[1]{}}
\AtEndDocument{%
  \addtocontents{toc}{\endgroup}
}

\begin{document}
\tableofcontents
\section{Section Name 
\intodo{We should rethink the section title}}
Some text 
\section{Another Section Name\intodo{We should rethink the section title for this as well.}}
More some text 
\end{document}

enter image description here

inline如果不使用该选项,则输出如下:

enter image description here

一种变体,利用目录以组为单位排版的事实:(由@egreg 提出)

\documentclass{book}

\usepackage{todonotes}
\usepackage{etoolbox}

\newrobustcmd\intodo[1]{\todo[inline]{#1}}

\makeatletter
% fix \intodo so it does nothing in the TOC
\patchcmd{\@starttoc}
  {\begingroup}
  {\begingroup\let\intodo\@gobble}
  {}{}
\makeatother

\begin{document}

\tableofcontents

\chapter{Chapter 1}

\section{Another Section Name \intodo{We should rethink the section title for this as well.}}

\end{document}

答案2

您也正在尝试在目录中插入待办事项注释。

使用\section[title for toc]{title for text\intodo{note text}}将按预期工作。

\documentclass{article}
\usepackage{todonotes}
\long\def\intodo#1{\todo[inline]{#1}}
\begin{document}
\tableofcontents
\section[Section Name]{Section Name 
\intodo{We should rethink the section title}}
Some text 
\section[Another Section Name]{Another Section Name
\intodo{We should rethink the section title for this as well.}}
More some text 
\end{document}

顺便说一句,我会\intodo用 来启动宏\bigskip

答案3

使用inline选项。或者更好的是,如果你有很多,你甚至可以为此定义一个宏。排队待办事项。

请参阅下面的代码:

\documentclass{article}

\usepackage{todonotes}
\long\def\intodo#1{\todo[inline]{#1}}

\begin{document}

\section{Section Name\todo[inline]{We should rethink the section title}}

\section{Another Section Name \intodo{We should rethink the section title for this as well.}}

\end{document}

相关内容