检查空文本时枚举中缺少项目编号

检查空文本时枚举中缺少项目编号

这是枚举中缺少项目编号。有报告称存在类似问题,但仅有的在非常特殊的情况下。在上一个问题中,宏被定义为如果第二个参数非空则DoIfNonEmptyText执行它。在很多情况下,它对我来说都很好用,但在一些特定情况下,我得到了#1

出现问题 — — 可能缺少某个 \item。

在下面的 MWE 中,第一个\DoIfNonEmptyText{\ExampleVar}{}是问题所在,并导致此错误消息。在实际用例 #2 中,此调用执行了其他代码,但不产生任何输出。通过禁用上述错误消息,我得到了如下所示的输出:

在此处输入图片描述

\item请注意重复的项目编号。即使环境中只有一个enumerate。在这种特定情况下,如果出现以下情况,则不会出现此问题:

  • wrapfigure未使用,或

  • 显示数学enumerate被内联数学取代。

问题:

我需要做哪些改变才能解决DoIfNonEmptyText这个问题?

参考:

代码:

\documentclass{article}
\usepackage{wrapfig}
\usepackage[strict]{changepage}

\usepackage{xcolor}\pagecolor{white}

\makeatletter
%% https://tex.stackexchange.com/questions/86547
\newcommand\IgnoreMissingItemError{\let\@noitemerr\relax}

\newcommand{\DescriptionVar}{}%
\newcommand{\SetDescription}[1]{\renewcommand{\DescriptionVar}{#1}}

\newcommand{\ExampleVar}{}%
\newcommand{\SetExample}[1]{\renewcommand{\ExampleVar}{#1}}

\newsavebox{\@NonEmptyTestBox}
\newcommand{\DoIfNonEmptyText}[1]{% Actually takes two parameters
  %% https://tex.stackexchange.com/a/57358/4301 (replaced sbox0 with \@NonEmptyTestBox)
  \begingroup
  \savebox{\@NonEmptyTestBox}{%
      \vbox{\everypar{}#1}%
  }%
  \ifdim\wd\@NonEmptyTestBox=\z@\relax
    \endgroup
    \expandafter\@gobble
  \else
    \endgroup
    \expandafter\@firstofone
  \fi
}
\makeatother


\newcommand{\PrintBody}{%
    \DescriptionVar%
    \IgnoreMissingItemError%
    \DoIfNonEmptyText{\ExampleVar}{}% <-- This is problem. Needs \IgnoreMissingItemError
    \DoIfNonEmptyText{\ExampleVar}{%
        \medskip\par
        \textbf{Example:}
        \smallskip\par
        \begin{adjustwidth}{1.0cm}{0.0pt} 
            \ExampleVar
        \end{adjustwidth}%
    }%
}%

\begin{document}
\SetDescription{%
    \begin{wrapfigure}{r}{4.0cm}%
        \fbox{xxxxxx}%
    \end{wrapfigure}%
    Some Text
}%
\SetExample{%    
    \begin{enumerate}
        \item \[ x + y \]
    \end{enumerate}%
}
\PrintBody
\end{document}

相关内容