What are the differences between \newdimen, \newskip, and\newlength?

When should I use each of them? Please give me a non-trivial example for each case.

2 Answers 2


\newlength is the LaTeX2e version of \newskip. It has extra check to avoid redefinition or illegal name. In LaTeX2e, it is defined


For example,

\newlength\foo % OK
\newlength\foo % redefinition ERROR!

\newlength\endbar % ERROR: \endbar is illegal command name in LaTeX2e.
% It is reserved by LaTeX kernel to define bar environment together with \bar

\newskip only allocates a new skip (glue, or rubber space) register. If you use low-level TeX command \newskip instead, no error message will be shown.

You should always use \newlength rather than \newskip in LaTeX.

\newdimen is another low-level TeX macro that allocates a new dimension register, it is different with \newskip. They have different meaning. For example,

\rigidlength=2pt % or \setlength{\rigidlength}{2pt}

\newlength\rubberlength % you cannot use \newdimen here
\setlength{\rubberlength}{2pt plus 2pt minus 1pt}

\newlength is LaTeX syntax and always a skip register:

\foo=1cm plus 1mm minus 3mm
\bar=1cm %plus 1mm minus 3mm % not possible
\setlength\baz{1cm plus 1mm minus 3mm} 
\the\foo \par
\the\bar \par
  • When should I use \newdimen, \newlength and \newskip? Commented Jul 12, 2011 at 12:41
  • 5
    @xport: For LaTeX high-level code use \newlength. Use \newdimen for lower-level code if you are sure that you only need a rigid dimension. \newskip also allows you to add stretch-amounts so the value can be a little higher or lower if required, which is useful for inter-word and inter-paragraph skips to fill the given size better. Commented Jul 12, 2011 at 12:54
  • 3
    \newlength tests if the command (length) already exists, \newdimen and newskip overwrite an already existing definition
    – user2478
    Commented Jul 12, 2011 at 12:59

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .