在收集项目时,我希望避免首尾空白行和空格。我举个例子来解释。
这是我的代码
\documentclass{article}
\usepackage{getitems}
\NewEnviron{test}{
\expandafter\gatheritems\expandafter{\BODY}
}{}
\begin{document}
\begin{test}
Text
\item one%
\item
two
\end{test}
X\gathereditem{1}\ignorespaces X
X\gathereditem{2}\ignorespaces X
\end{document}
输出为
XoneX
X
two
X
好吧,我想删除所有空格\par
和其他内容,并将 的输出设为X\gathereditem{2}\ignorespaces X
。XtwoX
换句话说,我想忽略项目实际内容前面和后面的所有空白行和空格。
注意:我对一般用途感兴趣,因此一般情况下,\gathereditem{2}
可能包含复杂的文本,如数学公式和嵌套环境(如枚举、逐项列出),我不想弄乱它们。只需删除首尾空白行和空格即可。
listofitems
注意:我对包有同样的问题
答案1
包listofitems
可以吸收\par
s。但是,它将无法区分多段项目和两个连续项目,如最后一种情况所示。
\documentclass{article}
\usepackage{listofitems,environ}
\setsepchar{\item||\par}
\ignoreemptyitems
\NewEnviron{test}{
\greadlist*\mylist{\BODY}
}{}
\begin{document}
\begin{test}
Text
\item one%
\item
two
\item
First par
Second par
\end{test}
X\mylist[1]X
X\mylist[2]X
X\mylist[3]X
X\mylist[4]X
X\mylist[5]X
\end{document}
另一种方法是引入一个新命令\mylistminuspars[<list number>]
,通过使用嵌套列表来删除参数:
\documentclass{article}
\usepackage{listofitems,environ}
\setsepchar{\item/\par}
\ignoreemptyitems
\NewEnviron{test}{
\greadlist*\mylist{\BODY}
}{}
\def\mylistminuspars[#1]{%
\foreachitem\z\in\mylist[#1]{%
\z%
}%
}
\begin{document}
\begin{test}
Text
\item one%
\item
two
\item
First par
Second par
\end{test}
X\mylistminuspars[1]X
X\mylistminuspars[2]X
X\mylistminuspars[3]X
X\mylistminuspars[4]X
\end{document}
最后,如果想保留除前导和尾随部分之外的部分,对上述内容进行小幅修改即可获得:
\documentclass{article}
\usepackage{listofitems,environ}
\setsepchar{\item/\par}
\ignoreemptyitems
\NewEnviron{test}{
\greadlist*\mylist{\BODY}
}{}
\def\mylistminuspars[#1]{%
\foreachitem\z\in\mylist[#1]{%
\z%
\ifnum\zcnt<\listlen\mylist[#1]\par\fi
}%
}
\begin{document}
\begin{test}
Text
\item one%
\item
two
\item
First par
Second par
\end{test}
X\mylistminuspars[1]X
X\mylistminuspars[2]X
X\mylistminuspars[3]X
X\mylistminuspars[4]X
\end{document}