以下代码使用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
。这是一个错误还是我做错了什么?无论哪种情况,我该如何使用\dolistloop
with
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}