Problemas de alcance con \renewcommand dentro de \newcommand

Problemas de alcance con \renewcommand dentro de \newcommand

Estoy creando un entorno para poder escribir un libro que contenga información formateada de la misma manera según la plantilla del entorno. Al final me gustaría poder escribir

\begin{eqdescription}
    \eqname{Bob Doe}
    \eqcolor{Blue}
    \eqnotes{Bob will help you.}
\end{eqdescription}
\begin{eqdescription}
    \eqname{Jim Doe}
    \eqnotes{Jim will NOT help you.}
\end{eqdescription}

y tenga la entrada formateada de forma agradable y de la misma manera según el entorno eqdescriptionhaciendo algo como esto:

\newenvironment{eqdescription}{}{%
    \section{\eqnameval}

    Favorite Color: \eqcolorval

    Notes: \eqnotesval
    }

Debido a que Jim Doe no tiene un color favorito, el suyo está en blanco, así que pensé que aparecería con algún valor predeterminado, como no favorite color.

Pensé que definir algunos comandos para inicializar y establecer los valores dentro de un entorno sería fácil de esta manera:

\newcommand{\initcommand}[2]{%
    % Set the Default Value:
    \expandafter\newcommand\csname eq#1val\endcsname[0]{#2} 
    % Make a command \eq[name]{[avalue]} that sets it in the future.
    \expandafter\newcommand\csname eq#1\endcsname [1] {%
        \expandafter\renewcommand\csname eq#1val \endcsname[0]{##1} 
    }                       
}

Y que en la parte superior del entorno podría poner:

\initcommand{notes}{Default Value.}
\initcommand{name}{No Name.}
\initcommand{color}{No favorite color.}

Pero no sólo falla el comando init, sino que esto causa todo tipo de problemas con la redefinición de valores.

¿Existe una forma concisa de definir pequeñas plantillas como esta sin una sintaxis complicada ni código duplicado?

Respuesta1

Podrías configurar glocalmente deflos valores predeterminados al inicio de eqdescriptiony luego \renewcommanddentro del entorno cada vez que llames a \eqname, \eqcoloro \eqnotes. Redefinirán \gdeflo que ya existe. \renewcommandtendrá un alcance local, pero requiere que se definan las definiciones. Esto no es un problema ya que los estás definiendo con \begin{eqdescription}:

ingrese la descripción de la imagen aquí

\documentclass{article}

\newcommand{\eqname}{\renewcommand\eqnameval}
\newcommand{\eqcolor}{\renewcommand\eqcolorval}
\newcommand{\eqnotes}{\renewcommand\eqnotesval}

\newenvironment{eqdescription}
  {% Set defaults for this environment
   \gdef\eqnameval{No name.}%
   \gdef\eqcolorval{No favourite colour.}%
   \gdef\eqnotesval{Default value.}%
  }
  {%
    \section{\eqnameval}

    Favorite Color: \eqcolorval

    Notes: \eqnotesval%
  }

\setlength{\parindent}{0pt}% Just for this example

\begin{document}

\begin{eqdescription}
  \eqname{Bob Doe}
  \eqcolor{Blue}
  \eqnotes{Bob will help you.}
\end{eqdescription}
\begin{eqdescription}
  \eqname{Jim Doe}
  \eqnotes{Jim will NOT help you.}
\end{eqdescription}

\end{document}

información relacionada