Compilateur LaTeX en ligne
www.cpierquet.fr
fichiers/l3lofi.tex
↓ télécharger
\documentclass{article}
\usepackage{amsmath}
\usepackage{pgffor}

\ExplSyntaxOn
\cs_generate_variant:Nn \seq_set_split:Nnn { Nno }

\NewDocumentCommand\readonelevellist{ O{,} m m }
{
	% #1 = séparateur principal (par défaut: ,)
	% #2 = nom de la structure (ex: maliste)
	% #3 = contenu de la liste
	
	% Stocker le séparateur principal
	\tl_if_exist:cF { g__pfl_#2_mainsep_tl }
	{ \tl_new:c { g__pfl_#2_mainsep_tl } }
	\tl_gset:cn { g__pfl_#2_mainsep_tl } { #1 }
	
	%liste à construire
	\seq_if_exist:cF { g__pfl_#2_main_seq }
	{ \seq_new:c { g__pfl_#2_main_seq } }
	\seq_clear:c { g__pfl_#2_main_seq }
	\seq_set_split:Nno \l_tmpa_seq { #1 } { #3 }
	\seq_gset_eq:cN { g__pfl_#2_main_seq } \l_tmpa_seq
	
	% Stocker le nombre d'éléments
	\int_if_exist:cF { g__pfl_#2_count_int }
	{ \int_new:c { g__pfl_#2_count_int } }
	\int_gset:cn { g__pfl_#2_count_int } { \seq_count:c { g__pfl_#2_main_seq } }
	
	% Créer la macro \#2len qui retourne le compte
	\cs_gset:cpn { #2len } 
	{ \int_use:c { g__pfl_#2_count_int } }
	
	% Créer la macro \#3{i} qui retourne l'élément i
	\exp_args:Nc \NewDocumentCommand { #2 } { m O{} }
	{
		% ##1 = index, ##2 = macro de sortie (optionnel)
		\int_set:Nn \l_tmpa_int { \int_eval:n { ##1 } }
		\tl_clear:N \l_tmpa_tl
		% Test de longueur
		\int_compare:nTF { \l_tmpa_int <= \int_use:c { g__pfl_#2_count_int } }
		{
			\tl_set:Nx \l_tmpa_tl { \seq_item:cn { g__pfl_#2_main_seq } { \int_use:N \l_tmpa_int } }
			\tl_if_empty:nTF { ##2 }
			{
				% Pas de macro fournie : afficher directement
				\tl_use:N \l_tmpa_tl
			}
			{
				% Macro fournie : stocker dans ##2
				\tl_set_eq:NN ##2 \l_tmpa_tl
			}
		}
		{
			\tl_if_empty:nTF { ##2 }
			{
				% Pas de macro fournie : afficher directement -none-
				\text{-none-}
			}
			{
				% Macro fournie : stocker dans ##2
				\tl_set:Nn \l_tmpa_tl { }
				\tl_set_eq:NN ##2 \l_tmpa_tl
			}
		}
	}
}
\ExplSyntaxOff

\begin{document}

\readonelevellist{malisteA}{A1,A2,A3,{A4,A5},A6,on a $x+\frac{1}{x}$}
Longueur := \malisteAlen\\
\foreach \i in {1,...,\malisteAlen}{%
	Élément n°\i:= \malisteA{\i}\\
}

\def\mamacroliste{A1,A2,A3,{A4,A5},A6,on a $x+\frac{1}{x}$}
\readonelevellist{malisteB}{\mamacroliste}
Longueur := \malisteAlen\\
\foreach \i in {1,...,\malisteAlen}{%
	Élément n°\i:= \malisteA{\i}\\
}

\end{document}