我想在我的文档中添加一些关于实际代码的评论,为此我想我会使用\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}
限制支架必须平衡,%
这是不允许的。