Bien, entonces, aquí vamos.
Como puede ver a continuación, la parte principal de la codificación es analizar la entrada de rango separado por comas. Después de eso, es fácil verificar qué número estás haciendo en el entorno de enumeración (o lo que sea) y mostrar el elemento de manera condicional.
Puede copiar y pegar a partir de ahora en una .tex
documento vacío y que sólo se debe trabajar:
%% En primer lugar, estoy usando el paquete expl3 hacer la mayor parte de esta codificación. Hace algunas cosas más fáciles.
\documentclass{article}
\usepackage{expl3}
\ExplSyntaxOn
%% Aquí está la función de bucle sobre comas lista de entrada gama como -2,4-6,8,10-
:
\prg_new_conditional:Nnn \i_in_range:nn {TF,T,F} {
\bool_set_false:N \l_tmpa_bool
\clist_map_inline:nn {#2} {
\parse_range:w ##1 - \q_marker - \q_nil #1 \q_nil
}
\bool_if:NTF \l_tmpa_bool \prg_return_true: \prg_return_false:
}
%% Y la función auxiliar para volver si el argumento de entrada se encuentra dentro de la gama:
\cs_set:Npn \parse_range:w #1 - #2 - #3 \q_nil #4 \q_nil {
\tl_if_eq:nnTF {\q_marker}{#2}{
\intexpr_compare:nT {#4=#1} {\bool_set_true:N \l_tmpa_bool}
}{
\tl_if_empty:nTF {#2}{
\intexpr_compare:nT {#4>=#1} {\bool_set_true:N \l_tmpa_bool}
}{
\tl_if_empty:nTF {#1}{
\intexpr_compare:nT {#4<=#2} {\bool_set_true:N \l_tmpa_bool}
}{
\intexpr_compare:nT {#4>=#1} {
\intexpr_compare:nT {#4<=#2}
{\bool_set_true:N \l_tmpa_bool}
}
}
}
}
}
\cs_generate_variant:Nn \i_in_range:nnTF {nV}
%% Este es el comando a la entrada de cada elemento de la lista:
\newcommand\numitem[1]{
\i_in_range:nVTF {\value{enumi}+1}{\l_item_range_tl}{
\item #1
}{
\stepcounter{enumi}
}
}
%% Y entornos enumerados con un argumento de rango:
\newenvironment{someitems}[1]{
\tl_set:Nn \l_item_range_tl {#1}
\begin{enumerate}
}{
\end{enumerate}
}
\ExplSyntaxOff
%% Por último, un ejemplo:
\begin{document}
\begin{someitems}{-2,4-6,8,10-}
\numitem{one}\numitem{two}\numitem{three}
\numitem{four}\numitem{five}\numitem{six}
\numitem{seven}\numitem{eight}\numitem{nine}
\numitem{ten}\numitem{eleven}
\end{someitems}
\end{document}
La parte difícil consiguió recientemente discutió aquí: http://stackoverflow.com/questions/2402354/split-comma-separated-parameters-in-latex –
El bucle en sí es fácil; ver mi última respuesta para un ejemplo del análisis de rango que es un poco difícil escribir desde cero. –