我需要检测是否存在空项以移动下一个项,如下例所示。我不知道使用 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
作为第一项。