我需要从逐项环境中提取主体和项目,例如
\begin{itemize}
HERE THE BODY
\item first item
\item second item
...
\end{itemize}
有人告诉我 getitems 包可以完成这个任务。但我无法使用它。哪些命令可以 1) 提取正文,以及 2) 提取和排序项目?
答案1
这是一种方法listofitems
。
限制:忽略空白项;不允许使用可选参数\item
。
排序是另一个问题。你还没有真正说明你的意思。
如果你还 希望在调用时将它们打印出来。
\documentclass{article}
\usepackage{listofitems,environ}
\NewEnviron{itemizesave}{%
\setsepchar{\item}%
\ignoreemptyitems
\greadlist*\myitem{\BODY}%
}
\begin{document}
\begin{itemizesave}
\item first item
\item second item
...
\item the last item
\end{itemizesave}
My first item is ``\myitem[1]''.
Then I have ``\myitem[2]''.
The list length is \myitemlen, so the final item I have is ``\myitem[3]''.
\end{document}
补充
OP 向我提出了另一个问题,进一步扩大了问题范围,包括第一个问题之前的问题文本和在后面\item
用 表示正确答案。*
\item
以下是该问题的解决方案:
\documentclass{article}
\usepackage{listofitems,environ}
\NewEnviron{itemizesave}{%
\setsepchar{\item/*}%
\greadlist*\myitem{\BODY}%
\gdef\theanswer{0}%
\foreachitem\z\in\myitem[]{%
\ifnum\listlen\myitem[\zcnt]>1\relax
\xdef\theanswer{\the\numexpr\zcnt-1}\fi
}%
\xdef\numberofchoices{\the\numexpr\myitemlen-1\relax}
}
\newcommand\thequestion{\myitem[1]}
\def\thechoice[#1]{\edef\tmp{\listlen\myitem[1+#1]}%
\myitem[1+#1,\tmp]}
\begin{document}
\begin{itemizesave}
text of question
\item first choice
\item* second choice
\item the last choice
\end{itemizesave}
The question is ``\thequestion''.
My first choice is ``\thechoice[1]''.
Then I have ``\thechoice[2]''.
The number of choices is \numberofchoices, so
the final choice I have is ``\thechoice[3]''.
The correct answer is choice \theanswer.
\end{document}