Increment (or decrement) a parameter in LaTeX

  1. How can I increment or decrement a parameter in LaTeX?

    For example, suppose I create an environment foo as follows:

    \newenvironment{foo}[2]{\begin{tabular}{*{#1}c*{#2}r}}{\end{tabular}}

    I can write

    \begin{foo}{4}{3}
    <tabular data in seven columns>
    \end{foo}

    But in my application, if the first parameter is n, then second is always n-1. Is there a way to write this that passes only one parameter (in this case n), but which will produce the table with n + (n - 1) columns as in the environment foo?

    Decrementing the parameter #1 inside the newenvironment -- if it is possible -- would surely work, but I don't know how to do it.

    Note: The snippet
    \let\temp#1
    \advance\temp by -1

    doesn't work because if I pass the parameter 4, \temp takes the value 'the character 4', which can't follow the \advance command.

    I'm stuck. Any help?
     
  2. jcsd
  3. This solution was posted by Joseph Wright on LaTeX Community:

    "You don't want \let, you want to do things with numbers proper. The thing is that they then [need] to be assigned to TeX counters. You seem to want something like

    \newcount\mycount
    \newenvironment{foo}[1]
    {%
    \mycount #1\relax
    \advance\mycount -1\relax
    \begin{tabular}{*{#1}c*{\the\mycount}r}%
    }
    {\end{tabular}}

    Here, I'm using a TeX count register to do the maths. You can do the same with a LaTeX counter, but I find this route a bit easier for going downward. TeX assigns count registers locally, so the above should work in most cases."

    Thanks, Joseph.
     
Know someone interested in this topic? Share a link to this question via email, Google+, Twitter, or Facebook

Have something to add?
Similar discussions for: Increment (or decrement) a parameter in LaTeX
Loading...