Here's a version of the formula environment that works in LyX.

\newcounter{formula}
\newenvironment{Formula}%
    {%
        \begin{list}{\theformula}%
            {%
                \setlength{\labelwidth}{\leftmargin - \labelsep}%
                \let\olditem=\item%
                \renewcommand{\item}{\refstepcounter{formula}\olditem}%
                \renewcommand{\makelabel}[1]{(##1)\hfil}%
            }%
    }
    {%
        \end{list}
    }
%End Formula environment

Note that this does not include the optional argument for creating a
cross-reference, since that would not make so much sense in LyX. (The
crossref would not appear in the references menu.)

The issue in getting the formula environment to work in LyX is this. As
I originally designed the environment (see my previous note), it was a
one-item list. If you wanted more than one formula, you had to use the
environment multiple times. But, in LyX, if you have successive Formula
environments, where these are defined as List_Environments, they are
treated as a /single/ Formula environment with multiple items. Wrong
result, since LyX will then output a bunch of \item commands, whereas
what we wanted was a bunch of \begin{Formula} commands. If you instead
use "LatexType Environment", then you get a single environment with
multiple paragraphs. (I've filed an enhancement request to resolve this
issue.)

The obvious thing to do would seem to be this:

\newenvironment{Formula}[1][xxx]%
    {%
        \begin{list}{\theformula}%
            {%
                \setlength{\labelwidth}{\leftmargin - \labelsep}%

\renewcommand{\makelabel}[1]{\refstepcounter{formula}(##1)\hfil}%
            }%
    }
    {%
        \end{list}
    }
%End Formula environment

So we're now stepping the counter /inside/ the \makelabel command, which
is called by \item, so the counter gets stepped each time.
Unfortunately, this simply doesn't work, because \refstepcounter doesn't
seem to do what it's meant to do here. The solution that does work is
the one above, where we redefine the \item command to step the counter
there.

Here's a layout, for those who are interested:

Style Formula
    Margin                First_Dynamic
    LatexType             List_Environment
    LatexName             Formula
    NextNoIndent          1
    LabelSep              xxxxxx
    LeftMargin            MMM
    ParSkip               0.4
    ItemSep               0.2
    TopSep                0.7
    BottomSep             0.7
    ParSep                0.3
    Align                 Block
    AlignPossible         Block, Left
    LabelType             Counter
    LabelCounter          formula
    LabelString           "(\arabic{formula})"
    LabelFont
      Shape               Up
      Series              Bold
    EndFont

    #define the environment
    Preamble
        \usepackage{calc}
        \usepackage{prettyref}
        \newcounter{formula}
        \newenvironment{Formula}%
            {%
                \begin{list}{\theformula}%
                    {%
                        \setlength{\labelwidth}{\leftmargin - \labelsep}%
                        \let\olditem=\item%

\renewcommand{\item}{\refstepcounter{formula}\olditem}%
                        \renewcommand{\makelabel}[1]{(##1)\hfil}%
                    }%
            }
            {%
                \end{list}
            }
        %End Formula environment
        \newrefformat{For}{(\ref{#1})}
    EndPreamble
End


Richard Heck


Reply via email to