待办事项和逐字记录

待办事项和逐字记录

我想在我的文档中添加一些关于实际代码的评论,为此我想我会使用\verb\begin{verbatim},但事实证明todonotes包不喜欢这样:

\documentclass{minimal}

\usepackage{todonotes}

\begin{document}

\todo{\verb|Hello!|}

\end{document}

这又导致了一个美丽的错误:

! Argument of \reserved@a has an extra }.
<inserted text> 
                \par 
l.7 \todo{\verb|Hello!|}

类似的问题也适用于\begin{verbatim}

那么...我如何将逐字文本/代码放入我的待办事项注释中?

答案1

这里有一种方法:

\documentclass{article}
\usepackage{todonotes}
\usepackage{xparse}
\newcounter{verbtodo}
\renewcommand{\theverbtodo}{\roman{verbtodo}}
\makeatletter
\NewDocumentCommand{\verbtodo}{v}{%
  \stepcounter{verbtodo}%
  \global\@namedef{verbtodo@\theverbtodo}{#1}%
  \todo{\texttt{\expandafter\protect\csname verbtodo@\theverbtodo\endcsname}}%
}
\makeatother

\begin{document}
\verbtodo|Hello${okp}^&|

\listoftodos

\end{document}

限制:\listoftodos命令必须放在文档末尾。这应该不是什么大问题。


以下更复杂的版本也允许\listoftodos在开始时拥有。

\documentclass{article}
\usepackage{todonotes}
\usepackage{xparse}
\newcounter{verbtodo}
\renewcommand{\theverbtodo}{\roman{verbtodo}}
\makeatletter
\NewDocumentCommand{\verbtodo}{v}{%
  \refstepcounter{verbtodo}\label{verbtodo@\theverbtodo}%
  \global\@namedef{verbtodo@\theverbtodo}{#1}%
  \addtocontents{tdo}{\defineverbtodo{\theverbtodo}|#1|}%
  \todo{\texttt{\expandafter\protect\csname verbtodo@\theverbtodo\endcsname}}%
}
\NewDocumentCommand{\defineverbtodo}{mv}{%
  \@namedef{verbtodo@#1}{#2}}
\makeatother

\begin{document}
\listoftodos
\verbtodo|Hello${okp}^&|


\end{document}

限制支架必须平衡,%这是不允许的。

相关内容