我无法使用todonotes
(或者marginnote
但这不在 MWE 中,因为我认为我没有正确设置先决条件)在内联枚举列表中。
我认为我得到了边距错误,因为我处于对齐环境中(也许我错了)我试图通过检查对齐环境来增强我的功能,以便我可以提供一种替代方案来切换,marginnote
但这没有用。
实际上,这个对齐检查甚至无法编译,所以我不得不将其注释掉。
我不知道这是否有任何区别,但在我的非 MWE 示例中,这个新命令位于 cls 文件中,并且正如您在下面看到的,我尝试过使用和不使用\makeatletter
/
\documentclass{article}
\usepackage{expl3}
\usepackage{xparse}
\usepackage{xpatch}
\usepackage{letltxmacro}
\usepackage{amsmath}
\usepackage{todonotes}
\usepackage{marginnote}
\usepackage{enumerate}
\usepackage[shortlabels,inline]{enumitem}
%\makeatletter
\DeclareDocumentCommand{\TODOblock}{ O{@general} +m }
{
\ifdefined\HCode
\textbf{\textbf{(NOTE: #2)}}
\else
%\IfNoValueF {#2} { lightslategray }
\todo[inline,color=#1]{\unexpanded{\unexpanded{\textbf{#1:\\}#2}}}
\fi
}
\DeclareDocumentCommand{\TODOnote}{ O{@general} +m }
{
\ifdefined\HCode
\textbf{\textbf{(NOTE: #2)}}
\else
%\ifinalign@
% TEXT%\marginnote[size=\scriptsize,color=#1]{\unexpanded{\unexpanded{\textbf{#1:\\}#2}}}
%\else
\todo[size=\scriptsize,color=orange]{\unexpanded{\unexpanded{\textbf{#1:\\}#2}}}
%\fi
\fi
}
%\makeatother
\begin{document}
Hi heres a list \TODOnote{Of course I can do this}
\begin{enumerate}
\item an item \TODOnote{I can do this}
\item next item
\end{enumerate}
Hi heres a list that is inline
\begin{enumerate*}
\item an item
\item next item %\TODOnote{I can't do this}
\end{enumerate*}
\end{document}
更新
为了回应一个似乎已被删除的答案,我尝试将自定义 TODO 嵌套在 marginpar 中,即: \marginnote{\todo[inline,size=\scriptsize,color=orange]{\unexpanded{\unexpanded{\textbf{#1:\\}#2}}}}
但当有大量评论实际上堆叠在一起时,这无法很好地对齐框。这确实解决了对齐问题,但对齐检测仍然不起作用,所以我无法利用这种可能性,即使专门针对对齐环境的有限出现。
更新2
这个被删除的答案还提出了一种使用内联版本的解决方法。在我拥有的少数对齐环境中,我可以将其作为有限的解决方法,但这仍然取决于\ifinalign@
结构的工作原理...
答案1
\ifinalign@
与 无关enumerate*
。此环境使用框来避免不合时宜的换行,因此命令\todo
最终会进入禁忌星球(必须位于外层)。
一种可能的解决方案是检查\todo
纸币是否放在不好的地方,\ifinner
并在盒子结束时延迟其工作。需要跳起来二水平。
\documentclass{article}
\usepackage{expl3}
\usepackage{xparse}
\usepackage{xpatch}
\usepackage{letltxmacro}
\usepackage{amsmath}
\usepackage{todonotes}
\usepackage{marginnote}
\usepackage{enumerate}
\usepackage[shortlabels,inline]{enumitem}
\NewDocumentCommand{\TODOblock}{ O{@general} +m }{%
\ifdefined\HCode
\textbf{\textbf{(NOTE: #2)}}
\else
\todo[inline,color=#1]{\unexpanded{\unexpanded{\textbf{#1:\\}#2}}}
\fi
}
\NewDocumentCommand{\TODOnote}{ O{@general} +m }{%
\ifdefined\HCode
\textbf{\textbf{(NOTE: #2)}}
\else
\ifinner
\gdef\thisnote{%
\todo[size=\scriptsize,color=orange]{\unexpanded{\unexpanded{\textbf{#1:\\}#2}}}%
}\aftergroup\aftergroup\aftergroup\thisnote
\else
\todo[size=\scriptsize,color=orange]{\unexpanded{\unexpanded{\textbf{#1:\\}#2}}}%
\fi
\fi
}
\begin{document}
Hi heres a list \TODOnote{Of course I can do this}
\begin{enumerate}
\item an item \TODOnote{I can do this}
\item next item
\end{enumerate}
Hi heres a list that is inline
\begin{enumerate*}
\item an item
\item next item\TODOnote{I can't do this}
\end{enumerate*}
\end{document}