Almacene el elemento anterior del bucle en una variable intermedia para la creación dinámica de comandos

Almacene el elemento anterior del bucle en una variable intermedia para la creación dinámica de comandos

Estoy creando comandos dinámicamente y me gustaría definirlos en función del valor actual en una lista de iteraciones. El problema es que el valor actual aparece como el último valor de la variable iterada.

Aquí hay un MWE. Este ejemplo obviamente no tiene sentido, pero se me ocurre una aplicación que recuerda el último valor del bucle. He probado muchas variaciones de \expandafter, \edefy no puedo resolverlo. He estado leyendo sobre expansión. Me gustaría definir alguna variable intermedia y enviarla a los comandos que genero para que muestre "1:1, 2:2".

ingrese la descripción de la imagen aquí

\documentclass[11pt,a4paper]{article}
\usepackage{etoolbox}
\begin{document}%
    \noindent%
    \newcounter{n}%
    \setcounter{n}{0}%
    \renewcommand{\do}[1]{%
        \let\Num#1%
        \setcounter{n}{#1}%
        \expandafter\newcommand\csname C\alph{n}\endcsname{\textbf{#1}: \Num}% create a command
    }%
    \docsvlist{1,2,3,4}%
\Ca\\
\Cb\\
\end{document}

EDITAR:

Aquí hay un ejemplo más ilustrativo. Me gustaría definir un comando que muestre el número actual y el número anterior en el bucle, pero el número anterior siempre es el último en la lista.

ingrese la descripción de la imagen aquí

\documentclass[11pt,a4paper]{article}
\usepackage{etoolbox}
\usepackage{xintexpr}
\begin{document}%
    \noindent%
    \newcounter{n}%
    \setcounter{n}{0}%
    \renewcommand{\do}[1]{%
        \edef\evenodd{\xintthe\xintiexpr\value{n}/:2\relax}% get the column num
        \ifnum\evenodd=0%
            \let\PrevNum#1%
        \fi
        \ifnum\evenodd=1%
            \expandafter\newcommand\csname C\alph{n}\endcsname{prev: \PrevNum, current: #1}% create a command
        \fi
        \setcounter{n}{#1}%
    }%
    \docsvlist{1,2,3,4,5,6}%
\Ca\\
\Cc\\
\Ce\\
\end{document}

Respuesta1

No está realmente claro cuál es el objetivo final. Sin embargo, \letno es la herramienta adecuada y deberías utilizarla \def. Además, debe acceder a la expansión de \PrevNum, en lugar de a la secuencia de control.

\documentclass[11pt,a4paper]{article}
\usepackage{etoolbox}
\usepackage{xintexpr}

\newcounter{n}
%\setcounter{n}{0}%
\renewcommand{\do}[1]{%
  \edef\evenodd{\xintthe\xintiexpr\value{n}/:2\relax}% get the column num
  \ifnum\evenodd=0
    \def\PrevNum{#1}%
  \fi
  \ifnum\evenodd=1
    \definetablecommand{C\alph{n}}{#1}{\PrevNum}%
  \fi
\setcounter{n}{#1}%
}
\newcommand{\definetablecommand}[3]{%
  \expandafter\definetablecommandaux\expandafter{#3}{#1}{#2}%
}
\newcommand{\definetablecommandaux}[3]{%
  \expandafter\newcommand\csname #2\endcsname{prev: #1, current #3}%
}

\docsvlist{1,2,3,4,5,6}

\begin{document}

\Ca

\Cc

\Ce

\end{document}

Tenga en cuenta que %después de las constantes es incorrecto y podría generar resultados inesperados.

Hacer esas cosas en el interior documenttambién es discutible.

ingrese la descripción de la imagen aquí

Con un estilo de programación diferente.

\documentclass[11pt,a4paper]{article}
\usepackage{xparse}

\ExplSyntaxOn

\NewDocumentCommand{\definetablecommands}{m}
 {
  \ilikethevegetable_dtc_main:n { #1 }
 }

\seq_new:N \l__ilikethevegetables_dtc_data_seq
\tl_new:N \l__ilikethevegetables_dtc_item_tl

\cs_new_protected:Nn \ilikethevegetable_dtc_main:n
 {
  \seq_set_from_clist:Nn \l__ilikethevegetables_dtc_data_seq { #1 }
  \seq_map_indexed_inline:Nn \l__ilikethevegetables_dtc_data_seq
   {% ##1 is the current item index, ##2 is the current item
    \int_if_odd:nTF { ##1 }
     {% remember the item
      \tl_set:Nn \l__ilikethevegetables_dtc_item_tl { ##2 }
     }
     {% define the control sequence
      \cs_new:cpx { C \int_to_alph:n { ##1 - 1 } }
       {
        \exp_not:n { prev:~} \exp_not:V \l__ilikethevegetables_dtc_item_tl ,~
        \exp_not:n { current:~ ##2 }
       }
     }
   }
 }

\ExplSyntaxOff

\definetablecommands{1,2,3,4,5,6}

\begin{document}

\Ca

\Cc

\Ce

\end{document}

información relacionada