检查列表项是否为空

检查列表项是否为空

我需要检测是否存在空项以移动下一个项,如下例所示。我不知道使用 luatex 执行此操作的最佳方法是什么。非常感谢大家的帮助。

\documentclass{article}
\usepackage{luatextra}

\makeatletter
\newcounter{@questions}
\newcounter{@question}[@questions]
\newcounter{@subquestion}[@question]
\newenvironment{questions}[1][]%
{
    \refstepcounter{@questions}
    \newcommand{\question}{\stepcounter{@question}\item[\hspace{1cm}\arabic{@question})]}
    \newcommand{\subquestion}{\stepcounter{@subquestion}\item[\hspace{2cm}\alph{@subquestion})]}
    \trivlist
}{%
    \endtrivlist
}
\makeatother

\begin{document}

\begin{questions}
\question ok
\question
\subquestion ok
\subquestion ok
\question ok
\subquestion ok
\subquestion ok
\end{questions}

\end{document}

样本

答案1

这主要是一种 hack,但效果确实不错。您可以只使用环境{questionlist},然后增加“深度”计数器,这可能更简单。

\documentclass{scrartcl}

\usepackage{etoolbox}
\usepackage[shortlabels]{enumitem}

\newlist{questionlistA}{enumerate}{1}
\setlist[questionlistA]{label=\textup{\arabic*)}}
\newlist{questionlistB}{enumerate}{1}
\setlist[questionlistB]{label=\textup{\alph*)}}

\makeatletter

\newenvironment{questions}[1][]
 {\begin{questionlistA}[#1]
  \newcommand*\question{\ifdefstring{\@currenvir}{questionlistA}{\item}{\end{questionlistB}\item}}%
  \newcommand*\subquestion{\ifdefstring{\@currenvir}{questionlistB}{\item}{\begin{questionlistB}\item}}}
 {\ifdefstring{\@currenvir}{questionlistB}{\end{questionlistB}}{}%
  \end{questionlistA}}

\makeatother

\begin{document}

\begin{questions}
\question ok
\question
\subquestion ok
\subquestion ok
\question ok
\subquestion ok
\subquestion ok
\end{questions}

\end{document}

当然,第一个应该是\question,不能将\subquestion作为第一项。

在此处输入图片描述

相关内容