4

I suspect the keycommand and environ packages are not playing nicely together, because the following code gives an error. Can anybody explain what's going on?

\documentclass{article}

\usepackage{environ}
\usepackage{keycommand}
\usepackage{graphicx}

% Turn scalebox into an environment
\NewEnviron{scaleboxenv}[1]{%
  \scalebox{#1}{\BODY}%
}

% An environment with a named argument
\newkeyenvironment{scaled}[scale=1]{%
  % My real code does some more stuff here
  \begin{scaleboxenv}{\commandkey{scale}}
}{%
  \end{scaleboxenv}
}

\begin{document}

\begin{scaled}[scale=0.7]
Hello
\end{scaled}

\end{document}

1 Answers1

5

This has nothing to do with keycommand; when LaTeX finds \begin{scaleboxenv} it need to see \end{scaleboxenv}, but it doesn't because it finds \end{scaled}, which triggers the error.

\documentclass{article}

\usepackage{environ}
\usepackage{keycommand}
\usepackage{graphicx}

% Turn scalebox into an environment
\NewEnviron{scaleboxenv}[1]{%
  \scalebox{#1}{\BODY}%
}

% An environment with a named argument
\newkeyenvironment{scaled}[scale=1]{%
  % My real code does some more stuff here
  \scaleboxenv{\commandkey{scale}}
}{%
  \endscaleboxenv
}

\begin{document}

\begin{scaled}[scale=0.7]
Hello
\end{scaled}

\end{document}

Are you sure you want to use keycommand?

Here's a keycommand and environ free version.

\documentclass{article}
\usepackage{graphicx}
%\usepackage{keyval} % already loaded by graphicx

\makeatletter
\newsavebox{\wickscalebox}
\newenvironment{scaled}[1][]
 {%
  % My real code does some more stuff here
  \setkeys{wickscale}{#1}%
  \begin{lrbox}{\wickscalebox}%
 }
 {%
  \end{lrbox}%
  \scalebox{\wick@scale}{\usebox{\wickscalebox}}%
 }
\define@key{wickscale}{scale}{\def\wick@scale{#1}}
\makeatother


\begin{document}

\begin{scaled}[scale=0.7]
Hello
\end{scaled}

\end{document}
egreg
  • 1,121,712