# how to define commands within custom environment

I am working on a custom .cls for typesetting my CV. I am trying to create a custom environment to provide formatting for job/education history. I would like to specify it as follows:

\begin{cvsection}
\cvdate{xx-xx-xxxx}
\cvcompany{Some company & Co.}
\cvposition{Toilet cleaner}
\cvcomment{I love cleanin' dem toilets!}
\end{cvsection}


So I've defined my environment and tried to use \newcommand... within the environment definition. LaTeX doesn't like that so what is the best way to approach this?

One purpose of organizing an environment in that way is to allow flexibility in the input.

You don't need to define the commands inside the environment; a frequently used strategy is the following:

\newcommand{\givencvdate}{REQUIRED!}
\newcommand{\givencvcompany}{REQUIRED!}
\newcommand{\givencvposition}{REQUIRED!}
\newcommand{\givencvcomment}{} % this is optional

\newenvironment{cvsection}
{\begin{flushleft}}
{\textbf{\givencvdate}\\
\givencvcompany\\
\givencvposition
\ifx\empty\givencvcomment\else\\[.5ex] \textit{\givencvcomment}\fi
\end{flushleft}}


In this way the order one specifies the data in the environment is irrelevant. Let's see a couple of examples

\begin{cvsection}
\cvdate{xx-xx-xxxx}
\cvcompany{Some company \& Co.}
\cvposition{Toilet cleaner}
\cvcomment{I love cleanin' dem toilets!}
\end{cvsection}

\begin{cvsection}
\cvposition{Toilet cleaner}
\cvdate{xx-xx-xxxx}
\cvcompany{Another company \& Co.}
\end{cvsection}


Of course you have to adjust the definition of cvsection to suit your needs.

• basically I was doing it wrong (which was what I thought). Thank-you. Oct 10, 2012 at 14:37
• @bugsduggan You can define the commands in the environment, so that they can't be used outside. Just move the block of definitions in the "beginning" part of cvsection (between { and \begin{flushleft}) but remember to write ##1 instead of #1. Oct 10, 2012 at 14:43
• @egreg How could it be done using LaTeX3 syntaxis? Do I still need to use the ##1 form?
– Dox
Apr 29, 2015 at 20:05
• @Dox Yes, there's no difference in that respect: it's a TeX general fact. I see no real advantage in doing it in expl3 syntax, except perhaps the test about emptyness. Apr 29, 2015 at 20:54