Todo 跨越多个段落

Todo 跨越多个段落

我可以像这样定义一个 todo 命令:

\newcommand\todo[1]{\textcolor{red}{TODO: #1}}

此命令不适用于中间有换行符的多个段落:

\todo{hello
world}

我如何创建可以对多个段落起作用的命令?

我知道这个todonotes包,但想知道是否可以使用\newcommand宏。

答案1

正如@daleif在评论中所说,问题在于其参数\textcolor不允许\par。在内部,宏定义为:

\def\textcolor#1#{\@textcolor{#1}}
\def\@textcolor#1#2#3{\protect\leavevmode{\color#1{#2}#3}}

如果\@textcolor定义为\long,则不会出现此问题。因此,原则上您可以重新定义此宏,但@daleif 的解决方案更方便。

\documentclass{article}
\usepackage{xcolor}

\newcommand{\todo}[1]{\textcolor{red}{TODO: #1}}

\begin{document}

\makeatletter
\long\def\@textcolor#1#2#3{\protect\leavevmode{\color#1{#2}#3}}
\makeatother

\todo{Hello 

 world}

\end{document}

答案2

这里的限制是\textcolor{color}{text}它只能处理最多一段文本。更简单的方法:

\newcommand\todo[1]{{\color{red}TODO: }}

此处的额外{}内容充当了群体的角色,因此颜色不会消失。

不过,我会看看 todonotes 或 fixme,而不是自己做太多解决方案。Fixme 可以配置为在页边距中打印文本,这样您\fxnote几乎可以在任何地方使用。由于 todonotes 的使用\marginpar(至少我上次查看时是这样),它在使用方面有几个限制。两者还可以列出文档中的所有注释 '

相关内容