
Estou criando um ambiente para poder escrever um livro contendo informações todas formatadas da mesma forma com base no modelo de ambiente. Eventualmente, eu gostaria de poder escrever
\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}
e ter a entrada formatada de maneira adequada e da mesma maneira com base no ambiente, eqdescription
fazendo algo assim:
\newenvironment{eqdescription}{}{%
\section{\eqnameval}
Favorite Color: \eqcolorval
Notes: \eqnotesval
}
Como Jim Doe não tem uma cor favorita, a cor dele está em branco, então pensei que a cor dele apareceria com algum valor padrão, como no favorite color
.
Achei que definir alguns comandos para inicializar e definir os valores dentro de um ambiente seria fácil assim:
\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}
}
}
E isso no topo do ambiente eu poderia colocar:
\initcommand{notes}{Default Value.}
\initcommand{name}{No Name.}
\initcommand{color}{No favorite color.}
Mas o comando init não apenas falha, como também causa todos os tipos de problemas com a redefinição de valores.
Existe uma maneira concisa de definir pequenos modelos como este sem sintaxe complicada e código duplicado?
Responder1
Você pode definir g
lobalmente def
os padrões no início de eqdescription
e, em seguida, dentro \renewcommand
do ambiente sempre que chamar \eqname
ou . O irá redefinir tudo o que já existe. terá um escopo local, mas exige que as definições sejam definidas. Isso não é um problema, pois você os define com :\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}