TODONOTES 和 \reserved@a - 嵌套 itemize/enumerate 环境

TODONOTES 和 \reserved@a - 嵌套 itemize/enumerate 环境

我在尝试将 come 环境插入到内联待办事项注释中时遇到了问题...MWE 应该演示这一点。

\documentclass{article}

\usepackage{todonotes}
\usepackage{verbatim}

\begin{document}
\noindent

\todo[inline]{%
Problem when nesting objects like enumerate, itemize, or verbatims.  Others like \textbf{BOLD} work fine.
}
\todo[inline]{%
\begin{itemize}
\item A
\item B
\item C
\end{itemize}
}

\clearpage
\end{document}

有趣的是,生成的 pdf 完全可以接受,但是错误阻止了该过程的完成。

产生的错误: \reserved@a 的参数有一个额外的 }。 }

段落在 \reserved@a 完成之前结束。}

看着待办事项和逐字记录但这似乎不适用。

答案1

您不能在任何命令的参数中使用逐字逐句,包括\todo

对于itemize,这有效:

\documentclass{article}

\usepackage{todonotes}
\usepackage{verbatim}

\begin{document}

\todo[inline]{%
Problem when nesting objects like enumerate, itemize, or verbatims.
 Others like \textbf{BOLD} work fine.
}
\todo[inline]{%
\unexpanded{\unexpanded{\begin{itemize}
\item A
\item B
\item C
\end{itemize}}}
}

\end{document}

或者,使用\protect\begin{itemize}\protect\item\protect\end{itemize}:的参数\todo是移动的,因此必须保护脆弱的命令。

答案2

todonotes手动的(第 15 页)建议使用如下小页面创建宏:

\newcommand\todoin[2][]{\todo[inline, caption={2do}, #1]{
\begin{minipage}{\textwidth-4pt}#2\end{minipage}}}

\todoin{
Some text.
\begin{align}
    \sin(\theta)^2 + \cos(\theta)^2 = 1
\end{align}
A formula and a list
\begin{itemize}
    \item An item
\end{itemize}
}

根据手册,设置标题非常重要\todo,因此包将不会尝试将小页面嵌入到您的目录中,这会导致错误。

相关内容