# Packages fighting' for the value of a length

I've recently written some macros for typesetting certain constructs used in linguistics (Discourse Representation Structures). I hit an issue whereby the svmono class was changing the value of \arraycolsep and so messing up the typesetting. (Cf. svmono array padding .) The solution I adopted was to put \setlength{\arraycolsep}{5pt} at the start of the file containing my macros. However... presumably svmono had a reason for changing \arraycolsep, and so I'm interfering with it. (Based on some reading around, I'm assuming that macros utilise the value of \arraycolsep at that point they are evaluated, rather than the value at the point when they are defined.)

In some sense, this is a very unsatisfactory situation -- my package and svmono are fighting for \arraycolsep, and whichever one loses will have a problem. Is there some way in which I can essentially say, "I want to use the following value of \arraycolsep for the macros defined in this package, without affecting other packages"?

-

Presumably the springer class reduces the table padding as it is designed for end use in journal pages with narrow widh compared to the typical a4/letter draft size (at least that's the usual reason)

Any environment based on tabular will use the current value of \tabcolsep if you want your own environments to have a different parameter the easiest way is to go

\newlength\mytabcolsep
\setlength\mytabcolsep{5in}

\newenvironment{myenvironment}
{\tabcolsep\mytabcolsep.....\begin{tabular}....}
{\end{tabular}.....}


That way the effective value of \tabcolsep is changed just within environments that you define. (If there are any nested tabular environments they would pick up the new value as well, if that is a problem your environment could just use \tabcolsep\mytabcolsep and then restore the original value before processing the user-supplied environment body.

-
That sounds perfect -- thank you. What is responsible for the change to \tabcolsep being local? Is it simply that changes to lengths inside environments don't propagate outside those environments? Or is it that changes inside {...} don't propagate outside the braces? –  Mohan Sep 6 '12 at 16:50
both of those things. {} groups and environments (which are \begingroup \endgroup` groups internally) both limit the scope of length settings (and newcommand definitions) –  David Carlisle Sep 6 '12 at 18:54