todonotes - 内联枚举环境:尝试使用 marginnotes 和 ifinalign@ 绕过

todonotes - 内联枚举环境:尝试使用 marginnotes 和 ifinalign@ 绕过

我无法使用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}

在此处输入图片描述

相关内容