答案1
问题是,当 TeX 执行操作时\write
(例如,将条目添加到待办事项列表时),它处于无模式并且不会排版,但会扩展宏和条件。
你可以定义自己的强命令:
\NewDocumentCommand{\MathModeTF}{mm}{\ifmmode #1\else #2\fi}
或者
\DeclareRobustCommand{\MathModeTF}[2]{\ifmmode #1\else #2\fi}
(我更喜欢前者)因此条件的评估被延迟到排版完成为止。可以这样称呼它
\MathModeTF{MATH}{TEXT}
另一方面,LaTeX 内核已经具备了\TextOrMath{TEXT}{MATH}
仅切换参数的功能。
\documentclass{article}
\pagestyle{empty}
\usepackage{todonotes}
\begin{document}%
\listoftodos
\todo{\(\TextOrMath{TEXT}{MATH}\)}%%% $…$ instead of \(…\) fails as well.
\end{document}
答案2
为了获得“通用”解决方案,此答案演示了如何“解决”\protect
等问题。
\documentclass{article}
\pagestyle{empty}
\usepackage{todonotes}
\usepackage{etoolbox}
\begin{document}%
\listoftodos
\todo{\(\protect\ifmmode MATH \protect\else TEXT\protect\fi\)}
\todo{\protecting{\(\ifmmode MATH \else TEXT\fi\)}} % need etoolbox
\end{document}
两种方法均可。