%% %% This is file `sample.tex', %% generated with the docstrip utility. %% %% The original source files were: %% %% xfor.dtx (with options: `sample.tex,package') %% %% xfor.dtx %% Copyright 2009 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license of (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% %% This work has the LPPL maintenance status `maintained'. %% %% The Current Maintainer of this work is Nicola Talbot. %% %% This work consists of the files xfor.dtx and xfor.ins and the derived files xfor.sty, sample.tex. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \listfiles \documentclass{article} \usepackage{xfor} \makeatletter \newtoks\tmptok \newcommand{\insertinto}[2]{% \def\nlst{}% \@for\n:=#2\do{% \expandafter\tmptok\expandafter{\nlst}% \ifnum\n>#1\relax \edef\newstuff{\number#1,\n}% % end for loop at the end of this iteration \@endfortrue \else \edef\newstuff{\n}% \fi \ifx\nlst\@empty \edef\nlst{\newstuff}% \else \edef\nlst{\the\tmptok,\newstuff}% \fi }% \if@endfor % loop may have been terminated during final iteration, in % which case \@forremainder is empty. \ifx\@forremainder\@empty % do nothing \else % loop prematurely ended, append remainder of original list % to new list \expandafter\tmptok\expandafter{\nlst}% \edef\nlst{\the\tmptok,\@forremainder}% \fi \else % wasn't prematurely terminated, so new value hasn't been added. % Add now. \expandafter\tmptok\expandafter{\nlst}% \ifx\nlst\@empty \edef\nlst{\number#1}% \else \edef\nlst{\the\tmptok,\number#1}% \fi \fi \global\let#2=\nlst } \newcommand{\insertionsort}[1]{% \def\sortedlist{}% \@for\val:=#1\do{{\insertinto{\val}{\sortedlist}}}% \let#1=\sortedlist} \makeatother \begin{document} Unsorted list: \def\mylist{4,2,7,1,10,11,20,15}\mylist. \insertionsort{\mylist}% Sorted list: \mylist. Iterate through the list (next element in parentheses): \makeatletter \@for\n:=\mylist\do{% \n \ifx\@xfor@nextelement\@nnil % last iteration \else (\@xfor@nextelement); \fi }. \end{document} \endinput %% %% End of file `sample.tex'.