etextools 和 etoolbox 命令 \dolistloop (\forlistloop) 之间不兼容?

etextools 和 etoolbox 命令 \dolistloop (\forlistloop) 之间不兼容?

以下代码使用etoolbox包将列表转换a,b,c为内部列表(称为\mylist),然后用冒号排版:a:b:c:。但是,当我加载etextools包(通过取消注释第二行)时,没有得到列表输出。

\documentclass{minimal}
\usepackage{etoolbox}
%\usepackage{etextools}
\begin{document}
A list:
\def\mylist{}
\forcsvlist{\listadd\mylist}{a,b,c}
\def\do#1{#1:}
\dolistloop{\mylist}
\end{document}

我怀疑这是一个错误,因为etextools声称依赖于etoolbox。这是一个错误还是我做错了什么?无论哪种情况,我该如何使用\dolistloopwith etextools(我想要这样的好东西\expandnext)?

笔记

  • \show\mylist在两种情况下都会产生相同的输出a|b|c|,因此问题\dolistloop在于\forlistloop\do
  • 使用时,该\forlistloop命令会变得更加复杂。etextools
  • 这个问题可能相关(但并不明显)。

答案1

这可能是etextools软件包中的一个错误。事实上,\forlistloop当前以与软件包不兼容的方式重新定义etoolbox。因此,请尝试:

\usepackage{etoolbox}
\let\origforlistloop\forlistloop
\usepackage{etextools}
\let\forlistloop\origforlistloop

答案2

如果你愿意使用期权包,你可以做

\documentclass{minimal}
%\usepackage{etoolbox} % you may load this if you like
%\usepackage{etextools} % load if you like
\usepackage{catoptions}

\begin{document}
% Add these elements to list container \mylist:
\docommalist{a,b,c}{\cptaddtolist\mylist{#1}}

% User callback for every item in \mylist. Don't print the last colon (:):
\def\mydo#1{#1\iflastindris\else:\fi}

% Do the looping over elements of \mylist. The star (*) form of \indrisloop expects
% a macro whose top level expansion contains the list items:
\indrisloop*\mylist\mydo
\end{document}

相关内容