我可以像这样定义一个 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
(至少我上次查看时是这样),它在使用方面有几个限制。两者还可以列出文档中的所有注释 '