![检查空文本时枚举中缺少项目编号](https://linux22.com/image/470190/%E6%A3%80%E6%9F%A5%E7%A9%BA%E6%96%87%E6%9C%AC%E6%97%B6%E6%9E%9A%E4%B8%BE%E4%B8%AD%E7%BC%BA%E5%B0%91%E9%A1%B9%E7%9B%AE%E7%BC%96%E5%8F%B7.png)
这是枚举中缺少项目编号。有报告称存在类似问题,但仅有的在非常特殊的情况下。在上一个问题中,宏被定义为如果第二个参数非空则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}