Gültigkeitsbereichsprobleme mit \renewcommand innerhalb von \newcommand

Gültigkeitsbereichsprobleme mit \renewcommand innerhalb von \newcommand

Ich erstelle eine Umgebung, damit ich ein Buch mit Informationen schreiben kann, die alle auf dieselbe Weise formatiert sind, basierend auf der Umgebungsvorlage. Schließlich möchte ich in der Lage sein,

\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}

und formatieren Sie den Eintrag je nach Umgebung ordentlich und auf die gleiche Weise, eqdescriptionindem Sie etwa Folgendes tun:

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

    Favorite Color: \eqcolorval

    Notes: \eqnotesval
    }

Da Jim Doe keine Lieblingsfarbe hat und sein Feld leer ist, dachte ich, dass bei ihm ein Standardwert angezeigt wird, wie etwa no favorite color.

Ich dachte, dass es einfach wäre, einige Befehle zum Initialisieren und Festlegen der Werte innerhalb einer Umgebung so zu definieren:

\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} 
    }                       
}

Und ganz oben in der Umgebung könnte ich Folgendes einfügen:

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

Allerdings schlägt nicht nur der Init-Befehl fehl, sondern es treten auch allerlei Probleme beim Neudefinieren von Werten auf.

Gibt es eine prägnante Möglichkeit, kleine Vorlagen wie diese ohne komplizierte Syntax und doppelten Code zu definieren?

Antwort1

Sie können die Standardwerte am Anfang von lokal gfestlegen und sie dann in der Umgebung verwenden, wenn Sie , oder aufrufen . Das definiert alles neu, was bereits vorhanden ist. hat einen lokalen Gültigkeitsbereich, erfordert jedoch, dass die Definitionen definiert werden. Dies ist kein Problem, da Sie sie mit definieren :defeqdescription\renewcommand\eqname\eqcolor\eqnotes\gdef\renewcommand\begin{eqdescription}

Bildbeschreibung hier eingeben

\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}

verwandte Informationen