浮点数使用宏分隔列表,如\@freelist
。Source2e 使用宏(如 和 )显示它们\@next
,但\@cons
没有显示定义。拥有自解析列表的想法很有趣,而且可能很有效。
那么有没有关于如何使用宏分隔列表的教程?如果没有,我应该写一个吗?
答案1
\@cons
这显示了使用和\@next
(或多或少)的效果。
\documentclass{article}
\parindent=0pt
\parskip=\baselineskip
\makeatletter
\def\printelt#1{{\def\@elt##1{\the##1 }#1}}
% see \@cons: merges #1 and #2 into #1
\def\cons#1#2{\begingroup\let\elt\relax\xdef#1{#1\elt #2}\endgroup}
% see \@next: #1=macro name, #2=list, #3=extra code if not empty, #4=code if empty
\def\next#1#2#3#4{\ifx#2\empty #4\else \expandafter\xnext #2\@@#1#2#3\fi}
\def\xnext \elt #1#2\@@#3#4{\def#3{#1}\gdef#4{#2}}% \@@ used as delimiter
\makeatother
\begin{document}
\noindent\expandafter\printelt\csname @freelist\endcsname
\def\mylist{\elt 1}%
\cons{\mylist}{2}%
\cons{\mylist}{3}%
\cons{\mylist}{4}%
\def\elt#1{ #1}
\mylist
\next\test\mylist{}{}
\test
\mylist
\end{document}