
환경 템플릿을 기반으로 동일한 형식의 정보를 담은 책을 작성할 수 있도록 환경을 만들고 있습니다. 결국에는 글을 쓰고 싶다.
\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
로컬로 설정 한 다음 , 또는 을 호출할 때마다 환경 내부에 기본값을 적용 할 수 있습니다 . 이미 존재하는 모든 것을 재정의할 것입니다 . 로컬 범위를 가지지만 정의를 정의해야 합니다. 다음을 사용하여 정의하므로 이는 문제가 되지 않습니다 .def
eqdescription
\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}