\newcommand 내부의 \renewcommand 관련 범위 문제

\newcommand 내부의 \renewcommand 관련 범위 문제

환경 템플릿을 기반으로 동일한 형식의 정보를 담은 책을 작성할 수 있도록 환경을 만들고 있습니다. 결국에는 글을 쓰고 싶다.

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

eqdescription다음과 같은 작업을 수행하여 환경에 따라 항목 형식을 훌륭하고 동일한 방식으로 지정합니다 .

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

    Favorite Color: \eqcolorval

    Notes: \eqnotesval
    }

Jim Doe는 좋아하는 색상이 없기 때문에 공백이므로 no favorite color.

환경 내에서 값을 초기화하고 설정하는 몇 가지 명령을 정의하는 것은 다음과 같이 쉬울 것이라고 생각했습니다.

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

그리고 환경의 맨 위에 다음을 넣을 수 있습니다.

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

그러나 init 명령이 실패할 뿐만 아니라 값 재정의와 관련된 모든 종류의 문제가 발생합니다.

복잡한 구문과 중복 코드 없이 이와 같은 작은 템플릿을 정의하는 간결한 방법이 있습니까?

답변1

를 시작할 때 기본값을 g로컬로 설정 한 다음 , 또는 을 호출할 때마다 환경 내부에 기본값을 적용 할 수 있습니다 . 이미 존재하는 모든 것을 재정의할 것입니다 . 로컬 범위를 가지지만 정의를 정의해야 합니다. 다음을 사용하여 정의하므로 이는 문제가 되지 않습니다 .defeqdescription\renewcommand\eqname\eqcolor\eqnotes\gdef\renewcommand\begin{eqdescription}

여기에 이미지 설명을 입력하세요

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

관련 정보