宏分隔列表

宏分隔列表

浮点数使用宏分隔列表,如\@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}

演示

相关内容